ng-virtual-list 16.9.2 → 16.9.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/utils/cache-map.ts","../../../projects/ng-virtual-list/src/lib/utils/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/utils/track-box.ts","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/browser.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/utils/ease.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-modes.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-styles.ts","../../../projects/ng-virtual-list/src/lib/utils/get-shape-min-size.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.component.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.html","../../../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/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.module.ts","../../../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 * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * Normal group rendering.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n ADVANCED = 'advanced',\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n CHAT = 'chat',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import { CollectionModes, MethodsForSelecting, SnappingMethods, TextDirections } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { GradientColor, ScrollBarTheme } from \"../types\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = false;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_BOTTOM = 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 DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.NORMAL;\r\n\r\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nconst X_LITE_BLUE_PLASMA_GRADIENT: GradientColor = [\"rgba(133, 142, 255, 0)\", \"rgb(126, 219, 255)\"];;\r\n\r\nexport const DEFAULT_SCROLLBAR_THEME: ScrollBarTheme = {\r\n fill: [\"rgba(198, 172, 248, 1)\", \"rgba(168, 229, 250, 1)\"],\r\n strokeGradientColor: X_LITE_BLUE_PLASMA_GRADIENT,\r\n strokeAnimationDuration: 1000,\r\n thickness: 12,\r\n roundCorner: [3, 3, 3, 3],\r\n rippleColor: 'rgba(0,0,0,0.5)',\r\n}\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLLBAR_SCROLL = 'scrollbar-scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\n","import { TemplateRef } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, tap } from 'rxjs';\r\nimport { TrackBox } from './utils/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirection, TextDirections } from './enums';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK } from './const';\r\nimport { FocusAlignment, Id } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | undefined>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n scrollBarSize: number = 0;\r\n\r\n overlapScrollBarSize: number = 0;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n setSelectedIds(ids: Array<Id> | Id | undefined) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n setCollapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | undefined) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n this.collapse(data);\r\n }\r\n if (this.selectByClick) {\r\n this.select(data);\r\n }\r\n }\r\n\r\n update() {\r\n this._trackBox?.changes();\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param data \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(data: IRenderVirtualListItem | undefined, selected: boolean | undefined = undefined) {\r\n if (data && data.config.selectable) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== data?.id ? data?.id : undefined);\r\n } else {\r\n this._$selectedIds.next(selected ? data?.id : undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(data: IRenderVirtualListItem | undefined, collapsed: boolean | undefined = undefined) {\r\n if (data && data.config.sticky > 0 && data.config.collapsable) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (collapsed === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, data.id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n itemToFocus: ((element: HTMLElement, position: number, align: FocusAlignment) => void) | undefined;\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER) {\r\n element.focus({ preventScroll: true });\r\n if (element.parentElement) {\r\n const pos = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this.itemToFocus?.(element, pos, align);\r\n }\r\n }\r\n\r\n areaFocus(id: Id | null) {\r\n this._$focusedId.next(id);\r\n }\r\n\r\n initialize(trackBox: TrackBox) {\r\n this._trackBox = trackBox;\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { fromEvent, of, race, Subject } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\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/16.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[itemClick]',\r\n})\r\nexport class ItemClickDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | null) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n @Output()\r\n onClick = new EventEmitter<PointerEvent | TouchEvent>();\r\n\r\n constructor(private _elementRef: ElementRef) {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n if (e) {\r\n this.onClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\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}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit, TemplateRef } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent, Subject, takeUntil, BehaviorSubject } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { FocusAlignment, Id, ISize } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from '../../models/base-virtual-list-item-component';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { validateBoolean } from '../../utils/validation';\r\nimport { FocusAlignments, TextDirections } from '../../enums';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../models';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\ninterface ITemplateContext<D = any> {\r\n data: D;\r\n prevData: D;\r\n nextData: D;\r\n measures: IDisplayObjectMeasures | undefined;\r\n config: IDisplayObjectConfig;\r\n reseted: boolean;\r\n index: number;\r\n}\r\n\r\nconst ZEROS_POSITION = -1000,\r\n DEFAULT_TEMPLATE_CONTEXT: ITemplateContext = {\r\n data: undefined,\r\n prevData: undefined,\r\n nextData: undefined,\r\n measures: undefined,\r\n config: {\r\n focused: false,\r\n selected: false,\r\n collapsed: false,\r\n focus: function (): void { },\r\n select: function (selected: boolean | undefined): void { },\r\n collapse: function (collapsed: boolean | undefined): void { },\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical: false,\r\n dynamic: false,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: '0',\r\n },\r\n reseted: false,\r\n index: -1,\r\n },\r\n ATTR_AREA_SELECTED = 'area-selected', NGVL_INDEX = 'ngvl-index', POSITION = 'position', POSITION_ZERO = '0', ID = 'item-id',\r\n KEY_SPACE = \" \", KEY_ARR_LEFT = \"ArrowLeft\", KEY_ARR_UP = \"ArrowUp\", KEY_ARR_RIGHT = \"ArrowRight\", KEY_ARR_DOWN = \"ArrowDown\",\r\n EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped', CLASS_NAME_SNAPPED_OUT = 'snapped-out', CLASS_NAME_FOCUS = 'focus';\r\n\r\nconst getElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n};\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/16.x/projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich 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 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n private _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n private _part = PART_DEFAULT_ITEM;\r\n get part() { return this._part; }\r\n\r\n private _isSelected: boolean = false;\r\n\r\n private _isCollapsed: boolean = false;\r\n\r\n private _$config = new BehaviorSubject<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n $config = this._$config.asObservable();\r\n\r\n private _$measures = new BehaviorSubject<IDisplayObjectMeasures | undefined>(undefined);\r\n $measures = this._$measures.asObservable();\r\n\r\n private _$focused = new BehaviorSubject<boolean>(false);\r\n $focused = this._$focused.asObservable();\r\n\r\n private _$reseted = new BehaviorSubject<boolean>(false);\r\n $reseted = this._$reseted.asObservable();\r\n\r\n private _$part = new BehaviorSubject<string>(PART_DEFAULT_ITEM);\r\n $part = this._$part.asObservable();\r\n\r\n private _$maxClickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n $maxClickDistance = this._$maxClickDistance.asObservable();\r\n\r\n data: IRenderVirtualListItem | undefined = undefined;\r\n\r\n private _$data = new BehaviorSubject<IRenderVirtualListItem | undefined>(this.data);\r\n private $data = this._$data.asObservable();\r\n\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n if (this.data === v || this.data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this.data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this._$data.next(v);\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean; }>({});\r\n $classes = this._$classes.asObservable();\r\n\r\n private _$index = new BehaviorSubject<number>(-1);\r\n $index = this._$index.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<ITemplateContext>(DEFAULT_TEMPLATE_CONTEXT);\r\n $templateContext = this._$templateContext.asObservable();\r\n\r\n regular: boolean = false;\r\n\r\n private _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n get item() {\r\n return this.data;\r\n }\r\n\r\n get itemId() {\r\n return this.data?.id;\r\n }\r\n\r\n itemRenderer: 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 get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n private _selectHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n (selected: boolean | undefined = undefined) => {\r\n const valid = validateBoolean(selected, true);\r\n if (!valid) {\r\n console.error('The \"selected\" parameter must be of type `boolean` or `undefined`.');\r\n return;\r\n }\r\n this._service.select(data, selected);\r\n };\r\n\r\n private _collapseHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Collapse list items\r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n (collapsed: boolean | undefined = undefined) => {\r\n const valid = validateBoolean(collapsed, true);\r\n if (!valid) {\r\n console.error('The \"collapsed\" parameter must be of type `boolean` or `undefined`.');\r\n return;\r\n }\r\n this._service.collapse(data, collapsed);\r\n };\r\n\r\n private _focusHandler = () =>\r\n /**\r\n * Focus a list item\r\n */\r\n (align: FocusAlignment = FocusAlignments.CENTER) => {\r\n this.focus(align);\r\n };\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(private _cdr: ChangeDetectorRef, private _elementRef: ElementRef<HTMLElement>, private _service: NgVirtualListService) {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n\r\n this._elementRef.nativeElement.setAttribute('id', String(this._id));\r\n }\r\n\r\n ngOnInit(): void {\r\n const $data = this.$data,\r\n $config = this.$config,\r\n $measures = this.$measures,\r\n $focused = this.$focused,\r\n $reseted = this.$reseted;\r\n\r\n this._service.$clickDistance.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._$maxClickDistance.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $focused]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([data, focused]) => {\r\n this._$classes.next({ [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false, [CLASS_NAME_FOCUS]: focused });\r\n }),\r\n ).subscribe();\r\n\r\n $config.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._$index.next(v?.tabIndex ?? -1);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $config, $measures, $reseted]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([data, config, measures, reseted]) => {\r\n this._$templateContext.next({\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted, index: data?.index ?? - 1\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);\r\n }),\r\n ).subscribe();\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._$focused.next(true);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updatePartStr(this.data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._$focused.next(false);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updatePartStr(this.data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this._service.select(this.data);\r\n this._service.collapse(this.data);\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this.data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updateMeasures(this.data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private focusNext() {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0, length = this._service.collection?.length ?? 0;\r\n let index = tabIndex;\r\n while (index <= length) {\r\n index++;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private focusPrev() {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n while (index >= 0) {\r\n index--;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private focus(align: FocusAlignment = FocusAlignments.CENTER) {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el, align);\r\n }\r\n }\r\n }\r\n\r\n private updateMeasures(v: IRenderVirtualListItem<any> | undefined) {\r\n this._$measures.next(v?.measures ? { ...v.measures } : undefined)\r\n }\r\n\r\n private updateConfig(v: IRenderVirtualListItem<any> | undefined) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n collapse: this._collapseHandler(v), select: this._selectHandler(v), focus: this._focusHandler(),\r\n });\r\n }\r\n\r\n private update() {\r\n const data = this.data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._service.langTextDir === TextDirections.RTL ? this._service.scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n this._elementRef.nativeElement.removeAttribute(ID);\r\n }\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n private updatePartStr(v: IRenderVirtualListItem | undefined, isSelected: boolean, isCollapsed: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n }\r\n if (this._$focused.getValue()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._$part.next(part);\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };\r\n }\r\n\r\n show() {\r\n this._$reseted.next(false);\r\n\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this.data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n hide() {\r\n this._$reseted.next(true);\r\n\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = `${TRANSLATE_3D}(${this.data?.config?.isVertical ? 0 : ZEROS_POSITION},${this.data?.config?.isVertical ? 0 : ZEROS_POSITION},0)`;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this.data);\r\n }\r\n}\r\n","<ng-container *ngIf=\"data\">\r\n <div itemClick [maxClickDistance]=\"$maxClickDistance | async\" [part]=\"$part | async\"\r\n [attr.ngvl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\"\r\n [ngClass]=\"$classes | async\" (onClick)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)||''\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich 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 * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent, ScrollDirection } from \"../models\";\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n scrollDelta: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, scrollDelta, itemsRange } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = (this._scrollSize + this._size) === this._scrollWeight;\r\n this._delta = delta;\r\n this._scrollDelta = scrollDelta;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\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/16.x/projects/ng-virtual-list/src/lib/utils/event-emitter.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _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 unknown 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 unknown as string;\r\n if (this._listeners.hasOwnProperty(event)) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v as unknown === handler as unknown);\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 unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as unknown 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 unknown 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 as unknown === handler as unknown);\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 unknown as E, listener as unknown 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}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../models\";\r\nimport { debounce } from \"./debounce\";\r\nimport { EventEmitter } from \"./event-emitter\";\r\nimport { CMap } from \"./cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 10, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: number | undefined;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n cancelAnimationFrame(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = requestAnimationFrame(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache(async = true) {\r\n if (async) {\r\n this._clearScrollDirectionDebounce.execute();\r\n return;\r\n }\r\n\r\n this._scrollDirectionCache = [];\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as unknown as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { Id, ISize } from \"../types\";\r\nimport { CMap } from \"./cmap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * 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/16.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snapedComponent: ComponentRef<C> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1;\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item.id;\r\n\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!Array.isArray(untrackedComponentsByTypeMap[type])) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (Array.isArray(list) && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n if (snapedComponent) {\r\n snapedComponent.instance.item = null;\r\n snapedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CMap } from './cmap';\r\nimport { CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { IRect, ISize } from \"../types\";\r\nimport {\r\n HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IVirtualListItemConfigMap } from \"../models\";\r\nimport { bufferInterpolation } from \"./buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { debounce } from \"./debounce\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n PREPARE = 'prepare',\r\n RESET = 'reset',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n reversed: boolean;\r\n isUpdating: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends IItem, C extends Array<I>> {\r\n bounds: IRect;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n reversed: boolean;\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = TrackBoxEvents;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type OnResetEventListener = (reseted: boolean) => void;\r\n\r\nexport type OnPrepareEventListener = (prepared: boolean) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnResetEventListener | OnPrepareEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nexport interface IGetMetricsReturns {\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\ninterface IItem<I = any> {\r\n [prop: string]: I;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'isNew',\r\n SCROLL_SNAP_TO_START_ITERATIONS = 10,\r\n SCROLL_SNAP_TO_END_ITERATIONS = 5;\r\n\r\ntype Cache = ISize & { method?: ItemDisplayMethods } & IItem;\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/16.x/projects/ng-virtual-list/src/lib/utils/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = SCROLL_SNAP_TO_START_ITERATIONS;\r\n }\r\n }\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = SCROLL_SNAP_TO_END_ITERATIONS;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: number = 0;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart > 0;\r\n }\r\n\r\n protected _isScrollSnapToEnd: number = 0;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd > 0;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n protected _prepared: boolean = false;\r\n\r\n protected _preparedToStart: boolean = false;\r\n\r\n protected _preparedToStartIterations: number = 2;\r\n\r\n get prepared() { return this._prepared; }\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n if (this._isReseted !== reseted && reseted && this._prepared) {\r\n this._prepared = false;\r\n this.dispatch(TrackBoxEvents.PREPARE, false);\r\n }\r\n\r\n this._isReseted = reseted;\r\n\r\n this.dispatch(TrackBoxEvents.RESET, reseted);\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item[trackBy];\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item[trackBy];\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n cancelScrollSnappingToEnd(clearBuffer: boolean = false) {\r\n this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToEnd = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements();\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n if (this.isSnappedToStart) {\r\n if (this._isScrollSnapToStart) {\r\n this._isScrollSnapToStart--;\r\n }\r\n }\r\n\r\n if (this.isSnappedToEnd) {\r\n if (this._isScrollSnapToEnd) {\r\n this._isScrollSnapToEnd--;\r\n }\r\n }\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n if (!opt.dynamicSize || (this._preparedToStart && !this._prepared && this._previousTotalSize === metrics.totalSize)) {\r\n this._prepared = true;\r\n this.dispatch(TrackBoxEvents.PREPARE, true);\r\n }\r\n\r\n if (this._preparedToStartIterations > 0 && this._previousTotalSize !== metrics.totalSize) {\r\n this._preparedToStartIterations--;\r\n }\r\n\r\n if (this._preparedToStartIterations === 0) {\r\n this._preparedToStart = true;\r\n }\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n if (!dynamicSize) {\r\n this._isScrollStart = false;\r\n }\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n if (this.isScrollStart || this.isScrollEnd) {\r\n this.bumpVersion();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, reversed,\r\n bufferSize: minBufferSize, scrollSize, snap, itemConfigMap, enabledBufferOptimization,\r\n previousTotalSize, crudDetected, deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot, checkOverscrollItemsLimit = Math.ceil(typicalItemSize !== 0 ? size / typicalItemSize : 0),\r\n snippedPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (stickyId !== undefined && !itemConfigMap[id]?.sticky && id === fromItemId) {\r\n stickyItemId = stickyId;\r\n break;\r\n }\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = (cache as Cache)?.[IS_NEW] ?? (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && itemConfigMap) {\r\n const { num } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical);\r\n if (num > 0) {\r\n isTargetInOverscroll = true;\r\n y -= size - this._scrollEndOffset - componentSize - stickyComponentSize;\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const collectionLength = collection.length, { num } = this.getElementNumToEnd(\r\n collectionLength - (checkOverscrollItemsLimit < 0 ? 0 : collectionLength - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical,\r\n collectionLength - (collectionLength - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem[trackBy];\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id)!;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = (cache as Cache)?.[IS_NEW] ?? (this._isLazy && this._isReseted);\r\n if (!isItemNew && (!this._isLazy || !itemConfigMap[collection[0][trackBy]]?.sticky) || !isStart) {\r\n isNew = false;\r\n }\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n if (isNew) {\r\n deltaFromStartCreation += componentSize;\r\n }\r\n map.set(id, { ...cache, method: ItemDisplayMethods.NOT_CHANGED, isNew });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(typicalItemSize !== 0 ? scrollSize / typicalItemSize : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(typicalItemSize !== 0 ? (scrollSize + size) / typicalItemSize : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = (totalLength * typicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n offsetX: bounds.x,\r\n offsetY: bounds.y,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n reversed: options.reversed,\r\n isUpdating,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n offsetY,\r\n offsetX,\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n reversed,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snippedPos,\r\n isSnappingMethodAdvanced = this.isSnappingMethodAdvanced,\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset,\r\n positionOffset = isVertical ? offsetY : offsetX;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio);\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n measures = {\r\n x: isVertical ? startPosition : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : startPosition,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n size,\r\n position: pos,\r\n positionOffset,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - size : 0,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n positionOffset,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n delta: actualEndSnippedPosition - size,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: items.length,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex, iterations = 0;\r\n\r\n while (renderItems > 0) {\r\n iterations++;\r\n if (iterations > totalLength || i >= totalLength) {\r\n break;\r\n }\r\n const collectionItem = items[reversed ? (items.length - i + 1) : i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n\r\n const id = collectionItem[trackBy], cache = this.get(id)!,\r\n size = dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if (id !== stickyItem?.id && id !== endStickyItem?.id) {\r\n const isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = snap && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n positionOffset,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - size : 0,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '0',\r\n };\r\n\r\n count++;\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n nextSticky.config.zIndex = '3';\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\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] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.clearScrollDirectionCache(false);\r\n\r\n this.deltaDirection = 0;\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\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\r\n if (bounds.width && bounds.height) {\r\n this.set(itemId, { ...this.get(itemId), ...bounds });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n }\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, 'advanced', 'chat'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.NORMAL, 'normal'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","const userAgent = navigator.userAgent.toLowerCase();\r\n\r\nexport const IS_FIREFOX = /firefox/.test(userAgent);\r\n\r\nexport const IS_CROME = /chrome/.test(userAgent);\r\n\r\nexport const IS_SAFARI = /(safari)/.test(userAgent);\r\n\r\nexport const IS_IOS = /(iphone|ipad|ipod)/.test(userAgent);\r\n\r\nexport const IS_ANDROID = /android/.test(userAgent);\r\n\r\nexport const IS_EDGE = /edge/.test(userAgent);\r\n\r\nexport const IS_XIAOMI = /xiaomi/.test(userAgent);\r\n\r\nexport const FIREFOX_SCROLLBAR_OVERLAP_SIZE = 12;\r\n","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","export const objectAsReadonly = <T = { [x: string]: any } | null | undefined>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as unknown as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","import { CollectionMode, CollectionModes } from \"../enums\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\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/16.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\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/16.x/projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","export const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\nexport const easeLinear = (t: number) => {\r\n return t + 1;\r\n};","/**\r\n * SubstarateModes\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SubstarateModes {\r\n RECTANGLE = 'rectangle',\r\n ROUNDED_RECTANGLE = 'rounded-rectangle',\r\n CIRCLE = 'circle',\r\n};\r\n","/**\r\n * SubstarateStyles\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-styles.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SubstarateStyles {\r\n NONE = 'none',\r\n STROKE = 'stroke',\r\n};","import { RoundedCorner } from \"../types/rounded-corner\";\r\n\r\n/**\r\n * getShapeMinSize\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/get-shape-min-size.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getShapeMinSize = (roundedRectPath: RoundedCorner) => {\r\n if (!Array.isArray(roundedRectPath)) {\r\n return 0;\r\n }\r\n return Math.max(...roundedRectPath) * 2;\r\n};\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject, combineLatest, delay, filter, tap } from 'rxjs';\r\nimport { Color } from '../../types/color';\r\nimport { GradientColor } from '../../types/gradient-color';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { RoundedCorner } from '../../types/rounded-corner';\r\nimport { SubstarateMode } from './types/substrate-mode';\r\nimport { SubstarateModes } from './enums/substrate-modes';\r\nimport { SubstarateStyle } from './types';\r\nimport { SubstarateStyles } from './enums';\r\nimport { getShapeMinSize } from '../../utils/get-shape-min-size';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst DEFAULT_STROKE_ANIMATION_DURATION = 1000,\r\n DEFAULT_FILL_COLORS: GradientColor = [\"rgba(0, 0, 0, .1)\", \"rgba(0, 0, 0, .1)\"],\r\n DEFAULT_STROKE_WIDTH = 3,\r\n RIPPLE_ANIMATE_CLASS = 'animate',\r\n DEFAULT_RIPPLE_COLOR = 'rgba(0, 0, 0, .1)',\r\n SHAPE_NAME = 'ng-substrate-shape',\r\n CLIP_NAME = 'ng-substrate-clip',\r\n GRADIENT_COLOR_NAME = 'stop-color',\r\n FILL_GRADIENT_NAME = 'ng-substrate-fill-gradient',\r\n STROKE_GRADIENT_NAME = 'ng-substrate-stroke-gradient',\r\n FILL = 'fill',\r\n INHERIT = 'inherit',\r\n STROKE_WIDTH = 'stroke-width',\r\n DUR = 'dur',\r\n X1 = 'x1',\r\n X2 = 'x2',\r\n ID = 'id',\r\n HREF = 'href',\r\n CLIP_PATH = 'clip-path',\r\n PX = 'px',\r\n MS = 'ms',\r\n D = 'd',\r\n VIEW_BOX = 'viewBox',\r\n CX = 'cx',\r\n CY = 'cy',\r\n R = 'r',\r\n STROKE = 'stroke',\r\n NONE = 'none';\r\n\r\nconst circlePath = (cx: number, cy: number, r: number) => {\r\n return `M ${cx} ${cy} m -${r}, 0 a ${r},${r} 0 1,1 ${(r * 2)},0 a ${r},${r} 0 1,1 -${(r * 2)},0`;\r\n};\r\n\r\nconst roundedRectPath = (width: number, height: number, tl: number, tr: number, br: number, bl: number) => {\r\n const top = width - tl - tr;\r\n const right = height - tr - br;\r\n const bottom = width - br - bl;\r\n const left = height - bl - tl;\r\n const d = `\r\n M${tl},0\r\n h${top}\r\n a${tr},${tr} 0 0 1 ${tr},${tr}\r\n v${right}\r\n a${br},${br} 0 0 1 -${br},${br}\r\n h-${bottom}\r\n a${bl},${bl} 0 0 1 -${bl},-${bl}\r\n v-${left}\r\n a${tl},${tl} 0 0 1 ${tl},-${tl}\r\n z\r\n `;\r\n return d;\r\n};\r\n\r\n/**\r\n * Substrate\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/substrate.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-substrate',\r\n templateUrl: './substrate.component.html',\r\n styleUrls: ['./substrate.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class SubstrateComponent {\r\n private static __id: number = 0;\r\n private static get nextId() {\r\n const id = SubstrateComponent.__id = SubstrateComponent.__id + 1 === Number.MAX_SAFE_INTEGER ? 0 : SubstrateComponent.__id + 1;\r\n return id;\r\n }\r\n\r\n private _id: number;\r\n\r\n get id() { return this._id; }\r\n\r\n @ViewChild('svg')\r\n svg: ElementRef<SVGElement> | undefined;\r\n\r\n @ViewChild('ripple')\r\n rippleShape: ElementRef<SVGCircleElement> | undefined;\r\n\r\n @ViewChild('clip')\r\n clip: ElementRef<SVGClipPathElement> | undefined;\r\n\r\n @ViewChild('clipUse')\r\n clipUse: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('shape')\r\n shape: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('hilight')\r\n hilight: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('path')\r\n path: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('fillGradient')\r\n fillGradient: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('strokeGradient')\r\n strokeGradient: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('fillGradientColor1')\r\n fillGradientColor1: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('fillGradientColor2')\r\n fillGradientColor2: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeGradientColor1')\r\n strokeGradientColor1: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeGradientColor2')\r\n strokeGradientColor2: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeAnimation')\r\n strokeAnimation: ElementRef<SVGAnimateTransformElement> | undefined;\r\n\r\n private _$mode = new BehaviorSubject<SubstarateMode>(SubstarateModes.ROUNDED_RECTANGLE);\r\n readonly $mode = this._$mode.asObservable();\r\n\r\n @Input()\r\n set mode(v: SubstarateMode) {\r\n this._$mode.next(v);\r\n }\r\n get mode() { return this._$mode.getValue(); }\r\n\r\n private _$width = new BehaviorSubject<number>(0);\r\n readonly $width = this._$width.asObservable();\r\n\r\n @Input()\r\n set width(v: number) {\r\n this._$width.next(v);\r\n }\r\n get width() { return this._$width.getValue(); }\r\n\r\n private _$height = new BehaviorSubject<number>(0);\r\n readonly $height = this._$height.asObservable();\r\n\r\n @Input()\r\n set height(v: number) {\r\n this._$height.next(v);\r\n }\r\n get height() { return this._$height.getValue(); }\r\n\r\n private _$roundCorner = new BehaviorSubject<RoundedCorner | undefined>(undefined);\r\n readonly $roundCorner = this._$roundCorner.asObservable();\r\n\r\n @Input()\r\n set roundCorner(v: RoundedCorner | undefined) {\r\n this._$roundCorner.next(v);\r\n }\r\n get roundCorner() { return this._$roundCorner.getValue(); }\r\n\r\n private _$type = new BehaviorSubject<SubstarateStyle>(SubstarateStyles.NONE);\r\n readonly $type = this._$type.asObservable();\r\n\r\n @Input()\r\n set type(v: SubstarateStyle) {\r\n this._$type.next(v);\r\n }\r\n get type() { return this._$type.getValue(); }\r\n\r\n private _$strokeColors = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $strokeColors = this._$strokeColors.asObservable();\r\n\r\n @Input()\r\n set strokeColors(v: string | GradientColor | undefined) {\r\n this._$strokeColors.next(v);\r\n }\r\n get strokeColors() { return this._$strokeColors.getValue(); }\r\n\r\n private _$strokeWidth = new BehaviorSubject<number>(DEFAULT_STROKE_WIDTH);\r\n readonly $strokeWidth = this._$strokeWidth.asObservable();\r\n\r\n @Input()\r\n set strokeWidth(v: number) {\r\n this._$strokeWidth.next(v);\r\n }\r\n get strokeWidth() { return this._$strokeWidth.getValue(); }\r\n\r\n private _$strokeAnimationDuration = new BehaviorSubject<number>(DEFAULT_STROKE_ANIMATION_DURATION);\r\n readonly $strokeAnimationDuration = this._$strokeAnimationDuration.asObservable();\r\n\r\n @Input()\r\n set strokeAnimationDuration(v: number) {\r\n this._$strokeAnimationDuration.next(v);\r\n }\r\n get strokeAnimationDuration() { return this._$strokeAnimationDuration.getValue(); }\r\n\r\n private _$rippleColor = new BehaviorSubject<Color | undefined>(DEFAULT_RIPPLE_COLOR);\r\n readonly $rippleColor = this._$rippleColor.asObservable();\r\n\r\n @Input()\r\n set rippleColor(v: Color | undefined) {\r\n this._$rippleColor.next(v);\r\n }\r\n get rippleColor() { return this._$rippleColor.getValue(); }\r\n\r\n private _$fillColors = new BehaviorSubject<string | GradientColor | undefined>(DEFAULT_FILL_COLORS);\r\n readonly $fillColors = this._$fillColors.asObservable();\r\n\r\n @Input()\r\n set fillColors(v: string | GradientColor | undefined) {\r\n this._$fillColors.next(v);\r\n }\r\n get fillColors() { return this._$fillColors.getValue(); }\r\n\r\n private _$fillPositions = new BehaviorSubject<GradientColorPositions | undefined>(undefined);\r\n readonly $fillPositions = this._$fillPositions.asObservable();\r\n\r\n @Input()\r\n set fillPositions(v: GradientColorPositions | undefined) {\r\n this._$fillPositions.next(v);\r\n }\r\n get fillPositions() { return this._$fillPositions.getValue(); }\r\n\r\n private _$rippleEnabled = new BehaviorSubject<boolean>(false);\r\n readonly $rippleEnabled = this._$rippleEnabled.asObservable();\r\n\r\n @Input()\r\n set rippleEnabled(v: boolean) {\r\n this._$rippleEnabled.next(v);\r\n }\r\n get rippleEnabled() { return this._$rippleEnabled.getValue(); }\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(private _elementRef: ElementRef<HTMLDivElement>) {\r\n this._id = SubstrateComponent.nextId;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const fillGradient = this.fillGradient;\r\n if (fillGradient) {\r\n fillGradient.nativeElement.setAttribute(ID, `${FILL_GRADIENT_NAME}${this._id}`);\r\n }\r\n\r\n const strokeGradient = this.strokeGradient;\r\n if (strokeGradient) {\r\n strokeGradient.nativeElement.setAttribute(ID, `${STROKE_GRADIENT_NAME}${this._id}`);\r\n }\r\n\r\n const path = this.path;\r\n if (path) {\r\n path.nativeElement.setAttribute(ID, `${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const clip = this.clip;\r\n if (clip) {\r\n clip.nativeElement.setAttribute(ID, `${CLIP_NAME}${this._id}`);\r\n }\r\n\r\n const clipUse = this.clipUse;\r\n if (clipUse) {\r\n clipUse.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const shape = this.shape;\r\n if (shape) {\r\n shape.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n shape.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const hilight = this.hilight;\r\n if (hilight) {\r\n hilight.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n hilight.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const rippleShape = this.rippleShape;\r\n if (rippleShape) {\r\n rippleShape.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n }\r\n\r\n this.$fillColors.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(fillColors => {\r\n if (Array.isArray(fillColors) && fillColors.length === 2) {\r\n const fillGradientColor1 = this.fillGradientColor1, fillGradientColor2 = this.fillGradientColor2;\r\n if (fillGradientColor1 && fillGradientColor2) {\r\n fillGradientColor1.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${fillColors[0]}`);\r\n fillGradientColor2.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${fillColors[1]}`);\r\n\r\n const shape = this.shape?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(FILL, `url(#${FILL_GRADIENT_NAME}${this._id})`);\r\n }\r\n }\r\n } else {\r\n const shape = this.shape?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(FILL, INHERIT);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeWidth.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeWidth => {\r\n const shape = this.shape?.nativeElement, path = this.path?.nativeElement, hilight = this.hilight?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(STROKE_WIDTH, `${strokeWidth}`);\r\n }\r\n if (path) {\r\n path.setAttribute(STROKE_WIDTH, `${strokeWidth * 2}`);\r\n }\r\n if (hilight) {\r\n hilight.setAttribute(STROKE_WIDTH, `${strokeWidth * 2}`);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeAnimationDuration.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeAnimationDuration => {\r\n const strokeAnimation = this.strokeAnimation?.nativeElement;\r\n if (strokeAnimation) {\r\n strokeAnimation.setAttribute(DUR, `${strokeAnimationDuration ?? DEFAULT_STROKE_ANIMATION_DURATION}${MS}`);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$fillPositions.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(fillPositions => {\r\n if (Array.isArray(fillPositions) && fillPositions.length === 2) {\r\n const fillGradient = this.fillGradient;\r\n if (fillGradient) {\r\n fillGradient.nativeElement.setAttribute(X1, `${fillPositions[0]}${PX}`);\r\n fillGradient.nativeElement.setAttribute(X2, `${fillPositions[1]}${PX}`);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeColors.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeColors => {\r\n if (Array.isArray(strokeColors) && strokeColors.length === 2) {\r\n const strokeGradientColor1 = this.strokeGradientColor1, strokeGradientColor2 = this.strokeGradientColor2;\r\n if (strokeGradientColor1 && strokeGradientColor2) {\r\n strokeGradientColor1.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${strokeColors[0]}`);\r\n strokeGradientColor2.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${strokeColors[1]}`);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest(([this.$width, this.$height, this.$roundCorner, this.$mode])).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([width, height, roundCorner, mode]) => {\r\n const svg = this.svg?.nativeElement, path = this.path?.nativeElement, minSize = getShapeMinSize(roundCorner),\r\n ww = (width || minSize), w = ww >= minSize ? ww : minSize,\r\n hh = (height || minSize), h = hh >= minSize ? hh : minSize;\r\n if (svg && path) {\r\n svg.style.width = `${w}${PX}`;\r\n svg.style.height = `${h}${PX}`;\r\n svg.setAttribute(VIEW_BOX, `0 0 ${w} ${h}`);\r\n switch (mode) {\r\n case SubstarateModes.CIRCLE: {\r\n const r = Math.min(w, h) * .5, shape = circlePath(w * .5, h * .5, r);\r\n path.setAttribute('d', shape);\r\n break;\r\n }\r\n case SubstarateModes.ROUNDED_RECTANGLE: {\r\n const corner = Array.isArray(roundCorner) && roundCorner.length === 4 ? roundCorner : [0, 0, 0, 0];\r\n const shape = roundedRectPath(w, h, corner[0], corner[1], corner[2], corner[3]);\r\n path.setAttribute(D, shape);\r\n break;\r\n }\r\n case SubstarateModes.RECTANGLE:\r\n default: {\r\n const shape = roundedRectPath(w, h, 0, 0, 0, 0);\r\n path.setAttribute(D, shape);\r\n break;\r\n }\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$type.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(type => {\r\n const shape = this.shape?.nativeElement, hilight = this.hilight?.nativeElement;\r\n if (shape) {\r\n switch (type) {\r\n case SubstarateStyles.STROKE: {\r\n shape.setAttribute(STROKE, `url(#${STROKE_GRADIENT_NAME}${this._id})`);\r\n break;\r\n }\r\n case SubstarateStyles.NONE:\r\n default:\r\n shape.setAttribute(STROKE, NONE);\r\n break;\r\n }\r\n }\r\n if (hilight) {\r\n switch (type) {\r\n case SubstarateStyles.STROKE: {\r\n hilight.setAttribute(STROKE, `url(#${STROKE_GRADIENT_NAME}${this._id})`);\r\n break;\r\n }\r\n case SubstarateStyles.NONE:\r\n default:\r\n hilight.setAttribute(STROKE, NONE);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $rippleEnabled = this.$rippleEnabled;\r\n\r\n $rippleEnabled.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (rippleShape) {\r\n rippleShape.nativeElement.classList.add(RIPPLE_ANIMATE_CLASS);\r\n }\r\n }),\r\n delay(800),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n if (rippleShape) {\r\n rippleShape.nativeElement.classList.remove(RIPPLE_ANIMATE_CLASS);\r\n this._$rippleEnabled.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ripple(e: PointerEvent | MouseEvent) {\r\n const { x, y, width, height } = (this._elementRef.nativeElement as HTMLDivElement).getBoundingClientRect(),\r\n localX = e.clientX - x, localY = e.clientY - y, rippleColor = this._$rippleColor.getValue() ?? DEFAULT_RIPPLE_COLOR, endRadius = Math.max(width, height);\r\n const rippleShape = this.rippleShape?.nativeElement;\r\n if (rippleShape) {\r\n rippleShape.setAttribute(CX, String(localX));\r\n rippleShape.setAttribute(CY, String(localY));\r\n rippleShape.setAttribute(R, String(endRadius));\r\n rippleShape.setAttribute(FILL, rippleColor);\r\n }\r\n this._$rippleEnabled.next(true);\r\n }\r\n}\r\n","<svg #svg style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\">\r\n <defs>\r\n <linearGradient class=\"fill\" #fillGradient y1=\"50%\" y2=\"50%\" gradientTransform=\"rotate(90)\">\r\n <stop class=\"g1\" #fillGradientColor1 offset=\"0%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <stop class=\"g2\" #fillGradientColor2 offset=\"100%\" stop-color=\"rgba(0,0,0,0)\" />\r\n </linearGradient>\r\n <radialGradient #strokeGradient cx=\"0%\" cy=\"0%\" r=\"125%\" fx=\"0\" fy=\"0\" gradientTransform=\"rotate(45)\">\r\n <stop #strokeGradientColor1 offset=\"80%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <stop #strokeGradientColor2 offset=\"100%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <animateTransform #strokeAnimation attributeName=\"gradientTransform\" attributeType=\"XML\" type=\"rotate\"\r\n from=\"0 0.5 0.5\" to=\"360 0.5 0.5\" dur=\"1000ms\" repeatCount=\"indefinite\" />\r\n </radialGradient>\r\n <path #path stroke-width=\"6\" />\r\n <clipPath #clip>\r\n <use #clipUse />\r\n </clipPath>\r\n </defs>\r\n <use #shape class=\"shape\" stroke-width=\"3\" fill=\"rgba(0,0,0,0)\" />\r\n <use #hilight class=\"hilight\" stroke-width=\"6\" fill=\"none\" />\r\n <circle #ripple class=\"ripple\" fill=\"none\" />\r\n</svg>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { SubstarateStyle, SubstarateStyles } from '../substrate';\r\nimport { GradientColor } from '../../types/gradient-color';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { RoundedCorner } from '../../types/rounded-corner';\r\nimport { BehaviorSubject, combineLatest, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { DEFAULT_SCROLLBAR_THEME, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP, TOUCH_END, TOUCH_MOVE, TOUCH_START } from '../../const';\r\nimport { ISize, ScrollBarTheme } from '../../types';\r\nimport { Color } from '../../types/color';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n DEFAULT_ROUNDED_CORNER: RoundedCorner = [3, 3, 3, 3],\r\n DEFAULT_STROKE_ANIMATION_DURATION = 500,\r\n DEFAULT_RIPPLE_COLOR = 'rgba(0,0,0,0.5)',\r\n TRANSLATE_3D = 'translate3d',\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n\r\n/**\r\n * ScrollBar 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/16.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrls: ['./ng-scroll-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgScrollBarComponent implements OnDestroy {\r\n @ViewChild('thumb')\r\n thumb: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('track')\r\n track: ElementRef<HTMLDivElement> | undefined;\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n @Input()\r\n set isVertical(v: boolean) {\r\n this._$isVertical.next(v);\r\n }\r\n get isVertical() { return this._$isVertical.getValue(); }\r\n\r\n private _$position = new BehaviorSubject<number>(0);\r\n readonly $position = this._$position.asObservable();\r\n\r\n @Input()\r\n set position(v: number) {\r\n this._$position.next(v);\r\n }\r\n get position() { return this._$position.getValue(); }\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n @Input()\r\n set thumbGradientPositions(v: GradientColorPositions) {\r\n this._$thumbGradientPositions.next(v);\r\n }\r\n get thumbGradientPositions() { return this._$thumbGradientPositions.getValue(); }\r\n\r\n private _$size = new BehaviorSubject<number>(DEFAULT_SIZE);\r\n readonly $size = this._$size.asObservable();\r\n\r\n @Input()\r\n set size(v: number) {\r\n this._$size.next(v);\r\n }\r\n get size() { return this._$size.getValue(); }\r\n\r\n private _$theme = new BehaviorSubject<ScrollBarTheme | undefined>(DEFAULT_SCROLLBAR_THEME);\r\n readonly $theme = this._$theme.asObservable();\r\n\r\n @Input()\r\n set theme(v: ScrollBarTheme | undefined) {\r\n this._$theme.next(v);\r\n }\r\n get theme() { return this._$theme.getValue(); }\r\n\r\n private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n @Input()\r\n set prepared(v: boolean) {\r\n this._$prepared.next(v);\r\n }\r\n get prepared() { return this._$prepared.getValue(); }\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n @Input()\r\n set show(v: boolean) {\r\n this._$show.next(v);\r\n }\r\n get show() { return this._$show.getValue(); }\r\n\r\n @Output()\r\n onDrag = new EventEmitter<number>();\r\n\r\n private _$actualPosition = new BehaviorSubject<number>(0);\r\n readonly $actualPosition = this._$actualPosition.asObservable();\r\n\r\n private _$thickness = new BehaviorSubject<number>(DEFAULT_THICKNESS);\r\n readonly $thickness = this._$thickness.asObservable();\r\n\r\n private _$thumbGradientFill = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $thumbGradientFill = this._$thumbGradientFill.asObservable();\r\n\r\n private _$strokeGradientColor = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $strokeGradientColor = this._$strokeGradientColor.asObservable();\r\n\r\n private _$strokeAnimationDuration = new BehaviorSubject<number>(DEFAULT_STROKE_ANIMATION_DURATION);\r\n readonly $strokeAnimationDuration = this._$strokeAnimationDuration.asObservable();\r\n\r\n private _$roundCorner = new BehaviorSubject<RoundedCorner>(DEFAULT_ROUNDED_CORNER);\r\n readonly $roundCorner = this._$roundCorner.asObservable();\r\n\r\n private _$rippleColor = new BehaviorSubject<Color | undefined>(DEFAULT_RIPPLE_COLOR);\r\n readonly $rippleColor = this._$rippleColor.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [className: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _$type = new BehaviorSubject<SubstarateStyle>(SubstarateStyles.STROKE);\r\n readonly $type = this._$type.asObservable();\r\n\r\n private _$styles = new BehaviorSubject<{ [styleName: string]: any }>({});\r\n readonly $styles = this._$styles.asObservable();\r\n\r\n private _$thumbWidth = new BehaviorSubject<number>(0);\r\n readonly $thumbWidth = this._$thumbWidth.asObservable();\r\n\r\n private _$thumbHeight = new BehaviorSubject<number>(0);\r\n readonly $thumbHeight = this._$thumbHeight.asObservable();\r\n\r\n private _resizeObserver: ResizeObserver;\r\n\r\n private _$bounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $bounds = this._$bounds.asObservable();\r\n\r\n private _onResizeHandler = () => {\r\n const content = this.track?.nativeElement;\r\n if (content) {\r\n this._$bounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n }\r\n }\r\n\r\n private _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n get scrollSize() {\r\n const bounds = this._$bounds.getValue(), size = this._$size.getValue(), isVertical = this._$isVertical.getValue();\r\n return isVertical ? size < bounds.height ? bounds.height - size : 0 : size < bounds.width ? bounds.width - size : 0;\r\n }\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n\r\n const $track = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.track).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $thumb = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.thumb).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n );\r\n\r\n $track.pipe(\r\n takeUntilDestroyed(),\r\n tap(track => {\r\n this._resizeObserver.observe(track);\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$thickness, this.$size]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, thickness, size]) => {\r\n this._$thumbWidth.next(isVertical ? thickness : size);\r\n this._$thumbHeight.next(isVertical ? size : thickness);\r\n }),\r\n ).subscribe();\r\n\r\n this.$loading.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$type.next(v ? SubstarateStyles.STROKE : SubstarateStyles.NONE);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$show, this.$thickness]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, show, thickness]) => {\r\n this._$styles.next({\r\n [isVertical ? WIDTH : HEIGHT]: `${thickness}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n })\r\n }),\r\n ).subscribe();\r\n\r\n this.$position.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$actualPosition.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$actualPosition]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, position]) => {\r\n const thumb = this.thumb?.nativeElement;\r\n if (thumb) {\r\n if (isVertical) {\r\n thumb.style.transform = `${TRANSLATE_3D}(0, ${position}${PX}, 0)`;\r\n } else {\r\n thumb.style.transform = `${TRANSLATE_3D}(${position}${PX}, 0, 0)`;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$theme.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(theme => {\r\n if (!!theme) {\r\n this._$thumbGradientFill.next(theme.fill);\r\n this._$strokeGradientColor.next(theme.strokeGradientColor);\r\n this._$strokeAnimationDuration.next(theme.strokeAnimationDuration ?? DEFAULT_STROKE_ANIMATION_DURATION);\r\n this._$roundCorner.next(theme.roundCorner ?? DEFAULT_ROUNDED_CORNER);\r\n this._$thickness.next(theme.thickness ?? DEFAULT_THICKNESS);\r\n this._$rippleColor.next(theme.rippleColor ?? DEFAULT_RIPPLE_COLOR);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $grabbing = this.$grabbing;\r\n\r\n $grabbing.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$classes.next({ grabbing: v });\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $mouseDragCancel = race([\r\n $mouseUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._$grabbing.next(false);\r\n }),\r\n ), this.$scrollingCancel\r\n ]);\r\n\r\n $thumb.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(thumb => {\r\n return fromEvent<MouseEvent>(thumb, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this._$grabbing.next(true);\r\n const startPos = this._$position.getValue();\r\n const startClientPos = isVertical ? e.clientY : e.clientX;\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const currentPos = isVertical ? e.clientY : e.clientX,\r\n scrollSize = this.scrollSize, delta = startClientPos - currentPos,\r\n dp = startPos - delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scrollTo(position);\r\n return race([this.$scrollingCancel, fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(thumb, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n this.scrollTo(position);\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $touchCanceler = race([\r\n $touchUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._$grabbing.next(false);\r\n }),\r\n ), this.$scrollingCancel,\r\n ]);\r\n\r\n $thumb.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(thumb => {\r\n return fromEvent<TouchEvent>(thumb, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this._$grabbing.next(true);\r\n const startPos = this._$position.getValue();\r\n const startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX;\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const currentPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n scrollSize = this.scrollSize, delta = startClientPos - currentPos,\r\n dp = startPos - delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scrollTo(position);\r\n return race([this.$scrollingCancel, fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(thumb, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil(this.$scrollingCancel),\r\n tap(e => {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n this.scrollTo(position);\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n scrollTo(position: number) {\r\n const scrollSize = this.scrollSize;\r\n this.onDrag.emit(scrollSize !== 0 ? position / scrollSize : 0);\r\n }\r\n\r\n stopScrolling() {\r\n this._$scrollingCancel.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div #track class=\"track\" [ngStyle]=\"$styles | async\" [ngClass]=\"$classes | async\">\r\n <div #thumb class=\"thumb\" [class.horizontal]=\"($isVertical | async)!\">\r\n <ng-substrate #substrate mode=\"rounded-rectangle\" class=\"shape\" [type]=\"($type | async)!\"\r\n [width]=\"($thumbWidth | async)!\" [height]=\"($thumbHeight | async)!\" [roundCorner]=\"($roundCorner | async)!\"\r\n [strokeWidth]=\"8\" [rippleColor]=\"($rippleColor | async)!\" [fillPositions]=\"($thumbGradientPositions | async)!\"\r\n [fillColors]=\"($thumbGradientFill | async)!\" [strokeColors]=\"($strokeGradientColor | async)!\"\r\n [strokeAnimationDuration]=\"($strokeAnimationDuration | async)!\"\r\n (pointerdown)=\"substrate.ripple($event)\"></ng-substrate>\r\n </div>\r\n</div>","import { Directive, ElementRef, Input } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject, combineLatest, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\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/16.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n})\r\nexport class LocaleSensitiveDirective {\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n this._$langTextDir.next(v);\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n\r\n private _$listDir = new BehaviorSubject<ScrollerDirections | null>(ScrollerDirection.VERTICAL);\r\n readonly $listDir = this._$listDir.asObservable();\r\n\r\n @Input()\r\n set listDir(v: ScrollerDirections | null) {\r\n this._$listDir.next(v);\r\n }\r\n get listDir() { return this._$listDir.getValue(); }\r\n\r\n constructor(private _elementRef: ElementRef<HTMLElement>) {\r\n const $langTextDir = this.$langTextDir,\r\n $listDir = this.$listDir;\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir!, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, OnDestroy, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { BehaviorSubject, combineLatest, debounceTime, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ScrollBox } from './utils';\r\nimport { ScrollerDirections } from './enums';\r\nimport { Id, ISize, ScrollBarTheme } from '../../types';\r\nimport { Easing } from './types';\r\nimport { easeLinear, easeOutQuad } from './utils/ease';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n DEFAULT_SCROLLBAR_MIN_SIZE,\r\n INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP, SCROLLER_SCROLL, SCROLLER_SCROLLBAR_SCROLL, SCROLLER_WHEEL, TOUCH_END, TOUCH_MOVE,\r\n TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n VERTICAL = 'vertical',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 200,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MIN_TIMESTAMP = 20,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n MIN_ANIMATED_VALUE = 10,\r\n SPEED_SCALE = 5;\r\n\r\nconst getStartTime = () => { return performance.now(); }\r\n\r\nconst calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n}\r\n\r\nexport interface IScrollToParams {\r\n x?: number;\r\n y?: number;\r\n left?: number;\r\n top?: number;\r\n blending?: boolean;\r\n behavior?: \"auto\" | \"instant\" | \"smooth\" | string;\r\n userAction?: boolean;\r\n fireUpdate?: boolean;\r\n}\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL),\r\n WHEEL_EVENT = new Event(SCROLLER_WHEEL),\r\n SCROLLBAR_SCROLL_EVENT = new Event(SCROLLER_SCROLLBAR_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item 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/16.x/projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrls: ['./ng-scroller.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgScrollerComponent implements OnDestroy {\r\n @ViewChild('scrollContent')\r\n scrollContent: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n cdkScrollable: CdkScrollable | undefined;\r\n\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n @ViewChild('scrollViewport')\r\n scrollViewport: ElementRef<HTMLDivElement> | undefined;\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n private _$direction = new BehaviorSubject<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n @Input()\r\n set direction(v: ScrollerDirections) {\r\n this._$direction.next(v);\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set focusedElement(v: Id | undefined) {\r\n this._$focusedElement.next(v);\r\n }\r\n get focusedElement() { return this._$focusedElement.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n this._$classes.next(v);\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n private _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n\r\n @Input()\r\n set startOffset(v: number) {\r\n this._$startOffset.next(v);\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n private _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n\r\n @Input()\r\n set endOffset(v: number) {\r\n this._$endOffset.next(v);\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n private _$scrollbarTheme = new BehaviorSubject<ScrollBarTheme | undefined>(undefined);\r\n readonly $scrollbarTheme = this._$scrollbarTheme.asObservable();\r\n\r\n @Input()\r\n set scrollbarTheme(v: ScrollBarTheme | undefined) {\r\n this._$scrollbarTheme.next(v);\r\n }\r\n get scrollbarTheme() { return this._$scrollbarTheme.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue(); }\r\n\r\n private _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n private _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n private _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n private _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n private _$thumbPosition = new BehaviorSubject<number>(0);\r\n readonly $thumbPosition = this._$thumbPosition.asObservable();\r\n\r\n private _$thumbShow = new BehaviorSubject<boolean>(false);\r\n readonly $thumbShow = this._$thumbShow.asObservable();\r\n\r\n private _$preparedSignal = new BehaviorSubject<boolean>(false);\r\n readonly $preparedSignal = this._$preparedSignal.asObservable();\r\n\r\n private _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n private _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get scrollable() {\r\n const { width, height } = this._$viewportBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n get host() {\r\n return this.scrollViewport?.nativeElement;\r\n }\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this._$preparedSignal.next(v);\r\n }\r\n }\r\n\r\n private _isMoving = false;\r\n\r\n private _x: number = 0;\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n get x() { return this._x; }\r\n\r\n private _y: number = 0;\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n get y() { return this._y; }\r\n\r\n private _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n this._totalSize = v;\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n totalSize = this._totalSize,\r\n isVertical = this._$direction.getValue() === VERTICAL;\r\n return isVertical ? totalSize < viewportHeight ? 0 : totalSize - viewportHeight : this.scrollHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n totalSize = this._totalSize,\r\n isVertical = this._$direction.getValue() === VERTICAL;\r\n return isVertical ? this.scrollWidth : totalSize < viewportWidth ? 0 : totalSize - viewportWidth;\r\n }\r\n\r\n private _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n private _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n actualViewportWidth = viewportWidth,\r\n { width: contentWidth } = this._$contentBounds.getValue();\r\n return contentWidth < actualViewportWidth ? 0 : (contentWidth - actualViewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n actualViewportHeight = viewportHeight,\r\n { height: contentHeight } = this._$contentBounds.getValue();\r\n return contentHeight < actualViewportHeight ? 0 : (contentHeight - actualViewportHeight);\r\n }\r\n\r\n private _velocity: number = 0;\r\n\r\n private _$viewportBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $viewportBounds = this._$viewportBounds.asObservable();\r\n\r\n private _$contentBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $contentBounds = this._$contentBounds.asObservable();\r\n\r\n private _viewportResizeObserver: ResizeObserver;\r\n\r\n private _onResizeViewportHandler = () => {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n this._$viewportBounds.next({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _contentResizeObserver: ResizeObserver;\r\n\r\n private _onResizeContentHandler = () => {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n this._$contentBounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _updateScrollBarId: number | undefined;\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n private _animationId: number = -1;\r\n\r\n private _animationId1: number = -1;\r\n\r\n constructor(private _service: NgVirtualListService) {\r\n this._service.$langTextDir.pipe(\r\n tap(v => {\r\n this._$langTextDir.next(v);\r\n })\r\n ).subscribe();\r\n\r\n this._viewportResizeObserver = new ResizeObserver(this._onResizeViewportHandler);\r\n this._contentResizeObserver = new ResizeObserver(this._onResizeContentHandler);\r\n\r\n this.$direction.pipe(\r\n takeUntilDestroyed(),\r\n tap(direction => {\r\n this._$isVertical.next(direction === ScrollerDirection.VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n const $viewport = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.scrollViewport).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $content = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.scrollContent).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $updateScrollBar = this.$updateScrollBar;\r\n\r\n const updateScrollBarHandler = () => {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this._$scrollbarMinSize.getValue(),\r\n });\r\n\r\n this._$thumbGradientPositions.next(thumbGradientPositions);\r\n this._$thumbSize.next(thumbSize);\r\n this._$thumbPosition.next(thumbPosition);\r\n this._$thumbShow.next(isVertical ? this.scrollHeight > 0 : this.scrollWidth > 0);\r\n };\r\n\r\n const updateScrollBarRAFHandler = (time: DOMHighResTimeStamp) => {\r\n updateScrollBarHandler();\r\n };\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n const updateScrollBarId = this._updateScrollBarId;\r\n if (updateScrollBarId !== undefined) {\r\n cancelAnimationFrame(updateScrollBarId);\r\n }\r\n this._updateScrollBarId = requestAnimationFrame(updateScrollBarRAFHandler);\r\n }),\r\n ).subscribe();\r\n\r\n $viewport.pipe(\r\n takeUntilDestroyed(),\r\n tap(viewport => {\r\n this._viewportResizeObserver.observe(viewport);\r\n this._onResizeViewportHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n tap(content => {\r\n this._contentResizeObserver.observe(content);\r\n this._onResizeContentHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(WHEEL_EVENT);\r\n }\r\n if (isVertical) {\r\n if (this._y >= 0 && this._y <= this.scrollHeight) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n } else {\r\n if (this._x >= 0 && this._x <= this.scrollWidth) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n this.stopScrolling();\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this.y : this.x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = startPos + delta, position = dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp;\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true });\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n const startPos = isVertical ? this.y : this.x;\r\n let prevPos = startPos, prevClientPosition = 0, startPosDelta = 0;\r\n const startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>();\r\n let startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const cPos = isVertical ? this.y : this.x;\r\n if (cPos !== prevPos) {\r\n startPosDelta += cPos - prevPos;\r\n }\r\n const currentPos = isVertical ? e.clientY : e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = startClientPos - currentPos,\r\n dp = startPos + startPosDelta + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n prevClientPosition = currentPos;\r\n prevPos = position;\r\n this.move(isVertical, position, false, true);\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n e.preventDefault();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n const startPos = isVertical ? this.y : this.x;\r\n let prevPos = startPos, prevClientPosition = 0, startPosDelta = 0;\r\n const startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>();\r\n let startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const cPos = isVertical ? this.y : this.x;\r\n if (cPos !== prevPos) {\r\n startPosDelta += cPos - prevPos;\r\n }\r\n const currentPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = startClientPos - currentPos,\r\n dp = startPos + startPosDelta + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n prevClientPosition = currentPos;\r\n prevPos = position;\r\n this.move(isVertical, position, false, true);\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n e.preventDefault();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n this.moveWithAcceleration(isVertical, position, this._velocity, v0, a0);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$classes, this.$direction, this.$grabbing]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([classes, direction, grabbing]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true, grabbing });\r\n this._$containerClasses.next({ [direction]: true, grabbing });\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < MIN_TIMESTAMP ? MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets);\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * SPEED_SCALE : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < MIN_TIMESTAMP ? MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0;\r\n aSum += a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * FRICTION_FORCE;\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n private move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false) {\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction });\r\n }\r\n\r\n private moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number) {\r\n if (a0 !== 0) {\r\n const dvSign = Math.sign(v),\r\n duration = DURATION, maxDuration = MAX_DURATION,\r\n maxDistance = dvSign * MAX_DIST, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / MASS,\r\n distance = Math.abs(s) < MAX_DIST ? s : maxDistance, positionWithVelocity = position + distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / MASS,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n }\r\n }\r\n\r\n animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeLinear, userAction: boolean = false) {\r\n this.stopScrolling();\r\n const startTime = getStartTime(), isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = Math.abs(Math.abs(endValue) - Math.abs(start));\r\n\r\n if (diff < MIN_ANIMATED_VALUE) {\r\n if (isVertical) {\r\n this.y = prevPos = start = endValue;\r\n } else {\r\n this.x = prevPos = start = endValue;\r\n }\r\n } else {\r\n if (isVertical) {\r\n this.y = start;\r\n } else {\r\n this.x = start;\r\n }\r\n }\r\n\r\n let finishedValue = endValue,\r\n isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = isVertical ? this.y : this.x;\r\n let scrollDelta = 0;\r\n if (cPos !== prevPos) {\r\n scrollDelta = cPos - prevPos;\r\n startPosDelta += scrollDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = startPosDelta + start + (finishedValue - start) * easedProgress,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n actualScrollSize = isVertical ? this.actualScrollHeight : this.actualScrollWidth,\r\n currentValue = val < 0 ? 0 : val > scrollSize ? scrollSize : val,\r\n t = Date.now();\r\n\r\n isFinished = (currentValue === scrollSize && Math.round(scrollSize) >= Math.round(actualScrollSize)) ||\r\n currentValue === 0 || progress === 1;\r\n\r\n delta = currentValue - scrollDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < MIN_TIMESTAMP ? MIN_TIMESTAMP : ts;\r\n this._velocity = timestamp > 0 ? delta / timestamp : 0;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n if (!!scrollContent) {\r\n if (isVertical) {\r\n this.y = currentValue;\r\n scrollContent.style.transform = `translate3d(0, ${-currentValue}px, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n this._$scroll.next(userAction);\r\n } else {\r\n this.x = currentValue;\r\n scrollContent.style.transform = `translate3d(${-currentValue}px, 0, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n this._$scroll.next(userAction);\r\n }\r\n }\r\n if (isFinished) {\r\n this.stopScrolling();\r\n this._$scrollEnd.next(userAction);\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n x = posX,\r\n y = posY,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n fireUpdate = params.fireUpdate ?? true,\r\n scrollContent = this.scrollContent?.nativeElement as HTMLDivElement,\r\n isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n\r\n if (this._isMoving) {\r\n if (isVertical) {\r\n if (y < 0 || y > this.scrollHeight) {\r\n return;\r\n }\r\n } else {\r\n if (x < 0 || x > this.scrollWidth) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const xx = x,\r\n yy = y,\r\n prevX = this.x,\r\n prevY = this.y;\r\n this.x = xx;\r\n this.y = yy;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== yy) {\r\n this.animate(prevY, yy, ANIMATION_DURATION, easeLinear, userAction);\r\n }\r\n } else {\r\n if (prevX !== xx) {\r\n this.animate(prevX, xx, ANIMATION_DURATION, easeLinear, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (prevY !== yy) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n scrollContent.style.transform = `translate3d(0, ${-yy}px, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (prevX !== xx) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n scrollContent.style.transform = `translate3d(${-xx}px, 0, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n reset() {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.move(this._$isVertical.getValue(), 0);\r\n }\r\n\r\n onScrollBarDragHandler(e: any) {\r\n const position = e as number;\r\n this._isMoving = true;\r\n const isVertical = this._$isVertical.getValue(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.actualScrollHeight : this.actualScrollWidth,\r\n position,\r\n });\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: absolutePosition, behavior: AUTO, blending: true, userAction: true });\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLLBAR_SCROLL_EVENT);\r\n }\r\n this._isMoving = false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const updateScrollBarId = this._updateScrollBarId;\r\n if (updateScrollBarId !== undefined) {\r\n cancelAnimationFrame(updateScrollBarId);\r\n this._updateScrollBarId = undefined;\r\n }\r\n\r\n this.stopScrolling();\r\n if (this._viewportResizeObserver) {\r\n this._viewportResizeObserver.disconnect();\r\n }\r\n if (this._contentResizeObserver) {\r\n this._contentResizeObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <ng-scroll-bar #scrollBar [isVertical]=\"($isVertical | async)!\" [size]=\"($thumbSize | async)!\"\r\n [theme]=\"($scrollbarTheme | async)!\" [position]=\"($thumbPosition | async)!\"\r\n [thumbGradientPositions]=\"($thumbGradientPositions | async)!\" [loading]=\"($loading | async)!\"\r\n [prepared]=\"($preparedSignal | async)!\" [show]=\"($thumbShow | async)!\"\r\n (onDrag)=\"onScrollBarDragHandler($event)\"></ng-scroll-bar>\r\n</div>","import {\r\n ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, DestroyRef, ElementRef, EventEmitter, inject, Input,\r\n OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n of, race, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECT_METHOD, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, BEHAVIOR_SMOOTH, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_BOTTOM,\r\n MOUSE_DOWN, MOUSE_UP, MOUSE_LEAVE, MOUSE_OUT, TOUCH_END, TOUCH_LEAVE, TOUCH_OUT, TOUCH_START, SCROLLER_WHEEL,\r\n SCROLLER_SCROLLBAR_SCROLL, DEFAULT_LANG_TEXT_DIR, DEFAULT_SCROLLBAR_THEME, DEFAULT_CLICK_DISTANCE,\r\n DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_MIN_SIZE,\r\n} from './const';\r\nimport { IRenderVirtualListItem, IScrollEvent, IScrollOptions, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap, } from './models';\r\nimport { FocusAlignment, Id, IRect, ISize, ScrollBarTheme } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting, SnappingMethod, SnappingMethods,\r\n TextDirection, TextDirections,\r\n} from './enums';\r\nimport { ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBoxEvents, TrackBox } from './utils/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX, } from './utils/browser';\r\nimport { BaseVirtualListItemComponent } from './models/base-virtual-list-item-component';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/is-method-for-selecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { CMap } from './utils/cmap';\r\nimport { validateArray, validateBoolean, validateFloat, validateInt, validateObject, validateString } from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { IScrollToParams, NgScrollerComponent } from './components/scroller/ng-scroller.component';\r\n\r\ninterface IScrollParams {\r\n id: Id;\r\n behavior?: \"auto\" | \"instant\" | \"smooth\";\r\n iteration?: number;\r\n isLastIteration?: boolean;\r\n scrollCalled?: boolean;\r\n scroller?: HTMLElement;\r\n cb?: () => void;\r\n}\r\n\r\nconst MIN_SCROLL_TO_START_PIXELS = 10,\r\n RANGE_DISPLAY_ITEMS_END_OFFSET = 20,\r\n ROLE_LIST = 'list',\r\n ROLE_LIST_BOX = 'listbox',\r\n ITEM_ID = 'item-id',\r\n ITEM_CONTAINER = 'ngvl-item__container',\r\n READY_TO_START = 'ready-to-start',\r\n WAIT_FOR_PREPARATION = 'wait-for-preparation';\r\n\r\nconst validateScrollIteration = (value: number) => {\r\n return Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: \"auto\" | \"instant\" | \"smooth\") => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };\r\n\r\nconst formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: IRect) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nconst formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\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/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich 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 host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService],\r\n})\r\nexport class NgVirtualListComponent implements 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 private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('scroller', { read: NgScrollerComponent })\r\n private _scrollerComponent: NgScrollerComponent | undefined;\r\n\r\n private _$scroller = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n readonly $scroller = this._$scroller.asObservable();\r\n\r\n private _$list = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n readonly $list = this._$list.asObservable();\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n @Output()\r\n onViewportChange = new EventEmitter<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n @Output()\r\n onItemClick = new EventEmitter<IRenderVirtualListItem<any> | undefined>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n @Output()\r\n onSelect = new EventEmitter<Array<Id> | Id | undefined>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n @Output()\r\n onCollapse = new EventEmitter<Array<Id>>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n @Output()\r\n onScrollReachStart = new EventEmitter<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n @Output()\r\n onScrollReachEnd = new EventEmitter<void>();\r\n\r\n private _$scrollbarTheme = new BehaviorSubject<ScrollBarTheme | undefined>(DEFAULT_SCROLLBAR_THEME);\r\n readonly $scrollbarTheme = this._$scrollbarTheme.asObservable();\r\n\r\n private _scrollbarThemeTransform = (v: ScrollBarTheme) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarTheme\" parameter must be of type `object`.');\r\n return DEFAULT_SCROLLBAR_THEME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar theme.\r\n */\r\n @Input()\r\n set scrollbarTheme(v: ScrollBarTheme) {\r\n if (this._$scrollbarTheme.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThemeTransform(v);\r\n\r\n this._$scrollbarTheme.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollbarTheme() { return this._$scrollbarTheme.getValue() as ScrollBarTheme; }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n private _scrollbarMinSizeTransform = (v: number) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarMinSizeTransform(v);\r\n\r\n this._$scrollbarMinSize.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue() as number; }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n private _loadingTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._loadingTransform(v);\r\n\r\n this._$loading.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get loading() { return this._$loading.getValue() as boolean; }\r\n\r\n private _$waitForPreparation = new BehaviorSubject<boolean>(DEFAULT_WAIT_FOR_PREPARATION);\r\n readonly $waitForPreparation = this._$waitForPreparation.asObservable();\r\n\r\n private _waitForPreparationTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n @Input()\r\n set waitForPreparation(v: boolean) {\r\n if (this._$waitForPreparation.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._waitForPreparationTransform(v);\r\n\r\n this._$waitForPreparation.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get waitForPreparation() { return this._$waitForPreparation.getValue() as boolean; }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n\r\n private _clickDistanceTransform = (v: number) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n @Input()\r\n set clickDistance(v: number) {\r\n if (this._$clickDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._clickDistanceTransform(v);\r\n\r\n this._$clickDistance.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get clickDistance() { return this._$clickDistance.getValue() as number; }\r\n\r\n private _$snapToEndTransitionInstantOffset = new BehaviorSubject<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET);\r\n readonly $snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.asObservable();\r\n\r\n private _snapToEndTransitionInstantOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n @Input()\r\n set snapToEndTransitionInstantOffset(v: number) {\r\n if (this._$snapToEndTransitionInstantOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToEndTransitionInstantOffsetTransform(v);\r\n\r\n this._$snapToEndTransitionInstantOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snapToEndTransitionInstantOffset() { return this._$snapToEndTransitionInstantOffset.getValue(); }\r\n\r\n private _$scrollStartOffset = new BehaviorSubject<number>(0);\r\n readonly $scrollStartOffset = this._$scrollStartOffset.asObservable();\r\n\r\n private _scrollStartOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollStartOffset(v: number) {\r\n if (this._$scrollStartOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollStartOffsetTransform(v);\r\n\r\n this._$scrollStartOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollStartOffset() { return this._$scrollStartOffset.getValue(); }\r\n\r\n private _$scrollEndOffset = new BehaviorSubject<number>(0);\r\n readonly $scrollEndOffset = this._$scrollEndOffset.asObservable();\r\n\r\n private _scrollEndOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollEndOffset(v: number) {\r\n if (this._$scrollEndOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollEndOffsetTransform(v);\r\n\r\n this._$scrollEndOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollEndOffset() { return this._$scrollEndOffset.getValue(); }\r\n\r\n private _$snapScrollToBottom = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_BOTTOM);\r\n readonly $snapScrollToBottom = this._$snapScrollToBottom.asObservable();\r\n\r\n private _snapScrollToBottomTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToBottom\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_BOTTOM;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the end of the list at startup.. Default value is \"false\".\r\n */\r\n @Input()\r\n set snapScrollToBottom(v: boolean) {\r\n if (this._$snapScrollToBottom.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToBottomTransform(v);\r\n\r\n this._$snapScrollToBottom.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snapScrollToBottom() { return this._$snapScrollToBottom.getValue(); }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _langTextDirTransform = (v: TextDirection) => {\r\n const valid = validateString(v);\r\n\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._langTextDirTransform(v);\r\n\r\n this._$langTextDir.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _$defaultItemValue = new BehaviorSubject<IVirtualListItem | null>(null);\r\n readonly $defaultItemValue = this._$defaultItemValue.asObservable();\r\n\r\n @Input()\r\n set defaultItemValue(v: IVirtualListItem | null) {\r\n if (this._$defaultItemValue.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$defaultItemValue.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get defaultItemValue() { return this._$defaultItemValue.getValue(); }\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection | undefined>(undefined);\r\n readonly $items = this._$items.asObservable();\r\n\r\n private _itemsTransform = (v: IVirtualListCollection | undefined) => {\r\n let valid = validateArray(v, true);\r\n if (valid) {\r\n if (v) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i], trackBy = this.trackBy;\r\n valid = validateObject(item, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item[trackBy] as number, true) || validateString(item[trackBy] as string, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\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 const transformedValue = this._itemsTransform(v);\r\n\r\n this._$items.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n readonly $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _selectedIdsTransform = (v: Array<Id> | Id | undefined) => {\r\n let valid = validateArray(v as any, true) || validateString(v as any, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `undefined`.');\r\n return this._isMultiSelecting ? [] : undefined;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n @Input()\r\n set selectedIds(v: Array<Id> | Id | undefined) {\r\n if (this._$selectedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectedIdsTransform(v);\r\n\r\n this._$selectedIds.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n readonly $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _collapsedIdsTransform = (v: Array<Id>) => {\r\n let valid = validateArray(v as any);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n @Input()\r\n set collapsedIds(v: Array<Id>) {\r\n if (this._$collapsedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsedIdsTransform(v);\r\n\r\n this._$collapsedIds.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n private _$selectByClick = new BehaviorSubject<boolean>(DEFAULT_SELECT_BY_CLICK);\r\n readonly $selectByClick = this._$selectByClick.asObservable();\r\n\r\n private _selectByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set selectByClick(v: boolean) {\r\n if (this._$selectByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectByClickTransform(v);\r\n\r\n this._$selectByClick.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get selectByClick() { return this._$selectByClick.getValue(); }\r\n\r\n private _$collapseByClick = new BehaviorSubject<boolean>(DEFAULT_COLLAPSE_BY_CLICK);\r\n readonly $collapseByClick = this._$collapseByClick.asObservable();\r\n\r\n private _collapseByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set collapseByClick(v: boolean) {\r\n if (this._$collapseByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapseByClickTransform(v);\r\n\r\n this._$collapseByClick.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collapseByClick() { return this._$collapseByClick.getValue(); }\r\n\r\n private _$snap = new BehaviorSubject<boolean>(DEFAULT_SNAP);\r\n readonly $snap = this._$snap.asObservable();\r\n\r\n private _snapTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snap\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._snapTransform(v);\r\n\r\n this._$snap.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snap() { return this._$snap.getValue(); }\r\n\r\n private _$enabledBufferOptimization = new BehaviorSubject<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n readonly $enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();\r\n\r\n private _enabledBufferOptimizationTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n @Input()\r\n set enabledBufferOptimization(v: boolean) {\r\n if (this._$enabledBufferOptimization.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._enabledBufferOptimizationTransform(v);\r\n\r\n this._$enabledBufferOptimization.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get enabledBufferOptimization() { return this._$enabledBufferOptimization.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n\r\n private _itemRendererTransform = (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n };\r\n\r\n private _$renderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\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 const transformedValue = this._itemRendererTransform(v);\r\n\r\n this._$itemRenderer.next(transformedValue);\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 _$itemConfigMap = new BehaviorSubject<IVirtualListItemConfigMap>({});\r\n readonly $itemConfigMap = this._$itemConfigMap.asObservable();\r\n\r\n private _itemConfigMapTransform = (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets `sticky` position, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n @Input()\r\n set itemConfigMap(v: IVirtualListItemConfigMap) {\r\n if (this._$itemConfigMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemConfigMapTransform(v);\r\n\r\n this._$itemConfigMap.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get itemConfigMap() { return this._$itemConfigMap.getValue(); }\r\n\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\r\n\r\n private _itemSizeTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\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 /**\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 const transformedValue = this._itemSizeTransform(v);\r\n\r\n this._$itemSize.next(transformedValue);\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 private _dynamicSizeTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._dynamicSizeTransform(v);\r\n\r\n this._$dynamicSize.next(transformedValue);\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 private _directionTransform = (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._directionTransform(v);\r\n\r\n this._$direction.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$collectionMode = new BehaviorSubject<CollectionMode>(DEFAULT_COLLECTION_MODE);\r\n readonly $collectionMode = this._$collectionMode.asObservable();\r\n\r\n private _collectionModeTransform = (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n @Input()\r\n set collectionMode(v: CollectionMode) {\r\n if (this._$collectionMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collectionModeTransform(v);\r\n\r\n this._$collectionMode.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collectionMode() { return this._$collectionMode.getValue(); }\r\n\r\n private _$bufferSize = new BehaviorSubject<number>(DEFAULT_BUFFER_SIZE);\r\n readonly $bufferSize = this._$bufferSize.asObservable();\r\n\r\n private _bufferSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n };\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 bufferSize(v: number) {\r\n if (this._$bufferSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._bufferSizeTransform(v);\r\n\r\n this._$bufferSize.next(transformedValue);\r\n };\r\n get bufferSize() { return this._$bufferSize.getValue(); }\r\n\r\n private _$maxBufferSize = new BehaviorSubject<number>(DEFAULT_MAX_BUFFER_SIZE);\r\n readonly $maxBufferSize = this._$maxBufferSize.asObservable();\r\n\r\n private _maxBufferSizeTransform = (v: number) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this._$bufferSize.getValue();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n };\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n @Input()\r\n set maxBufferSize(v: number) {\r\n const val = this._maxBufferSizeTransform(v);\r\n if (this._$maxBufferSize.getValue() === val) {\r\n return;\r\n }\r\n\r\n this._$maxBufferSize.next(val);\r\n };\r\n get maxBufferSize() { return this._$maxBufferSize.getValue(); }\r\n\r\n private _$snappingMethod = new BehaviorSubject<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n readonly $snappingMethod = this._$snappingMethod.asObservable();\r\n\r\n private _snappingMethodTransform = (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'advanced');\r\n if (!valid) {\r\n console.error('The \"snappingMethod\" parameter must have the value `normal` or `advanced`.');\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping method.\r\n * 'default' - Normal group rendering.\r\n * 'advanced' - The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n @Input()\r\n set snappingMethod(v: SnappingMethod) {\r\n if (this._$snappingMethod.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingMethodTransform(v);\r\n\r\n this._$snappingMethod.next(transformedValue);\r\n };\r\n get snappingMethod() { return this._$snappingMethod.getValue(); }\r\n\r\n private _$methodForSelecting = new BehaviorSubject<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n readonly $methodForSelecting = this._$methodForSelecting.asObservable();\r\n\r\n private _methodForSelectingTransform = (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || 'multi-select');\r\n if (!valid) {\r\n console.error('The \"methodForSelecting\" parameter must have the value `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECT_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Method for selecting list items.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n @Input()\r\n set methodForSelecting(v: MethodForSelecting) {\r\n if (this._$methodForSelecting.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._methodForSelectingTransform(v);\r\n\r\n this._$methodForSelecting.next(transformedValue);\r\n };\r\n get methodForSelecting() { return this._$methodForSelecting.getValue(); }\r\n\r\n private _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n readonly $trackBy = this._$trackBy.asObservable();\r\n\r\n private _trackByTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._trackByTransform(v);\r\n\r\n this._$trackBy.next(transformedValue);\r\n };\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n private _$screenReaderMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n readonly $screenReaderMessage = this._$screenReaderMessage.asObservable();\r\n\r\n private _screenReaderMessageTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n @Input()\r\n set screenReaderMessage(v: string) {\r\n if (this._$screenReaderMessage.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._screenReaderMessageTransform(v);\r\n\r\n this._$screenReaderMessage.next(transformedValue);\r\n };\r\n get screenReaderMessage() { return this._$screenReaderMessage.getValue(); }\r\n\r\n private _$screenReaderFormattedMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n readonly $screenReaderFormattedMessage = this._$screenReaderFormattedMessage.asObservable();\r\n\r\n private _isVertical = this.getIsVertical();\r\n\r\n get orientation() {\r\n return this._isVertical ? Directions.VERTICAL : Directions.HORIZONTAL;\r\n }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n get displayItems() {\r\n return this._service.displayItems;\r\n }\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n get isNotSelecting() { return this._isNotSelecting; }\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n get isSingleSelecting() { return this._isSingleSelecting; }\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n get isMultiSelecting() { return this._isMultiSelecting; }\r\n\r\n private _$actualItems = new BehaviorSubject<IVirtualListCollection>([]);\r\n\r\n private _$collapsedItemIds = new BehaviorSubject<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n private _$bounds = new BehaviorSubject<IRect | null>(null);\r\n\r\n private _$totalSize = new BehaviorSubject<number>(0);\r\n\r\n private _$listBounds = new BehaviorSubject<IRect | null>(null);\r\n\r\n private _$scrollSize = new BehaviorSubject<number>(0);\r\n\r\n private _$isScrollStart = new BehaviorSubject<boolean>(true);\r\n\r\n private _$isScrollFinished = new BehaviorSubject<boolean>(false);\r\n\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n private _listResizeObserver: ResizeObserver | null = null;\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._$list.getValue(), scroller = this._$scroller.getValue(), bounds = this._$bounds.getValue(), snappedComponent = this._snapedDisplayComponent?.instance;\r\n if (list && scroller && snappedComponent) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect(), listElement = list?.nativeElement,\r\n { width: lWidth, height: lHeight } = listElement?.getBoundingClientRect() ?? { width: 0, height: 0 },\r\n { width, height } = bounds ?? { width: 0, height: 0 },\r\n isScrollable = isVertical ? scroller.nativeElement.scrollHeight > 0 : scroller.nativeElement.scrollWidth > 0;\r\n\r\n let scrollBarSize = isVertical ? width - lWidth : height - lHeight, isScrollBarOverlap = true, overlapScrollBarSize = 0;\r\n if (scrollBarSize === 0 && isScrollable) {\r\n isScrollBarOverlap = true;\r\n }\r\n\r\n this._service.scrollBarSize = scrollBarSize;\r\n this._service.overlapScrollBarSize = overlapScrollBarSize;\r\n\r\n const langTextDir = this._$langTextDir.getValue();\r\n\r\n if (isScrollBarOverlap && IS_FIREFOX) {\r\n scrollBarSize = overlapScrollBarSize = FIREFOX_SCROLLBAR_OVERLAP_SIZE;\r\n }\r\n\r\n const snappingMethod = this._$snappingMethod.getValue();\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n if (langTextDir === TextDirections.RTL) {\r\n snappedComponent.element.style.clipPath = `path(\"M ${overlapScrollBarSize} 0 L ${overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n } else {\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n }\r\n }\r\n\r\n snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize;\r\n top = sHeight;\r\n bottom = height;\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n }\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n scrollerElement.style.clipPath = `path(\"M ${left + delta} 0 L ${left + delta} ${bottom} L 0 ${bottom} L 0 ${height} L ${width} ${height} L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n private _onResizeHandler = () => {\r\n const bounds = this._$scroller.getValue()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._$bounds.next({ x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height });\r\n } else {\r\n this._$bounds.next({ x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n }\r\n\r\n private _onListResizeHandler = () => {\r\n const bounds = this._$list.getValue()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._$listBounds.next({ x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height });\r\n } else {\r\n this._$listBounds.next({ x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n }\r\n\r\n private itemToFocus = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER) => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const { width, height } = this._$bounds.getValue()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = isVertical ? position : position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = isVertical ? position - (height - elementHeight) * .5 : position - (width - elementWidth) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = isVertical ? position - (height - elementHeight) : position - (width - elementWidth);\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n const scrollWidth = scroller?.scrollWidth ?? 0, scrollHeight = scroller?.scrollHeight ?? 0;\r\n if (isVertical) {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollHeight) {\r\n pos = scrollHeight;\r\n }\r\n } else {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollWidth) {\r\n pos = scrollWidth;\r\n }\r\n }\r\n\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n const params: IScrollToParams = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior: BEHAVIOR_INSTANT as ScrollBehavior };\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n get host() {\r\n return this._elementRef;\r\n }\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this._$trackBy.getValue());\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 private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n private _$isResetedReachStart = new BehaviorSubject<boolean>(true);\r\n readonly $isResetedReachStart = this._$isResetedReachStart.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$userScroll = new Subject<IScrollEvent>();\r\n readonly $userScroll = this._$userScroll.asObservable();\r\n\r\n private _onTrackBoxResetHandler = (v: boolean) => {\r\n if (v && this._scrollerComponent?.scrollable) {\r\n this._$isResetedReachStart.next(true);\r\n\r\n const scroller = this._$scroller.getValue()?.nativeElement;\r\n if (scroller) {\r\n const params: ScrollOptions = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n };\r\n\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n };\r\n\r\n private _onPreparedHandler = (v: boolean) => {\r\n this._$prepared.next(v);\r\n };\r\n\r\n private _updateId: number | undefined;\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _elementRef: ElementRef<HTMLDivElement>,\r\n private _service: NgVirtualListService,\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._trackBox.addEventListener(TrackBoxEvents.RESET, this._onTrackBoxResetHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.PREPARE, this._onPreparedHandler);\r\n\r\n this._service.initialize(this._trackBox);\r\n this._service.itemToFocus = this.itemToFocus;\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n this.$viewInitialized.pipe(\r\n tap(() => {\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n })\r\n ).subscribe();\r\n\r\n this._$langTextDir.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._$clickDistance.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.clickDistance = v;\r\n }),\r\n ).subscribe();\r\n\r\n let prepared = false, readyToStart = false, isUserScrolling = false;\r\n\r\n this.$prepared.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n const waitForPreparation = this._$waitForPreparation.getValue();\r\n if (waitForPreparation) {\r\n if (!v) {\r\n prepared = readyToStart = v;\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = v;\r\n }\r\n this._$classes.next({ prepared: v, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n this.cacheClean();\r\n }\r\n } else {\r\n prepared = readyToStart = true;\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true, [READY_TO_START]: true, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }\r\n }),\r\n filter(v => !!v),\r\n debounceTime(0),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n prepared = v;\r\n }),\r\n delay(0),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const waitForPreparation = this._$waitForPreparation.getValue(), scrollerComponent = this._scrollerComponent, val = v || !waitForPreparation;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = val;\r\n }\r\n this._$classes.next({ prepared: val, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }),\r\n delay(1000),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const waitForPreparation = this._$waitForPreparation.getValue();\r\n readyToStart = v;\r\n this._$classes.next({ prepared: true, [READY_TO_START]: true, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$focusedElement.next(v ?? undefined);\r\n }),\r\n ).subscribe();\r\n\r\n this.$list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(list => {\r\n this._service.listElement = list?.nativeElement ?? null;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = this.$defaultItemValue,\r\n $dynamicSize = this.$dynamicSize,\r\n $snapScrollToBottom = this.$snapScrollToBottom,\r\n $trackBy = this.$trackBy,\r\n $selectByClick = this.$selectByClick,\r\n $collapseByClick = this.$collapseByClick,\r\n $isScrollStart = this._$isScrollStart.asObservable(),\r\n $isScrollFinished = this._$isScrollFinished.asObservable(),\r\n $scrollStartOffset = this.$scrollStartOffset,\r\n $scrollEndOffset = this.$scrollEndOffset,\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n let isResetedReachStart = this._$isResetedReachStart.getValue();\r\n\r\n this.$isResetedReachStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n if (v) {\r\n isResetedReachStart = v;\r\n }\r\n }),\r\n debounceTime(1),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n isResetedReachStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (readyToStart && v && !isResetedReachStart && this._scrollerComponent?.scrollable) {\r\n this._trackBox.isScrollStart = true;\r\n this.onScrollReachStart.emit();\r\n }\r\n this._$isResetedReachStart.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.isScrollEnd = v;\r\n if (v) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = this._$bounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = this._$listBounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\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 $bufferSize = this.$bufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = this.$maxBufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = this.$itemConfigMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = this.$snap,\r\n $isLazy = this.$collectionMode.pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = this.$enabledBufferOptimization,\r\n $snappingMethod = this.$snappingMethod.pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = this.$methodForSelecting,\r\n $selectedIds = this.$selectedIds,\r\n $collapsedIds = this.$collapsedIds.pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = this._$actualItems.asObservable(),\r\n $screenReaderMessage = this.$screenReaderMessage,\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntilDestroyed(),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this._$screenReaderFormattedMessage.next(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$items, $itemSize]).pipe(\r\n takeUntilDestroyed(),\r\n map(([items, itemSize]) => ({ items, itemSize })),\r\n tap(({ items, itemSize }) => {\r\n this._trackBox.resetCollection(items, itemSize);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$items, $collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([items, collapsedIds, itemConfigMap, trackBy]) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy];\r\n if (hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n this._$actualItems.next(actualItems);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._$list.getValue()?.nativeElement as any;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(dynamicSize => {\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n })\r\n ).subscribe();\r\n\r\n /**\r\n * 0 - none; 1 - instant;\r\n */\r\n const _$scrollToEndDuringUpdateCanceller = new BehaviorSubject<0 | 1>(0),\r\n $scrollToEndDuringUpdateCanceller = _$scrollToEndDuringUpdateCanceller.asObservable();\r\n\r\n $scrollToEndDuringUpdateCanceller.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => v > 0),\r\n tap((v) => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n }\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(0);\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToBottom: boolean; bounds: IRect; listBounds: IRect; scrollEndOffset: number; items: IVirtualListCollection<Object>;\r\n itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number; bufferSize: number; maxBufferSize: number;\r\n snap: boolean; isVertical: boolean; dynamicSize: boolean; enabledBufferOptimization: boolean; cacheVersion: number;\r\n }) => {\r\n const {\r\n snapScrollToBottom, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n } = params;\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n let actualScrollSize = snapScrollToBottom && !prepared ?\r\n (isVertical ? scroller.actualScrollHeight ?? 0 : scroller.actualScrollWidth ?? 0) :\r\n (isVertical ? scroller.actualScrollTop ?? 0 : scroller.actualScrollLeft ?? 0),\r\n totalSize = 0, displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height, x, y } = bounds, viewportSize = (isVertical ? height : width);\r\n\r\n let scrollLength = Math.round(this._$totalSize.getValue()) ?? 0,\r\n actualScrollLength = Math.round(scrollLength === 0 ? 0 : scrollLength > viewportSize ? scrollLength - viewportSize : scrollLength),\r\n roundedMaxPosition = Math.round(actualScrollLength),\r\n scrollPosition = Math.round(actualScrollSize);\r\n\r\n const opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height, x, y }, dynamicSize, isVertical, itemSize, reversed: false,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToBottom && scrollLength > viewportSize && !prepared) {\r\n const { totalSize: calculatedTotalSize } = this._trackBox.getMetrics(items, itemConfigMap, { ...opts, reversed: true });\r\n totalSize = calculatedTotalSize;\r\n actualScrollSize = (totalSize > viewportSize ? totalSize - viewportSize : 0);\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, reversed: true, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n scrollLength = Math.round(totalSize) ?? 0;\r\n actualScrollLength = Math.round(scrollLength === 0 ? 0 : scrollLength > viewportSize ? scrollLength - viewportSize : scrollLength);\r\n roundedMaxPosition = Math.round(actualScrollLength);\r\n scrollPosition = Math.round(actualScrollSize);\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n this._$totalSize.next(totalSize);\r\n\r\n this._service.collection = displayItems;\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 (actualScrollLength > 0) {\r\n const isScrollStart = isUserScrolling && scrollPosition < MIN_SCROLL_TO_START_PIXELS;\r\n this._$isScrollStart.next(isScrollStart);\r\n if (snapScrollToBottom && isScrollStart) {\r\n this._$isScrollFinished.next(false);\r\n }\r\n if (snapScrollToBottom && !isScrollStart) {\r\n this._$isScrollFinished.next(scrollPosition >= roundedMaxPosition);\r\n }\r\n }\r\n\r\n actualScrollSize = (isVertical ? scroller.actualScrollTop ?? 0 : scroller.actualScrollLeft ?? 0);\r\n const delta = this._trackBox.delta,\r\n roundedActualScrollSize = Math.round(actualScrollSize),\r\n scrollPositionAfterUpdate = actualScrollSize + delta,\r\n roundedScrollPositionAfterUpdate = Math.round(scrollPositionAfterUpdate),\r\n roundedMaxPositionAfterUpdate = Math.round(totalSize - viewportSize);\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (this._trackBox.isSnappedToEnd || (!!snapScrollToBottom && !prepared) ||\r\n (snapScrollToBottom && actualScrollSize > 0 &&\r\n ((roundedScrollPositionAfterUpdate >= scrollPosition) &&\r\n (scrollPosition >= roundedMaxPosition) &&\r\n (roundedMaxPositionAfterUpdate >= roundedMaxPosition)))) {\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._$isScrollFinished.next(true);\r\n }\r\n this._trackBox.isScrollEnd = true;\r\n if (roundedMaxPositionAfterUpdate > 0) {\r\n const diff = roundedMaxPositionAfterUpdate - roundedScrollPositionAfterUpdate,\r\n snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.getValue() || viewportSize,\r\n animated = prepared && readyToStart && diff >= 0 && diff <= snapToEndTransitionInstantOffset,\r\n params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n behavior: (animated ?\r\n BEHAVIOR_SMOOTH : BEHAVIOR_INSTANT) as ScrollBehavior,\r\n blending: true,\r\n fireUpdate: false,\r\n };\r\n scroller?.scrollTo?.(params);\r\n }\r\n } else if (roundedActualScrollSize !== roundedScrollPositionAfterUpdate && scrollPositionAfterUpdate > 0) {\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending: true,\r\n fireUpdate: false,\r\n };\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n };\r\n\r\n combineLatest([$snapScrollToBottom, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$userScroll,\r\n ]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(([\r\n snapScrollToBottom, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n update({\r\n snapScrollToBottom, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = this.$scroller.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $list = this.$list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this._scrollerComponent).pipe(\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$scroll),\r\n )),\r\n ),\r\n $scrollerScrollEnd = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this._scrollerComponent).pipe(\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$scrollEnd),\r\n )),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, SCROLLER_WHEEL, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, SCROLLER_SCROLLBAR_SCROLL, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $docPointerUp = fromEvent(document, MOUSE_UP, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docPointerLeave = fromEvent(document, MOUSE_LEAVE, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docPointerOut = fromEvent(document, MOUSE_OUT, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $pointerMoveTakeUntil = race([$docPointerUp, $docPointerLeave, $docPointerOut]).pipe(\r\n takeUntilDestroyed(),\r\n take(1),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, MOUSE_DOWN, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($pointerMoveTakeUntil),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n );\r\n }),\r\n map(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n return scrollSize;\r\n }\r\n return 0;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $docTouchUp = fromEvent(document, TOUCH_END, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docTouchLeave = fromEvent(document, TOUCH_LEAVE, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docTouchOut = fromEvent(document, TOUCH_OUT, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $touchMoveTakeUntil = race([$docTouchUp, $docTouchLeave, $docTouchOut]).pipe(\r\n takeUntilDestroyed(),\r\n take(1),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, TOUCH_START, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchMoveTakeUntil),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n );\r\n }),\r\n map(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n return scrollSize;\r\n }\r\n return 0;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n isUserScrolling = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScollSize > scrollSize ? -1 : currentScollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this._$scrollStartOffset.getValue(), this._$scrollEndOffset.getValue(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n });\r\n\r\n this.onScroll.emit(event);\r\n this._$scroll.next(event);\r\n\r\n if (userAction && !this._$dynamicSize.getValue()) {\r\n this._$userScroll.next(event);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n isUserScrolling = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScollSize > scrollSize ? -1 : currentScollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this._$scrollStartOffset.getValue(), this._$scrollEndOffset.getValue(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n });\r\n\r\n this.onScrollEnd.emit(event);\r\n this._$scroll.next(event);\r\n\r\n if (userAction && !this._$dynamicSize.getValue()) {\r\n this._$userScroll.next(event);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, bounds = this._$bounds.getValue(), listBounds = this._$listBounds.getValue(),\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n scrollLength = isVertical ? (listBounds?.height ?? 0) - (bounds?.height ?? 0) : (listBounds?.width ?? 0) - (bounds?.width ?? 0),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._trackBox.isSnappedToEnd) {\r\n if (scrollSize < scrollLength) {\r\n this._trackBox.cancelScrollSnappingToEnd();\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(scroller => {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(scroller);\r\n\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(list => {\r\n if (this._listResizeObserver) {\r\n this._listResizeObserver.disconnect();\r\n }\r\n\r\n this._listResizeObserver = new ResizeObserver(this._onListResizeHandler);\r\n this._listResizeObserver.observe(list);\r\n\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n switchMap(({ scroller, trackBy, event }) => {\r\n const scrollerComponent = this._scrollerComponent,\r\n {\r\n id, iteration = 0,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n if (scrollerComponent) {\r\n const items = this._$actualItems.getValue();\r\n if (items && items.length) {\r\n const dynamicSize = this._$dynamicSize.getValue(), itemSize = this._$itemSize.getValue();\r\n\r\n if (dynamicSize) {\r\n const { width, height, x, y } = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this._$itemConfigMap.getValue(), items = this._$actualItems.getValue(), isVertical = this._isVertical,\r\n currentScollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft), delta = this._trackBox.delta,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height, x, y }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this._$bufferSize.getValue(), maxBufferSize: this._$maxBufferSize.getValue(), reversed: false,\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft) + delta,\r\n snap: this._$snap.getValue(), fromItemId: id, enabledBufferOptimization: this._$enabledBufferOptimization.getValue(),\r\n },\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, opts),\r\n params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n blending: true, fireUpdate: false,\r\n };\r\n\r\n if (scrollSize === -1) {\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n scrollerComponent.totalSize = totalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n const _scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n const notChanged = actualScrollSize === currentScollSize;\r\n scrollerComponent?.scrollTo?.(params);\r\n if ((!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._$scrollTo.next(params as IScrollParams);\r\n return of([false, {\r\n id, scroller: scrollerComponent, iteration: iteration + 1,\r\n isLastIteration: notChanged, scrollCalled: true, cb\r\n }]).pipe(\r\n delay(1),\r\n );\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical,\r\n currentScollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft), scrollSize = index * this._$itemSize.getValue();\r\n if (currentScollSize !== scrollSize) {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending: true,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, scroller: scrollerComponent, cb }]).pipe(delay(1));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([true, { id, scroller: scrollerComponent, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n filter(params => !!params),\r\n tap(([finished, params]) => {\r\n if (!finished) {\r\n if (params) {\r\n this._$scrollTo.next(params as IScrollParams);\r\n }\r\n return;\r\n }\r\n\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n\r\n const p = params as Pick<IScrollParams, 'cb' | 'scrollCalled' | 'scroller'>;\r\n if (p.scrollCalled && p.scroller) {\r\n p.cb?.();\r\n return;\r\n }\r\n\r\n if (p) {\r\n const { cb } = p;\r\n cb?.();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = this.$itemRenderer;\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$itemRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(value => {\r\n if (!!value) {\r\n this.onViewportChange.emit(objectAsReadonly({ width: value.width, height: value.height }));\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this.isSingleSelecting || (this.isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this._$selectedIds.getValue();\r\n if ((this.isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setSelectedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n let isCollapsedIdsFirstEmit = 0;\r\n\r\n this._service.$collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$collapsedItemIds.next(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this._$collapsedIds.getValue();\r\n if ((isCollapsedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isCollapsedIdsFirstEmit > 2) {\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isCollapsedIdsFirstEmit < 3) {\r\n isCollapsedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setCollapsedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._$userScroll.next({\r\n scrollSize: 0,\r\n scrollWeight: 0,\r\n size: 0,\r\n listSize: 0,\r\n isVertical: false,\r\n direction: 0,\r\n isStart: false,\r\n isEnd: false,\r\n delta: 0,\r\n scrollDelta: 0,\r\n itemsRange: undefined,\r\n });\r\n }\r\n\r\n private listenCacheChangesIfNeed(value: boolean) {\r\n if (value) {\r\n if (!this._trackBox.hasEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n } else {\r\n if (this._trackBox.hasEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.removeEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this._$snappingMethod.getValue();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this._$direction.getValue();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this._$collectionMode.getValue();\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this._$snap.getValue()) {\r\n if (!this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (_listContainerRef) {\r\n while (components.length < maxLength) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n this.resetRenderers();\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n private resetRenderers(itemRenderer?: TemplateRef<HTMLElement>) {\r\n const doMap: { [id: number]: number } = {}, components = this._displayComponents;\r\n for (let i = 0, l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = itemRenderer || this._$itemRenderer.getValue();\r\n doMap[id] = i;\r\n }\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this._$snap.getValue() && this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapedDisplayComponent;\r\n comp.instance.renderer = itemRenderer || this._$itemRenderer.getValue();\r\n }\r\n\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._$list.getValue(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | undefined {\r\n validateId(id);\r\n return this._trackBox.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this._$list.getValue()?.nativeElement.querySelector<HTMLDivElement>(`[${ITEM_ID}=\"${id}\"]`);\r\n if (el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (focusedEl) {\r\n this._service.focus(focusedEl, align);\r\n }\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 */\r\n scrollTo(id: Id, cb?: () => void, options?: IScrollOptions) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._$scrollTo.next({ id, behavior, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the last item in the collection.\r\n */\r\n scrollToEnd(cb?: () => void, options?: IScrollOptions) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT as ScrollBehavior,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior as ScrollBehavior);\r\n validateIteration(iteration);\r\n const trackBy = this._$trackBy.getValue(), items = this._$items.getValue(), latItem = items?.[items.length > 0 ? items.length - 1 : 0], id = latItem?.[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._$scrollTo.next({ id, behavior, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the last item in the collection.\r\n */\r\n scrollToEndRegular() {\r\n this._$isScrollFinished.next(true);\r\n this._trackBox.isScrollEnd = true;\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n this._$scrollSize.next(scrollSize);\r\n this._trackBox.changes();\r\n }\r\n }\r\n\r\n cacheClean() {\r\n this._trackBox.cacheClean();\r\n this._$collapsedItemIds.next([]);\r\n this._$isScrollStart.next(true);\r\n this._$isScrollFinished.next(false);\r\n this._$totalSize.next(0);\r\n this._$scrollSize.next(0);\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n stopSnappingScrollToEnd() {\r\n const scroller = this._scrollerComponent;\r\n this._$isScrollFinished.next(false);\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n if (this._listResizeObserver) {\r\n this._listResizeObserver.disconnect();\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n<ng-container *ngIf=\"$snap | async\">\r\n <div #snappedContainer class=\"ngvl__snapped-container\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<ng-scroller class=\"ngvl__list-scroller\" #scroller [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [endOffset]=\"($scrollEndOffset | async)!\" [scrollbarTheme]=\"($scrollbarTheme | async)!\"\r\n [focusedElement]=\"($focusedElement | async)!\" [loading]=\"($loading | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickDirective } from './item-click.directive';\r\n\r\n@NgModule({\r\n declarations: [ItemClickDirective],\r\n exports: [ItemClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class ItemClickModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { ItemClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SubstrateComponent } from './substrate.component';\r\n\r\n@NgModule({\r\n declarations: [SubstrateComponent],\r\n exports: [SubstrateComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class SubstrateModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\nimport { SubstrateModule } from '../substrate/substrate.module';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule, SubstrateModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/scroller/ng-scroller.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, LocaleSensitiveModule],\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\nexport * from './lib/components/list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","TRANSLATE_3D","PX","EventEmitter","tap","ID","BehaviorSubject","i1.NgVirtualListService","i3.ItemClickDirective","DEFAULT_STROKE_ANIMATION_DURATION","DEFAULT_RIPPLE_COLOR","NONE","filter","switchMap","takeUntil","i1","i2.SubstrateComponent","i3.NgScrollBarComponent","i4.LocaleSensitiveDirective","i3.NgScrollerComponent"],"mappings":"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"}
1
+ {"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/enums/collection-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/directions.ts","../../../projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/text-directions.ts","../../../projects/ng-virtual-list/src/lib/const/index.ts","../../../projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/debounce.ts","../../../projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts","../../../projects/ng-virtual-list/src/lib/utils/scroll-event.ts","../../../projects/ng-virtual-list/src/lib/utils/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/utils/cache-map.ts","../../../projects/ng-virtual-list/src/lib/utils/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/utils/track-box.ts","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.ts","../../../projects/ng-virtual-list/src/lib/utils/browser.ts","../../../projects/ng-virtual-list/src/lib/utils/is-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts","../../../projects/ng-virtual-list/src/lib/utils/object.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/utils/ease.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-modes.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-styles.ts","../../../projects/ng-virtual-list/src/lib/utils/get-shape-min-size.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.component.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.html","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.html","../../../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/directives/locale-sensitive/locale-sensitive.module.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.module.ts","../../../projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/substrate/substrate.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.module.ts","../../../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 * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/collection-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollectionModes {\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll remains at the current position.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * When adding elements to the beginning of the collection, the scroll is shifted by the sum of the sizes of the new elements.\r\n */\r\n LAZY = 'lazy',\r\n}","/**\r\n * Axis of the arrangement of virtual list elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Directions {\r\n /**\r\n * Horizontal axis.\r\n */\r\n HORIZONTAL = 'horizontal',\r\n /**\r\n * Vertical axis.\r\n */\r\n VERTICAL = 'vertical',\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/methods-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelecting {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 'select',\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 'multi-select',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/snapping-method.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnappingMethods {\r\n /**\r\n * Normal group rendering.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n ADVANCED = 'advanced',\r\n /**\r\n * The group is rendered on a background.\r\n */\r\n CHAT = 'chat',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/focus-alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum FocusAlignments {\r\n NONE = 'none',\r\n START = 'start',\r\n CENTER = 'center',\r\n END = 'end',\r\n}","/**\r\n * TextDirections.\r\n * RTL - right-to-left.\r\n * LTR - left-to-right.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/text-directions.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TextDirections {\r\n RTL = 'rtl',\r\n LTR = 'ltr',\r\n}","import { CollectionModes, MethodsForSelecting, SnappingMethods, TextDirections } from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { GradientColor, ScrollBarTheme } from \"../types\";\r\n\r\nexport const DEFAULT_ITEM_SIZE = 24;\r\n\r\nexport const DEFAULT_BUFFER_SIZE = 2;\r\n\r\nexport const DEFAULT_MAX_BUFFER_SIZE = 10;\r\n\r\nexport const DEFAULT_LIST_SIZE = 400;\r\n\r\nexport const DEFAULT_CLICK_DISTANCE = 40;\r\n\r\nexport const DEFAULT_WAIT_FOR_PREPARATION = true;\r\n\r\nexport const DEFAULT_SNAP = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_COLLAPSE_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ENABLED_BUFFER_OPTIMIZATION = false;\r\n\r\nexport const DEFAULT_DYNAMIC_SIZE = false;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_BOTTOM = 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 DEFAULT_COLLECTION_MODE = CollectionModes.NORMAL;\r\n\r\nexport const DISPLAY_OBJECTS_LENGTH_MESUREMENT_ERROR = 1;\r\n\r\nexport const MAX_SCROLL_TO_ITERATIONS = 5;\r\n\r\nexport const DEFAULT_SNAPPING_METHOD = SnappingMethods.NORMAL;\r\n\r\nexport const DEFAULT_SELECT_METHOD = MethodsForSelecting.NONE;\r\n\r\nexport const DEFAULT_SCREEN_READER_MESSAGE = 'Showing items $1 to $2';\r\n\r\nexport const DEFAULT_LANG_TEXT_DIR = TextDirections.LTR;\r\n\r\nconst X_LITE_BLUE_PLASMA_GRADIENT: GradientColor = [\"rgba(133, 142, 255, 0)\", \"rgb(126, 219, 255)\"];;\r\n\r\nexport const DEFAULT_SCROLLBAR_THEME: ScrollBarTheme = {\r\n fill: [\"rgba(198, 172, 248, 1)\", \"rgba(168, 229, 250, 1)\"],\r\n strokeGradientColor: X_LITE_BLUE_PLASMA_GRADIENT,\r\n strokeAnimationDuration: 1000,\r\n thickness: 12,\r\n roundCorner: [3, 3, 3, 3],\r\n rippleColor: 'rgba(0,0,0,0.5)',\r\n}\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH = 'smooth';\r\n\r\nexport const DISPLAY_BLOCK = 'block';\r\n\r\nexport const DISPLAY_NONE = 'none';\r\n\r\nexport const OPACITY_0 = '0';\r\n\r\nexport const OPACITY_100 = '100';\r\n\r\nexport const VISIBILITY_VISIBLE = 'visible';\r\n\r\nexport const VISIBILITY_HIDDEN = 'hidden';\r\n\r\nexport const SIZE_100_PERSENT = '100%';\r\n\r\nexport const SIZE_AUTO = 'auto';\r\n\r\nexport const POSITION_ABSOLUTE = 'absolute';\r\n\r\nexport const TRANSLATE_3D = 'translate3d';\r\n\r\nexport const ZEROS_TRANSLATE_3D = `${TRANSLATE_3D}(0,0,0)`;\r\n\r\nexport const HIDDEN_ZINDEX = '-1';\r\n\r\nexport const DEFAULT_ZINDEX = '0';\r\n\r\nexport const TOP_PROP_NAME = 'top';\r\n\r\nexport const LEFT_PROP_NAME = 'left';\r\n\r\nexport const X_PROP_NAME = 'x';\r\n\r\nexport const Y_PROP_NAME = 'y';\r\n\r\nexport const WIDTH_PROP_NAME = 'width';\r\n\r\nexport const HEIGHT_PROP_NAME = 'height';\r\n\r\nexport const MARGIN_TOP = 'marginTop';\r\n\r\nexport const MARGIN_LEFT = 'marginLeft';\r\n\r\nexport const PX = 'px';\r\n\r\nexport const INTERACTIVE = 'interactive';\r\n\r\nexport const WHEEL = 'wheel';\r\n\r\nexport const SCROLLER_WHEEL = 'wheel';\r\n\r\nexport const TOUCH_MOVE = 'touchmove';\r\n\r\nexport const TOUCH_START = 'touchstart';\r\n\r\nexport const TOUCH_END = 'touchend';\r\n\r\nexport const TOUCH_LEAVE = 'touchleave';\r\n\r\nexport const TOUCH_OUT = 'touchout';\r\n\r\nexport const MOUSE_MOVE = 'mousemove';\r\n\r\nexport const MOUSE_UP = 'mouseup';\r\n\r\nexport const MOUSE_DOWN = 'mousedown';\r\n\r\nexport const MOUSE_LEAVE = 'mouseleave';\r\n\r\nexport const MOUSE_OUT = 'mouseout';\r\n\r\nexport const POINTER_MOVE = 'pointermove';\r\n\r\nexport const POINTER_UP = 'pointerup';\r\n\r\nexport const POINTER_DOWN = 'pointerdown';\r\n\r\nexport const POINTER_LEAVE = 'pointerleave';\r\n\r\nexport const POINTER_OUT = 'pointerout';\r\n\r\nexport const CLICK = 'click';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLLBAR_SCROLL = 'scrollbar-scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_NEW = ' item-new';\r\n\r\nexport const PART_ITEM_ODD = ' item-odd';\r\n\r\nexport const PART_ITEM_EVEN = ' item-even';\r\n\r\nexport const PART_ITEM_SNAPPED = ' item-snapped';\r\n\r\nexport const PART_ITEM_SELECTED = ' item-selected';\r\n\r\nexport const PART_ITEM_COLLAPSED = ' item-collapsed';\r\n\r\nexport const PART_ITEM_FOCUSED = ' item-focused';\r\n\r\n","import { TemplateRef } from '@angular/core';\r\nimport { Id, ISize } from '../types';\r\nimport { IRenderVirtualListItem } from './render-item.model';\r\n\r\n/**\r\n * Virtual List Item Interface\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport abstract class BaseVirtualListItemComponent {\r\n abstract get id(): number;\r\n abstract regular: boolean;\r\n abstract set regularLength(v: string)\r\n abstract set item(v: IRenderVirtualListItem | null | undefined);\r\n abstract get item(): IRenderVirtualListItem | null | undefined;\r\n abstract get itemId(): Id | undefined;\r\n abstract set renderer(v: TemplateRef<any> | undefined);\r\n abstract get element(): HTMLElement;\r\n public abstract getBounds(): ISize;\r\n public abstract show(): void;\r\n public abstract hide(): void;\r\n}","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum MethodsForSelectingTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';\r\nimport { Subject, tap } from 'rxjs';\r\nimport { TrackBox } from './utils/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirection, TextDirections } from './enums';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK } from './const';\r\nimport { FocusAlignment, Id } from './types';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | undefined>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _$methodOfSelecting = new BehaviorSubject<MethodsForSelectingTypes>(0);\r\n $methodOfSelecting = this._$methodOfSelecting.asObservable();\r\n\r\n set methodOfSelecting(v: MethodsForSelectingTypes) {\r\n this._$methodOfSelecting.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n get focusedId() { return this._$focusedId.getValue(); }\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: number = 0;\r\n\r\n scrollBarSize: number = 0;\r\n\r\n overlapScrollBarSize: number = 0;\r\n\r\n selectByClick: boolean = DEFAULT_SELECT_BY_CLICK;\r\n\r\n collapseByClick: boolean = DEFAULT_COLLAPSE_BY_CLICK;\r\n\r\n defaultItemValue: IVirtualListItem | null = null;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n private _$displayItems = new BehaviorSubject<IRenderVirtualListCollection>([]);\r\n readonly $displayItems = this._$displayItems.asObservable();\r\n get displayItems() { return this._$displayItems.getValue(); }\r\n\r\n private _collection: IRenderVirtualListCollection = [];\r\n set collection(v: IRenderVirtualListCollection) {\r\n if (this._collection === v) {\r\n return;\r\n }\r\n\r\n this._collection = v;\r\n\r\n this._$displayItems.next(v);\r\n }\r\n get collection() { return this._collection; }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _langTextDir: TextDirection = TextDirections.LTR;\r\n set langTextDir(v: TextDirection) {\r\n if (this._langTextDir === v) {\r\n return;\r\n }\r\n\r\n this._langTextDir = v;\r\n\r\n this._$langTextDir.next(v);\r\n }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n get clickDistance() { return this._$clickDistance.getValue(); }\r\n\r\n private _clickDistance: number = DEFAULT_CLICK_DISTANCE;\r\n set clickDistance(v: number) {\r\n if (this._clickDistance === v) {\r\n return;\r\n }\r\n\r\n this._clickDistance = v;\r\n\r\n this._$clickDistance.next(v);\r\n }\r\n\r\n constructor() {\r\n this._$methodOfSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue();\r\n if (typeof curr !== 'number' && typeof curr !== 'string') {\r\n this._$selectedIds.next(undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n if (!Array.isArray(this._$selectedIds.getValue())) {\r\n this._$selectedIds.next([]);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n setSelectedIds(ids: Array<Id> | Id | undefined) {\r\n if (JSON.stringify(this._$selectedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$selectedIds.next(ids);\r\n }\r\n }\r\n\r\n setCollapsedIds(ids: Array<Id>) {\r\n if (JSON.stringify(this._$collapsedIds.getValue()) !== JSON.stringify(ids)) {\r\n this._$collapsedIds.next(ids);\r\n }\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | undefined) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n this.collapse(data);\r\n }\r\n if (this.selectByClick) {\r\n this.select(data);\r\n }\r\n }\r\n\r\n update() {\r\n this._trackBox?.changes();\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param data \r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n select(data: IRenderVirtualListItem | undefined, selected: boolean | undefined = undefined) {\r\n if (data && data.config.selectable) {\r\n switch (this._$methodOfSelecting.getValue()) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const curr = this._$selectedIds.getValue() as (Id | undefined);\r\n if (selected === undefined) {\r\n this._$selectedIds.next(curr !== data?.id ? data?.id : undefined);\r\n } else {\r\n this._$selectedIds.next(selected ? data?.id : undefined);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (selected === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else if (selected) {\r\n if (index > -1) {\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$selectedIds.next(curr);\r\n } else {\r\n this._$selectedIds.next(curr);\r\n }\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this._$selectedIds.next(undefined);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param data \r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n collapse(data: IRenderVirtualListItem | undefined, collapsed: boolean | undefined = undefined) {\r\n if (data && data.config.sticky > 0 && data.config.collapsable) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>], index = curr.indexOf(data.id);\r\n if (collapsed === undefined) {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, data.id]);\r\n }\r\n } else if (collapsed) {\r\n if (index > -1) {\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next([...curr, data.id]);\r\n }\r\n } else {\r\n if (index > -1) {\r\n curr.splice(index, 1);\r\n this._$collapsedIds.next(curr);\r\n } else {\r\n this._$collapsedIds.next(curr);\r\n }\r\n }\r\n }\r\n }\r\n\r\n itemToFocus: ((element: HTMLElement, position: number, align: FocusAlignment) => void) | undefined;\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER) {\r\n element.focus({ preventScroll: true });\r\n if (element.parentElement) {\r\n const pos = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this.itemToFocus?.(element, pos, align);\r\n }\r\n }\r\n\r\n areaFocus(id: Id | null) {\r\n this._$focusedId.next(id);\r\n }\r\n\r\n initialize(trackBox: TrackBox) {\r\n this._trackBox = trackBox;\r\n }\r\n\r\n generateComponentId() {\r\n return this._nextComponentId = this._nextComponentId === Number.MAX_SAFE_INTEGER\r\n ? 0 : this._nextComponentId + 1;\r\n }\r\n}\r\n","import { Directive, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\r\nimport { fromEvent, of, race, Subject } from 'rxjs';\r\nimport { filter, switchMap, takeUntil, tap } from 'rxjs/operators';\r\n\r\nconst DEFAULT_MAX_DISTANCE = 40;\r\n\r\n/**\r\n * ItemClickDirective\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/16.x/projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[itemClick]',\r\n})\r\nexport class ItemClickDirective implements OnDestroy {\r\n protected _$unsubscribe = new Subject<void>();\r\n\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | null) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n @Output()\r\n onClick = new EventEmitter<PointerEvent | TouchEvent>();\r\n\r\n constructor(private _elementRef: ElementRef) {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntil(this._$unsubscribe),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const x = Math.abs(e.clientX),\r\n y = Math.abs(e.clientY);\r\n return $pointerRelease.pipe(\r\n takeUntil(this._$unsubscribe),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntil(this._$unsubscribe),\r\n switchMap(e => {\r\n const xx = x - Math.abs(e.clientX),\r\n yy = y - Math.abs(e.clientY),\r\n dist = Math.sqrt(Math.pow(xx, 2) + Math.pow(yy, 2));\r\n\r\n if (dist > this._maxDistance) {\r\n return of(true);\r\n }\r\n\r\n return of(false);\r\n }),\r\n takeUntil(this._$unsubscribe),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntil(this._$unsubscribe),\r\n tap(e => {\r\n if (e) {\r\n this.onClick.emit(e);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n }\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}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, OnInit, TemplateRef } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent, Subject, takeUntil, BehaviorSubject } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { FocusAlignment, Id, ISize } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PART_DEFAULT_ITEM, PART_ITEM_COLLAPSED, PART_ITEM_EVEN,\r\n PART_ITEM_FOCUSED, PART_ITEM_NEW, PART_ITEM_ODD, PART_ITEM_SELECTED, PART_ITEM_SNAPPED, POSITION_ABSOLUTE, PX, SIZE_100_PERSENT,\r\n SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from '../../models/base-virtual-list-item-component';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { validateBoolean } from '../../utils/validation';\r\nimport { FocusAlignments, TextDirections } from '../../enums';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../models';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\ninterface ITemplateContext<D = any> {\r\n data: D;\r\n prevData: D;\r\n nextData: D;\r\n measures: IDisplayObjectMeasures | undefined;\r\n config: IDisplayObjectConfig;\r\n reseted: boolean;\r\n index: number;\r\n}\r\n\r\nconst ZEROS_POSITION = -1000,\r\n DEFAULT_TEMPLATE_CONTEXT: ITemplateContext = {\r\n data: undefined,\r\n prevData: undefined,\r\n nextData: undefined,\r\n measures: undefined,\r\n config: {\r\n focused: false,\r\n selected: false,\r\n collapsed: false,\r\n focus: function (): void { },\r\n select: function (selected: boolean | undefined): void { },\r\n collapse: function (collapsed: boolean | undefined): void { },\r\n new: false,\r\n odd: false,\r\n even: false,\r\n collapsable: false,\r\n sticky: 0,\r\n selectable: false,\r\n snap: false,\r\n snapped: false,\r\n snappedOut: false,\r\n isVertical: false,\r\n dynamic: false,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: '0',\r\n },\r\n reseted: false,\r\n index: -1,\r\n },\r\n ATTR_AREA_SELECTED = 'area-selected', NGVL_INDEX = 'ngvl-index', POSITION = 'position', POSITION_ZERO = '0', ID = 'item-id',\r\n KEY_SPACE = \" \", KEY_ARR_LEFT = \"ArrowLeft\", KEY_ARR_UP = \"ArrowUp\", KEY_ARR_RIGHT = \"ArrowRight\", KEY_ARR_DOWN = \"ArrowDown\",\r\n EVENT_FOCUS_IN = 'focusin', EVENT_FOCUS_OUT = 'focusout', EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped', CLASS_NAME_SNAPPED_OUT = 'snapped-out', CLASS_NAME_FOCUS = 'focus';\r\n\r\nconst getElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n};\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/16.x/projects/ng-virtual-list/src/lib/components/list-item/ng-virtual-list-item.component.ts\r\n * @author Evgenii Alexandrovich 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 'role': 'listitem',\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n private _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n private _part = PART_DEFAULT_ITEM;\r\n get part() { return this._part; }\r\n\r\n private _isSelected: boolean = false;\r\n\r\n private _isCollapsed: boolean = false;\r\n\r\n private _$config = new BehaviorSubject<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n $config = this._$config.asObservable();\r\n\r\n private _$measures = new BehaviorSubject<IDisplayObjectMeasures | undefined>(undefined);\r\n $measures = this._$measures.asObservable();\r\n\r\n private _$focused = new BehaviorSubject<boolean>(false);\r\n $focused = this._$focused.asObservable();\r\n\r\n private _$part = new BehaviorSubject<string>(PART_DEFAULT_ITEM);\r\n $part = this._$part.asObservable();\r\n\r\n private _$maxClickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n $maxClickDistance = this._$maxClickDistance.asObservable();\r\n\r\n data: IRenderVirtualListItem | undefined = undefined;\r\n\r\n private _$data = new BehaviorSubject<IRenderVirtualListItem | undefined>(this.data);\r\n private $data = this._$data.asObservable();\r\n\r\n set item(v: IRenderVirtualListItem | undefined) {\r\n if (this.data === v || this.data?.id === -1 || !v) {\r\n return;\r\n }\r\n\r\n this.data = v;\r\n\r\n this.updatePartStr(v, this._isSelected, this._isCollapsed);\r\n\r\n this.updateConfig(v);\r\n\r\n this.updateMeasures(v);\r\n\r\n this.update();\r\n\r\n this._$data.next(v);\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean; }>({});\r\n $classes = this._$classes.asObservable();\r\n\r\n private _$index = new BehaviorSubject<number>(-1);\r\n $index = this._$index.asObservable();\r\n\r\n private _$templateContext = new BehaviorSubject<ITemplateContext>(DEFAULT_TEMPLATE_CONTEXT);\r\n $templateContext = this._$templateContext.asObservable();\r\n\r\n regular: boolean = false;\r\n\r\n private _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n\r\n this._cdr.detectChanges();\r\n }\r\n\r\n get item() {\r\n return this.data;\r\n }\r\n\r\n get itemId() {\r\n return this.data?.id;\r\n }\r\n\r\n itemRenderer: 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 get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n private _selectHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Selects a list item\r\n * @param selected - If the value is undefined, then the toggle method is executed, if false or true, then the selection/deselection is performed.\r\n */\r\n (selected: boolean | undefined = undefined) => {\r\n const valid = validateBoolean(selected, true);\r\n if (!valid) {\r\n console.error('The \"selected\" parameter must be of type `boolean` or `undefined`.');\r\n return;\r\n }\r\n this._service.select(data, selected);\r\n };\r\n\r\n private _collapseHandler = (data: IRenderVirtualListItem<any> | undefined) =>\r\n /**\r\n * Collapse list items\r\n * @param collapsed - If the value is undefined, then the toggle method is executed, if false or true, then the collapse/expand is performed.\r\n */\r\n (collapsed: boolean | undefined = undefined) => {\r\n const valid = validateBoolean(collapsed, true);\r\n if (!valid) {\r\n console.error('The \"collapsed\" parameter must be of type `boolean` or `undefined`.');\r\n return;\r\n }\r\n this._service.collapse(data, collapsed);\r\n };\r\n\r\n private _focusHandler = () =>\r\n /**\r\n * Focus a list item\r\n */\r\n (align: FocusAlignment = FocusAlignments.CENTER) => {\r\n this.focus(align);\r\n };\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(private _cdr: ChangeDetectorRef, private _elementRef: ElementRef<HTMLElement>, private _service: NgVirtualListService) {\r\n super();\r\n this._id = this._service.generateComponentId();\r\n\r\n this._elementRef.nativeElement.setAttribute('id', String(this._id));\r\n }\r\n\r\n ngOnInit(): void {\r\n const $data = this.$data,\r\n $config = this.$config,\r\n $measures = this.$measures,\r\n $focused = this.$focused;\r\n\r\n this._service.$clickDistance.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._$maxClickDistance.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $focused]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([data, focused]) => {\r\n this._$classes.next({ [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false, [CLASS_NAME_FOCUS]: focused });\r\n }),\r\n ).subscribe();\r\n\r\n $config.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._$index.next(v?.tabIndex ?? -1);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, $config, $measures]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([data, config, measures]) => {\r\n this._$templateContext.next({\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._service.areaFocus(v ? this._id : this._service.focusedId === this._id ? null : this._service.focusedId);\r\n }),\r\n ).subscribe();\r\n\r\n fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._$focused.next(true);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updatePartStr(this.data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent(this.element, EVENT_FOCUS_OUT).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._$focused.next(false);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updatePartStr(this.data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe(),\r\n\r\n fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this._service.select(this.data);\r\n this._service.collapse(this.data);\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusPrev();\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this._$config.getValue().isVertical) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n this.focusNext();\r\n }\r\n break;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$data, this._service.$methodOfSelecting, this._service.$selectedIds, this._service.$collapsedIds]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n map(([, m, selectedIds, collapsedIds]) => ({ method: m, selectedIds, collapsedIds })),\r\n tap(({ method, selectedIds, collapsedIds }) => {\r\n switch (method) {\r\n case MethodsForSelectingTypes.SELECT: {\r\n const id = selectedIds as Id | undefined, isSelected = id === this.itemId;\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const actualIds = selectedIds as Array<Id>, isSelected = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this.element.setAttribute(ATTR_AREA_SELECTED, String(isSelected));\r\n this._isSelected = isSelected;\r\n break;\r\n }\r\n case MethodsForSelectingTypes.NONE:\r\n default: {\r\n this.element.removeAttribute(ATTR_AREA_SELECTED);\r\n this._isSelected = false;\r\n break;\r\n }\r\n }\r\n\r\n const actualIds = collapsedIds, isCollapsed = this.itemId !== undefined && actualIds && actualIds.includes(this.itemId);\r\n this._isCollapsed = isCollapsed;\r\n\r\n this.updatePartStr(this.data, this._isSelected, isCollapsed);\r\n\r\n this.updateConfig(this.data);\r\n\r\n this.updateMeasures(this.data);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private focusNext() {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0, length = this._service.collection?.length ?? 0;\r\n let index = tabIndex;\r\n while (index <= length) {\r\n index++;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private focusPrev() {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n while (index >= 0) {\r\n index--;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n private focus(align: FocusAlignment = FocusAlignments.CENTER) {\r\n if (this._service.listElement) {\r\n const tabIndex = this.data?.config?.tabIndex ?? 0;\r\n let index = tabIndex;\r\n const el = this._service.listElement.querySelector<HTMLDivElement>(getElementByIndex(index));\r\n if (el) {\r\n this._service.focus(el, align);\r\n }\r\n }\r\n }\r\n\r\n private updateMeasures(v: IRenderVirtualListItem<any> | undefined) {\r\n this._$measures.next(v?.measures ? { ...v.measures } : undefined)\r\n }\r\n\r\n private updateConfig(v: IRenderVirtualListItem<any> | undefined) {\r\n this._$config.next({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this._$focused.getValue(),\r\n collapse: this._collapseHandler(v), select: this._selectHandler(v), focus: this._focusHandler(),\r\n });\r\n }\r\n\r\n private update() {\r\n const data = this.data, regular = this.regular, length = this._regularLength;\r\n if (data) {\r\n this._elementRef.nativeElement.setAttribute(ID, `${data.id}`);\r\n const styles = this._elementRef.nativeElement.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._service.langTextDir === TextDirections.RTL ? this._service.scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? 0 : data.measures.x}${PX}, ${data.config.isVertical ? data.measures.y : 0}${PX}, ${POSITION_ZERO})`;\r\n }\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : SIZE_100_PERSENT;\r\n styles.width = data.config.isVertical ? regular ? length : SIZE_100_PERSENT : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n this._elementRef.nativeElement.removeAttribute(ID);\r\n }\r\n\r\n this._cdr.markForCheck();\r\n }\r\n\r\n private updatePartStr(v: IRenderVirtualListItem | undefined, isSelected: boolean, isCollapsed: boolean) {\r\n let odd = false;\r\n if (v?.index !== undefined) {\r\n odd = v.index % 2 === 0;\r\n }\r\n\r\n let part = PART_DEFAULT_ITEM;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n }\r\n if (this._$focused.getValue()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this._$part.next(part);\r\n }\r\n\r\n getBounds(): ISize {\r\n const el: HTMLElement = this._elementRef.nativeElement,\r\n { width, height } = el.getBoundingClientRect();\r\n return { width: width > 0 ? width : 1, height: height > 0 ? height : 1, };\r\n }\r\n\r\n show() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this.data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = `${TRANSLATE_3D}(${this.data?.config?.isVertical ? 0 : ZEROS_POSITION},${this.data?.config?.isVertical ? 0 : ZEROS_POSITION},0)`;\r\n styles.zIndex = HIDDEN_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_NONE) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_NONE;\r\n } else {\r\n if (styles.visibility === VISIBILITY_HIDDEN) {\r\n return;\r\n }\r\n\r\n styles.visibility = VISIBILITY_HIDDEN;\r\n }\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this.data);\r\n }\r\n}\r\n","<ng-container *ngIf=\"data\">\r\n <div itemClick [maxClickDistance]=\"$maxClickDistance | async\" [part]=\"$part | async\"\r\n [attr.ngvl-index]=\"data.config.tabIndex || -1\" tabindex=\"0\" class=\"ngvl-item__container\"\r\n [ngClass]=\"$classes | async\" (onClick)=\"onClickHandler()\">\r\n <ng-container *ngIf=\"itemRenderer\">\r\n <ng-container [ngTemplateOutlet]=\"itemRenderer\"\r\n [ngTemplateOutletContext]=\"($templateContext | async)||''\"></ng-container>\r\n </ng-container>\r\n </div>\r\n</ng-container>","/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich 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 * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/toggle-class-name.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const toggleClassName = (el: HTMLElement, className: string, removeClassName?: string) => {\r\n if (!el.classList.contains(className)) {\r\n el.classList.add(className);\r\n }\r\n if (removeClassName) {\r\n el.classList.remove(removeClassName);\r\n }\r\n};\r\n","import { IScrollEvent, ScrollDirection } from \"../models\";\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n scrollDelta: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/scroll-event.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollEvent implements IScrollEvent {\r\n private _direction: ScrollDirection = 1;\r\n get direction() { return this._direction; }\r\n\r\n private _scrollSize: number = 0;\r\n get scrollSize() { return this._scrollSize; }\r\n\r\n private _scrollWeight: number = 0;\r\n get scrollWeight() { return this._scrollWeight; }\r\n\r\n private _isVertical: boolean = true;\r\n get isVertical() { return this._isVertical; }\r\n\r\n private _listSize: number = 0;\r\n get listSize() { return this._listSize; }\r\n\r\n private _size: number = 0;\r\n get size() { return this._size; }\r\n\r\n private _isStart: boolean = true;\r\n get isStart() { return this._isStart; }\r\n\r\n private _isEnd: boolean = false;\r\n get isEnd() { return this._isEnd; }\r\n\r\n private _delta: number = 0;\r\n get delta() { return this._delta; }\r\n\r\n private _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, scrollDelta, itemsRange } = params;\r\n this._direction = direction;\r\n this._isVertical = isVertical;\r\n this._scrollSize = scrollSize;\r\n this._scrollWeight = isVertical ? container.scrollHeight : container.scrollWidth;\r\n this._listSize = isVertical ? list.offsetHeight : list.offsetWidth;\r\n this._size = isVertical ? container.offsetHeight : container.offsetWidth;\r\n this._isEnd = (this._scrollSize + this._size) === this._scrollWeight;\r\n this._delta = delta;\r\n this._scrollDelta = scrollDelta;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\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/16.x/projects/ng-virtual-list/src/lib/utils/event-emitter.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class EventEmitter<E = string, H = TEventHandler> {\r\n protected _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 unknown 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 unknown as string;\r\n if (this._listeners.hasOwnProperty(event)) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v as unknown === handler as unknown);\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 unknown as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as unknown 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 unknown 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 as unknown === handler as unknown);\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 unknown as E, listener as unknown 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}","export class CMap<K = string, V = any> {\r\n protected _dict: { [k: string | number]: V } = {};\r\n\r\n constructor(dict?: CMap<K, V>) {\r\n this.from(dict);\r\n }\r\n\r\n from(dict?: CMap<K, V>) {\r\n if (dict) {\r\n this._dict = { ...dict._dict };\r\n }\r\n }\r\n\r\n get(key: K) {\r\n const k = String(key);\r\n return this._dict[k];\r\n }\r\n set(key: K, value: V) {\r\n const k = String(key);\r\n this._dict[k] = value;\r\n return this;\r\n }\r\n has(key: K) {\r\n return this._dict.hasOwnProperty(String(key));\r\n }\r\n delete(key: K) {\r\n const k = String(key);\r\n delete this._dict[k];\r\n }\r\n clear() {\r\n this._dict = {};\r\n }\r\n toObject() {\r\n return this._dict;\r\n }\r\n}","import { ScrollDirection } from \"../models\";\r\nimport { debounce } from \"./debounce\";\r\nimport { EventEmitter } from \"./event-emitter\";\r\nimport { CMap } from \"./cmap\";\r\n\r\nexport interface ICacheMap<I = any, B = any> {\r\n set: (id: I, bounds: B) => CMap<I, B>;\r\n has: (id: I) => boolean;\r\n get: (id: I) => B | undefined;\r\n delete: (id: I) => void;\r\n clear: () => void;\r\n}\r\n\r\nexport const CACHE_BOX_CHANGE_EVENT_NAME = 'change';\r\n\r\ntype CacheMapEvents = typeof CACHE_BOX_CHANGE_EVENT_NAME;\r\n\r\ntype OnChangeEventListener = (version: number) => void;\r\n\r\ntype CacheMapListeners = OnChangeEventListener;\r\n\r\nconst MAX_SCROLL_DIRECTION_POOL = 10, CLEAR_SCROLL_DIRECTION_TO = 10,\r\n DIR_BACK = '-1', DIR_NONE = '0', DIR_FORWARD = '1';\r\n\r\n/**\r\n * Cache map.\r\n * Emits a change event on each mutation.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/cache-map.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class CacheMap<I = string | number, B = any, E = CacheMapEvents, L = CacheMapListeners> extends EventEmitter<E, L> implements ICacheMap {\r\n protected _map = new CMap<I, B>();\r\n\r\n protected _snapshot = new CMap<I, B>();\r\n\r\n protected _version: number = 0;\r\n\r\n protected _previousVersion = this._version;\r\n\r\n protected _lifeCircleId: number | undefined;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n cancelAnimationFrame(this._lifeCircleId);\r\n }\r\n }\r\n\r\n protected nextTick(cb: () => void) {\r\n if (this._disposed) {\r\n return;\r\n }\r\n\r\n this._lifeCircleId = requestAnimationFrame(() => {\r\n cb();\r\n });\r\n return this._lifeCircleId;\r\n }\r\n\r\n protected lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n protected lifeCircleDo() {\r\n this._previousVersion = this._version;\r\n\r\n this.nextTick(() => {\r\n this.lifeCircle();\r\n });\r\n }\r\n\r\n clearScrollDirectionCache(async = true) {\r\n if (async) {\r\n this._clearScrollDirectionDebounce.execute();\r\n return;\r\n }\r\n\r\n this._scrollDirectionCache = [];\r\n }\r\n\r\n private calcScrollDirection(v: ScrollDirection): ScrollDirection {\r\n while (this._scrollDirectionCache.length >= MAX_SCROLL_DIRECTION_POOL) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n this._scrollDirectionCache.push(v);\r\n const dict: { [x: string]: number } = { [DIR_BACK]: 0, [DIR_NONE]: 0, [DIR_FORWARD]: 0 };\r\n for (let i = 0, l = this._scrollDirectionCache.length, li = l - 1; i < l; i++) {\r\n const dir = String(this._scrollDirectionCache[i]);\r\n dict[dir] += 1;\r\n if (i === li) {\r\n for (let d in dict) {\r\n if (d === String(v)) {\r\n continue;\r\n }\r\n dict[d] -= 1;\r\n }\r\n }\r\n }\r\n\r\n if (dict[DIR_BACK] > dict[DIR_NONE] && dict[DIR_BACK] > dict[DIR_FORWARD]) {\r\n return -1;\r\n } else if (dict[DIR_FORWARD] > dict[DIR_BACK] && dict[DIR_FORWARD] > dict[DIR_NONE]) {\r\n return 1;\r\n }\r\n\r\n return 0;\r\n }\r\n\r\n protected bumpVersion() {\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n const v = this._version === Number.MAX_SAFE_INTEGER ? 0 : this._version + 1;\r\n this._version = v;\r\n }\r\n\r\n protected fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as unknown as E, this.version);\r\n }\r\n }\r\n\r\n set(id: I, bounds: B): CMap<I, B> {\r\n if (this._map.has(id)) {\r\n const b: any = this._map.get(id), bb: any = bounds;\r\n if (b.width === bb.width && b.height === bb.height) {\r\n return this._map;\r\n }\r\n return this._map;\r\n }\r\n\r\n const v = this._map.set(id, bounds);\r\n\r\n this.bumpVersion();\r\n\r\n return v;\r\n }\r\n\r\n has(id: I): boolean {\r\n return this._map.has(id);\r\n }\r\n\r\n get(id: I): B | undefined {\r\n return this._map.get(id);\r\n }\r\n\r\n delete(id: I) {\r\n this._map.delete(id);\r\n }\r\n\r\n clear() {\r\n this._map.clear();\r\n }\r\n\r\n snapshot() {\r\n this._snapshot = new CMap(this._map);\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.stopLifeCircle();\r\n\r\n this._snapshot.clear();\r\n\r\n this._map.clear();\r\n }\r\n}","import { ComponentRef } from \"@angular/core\";\r\nimport { ScrollDirection } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { Id, ISize } from \"../types\";\r\nimport { CMap } from \"./cmap\";\r\n\r\ntype TrackingPropertyId = string | number;\r\n\r\nexport interface IVirtualListItemComponent<I = any> {\r\n getBounds(): ISize;\r\n itemId: Id;\r\n id: number;\r\n item: I | null;\r\n show: () => void;\r\n hide: () => void;\r\n}\r\n\r\n/**\r\n * Tracks display items by property\r\n * 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/16.x/projects/ng-virtual-list/src/lib/utils/tracker.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Tracker<C extends BaseVirtualListItemComponent = any> {\r\n /**\r\n * display objects dictionary of indexes by id\r\n */\r\n protected _displayObjectIndexMapById: { [id: number]: number } = {};\r\n\r\n set displayObjectIndexMapById(v: { [id: number]: number }) {\r\n if (this._displayObjectIndexMapById === v) {\r\n return;\r\n }\r\n\r\n this._displayObjectIndexMapById = v;\r\n }\r\n\r\n get displayObjectIndexMapById() {\r\n return this._displayObjectIndexMapById;\r\n }\r\n\r\n /**\r\n * Dictionary displayItems propertyNameId by items propertyNameId\r\n */\r\n protected _trackMap = new CMap<TrackingPropertyId, number>();\r\n\r\n get trackMap() {\r\n return this._trackMap;\r\n }\r\n\r\n protected _trackingPropertyName!: string;\r\n\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = v;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n this._trackingPropertyName = trackingPropertyName;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snapedComponent: ComponentRef<C> | null | undefined,\r\n direction: ScrollDirection): void {\r\n if (!items) {\r\n return;\r\n }\r\n\r\n const untrackedItems = [...components], newTrackItems: Array<any> = [],\r\n untrackedComponentsByTypeMap: { [type: string]: Array<{ comp: ComponentRef<C>; index: number }>; } = {},\r\n isDown = direction === 0 || direction === 1;\r\n let isRegularSnapped = false;\r\n\r\n for (let i = isDown ? 0 : items.length - 1, l = isDown ? items.length : 0; isDown ? i < l : i >= l; isDown ? i++ : i--) {\r\n const item = items[i], itemTrackingProperty = item.id;\r\n\r\n if (this._trackMap) {\r\n if (this._trackMap.has(itemTrackingProperty)) {\r\n const diId = this._trackMap.get(itemTrackingProperty),\r\n compIndex = this._displayObjectIndexMapById[diId], comp = components[compIndex];\r\n\r\n const compId = comp?.instance?.id;\r\n if (comp !== undefined && compId === diId) {\r\n const indexByUntrackedItems = untrackedItems.findIndex(v => {\r\n return v.instance.id === compId;\r\n });\r\n if (indexByUntrackedItems > -1) {\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n untrackedItems.splice(indexByUntrackedItems, 1);\r\n continue;\r\n }\r\n }\r\n } else {\r\n this._trackMap.delete(itemTrackingProperty);\r\n\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n newTrackItems.push(item);\r\n }\r\n }\r\n\r\n if (untrackedItems.length > 0) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i], type = comp?.instance.item?.data?.type;\r\n if (!Array.isArray(untrackedComponentsByTypeMap[type])) {\r\n untrackedComponentsByTypeMap[type] = [];\r\n }\r\n untrackedComponentsByTypeMap[type].push({ comp, index: i });\r\n }\r\n }\r\n\r\n for (let i = 0, l = newTrackItems.length; i < l; i++) {\r\n if (untrackedItems.length > 0) {\r\n const item = newTrackItems[i], itemTrackingProperty = item.id,\r\n type = item.data?.type;\r\n let comp: ComponentRef<C> | undefined;\r\n if (type) {\r\n const list = untrackedComponentsByTypeMap[type];\r\n if (Array.isArray(list) && list.length > 0) {\r\n const untrackedItem = list.shift();\r\n if (untrackedItem) {\r\n comp = untrackedItem.comp;\r\n untrackedItems.slice(untrackedItem.index, 1);\r\n }\r\n }\r\n }\r\n\r\n if (!comp) {\r\n comp = untrackedItems.shift();\r\n }\r\n\r\n if (comp) {\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n isRegularSnapped = true;\r\n snapedComponent.instance.item = item;\r\n snapedComponent.instance.show();\r\n }\r\n }\r\n if (snapedComponent) {\r\n if (item.config.snapped || item.config.snappedOut) {\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n } else {\r\n comp.instance.item = item;\r\n comp.instance.show();\r\n }\r\n\r\n if (this._trackMap) {\r\n this._trackMap.set(itemTrackingProperty, comp.instance.id);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (untrackedItems.length) {\r\n for (let i = 0, l = untrackedItems.length; i < l; i++) {\r\n const comp = untrackedItems[i];\r\n comp.instance.item = null;\r\n comp.instance.hide();\r\n }\r\n }\r\n\r\n if (!isRegularSnapped) {\r\n if (snapedComponent) {\r\n snapedComponent.instance.item = null;\r\n snapedComponent.instance.hide();\r\n }\r\n }\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C): void {\r\n if (!component) {\r\n return;\r\n }\r\n\r\n const propertyIdName = this._trackingPropertyName;\r\n\r\n if (this._trackMap && (component as any)[propertyIdName] !== undefined) {\r\n this._trackMap.delete(propertyIdName);\r\n }\r\n }\r\n\r\n clearTrackMap() {\r\n this._trackMap.clear();\r\n }\r\n\r\n dispose() {\r\n if (this._trackMap) {\r\n this._trackMap.clear();\r\n }\r\n }\r\n}","const DEFAULT_EXTRA = {\r\n extremumThreshold: 2,\r\n bufferSize: 10,\r\n};\r\n\r\nexport interface IExtraOptions {\r\n extremumThreshold?: number;\r\n bufferSize?: number;\r\n}\r\n\r\nexport const bufferInterpolation = (currentBufferValue: number, array: Array<number>, value: number, extra?: IExtraOptions) => {\r\n const {\r\n extremumThreshold = DEFAULT_EXTRA.extremumThreshold,\r\n bufferSize = DEFAULT_EXTRA.bufferSize,\r\n } = extra ?? DEFAULT_EXTRA;\r\n\r\n if (currentBufferValue < value) {\r\n let i = 0;\r\n while (i < extremumThreshold) {\r\n array.push(value);\r\n i++;\r\n }\r\n } else {\r\n array.push(value);\r\n }\r\n\r\n if (array.length > bufferSize) {\r\n while (array.length > bufferSize) {\r\n array.shift();\r\n }\r\n }\r\n\r\n const l = array.length;\r\n let buffer = 0;\r\n\r\n for (let i = 0; i < l; i++) {\r\n buffer += array[i];\r\n }\r\n\r\n return l !== 0 ? Math.ceil(buffer / l) : 0;\r\n};\r\n","import { ComponentRef } from \"@angular/core\";\r\nimport { IRenderVirtualListCollection, } from \"../models/render-collection.model\";\r\nimport { IRenderVirtualListItem } from \"../models/render-item.model\";\r\nimport { Id } from \"../types/id\";\r\nimport { CMap } from './cmap';\r\nimport { CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { IRect, ISize } from \"../types\";\r\nimport {\r\n HEIGHT_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME, X_PROP_NAME, Y_PROP_NAME,\r\n} from \"../const\";\r\nimport { IVirtualListItemConfigMap } from \"../models\";\r\nimport { bufferInterpolation } from \"./buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../models/base-virtual-list-item-component\";\r\nimport { debounce } from \"./debounce\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n PREPARE = 'prepare',\r\n RESET = 'reset',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n offsetX: number;\r\n offsetY: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snippedPos: number;\r\n startIndex: number;\r\n startPosition: number;\r\n totalItemsToDisplayEndWeight: number;\r\n totalLength: number;\r\n totalSize: number;\r\n typicalItemSize: number;\r\n isFromItemIdFound: boolean;\r\n isUpdating: boolean;\r\n}\r\n\r\nexport interface IRecalculateMetricsOptions<I extends IItem, C extends Array<I>> {\r\n bounds: IRect;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport interface IUpdateCollectionOptions<I extends IItem, C extends Array<I>>\r\n extends Omit<IRecalculateMetricsOptions<I, C>, 'collection' | 'previousTotalSize' | 'crudDetected' | 'deletedItemsMap'> { }\r\n\r\nexport type CacheMapEvents = TrackBoxEvents;\r\n\r\nexport type OnChangeEventListener = (version: number) => void;\r\n\r\nexport type OnResetEventListener = (reseted: boolean) => void;\r\n\r\nexport type OnPrepareEventListener = (prepared: boolean) => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnResetEventListener | OnPrepareEventListener;\r\n\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\r\n}\r\n\r\nexport interface IUpdateCollectionReturns {\r\n displayItems: IRenderVirtualListCollection;\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\nexport interface IGetMetricsReturns {\r\n totalSize: number;\r\n delta: number;\r\n crudDetected: boolean;\r\n}\r\n\r\ninterface IItem<I = any> {\r\n [prop: string]: I;\r\n}\r\n\r\nconst DEFAULT_BUFFER_EXTREMUM_THRESHOLD = 15,\r\n DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH = 30,\r\n DEFAULT_RESET_BUFFER_SIZE_TIMEOUT = 10000,\r\n IS_NEW = 'isNew',\r\n SCROLL_SNAP_TO_START_ITERATIONS = 10,\r\n SCROLL_SNAP_TO_END_ITERATIONS = 5;\r\n\r\ntype Cache = ISize & { method?: ItemDisplayMethods } & IItem;\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/16.x/projects/ng-virtual-list/src/lib/utils/track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class TrackBox<C extends BaseVirtualListItemComponent = any>\r\n extends CacheMap<Id, Cache, CacheMapEvents, CacheMapListeners> {\r\n\r\n protected _tracker!: Tracker<C>;\r\n\r\n protected _items: IRenderVirtualListCollection | null | undefined;\r\n\r\n set items(v: IRenderVirtualListCollection | null | undefined) {\r\n if (this._items === v) {\r\n return;\r\n }\r\n\r\n this._items = v;\r\n }\r\n\r\n protected _displayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set displayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._displayComponents === v) {\r\n return;\r\n }\r\n\r\n this._displayComponents = v;\r\n }\r\n\r\n protected _snapedDisplayComponent: ComponentRef<C> | null | undefined;\r\n\r\n set snapedDisplayComponent(v: ComponentRef<C> | null | undefined) {\r\n if (this._snapedDisplayComponent === v) {\r\n return;\r\n }\r\n\r\n this._snapedDisplayComponent = v;\r\n }\r\n\r\n protected _isSnappingMethodAdvanced: boolean = false;\r\n\r\n set isSnappingMethodAdvanced(v: boolean) {\r\n if (this._isSnappingMethodAdvanced === v) {\r\n return;\r\n }\r\n\r\n this._isSnappingMethodAdvanced = v;\r\n }\r\n\r\n protected _isLazy: boolean = false;\r\n\r\n set isLazy(v: boolean) {\r\n if (this._isLazy === v) {\r\n return;\r\n }\r\n\r\n this._isLazy = v;\r\n }\r\n\r\n /**\r\n * Set the trackBy property\r\n */\r\n set trackingPropertyName(v: string) {\r\n this._trackingPropertyName = this._tracker.trackingPropertyName = v;\r\n }\r\n\r\n protected _trackingPropertyName: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n set isScrollStart(v: boolean) {\r\n this._isScrollStart = v;\r\n if (v) {\r\n this._isScrollSnapToStart = SCROLL_SNAP_TO_START_ITERATIONS;\r\n }\r\n }\r\n\r\n protected _isScrollStart: boolean = false;\r\n\r\n set isScrollEnd(v: boolean) {\r\n this._isScrollEnd = v;\r\n if (v) {\r\n this._isScrollSnapToEnd = SCROLL_SNAP_TO_END_ITERATIONS;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: number = 0;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart > 0;\r\n }\r\n\r\n protected _isScrollSnapToEnd: number = 0;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd > 0;\r\n }\r\n\r\n protected _scrollStartOffset: number = 0;\r\n set scrollStartOffset(v: number) {\r\n this._scrollStartOffset = v;\r\n }\r\n get scrollStartOffset() {\r\n return this._scrollStartOffset;\r\n }\r\n\r\n protected _scrollEndOffset: number = 0;\r\n set scrollEndOffset(v: number) {\r\n this._scrollEndOffset = v;\r\n }\r\n get scrollEndOffset() {\r\n return this._scrollEndOffset;\r\n }\r\n\r\n constructor(trackingPropertyName: string) {\r\n super();\r\n\r\n this._trackingPropertyName = trackingPropertyName;\r\n\r\n this.initialize();\r\n }\r\n\r\n protected initialize() {\r\n this._tracker = new Tracker(this._trackingPropertyName);\r\n }\r\n\r\n override set(id: Id, cache: Cache): CMap<Id, ISize> {\r\n if (this._map.has(id)) {\r\n const b = this._map.get(id);\r\n if (b?.width === cache.width && b.height === cache.height) {\r\n return this._map;\r\n }\r\n }\r\n\r\n const v = this._map.set(id, cache);\r\n\r\n this.bumpVersion();\r\n return v;\r\n }\r\n\r\n protected _previousCollection: Array<IItem> | null | undefined;\r\n\r\n protected _deletedItemsMap: { [index: number]: ISize } = {};\r\n\r\n protected _crudDetected = false;\r\n get crudDetected() { return this._crudDetected; }\r\n\r\n protected override fireChangeIfNeed() {\r\n if (this.changesDetected()) {\r\n this.dispatch(TrackBoxEvents.CHANGE, this._version);\r\n }\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _scrollDelta: number = 0;\r\n get scrollDelta() { return this._scrollDelta; }\r\n\r\n isAdaptiveBuffer = true;\r\n\r\n protected _bufferSequenceExtraThreshold = DEFAULT_BUFFER_EXTREMUM_THRESHOLD;\r\n\r\n protected _maxBufferSequenceLength = DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH;\r\n\r\n protected _bufferSizeSequence: Array<number> = [];\r\n\r\n protected _bufferSize: number = 0;\r\n get bufferSize() { return this._bufferSize; }\r\n\r\n protected _defaultBufferSize: number = 0;\r\n\r\n protected _maxBufferSize: number = this._defaultBufferSize;\r\n\r\n protected _resetBufferSizeTimeout: number = DEFAULT_RESET_BUFFER_SIZE_TIMEOUT;\r\n\r\n protected _resetBufferSizeTimer: number | undefined;\r\n\r\n protected _isReseted: boolean = true;\r\n\r\n protected _prepared: boolean = false;\r\n\r\n protected _preparedToStart: boolean = false;\r\n\r\n protected _preparedToStartIterations: number = 2;\r\n\r\n get prepared() { return this._prepared; }\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.lifeCircleDo();\r\n }\r\n\r\n /**\r\n * Scans the collection for deleted items and flushes the deleted item cache.\r\n */\r\n resetCollection<I extends IItem, C extends Array<I>>(currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n if (currentCollection !== undefined && currentCollection !== null &&\r\n currentCollection === this._previousCollection) {\r\n console.warn('Attention! The collection must be immutable.');\r\n return;\r\n }\r\n\r\n const reseted = ((!this._previousCollection || this._previousCollection.length === 0) &&\r\n (!!currentCollection && currentCollection.length > 0));\r\n if (this._isReseted !== reseted && reseted && this._prepared) {\r\n this._prepared = false;\r\n this.dispatch(TrackBoxEvents.PREPARE, false);\r\n }\r\n\r\n this._isReseted = reseted;\r\n\r\n this.dispatch(TrackBoxEvents.RESET, reseted);\r\n\r\n this.updateCache(this._previousCollection, currentCollection, itemSize);\r\n\r\n this._previousCollection = [...(currentCollection || [])];\r\n }\r\n\r\n /**\r\n * Update the cache of items from the list\r\n */\r\n protected updateCache<I extends IItem, C extends Array<I>>(previousCollection: C | null | undefined,\r\n currentCollection: C | null | undefined,\r\n itemSize: number): void {\r\n const trackBy = this._trackingPropertyName;\r\n let crudDetected = false;\r\n\r\n if (!currentCollection || currentCollection.length === 0) {\r\n if (previousCollection) {\r\n // deleted\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n crudDetected = true;\r\n if (this._map.has(id)) {\r\n this._map.delete(id);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n if (!previousCollection || previousCollection.length === 0) {\r\n if (currentCollection) {\r\n // added\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n crudDetected = true;\r\n const item = currentCollection[i], id = item[trackBy];\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n return;\r\n }\r\n const collectionDict: IItem<I> = {};\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i];\r\n if (item) {\r\n collectionDict[item[trackBy]] = item;\r\n }\r\n }\r\n const notChangedMap: IItem<I> = {}, deletedMap: IItem<I> = {}, deletedItemsMap: { [index: number]: ISize } = {},\r\n updatedMap: IItem<I> = {};\r\n for (let i = 0, l = previousCollection.length; i < l; i++) {\r\n const item = previousCollection[i], id = item[trackBy];\r\n if (item) {\r\n if (collectionDict.hasOwnProperty(id)) {\r\n if (item === collectionDict[id]) {\r\n // not changed\r\n notChangedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.NOT_CHANGED\r\n });\r\n continue;\r\n } else {\r\n // updated\r\n crudDetected = true;\r\n updatedMap[item[trackBy]] = item;\r\n this._map.set(id, {\r\n ...(this._map.get(id) || { width: itemSize, height: itemSize }),\r\n method: ItemDisplayMethods.UPDATE\r\n });\r\n continue;\r\n }\r\n }\r\n\r\n // deleted\r\n crudDetected = true;\r\n deletedMap[id] = item;\r\n deletedItemsMap[i] = this._map.get(id);\r\n this._map.delete(id);\r\n }\r\n }\r\n\r\n for (let i = 0, l = currentCollection.length; i < l; i++) {\r\n const item = currentCollection[i], id = item[trackBy];\r\n if (item && !deletedMap.hasOwnProperty(id) && !updatedMap.hasOwnProperty(id) &&\r\n !notChangedMap.hasOwnProperty(id)) {\r\n // added\r\n crudDetected = true;\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\r\n }\r\n this._crudDetected = crudDetected;\r\n this._deletedItemsMap = deletedItemsMap;\r\n }\r\n\r\n /**\r\n * Finds the position of a collection element by the given Id\r\n */\r\n getItemPosition<I extends IItem, C extends Array<I>>(id: Id, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IGetItemPositionOptions<I, C>): number {\r\n const opt = { fromItemId: id, itemConfigMap, ...options };\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const { scrollSize, isFromItemIdFound } = this.recalculateMetrics({\r\n ...opt,\r\n dynamicSize: this._crudDetected || opt.dynamicSize,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap: this._deletedItemsMap,\r\n });\r\n return isFromItemIdFound ? scrollSize : -1;\r\n }\r\n\r\n cancelScrollSnappingToEnd(clearBuffer: boolean = false) {\r\n this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToEnd = 0;\r\n }\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n getMetrics<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IGetMetricsReturns {\r\n const opt = { itemConfigMap, ...options }, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n return { totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n /**\r\n * Updates the collection of display objects\r\n */\r\n updateCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n options: IUpdateCollectionOptions<I, C>): IUpdateCollectionReturns {\r\n const opt = { itemConfigMap, ...options }, dynamicSize = opt.dynamicSize, crudDetected = this._crudDetected,\r\n deletedItemsMap = this._deletedItemsMap;\r\n if (dynamicSize) {\r\n this.cacheElements();\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n if (this.isSnappedToStart) {\r\n if (this._isScrollSnapToStart) {\r\n this._isScrollSnapToStart--;\r\n }\r\n }\r\n\r\n if (this.isSnappedToEnd) {\r\n if (this._isScrollSnapToEnd) {\r\n this._isScrollSnapToEnd--;\r\n }\r\n }\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n if (!opt.dynamicSize || (this._preparedToStart && !this._prepared && this._previousTotalSize === metrics.totalSize)) {\r\n this._prepared = true;\r\n this.dispatch(TrackBoxEvents.PREPARE, true);\r\n }\r\n\r\n if (this._preparedToStartIterations > 0 && this._previousTotalSize !== metrics.totalSize) {\r\n this._preparedToStartIterations--;\r\n }\r\n\r\n if (this._preparedToStartIterations === 0) {\r\n this._preparedToStart = true;\r\n }\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n if (!dynamicSize) {\r\n this._isScrollStart = false;\r\n }\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n if (this.isScrollStart || this.isScrollEnd) {\r\n this.bumpVersion();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams(metrics: IMetrics, totalItemsLength: number) {\r\n this.disposeClearBufferSizeTimer();\r\n\r\n const scrollSize = metrics.scrollSize + this._delta, delta = Math.abs(this._previousScrollSize - scrollSize);\r\n this._previousScrollSize = scrollSize;\r\n const bufferRawSize = Math.min(Math.floor(metrics.typicalItemSize !== 0 ? delta / metrics.typicalItemSize : 0) * 5, totalItemsLength),\r\n minBufferSize = bufferRawSize < this._defaultBufferSize ? this._defaultBufferSize : bufferRawSize,\r\n bufferValue = minBufferSize > this._maxBufferSize ? this._maxBufferSize : minBufferSize;\r\n\r\n this._bufferSize = bufferInterpolation(this._bufferSize, this._bufferSizeSequence, bufferValue, {\r\n extremumThreshold: this._bufferSequenceExtraThreshold,\r\n bufferSize: this._maxBufferSequenceLength,\r\n });\r\n\r\n this.startResetBufferSizeTimer();\r\n }\r\n\r\n protected startResetBufferSizeTimer() {\r\n this._resetBufferSizeTimer = setTimeout(() => {\r\n this._bufferSize = this._defaultBufferSize;\r\n this._bufferSizeSequence = [];\r\n }, this._resetBufferSizeTimeout) as unknown as number;\r\n }\r\n\r\n protected disposeClearBufferSizeTimer() {\r\n clearTimeout(this._resetBufferSizeTimer);\r\n }\r\n\r\n /**\r\n * Calculates the entry into the overscroll area and returns the number of overscroll elements\r\n */\r\n protected getElementNumToEnd<I extends IItem, C extends Array<I>>(i: number, collection: C, map: CMap<Id, ISize>, typicalItemSize: number,\r\n size: number, isVertical: boolean, indexOffset: number = 0): { num: number, offset: number } {\r\n const trackBy = this._trackingPropertyName, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME;\r\n let offset = 0, num = 0;\r\n for (let j = collection.length - indexOffset - 1; j >= i; j--) {\r\n const item = collection[j], id = item[trackBy];\r\n let itemSize = 0;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n itemSize = cache && cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n } else {\r\n itemSize = typicalItemSize;\r\n }\r\n offset += itemSize;\r\n num++;\r\n if (offset > size) {\r\n return { num: 0, offset };\r\n }\r\n }\r\n return { num, offset };\r\n }\r\n\r\n /**\r\n * Calculates list metrics\r\n */\r\n protected recalculateMetrics<I extends IItem, C extends Array<I>>(options: IRecalculateMetricsOptions<I, C>): IMetrics {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, bufferSize: minBufferSize,\r\n scrollSize, snap, itemConfigMap, enabledBufferOptimization, previousTotalSize, crudDetected,\r\n deletedItemsMap } = options as IRecalculateMetricsOptions<I, C> & {\r\n itemConfigMap: IVirtualListItemConfigMap,\r\n }, roundedScrollSize = Math.round(scrollSize);\r\n\r\n const trackBy = this._trackingPropertyName, bufferSize = Math.max(minBufferSize, this._bufferSize),\r\n { width, height } = bounds, sizeProperty = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = isVertical ? height : width, totalLength = collection.length, typicalItemSize = itemSize,\r\n w = isVertical ? width : typicalItemSize, h = isVertical ? typicalItemSize : height,\r\n map = this._map, snapshot = this._snapshot, checkOverscrollItemsLimit = Math.ceil(typicalItemSize !== 0 ? size / typicalItemSize : 0),\r\n snippedPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsWeights: Array<number> = [],\r\n isFromId = fromItemId !== undefined && (typeof fromItemId === 'number' && fromItemId > -1)\r\n || (typeof fromItemId === 'string' && fromItemId > '-1');\r\n\r\n let leftItemsOffset = 0, rightItemsOffset = 0;\r\n if (enabledBufferOptimization) {\r\n switch (this.scrollDirection) {\r\n case 1: {\r\n leftItemsOffset = 0;\r\n rightItemsOffset = bufferSize;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1, itemsFromDisplayEndToOffsetEnd = 0, itemsFromStartToDisplayEnd = -1,\r\n leftItemLength = 0, rightItemLength = 0,\r\n leftItemsWeight = 0, rightItemsWeight = 0,\r\n leftHiddenItemsWeight = 0,\r\n totalItemsToDisplayEndWeight = 0,\r\n leftSizeOfAddedItems = 0,\r\n leftSizeOfUpdatedItems = 0,\r\n leftSizeOfDeletedItems = 0,\r\n itemById: I | undefined = undefined,\r\n itemByIdPos: number = this._scrollStartOffset,\r\n targetDisplayItemIndex: number = -1,\r\n isTargetInOverscroll: boolean = false,\r\n actualScrollSize = itemByIdPos,\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset,\r\n startIndex: number,\r\n isFromItemIdFound = false,\r\n deltaFromStartCreation = 0,\r\n isUpdating = false;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n // If the list is dynamic or there are new elements in the collection, then it switches to the long algorithm.\r\n if (dynamicSize) {\r\n if (isFromId) {\r\n for (let stickyId: Id | undefined = undefined, i = 0, l = collection.length; i < l; i++) {\r\n const item = collection[i], id = item?.[trackBy];\r\n if (stickyId !== undefined && !itemConfigMap[id]?.sticky && id === fromItemId) {\r\n stickyItemId = stickyId;\r\n break;\r\n }\r\n if (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, stickyCollectionItem: I | undefined = undefined, stickyComponentSize = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const ii = i + 1, collectionItem = collection[i], id = collectionItem[trackBy];\r\n\r\n let componentSize = 0, componentSizeDelta = 0, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id);\r\n componentSize = cache[sizeProperty] > 0 ? cache[sizeProperty] : typicalItemSize;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = (cache as Cache)?.[IS_NEW] ?? (this._isLazy && isStart && !this._isReseted);\r\n isNew = isItemNew;\r\n if (isNew) {\r\n isUpdating = true;\r\n }\r\n const snapshotBounds = snapshot.get(id),\r\n componentSnapshotSize = componentSize - (snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize);\r\n componentSizeDelta = componentSnapshotSize;\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.UPDATE: {\r\n map.set(id, { ...cache, method: isNew ? ItemDisplayMethods.UPDATE : ItemDisplayMethods.NOT_CHANGED, isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n componentSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, isNew });\r\n if (isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n deltaFromStartCreation += componentSizeDelta;\r\n componentSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize + this._scrollStartOffset - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n totalSize += componentSize;\r\n\r\n if (isFromId) {\r\n if (itemById === undefined) {\r\n if (id !== fromItemId && id === stickyItemId && itemConfigMap?.[id]?.sticky === 1) {\r\n stickyComponentSize = componentSize;\r\n stickyCollectionItem = collectionItem;\r\n y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n targetDisplayItemIndex = i;\r\n if (stickyCollectionItem && itemConfigMap) {\r\n const { num } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical);\r\n if (num > 0) {\r\n isTargetInOverscroll = true;\r\n y -= size - this._scrollEndOffset - componentSize - stickyComponentSize;\r\n }\r\n }\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n leftItemsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = ii;\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === undefined || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n itemsFromStartToDisplayEnd = ii;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n\r\n if (y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfAddedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n leftSizeOfUpdatedItems += componentSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n } else {\r\n if (i < itemsFromDisplayEndToOffsetEnd) {\r\n rightItemsWeight += componentSize;\r\n }\r\n }\r\n\r\n y += componentSize;\r\n }\r\n\r\n if (isTargetInOverscroll) {\r\n const collectionLength = collection.length, { num } = this.getElementNumToEnd(\r\n collectionLength - (checkOverscrollItemsLimit < 0 ? 0 : collectionLength - checkOverscrollItemsLimit),\r\n collection, map, typicalItemSize, size, isVertical,\r\n collectionLength - (collectionLength - (targetDisplayItemIndex + 1)),\r\n );\r\n if (num > 0) {\r\n itemsFromStartToScrollEnd -= num;\r\n }\r\n }\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n actualScrollSize = isFromId ? itemByIdPos : scrollSize;\r\n\r\n leftItemsWeights.splice(0, leftItemsWeights.length - leftItemsOffset);\r\n leftItemsWeights.forEach(v => {\r\n leftItemsWeight += v;\r\n });\r\n\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n if (crudDetected) {\r\n let y = 0;\r\n for (let i = 0, l = collection.length; i < l; i++) {\r\n const collectionItem = collection[i], id = collectionItem[trackBy];\r\n let componentSize = typicalItemSize, itemDisplayMethod: ItemDisplayMethods = ItemDisplayMethods.NOT_CHANGED;\r\n if (map.has(id)) {\r\n const cache = map.get(id)!;\r\n itemDisplayMethod = cache?.method ?? ItemDisplayMethods.UPDATE;\r\n const isItemNew = (cache as Cache)?.[IS_NEW] ?? (this._isLazy && this._isReseted);\r\n if (!isItemNew && (!this._isLazy || !itemConfigMap[collection[0][trackBy]]?.sticky) || !isStart) {\r\n isNew = false;\r\n }\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n if (isNew) {\r\n deltaFromStartCreation += componentSize;\r\n }\r\n map.set(id, { ...cache, method: ItemDisplayMethods.NOT_CHANGED, isNew });\r\n }\r\n }\r\n\r\n if (deletedItemsMap.hasOwnProperty(i)) {\r\n const cache = deletedItemsMap[i], size = cache?.[sizeProperty] ?? typicalItemSize;\r\n if (y < scrollSize - size) {\r\n leftSizeOfDeletedItems += size;\r\n }\r\n }\r\n\r\n if (y < scrollSize - componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE: {\r\n leftSizeOfUpdatedItems += componentSize;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n leftSizeOfDeletedItems += componentSize;\r\n break;\r\n }\r\n }\r\n }\r\n y += componentSize;\r\n }\r\n }\r\n itemsFromStartToScrollEnd = Math.floor(typicalItemSize !== 0 ? scrollSize / typicalItemSize : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(typicalItemSize !== 0 ? (scrollSize + size) / typicalItemSize : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize);\r\n rightItemLength = itemsFromStartToDisplayEnd + bufferSize > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferSize;\r\n leftItemsWeight = leftItemLength * typicalItemSize;\r\n rightItemsWeight = rightItemLength * typicalItemSize;\r\n leftHiddenItemsWeight = itemsFromStartToScrollEnd * typicalItemSize;\r\n totalItemsToDisplayEndWeight = itemsFromStartToDisplayEnd * typicalItemSize;\r\n totalSize = (totalLength * typicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n actualScrollSize = scrollSize * k;\r\n }\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight,\r\n renderItems = itemsOnDisplayLength + leftItemLength + rightItemLength,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\r\n\r\n if (isFromId && !isTargetInOverscroll) {\r\n actualScrollSize -= this._scrollStartOffset;\r\n }\r\n\r\n const metrics: IMetrics = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n offsetX: bounds.x,\r\n offsetY: bounds.y,\r\n width,\r\n height,\r\n dynamicSize,\r\n itemSize,\r\n itemsFromStartToScrollEnd,\r\n itemsFromStartToDisplayEnd,\r\n itemsOnDisplayWeight,\r\n itemsOnDisplayLength,\r\n isVertical,\r\n leftHiddenItemsWeight,\r\n leftItemLength,\r\n leftItemsWeight,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startIndex,\r\n startPosition,\r\n totalItemsToDisplayEndWeight,\r\n totalLength,\r\n totalSize,\r\n typicalItemSize,\r\n isFromItemIdFound,\r\n isUpdating,\r\n };\r\n\r\n return metrics;\r\n }\r\n\r\n clearDeltaDirection() {\r\n this.clearScrollDirectionCache();\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(): void {\r\n this.bumpVersion();\r\n }\r\n\r\n protected generateDisplayCollection<I extends IItem, C extends Array<I>>(items: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics): IRenderVirtualListCollection {\r\n const {\r\n offsetY,\r\n offsetX,\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n snap,\r\n snippedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snippedPos,\r\n isSnappingMethodAdvanced = this.isSnappingMethodAdvanced,\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset,\r\n positionOffset = isVertical ? offsetY : offsetX;\r\n let pos = startPosition,\r\n renderItems = renderItemsLength,\r\n stickyItem: IRenderVirtualListItem | undefined, nextSticky: IRenderVirtualListItem | undefined, stickyItemIndex = -1,\r\n stickyItemSize = 0, endStickyItem: IRenderVirtualListItem | undefined, nextEndSticky: IRenderVirtualListItem | undefined,\r\n endStickyItemIndex = -1, endStickyItemSize = 0, count = 1;\r\n\r\n if (snap) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? itemsFromStartToScrollEnd : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize ? cache?.[sizeProperty] > 0 ? cache?.[sizeProperty] : typicalItemSize : typicalItemSize,\r\n absoluteStartPosition = pos - (scrollSize - size) - size,\r\n ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio);\r\n if (sticky === 1) {\r\n const isOdd = i % 2 != 0,\r\n measures = {\r\n x: isVertical ? startPosition : actualSnippedPosition,\r\n y: isVertical ? actualSnippedPosition : startPosition,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n size,\r\n position: pos,\r\n positionOffset,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - size : 0,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n stickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n stickyItemIndex = i;\r\n stickyItemSize = size;\r\n\r\n displayItems.push(stickyItem);\r\n\r\n count++;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (snap) {\r\n const si = itemsFromStartToScrollEnd + itemsOnDisplayLength - 1, startIndex = si < 0 ? si : si;\r\n for (let i = Math.min(startIndex, totalLength > 0 ? totalLength - 1 : 0), l = totalLength; i < l; i++) {\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n const id = collectionItem[trackBy], cache = this.get(id)!, sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n size = dynamicSize\r\n ? cache?.[sizeProperty] || typicalItemSize\r\n : typicalItemSize;\r\n if (sticky === 2) {\r\n const isOdd = i % 2 != 0,\r\n w = isVertical ? normalizedItemWidth : size, h = isVertical ? size : normalizedItemHeight,\r\n absoluteStartPosition = pos - (scrollSize - size) - size, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures = {\r\n x: isVertical ? 0 : actualEndSnippedPosition - w,\r\n y: isVertical ? actualEndSnippedPosition - h : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n positionOffset,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: w,\r\n height: h,\r\n delta: actualEndSnippedPosition - size,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky,\r\n snap,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: items.length,\r\n zIndex: '1',\r\n };\r\n\r\n const itemData: I = collectionItem;\r\n\r\n endStickyItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n endStickyItemIndex = i;\r\n endStickyItemSize = size;\r\n\r\n displayItems.push(endStickyItem);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let i = startIndex, iterations = 0;\r\n\r\n while (renderItems > 0) {\r\n iterations++;\r\n if (iterations > totalLength || i >= totalLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n continue;\r\n }\r\n\r\n const id = collectionItem[trackBy], cache = this.get(id)!,\r\n size = dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize;\r\n\r\n if (id !== stickyItem?.id && id !== endStickyItem?.id) {\r\n const isOdd = i % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = snap && (sticky === 1 && (pos <= scrollSize + this._scrollStartOffset) || sticky === 2 && (pos >= scrollSize + boundsSize - size)),\r\n absoluteStartPosition = pos - scrollSize, ratio = size !== 0 ? boundsSize / size : 0, absoluteStartPositionPercent = -(boundsSize !== 0 ? absoluteStartPosition / boundsSize : 0) * ratio,\r\n absoluteEndPosition = boundsSize - (absoluteStartPositionPercent + size),\r\n absoluteEndPositionPercent = (absoluteStartPositionPercent + (boundsSize !== 0 ? (absoluteEndPosition + size) / boundsSize : 0) * ratio),\r\n measures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\r\n positionOffset,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - size : 0,\r\n }, config = {\r\n new: (cache as Cache)?.[IS_NEW] === true,\r\n odd: isOdd,\r\n even: !isOdd,\r\n isVertical,\r\n collapsable,\r\n selectable,\r\n sticky: sticky,\r\n snap,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n tabIndex: count,\r\n zIndex: '0',\r\n };\r\n\r\n count++;\r\n\r\n if (snapped) {\r\n config.zIndex = '2';\r\n }\r\n\r\n const itemData: I = collectionItem;\r\n\r\n const item: IRenderVirtualListItem = {\r\n index: i, id, measures, data: itemData, previouseData: i > 0 ? items[i - 1] : null,\r\n nextData: i < totalLength ? items[i + 1] : null, config,\r\n };\r\n if (!nextSticky && stickyItemIndex < i && sticky === 1 && (pos <= scrollSize + this._scrollStartOffset + size + stickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualSnippedPosition : pos;\r\n item.measures.y = isVertical ? snapped ? actualSnippedPosition : pos : 0;\r\n nextSticky = item;\r\n nextSticky.config.snapped = snapped;\r\n nextSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n nextSticky.config.zIndex = '3';\r\n }\r\n if (!nextEndSticky && endStickyItemIndex > i && sticky === 2 &&\r\n (pos >= actualEndSnippedPosition - size - endStickyItemSize)) {\r\n item.measures.x = isVertical ? 0 : snapped ? actualEndSnippedPosition - size : pos;\r\n item.measures.y = isVertical ? snapped ? actualEndSnippedPosition - size : pos : 0;\r\n nextEndSticky = item;\r\n nextEndSticky.config.zIndex = '3';\r\n nextEndSticky.config.snapped = snapped;\r\n nextEndSticky.measures.delta = isVertical ? (item.measures.y - scrollSize) : (item.measures.x - scrollSize);\r\n }\r\n\r\n displayItems.push(item);\r\n }\r\n\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] <= actualSnippedPosition + stickyItemSize) {\r\n if (nextSticky.measures[axis] > scrollSize - stickyItemSize) {\r\n stickyItem.measures[axis] = nextSticky.measures[axis] - stickyItemSize;\r\n stickyItem.config.snapped = nextSticky.config.snapped = false;\r\n stickyItem.config.snappedOut = true;\r\n stickyItem.config.sticky = 1;\r\n stickyItem.measures.delta = isVertical ? stickyItem.measures.y - scrollSize : stickyItem.measures.x - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = isVertical ? nextSticky.measures.y - scrollSize : nextSticky.measures.x - scrollSize;\r\n stickyItem.measures[axis] = stickyItem.measures[axis] + stickyItem.measures[sizeProperty];\r\n }\r\n }\r\n\r\n if (nextEndSticky && endStickyItem &&\r\n (nextEndSticky.measures[axis] >= actualEndSnippedPosition - endStickyItemSize - nextEndSticky.measures[sizeProperty])) {\r\n if (nextEndSticky.measures[axis] < actualEndSnippedPosition - nextEndSticky.measures[sizeProperty]) {\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n endStickyItem.config.snapped = nextEndSticky.config.snapped = false;\r\n endStickyItem.config.snappedOut = true;\r\n endStickyItem.config.sticky = 2;\r\n endStickyItem.measures.delta = isVertical ? endStickyItem.measures.y - scrollSize : endStickyItem.measures.x - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n endStickyItem.measures[axis] = nextEndSticky.measures[axis] + nextEndSticky.measures[sizeProperty];\r\n }\r\n }\r\n }\r\n return displayItems;\r\n }\r\n\r\n resetPositions() {\r\n this._tracker.clearTrackMap();\r\n\r\n this.clearScrollDirectionCache(false);\r\n\r\n this.deltaDirection = 0;\r\n\r\n this.track();\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(): void {\r\n if (!this._items || !this._displayComponents) {\r\n return;\r\n }\r\n\r\n this._tracker.track(this._items, this._displayComponents, this._snapedDisplayComponent, this.scrollDirection);\r\n }\r\n\r\n setDisplayObjectIndexMapById(v: { [id: number]: number }): void {\r\n this._tracker.displayObjectIndexMapById = v;\r\n }\r\n\r\n untrackComponentByIdProperty(component?: C | undefined) {\r\n this._tracker.untrackComponentByIdProperty(component);\r\n }\r\n\r\n getItemBounds(id: Id): ISize | undefined {\r\n if (this.has(id)) {\r\n return this.get(id);\r\n }\r\n return undefined;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\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\r\n if (bounds.width && bounds.height) {\r\n this.set(itemId, { ...this.get(itemId), ...bounds });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n }\r\n }\r\n\r\n cacheClean() {\r\n this._map.clear();\r\n this._snapshot.clear();\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n this.disposeClearBufferSizeTimer();\r\n\r\n if (this._debouncedIsScrollStartOff) {\r\n this._debouncedIsScrollStartOff.dispose();\r\n }\r\n\r\n if (this._tracker) {\r\n this._tracker.dispose();\r\n }\r\n }\r\n}\r\n","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, 'advanced', 'chat'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.NORMAL, 'normal'];\r\n\r\nexport const isSnappingMethodAdvenced = (method: SnappingMethod): boolean => {\r\n return ADVANCED_PATTERNS.includes(method);\r\n}\r\n\r\nexport const isSnappingMethodDefault = (method: SnappingMethod): boolean => {\r\n return DEFAULT_PATTERN.includes(method);\r\n}","const userAgent = navigator.userAgent.toLowerCase();\r\n\r\nexport const IS_FIREFOX = /firefox/.test(userAgent);\r\n\r\nexport const IS_CROME = /chrome/.test(userAgent);\r\n\r\nexport const IS_SAFARI = /(safari)/.test(userAgent);\r\n\r\nexport const IS_IOS = /(iphone|ipad|ipod)/.test(userAgent);\r\n\r\nexport const IS_ANDROID = /android/.test(userAgent);\r\n\r\nexport const IS_EDGE = /edge/.test(userAgent);\r\n\r\nexport const IS_XIAOMI = /xiaomi/.test(userAgent);\r\n\r\nexport const FIREFOX_SCROLLBAR_OVERLAP_SIZE = 12;\r\n","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/is-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isDirection = (src: Direction, expected: Direction): boolean => {\r\n if (HORIZONTAL_ALIASES.includes(expected)) {\r\n return HORIZONTAL_ALIASES.includes(src);\r\n }\r\n return VERTICAL_ALIASES.includes(src);\r\n}","import { MethodForSelecting, MethodsForSelecting } from \"../enums\";\r\n\r\nconst NONE_ALIASES = [MethodsForSelecting.NONE, 'none'],\r\n SELECT_ALIASES = [MethodsForSelecting.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [MethodsForSelecting.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the method for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/is-method-for-selecting.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isMethodForSelecting = (src: MethodForSelecting, expected: MethodForSelecting): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","export const objectAsReadonly = <T = { [x: string]: any } | null | undefined>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n const result = {} as T;\r\n for (const prop in source) {\r\n const value = source[prop];\r\n Object.defineProperty(result, prop, {\r\n value,\r\n writable: false,\r\n enumerable: true,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport const copyValueAsReadonly = <T = any>(source: T) => {\r\n if (!source) {\r\n return source;\r\n }\r\n\r\n if (Array.isArray(source)) {\r\n return Object.freeze([...source]) as unknown as T;\r\n }\r\n\r\n if (typeof source === 'object') {\r\n return objectAsReadonly(source);\r\n }\r\n\r\n return source;\r\n}","import { CollectionMode, CollectionModes } from \"../enums\";\r\n\r\nconst NORMAL_ALIASES = [CollectionModes.NORMAL, 'normal'],\r\n LAZY_ALIASES = [CollectionModes.LAZY, 'lazy'];\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/16.x/projects/ng-virtual-list/src/lib/utils/is-collection-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollectionMode = (src: CollectionMode, expected: CollectionMode): boolean => {\r\n if (LAZY_ALIASES.includes(expected)) {\r\n return LAZY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}","export enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\r\n}","import { GradientColorPositions } from \"../../../types/gradient-color-positions\";\r\nimport { ScrollerDirection, ScrollerDirections } from \"../enums\";\r\n\r\ninterface ICalculateScrollParams {\r\n direction: ScrollerDirections;\r\n viewportWidth: number;\r\n viewportHeight: number;\r\n contentWidth: number;\r\n contentHeight: number;\r\n startOffset: number;\r\n endOffset: number;\r\n positionX: number;\r\n positionY: number;\r\n minSize: number;\r\n}\r\n\r\ninterface ICalculateScrollPositionParams {\r\n scrollSize: number;\r\n position: number;\r\n}\r\n\r\n/**\r\n * ScrollBox\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/16.x/projects/ng-virtual-list/src/lib/components/scroller/utils/scroll-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollBox {\r\n calculateScroll({\r\n direction,\r\n viewportWidth,\r\n viewportHeight,\r\n contentWidth,\r\n contentHeight,\r\n startOffset,\r\n endOffset,\r\n positionX,\r\n positionY,\r\n minSize,\r\n }: ICalculateScrollParams) {\r\n const isVertical = direction === ScrollerDirection.VERTICAL;\r\n let x = 0, y = 0, thumbPosition = 0, thumbSize = 0, thumbGradientPositions: GradientColorPositions = [0, 0];\r\n if (isVertical) {\r\n y = positionY;\r\n const vh = viewportHeight - startOffset - endOffset, ch = contentHeight - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rh = (ch !== 0 ? (y / ch) : 0),\r\n pos = startOffset + ((vh - atsDelta) * rh),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vh / size : 0,\r\n aspp = -(vh !== 0 ? asp / vh : 0) * bRatio, aep = vh - (aspp + size),\r\n aepp = (aspp + (vh !== 0 ? (aep + size) / vh : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n } else {\r\n x = positionX;\r\n const vw = viewportWidth - startOffset - endOffset, cw = contentWidth - startOffset - endOffset,\r\n ratio = cw > 0 ? vw / cw : 1, ts = vw * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts, rw = (cw !== 0 ? (x / cw) : 0),\r\n pos = startOffset + ((vw - atsDelta) * rw),\r\n size = ats, asp = pos, bRatio = size !== 0 ? vw / size : 0,\r\n aspp = -(vw !== 0 ? asp / vw : 0) * bRatio, aep = vw - (aspp + size),\r\n aepp = (aspp + (vw !== 0 ? (aep + size) / vw : 0) * bRatio);\r\n thumbGradientPositions[0] = aspp;\r\n thumbGradientPositions[1] = aepp;\r\n thumbSize = ats;\r\n thumbPosition = pos;\r\n }\r\n return {\r\n x,\r\n y,\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n };\r\n }\r\n\r\n getScrollPositionByScrollBar({\r\n scrollSize,\r\n position,\r\n }: ICalculateScrollPositionParams) {\r\n const pos = (position * scrollSize);\r\n return {\r\n position: pos,\r\n };\r\n }\r\n}","export const easeOutQuad = (t: number) => {\r\n return t * (2 - t);\r\n};\r\n\r\nexport const easeLinear = (t: number) => {\r\n return t + 1;\r\n};","/**\r\n * SubstarateModes\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SubstarateModes {\r\n RECTANGLE = 'rectangle',\r\n ROUNDED_RECTANGLE = 'rounded-rectangle',\r\n CIRCLE = 'circle',\r\n};\r\n","/**\r\n * SubstarateStyles\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/enums/substrate-styles.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SubstarateStyles {\r\n NONE = 'none',\r\n STROKE = 'stroke',\r\n};","import { RoundedCorner } from \"../types/rounded-corner\";\r\n\r\n/**\r\n * getShapeMinSize\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/utils/get-shape-min-size.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getShapeMinSize = (roundedRectPath: RoundedCorner) => {\r\n if (!Array.isArray(roundedRectPath)) {\r\n return 0;\r\n }\r\n return Math.max(...roundedRectPath) * 2;\r\n};\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject, combineLatest, delay, filter, tap } from 'rxjs';\r\nimport { Color } from '../../types/color';\r\nimport { GradientColor } from '../../types/gradient-color';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { RoundedCorner } from '../../types/rounded-corner';\r\nimport { SubstarateMode } from './types/substrate-mode';\r\nimport { SubstarateModes } from './enums/substrate-modes';\r\nimport { SubstarateStyle } from './types';\r\nimport { SubstarateStyles } from './enums';\r\nimport { getShapeMinSize } from '../../utils/get-shape-min-size';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst DEFAULT_STROKE_ANIMATION_DURATION = 1000,\r\n DEFAULT_FILL_COLORS: GradientColor = [\"rgba(0, 0, 0, .1)\", \"rgba(0, 0, 0, .1)\"],\r\n DEFAULT_STROKE_WIDTH = 3,\r\n RIPPLE_ANIMATE_CLASS = 'animate',\r\n DEFAULT_RIPPLE_COLOR = 'rgba(0, 0, 0, .1)',\r\n SHAPE_NAME = 'ng-substrate-shape',\r\n CLIP_NAME = 'ng-substrate-clip',\r\n GRADIENT_COLOR_NAME = 'stop-color',\r\n FILL_GRADIENT_NAME = 'ng-substrate-fill-gradient',\r\n STROKE_GRADIENT_NAME = 'ng-substrate-stroke-gradient',\r\n FILL = 'fill',\r\n INHERIT = 'inherit',\r\n STROKE_WIDTH = 'stroke-width',\r\n DUR = 'dur',\r\n X1 = 'x1',\r\n X2 = 'x2',\r\n ID = 'id',\r\n HREF = 'href',\r\n CLIP_PATH = 'clip-path',\r\n PX = 'px',\r\n MS = 'ms',\r\n D = 'd',\r\n VIEW_BOX = 'viewBox',\r\n CX = 'cx',\r\n CY = 'cy',\r\n R = 'r',\r\n STROKE = 'stroke',\r\n NONE = 'none';\r\n\r\nconst circlePath = (cx: number, cy: number, r: number) => {\r\n return `M ${cx} ${cy} m -${r}, 0 a ${r},${r} 0 1,1 ${(r * 2)},0 a ${r},${r} 0 1,1 -${(r * 2)},0`;\r\n};\r\n\r\nconst roundedRectPath = (width: number, height: number, tl: number, tr: number, br: number, bl: number) => {\r\n const top = width - tl - tr;\r\n const right = height - tr - br;\r\n const bottom = width - br - bl;\r\n const left = height - bl - tl;\r\n const d = `\r\n M${tl},0\r\n h${top}\r\n a${tr},${tr} 0 0 1 ${tr},${tr}\r\n v${right}\r\n a${br},${br} 0 0 1 -${br},${br}\r\n h-${bottom}\r\n a${bl},${bl} 0 0 1 -${bl},-${bl}\r\n v-${left}\r\n a${tl},${tl} 0 0 1 ${tl},-${tl}\r\n z\r\n `;\r\n return d;\r\n};\r\n\r\n/**\r\n * Substrate\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/16.x/projects/ng-virtual-list/src/lib/components/substrate/substrate.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-substrate',\r\n templateUrl: './substrate.component.html',\r\n styleUrls: ['./substrate.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.Emulated,\r\n})\r\nexport class SubstrateComponent {\r\n private static __id: number = 0;\r\n private static get nextId() {\r\n const id = SubstrateComponent.__id = SubstrateComponent.__id + 1 === Number.MAX_SAFE_INTEGER ? 0 : SubstrateComponent.__id + 1;\r\n return id;\r\n }\r\n\r\n private _id: number;\r\n\r\n get id() { return this._id; }\r\n\r\n @ViewChild('svg')\r\n svg: ElementRef<SVGElement> | undefined;\r\n\r\n @ViewChild('ripple')\r\n rippleShape: ElementRef<SVGCircleElement> | undefined;\r\n\r\n @ViewChild('clip')\r\n clip: ElementRef<SVGClipPathElement> | undefined;\r\n\r\n @ViewChild('clipUse')\r\n clipUse: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('shape')\r\n shape: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('hilight')\r\n hilight: ElementRef<SVGUseElement> | undefined;\r\n\r\n @ViewChild('path')\r\n path: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('fillGradient')\r\n fillGradient: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('strokeGradient')\r\n strokeGradient: ElementRef<SVGPathElement> | undefined;\r\n\r\n @ViewChild('fillGradientColor1')\r\n fillGradientColor1: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('fillGradientColor2')\r\n fillGradientColor2: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeGradientColor1')\r\n strokeGradientColor1: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeGradientColor2')\r\n strokeGradientColor2: ElementRef<SVGStopElement> | undefined;\r\n\r\n @ViewChild('strokeAnimation')\r\n strokeAnimation: ElementRef<SVGAnimateTransformElement> | undefined;\r\n\r\n private _$mode = new BehaviorSubject<SubstarateMode>(SubstarateModes.ROUNDED_RECTANGLE);\r\n readonly $mode = this._$mode.asObservable();\r\n\r\n @Input()\r\n set mode(v: SubstarateMode) {\r\n this._$mode.next(v);\r\n }\r\n get mode() { return this._$mode.getValue(); }\r\n\r\n private _$width = new BehaviorSubject<number>(0);\r\n readonly $width = this._$width.asObservable();\r\n\r\n @Input()\r\n set width(v: number) {\r\n this._$width.next(v);\r\n }\r\n get width() { return this._$width.getValue(); }\r\n\r\n private _$height = new BehaviorSubject<number>(0);\r\n readonly $height = this._$height.asObservable();\r\n\r\n @Input()\r\n set height(v: number) {\r\n this._$height.next(v);\r\n }\r\n get height() { return this._$height.getValue(); }\r\n\r\n private _$roundCorner = new BehaviorSubject<RoundedCorner | undefined>(undefined);\r\n readonly $roundCorner = this._$roundCorner.asObservable();\r\n\r\n @Input()\r\n set roundCorner(v: RoundedCorner | undefined) {\r\n this._$roundCorner.next(v);\r\n }\r\n get roundCorner() { return this._$roundCorner.getValue(); }\r\n\r\n private _$type = new BehaviorSubject<SubstarateStyle>(SubstarateStyles.NONE);\r\n readonly $type = this._$type.asObservable();\r\n\r\n @Input()\r\n set type(v: SubstarateStyle) {\r\n this._$type.next(v);\r\n }\r\n get type() { return this._$type.getValue(); }\r\n\r\n private _$strokeColors = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $strokeColors = this._$strokeColors.asObservable();\r\n\r\n @Input()\r\n set strokeColors(v: string | GradientColor | undefined) {\r\n this._$strokeColors.next(v);\r\n }\r\n get strokeColors() { return this._$strokeColors.getValue(); }\r\n\r\n private _$strokeWidth = new BehaviorSubject<number>(DEFAULT_STROKE_WIDTH);\r\n readonly $strokeWidth = this._$strokeWidth.asObservable();\r\n\r\n @Input()\r\n set strokeWidth(v: number) {\r\n this._$strokeWidth.next(v);\r\n }\r\n get strokeWidth() { return this._$strokeWidth.getValue(); }\r\n\r\n private _$strokeAnimationDuration = new BehaviorSubject<number>(DEFAULT_STROKE_ANIMATION_DURATION);\r\n readonly $strokeAnimationDuration = this._$strokeAnimationDuration.asObservable();\r\n\r\n @Input()\r\n set strokeAnimationDuration(v: number) {\r\n this._$strokeAnimationDuration.next(v);\r\n }\r\n get strokeAnimationDuration() { return this._$strokeAnimationDuration.getValue(); }\r\n\r\n private _$rippleColor = new BehaviorSubject<Color | undefined>(DEFAULT_RIPPLE_COLOR);\r\n readonly $rippleColor = this._$rippleColor.asObservable();\r\n\r\n @Input()\r\n set rippleColor(v: Color | undefined) {\r\n this._$rippleColor.next(v);\r\n }\r\n get rippleColor() { return this._$rippleColor.getValue(); }\r\n\r\n private _$fillColors = new BehaviorSubject<string | GradientColor | undefined>(DEFAULT_FILL_COLORS);\r\n readonly $fillColors = this._$fillColors.asObservable();\r\n\r\n @Input()\r\n set fillColors(v: string | GradientColor | undefined) {\r\n this._$fillColors.next(v);\r\n }\r\n get fillColors() { return this._$fillColors.getValue(); }\r\n\r\n private _$fillPositions = new BehaviorSubject<GradientColorPositions | undefined>(undefined);\r\n readonly $fillPositions = this._$fillPositions.asObservable();\r\n\r\n @Input()\r\n set fillPositions(v: GradientColorPositions | undefined) {\r\n this._$fillPositions.next(v);\r\n }\r\n get fillPositions() { return this._$fillPositions.getValue(); }\r\n\r\n private _$rippleEnabled = new BehaviorSubject<boolean>(false);\r\n readonly $rippleEnabled = this._$rippleEnabled.asObservable();\r\n\r\n @Input()\r\n set rippleEnabled(v: boolean) {\r\n this._$rippleEnabled.next(v);\r\n }\r\n get rippleEnabled() { return this._$rippleEnabled.getValue(); }\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(private _elementRef: ElementRef<HTMLDivElement>) {\r\n this._id = SubstrateComponent.nextId;\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const fillGradient = this.fillGradient;\r\n if (fillGradient) {\r\n fillGradient.nativeElement.setAttribute(ID, `${FILL_GRADIENT_NAME}${this._id}`);\r\n }\r\n\r\n const strokeGradient = this.strokeGradient;\r\n if (strokeGradient) {\r\n strokeGradient.nativeElement.setAttribute(ID, `${STROKE_GRADIENT_NAME}${this._id}`);\r\n }\r\n\r\n const path = this.path;\r\n if (path) {\r\n path.nativeElement.setAttribute(ID, `${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const clip = this.clip;\r\n if (clip) {\r\n clip.nativeElement.setAttribute(ID, `${CLIP_NAME}${this._id}`);\r\n }\r\n\r\n const clipUse = this.clipUse;\r\n if (clipUse) {\r\n clipUse.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const shape = this.shape;\r\n if (shape) {\r\n shape.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n shape.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const hilight = this.hilight;\r\n if (hilight) {\r\n hilight.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n hilight.nativeElement.setAttribute(HREF, `#${SHAPE_NAME}${this._id}`);\r\n }\r\n\r\n const rippleShape = this.rippleShape;\r\n if (rippleShape) {\r\n rippleShape.nativeElement.setAttribute(CLIP_PATH, `url(#${CLIP_NAME}${this._id})`);\r\n }\r\n\r\n this.$fillColors.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(fillColors => {\r\n if (Array.isArray(fillColors) && fillColors.length === 2) {\r\n const fillGradientColor1 = this.fillGradientColor1, fillGradientColor2 = this.fillGradientColor2;\r\n if (fillGradientColor1 && fillGradientColor2) {\r\n fillGradientColor1.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${fillColors[0]}`);\r\n fillGradientColor2.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${fillColors[1]}`);\r\n\r\n const shape = this.shape?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(FILL, `url(#${FILL_GRADIENT_NAME}${this._id})`);\r\n }\r\n }\r\n } else {\r\n const shape = this.shape?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(FILL, INHERIT);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeWidth.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeWidth => {\r\n const shape = this.shape?.nativeElement, path = this.path?.nativeElement, hilight = this.hilight?.nativeElement;\r\n if (shape) {\r\n shape.setAttribute(STROKE_WIDTH, `${strokeWidth}`);\r\n }\r\n if (path) {\r\n path.setAttribute(STROKE_WIDTH, `${strokeWidth * 2}`);\r\n }\r\n if (hilight) {\r\n hilight.setAttribute(STROKE_WIDTH, `${strokeWidth * 2}`);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeAnimationDuration.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeAnimationDuration => {\r\n const strokeAnimation = this.strokeAnimation?.nativeElement;\r\n if (strokeAnimation) {\r\n strokeAnimation.setAttribute(DUR, `${strokeAnimationDuration ?? DEFAULT_STROKE_ANIMATION_DURATION}${MS}`);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$fillPositions.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(fillPositions => {\r\n if (Array.isArray(fillPositions) && fillPositions.length === 2) {\r\n const fillGradient = this.fillGradient;\r\n if (fillGradient) {\r\n fillGradient.nativeElement.setAttribute(X1, `${fillPositions[0]}${PX}`);\r\n fillGradient.nativeElement.setAttribute(X2, `${fillPositions[1]}${PX}`);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$strokeColors.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(strokeColors => {\r\n if (Array.isArray(strokeColors) && strokeColors.length === 2) {\r\n const strokeGradientColor1 = this.strokeGradientColor1, strokeGradientColor2 = this.strokeGradientColor2;\r\n if (strokeGradientColor1 && strokeGradientColor2) {\r\n strokeGradientColor1.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${strokeColors[0]}`);\r\n strokeGradientColor2.nativeElement.setAttribute(GRADIENT_COLOR_NAME, `${strokeColors[1]}`);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest(([this.$width, this.$height, this.$roundCorner, this.$mode])).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([width, height, roundCorner, mode]) => {\r\n const svg = this.svg?.nativeElement, path = this.path?.nativeElement, minSize = getShapeMinSize(roundCorner),\r\n ww = (width || minSize), w = ww >= minSize ? ww : minSize,\r\n hh = (height || minSize), h = hh >= minSize ? hh : minSize;\r\n if (svg && path) {\r\n svg.style.width = `${w}${PX}`;\r\n svg.style.height = `${h}${PX}`;\r\n svg.setAttribute(VIEW_BOX, `0 0 ${w} ${h}`);\r\n switch (mode) {\r\n case SubstarateModes.CIRCLE: {\r\n const r = Math.min(w, h) * .5, shape = circlePath(w * .5, h * .5, r);\r\n path.setAttribute('d', shape);\r\n break;\r\n }\r\n case SubstarateModes.ROUNDED_RECTANGLE: {\r\n const corner = Array.isArray(roundCorner) && roundCorner.length === 4 ? roundCorner : [0, 0, 0, 0];\r\n const shape = roundedRectPath(w, h, corner[0], corner[1], corner[2], corner[3]);\r\n path.setAttribute(D, shape);\r\n break;\r\n }\r\n case SubstarateModes.RECTANGLE:\r\n default: {\r\n const shape = roundedRectPath(w, h, 0, 0, 0, 0);\r\n path.setAttribute(D, shape);\r\n break;\r\n }\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$type.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(type => {\r\n const shape = this.shape?.nativeElement, hilight = this.hilight?.nativeElement;\r\n if (shape) {\r\n switch (type) {\r\n case SubstarateStyles.STROKE: {\r\n shape.setAttribute(STROKE, `url(#${STROKE_GRADIENT_NAME}${this._id})`);\r\n break;\r\n }\r\n case SubstarateStyles.NONE:\r\n default:\r\n shape.setAttribute(STROKE, NONE);\r\n break;\r\n }\r\n }\r\n if (hilight) {\r\n switch (type) {\r\n case SubstarateStyles.STROKE: {\r\n hilight.setAttribute(STROKE, `url(#${STROKE_GRADIENT_NAME}${this._id})`);\r\n break;\r\n }\r\n case SubstarateStyles.NONE:\r\n default:\r\n hilight.setAttribute(STROKE, NONE);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $rippleEnabled = this.$rippleEnabled;\r\n\r\n $rippleEnabled.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (rippleShape) {\r\n rippleShape.nativeElement.classList.add(RIPPLE_ANIMATE_CLASS);\r\n }\r\n }),\r\n delay(800),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n if (rippleShape) {\r\n rippleShape.nativeElement.classList.remove(RIPPLE_ANIMATE_CLASS);\r\n this._$rippleEnabled.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ripple(e: PointerEvent | MouseEvent) {\r\n const { x, y, width, height } = (this._elementRef.nativeElement as HTMLDivElement).getBoundingClientRect(),\r\n localX = e.clientX - x, localY = e.clientY - y, rippleColor = this._$rippleColor.getValue() ?? DEFAULT_RIPPLE_COLOR, endRadius = Math.max(width, height);\r\n const rippleShape = this.rippleShape?.nativeElement;\r\n if (rippleShape) {\r\n rippleShape.setAttribute(CX, String(localX));\r\n rippleShape.setAttribute(CY, String(localY));\r\n rippleShape.setAttribute(R, String(endRadius));\r\n rippleShape.setAttribute(FILL, rippleColor);\r\n }\r\n this._$rippleEnabled.next(true);\r\n }\r\n}\r\n","<svg #svg style=\"fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;\">\r\n <defs>\r\n <linearGradient class=\"fill\" #fillGradient y1=\"50%\" y2=\"50%\" gradientTransform=\"rotate(90)\">\r\n <stop class=\"g1\" #fillGradientColor1 offset=\"0%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <stop class=\"g2\" #fillGradientColor2 offset=\"100%\" stop-color=\"rgba(0,0,0,0)\" />\r\n </linearGradient>\r\n <radialGradient #strokeGradient cx=\"0%\" cy=\"0%\" r=\"125%\" fx=\"0\" fy=\"0\" gradientTransform=\"rotate(45)\">\r\n <stop #strokeGradientColor1 offset=\"80%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <stop #strokeGradientColor2 offset=\"100%\" stop-color=\"rgba(0,0,0,0)\" />\r\n <animateTransform #strokeAnimation attributeName=\"gradientTransform\" attributeType=\"XML\" type=\"rotate\"\r\n from=\"0 0.5 0.5\" to=\"360 0.5 0.5\" dur=\"1000ms\" repeatCount=\"indefinite\" />\r\n </radialGradient>\r\n <path #path stroke-width=\"6\" />\r\n <clipPath #clip>\r\n <use #clipUse />\r\n </clipPath>\r\n </defs>\r\n <use #shape class=\"shape\" stroke-width=\"3\" fill=\"rgba(0,0,0,0)\" />\r\n <use #hilight class=\"hilight\" stroke-width=\"6\" fill=\"none\" />\r\n <circle #ripple class=\"ripple\" fill=\"none\" />\r\n</svg>","import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { SubstarateStyle, SubstarateStyles } from '../substrate';\r\nimport { GradientColor } from '../../types/gradient-color';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { RoundedCorner } from '../../types/rounded-corner';\r\nimport { BehaviorSubject, combineLatest, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { DEFAULT_SCROLLBAR_THEME, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP, TOUCH_END, TOUCH_MOVE, TOUCH_START } from '../../const';\r\nimport { ISize, ScrollBarTheme } from '../../types';\r\nimport { Color } from '../../types/color';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\r\n DEFAULT_ROUNDED_CORNER: RoundedCorner = [3, 3, 3, 3],\r\n DEFAULT_STROKE_ANIMATION_DURATION = 500,\r\n DEFAULT_RIPPLE_COLOR = 'rgba(0,0,0,0.5)',\r\n TRANSLATE_3D = 'translate3d',\r\n PX = 'px',\r\n WIDTH = 'width',\r\n HEIGHT = 'height',\r\n OPACITY = 'opacity',\r\n OPACITY_0 = '0',\r\n OPACITY_1 = '1',\r\n TRANSITION = 'transition',\r\n NONE = 'none',\r\n TRANSITION_FADE_IN = `${OPACITY} 500ms ease-out`;\r\n\r\n/**\r\n * ScrollBar 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/16.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-bar',\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrls: ['./ng-scroll-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgScrollBarComponent implements OnDestroy {\r\n @ViewChild('thumb')\r\n thumb: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('track')\r\n track: ElementRef<HTMLDivElement> | undefined;\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n @Input()\r\n set isVertical(v: boolean) {\r\n this._$isVertical.next(v);\r\n }\r\n get isVertical() { return this._$isVertical.getValue(); }\r\n\r\n private _$position = new BehaviorSubject<number>(0);\r\n readonly $position = this._$position.asObservable();\r\n\r\n @Input()\r\n set position(v: number) {\r\n this._$position.next(v);\r\n }\r\n get position() { return this._$position.getValue(); }\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n @Input()\r\n set thumbGradientPositions(v: GradientColorPositions) {\r\n this._$thumbGradientPositions.next(v);\r\n }\r\n get thumbGradientPositions() { return this._$thumbGradientPositions.getValue(); }\r\n\r\n private _$size = new BehaviorSubject<number>(DEFAULT_SIZE);\r\n readonly $size = this._$size.asObservable();\r\n\r\n @Input()\r\n set size(v: number) {\r\n this._$size.next(v);\r\n }\r\n get size() { return this._$size.getValue(); }\r\n\r\n private _$theme = new BehaviorSubject<ScrollBarTheme | undefined>(DEFAULT_SCROLLBAR_THEME);\r\n readonly $theme = this._$theme.asObservable();\r\n\r\n @Input()\r\n set theme(v: ScrollBarTheme | undefined) {\r\n this._$theme.next(v);\r\n }\r\n get theme() { return this._$theme.getValue(); }\r\n\r\n private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n @Input()\r\n set prepared(v: boolean) {\r\n this._$prepared.next(v);\r\n }\r\n get prepared() { return this._$prepared.getValue(); }\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n @Input()\r\n set show(v: boolean) {\r\n this._$show.next(v);\r\n }\r\n get show() { return this._$show.getValue(); }\r\n\r\n @Output()\r\n onDrag = new EventEmitter<number>();\r\n\r\n private _$actualPosition = new BehaviorSubject<number>(0);\r\n readonly $actualPosition = this._$actualPosition.asObservable();\r\n\r\n private _$thickness = new BehaviorSubject<number>(DEFAULT_THICKNESS);\r\n readonly $thickness = this._$thickness.asObservable();\r\n\r\n private _$thumbGradientFill = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $thumbGradientFill = this._$thumbGradientFill.asObservable();\r\n\r\n private _$strokeGradientColor = new BehaviorSubject<string | GradientColor | undefined>(undefined);\r\n readonly $strokeGradientColor = this._$strokeGradientColor.asObservable();\r\n\r\n private _$strokeAnimationDuration = new BehaviorSubject<number>(DEFAULT_STROKE_ANIMATION_DURATION);\r\n readonly $strokeAnimationDuration = this._$strokeAnimationDuration.asObservable();\r\n\r\n private _$roundCorner = new BehaviorSubject<RoundedCorner>(DEFAULT_ROUNDED_CORNER);\r\n readonly $roundCorner = this._$roundCorner.asObservable();\r\n\r\n private _$rippleColor = new BehaviorSubject<Color | undefined>(DEFAULT_RIPPLE_COLOR);\r\n readonly $rippleColor = this._$rippleColor.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [className: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _$type = new BehaviorSubject<SubstarateStyle>(SubstarateStyles.STROKE);\r\n readonly $type = this._$type.asObservable();\r\n\r\n private _$styles = new BehaviorSubject<{ [styleName: string]: any }>({});\r\n readonly $styles = this._$styles.asObservable();\r\n\r\n private _$thumbWidth = new BehaviorSubject<number>(0);\r\n readonly $thumbWidth = this._$thumbWidth.asObservable();\r\n\r\n private _$thumbHeight = new BehaviorSubject<number>(0);\r\n readonly $thumbHeight = this._$thumbHeight.asObservable();\r\n\r\n private _resizeObserver: ResizeObserver;\r\n\r\n private _$bounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $bounds = this._$bounds.asObservable();\r\n\r\n private _onResizeHandler = () => {\r\n const content = this.track?.nativeElement;\r\n if (content) {\r\n this._$bounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n }\r\n }\r\n\r\n private _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n get scrollSize() {\r\n const bounds = this._$bounds.getValue(), size = this._$size.getValue(), isVertical = this._$isVertical.getValue();\r\n return isVertical ? size < bounds.height ? bounds.height - size : 0 : size < bounds.width ? bounds.width - size : 0;\r\n }\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n \r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n\r\n const $track = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.track).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $thumb = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.thumb).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n );\r\n\r\n $track.pipe(\r\n takeUntilDestroyed(),\r\n tap(track => {\r\n this._resizeObserver.observe(track);\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$thickness, this.$size]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, thickness, size]) => {\r\n this._$thumbWidth.next(isVertical ? thickness : size);\r\n this._$thumbHeight.next(isVertical ? size : thickness);\r\n }),\r\n ).subscribe();\r\n\r\n this.$loading.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$type.next(v ? SubstarateStyles.STROKE : SubstarateStyles.NONE);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$show, this.$thickness]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, show, thickness]) => {\r\n this._$styles.next({\r\n [isVertical ? WIDTH : HEIGHT]: `${thickness}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n })\r\n }),\r\n ).subscribe();\r\n\r\n this.$position.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$actualPosition.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$isVertical, this.$actualPosition]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([isVertical, position]) => {\r\n const thumb = this.thumb?.nativeElement;\r\n if (thumb) {\r\n if (isVertical) {\r\n thumb.style.transform = `${TRANSLATE_3D}(0, ${position}${PX}, 0)`;\r\n } else {\r\n thumb.style.transform = `${TRANSLATE_3D}(${position}${PX}, 0, 0)`;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this.$theme.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(theme => {\r\n if (!!theme) {\r\n this._$thumbGradientFill.next(theme.fill);\r\n this._$strokeGradientColor.next(theme.strokeGradientColor);\r\n this._$strokeAnimationDuration.next(theme.strokeAnimationDuration ?? DEFAULT_STROKE_ANIMATION_DURATION);\r\n this._$roundCorner.next(theme.roundCorner ?? DEFAULT_ROUNDED_CORNER);\r\n this._$thickness.next(theme.thickness ?? DEFAULT_THICKNESS);\r\n this._$rippleColor.next(theme.rippleColor ?? DEFAULT_RIPPLE_COLOR);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $grabbing = this.$grabbing;\r\n\r\n $grabbing.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$classes.next({ grabbing: v });\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $mouseDragCancel = race([\r\n $mouseUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._$grabbing.next(false);\r\n }),\r\n ), this.$scrollingCancel\r\n ]);\r\n\r\n $thumb.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(thumb => {\r\n return fromEvent<MouseEvent>(thumb, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this._$grabbing.next(true);\r\n const startPos = this._$position.getValue();\r\n const startClientPos = isVertical ? e.clientY : e.clientX;\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const currentPos = isVertical ? e.clientY : e.clientX,\r\n scrollSize = this.scrollSize, delta = startClientPos - currentPos,\r\n dp = startPos - delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scrollTo(position);\r\n return race([this.$scrollingCancel, fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(thumb, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n this.scrollTo(position);\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $touchCanceler = race([\r\n $touchUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._$grabbing.next(false);\r\n }),\r\n ), this.$scrollingCancel,\r\n ]);\r\n\r\n $thumb.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(thumb => {\r\n return fromEvent<TouchEvent>(thumb, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n this._$grabbing.next(true);\r\n const startPos = this._$position.getValue();\r\n const startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX;\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const currentPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n scrollSize = this.scrollSize, delta = startClientPos - currentPos,\r\n dp = startPos - delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scrollTo(position);\r\n return race([this.$scrollingCancel, fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(thumb, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil(this.$scrollingCancel),\r\n tap(e => {\r\n if (e) {\r\n e.preventDefault();\r\n }\r\n this.scrollTo(position);\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n scrollTo(position: number) {\r\n const scrollSize = this.scrollSize;\r\n this.onDrag.emit(scrollSize !== 0 ? position / scrollSize : 0);\r\n }\r\n\r\n stopScrolling() {\r\n this._$scrollingCancel.next();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div #track class=\"track\" [ngStyle]=\"$styles | async\" [ngClass]=\"$classes | async\">\r\n <div #thumb class=\"thumb\" [class.horizontal]=\"($isVertical | async)!\">\r\n <ng-substrate #substrate mode=\"rounded-rectangle\" class=\"shape\" [type]=\"($type | async)!\"\r\n [width]=\"($thumbWidth | async)!\" [height]=\"($thumbHeight | async)!\" [roundCorner]=\"($roundCorner | async)!\"\r\n [strokeWidth]=\"8\" [rippleColor]=\"($rippleColor | async)!\" [fillPositions]=\"($thumbGradientPositions | async)!\"\r\n [fillColors]=\"($thumbGradientFill | async)!\" [strokeColors]=\"($strokeGradientColor | async)!\"\r\n [strokeAnimationDuration]=\"($strokeAnimationDuration | async)!\"\r\n (pointerdown)=\"substrate.ripple($event)\"></ng-substrate>\r\n </div>\r\n</div>","import { Directive, ElementRef, Input } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { BehaviorSubject, combineLatest, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/scroller/enums';\r\nimport { isDirection } from '../../utils/is-direction';\r\n\r\nconst RIGHT = 'right',\r\n DIR = 'dir';\r\n\r\n/**\r\n * LocaleSensitiveDirective\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/16.x/projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Directive({\r\n selector: '[localeSensitive]',\r\n})\r\nexport class LocaleSensitiveDirective {\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n this._$langTextDir.next(v);\r\n }\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n\r\n private _$listDir = new BehaviorSubject<ScrollerDirections | null>(ScrollerDirection.VERTICAL);\r\n readonly $listDir = this._$listDir.asObservable();\r\n\r\n @Input()\r\n set listDir(v: ScrollerDirections | null) {\r\n this._$listDir.next(v);\r\n }\r\n get listDir() { return this._$listDir.getValue(); }\r\n\r\n constructor(private _elementRef: ElementRef<HTMLElement>) {\r\n const $langTextDir = this.$langTextDir,\r\n $listDir = this.$listDir;\r\n\r\n combineLatest([$langTextDir, $listDir]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([dir, listDir]) => {\r\n const element = this._elementRef.nativeElement as HTMLElement,\r\n isVertical = isDirection(listDir!, ScrollerDirection.VERTICAL);\r\n element.setAttribute(DIR, isVertical ? dir : TextDirections.LTR);\r\n if (dir === TextDirections.RTL && isVertical) {\r\n element.style.textAlign = RIGHT;\r\n element.classList.add(TextDirections.RTL);\r\n element.classList.remove(TextDirections.LTR);\r\n } else {\r\n element.classList.add(TextDirections.LTR);\r\n element.classList.remove(TextDirections.RTL);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, OnDestroy, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { BehaviorSubject, combineLatest, debounceTime, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ScrollBox } from './utils';\r\nimport { ScrollerDirections } from './enums';\r\nimport { Id, ISize, ScrollBarTheme } from '../../types';\r\nimport { Easing } from './types';\r\nimport { easeLinear, easeOutQuad } from './utils/ease';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n DEFAULT_SCROLLBAR_MIN_SIZE,\r\n INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP, SCROLLER_SCROLL, SCROLLER_SCROLLBAR_SCROLL, SCROLLER_WHEEL, TOUCH_END, TOUCH_MOVE,\r\n TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { inject } from '@angular/core';\r\nimport { DestroyRef } from '@angular/core';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n VERTICAL = 'vertical',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 200,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MIN_TIMESTAMP = 20,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n MIN_ANIMATED_VALUE = 10,\r\n SPEED_SCALE = 5;\r\n\r\nconst getStartTime = () => { return performance.now(); }\r\n\r\nconst calculateDirection = (buffer: Array<[number, number]>) => {\r\n for (let i = buffer.length - 1, l = 0; i >= l; i--) {\r\n const v = buffer[i];\r\n if (v[0] === 0) {\r\n continue;\r\n }\r\n return Math.sign(v[0]);\r\n }\r\n return 1;\r\n}\r\n\r\nexport interface IScrollToParams {\r\n x?: number;\r\n y?: number;\r\n left?: number;\r\n top?: number;\r\n blending?: boolean;\r\n behavior?: \"auto\" | \"instant\" | \"smooth\" | string;\r\n userAction?: boolean;\r\n fireUpdate?: boolean;\r\n}\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL),\r\n WHEEL_EVENT = new Event(SCROLLER_WHEEL),\r\n SCROLLBAR_SCROLL_EVENT = new Event(SCROLLER_SCROLLBAR_SCROLL);\r\n\r\n/**\r\n * The scroller for the NgVirtualList item 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/16.x/projects/ng-virtual-list/src/lib/components/scroller/ng-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroller',\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrls: ['./ng-scroller.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgScrollerComponent implements OnDestroy {\r\n @ViewChild('scrollContent')\r\n scrollContent: ElementRef<HTMLDivElement> | undefined;\r\n\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n cdkScrollable: CdkScrollable | undefined;\r\n\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n @ViewChild('scrollViewport')\r\n scrollViewport: ElementRef<HTMLDivElement> | undefined;\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n private _$direction = new BehaviorSubject<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n @Input()\r\n set direction(v: ScrollerDirections) {\r\n this._$direction.next(v);\r\n }\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n @Input()\r\n set focusedElement(v: Id | undefined) {\r\n this._$focusedElement.next(v);\r\n }\r\n get focusedElement() { return this._$focusedElement.getValue(); }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n @Input()\r\n set loading(v: boolean) {\r\n this._$loading.next(v);\r\n }\r\n get loading() { return this._$loading.getValue(); }\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n @Input()\r\n set classes(v: { [cName: string]: boolean }) {\r\n this._$classes.next(v);\r\n }\r\n get classes() { return this._$classes.getValue(); }\r\n\r\n private _$startOffset = new BehaviorSubject<number>(0);\r\n readonly $startOffset = this._$startOffset.asObservable();\r\n\r\n @Input()\r\n set startOffset(v: number) {\r\n this._$startOffset.next(v);\r\n }\r\n get startOffset() { return this._$startOffset.getValue(); }\r\n\r\n private _$endOffset = new BehaviorSubject<number>(0);\r\n readonly $endOffset = this._$endOffset.asObservable();\r\n\r\n @Input()\r\n set endOffset(v: number) {\r\n this._$endOffset.next(v);\r\n }\r\n get endOffset() { return this._$endOffset.getValue(); }\r\n\r\n private _$scrollbarTheme = new BehaviorSubject<ScrollBarTheme | undefined>(undefined);\r\n readonly $scrollbarTheme = this._$scrollbarTheme.asObservable();\r\n\r\n @Input()\r\n set scrollbarTheme(v: ScrollBarTheme | undefined) {\r\n this._$scrollbarTheme.next(v);\r\n }\r\n get scrollbarTheme() { return this._$scrollbarTheme.getValue(); }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n this._$scrollbarMinSize.next(v);\r\n }\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue(); }\r\n\r\n private _$actualClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $actualClasses = this._$actualClasses.asObservable();\r\n\r\n private _$containerClasses = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $containerClasses = this._$containerClasses.asObservable();\r\n\r\n private _$isVertical = new BehaviorSubject<boolean>(true);\r\n readonly $isVertical = this._$isVertical.asObservable();\r\n\r\n private _$thumbGradientPositions = new BehaviorSubject<GradientColorPositions>([0, 0]);\r\n readonly $thumbGradientPositions = this._$thumbGradientPositions.asObservable();\r\n\r\n private _$thumbSize = new BehaviorSubject<number>(0);\r\n readonly $thumbSize = this._$thumbSize.asObservable();\r\n\r\n private _$thumbPosition = new BehaviorSubject<number>(0);\r\n readonly $thumbPosition = this._$thumbPosition.asObservable();\r\n\r\n private _$thumbShow = new BehaviorSubject<boolean>(false);\r\n readonly $thumbShow = this._$thumbShow.asObservable();\r\n\r\n private _$preparedSignal = new BehaviorSubject<boolean>(false);\r\n readonly $preparedSignal = this._$preparedSignal.asObservable();\r\n\r\n private _$grabbing = new BehaviorSubject<boolean>(false);\r\n readonly $grabbing = this._$grabbing.asObservable();\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(TextDirections.LTR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n private _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get scrollable() {\r\n const { width, height } = this._$viewportBounds.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n get host() {\r\n return this.scrollViewport?.nativeElement;\r\n }\r\n\r\n private _prepared = false;\r\n set prepared(v: boolean) {\r\n if (this._prepared !== v) {\r\n this._prepared = v;\r\n this._$preparedSignal.next(v);\r\n }\r\n }\r\n\r\n private _isMoving = false;\r\n\r\n private _x: number = 0;\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n get x() { return this._x; }\r\n\r\n private _y: number = 0;\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n get y() { return this._y; }\r\n\r\n private _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n this._totalSize = v;\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n totalSize = this._totalSize,\r\n isVertical = this._$direction.getValue() === VERTICAL;\r\n return isVertical ? totalSize < viewportHeight ? 0 : totalSize - viewportHeight : this.scrollHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n totalSize = this._totalSize,\r\n isVertical = this._$direction.getValue() === VERTICAL;\r\n return isVertical ? this.scrollWidth : totalSize < viewportWidth ? 0 : totalSize - viewportWidth;\r\n }\r\n\r\n private _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n private _actualY: number = 0;\r\n get actualScrollTop() {\r\n return this._actualY;\r\n }\r\n\r\n get scrollLeft() {\r\n return this._x;\r\n }\r\n\r\n get scrollTop() {\r\n return this._y;\r\n }\r\n\r\n get scrollWidth() {\r\n const { width: viewportWidth } = this._$viewportBounds.getValue(),\r\n actualViewportWidth = viewportWidth,\r\n { width: contentWidth } = this._$contentBounds.getValue();\r\n return contentWidth < actualViewportWidth ? 0 : (contentWidth - actualViewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this._$viewportBounds.getValue(),\r\n actualViewportHeight = viewportHeight,\r\n { height: contentHeight } = this._$contentBounds.getValue();\r\n return contentHeight < actualViewportHeight ? 0 : (contentHeight - actualViewportHeight);\r\n }\r\n\r\n private _velocity: number = 0;\r\n\r\n private _$viewportBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $viewportBounds = this._$viewportBounds.asObservable();\r\n\r\n private _$contentBounds = new BehaviorSubject<ISize>({ width: 0, height: 0 });\r\n readonly $contentBounds = this._$contentBounds.asObservable();\r\n\r\n private _viewportResizeObserver: ResizeObserver;\r\n\r\n private _onResizeViewportHandler = () => {\r\n const viewport = this.scrollViewport?.nativeElement;\r\n if (viewport) {\r\n this._$viewportBounds.next({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _contentResizeObserver: ResizeObserver;\r\n\r\n private _onResizeContentHandler = () => {\r\n const content = this.scrollContent?.nativeElement;\r\n if (content) {\r\n this._$contentBounds.next({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _updateScrollBarId: number | undefined;\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n private _animationId: number = -1;\r\n\r\n private _animationId1: number = -1;\r\n\r\n constructor(private _service: NgVirtualListService) {\r\n this._service.$langTextDir.pipe(\r\n tap(v => {\r\n this._$langTextDir.next(v);\r\n })\r\n ).subscribe();\r\n\r\n this._viewportResizeObserver = new ResizeObserver(this._onResizeViewportHandler);\r\n this._contentResizeObserver = new ResizeObserver(this._onResizeContentHandler);\r\n\r\n this.$direction.pipe(\r\n takeUntilDestroyed(),\r\n tap(direction => {\r\n this._$isVertical.next(direction === ScrollerDirection.VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n const $viewport = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.scrollViewport).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $content = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this.scrollContent).pipe(\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n )),\r\n ),\r\n $updateScrollBar = this.$updateScrollBar;\r\n\r\n const updateScrollBarHandler = () => {\r\n const direction = this._$direction.getValue(),\r\n isVertical = this._$isVertical.getValue(),\r\n startOffset = this._$startOffset.getValue(),\r\n endOffset = this._$endOffset.getValue(),\r\n scrollContent = this.scrollContent?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport?.nativeElement as HTMLDivElement,\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: scrollViewport.offsetWidth, viewportHeight: scrollViewport.offsetHeight,\r\n contentWidth: scrollContent.offsetWidth, contentHeight: scrollContent.offsetHeight,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this._$scrollbarMinSize.getValue(),\r\n });\r\n\r\n this._$thumbGradientPositions.next(thumbGradientPositions);\r\n this._$thumbSize.next(thumbSize);\r\n this._$thumbPosition.next(thumbPosition);\r\n this._$thumbShow.next(isVertical ? this.scrollHeight > 0 : this.scrollWidth > 0);\r\n };\r\n\r\n const updateScrollBarRAFHandler = (time: DOMHighResTimeStamp) => {\r\n updateScrollBarHandler();\r\n };\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n const updateScrollBarId = this._updateScrollBarId;\r\n if (updateScrollBarId !== undefined) {\r\n cancelAnimationFrame(updateScrollBarId);\r\n }\r\n this._updateScrollBarId = requestAnimationFrame(updateScrollBarRAFHandler);\r\n }),\r\n ).subscribe();\r\n\r\n $viewport.pipe(\r\n takeUntilDestroyed(),\r\n tap(viewport => {\r\n this._viewportResizeObserver.observe(viewport);\r\n this._onResizeViewportHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n tap(content => {\r\n this._contentResizeObserver.observe(content);\r\n this._onResizeContentHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n const isVertical = this._$isVertical.getValue();\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(WHEEL_EVENT);\r\n }\r\n if (isVertical) {\r\n if (this._y >= 0 && this._y <= this.scrollHeight) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n } else {\r\n if (this._x >= 0 && this._x <= this.scrollWidth) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n this.stopScrolling();\r\n const scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n startPos = isVertical ? this.y : this.x,\r\n delta = isVertical ? e.deltaY : e.deltaX, dp = startPos + delta, position = dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp;\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true });\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n const startPos = isVertical ? this.y : this.x;\r\n let prevPos = startPos, prevClientPosition = 0, startPosDelta = 0;\r\n const startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>();\r\n let startTime = Date.now();\r\n return fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($mouseDragCancel),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const cPos = isVertical ? this.y : this.x;\r\n if (cPos !== prevPos) {\r\n startPosDelta += cPos - prevPos;\r\n }\r\n const currentPos = isVertical ? e.clientY : e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = startClientPos - currentPos,\r\n dp = startPos + startPosDelta + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n prevClientPosition = currentPos;\r\n prevPos = position;\r\n this.move(isVertical, position, false, true);\r\n startTime = endTime;\r\n return race([fromEvent<MouseEvent>(window, MOUSE_UP, { passive: false }), fromEvent<MouseEvent>(content, MOUSE_UP, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n e.preventDefault();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.stopScrolling();\r\n const target = e.target as HTMLElement;\r\n if (target.classList.contains(INTERACTIVE)) {\r\n return of(undefined);\r\n }\r\n const isVertical = this._$isVertical.getValue();\r\n this._isMoving = true;\r\n this._$grabbing.next(true);\r\n const startPos = isVertical ? this.y : this.x;\r\n let prevPos = startPos, prevClientPosition = 0, startPosDelta = 0;\r\n const startClientPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n offsets = new Array<[number, number]>(), velocities = new Array<[number, number]>();\r\n let startTime = Date.now();\r\n return fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchCanceler),\r\n tap(e => {\r\n e.preventDefault();\r\n }),\r\n switchMap(e => {\r\n const cPos = isVertical ? this.y : this.x;\r\n if (cPos !== prevPos) {\r\n startPosDelta += cPos - prevPos;\r\n }\r\n const currentPos = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = startClientPos - currentPos,\r\n dp = startPos + startPosDelta + delta, position = Math.round(dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp), endTime = Date.now(),\r\n timestamp = endTime - startTime, scrollDelta = prevClientPosition === 0 ? 0 : prevClientPosition - currentPos,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp);\r\n this.calculateAcceleration(velocities, v0, timestamp);\r\n prevClientPosition = currentPos;\r\n prevPos = position;\r\n this.move(isVertical, position, false, true);\r\n startTime = endTime;\r\n return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n e.preventDefault();\r\n const endTime = Date.now(),\r\n timestamp = endTime - startTime,\r\n { v0 } = this.calculateVelocity(offsets, scrollDelta, timestamp),\r\n { a0 } = this.calculateAcceleration(velocities, v0, timestamp);\r\n this._isMoving = false;\r\n this._$grabbing.next(false);\r\n this.moveWithAcceleration(isVertical, position, this._velocity, v0, a0);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([this.$classes, this.$direction, this.$grabbing]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([classes, direction, grabbing]) => {\r\n this._$actualClasses.next({ ...classes, [direction]: true, grabbing });\r\n this._$containerClasses.next({ [direction]: true, grabbing });\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n private calculateVelocity(offsets: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n offsets.push([delta, timestamp < MIN_TIMESTAMP ? MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets);\r\n let vSum = 0;\r\n for (let i = startIndex, l = offsets.length; i < l; i++) {\r\n const p0 = offsets[i];\r\n if (lastVSign !== Math.sign(p0[0])) {\r\n continue;\r\n }\r\n\r\n const v0 = (p0[1] !== 0 ? lastVSign * Math.abs(p0[0] / p0[1]) * SPEED_SCALE : 0);\r\n vSum += Math.sign(v0) * Math.pow(v0, 4) * .003;\r\n }\r\n\r\n const l = Math.min(offsets.length, indexOffset), v0 = l > 0 ? (vSum / l) : 0;\r\n return { v0 };\r\n }\r\n\r\n private calculateAcceleration(velocities: Array<[number, number]>, delta: number, timestamp: number, indexOffset: number = 10) {\r\n velocities.push([delta, timestamp < MIN_TIMESTAMP ? MIN_TIMESTAMP : timestamp]);\r\n const len = velocities.length, startIndex = len > indexOffset ? len - indexOffset : 0;\r\n let aSum = 0, prevV0: [number, number] | undefined, iteration = 0, lastVSign = calculateDirection(velocities);\r\n for (let i = startIndex, l = velocities.length; i < l; i++) {\r\n const v00 = prevV0, v01 = velocities[i];\r\n if (lastVSign !== Math.sign(v01[0])) {\r\n continue;\r\n }\r\n if (v00) {\r\n const a0 = timestamp < MAX_VELOCITY_TIMESTAMP ? (v00[1] !== 0 ? (lastVSign * Math.abs(Math.abs(v01[0]) - Math.abs(v00[0]))) / Math.abs(v00[1]) : 0) : 0;\r\n aSum += a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * FRICTION_FORCE;\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n private move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false) {\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction });\r\n }\r\n\r\n private moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number) {\r\n if (a0 !== 0) {\r\n const dvSign = Math.sign(v),\r\n duration = DURATION, maxDuration = MAX_DURATION,\r\n maxDistance = dvSign * MAX_DIST, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / MASS,\r\n distance = Math.abs(s) < MAX_DIST ? s : maxDistance, positionWithVelocity = position + distance,\r\n vmax = Math.max(Math.abs(v0), Math.abs(v)),\r\n ad = Math.abs(vmax !== 0 ? Math.sqrt(vmax) : 0) * 10 / MASS,\r\n aDuration = ad < maxDuration ? ad : maxDuration,\r\n startPosition = isVertical ? this.y : this.x;\r\n this.animate(startPosition, Math.round(positionWithVelocity), aDuration, easeOutQuad, true);\r\n }\r\n }\r\n\r\n animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeLinear, userAction: boolean = false) {\r\n this.stopScrolling();\r\n const startTime = getStartTime(), isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = Math.abs(Math.abs(endValue) - Math.abs(start));\r\n\r\n if (diff < MIN_ANIMATED_VALUE) {\r\n if (isVertical) {\r\n this.y = prevPos = start = endValue;\r\n } else {\r\n this.x = prevPos = start = endValue;\r\n }\r\n } else {\r\n if (isVertical) {\r\n this.y = start;\r\n } else {\r\n this.x = start;\r\n }\r\n }\r\n\r\n let finishedValue = endValue,\r\n isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (!!isCanceled) {\r\n return;\r\n }\r\n\r\n const cPos = isVertical ? this.y : this.x;\r\n let scrollDelta = 0;\r\n if (cPos !== prevPos) {\r\n scrollDelta = cPos - prevPos;\r\n startPosDelta += scrollDelta;\r\n }\r\n\r\n const elapsed = currentTime - startTime,\r\n progress = start === endValue ? 1 : Math.min(duration > 0 ? elapsed / duration : 0, 1),\r\n easedProgress = easingFunction(progress),\r\n val = startPosDelta + start + (finishedValue - start) * easedProgress,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n actualScrollSize = isVertical ? this.actualScrollHeight : this.actualScrollWidth,\r\n currentValue = val < 0 ? 0 : val > scrollSize ? scrollSize : val,\r\n t = Date.now();\r\n\r\n isFinished = (currentValue === scrollSize && Math.round(scrollSize) >= Math.round(actualScrollSize)) ||\r\n currentValue === 0 || progress === 1;\r\n\r\n delta = currentValue - scrollDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < MIN_TIMESTAMP ? MIN_TIMESTAMP : ts;\r\n this._velocity = timestamp > 0 ? delta / timestamp : 0;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n const scrollContent = this.scrollContent?.nativeElement as HTMLDivElement;\r\n if (!!scrollContent) {\r\n if (isVertical) {\r\n this.y = currentValue;\r\n scrollContent.style.transform = `translate3d(0, ${-currentValue}px, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n this._$scroll.next(userAction);\r\n } else {\r\n this.x = currentValue;\r\n scrollContent.style.transform = `translate3d(${-currentValue}px, 0, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n this._$scroll.next(userAction);\r\n }\r\n }\r\n if (isFinished) {\r\n this.stopScrolling();\r\n this._$scrollEnd.next(userAction);\r\n } else {\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n };\r\n\r\n this._animationId = requestAnimationFrame(step);\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const posX = params.x || params.left || 0,\r\n posY = params.y || params.top || 0,\r\n userAction = params.userAction ?? false,\r\n x = posX,\r\n y = posY,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n fireUpdate = params.fireUpdate ?? true,\r\n scrollContent = this.scrollContent?.nativeElement as HTMLDivElement,\r\n isVertical = this._$direction.getValue() === ScrollerDirection.VERTICAL;\r\n\r\n if (this._isMoving) {\r\n if (isVertical) {\r\n if (y < 0 || y > this.scrollHeight) {\r\n return;\r\n }\r\n } else {\r\n if (x < 0 || x > this.scrollWidth) {\r\n return;\r\n }\r\n }\r\n }\r\n\r\n const xx = x,\r\n yy = y,\r\n prevX = this.x,\r\n prevY = this.y;\r\n this.x = xx;\r\n this.y = yy;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== yy) {\r\n this.animate(prevY, yy, ANIMATION_DURATION, easeLinear, userAction);\r\n }\r\n } else {\r\n if (prevX !== xx) {\r\n this.animate(prevX, xx, ANIMATION_DURATION, easeLinear, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (prevY !== yy) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n scrollContent.style.transform = `translate3d(0, ${-yy}px, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (prevX !== xx) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n scrollContent.style.transform = `translate3d(${-xx}px, 0, 0)`;\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLL_EVENT);\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n reset() {\r\n if (this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n this.move(this._$isVertical.getValue(), 0);\r\n }\r\n\r\n onScrollBarDragHandler(e: any) {\r\n const position = e as number;\r\n this._isMoving = true;\r\n const isVertical = this._$isVertical.getValue(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.actualScrollHeight : this.actualScrollWidth,\r\n position,\r\n });\r\n this.scrollTo({ [isVertical ? TOP : LEFT]: absolutePosition, behavior: AUTO, blending: true, userAction: true });\r\n if (this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef().nativeElement.dispatchEvent(SCROLLBAR_SCROLL_EVENT);\r\n }\r\n this._isMoving = false;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n const updateScrollBarId = this._updateScrollBarId;\r\n if (updateScrollBarId !== undefined) {\r\n cancelAnimationFrame(updateScrollBarId);\r\n this._updateScrollBarId = undefined;\r\n }\r\n\r\n this.stopScrolling();\r\n if (this._viewportResizeObserver) {\r\n this._viewportResizeObserver.disconnect();\r\n }\r\n if (this._contentResizeObserver) {\r\n this._contentResizeObserver.disconnect();\r\n }\r\n }\r\n}\r\n","<div localeSensitive [langTextDir]=\"($langTextDir | async)!\" [listDir]=\"($direction | async)!\" class=\"ngvl__container\"\r\n [ngClass]=\"($containerClasses | async)!\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"($direction | async)!\"\r\n [attr.aria-activedescendant]=\"$focusedElement | async\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"($actualClasses | async)!\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n <ng-scroll-bar #scrollBar [isVertical]=\"($isVertical | async)!\" [size]=\"($thumbSize | async)!\"\r\n [theme]=\"($scrollbarTheme | async)!\" [position]=\"($thumbPosition | async)!\"\r\n [thumbGradientPositions]=\"($thumbGradientPositions | async)!\" [loading]=\"($loading | async)!\"\r\n [prepared]=\"($preparedSignal | async)!\" [show]=\"($thumbShow | async)!\"\r\n (onDrag)=\"onScrollBarDragHandler($event)\"></ng-scroll-bar>\r\n</div>","import {\r\n ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentRef, DestroyRef, ElementRef, EventEmitter, inject, Input,\r\n OnDestroy, Output, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n of, race, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/list-item/ng-virtual-list-item.component';\r\nimport {\r\n BEHAVIOR_INSTANT, CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE,\r\n DEFAULT_ENABLED_BUFFER_OPTIMIZATION, DEFAULT_ITEM_SIZE, DEFAULT_BUFFER_SIZE, DEFAULT_LIST_SIZE, DEFAULT_SNAP, DEFAULT_SNAPPING_METHOD,\r\n HEIGHT_PROP_NAME, LEFT_PROP_NAME, MAX_SCROLL_TO_ITERATIONS, PX, SCROLL_END, TOP_PROP_NAME, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n DEFAULT_MAX_BUFFER_SIZE, DEFAULT_SELECT_METHOD, DEFAULT_SELECT_BY_CLICK, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_COLLECTION_MODE,\r\n DEFAULT_SCREEN_READER_MESSAGE, BEHAVIOR_SMOOTH, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_BOTTOM,\r\n MOUSE_DOWN, MOUSE_UP, MOUSE_LEAVE, MOUSE_OUT, TOUCH_END, TOUCH_LEAVE, TOUCH_OUT, TOUCH_START, SCROLLER_WHEEL,\r\n SCROLLER_SCROLLBAR_SCROLL, DEFAULT_LANG_TEXT_DIR, DEFAULT_SCROLLBAR_THEME, DEFAULT_CLICK_DISTANCE,\r\n DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_MIN_SIZE,\r\n} from './const';\r\nimport { IRenderVirtualListItem, IScrollEvent, IScrollOptions, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap, } from './models';\r\nimport { FocusAlignment, Id, IRect, ISize, ScrollBarTheme } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting, SnappingMethod, SnappingMethods,\r\n TextDirection, TextDirections,\r\n} from './enums';\r\nimport { ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBoxEvents, TrackBox } from './utils/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { FIREFOX_SCROLLBAR_OVERLAP_SIZE, IS_FIREFOX, } from './utils/browser';\r\nimport { BaseVirtualListItemComponent } from './models/base-virtual-list-item-component';\r\nimport { Component$1 } from './models/component.model';\r\nimport { isDirection } from './utils/is-direction';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { isMethodForSelecting } from './utils/is-method-for-selecting';\r\nimport { MethodsForSelectingTypes } from './enums/method-for-selecting-types';\r\nimport { CMap } from './utils/cmap';\r\nimport { validateArray, validateBoolean, validateFloat, validateInt, validateObject, validateString } from './utils/validation';\r\nimport { copyValueAsReadonly, objectAsReadonly } from './utils/object';\r\nimport { isCollectionMode } from './utils/is-collection-mode';\r\nimport { IScrollToParams, NgScrollerComponent } from './components/scroller/ng-scroller.component';\r\n\r\ninterface IScrollParams {\r\n id: Id;\r\n behavior?: \"auto\" | \"instant\" | \"smooth\";\r\n iteration?: number;\r\n isLastIteration?: boolean;\r\n scrollCalled?: boolean;\r\n scroller?: HTMLElement;\r\n cb?: () => void;\r\n}\r\n\r\nconst MIN_SCROLL_TO_START_PIXELS = 10,\r\n RANGE_DISPLAY_ITEMS_END_OFFSET = 20,\r\n ROLE_LIST = 'list',\r\n ROLE_LIST_BOX = 'listbox',\r\n ITEM_ID = 'item-id',\r\n ITEM_CONTAINER = 'ngvl-item__container',\r\n READY_TO_START = 'ready-to-start',\r\n WAIT_FOR_PREPARATION = 'wait-for-preparation';\r\n\r\nconst validateScrollIteration = (value: number) => {\r\n return Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value\r\n},\r\n validateId = (id: Id) => {\r\n const valid = validateString(id as string) || validateFloat(id as number);\r\n if (!valid) {\r\n throw Error('The \"id\" parameter must be of type `Id`.');\r\n }\r\n },\r\n validateScrollBehavior = (behavior: \"auto\" | \"instant\" | \"smooth\") => {\r\n const valid = validateString(behavior as string) && (behavior === 'auto' || behavior === 'instant' || behavior === 'smooth');\r\n if (!valid) {\r\n throw Error('The \"behavior\" parameter must have the value `auto`, `instant` or `smooth`.');\r\n }\r\n },\r\n validateIteration = (iteration: number | undefined) => {\r\n const valid = validateInt(iteration, true);\r\n if (!valid) {\r\n throw Error('The \"iteration\" parameter must be of type `number`.');\r\n }\r\n },\r\n validateFocusAlignment = (align: FocusAlignment) => {\r\n const valid = validateString(align as string) && (align === 'none' || align === 'start' || align === 'center' || align === 'end');\r\n if (!valid) {\r\n throw Error('The \"align\" parameter must have the value `none`, `start`, `center` or `end`.');\r\n }\r\n };\r\n\r\nconst formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: IRect) => {\r\n if (!messagePattern) {\r\n return '';\r\n }\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN, prevItem: IRenderVirtualListItem | undefined;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if (((position + itemSize) >= scrollSize) && Number.isNaN(start)) {\r\n start = item.index + 1;\r\n }\r\n if ((position >= (scrollSize + size)) && Number.isNaN(end) && prevItem) {\r\n end = prevItem.index + 1;\r\n }\r\n prevItem = item;\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return '';\r\n }\r\n let formatted = messagePattern ?? '';\r\n formatted = formatted.replace('$1', `${start}`);\r\n formatted = formatted.replace('$2', `${end}`);\r\n return formatted;\r\n};\r\n\r\nconst formatActualDisplayItems = (items: IRenderVirtualListCollection, startOffset: number, endOffset: number, scrollSize: number,\r\n isVertical: boolean, bounds: ISize): [number, number] | undefined => {\r\n const list = items ?? [], size = isVertical ? bounds.height : bounds.width;\r\n let start = Number.NaN, end = Number.NaN;\r\n for (let i = 0, l = list.length; i < l; i++) {\r\n const item = list[i], position = isVertical ? item.measures.y : item.measures.x,\r\n itemSize = isVertical ? item.measures.height : item.measures.width;\r\n if ((position + itemSize <= scrollSize + startOffset)) {\r\n start = item.index;\r\n }\r\n if (((position) <= (scrollSize + size - endOffset + RANGE_DISPLAY_ITEMS_END_OFFSET))) {\r\n end = item.index;\r\n }\r\n }\r\n if (Number.isNaN(start) || Number.isNaN(end)) {\r\n return undefined;\r\n }\r\n return [start, end];\r\n};\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/16.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii Alexandrovich 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 host: {\r\n 'style': 'position: relative;'\r\n },\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService],\r\n})\r\nexport class NgVirtualListComponent implements 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 private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('scroller', { read: NgScrollerComponent })\r\n private _scrollerComponent: NgScrollerComponent | undefined;\r\n\r\n private _$scroller = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n readonly $scroller = this._$scroller.asObservable();\r\n\r\n private _$list = new BehaviorSubject<ElementRef<HTMLDivElement> | undefined>(undefined);\r\n readonly $list = this._$list.asObservable();\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n @Output()\r\n onScroll = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n @Output()\r\n onScrollEnd = new EventEmitter<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n @Output()\r\n onViewportChange = new EventEmitter<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n @Output()\r\n onItemClick = new EventEmitter<IRenderVirtualListItem<any> | undefined>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n @Output()\r\n onSelect = new EventEmitter<Array<Id> | Id | undefined>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n @Output()\r\n onCollapse = new EventEmitter<Array<Id>>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n @Output()\r\n onScrollReachStart = new EventEmitter<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n @Output()\r\n onScrollReachEnd = new EventEmitter<void>();\r\n\r\n private _$scrollbarTheme = new BehaviorSubject<ScrollBarTheme | undefined>(DEFAULT_SCROLLBAR_THEME);\r\n readonly $scrollbarTheme = this._$scrollbarTheme.asObservable();\r\n\r\n private _scrollbarThemeTransform = (v: ScrollBarTheme) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarTheme\" parameter must be of type `object`.');\r\n return DEFAULT_SCROLLBAR_THEME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Scrollbar theme.\r\n */\r\n @Input()\r\n set scrollbarTheme(v: ScrollBarTheme) {\r\n if (this._$scrollbarTheme.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarThemeTransform(v);\r\n\r\n this._$scrollbarTheme.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollbarTheme() { return this._$scrollbarTheme.getValue() as ScrollBarTheme; }\r\n\r\n private _$scrollbarMinSize = new BehaviorSubject<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n readonly $scrollbarMinSize = this._$scrollbarMinSize.asObservable();\r\n\r\n private _scrollbarMinSizeTransform = (v: number) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarMinSize\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_MIN_SIZE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n @Input()\r\n set scrollbarMinSize(v: number) {\r\n if (this._$scrollbarMinSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollbarMinSizeTransform(v);\r\n\r\n this._$scrollbarMinSize.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollbarMinSize() { return this._$scrollbarMinSize.getValue() as number; }\r\n\r\n private _$loading = new BehaviorSubject<boolean>(false);\r\n readonly $loading = this._$loading.asObservable();\r\n\r\n private _loadingTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"loading\" parameter must be of type `boolean`.');\r\n return false;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n @Input()\r\n set loading(v: boolean) {\r\n if (this._$loading.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._loadingTransform(v);\r\n\r\n this._$loading.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get loading() { return this._$loading.getValue() as boolean; }\r\n\r\n private _$waitForPreparation = new BehaviorSubject<boolean>(DEFAULT_WAIT_FOR_PREPARATION);\r\n readonly $waitForPreparation = this._$waitForPreparation.asObservable();\r\n\r\n private _waitForPreparationTransform = (v: boolean) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"waitForPreparation\" parameter must be of type `boolean`.');\r\n return DEFAULT_WAIT_FOR_PREPARATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If true, it will wait until the list items are fully prepared before displaying them.. The default value is `true`.\r\n */\r\n @Input()\r\n set waitForPreparation(v: boolean) {\r\n if (this._$waitForPreparation.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._waitForPreparationTransform(v);\r\n\r\n this._$waitForPreparation.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get waitForPreparation() { return this._$waitForPreparation.getValue() as boolean; }\r\n\r\n private _$clickDistance = new BehaviorSubject<number>(DEFAULT_CLICK_DISTANCE);\r\n readonly $clickDistance = this._$clickDistance.asObservable();\r\n\r\n private _clickDistanceTransform = (v: number) => {\r\n const valid = validateObject(v);\r\n\r\n if (!valid) {\r\n console.error('The \"clickDistance\" parameter must be of type `number`.');\r\n return DEFAULT_CLICK_DISTANCE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n @Input()\r\n set clickDistance(v: number) {\r\n if (this._$clickDistance.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._clickDistanceTransform(v);\r\n\r\n this._$clickDistance.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get clickDistance() { return this._$clickDistance.getValue() as number; }\r\n\r\n private _$snapToEndTransitionInstantOffset = new BehaviorSubject<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET);\r\n readonly $snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.asObservable();\r\n\r\n private _snapToEndTransitionInstantOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToEndTransitionInstantOffset\" parameter must be of type `number`.');\r\n return DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the offset value; if the scroll area value is exceeded, the scroll animation will be disabled. Default value is \"0\".\r\n */\r\n @Input()\r\n set snapToEndTransitionInstantOffset(v: number) {\r\n if (this._$snapToEndTransitionInstantOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapToEndTransitionInstantOffsetTransform(v);\r\n\r\n this._$snapToEndTransitionInstantOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snapToEndTransitionInstantOffset() { return this._$snapToEndTransitionInstantOffset.getValue(); }\r\n\r\n private _$scrollStartOffset = new BehaviorSubject<number>(0);\r\n readonly $scrollStartOffset = this._$scrollStartOffset.asObservable();\r\n\r\n private _scrollStartOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollStartOffset(v: number) {\r\n if (this._$scrollStartOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollStartOffsetTransform(v);\r\n\r\n this._$scrollStartOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollStartOffset() { return this._$scrollStartOffset.getValue(); }\r\n\r\n private _$scrollEndOffset = new BehaviorSubject<number>(0);\r\n readonly $scrollEndOffset = this._$scrollEndOffset.asObservable();\r\n\r\n private _scrollEndOffsetTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be of type `number`.');\r\n return 0;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n @Input()\r\n set scrollEndOffset(v: number) {\r\n if (this._$scrollEndOffset.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._scrollEndOffsetTransform(v);\r\n\r\n this._$scrollEndOffset.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get scrollEndOffset() { return this._$scrollEndOffset.getValue(); }\r\n\r\n private _$snapScrollToBottom = new BehaviorSubject<boolean>(DEFAULT_SNAP_SCROLLTO_BOTTOM);\r\n readonly $snapScrollToBottom = this._$snapScrollToBottom.asObservable();\r\n\r\n private _snapScrollToBottomTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToBottom\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_BOTTOM;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the end of the list at startup.. Default value is \"false\".\r\n */\r\n @Input()\r\n set snapScrollToBottom(v: boolean) {\r\n if (this._$snapScrollToBottom.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snapScrollToBottomTransform(v);\r\n\r\n this._$snapScrollToBottom.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snapScrollToBottom() { return this._$snapScrollToBottom.getValue(); }\r\n\r\n private _$langTextDir = new BehaviorSubject<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n readonly $langTextDir = this._$langTextDir.asObservable();\r\n\r\n private _langTextDirTransform = (v: TextDirection) => {\r\n const valid = validateString(v);\r\n\r\n if (!valid) {\r\n console.error('The \"langTextDir\" parameter must be of type `string`.');\r\n return DEFAULT_LANG_TEXT_DIR;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * A string indicating the direction of text for the locale.\r\n * Can be either \"ltr\" (left-to-right) or \"rtl\" (right-to-left).\r\n */\r\n @Input()\r\n set langTextDir(v: TextDirection) {\r\n if (this._$langTextDir.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._langTextDirTransform(v);\r\n\r\n this._$langTextDir.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get langTextDir() { return this._$langTextDir.getValue(); }\r\n\r\n private _$defaultItemValue = new BehaviorSubject<IVirtualListItem | null>(null);\r\n readonly $defaultItemValue = this._$defaultItemValue.asObservable();\r\n\r\n @Input()\r\n set defaultItemValue(v: IVirtualListItem | null) {\r\n if (this._$defaultItemValue.getValue() === v) {\r\n return;\r\n }\r\n\r\n this._$defaultItemValue.next(v);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get defaultItemValue() { return this._$defaultItemValue.getValue(); }\r\n\r\n private _$items = new BehaviorSubject<IVirtualListCollection | undefined>(undefined);\r\n readonly $items = this._$items.asObservable();\r\n\r\n private _itemsTransform = (v: IVirtualListCollection | undefined) => {\r\n let valid = validateArray(v, true);\r\n if (valid) {\r\n if (v) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i], trackBy = this.trackBy;\r\n valid = validateObject(item, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item[trackBy] as number, true) || validateString(item[trackBy] as string, true))) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"items\" parameter must be of type `IVirtualListCollection` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\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 const transformedValue = this._itemsTransform(v);\r\n\r\n this._$items.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get items() { return this._$items.getValue() as IVirtualListCollection; }\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | undefined>(undefined);\r\n readonly $selectedIds = this._$selectedIds.asObservable();\r\n\r\n private _selectedIdsTransform = (v: Array<Id> | Id | undefined) => {\r\n let valid = validateArray(v as any, true) || validateString(v as any, true) || validateFloat(v as any, true);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"selectedIds\" parameter must be of type `Array<Id> | Id` or `undefined`.');\r\n return this._isMultiSelecting ? [] : undefined;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n @Input()\r\n set selectedIds(v: Array<Id> | Id | undefined) {\r\n if (this._$selectedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectedIdsTransform(v);\r\n\r\n this._$selectedIds.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n private _$collapsedIds = new BehaviorSubject<Array<Id>>([]);\r\n readonly $collapsedIds = this._$collapsedIds.asObservable();\r\n\r\n private _collapsedIdsTransform = (v: Array<Id>) => {\r\n let valid = validateArray(v as any);\r\n if (valid) {\r\n if (v && Array.isArray(v)) {\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateString(item as any) || validateFloat(item as any);\r\n if (!valid) {\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (!valid) {\r\n console.error('The \"collapsedIds\" parameter must be of type `Array<Id>` or `undefined`.');\r\n return [];\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n @Input()\r\n set collapsedIds(v: Array<Id>) {\r\n if (this._$collapsedIds.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapsedIdsTransform(v);\r\n\r\n this._$collapsedIds.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collapsedIds() { return this._$collapsedIds.getValue(); }\r\n\r\n private _$selectByClick = new BehaviorSubject<boolean>(DEFAULT_SELECT_BY_CLICK);\r\n readonly $selectByClick = this._$selectByClick.asObservable();\r\n\r\n private _selectByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"selectByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_SELECT_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set selectByClick(v: boolean) {\r\n if (this._$selectByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._selectByClickTransform(v);\r\n\r\n this._$selectByClick.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get selectByClick() { return this._$selectByClick.getValue(); }\r\n\r\n private _$collapseByClick = new BehaviorSubject<boolean>(DEFAULT_COLLAPSE_BY_CLICK);\r\n readonly $collapseByClick = this._$collapseByClick.asObservable();\r\n\r\n private _collapseByClickTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"collapseByClick\" parameter must be of type `boolean`.');\r\n return DEFAULT_COLLAPSE_BY_CLICK;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * If `false`, the element is collapsed using the config.collapse method passed to the template; \r\n * if `true`, the element is collapsed by clicking on it. The default value is `true`.\r\n */\r\n @Input()\r\n set collapseByClick(v: boolean) {\r\n if (this._$collapseByClick.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collapseByClickTransform(v);\r\n\r\n this._$collapseByClick.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collapseByClick() { return this._$collapseByClick.getValue(); }\r\n\r\n private _$snap = new BehaviorSubject<boolean>(DEFAULT_SNAP);\r\n readonly $snap = this._$snap.asObservable();\r\n\r\n private _snapTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snap\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._snapTransform(v);\r\n\r\n this._$snap.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get snap() { return this._$snap.getValue(); }\r\n\r\n private _$enabledBufferOptimization = new BehaviorSubject<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION);\r\n readonly $enabledBufferOptimization = this._$enabledBufferOptimization.asObservable();\r\n\r\n private _enabledBufferOptimizationTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"enabledBufferOptimization\" parameter must be of type `boolean`.');\r\n return DEFAULT_ENABLED_BUFFER_OPTIMIZATION;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n @Input()\r\n set enabledBufferOptimization(v: boolean) {\r\n if (this._$enabledBufferOptimization.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._enabledBufferOptimizationTransform(v);\r\n\r\n this._$enabledBufferOptimization.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get enabledBufferOptimization() { return this._$enabledBufferOptimization.getValue(); }\r\n\r\n private _$itemRenderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\r\n readonly $itemRenderer = this._$itemRenderer.asObservable();\r\n\r\n private _itemRendererTransform = (v: TemplateRef<any>) => {\r\n let valid = validateObject(v);\r\n if (v && !(typeof v.elementRef === 'object' && typeof v.createEmbeddedView === 'function')) {\r\n valid = false;\r\n }\r\n\r\n if (!valid) {\r\n throw Error('The \"itemRenderer\" parameter must be of type `TemplateRef`.');\r\n }\r\n return v;\r\n };\r\n\r\n private _$renderer = new BehaviorSubject<TemplateRef<any> | undefined>(undefined);\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 const transformedValue = this._itemRendererTransform(v);\r\n\r\n this._$itemRenderer.next(transformedValue);\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 _$itemConfigMap = new BehaviorSubject<IVirtualListItemConfigMap>({});\r\n readonly $itemConfigMap = this._$itemConfigMap.asObservable();\r\n\r\n private _itemConfigMapTransform = (v: IVirtualListItemConfigMap) => {\r\n let valid = validateObject(v);\r\n if (valid) {\r\n if (v) {\r\n for (let id in v) {\r\n const item = v[id];\r\n if (!item ||\r\n !validateBoolean(item.collapsable, true) ||\r\n !validateBoolean(item.selectable, true) ||\r\n !(item.sticky === undefined || item.sticky === 0 || item.sticky === 1 || item.sticky === 2)\r\n ) {\r\n valid = false;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"itemConfigMap\" parameter must be of type `IVirtualListItemConfigMap`.');\r\n return {};\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Sets `sticky` position, `collapsable` and `selectable` for the list item element. If `sticky` position is greater than `0`, then `sticky` position is applied. \r\n * If the `sticky` value is greater than `0`, then the `sticky` position mode is enabled for the element. `1` - position start, `2` - position end. Default value is `0`.\r\n * `selectable` determines whether an element can be selected or not. Default value is `true`.\r\n * `collapsable` determines whether an element with a `sticky` property greater than zero can collapse and collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/16.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n @Input()\r\n set itemConfigMap(v: IVirtualListItemConfigMap) {\r\n if (this._$itemConfigMap.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._itemConfigMapTransform(v);\r\n\r\n this._$itemConfigMap.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get itemConfigMap() { return this._$itemConfigMap.getValue(); }\r\n\r\n private _$itemSize = new BehaviorSubject<number>(DEFAULT_ITEM_SIZE);\r\n readonly $itemSize = this._$itemSize.asObservable();\r\n\r\n private _itemSizeTransform = (v: number) => {\r\n const valid = validateFloat(v);\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_ITEM_SIZE;\r\n }\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 /**\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 const transformedValue = this._itemSizeTransform(v);\r\n\r\n this._$itemSize.next(transformedValue);\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 private _dynamicSizeTransform = (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n if (!valid) {\r\n console.error('The \"dynamicSize\" parameter must be of type `boolean`.');\r\n return DEFAULT_DYNAMIC_SIZE;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._dynamicSizeTransform(v);\r\n\r\n this._$dynamicSize.next(transformedValue);\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 private _directionTransform = (v: Direction) => {\r\n const valid = validateString(v) && (v === 'horizontal' || v === 'vertical');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `horizontal` or `vertical`.');\r\n return DEFAULT_DIRECTION;\r\n }\r\n return v;\r\n };\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 const transformedValue = this._directionTransform(v);\r\n\r\n this._$direction.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get direction() { return this._$direction.getValue(); }\r\n\r\n private _$collectionMode = new BehaviorSubject<CollectionMode>(DEFAULT_COLLECTION_MODE);\r\n readonly $collectionMode = this._$collectionMode.asObservable();\r\n\r\n private _collectionModeTransform = (v: CollectionMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'lazy');\r\n if (!valid) {\r\n console.error('The \"direction\" parameter must have the value `normal` or `lazy`.');\r\n return DEFAULT_COLLECTION_MODE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n @Input()\r\n set collectionMode(v: CollectionMode) {\r\n if (this._$collectionMode.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._collectionModeTransform(v);\r\n\r\n this._$collectionMode.next(transformedValue);\r\n\r\n this._cdr.markForCheck();\r\n };\r\n get collectionMode() { return this._$collectionMode.getValue(); }\r\n\r\n private _$bufferSize = new BehaviorSubject<number>(DEFAULT_BUFFER_SIZE);\r\n readonly $bufferSize = this._$bufferSize.asObservable();\r\n\r\n private _bufferSizeTransform = (v: number) => {\r\n const valid = validateInt(v);\r\n if (!valid) {\r\n console.error('The \"bufferSize\" parameter must be of type `number`.');\r\n return DEFAULT_BUFFER_SIZE;\r\n }\r\n return v;\r\n };\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 bufferSize(v: number) {\r\n if (this._$bufferSize.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._bufferSizeTransform(v);\r\n\r\n this._$bufferSize.next(transformedValue);\r\n };\r\n get bufferSize() { return this._$bufferSize.getValue(); }\r\n\r\n private _$maxBufferSize = new BehaviorSubject<number>(DEFAULT_MAX_BUFFER_SIZE);\r\n readonly $maxBufferSize = this._$maxBufferSize.asObservable();\r\n\r\n private _maxBufferSizeTransform = (v: number) => {\r\n let val = v;\r\n const valid = validateInt(v, true);\r\n if (!valid) {\r\n console.error('The \"maxBufferSize\" parameter must be of type `number`.');\r\n val = DEFAULT_MAX_BUFFER_SIZE;\r\n }\r\n\r\n const bufferSize = this._$bufferSize.getValue();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n };\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n @Input()\r\n set maxBufferSize(v: number) {\r\n const val = this._maxBufferSizeTransform(v);\r\n if (this._$maxBufferSize.getValue() === val) {\r\n return;\r\n }\r\n\r\n this._$maxBufferSize.next(val);\r\n };\r\n get maxBufferSize() { return this._$maxBufferSize.getValue(); }\r\n\r\n private _$snappingMethod = new BehaviorSubject<SnappingMethod>(DEFAULT_SNAPPING_METHOD);\r\n readonly $snappingMethod = this._$snappingMethod.asObservable();\r\n\r\n private _snappingMethodTransform = (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'advanced');\r\n if (!valid) {\r\n console.error('The \"snappingMethod\" parameter must have the value `normal` or `advanced`.');\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Snapping method.\r\n * 'default' - Normal group rendering.\r\n * 'advanced' - The group is rendered on a transparent background. List items below the group are not rendered.\r\n */\r\n @Input()\r\n set snappingMethod(v: SnappingMethod) {\r\n if (this._$snappingMethod.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._snappingMethodTransform(v);\r\n\r\n this._$snappingMethod.next(transformedValue);\r\n };\r\n get snappingMethod() { return this._$snappingMethod.getValue(); }\r\n\r\n private _$methodForSelecting = new BehaviorSubject<MethodForSelecting>(DEFAULT_SELECT_METHOD);\r\n readonly $methodForSelecting = this._$methodForSelecting.asObservable();\r\n\r\n private _methodForSelectingTransform = (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || 'multi-select');\r\n if (!valid) {\r\n console.error('The \"methodForSelecting\" parameter must have the value `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECT_METHOD;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Method for selecting list items.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n @Input()\r\n set methodForSelecting(v: MethodForSelecting) {\r\n if (this._$methodForSelecting.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._methodForSelectingTransform(v);\r\n\r\n this._$methodForSelecting.next(transformedValue);\r\n };\r\n get methodForSelecting() { return this._$methodForSelecting.getValue(); }\r\n\r\n private _$trackBy = new BehaviorSubject<string>(TRACK_BY_PROPERTY_NAME);\r\n readonly $trackBy = this._$trackBy.asObservable();\r\n\r\n private _trackByTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"trackBy\" parameter must be of type `string`.');\r\n return TRACK_BY_PROPERTY_NAME;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n @Input()\r\n set trackBy(v: string) {\r\n if (this._$trackBy.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._trackByTransform(v);\r\n\r\n this._$trackBy.next(transformedValue);\r\n };\r\n get trackBy() { return this._$trackBy.getValue(); }\r\n\r\n private _$screenReaderMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n readonly $screenReaderMessage = this._$screenReaderMessage.asObservable();\r\n\r\n private _screenReaderMessageTransform = (v: string) => {\r\n const valid = validateString(v);\r\n if (!valid) {\r\n console.error('The \"screenReaderMessage\" parameter must be of type `string`.');\r\n return DEFAULT_SCREEN_READER_MESSAGE;\r\n }\r\n return v;\r\n };\r\n\r\n /**\r\n * Message for screen reader.\r\n * The message format is: \"some text $1 some text $2\",\r\n * where $1 is the number of the first element of the screen collection,\r\n * $2 is the number of the last element of the screen collection.\r\n */\r\n @Input()\r\n set screenReaderMessage(v: string) {\r\n if (this._$screenReaderMessage.getValue() === v) {\r\n return;\r\n }\r\n\r\n const transformedValue = this._screenReaderMessageTransform(v);\r\n\r\n this._$screenReaderMessage.next(transformedValue);\r\n };\r\n get screenReaderMessage() { return this._$screenReaderMessage.getValue(); }\r\n\r\n private _$screenReaderFormattedMessage = new BehaviorSubject<string>(DEFAULT_SCREEN_READER_MESSAGE);\r\n readonly $screenReaderFormattedMessage = this._$screenReaderFormattedMessage.asObservable();\r\n\r\n private _isVertical = this.getIsVertical();\r\n\r\n get orientation() {\r\n return this._isVertical ? Directions.VERTICAL : Directions.HORIZONTAL;\r\n }\r\n\r\n private _$focusedElement = new BehaviorSubject<Id | undefined>(undefined);\r\n readonly $focusedElement = this._$focusedElement.asObservable();\r\n\r\n private _$classes = new BehaviorSubject<{ [cName: string]: boolean }>({});\r\n readonly $classes = this._$classes.asObservable();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n get isSnappingMethodAdvanced() { return this._isSnappingMethodAdvanced; }\r\n\r\n get displayItems() {\r\n return this._service.displayItems;\r\n }\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n get isNotSelecting() { return this._isNotSelecting; }\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n get isSingleSelecting() { return this._isSingleSelecting; }\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n get isMultiSelecting() { return this._isMultiSelecting; }\r\n\r\n private _$actualItems = new BehaviorSubject<IVirtualListCollection>([]);\r\n\r\n private _$collapsedItemIds = new BehaviorSubject<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snapedDisplayComponent: ComponentRef<BaseVirtualListItemComponent> | undefined;\r\n\r\n private _$bounds = new BehaviorSubject<IRect | null>(null);\r\n\r\n private _$totalSize = new BehaviorSubject<number>(0);\r\n\r\n private _$listBounds = new BehaviorSubject<IRect | null>(null);\r\n\r\n private _$scrollSize = new BehaviorSubject<number>(0);\r\n\r\n private _$isScrollStart = new BehaviorSubject<boolean>(true);\r\n\r\n private _$isScrollFinished = new BehaviorSubject<boolean>(false);\r\n\r\n private _resizeObserver: ResizeObserver | null = null;\r\n\r\n private _listResizeObserver: ResizeObserver | null = null;\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._$list.getValue(), scroller = this._$scroller.getValue(), bounds = this._$bounds.getValue(), snappedComponent = this._snapedDisplayComponent?.instance;\r\n if (list && scroller && snappedComponent) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect(), listElement = list?.nativeElement,\r\n { width: lWidth, height: lHeight } = listElement?.getBoundingClientRect() ?? { width: 0, height: 0 },\r\n { width, height } = bounds ?? { width: 0, height: 0 },\r\n isScrollable = isVertical ? scroller.nativeElement.scrollHeight > 0 : scroller.nativeElement.scrollWidth > 0;\r\n\r\n let scrollBarSize = isVertical ? width - lWidth : height - lHeight, isScrollBarOverlap = true, overlapScrollBarSize = 0;\r\n if (scrollBarSize === 0 && isScrollable) {\r\n isScrollBarOverlap = true;\r\n }\r\n\r\n this._service.scrollBarSize = scrollBarSize;\r\n this._service.overlapScrollBarSize = overlapScrollBarSize;\r\n\r\n const langTextDir = this._$langTextDir.getValue();\r\n\r\n if (isScrollBarOverlap && IS_FIREFOX) {\r\n scrollBarSize = overlapScrollBarSize = FIREFOX_SCROLLBAR_OVERLAP_SIZE;\r\n }\r\n\r\n const snappingMethod = this._$snappingMethod.getValue();\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n if (langTextDir === TextDirections.RTL) {\r\n snappedComponent.element.style.clipPath = `path(\"M ${overlapScrollBarSize} 0 L ${overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n } else {\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth - overlapScrollBarSize} 0 Z\")`;\r\n }\r\n }\r\n\r\n snappedComponent.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n const { width: sWidth, height: sHeight } = snappedComponent.getBounds() ?? { width: 0, height: 0 },\r\n scrollerElement = scroller.nativeElement, delta = snappedComponent.item?.measures.delta ?? 0;\r\n\r\n let left: number, right: number, top: number, bottom: number;\r\n if (isVertical) {\r\n left = 0;\r\n right = width - scrollBarSize;\r\n top = sHeight;\r\n bottom = height;\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n if (langTextDir === TextDirections.RTL) {\r\n scrollerElement.style.clipPath = `path(\"M 0 0 L 0 ${height} L ${width} ${height} L ${width} ${top + delta} L ${scrollBarSize} ${top + delta} L ${scrollBarSize} 0 Z\")`;\r\n } else {\r\n scrollerElement.style.clipPath = `path(\"M 0 ${top + delta} L 0 ${height} L ${width} ${height} L ${width} 0 L ${right} 0 L ${right} ${top + delta} Z\")`;\r\n }\r\n }\r\n } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n if (snappingMethod === SnappingMethods.NORMAL || snappingMethod === SnappingMethods.ADVANCED) {\r\n scrollerElement.style.clipPath = `path(\"M ${left + delta} 0 L ${left + delta} ${bottom} L 0 ${bottom} L 0 ${height} L ${width} ${height} L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private _componentsResizeObserver = new ResizeObserver(() => {\r\n this._trackBox.changes();\r\n });\r\n\r\n private _onResizeHandler = () => {\r\n const bounds = this._$scroller.getValue()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._$bounds.next({ x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height });\r\n } else {\r\n this._$bounds.next({ x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n }\r\n\r\n private _onListResizeHandler = () => {\r\n const bounds = this._$list.getValue()?.nativeElement?.getBoundingClientRect();\r\n if (bounds) {\r\n this._$listBounds.next({ x: bounds.x, y: bounds.y, width: bounds.width, height: bounds.height });\r\n } else {\r\n this._$listBounds.next({ x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE });\r\n }\r\n }\r\n\r\n private itemToFocus = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER) => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const { width, height } = this._$bounds.getValue()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = isVertical ? position : position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = isVertical ? position - (height - elementHeight) * .5 : position - (width - elementWidth) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = isVertical ? position - (height - elementHeight) : position - (width - elementWidth);\r\n break;\r\n }\r\n case FocusAlignments.NONE:\r\n default: {\r\n break;\r\n }\r\n }\r\n if (!Number.isNaN(pos)) {\r\n const scrollWidth = scroller?.scrollWidth ?? 0, scrollHeight = scroller?.scrollHeight ?? 0;\r\n if (isVertical) {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollHeight) {\r\n pos = scrollHeight;\r\n }\r\n } else {\r\n if (pos < 0) {\r\n pos = 0;\r\n }\r\n if (pos > scrollWidth) {\r\n pos = scrollWidth;\r\n }\r\n }\r\n\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n const params: IScrollToParams = { [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior: BEHAVIOR_INSTANT as ScrollBehavior };\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n get host() {\r\n return this._elementRef;\r\n }\r\n\r\n private _$viewInitialized = new BehaviorSubject<boolean>(false);\r\n readonly $viewInitialized = this._$viewInitialized.asObservable();\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this._$trackBy.getValue());\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 private _$prepared = new BehaviorSubject<boolean>(false);\r\n readonly $prepared = this._$prepared.asObservable();\r\n\r\n private _$isResetedReachStart = new BehaviorSubject<boolean>(true);\r\n readonly $isResetedReachStart = this._$isResetedReachStart.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$userScroll = new Subject<IScrollEvent>();\r\n readonly $userScroll = this._$userScroll.asObservable();\r\n\r\n private _onTrackBoxResetHandler = (v: boolean) => {\r\n if (v && this._scrollerComponent?.scrollable) {\r\n this._$isResetedReachStart.next(true);\r\n\r\n const scroller = this._$scroller.getValue()?.nativeElement;\r\n if (scroller) {\r\n const params: ScrollOptions = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n };\r\n\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n };\r\n\r\n private _onPreparedHandler = (v: boolean) => {\r\n this._$prepared.next(v);\r\n };\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor(\r\n private _cdr: ChangeDetectorRef,\r\n private _elementRef: ElementRef<HTMLDivElement>,\r\n private _service: NgVirtualListService,\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._trackBox.addEventListener(TrackBoxEvents.RESET, this._onTrackBoxResetHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.PREPARE, this._onPreparedHandler);\r\n\r\n this._service.initialize(this._trackBox);\r\n this._service.itemToFocus = this.itemToFocus;\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n this.$viewInitialized.pipe(\r\n tap(() => {\r\n this._$scroller.next(this._scrollerComponent?.scrollViewport);\r\n this._$list.next(this._scrollerComponent?.scrollContent);\r\n })\r\n ).subscribe();\r\n\r\n this._$langTextDir.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._$clickDistance.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.clickDistance = v;\r\n }),\r\n ).subscribe();\r\n\r\n let prepared = false, readyToStart = false, isUserScrolling = false;\r\n\r\n this.$prepared.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n readyToStart = isUserScrolling = false;\r\n prepared = readyToStart = v;\r\n const waitForPreparation = this._$waitForPreparation.getValue();\r\n if (waitForPreparation) {\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = v;\r\n }\r\n this._$classes.next({ prepared: v, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n } else {\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this._$classes.next({ prepared: true, [READY_TO_START]: true, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }\r\n }\r\n }),\r\n filter(v => !!v),\r\n delay(0),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n prepared = v;\r\n }),\r\n delay(0),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const waitForPreparation = this._$waitForPreparation.getValue(), scrollerComponent = this._scrollerComponent, val = v || !waitForPreparation;\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = val;\r\n }\r\n this._$classes.next({ prepared: val, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }),\r\n delay(1000),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const waitForPreparation = this._$waitForPreparation.getValue();\r\n readyToStart = v;\r\n this._$classes.next({ prepared: true, [READY_TO_START]: true, [WAIT_FOR_PREPARATION]: waitForPreparation });\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._$focusedElement.next(v ?? undefined);\r\n }),\r\n ).subscribe();\r\n\r\n this.$list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(list => {\r\n this._service.listElement = list?.nativeElement ?? null;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = this.$defaultItemValue,\r\n $dynamicSize = this.$dynamicSize,\r\n $snapScrollToBottom = this.$snapScrollToBottom,\r\n $trackBy = this.$trackBy,\r\n $selectByClick = this.$selectByClick,\r\n $collapseByClick = this.$collapseByClick,\r\n $isScrollStart = this._$isScrollStart.asObservable(),\r\n $isScrollFinished = this._$isScrollFinished.asObservable(),\r\n $scrollStartOffset = this.$scrollStartOffset,\r\n $scrollEndOffset = this.$scrollEndOffset,\r\n $isVertical = this.$direction.pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.isVertical = v;\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.dynamic = v;\r\n }),\r\n ).subscribe();\r\n\r\n $defaultItemValue.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.defaultItemValue = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollStartOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollStartOffset = this._service.scrollStartOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n $scrollEndOffset.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.scrollEndOffset = this._service.scrollEndOffset = v;\r\n }),\r\n ).subscribe();\r\n\r\n let isResetedReachStart = this._$isResetedReachStart.getValue();\r\n\r\n this.$isResetedReachStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n if (v) {\r\n isResetedReachStart = v;\r\n }\r\n }),\r\n debounceTime(1),\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n isResetedReachStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollStart.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (readyToStart && v && !isResetedReachStart && this._scrollerComponent?.scrollable) {\r\n this._trackBox.isScrollStart = true;\r\n this.onScrollReachStart.emit();\r\n }\r\n this._$isResetedReachStart.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._trackBox.isScrollEnd = v;\r\n if (v) {\r\n this.onScrollReachEnd.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.selectByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapseByClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.collapseByClick = v;\r\n }),\r\n ).subscribe();\r\n\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.trackingPropertyName = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $bounds = this._$bounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = this._$listBounds.asObservable().pipe(\r\n filter(b => !!b),\r\n ),\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 $bufferSize = this.$bufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = this.$maxBufferSize.pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = this.$itemConfigMap.pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = this.$snap,\r\n $isLazy = this.$collectionMode.pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = this.$enabledBufferOptimization,\r\n $snappingMethod = this.$snappingMethod.pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = this.$methodForSelecting,\r\n $selectedIds = this.$selectedIds,\r\n $collapsedIds = this.$collapsedIds.pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = this._$collapsedItemIds.asObservable().pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = this._$actualItems.asObservable(),\r\n $screenReaderMessage = this.$screenReaderMessage,\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n combineLatest([$displayItems, $screenReaderMessage, $isVertical, $scrollSize, $bounds]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(100),\r\n takeUntilDestroyed(),\r\n tap(([items, screenReaderMessage, isVertical, scrollSize, bounds]) => {\r\n this._$screenReaderFormattedMessage.next(\r\n formatScreenReaderMessage(items, screenReaderMessage, scrollSize, isVertical, bounds!)\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $isLazy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.isLazy = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$items, $itemSize]).pipe(\r\n takeUntilDestroyed(),\r\n map(([items, itemSize]) => ({ items, itemSize })),\r\n tap(({ items, itemSize }) => {\r\n this._trackBox.resetCollection(items, itemSize);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$items, $collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([items, collapsedIds, itemConfigMap, trackBy]) => {\r\n const hiddenItems = new CMap<Id, boolean>();\r\n\r\n let isCollapsed = false;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], group = (itemConfigMap[id]?.sticky ?? 0) > 0, collapsed = collapsedIds.includes(id);\r\n if (group) {\r\n isCollapsed = collapsed;\r\n } else {\r\n if (isCollapsed) {\r\n hiddenItems.set(id, true);\r\n }\r\n }\r\n }\r\n\r\n const actualItems: IVirtualListCollection = [];\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy];\r\n if (hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n this._$actualItems.next(actualItems);\r\n }),\r\n ).subscribe();\r\n\r\n $isVertical.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isVertical = v;\r\n const el: HTMLElement = this._elementRef.nativeElement;\r\n toggleClassName(el, v ? CLASS_LIST_VERTICAL : CLASS_LIST_HORIZONTAL, v ? CLASS_LIST_HORIZONTAL : CLASS_LIST_VERTICAL);\r\n }),\r\n ).subscribe();\r\n\r\n $snappingMethod.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._isSnappingMethodAdvanced = this._trackBox.isSnappingMethodAdvanced = v;\r\n }),\r\n ).subscribe();\r\n\r\n $methodForSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._$list.getValue()?.nativeElement as any;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $dynamicSize.pipe(\r\n takeUntilDestroyed(),\r\n tap(dynamicSize => {\r\n this.listenCacheChangesIfNeed(dynamicSize);\r\n })\r\n ).subscribe();\r\n\r\n /**\r\n * 0 - none; 1 - instant;\r\n */\r\n const _$scrollToEndDuringUpdateCanceller = new BehaviorSubject<0 | 1>(0),\r\n $scrollToEndDuringUpdateCanceller = _$scrollToEndDuringUpdateCanceller.asObservable();\r\n\r\n $scrollToEndDuringUpdateCanceller.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => v > 0),\r\n tap((v) => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n }\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(0);\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToBottom: boolean; bounds: IRect; listBounds: IRect; scrollEndOffset: number; items: IVirtualListCollection<Object>;\r\n itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number; bufferSize: number; maxBufferSize: number;\r\n snap: boolean; isVertical: boolean; dynamicSize: boolean; enabledBufferOptimization: boolean; cacheVersion: number;\r\n }) => {\r\n const {\r\n snapScrollToBottom, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n } = params;\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n let actualScrollSize = snapScrollToBottom && !prepared ?\r\n (isVertical ? scroller.actualScrollHeight ?? 0 : scroller.actualScrollWidth ?? 0) :\r\n (isVertical ? scroller.actualScrollTop ?? 0 : scroller.actualScrollLeft ?? 0),\r\n totalSize = 0, displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height, x, y } = bounds, viewportSize = (isVertical ? height : width);\r\n\r\n let scrollLength = Math.round(this._$totalSize.getValue()) ?? 0,\r\n actualScrollLength = Math.round(scrollLength === 0 ? 0 : scrollLength > viewportSize ? scrollLength - viewportSize : scrollLength),\r\n roundedMaxPosition = Math.round(actualScrollLength),\r\n scrollPosition = Math.round(actualScrollSize);\r\n\r\n const opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height, x, y }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToBottom && !prepared) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n scrollLength = Math.round(totalSize) ?? 0;\r\n actualScrollLength = Math.round(scrollLength === 0 ? 0 : scrollLength > viewportSize ? scrollLength - viewportSize : scrollLength);\r\n roundedMaxPosition = Math.round(actualScrollLength);\r\n scrollPosition = Math.round(actualScrollSize);\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n this._$totalSize.next(totalSize);\r\n\r\n this._service.collection = displayItems;\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 (actualScrollLength > 0) {\r\n const isScrollStart = isUserScrolling && scrollPosition < MIN_SCROLL_TO_START_PIXELS;\r\n this._$isScrollStart.next(isScrollStart);\r\n if (snapScrollToBottom && isScrollStart) {\r\n this._$isScrollFinished.next(false);\r\n }\r\n if (snapScrollToBottom && !isScrollStart) {\r\n this._$isScrollFinished.next(scrollPosition >= roundedMaxPosition);\r\n }\r\n }\r\n\r\n actualScrollSize = (isVertical ? scroller.actualScrollTop ?? 0 : scroller.actualScrollLeft ?? 0);\r\n const delta = this._trackBox.delta,\r\n roundedActualScrollSize = Math.round(actualScrollSize),\r\n scrollPositionAfterUpdate = actualScrollSize + delta,\r\n roundedScrollPositionAfterUpdate = Math.round(scrollPositionAfterUpdate),\r\n roundedMaxPositionAfterUpdate = Math.round(totalSize - viewportSize);\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n if (this._trackBox.isSnappedToEnd || (!!snapScrollToBottom && !prepared) ||\r\n (snapScrollToBottom && actualScrollSize > 0 &&\r\n ((roundedScrollPositionAfterUpdate >= scrollPosition) &&\r\n (scrollPosition >= roundedMaxPosition) &&\r\n (roundedMaxPositionAfterUpdate >= roundedMaxPosition)))) {\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._$isScrollFinished.next(true);\r\n }\r\n this._trackBox.isScrollEnd = true;\r\n if (roundedMaxPositionAfterUpdate > 0) {\r\n const diff = roundedMaxPositionAfterUpdate - roundedScrollPositionAfterUpdate,\r\n snapToEndTransitionInstantOffset = this._$snapToEndTransitionInstantOffset.getValue() || viewportSize,\r\n animated = prepared && readyToStart && diff >= 0 && diff <= snapToEndTransitionInstantOffset,\r\n params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n behavior: (animated ?\r\n BEHAVIOR_SMOOTH : BEHAVIOR_INSTANT) as ScrollBehavior,\r\n blending: true,\r\n fireUpdate: false,\r\n };\r\n scroller?.scrollTo?.(params);\r\n }\r\n } else if (roundedActualScrollSize !== roundedScrollPositionAfterUpdate && scrollPositionAfterUpdate > 0) {\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending: true,\r\n fireUpdate: false,\r\n };\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n };\r\n\r\n combineLatest([$snapScrollToBottom, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$userScroll,\r\n ]).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(([\r\n snapScrollToBottom, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n update({\r\n snapScrollToBottom, bounds: bounds!, listBounds: listBounds!, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n });\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = this.$scroller.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $list = this.$list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n map(v => v!.nativeElement),\r\n take(1),\r\n ),\r\n $scrollerScroll = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this._scrollerComponent).pipe(\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$scroll),\r\n )),\r\n ),\r\n $scrollerScrollEnd = this.$viewInitialized.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => of(this._scrollerComponent).pipe(\r\n filter(v => !!v),\r\n switchMap(scroller => scroller!.$scrollEnd),\r\n )),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, SCROLLER_WHEEL, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, SCROLLER_SCROLLBAR_SCROLL, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $docPointerUp = fromEvent(document, MOUSE_UP, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docPointerLeave = fromEvent(document, MOUSE_LEAVE, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docPointerOut = fromEvent(document, MOUSE_OUT, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $pointerMoveTakeUntil = race([$docPointerUp, $docPointerLeave, $docPointerOut]).pipe(\r\n takeUntilDestroyed(),\r\n take(1),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, MOUSE_DOWN, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($pointerMoveTakeUntil),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n );\r\n }),\r\n map(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n return scrollSize;\r\n }\r\n return 0;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $docTouchUp = fromEvent(document, TOUCH_END, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docTouchLeave = fromEvent(document, TOUCH_LEAVE, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $docTouchOut = fromEvent(document, TOUCH_OUT, { passive: true }).pipe(\r\n take(1),\r\n ),\r\n $touchMoveTakeUntil = race([$docTouchUp, $docTouchLeave, $docTouchOut]).pipe(\r\n takeUntilDestroyed(),\r\n take(1),\r\n );\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return fromEvent(scroller, TOUCH_START, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil($touchMoveTakeUntil),\r\n filter(() => {\r\n return !!this._trackBox.isSnappedToEnd;\r\n }),\r\n );\r\n }),\r\n map(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n return scrollSize;\r\n }\r\n return 0;\r\n }),\r\n tap(() => {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n isUserScrolling = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScollSize > scrollSize ? -1 : currentScollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this._$scrollStartOffset.getValue(), this._$scrollEndOffset.getValue(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n });\r\n\r\n this.onScroll.emit(event);\r\n this._$scroll.next(event);\r\n\r\n if (userAction && !this._$dynamicSize.getValue()) {\r\n this._$userScroll.next(event);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScrollEnd.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(userAction => {\r\n isUserScrolling = userAction;\r\n const scrollerEl = this._$scroller.getValue()?.nativeElement, scrollerComponent = this._scrollerComponent;\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n bounds = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScollSize = this._$scrollSize.getValue();\r\n this._trackBox.deltaDirection = currentScollSize > scrollSize ? -1 : currentScollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this._$scrollStartOffset.getValue(), this._$scrollEndOffset.getValue(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._$list.getValue()!.nativeElement, delta: this._trackBox.delta,\r\n scrollDelta: this._trackBox.scrollDelta, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n });\r\n\r\n this.onScrollEnd.emit(event);\r\n this._$scroll.next(event);\r\n\r\n if (userAction && !this._$dynamicSize.getValue()) {\r\n this._$userScroll.next(event);\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollerScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n );\r\n }),\r\n tap(e => {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n const isVertical = this._isVertical, bounds = this._$bounds.getValue(), listBounds = this._$listBounds.getValue(),\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n scrollLength = isVertical ? (listBounds?.height ?? 0) - (bounds?.height ?? 0) : (listBounds?.width ?? 0) - (bounds?.width ?? 0),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._trackBox.isSnappedToEnd) {\r\n if (scrollSize < scrollLength) {\r\n this._trackBox.cancelScrollSnappingToEnd();\r\n }\r\n }\r\n\r\n this._$scrollSize.next(actualScrollSize);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(scroller => {\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n this._resizeObserver = new ResizeObserver(this._onResizeHandler);\r\n this._resizeObserver.observe(scroller);\r\n\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(list => {\r\n if (this._listResizeObserver) {\r\n this._listResizeObserver.disconnect();\r\n }\r\n\r\n this._listResizeObserver = new ResizeObserver(this._onListResizeHandler);\r\n this._listResizeObserver.observe(list);\r\n\r\n this._onResizeHandler();\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n switchMap(({ scroller, trackBy, event }) => {\r\n const scrollerComponent = this._scrollerComponent,\r\n {\r\n id, iteration = 0,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n if (scrollerComponent) {\r\n const items = this._$actualItems.getValue();\r\n if (items && items.length) {\r\n const dynamicSize = this._$dynamicSize.getValue(), itemSize = this._$itemSize.getValue();\r\n\r\n if (dynamicSize) {\r\n const { width, height, x, y } = this._$bounds.getValue() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this._$itemConfigMap.getValue(), items = this._$actualItems.getValue(), isVertical = this._isVertical,\r\n currentScollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft), delta = this._trackBox.delta,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height, x, y }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this._$bufferSize.getValue(), maxBufferSize: this._$maxBufferSize.getValue(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft) + delta,\r\n snap: this._$snap.getValue(), fromItemId: id, enabledBufferOptimization: this._$enabledBufferOptimization.getValue(),\r\n },\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, opts),\r\n params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n blending: true, fireUpdate: false,\r\n };\r\n\r\n if (scrollSize === -1) {\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const { displayItems, totalSize } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n scrollerComponent.totalSize = totalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n this._trackBox.clearDelta();\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, totalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n const _scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n\r\n if (_scrollSize === -1) {\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n const notChanged = actualScrollSize === currentScollSize;\r\n scrollerComponent?.scrollTo?.(params);\r\n if ((!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) || iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._$scrollTo.next(params as IScrollParams);\r\n return of([false, {\r\n id, scroller: scrollerComponent, iteration: iteration + 1,\r\n isLastIteration: notChanged, scrollCalled: true, cb\r\n }]).pipe(\r\n delay(1),\r\n );\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, scroller: scrollerComponent, scrollCalled, cb }]);\r\n }\r\n } else {\r\n const index = items.findIndex(item => item[trackBy] === id);\r\n if (index > -1) {\r\n const isVertical = this._isVertical,\r\n currentScollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft), scrollSize = index * this._$itemSize.getValue();\r\n if (currentScollSize !== scrollSize) {\r\n _$scrollToEndDuringUpdateCanceller.next(1);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending: true,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, scroller: scrollerComponent, cb }]).pipe(delay(1));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([true, { id, scroller: scrollerComponent, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n filter(params => !!params),\r\n tap(([finished, params]) => {\r\n if (!finished) {\r\n if (params) {\r\n this._$scrollTo.next(params as IScrollParams);\r\n }\r\n return;\r\n }\r\n\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n\r\n const p = params as Pick<IScrollParams, 'cb' | 'scrollCalled' | 'scroller'>;\r\n if (p.scrollCalled && p.scroller) {\r\n p.cb?.();\r\n return;\r\n }\r\n\r\n if (p) {\r\n const { cb } = p;\r\n cb?.();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = this.$itemRenderer;\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._$itemRenderer.next(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(value => {\r\n if (!!value) {\r\n this.onViewportChange.emit(objectAsReadonly({ width: value.width, height: value.height }));\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$itemClick.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.onItemClick.emit(objectAsReadonly(v));\r\n }),\r\n ).subscribe();\r\n\r\n let isSelectedIdsFirstEmit = 0;\r\n\r\n this._service.$selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (this.isSingleSelecting || (this.isMultiSelecting && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this._$selectedIds.getValue();\r\n if ((this.isSingleSelecting && JSON.stringify(v) !== JSON.stringify(curr)) ||\r\n (isSelectedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isSelectedIdsFirstEmit > 2) {\r\n this.onSelect.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isSelectedIdsFirstEmit < 3) {\r\n isSelectedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $selectedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setSelectedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n let isCollapsedIdsFirstEmit = 0;\r\n\r\n this._service.$collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._$collapsedItemIds.next(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this._$collapsedIds.getValue();\r\n if ((isCollapsedIdsFirstEmit === 2 && JSON.stringify(v) !== JSON.stringify(curr)) || isCollapsedIdsFirstEmit > 2) {\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }\r\n if (isCollapsedIdsFirstEmit < 3) {\r\n isCollapsedIdsFirstEmit++;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n this._service.setCollapsedIds(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._$userScroll.next({\r\n scrollSize: 0,\r\n scrollWeight: 0,\r\n size: 0,\r\n listSize: 0,\r\n isVertical: false,\r\n direction: 0,\r\n isStart: false,\r\n isEnd: false,\r\n delta: 0,\r\n scrollDelta: 0,\r\n itemsRange: undefined,\r\n });\r\n }\r\n\r\n private listenCacheChangesIfNeed(value: boolean) {\r\n if (value) {\r\n if (!this._trackBox.hasEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n } else {\r\n if (this._trackBox.hasEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler)) {\r\n this._trackBox.removeEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this._$snappingMethod.getValue();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this._$methodForSelecting.getValue();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this._$direction.getValue();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this._$collectionMode.getValue();\r\n return isCollectionMode(mode, CollectionModes.LAZY);\r\n }\r\n\r\n private createDisplayComponentsIfNeed(displayItems: IRenderVirtualListCollection | null) {\r\n if (!displayItems || !this._listContainerRef) {\r\n this._trackBox.setDisplayObjectIndexMapById({});\r\n return;\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this._$snap.getValue()) {\r\n if (!this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.regular = true;\r\n this._snapedDisplayComponent = comp;\r\n this._trackBox.snapedDisplayComponent = this._snapedDisplayComponent;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\r\n }\r\n\r\n this._trackBox.items = displayItems;\r\n\r\n const _listContainerRef = this._listContainerRef;\r\n\r\n const maxLength = displayItems.length, components = this._displayComponents;\r\n\r\n if (_listContainerRef) {\r\n while (components.length < maxLength) {\r\n const comp = _listContainerRef.createComponent(this._itemComponentClass);\r\n components.push(comp);\r\n this._componentsResizeObserver.observe(comp.instance.element);\r\n }\r\n }\r\n this.resetRenderers();\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\r\n }\r\n\r\n private resetRenderers(itemRenderer?: TemplateRef<HTMLElement>) {\r\n const doMap: { [id: number]: number } = {}, components = this._displayComponents;\r\n for (let i = 0, l = components.length; i < l; i++) {\r\n const item = components[i];\r\n if (item) {\r\n const id = item.instance.id;\r\n item.instance.renderer = itemRenderer || this._$itemRenderer.getValue();\r\n doMap[id] = i;\r\n }\r\n }\r\n\r\n if (this._isSnappingMethodAdvanced && this._$snap.getValue() && this._snapedDisplayComponent && this._snapContainerRef) {\r\n const comp = this._snapedDisplayComponent;\r\n comp.instance.renderer = itemRenderer || this._$itemRenderer.getValue();\r\n }\r\n\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n\r\n /**\r\n * Tracking by id\r\n */\r\n private tracking() {\r\n this._trackBox.track();\r\n }\r\n\r\n private resetBoundsSize(isVertical: boolean, totalSize: number) {\r\n const l = this._$list.getValue(), prop = isVertical ? HEIGHT_PROP_NAME : WIDTH_PROP_NAME,\r\n size = totalSize;\r\n if (l && parseInt(l.nativeElement.style[prop]) !== size) {\r\n l.nativeElement.style[prop] = `${size}${PX}`;\r\n }\r\n }\r\n\r\n /**\r\n * Returns the bounds of an element with a given id\r\n */\r\n getItemBounds(id: Id): ISize | undefined {\r\n validateId(id);\r\n return this._trackBox.getItemBounds(id);\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focus(id: Id, align: FocusAlignment = FocusAlignments.NONE) {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this._$list.getValue()?.nativeElement.querySelector<HTMLDivElement>(`[${ITEM_ID}=\"${id}\"]`);\r\n if (el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (focusedEl) {\r\n this._service.focus(focusedEl, align);\r\n }\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 */\r\n scrollTo(id: Id, cb?: () => void, options?: IScrollOptions) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n iteration = options?.iteration ?? 0;\r\n validateId(id);\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const actualIteration = validateScrollIteration(iteration);\r\n this._$scrollTo.next({ id, behavior, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the last item in the collection.\r\n */\r\n scrollToEnd(cb?: () => void, options?: IScrollOptions) {\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT as ScrollBehavior,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior as ScrollBehavior);\r\n validateIteration(iteration);\r\n const trackBy = this._$trackBy.getValue(), items = this._$items.getValue(), latItem = items?.[items.length > 0 ? items.length - 1 : 0], id = latItem?.[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._$scrollTo.next({ id, behavior, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the last item in the collection.\r\n */\r\n scrollToEndRegular() {\r\n this._$isScrollFinished.next(true);\r\n this._trackBox.isScrollEnd = true;\r\n const scroller = this._scrollerComponent;\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n const isVertical = this._isVertical, scrollSize = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n this._$scrollSize.next(scrollSize);\r\n this._trackBox.changes();\r\n }\r\n }\r\n\r\n cacheClean() {\r\n this._trackBox.cacheClean();\r\n this._$collapsedItemIds.next([]);\r\n this._$isScrollStart.next(true);\r\n this._$isScrollFinished.next(false);\r\n this._$totalSize.next(0);\r\n this._$scrollSize.next(0);\r\n const scrollerComponent = this._scrollerComponent;\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n\r\n this._$prepared.next(false);\r\n }\r\n\r\n stopSnappingScrollToEnd() {\r\n const scroller = this._scrollerComponent;\r\n this._$isScrollFinished.next(false);\r\n this._trackBox.cancelScrollSnappingToEnd(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.afterViewInit();\r\n }\r\n\r\n private afterViewInit() {\r\n this._$viewInitialized.next(true);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n const updateId = this._updateId;\r\n if (updateId !== undefined) {\r\n cancelAnimationFrame(updateId);\r\n this._updateId = undefined;\r\n }\r\n\r\n if (this._trackBox) {\r\n this._trackBox.dispose();\r\n }\r\n\r\n if (this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n }\r\n\r\n if (this._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (this._resizeObserver) {\r\n this._resizeObserver.disconnect();\r\n }\r\n\r\n if (this._listResizeObserver) {\r\n this._listResizeObserver.disconnect();\r\n }\r\n\r\n if (this._snapedDisplayComponent) {\r\n this._snapedDisplayComponent.destroy();\r\n }\r\n\r\n if (this._displayComponents) {\r\n while (this._displayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\r\n }\r\n }\r\n}\r\n","<div aria-live=\"polite\" aria-atomic=\"true\" class=\"ngvl__screen-reader\">\r\n {{ $screenReaderFormattedMessage | async }}\r\n</div>\r\n<ng-container *ngIf=\"$snap | async\">\r\n <div #snappedContainer class=\"ngvl__snapped-container\">\r\n <div #snapped part=\"snapped-item\" class=\"ngvl__list-snapper\">\r\n <ng-container #snapRendererContainer></ng-container>\r\n </div>\r\n </div>\r\n</ng-container>\r\n<ng-scroller class=\"ngvl__list-scroller\" #scroller [classes]=\"($classes | async)!\"\r\n [startOffset]=\"($scrollStartOffset | async)!\" [direction]=\"($direction | async)!\"\r\n [endOffset]=\"($scrollEndOffset | async)!\" [scrollbarTheme]=\"($scrollbarTheme | async)!\"\r\n [focusedElement]=\"($focusedElement | async)!\" [loading]=\"($loading | async)!\"\r\n [scrollbarMinSize]=\"($scrollbarMinSize | async)!\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-scroller>","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { LocaleSensitiveDirective } from './locale-sensitive.directive';\r\n\r\n@NgModule({\r\n declarations: [LocaleSensitiveDirective],\r\n exports: [LocaleSensitiveDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class LocaleSensitiveModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickDirective } from './item-click.directive';\r\n\r\n@NgModule({\r\n declarations: [ItemClickDirective],\r\n exports: [ItemClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class ItemClickModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListItemComponent } from './ng-virtual-list-item.component';\r\nimport { ItemClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SubstrateComponent } from './substrate.component';\r\n\r\n@NgModule({\r\n declarations: [SubstrateComponent],\r\n exports: [SubstrateComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class SubstrateModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollBarComponent } from './ng-scroll-bar.component';\r\nimport { SubstrateModule } from '../substrate/substrate.module';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule, SubstrateModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgScrollerComponent } from './ng-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../directives';\r\nimport { NgScrollBarModule } from '../ng-scroll-bar/ng-scroll-bar.module';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgVirtualListComponent } from './ng-virtual-list.component';\r\nimport { LocaleSensitiveModule } from './directives';\r\nimport { NgVirtualListItemModule } from './components/list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/scroller/ng-scroller.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, LocaleSensitiveModule],\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\nexport * from './lib/components/list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/enums';\r\nexport * from './lib/models';\r\nexport * from './lib/types';\r\nexport * from './lib/utils';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["OPACITY_0","TRANSLATE_3D","PX","EventEmitter","tap","ID","BehaviorSubject","i1.NgVirtualListService","i3.ItemClickDirective","DEFAULT_STROKE_ANIMATION_DURATION","DEFAULT_RIPPLE_COLOR","NONE","filter","switchMap","takeUntil","i1","i2.SubstrateComponent","i3.NgScrollBarComponent","i4.LocaleSensitiveDirective","i3.NgScrollerComponent"],"mappings":"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"}