ng-virtual-list 19.11.2 → 19.11.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/fesm2022/ng-virtual-list.mjs +108 -45
- package/fesm2022/ng-virtual-list.mjs.map +1 -1
- package/lib/components/ng-list-item/base/base-virtual-list-item-component.d.ts +2 -0
- package/lib/components/ng-list-item/ng-virtual-list-item.component.d.ts +0 -2
- package/lib/components/ng-scroll-view/ng-scroll-view.component.d.ts +3 -1
- package/lib/const/index.d.ts +2 -1
- package/lib/directives/item-click/item-click.directive.d.ts +1 -1
- package/lib/directives/locale-sensitive/locale-sensitive.directive.d.ts +1 -1
- package/lib/interfaces/index.d.ts +2 -1
- package/lib/interfaces/scrolling-settings.d.ts +38 -0
- package/lib/ng-virtual-list.component.d.ts +13 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../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/components/ng-list-item/const/index.ts","../../../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/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.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/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../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/components/ng-scroller/const/index.ts","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.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/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.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":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.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/19.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/19.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/19.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 * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.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/19.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 { IAnimationParams } from '../interfaces';\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\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_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = 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 = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\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.STANDART;\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\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO: ScrollBehavior = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT: ScrollBehavior = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH: ScrollBehavior = '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 FOCUS = 'focus';\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 KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_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\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 = 500;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item__container';\r\n","export const ID = 'id',\r\n TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)',\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\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 * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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 } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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 _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = 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 = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich 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 string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as E, listener as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","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 \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/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/19.x/projects/ng-virtual-list/src/lib/core/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: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(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 = setTimeout(() => {\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 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 \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/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/19.x/projects/ng-virtual-list/src/lib/core/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 private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<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, snapped = !!snappedComponents ? [...snappedComponents] : [];\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 let snappedComponent: ComponentRef<C> | null | undefined;\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 (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\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 let snappedComponent: ComponentRef<C> | null | undefined;\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 (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\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 for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\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 { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../interfaces\";\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 { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snipedPos: 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: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends 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 OnTickEventListener = () => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnTickEventListener;\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 = 'n';\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/19.x/projects/ng-virtual-list/src/lib/core/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 _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = 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 = true;\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 = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\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 fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\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 private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\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\r\n this._isReseted = 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 this._newItems = [];\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 this._newItems.push(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 preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\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(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n 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, reverse: boolean = false): { 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; reverse ? j >= 0 : 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 if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\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,\r\n snipedPos = 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 deltaOfNewItems = 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 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 (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id === fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, 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 = this._newItems.indexOf(id) > -1 || (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, [IS_NEW]: 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, [IS_NEW]: 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 y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsWeights.splice(leftItemsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\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\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n deltaOfNewItems += componentSizeDelta;\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 (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 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 this._deltaOfNewItems = deltaOfNewItems;\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 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 snipedPos,\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 refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\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(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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 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 snipedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snipedPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\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: IRenderVirtualListItemMeasures = {\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 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 - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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: IRenderVirtualListItemMeasures = {\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 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 - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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 ((isSnappingMethodAdvanced || 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: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\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 - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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 isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\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 : 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 : 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 : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : 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 : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\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._snappedDisplayComponents, 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 | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\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","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii 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}","export const NGVL_INDEX = 'ngvl-index',\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","export const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\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 { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\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: ScrollBehavior) => {\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 };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\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, TrackBoxEvents } from './core/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IAnimationParams, IScrollOptions, ISize } from './interfaces';\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 {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK,\r\n ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\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 private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: 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 snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\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 get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\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 private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\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 get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(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 get collapsedIds() { return this._$collapsedIds.getValue(); }\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(null);\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(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | null) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._trackBox?.changes(immediately, force);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \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(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && 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 !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(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, 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, 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(null);\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(id: Id, collapsed?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.sticky > 0 && config.collapsable)) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(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, 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, 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 getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\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 | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\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(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\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 /**\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) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $itemClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$itemClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set сollapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get сollapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n * @param force - Forced update.\r\n */\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._internalService.update(immediately, force);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \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(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \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(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\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, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\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) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { computed, DestroyRef, ElementRef, inject, Signal, signal, TemplateRef } from '@angular/core';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n 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 { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN,\r\n} from '../const';\r\nimport { TextDirection, TextDirections } from '../../../enums';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class BaseVirtualListItemComponent {\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected readonly config = signal<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n\r\n protected readonly measures = signal<IDisplayObjectMeasures | null>(null);\r\n\r\n protected readonly focused = signal<boolean>(false);\r\n\r\n protected readonly part = signal<string>(PART_DEFAULT_ITEM);\r\n\r\n protected readonly data = signal<IRenderVirtualListItem | null>(null);\r\n protected _data: IRenderVirtualListItem | null = null;\r\n set item(v: IRenderVirtualListItem | null) {\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.set(v);\r\n }\r\n\r\n protected readonly classes!: Signal<{ [cName: string]: boolean; }>;\r\n\r\n protected readonly index!: Signal<number>;\r\n\r\n protected readonly templateContext!: Signal<ITemplateContext>;\r\n\r\n public regular: boolean = false;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n protected readonly itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n protected _renderer: TemplateRef<any> | undefined;\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this._renderer !== v) {\r\n this._renderer = v;\r\n this.itemRenderer.set(v);\r\n }\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.classes = computed(() => {\r\n const data = this.data(), focused = this.focused();\r\n return {\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: focused,\r\n };\r\n });\r\n\r\n this.index = computed(() => {\r\n return this.config()?.tabIndex ?? -1;\r\n });\r\n\r\n this.templateContext = computed(() => {\r\n const data = this.data(), measures = this.measures(), config = this.config();\r\n return {\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n };\r\n });\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this.measures.set(v?.measures ? { ...v.measures } : null)\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;\r\n if (data) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.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 el.removeAttribute(ID);\r\n }\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, 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()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this.part.set(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 const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = TRANSLATE_3D_HIDDEN;\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}","import { DestroyRef, Directive, ElementRef, inject, Input, output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, of, race } 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/18.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 standalone: false,\r\n})\r\nexport class ItemClickDirective {\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | string) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n onClick = output<PointerEvent | TouchEvent>();\r\n\r\n private _elementRef = inject(ElementRef);\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntilDestroyed(),\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 takeUntilDestroyed(this._destroyRef),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntilDestroyed(this._destroyRef),\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 takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntilDestroyed(this._destroyRef),\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","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit, signal } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, filter, debounceTime } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { createDisplayId, getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/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 styleUrl: './ng-virtual-list-item.component.scss',\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n protected readonly maxClickDistance = signal<number>(DEFAULT_CLICK_DISTANCE);\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this.maxClickDistance.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = toObservable(this.data, { injector: this._injector }),\r\n $focused = toObservable(this.focused, { injector: this._injector });\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.set(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.set(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 $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\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 keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\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 element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.style.visibility !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focusPrev(): number {\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 element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","@let renderer = itemRenderer();\r\n<div itemClick [maxClickDistance]=\"maxClickDistance()\" [part]=\"part()\" [attr.ngvl-index]=\"index()\" tabindex=\"-1\"\r\n class=\"ngvl-item__container\" [ngClass]=\"classes()\" (onClick)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n }\r\n</div>","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\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}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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/19.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 }>(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 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/19.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}","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\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\nexport const 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","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\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: 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/19.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 const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\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 private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / 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 thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\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}","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\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 + t;\r\n};\r\n","import { Easing } from './types';\r\nimport { easeLinear } from './ease';\r\n\r\ninterface IAnimatorParams {\r\n startValue: number;\r\n endValue: number;\r\n duration?: number;\r\n getPropValue?: () => number;\r\n easingFunction?: Easing;\r\n onUpdate?: (data: IAnimatorUpdateData) => void;\r\n onComplete?: (data: IAnimatorUpdateData) => void;\r\n}\r\n\r\ninterface IAnimatorUpdateData {\r\n timestamp: number;\r\n delta: number;\r\n value: number;\r\n}\r\n\r\nexport const DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n\r\nexport class Animator {\r\n private _animationId: number = 0;\r\n\r\n animate(params: IAnimatorParams) {\r\n const {\r\n startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n this.stop();\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start;\r\n\r\n let 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 = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\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 + diff * easedProgress,\r\n currentValue = val,\r\n t = Date.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\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 stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","export const 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","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/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/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}","import {\r\n Component, computed, DestroyRef, ElementRef, inject, input, Signal, signal, viewChild,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION } from '../const';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView {\r\n readonly scrollContent = viewChild<ElementRef<HTMLDivElement>>('scrollContent');\r\n\r\n readonly scrollViewport = viewChild<ElementRef<HTMLDivElement>>('scrollViewport');\r\n\r\n readonly direction = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n readonly startOffset = input<number>(0);\r\n\r\n readonly endOffset = input<number>(0);\r\n\r\n readonly isVertical: Signal<boolean>;\r\n\r\n readonly grabbing = signal<boolean>(false);\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = this.startOffset();\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = this.endOffset();\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this.startOffset();\r\n this._actualTotalSize = v + startOffset;\r\n }\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _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(),\r\n { width: contentWidth } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n { height: contentHeight } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);\r\n }\r\n\r\n readonly viewportBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n readonly contentBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n constructor() {\r\n this.isVertical = computed(() => {\r\n return this.direction() === ScrollerDirection.VERTICAL;\r\n });\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : w - startOffset - endOffset,\r\n height = isVertical ? h - startOffset - endOffset : h,\r\n bounds = this.viewportBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.viewportBounds.set({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : w - startOffset,\r\n height = isVertical ? h - startOffset : h,\r\n bounds = this.contentBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.contentBounds.set({ width, height });\r\n }\r\n }\r\n}","import {\r\n Component, inject, input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP,\r\n TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_VELOCITY_TIMESTAMP,\r\n OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n readonly scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n\r\n readonly overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n set delta(v: number) {\r\n this._startPosition += v;\r\n }\r\n\r\n constructor() {\r\n super();\r\n const $viewport = toObservable(this.scrollViewport).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v.nativeElement),\r\n ), $content = toObservable(this.scrollContent).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n const isVertical = this.isVertical();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\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.scroll({ [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(this._destroyRef),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\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 inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n 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 this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, 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 this.cancelOverscroll();\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.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\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(this._destroyRef),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\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 inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n 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 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 this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, 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 this.cancelOverscroll();\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.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + 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 return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this.overscrollEnabled()) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this.overscrollEnabled()) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this.isVertical()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\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 < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_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 < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_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.1;\r\n aSum = (aSum * MASS) + 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 this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\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 + (this._inversion ? -1 : 1) * 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 protected normalizeValue(value: number) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL,\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset(),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n result = value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n this._animator.animate({\r\n startValue, endValue, duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n }, onComplete: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n this._$scrollEnd.next(userAction);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this.stopScrolling();\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined): boolean {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this.isVertical();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n this.y = yy;\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n this.x = xx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(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 ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (this._y !== y) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshY(y);\r\n this.y = y;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshX(x);\r\n this.x = x;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshX(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(${(this._inversion ? 1 : -1) * value}px, 0, 0)`;\r\n }\r\n\r\n refreshY(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(0, ${(this._inversion ? 1 : -1) * value}px, 0)`;\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this.isVertical(), offset);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","export const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\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","import { Component, computed, effect, ElementRef, inject, input, output, Signal, signal, TemplateRef, viewChild } from '@angular/core';\r\nimport { combineLatest, filter, fromEvent, of, startWith, Subject, switchMap, tap } from 'rxjs';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport { DEFAULT_SCROLLBAR_INTERACTIVE } from '../../const';\r\nimport {\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\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/19.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 providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrl: './ng-scroll-bar.component.scss'\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n protected _defaultRenderer = viewChild<TemplateRef<any>>('defaultRenderer');\r\n\r\n protected _service = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly onDrag = output<IScrollBarDragEvent>();\r\n\r\n readonly onDragEnd = output<IScrollBarDragEvent>();\r\n\r\n readonly thumbGradientPositions = input<GradientColorPositions>([0, 0]);\r\n\r\n readonly size = input<number>(DEFAULT_SIZE);\r\n\r\n readonly thickness = input<number>(DEFAULT_THICKNESS);\r\n\r\n readonly scrollbarMinSize = input<number>(0);\r\n\r\n readonly prepared = input<boolean>(false);\r\n\r\n readonly interactive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly show = input<boolean>(false);\r\n\r\n readonly params = input<{ [propName: string]: any } | null>({});\r\n\r\n readonly renderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly thumbRenderer = signal<TemplateRef<any> | null>(this._defaultRenderer() ?? null);\r\n\r\n protected readonly hoverState = signal<boolean>(false);\r\n\r\n protected readonly pressedState = signal<boolean>(false);\r\n\r\n protected readonly templateContext!: Signal<IScrollBarTemplateContext>;\r\n\r\n protected readonly styles: Signal<{ [sName: string]: any }>;\r\n\r\n protected readonly thumbWidth: Signal<number>;\r\n\r\n protected readonly thumbHeight: Signal<number>;\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.templateContext = computed(() => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: this.thumbWidth(),\r\n height: this.thumbHeight(),\r\n fillPositions: this.thumbGradientPositions(),\r\n params: this.params() ?? {},\r\n };\r\n return context;\r\n });\r\n\r\n const $renderer = toObservable(this.renderer).pipe(\r\n startWith(null),\r\n ),\r\n $defaultRenderer = toObservable(this._defaultRenderer);\r\n\r\n combineLatest([$renderer, $defaultRenderer]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([renderer, defaultRenderer]) => {\r\n return of((renderer ?? defaultRenderer) ?? null);\r\n }),\r\n tap(v => {\r\n this.thumbRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = toObservable(this.prepared);\r\n $prepared.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshX(this._x);\r\n this.refreshY(this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n this.thumbWidth = computed(() => {\r\n return this.isVertical() ? this.thickness() : this.size();\r\n });\r\n\r\n this.thumbHeight = computed(() => {\r\n return this.isVertical() ? this.size() : this.thickness();\r\n });\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntilDestroyed()\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.pressedState.set(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.pressedState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const pressed = this.pressedState(), hover = this.hoverState();\r\n if (pressed) {\r\n this._service.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._service.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._service.state = ScrollbarStates.NORMAL;\r\n return;\r\n });\r\n\r\n effect(() => {\r\n this.totalSize = this.size();\r\n });\r\n\r\n effect(() => {\r\n this._interactive = this.interactive();\r\n });\r\n\r\n this.styles = computed(() => {\r\n const show = this.show(), sizePropName = this.isVertical() ? WIDTH : HEIGHT;\r\n return {\r\n [sizePropName]: `${show ? this.thickness() : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n };\r\n });\r\n\r\n this.$scroll.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n const event = this.createDragEvent(false);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this.isVertical(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent()?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport()?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this.startOffset() / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this.endOffset() - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent()?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect()\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._service.click(event);\r\n }\r\n}\r\n","@let grab = grabbing();\r\n<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"styles()\" [ngClass]=\"{grabbing: grab}\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"!isVertical()\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"thumbRenderer()\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n MEASURE_VELOCITY_TIMER = 20;\r\n","import { Directive, ElementRef, inject, input } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-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/18.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 standalone: false,\r\n})\r\nexport class LocaleSensitiveDirective {\r\n langTextDir = input<TextDirection>(TextDirections.LTR);\r\n\r\n listDir = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n private _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n constructor() {\r\n const $langTextDir = toObservable(this.langTextDir),\r\n $listDir = toObservable(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 { Component, computed, effect, inject, input, OnDestroy, output, Signal, signal, TemplateRef, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { debounceTime, filter, from, Subject, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME,\r\n SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS, MEASURE_VELOCITY_TIMER } from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant';\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_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/19.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 providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrl: './ng-scroller.component.scss'\r\n})\r\nexport class NgScrollerComponent extends NgScrollView implements OnDestroy {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n readonly onScrollbarVisible = output<boolean>();\r\n\r\n readonly scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n readonly scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly focusedElement = input<Id | null>(null);\r\n\r\n readonly content = input<HTMLElement>();\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly classes = input<{ [cName: string]: boolean }>({});\r\n\r\n readonly scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n\r\n readonly scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n\r\n readonly scrollbarThumbRenderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly scrollbarThumbParams = input<{ [propName: string]: any } | null>(null);\r\n\r\n public readonly actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly containerClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly thumbGradientPositions = signal<GradientColorPositions>([0, 0]);\r\n\r\n public readonly thumbSize = signal<number>(0);\r\n\r\n public readonly scrollbarShow = signal<boolean>(false);\r\n\r\n public readonly preparedSignal = signal<boolean>(false);\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n public readonly langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport()?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\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.set(v);\r\n }\r\n }\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n readonly viewInitialized = signal<boolean>(false);\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this.isVertical() ? this._y : this._x;\r\n\r\n private _measureVelocityAnimationFrameId: number = -1;\r\n\r\n private _measureVelocityAnimationTimer: number = -1;\r\n\r\n private _velocities: Array<number> = [];\r\n\r\n protected _velocity: number = 0;\r\n get velocity() { return this._velocity; }\r\n\r\n protected _averageVelocity: number = 0;\r\n get averageVelocity() { return this._averageVelocity; }\r\n\r\n private _measureVelocityHandler = () => {\r\n this.measureVelocityExecutor();\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n constructor() {\r\n super();\r\n\r\n this._service.$langTextDir.pipe(\r\n tap(v => {\r\n takeUntilDestroyed(this._destroyRef),\r\n this.langTextDir.set(v);\r\n })\r\n ).subscribe();\r\n\r\n const $prepare = toObservable(this.preparedSignal);\r\n $prepare.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $scrollbarMinSize = toObservable(this.scrollbarMinSize),\r\n $isVertical = toObservable(this.isVertical),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true, grabbing: this.grabbing() };\r\n });\r\n\r\n this.containerClasses = computed(() => {\r\n const { width: contentWidth, height: contentHeight } = this.contentBounds(),\r\n { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n return { [this.direction()]: true, grabbing: this.grabbing(), enabled: this.scrollbarEnabled(), scrollable: contentSize > viewportSize };\r\n });\r\n\r\n effect(() => {\r\n const viewInitialized = this.viewInitialized();\r\n if (viewInitialized) {\r\n this.updateScrollBarHandler();\r\n }\r\n });\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this.viewportBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.viewportBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const bounds: ISize = { width: content.offsetWidth, height: content.offsetHeight }, b = this.contentBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.contentBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private measureVelocity() {\r\n this._measureVelocityAnimationTimer = MEASURE_VELOCITY_TIMER;\r\n\r\n this.measureVelocityExecutor();\r\n };\r\n\r\n private measureVelocityExecutor() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this.isVertical() ? this._y : this._x);\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._velocity = velocity;\r\n this._velocities.push(velocity);\r\n this._averageVelocity = avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS;\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n\r\n this.runMeasureVelocity();\r\n }\r\n\r\n stopMeasureVelocity() {\r\n if (this._measureVelocityAnimationFrameId > -1) {\r\n cancelAnimationFrame(this._measureVelocityAnimationFrameId);\r\n this._measureVelocityAnimationFrameId = -1;\r\n }\r\n }\r\n\r\n private runMeasureVelocity() {\r\n this.stopMeasureVelocity();\r\n if (this._measureVelocityAnimationTimer >= 0) {\r\n this._measureVelocityAnimationTimer--;\r\n this._measureVelocityAnimationFrameId = requestAnimationFrame(this._measureVelocityHandler);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n viewportBounds = this.viewportBounds(),\r\n contentBounds = this.contentBounds(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this.scrollbarMinSize(),\r\n });\r\n\r\n this.thumbGradientPositions.set(thumbGradientPositions);\r\n this.thumbSize.set(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable && this.scrollbarEnabled());\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.viewInitialized.set(true);\r\n this.runMeasureVelocity();\r\n }\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset(this.startOffset());\r\n this.totalSize = 0;\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n if (this.isVertical()) {\r\n this.refreshY(this._y);\r\n } else {\r\n this.refreshX(this._x);\r\n }\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(userAction);\r\n this.stopScrolling();\r\n const isVertical = this.isVertical(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: false, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = false;\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n if (!userAction) {\r\n return;\r\n }\r\n this.refresh(true, true);\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n this._$scrollbarScroll.next(false);\r\n this.fireScrollEvent(false);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.stopMeasureVelocity();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"direction()\" [attr.aria-activedescendant]=\"focusedElement()\"\r\n tabindex=\"0\" part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n @if (scrollbarEnabled()) {\r\n @let prepared = preparedSignal();\r\n <ng-scroll-bar #scrollBar [direction]=\"direction()\" [size]=\"thumbSize()\" [renderer]=\"scrollbarThumbRenderer()\"\r\n [thickness]=\"scrollbarThickness()\" [params]=\"scrollbarThumbParams()\" [loading]=\"loading()\"\r\n [thumbGradientPositions]=\"thumbGradientPositions()\" [prepared]=\"prepared\" [interactive]=\"scrollbarInteractive()\"\r\n [show]=\"scrollbarShow() && scrollbarEnabled() && prepared\" [startOffset]=\"startOffset()\"\r\n [endOffset]=\"endOffset()\" [overscrollEnabled]=\"overscrollEnabled()\" [scrollBehavior]=\"scrollBehavior()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n }\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n width: (isVertical ? bounds.width : itemSize) as any,\r\n height: (isVertical ? itemSize : bounds.height) as any,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\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,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: \"0\",\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_100_PERSENT, SIZE_AUTO,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-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-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override 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 if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\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\r\n override 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 override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\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}","import { ChangeDetectionStrategy, Component, computed, input, Signal, signal, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, from, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../../../enums';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * PrerenderScrollerComponent.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/prerender-container/prerender-scroller/prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrl: '../../../ng-scroller/ng-scroller.component.scss',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n classes = input<{ [cName: string]: boolean }>({});\r\n\r\n actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n containerClasses = signal<{ [cName: string]: boolean }>({});\r\n\r\n thumbSize = signal<number>(0);\r\n\r\n scrollbarShow = signal<boolean>(false);\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n this.viewportBounds.set({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n this.contentBounds.set({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true };\r\n });\r\n\r\n const $contentBounds = toObservable(this.contentBounds),\r\n $viewportBounds = toObservable(this.viewportBounds),\r\n $isVertical = toObservable(this.isVertical),\r\n $direction = toObservable(this.direction),\r\n $scrollbarEnabled = toObservable(this.scrollbarEnabled);\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this.containerClasses.set({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\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 } = 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: 1,\r\n });\r\n\r\n this.thumbSize.set(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, OnDestroy, signal, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport { combineLatest, filter, Observable, Subject, Subscription, tap } from \"rxjs\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../enums\";\r\n\r\n/**\r\n * PrerenderList.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/prerender-container/components/prerender-list/prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n itemComponentClass = input<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n\r\n protected _items = signal<IVirtualListCollection | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({ prepared: true });\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n protected $isVertical: Observable<boolean>;\r\n\r\n protected $items: Observable<IVirtualListCollection | null>;\r\n\r\n protected $bounds: Observable<ISize>;\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.$isVertical = toObservable(this.isVertical);\r\n this.$items = toObservable(this._items);\r\n this.$bounds = toObservable(this.bounds);\r\n\r\n effect(() => {\r\n const enabled = this.enabled();\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n const el = 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 this._subscriptions.push(this.$bounds.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(({ width, height }) => {\r\n const el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox && !!items) {\r\n this._trackBox.reset(this.itemComponentClass(), items, bounds, {\r\n itemRenderer: this.itemRenderer(),\r\n dynamic: this.dynamic(),\r\n itemSize: this.itemSize(),\r\n isVertical: this.isVertical(),\r\n trackBy: this.trackBy(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._items.set(items);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [direction]=\"direction()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, input, TemplateRef, viewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../enums\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { filter, Observable, switchMap } from \"rxjs\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer {\r\n private _list = viewChild<NgPrerenderList>('list');\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n readonly $render: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list()?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n const $list = toObservable(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => v.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list();\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds()!\" [direction]=\"direction()\" [dynamic]=\"dynamic()\"\r\n [isVertical]=\"isVertical()\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\" [itemRenderer]=\"itemRenderer()\"\r\n [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\" [scrollbarEnabled]=\"scrollbarEnabled()\"\r\n [enabled]=\"enabled()\" />","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, computed, DestroyRef, effect, ElementRef, inject, input,\r\n OnDestroy, output, Signal, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-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, FOCUS, 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, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2, PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, ISize, IRenderStabilizerOptions,\r\n} from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting,\r\n SnappingMethod, SnappingMethods, TextDirection, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\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 { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii 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 styleUrl: './ng-virtual-list.component.scss',\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\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 /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n private _prerender = viewChild<NgPrerenderContainer>('prerender');\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n private _scrollerComponent = viewChild<NgScrollerComponent>('scroller');\r\n\r\n private _scroller: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n private _list: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n onScroll = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n onViewportChange = output<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n onItemClick = output<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n onSelect = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n onCollapse = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n onScrollReachStart = output<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n onScrollReachEnd = output<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _scrollbarThickness = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS, { ...this._scrollbarThickness });\r\n\r\n private _scrollbarMinSize = {\r\n transform: (v: number) => {\r\n const valid = validateInt(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 } as any;\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE, { ...this._scrollbarMinSize });\r\n\r\n private _scrollbarThumbRenderer = {\r\n transform: (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n scrollbarThumbRenderer = input<TemplateRef<any> | null>(null, { ...this._scrollbarThumbRenderer });\r\n\r\n private _scrollbarThumbParams = {\r\n transform: (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n scrollbarThumbParams = input<{ [propName: string]: any } | null>({}, { ...this._scrollbarThumbParams });\r\n\r\n private _loading = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(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 } as any;\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n loading = input<boolean>(false, { ...this._loading });\r\n\r\n private _waitForPreparation = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(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 } as any;\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 waitForPreparation = input<boolean>(DEFAULT_WAIT_FOR_PREPARATION, { ...this._waitForPreparation });\r\n\r\n private _clickDistance = {\r\n transform: (v: number) => {\r\n const valid = validateInt(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 } as any;\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n clickDistance = input<number>(DEFAULT_CLICK_DISTANCE, { ...this._clickDistance });\r\n\r\n private _itemsOptions = {\r\n transform: (v: IVirtualListCollection | undefined) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy();\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, 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 } as any;\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>({\r\n ...this._itemsOptions,\r\n });\r\n\r\n private _selectedIdsOptions = {\r\n transform: (v: Array<Id> | Id | undefined) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, 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 `null`.');\r\n return this._isMultiSelecting ? [] : undefined;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n defaultItemValue = input<IVirtualListItem | null>(null);\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n selectedIds = input<Array<Id> | Id | null>(null, { ...this._selectedIdsOptions });\r\n\r\n private _collapsedIdsOptions = {\r\n transform: (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, 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 \"collapsedIds\" parameter must be of type `Array<Id>.');\r\n return [];\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n collapsedIds = input<Array<Id>>([], { ...this._collapsedIdsOptions });\r\n\r\n private _selectByClickOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n selectByClick = input<boolean>(DEFAULT_SELECT_BY_CLICK, { ...this._selectByClickOptions });\r\n\r\n private _collapseByClickOptions = {\r\n transform: (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 } as any;\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 collapseByClick = input<boolean>(DEFAULT_COLLAPSE_BY_CLICK, { ...this._collapseByClickOptions });\r\n\r\n private _snapOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n snap = input<boolean>(DEFAULT_SNAP, { ...this._snapOptions });\r\n\r\n private _snapToEndTransitionInstantOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\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 snapToEndTransitionInstantOffset = input<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, { ...this._snapToEndTransitionInstantOffsetOptions });\r\n\r\n private _scrollStartOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n scrollStartOffset = input<number>(0, { ...this._scrollStartOffsetOptions });\r\n\r\n private _scrollEndOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n scrollEndOffset = input<number>(0, { ...this._scrollEndOffsetOptions });\r\n\r\n private _snapScrollToStartOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToStart = input<boolean>(DEFAULT_SNAP_SCROLLTO_START, { ...this._snapScrollToStartOptions });\r\n\r\n private _snapScrollToEndOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToEnd = input<boolean>(DEFAULT_SNAP_SCROLLTO_END, { ...this._snapScrollToEndOptions });\r\n\r\n private _snapScrollToBottomOptions = {\r\n transform: () => {\r\n throw Error('The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.');\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n snapScrollToBottom = input<boolean>('deprecated' as any, { ...this._snapScrollToBottomOptions });\r\n\r\n private _scrollbarEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED, { ...this._scrollbarEnabledOptions });\r\n\r\n private _scrollbarInteractiveOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE, { ...this._scrollbarInteractiveOptions });\r\n\r\n private _scrollBehaviorOptions = {\r\n transform: (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR, { ...this._scrollBehaviorOptions });\r\n\r\n private _animationParamsOptions = {\r\n transform: (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, navigateToItem: 150 }\".\r\n */\r\n animationParams = input<IAnimationParams>(DEFAULT_ANIMATION_PARAMS, { ...this._animationParamsOptions });\r\n\r\n private _overscrollEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED, { ...this._overscrollEnabledOptions });\r\n\r\n private _enabledBufferOptimizationOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n enabledBufferOptimization = input<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION, { ...this._enabledBufferOptimizationOptions });\r\n\r\n private _itemRendererOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n itemRenderer = input.required<TemplateRef<any>>({ ...this._itemRendererOptions });\r\n\r\n private _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n private _itemConfigMapOptions = {\r\n transform: (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 } as any;\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.\r\n * 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\r\n * collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n itemConfigMap = input<IVirtualListItemConfigMap>({}, { ...this._itemConfigMapOptions });\r\n\r\n private _itemSizeOptions = {\r\n transform: (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 return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property \r\n * to adjust the sizes of the items in the unallocated area.\r\n */\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n private _dynamicSizeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n dynamicSize = input(DEFAULT_DYNAMIC_SIZE, { ...this._dynamicSizeOptions });\r\n\r\n private _directionOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n direction = input<Direction>(DEFAULT_DIRECTION, { ...this._directionOptions });\r\n\r\n private _collectionModeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n collectionMode = input<CollectionMode>(DEFAULT_COLLECTION_MODE, { ...this._collectionModeOptions });\r\n\r\n private _bufferSizeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n bufferSize = input<number>(DEFAULT_BUFFER_SIZE, { ...this._bufferSizeOptions });\r\n\r\n private _maxBufferSizeTransform = {\r\n transform: (v: number | undefined) => {\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();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n }\r\n } as any;\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n maxBufferSize = input<number>(DEFAULT_MAX_BUFFER_SIZE, { ...this._maxBufferSizeTransform });\r\n\r\n private _snappingMethodOptions = {\r\n transform: (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n snappingMethod = input<SnappingMethod>(DEFAULT_SNAPPING_METHOD, { ...this._snappingMethodOptions });\r\n\r\n private _methodForSelectingOptions = {\r\n transform: (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === '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 } as any;\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n methodForSelecting = input<MethodForSelecting>(DEFAULT_SELECT_METHOD, { ...this._methodForSelectingOptions });\r\n\r\n private _trackByOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME, { ...this._trackByOptions });\r\n\r\n private _screenReaderMessageOptions = {\r\n transform: (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 } as any;\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 screenReaderMessage = input<string>(DEFAULT_SCREEN_READER_MESSAGE, { ...this._screenReaderMessageOptions });\r\n\r\n protected readonly screenReaderFormattedMessage = signal<string>(this.screenReaderMessage());\r\n\r\n private _langTextDir = {\r\n transform: (v: TextDirection) => {\r\n const valid = validateString(v);\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 } as any;\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 langTextDir = input<TextDirection>(DEFAULT_LANG_TEXT_DIR, { ...this._langTextDir });\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n\r\n protected readonly focusedElement = signal<Id | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({});\r\n\r\n private _actualItems = signal<IVirtualListCollection>([]);\r\n\r\n private _collapsedItemIds = signal<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _bounds = signal<ISize | null>(null);\r\n protected get bounds() { return this._bounds; }\r\n\r\n private _totalSize = signal<number>(0);\r\n\r\n private _listBounds = signal<ISize | null>(null);\r\n\r\n private _scrollSize = signal<number>(0);\r\n\r\n private _isScrollStart = signal<boolean>(true);\r\n\r\n private _isScrollEnd = signal<boolean>(false);\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._list(), scroller = this._scroller(), bounds = this._bounds(), snappedComponents = this._snappedDisplayComponents;\r\n if (list && scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this.snappingMethod();\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0].instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this.langTextDir();\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\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 scrollBarSize = this.scrollbarThickness();\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 + 2;\r\n top = sHeight;\r\n bottom = height;\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 } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const { width, height } = this._bounds()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize);\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.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior,\r\n fireUpdate: true, blending: true, userAction: true, duration: this.animationParams().navigateToItem,\r\n };\r\n scroller.refresh(false);\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _scrollStateUpdateIndex: number = 0;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender()?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this.dynamicSize() && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$viewInit = new BehaviorSubject<boolean>(false);\r\n private readonly $viewInit = this._$viewInit.asObservable();\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n protected getScrollStateVersion(totalSize: number, scrollSize: number, cacheVersion: number): string {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n if (totalSize < scrollSize) {\r\n this._scrollStateUpdateIndex = this._scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : this._scrollStateUpdateIndex + 1;\r\n }\r\n return `${this._scrollStateUpdateIndex}_${totalSize}_${scrollSize}_${cacheVersion}`;\r\n };\r\n\r\n constructor() {\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n this._service.animationParams = this.animationParams();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollerComponent = toObservable(this._scrollerComponent),\r\n $resizeViewport = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$resizeViewport),\r\n ),\r\n $resizeContent = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$resizeContent),\r\n );\r\n\r\n $resizeViewport.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._bounds.set(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._listBounds.set(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = toObservable(this.trackBy);\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false, hasScrollbarUserAction = false;\r\n\r\n this._scroller = computed(() => {\r\n return this._scrollerComponent()?.scrollViewport();\r\n });\r\n\r\n this._list = computed(() => {\r\n return this._scrollerComponent()?.scrollContent();\r\n });\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap((params) => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = toObservable(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\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const scrollStartOffset = this.scrollStartOffset(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = toObservable(this.scrollbarThickness);\r\n $scrollbarThickness.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(takeUntilDestroyed()),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(takeUntilDestroyed()),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(takeUntilDestroyed());\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntilDestroyed(),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const dir = this.langTextDir() as TextDirection;\r\n this._service.langTextDir = dir;\r\n });\r\n\r\n effect(() => {\r\n const dist = this.clickDistance();\r\n this._service.clickDistance = dist;\r\n });\r\n\r\n const $viewInit = this.$viewInit,\r\n $prerenderContainer = toObservable(this._prerender);\r\n\r\n const $prerender = $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => {\r\n return $prerenderContainer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n switchMap(v => v.$render),\r\n );\r\n }),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntilDestroyed(),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap((v) => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $items = toObservable(this.items),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $snapScrollToStart = toObservable(this.snapScrollToStart),\r\n $snapScrollToEnd = toObservable(this.snapScrollToEnd),\r\n $waitForPreparation = toObservable(this.waitForPreparation);\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged(),\r\n filter(([init, prerenderContainer]) => !!init && !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([, prerenderContainer, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.focusedElement.set(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = toObservable(this.defaultItemValue),\r\n $selectByClick = toObservable(this.selectByClick),\r\n $collapseByClick = toObservable(this.collapseByClick),\r\n $isScrollStart = toObservable(this._isScrollStart),\r\n $isScrollFinished = toObservable(this._isScrollEnd),\r\n $scrollStartOffset = toObservable(this.scrollStartOffset),\r\n $scrollEndOffset = toObservable(this.scrollEndOffset),\r\n $isVertical = toObservable(this.direction).pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\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 $isScrollStart.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent()?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent()?.scrollable) {\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 = toObservable(this._bounds).pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = toObservable(this._listBounds).pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = toObservable(this._scrollSize),\r\n $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $bufferSize = toObservable(this.bufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = toObservable(this.maxBufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = toObservable(this.itemConfigMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = toObservable(this.snap),\r\n $isLazy = toObservable(this.collectionMode).pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = toObservable(this.enabledBufferOptimization),\r\n $snappingMethod = toObservable(this.snappingMethod).pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = toObservable(this.methodForSelecting),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $collapsedIds = toObservable(this.collapsedIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = toObservable(this._actualItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n ),\r\n $screenReaderMessage = toObservable(this.screenReaderMessage),\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\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.set(\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 const $itemsComposition = $items.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\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.set(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()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n debounceTime(0),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntilDestroyed(),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n let isChunkLoading = false;\r\n const $loading = toObservable(this.loading);\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n bufferSize: number; maxBufferSize: number; snap: boolean; isVertical: boolean; dynamicSize: boolean;\r\n enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean; collapsedIds: Array<Id>;\r\n }, optimization: boolean = false, reupdate: boolean = false) => {\r\n const {\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction, collapsedIds,\r\n } = params;\r\n const scroller = this._scrollerComponent();\r\n let totalSize = 0;\r\n if (scroller) {\r\n const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :\r\n (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\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 } 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.set(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 const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = Math.round(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 scroller.delta = delta;\r\n\r\n this.snappingHandler();\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (!snapScrollToStart && snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n this._trackBox.isScrollEnd;\r\n return;\r\n }\r\n\r\n if ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return combineLatest([$snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $collapsedItemIds, $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n collapsedIds, bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n const scroller = this._scrollerComponent(), velocity = this._scrollerComponent()?.averageVelocity ?? 0,\r\n maxScrollSize = isVertical ? (scroller?.scrollHeight || 0) : (scroller?.scrollWidth ?? 0),\r\n isEdges = scrollSize === 0 || scrollSize === maxScrollSize, isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = dynamicSize && !itemsChanged && hasUserAction && !isScrolling && (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1),\r\n rerenderOptimization = dynamicSize && !itemsChanged && (hasUserAction || hasScrollbarUserAction) && !isEdges && velocity > 0 &&\r\n (velocity > MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 || hasUserAction);\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n\r\n if (!isScrolling) {\r\n update({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = toObservable(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 $scrollerScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scroll),\r\n ),\r\n $scrollerScrollEnd = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scrollEnd),\r\n ),\r\n $scrollbarScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scrollbarScroll),\r\n );\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this._isVertical, bounds = this._bounds(), listBounds = this._listBounds(),\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n maxScrollSize = isVertical ? (listBounds?.height ?? 0) - (bounds?.height ?? 0) : (listBounds?.width ?? 0) - (bounds?.width ?? 0),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n if (scrollSize > MIN_PIXELS_FOR_PREVENT_SNAPPING) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n if (scrollSize < (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._scrollSize.set(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(userAction => {\r\n hasScrollbarUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\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 hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\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 hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n tap(({ event }) => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(event => {\r\n const trackBy = this.trackBy(), scrollerComponent = this._scrollerComponent(),\r\n {\r\n id, iteration = 0, blending = false,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { iteration: nextIteration, blending, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (scrollerComponent) {\r\n const items = this._actualItems();\r\n if (items && items.length) {\r\n const dynamicSize = this.dynamicSize(), itemSize = this.itemSize(), snapScrollToEnd = this.snapScrollToEnd();\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap(), items = this._actualItems(), isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snap: this.snap(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\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 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 this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, scrollCalled, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\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 currentScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n scrollSize = index * this.itemSize();\r\n if (currentScrollSize !== scrollSize) {\r\n this._$preventScrollSnapping.next(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, scrollCalled, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n tap(([finished, params]) => {\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n if (!finished && !scrollParams?.scrollCalled) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n if (!this.dynamicSize()) {\r\n this._$fireUpdate.next(true);\r\n this._scrollerComponent()?.refresh(false, true);\r\n }\r\n this.emitScrollEvent(true, false, true);\r\n scrollParams?.cb?.();\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(value => {\r\n const size: ISize = { width: value.width, height: value.height };\r\n this.onViewportChange.emit(objectAsReadonly(size));\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();\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.selectedIds = 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.set(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this.collapsedIds();\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.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._$viewInit.next(true);\r\n\r\n this._$fireUpdate.next(false);\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n if (maxScrollSize >= 0) {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n if (isScrollStart) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING));\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(isScrollEnd);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = isScrollEnd;\r\n }\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this.snapScrollToStart(), snapScrollToEnd = this.snapScrollToEnd();\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._bounds() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScrollSize = this._scrollSize();\r\n this._trackBox.deltaDirection = currentScrollSize > scrollSize ? -1 : currentScrollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this.scrollStartOffset(), this.scrollEndOffset(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode();\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()) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this._itemRenderer();\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\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 const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let 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 = this._itemRenderer();\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this._itemRenderer();\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\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(), 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 | null {\r\n return this._service.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 this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior());\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) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\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._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollStart.set(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize()) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender();\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._collapsedItemIds.set([]);\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._totalSize.set(0);\r\n this._scrollSize.set(0);\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\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._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\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() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\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}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\">\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 { 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\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\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\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollerModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ItemClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { CUSTOM_ELEMENTS_SCHEMA, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\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/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, 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/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/interfaces';\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","PX","ITEM_ID","BehaviorSubject","tap","switchMap","filter","i2.ItemClickDirective","ScrollerDirection","TOP","LEFT","INSTANT","SCROLL_EVENT","takeUntil","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-virtual-list.mjs","sources":["../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/enums/scrollbar-states.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts","../../../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/components/ng-list-item/const/index.ts","../../../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/event-emitter.ts","../../../projects/ng-virtual-list/src/lib/utils/cmap.ts","../../../projects/ng-virtual-list/src/lib/core/cache-map.ts","../../../projects/ng-virtual-list/src/lib/core/tracker.ts","../../../projects/ng-virtual-list/src/lib/utils/buffer-interpolation.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts","../../../projects/ng-virtual-list/src/lib/utils/validation.ts","../../../projects/ng-virtual-list/src/lib/utils/list-validators.ts","../../../projects/ng-virtual-list/src/lib/utils/get-selector-by-item-id.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts","../../../projects/ng-virtual-list/src/lib/ng-virtual-list-public.service.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/base/base-virtual-list-item-component.ts","../../../projects/ng-virtual-list/src/lib/directives/item-click/item-click.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/ng-virtual-list-item.component.html","../../../projects/ng-virtual-list/src/lib/utils/snapping-method.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/utils/screen-reader-formatter.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/ease.ts","../../../projects/ng-virtual-list/src/lib/utils/animator/animator.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/const/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/scroll-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/const/index.ts","../../../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/components/ng-scroller/const/index.ts","../../../projects/ng-virtual-list/src/lib/directives/locale-sensitive/locale-sensitive.directive.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/events/index.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/core/prerender-track-box.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.component.html","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.component.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.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/ng-list-item/ng-virtual-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroller/ng-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/ng-prerender-list-item.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-prerender-scroller.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-prerender-list.module.ts","../../../projects/ng-virtual-list/src/lib/components/ng-prerender-container/ng-prerender-container.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":["export enum ScrollbarStates {\r\n NORMAL,\r\n PRESSED,\r\n HOVER,\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Subject } from 'rxjs';\r\nimport { ScrollbarState } from './types';\r\nimport { ScrollbarStates } from './enums';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarService {\r\n private _$click = new Subject<PointerEvent | MouseEvent>();\r\n readonly $click = this._$click.asObservable();\r\n\r\n private _$state = new BehaviorSubject<ScrollbarState>(ScrollbarStates.NORMAL);\r\n readonly $state = this._$state.asObservable();\r\n\r\n set state(v: ScrollbarState) {\r\n if (this._$state.getValue() !== v) {\r\n this._$state.next(v);\r\n }\r\n }\r\n get state() { return this._$state.getValue(); }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._$click.next(event);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\n\r\n/**\r\n * NgScrollBarService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-bar/ng-scroll-bar-public.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgScrollBarPublicService {\r\n private _internalService = inject(NgScrollBarService);\r\n\r\n get $click() { return this._internalService.$click; }\r\n\r\n get $state() { return this._internalService.$state; }\r\n}\r\n","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.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/19.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/19.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/19.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 * The group is rendered on a background.\r\n */\r\n STANDART = 'standart',\r\n /**\r\n * A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n ADVANCED = 'advanced',\r\n}","/**\r\n * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.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/19.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 { IAnimationParams, IScrollingSettings } from '../interfaces';\r\n\r\nexport const MAX_REGULAR_SNAPED_COMPONENTS = 2;\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_SCROLLBAR_ENABLED = true;\r\n\r\nexport const DEFAULT_SCROLLBAR_INTERACTIVE = true;\r\n\r\nexport const DEFAULT_SCROLL_BEHAVIOR: ScrollBehavior = 'smooth';\r\n\r\nexport const NAVIGATION_BY_KEYBOARD_TIMER = 50;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n navigateToItem: 150,\r\n navigateByKeyboard: NAVIGATION_BY_KEYBOARD_TIMER,\r\n};\r\n\r\nexport const DEFAULT_SCROLLING_SETTINGS: IScrollingSettings = {\r\n frictionalForce: 0.035,\r\n maxDuration: 4000,\r\n mass: 0.005,\r\n maxDistance: 12500,\r\n speedScale: 15,\r\n optimization: true,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = 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 = true;\r\n\r\nexport const DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET = 1;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_START = true;\r\n\r\nexport const DEFAULT_SNAP_SCROLLTO_END = true;\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.STANDART;\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\nexport const DEFAULT_SCROLLBAR_THICKNESS: number = 6;\r\n\r\nexport const DEFAULT_SCROLLBAR_MIN_SIZE: number = 80;\r\n\r\n// presets\r\n\r\nexport const BEHAVIOR_AUTO: ScrollBehavior = 'auto';\r\n\r\nexport const BEHAVIOR_INSTANT: ScrollBehavior = 'instant';\r\n\r\nexport const BEHAVIOR_SMOOTH: ScrollBehavior = '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 FOCUS = 'focus';\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 KEY_DOWN = 'keydown';\r\n\r\nexport const KEY_TAB = 'Tab';\r\n\r\nexport const SCROLL = 'scroll';\r\n\r\nexport const SCROLLER_SCROLL = 'scroll';\r\n\r\nexport const SCROLL_END = 'scrollend';\r\n\r\nexport const CLASS_LIST_VERTICAL = 'vertical';\r\n\r\nexport const CLASS_LIST_HORIZONTAL = 'horizontal';\r\n\r\n// styles\r\n\r\nexport const PART_DEFAULT_ITEM = 'item';\r\n\r\nexport const PART_ITEM_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\nexport const MIN_PIXELS_FOR_PREVENT_SNAPPING = 10;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1 = 74;\r\n\r\nexport const MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 = 500;\r\n\r\nexport const MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1 = 4;\r\n\r\nexport const RANGE_DISPLAY_ITEMS_END_OFFSET = 20;\r\n\r\nexport const PREPARE_ITERATIONS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_UPDATE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS = 0;\r\n\r\nexport const PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS = 1;\r\n\r\nexport const PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS = 0;\r\n\r\nexport const EMPTY_SCROLL_STATE_VERSION = '-1';\r\n\r\nexport const ROLE_LIST = 'list';\r\n\r\nexport const ROLE_LIST_BOX = 'listbox';\r\n\r\nexport const ITEM_ID = 'item-id';\r\n\r\nexport const ITEM_CONTAINER = 'ngvl-item__container';\r\n","export const ID = 'id',\r\n TRANSLATE_3D_HIDDEN = 'translate3d(-1000px,-1000px,0)',\r\n ATTR_AREA_SELECTED = 'area-selected',\r\n POSITION = 'position',\r\n POSITION_ZERO = '0',\r\n ITEM_ID = 'item-id',\r\n KEY_SPACE = ' ',\r\n KEY_ARR_LEFT = 'ArrowLeft',\r\n KEY_ARR_UP = 'ArrowUp',\r\n KEY_ARR_RIGHT = 'ArrowRight',\r\n KEY_ARR_DOWN = 'ArrowDown',\r\n EVENT_FOCUS_IN = 'focusin',\r\n EVENT_FOCUS_OUT = 'focusout',\r\n EVENT_KEY_DOWN = 'keydown',\r\n CLASS_NAME_SNAPPED = 'snapped',\r\n CLASS_NAME_SNAPPED_OUT = 'snapped-out',\r\n CLASS_NAME_FOCUS = 'focus';\r\n\r\n","export interface IDebounce {\r\n /**\r\n * Call handling method\r\n */\r\n execute: (...args: Array<any>) => void;\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose: () => void;\r\n /**\r\n * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed: () => boolean;\r\n}\r\n\r\n/**\r\n * Simple debounce function.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/debounce.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n * @param cb - Callback.\r\n * @param debounceTime - Debounce trigger time. \r\n * @param maxSkips - Maximum numbers of skips.\r\n * @returns \r\n */\r\nexport const debounce = (cb: (...args: Array<any>) => void, debounceTime: number = 0, maxSkips: number = 0): IDebounce => {\r\n let timeout: any = null, throws = 0;\r\n const dispose = () => {\r\n if (timeout !== null) {\r\n clearTimeout(timeout);\r\n timeout = null\r\n }\r\n }\r\n const execute = (...args: Array<any>) => {\r\n if (maxSkips > 0) {\r\n if (timeout !== null) {\r\n throws++;\r\n } else {\r\n throws = 0;\r\n }\r\n }\r\n\r\n dispose();\r\n\r\n let called = false;\r\n if (maxSkips > 0) {\r\n if (throws === maxSkips) {\r\n throws = 0;\r\n called = true;\r\n cb(...args);\r\n }\r\n }\r\n\r\n if (!called) {\r\n timeout = setTimeout(() => {\r\n cb(...args);\r\n }, debounceTime);\r\n }\r\n };\r\n const getIsDisposed = () => {\r\n return timeout === null;\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 * Indicates whether the handler has been removed (true) or not (false)\r\n */\r\n getIsDisposed,\r\n };\r\n};\r\n","/**\r\n * Switch css classes\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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 } from \"../interfaces\";\r\nimport { ScrollDirection } from '../types';\r\n\r\ninterface IScrollEventParams {\r\n direction: ScrollDirection;\r\n container: HTMLElement;\r\n list: HTMLElement;\r\n delta: number;\r\n deltaOfNewItems: number;\r\n scrollSize: number;\r\n isVertical: boolean;\r\n itemsRange: [number, number] | undefined;\r\n isEnd: boolean;\r\n userAction: boolean;\r\n}\r\n\r\n/**\r\n * Scroll event.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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 _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\r\n\r\n private _itemsRange: [number, number] | undefined;\r\n get itemsRange() { return this._itemsRange; }\r\n\r\n private _userAction: boolean;\r\n get userAction() { return this._userAction; }\r\n\r\n constructor(params: IScrollEventParams) {\r\n const { direction, container, list, scrollSize, delta, isVertical, deltaOfNewItems, itemsRange, isEnd, userAction } = 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 = isEnd;\r\n this._delta = delta;\r\n this._deltaOfNewItems = deltaOfNewItems;\r\n this._isStart = this._scrollSize === 0;\r\n this._itemsRange = itemsRange;\r\n this._userAction = userAction;\r\n }\r\n}","export type TEventHandler = (...args: Array<any>) => void;\r\n\r\n/**\r\n * Event emitter\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/event-emitter/event-emitter.ts\r\n * @author Evgenii Alexandrovich 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 string];\r\n if (Array.isArray(listeners)) {\r\n for (let i = 0, l = listeners.length; i < l; i++) {\r\n const listener = listeners[i];\r\n if (listener) {\r\n listener.apply(ctx, args);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Emits the event async\r\n */\r\n dispatchAsync(event: E, ...args: Array<any>): void {\r\n queueMicrotask(() => {\r\n if (this._disposed) {\r\n return;\r\n }\r\n this.dispatch(event, ...args);\r\n });\r\n }\r\n\r\n /**\r\n * Returns true if the event listener is already subscribed.\r\n */\r\n hasEventListener(eventName: E, handler: H): boolean {\r\n const event = eventName as string;\r\n if (this._listeners[event] !== undefined) {\r\n const listeners = this._listeners[event];\r\n const index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n return true;\r\n }\r\n }\r\n return false\r\n }\r\n\r\n /**\r\n * Add event listener\r\n */\r\n addEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n this._listeners[event] = [];\r\n }\r\n this._listeners[event].push(handler as TEventHandler);\r\n }\r\n\r\n /**\r\n * Remove event listener\r\n */\r\n removeEventListener(eventName: E, handler: H): void {\r\n const event = eventName as string;\r\n if (!this._listeners.hasOwnProperty(event)) {\r\n return;\r\n }\r\n const listeners = this._listeners[event], index = listeners.findIndex(v => v === handler);\r\n if (index > -1) {\r\n listeners.splice(index, 1);\r\n\r\n if (listeners.length === 0) {\r\n delete this._listeners[event];\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Remove all listeners\r\n */\r\n removeAllListeners() {\r\n const events = Object.keys(this._listeners);\r\n while (events.length > 0) {\r\n const event = events.pop();\r\n if (event) {\r\n const listeners = this._listeners[event];\r\n if (Array.isArray(listeners)) {\r\n while (listeners.length > 0) {\r\n const listener = listeners.pop();\r\n if (listener) {\r\n this.removeEventListener(event as E, listener as H);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Method of destroying handlers\r\n */\r\n dispose() {\r\n this._disposed = true;\r\n\r\n this.removeAllListeners();\r\n }\r\n}","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 \"../types\";\r\nimport { debounce } from \"../utils\";\r\nimport { EventEmitter } from \"../utils/event-emitter\";\r\nimport { CMap } from \"../utils/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/19.x/projects/ng-virtual-list/src/lib/core/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: any;\r\n\r\n protected _delta: number = 0;\r\n\r\n get delta() {\r\n return this._delta;\r\n }\r\n\r\n protected _deltaDirection: ScrollDirection = 0;\r\n set deltaDirection(v: ScrollDirection) {\r\n this._deltaDirection = v;\r\n\r\n this._scrollDirection = this.calcScrollDirection(v);\r\n }\r\n get deltaDirection() {\r\n return this._deltaDirection;\r\n }\r\n\r\n private _scrollDirectionCache: Array<ScrollDirection> = [];\r\n private _scrollDirection: ScrollDirection = 0;\r\n get scrollDirection() {\r\n return this._scrollDirection;\r\n }\r\n\r\n get version() {\r\n return this._version;\r\n }\r\n\r\n private _clearScrollDirectionDebounce = debounce(() => {\r\n while (this._scrollDirectionCache.length > CLEAR_SCROLL_DIRECTION_TO) {\r\n this._scrollDirectionCache.shift();\r\n }\r\n }, 10);\r\n\r\n constructor() {\r\n super();\r\n this.lifeCircle();\r\n }\r\n\r\n protected changesDetected() {\r\n return this._version !== this._previousVersion;\r\n }\r\n\r\n protected stopLifeCircle() {\r\n if (this._lifeCircleId !== undefined) {\r\n clearTimeout(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 = setTimeout(() => {\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 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 \"../types\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { ISize } from '../interfaces';\r\nimport { Id } from \"../types\";\r\nimport { CMap } from \"../utils/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/19.x/projects/ng-virtual-list/src/lib/core/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 private tearOutSnapedDisplayObjectByItemId = (itemId: Id, snappedComponents: Array<ComponentRef<C>> | null | undefined):\r\n ComponentRef<C> | null => {\r\n if (!snappedComponents || snappedComponents?.length === 0) {\r\n return null;\r\n }\r\n const index = snappedComponents?.findIndex(comp => comp?.instance?.itemId === itemId);\r\n if (index > -1) {\r\n const comp = snappedComponents[index];\r\n snappedComponents.splice(index, 1);\r\n return comp;\r\n }\r\n return snappedComponents.shift() ?? null;\r\n }\r\n\r\n /**\r\n * tracking by propName\r\n */\r\n track(items: IRenderVirtualListCollection, components: Array<ComponentRef<C>>, snappedComponents: Array<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, snapped = !!snappedComponents ? [...snappedComponents] : [];\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 let snappedComponent: ComponentRef<C> | null | undefined;\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 (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n if (!!snappedComponent) {\r\n isRegularSnapped = true;\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n\r\n if (!!snappedComponent) {\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 let snappedComponent: ComponentRef<C> | null | undefined;\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 (item.config.snapped || item.config.snappedOut) {\r\n if (snapped.length > 0) {\r\n snappedComponent = this.tearOutSnapedDisplayObjectByItemId(item.id, snapped);\r\n isRegularSnapped = true;\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = item;\r\n snappedComponent.instance.show();\r\n }\r\n }\r\n }\r\n if (!!snappedComponent) {\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 for (let i = 0, l = snapped.length; i < l; i++) {\r\n const snappedComponent = snapped[i];\r\n if (!!snappedComponent) {\r\n snappedComponent.instance.item = null;\r\n snappedComponent.instance.hide();\r\n }\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 { CACHE_BOX_CHANGE_EVENT_NAME, CacheMap } from \"./cache-map\";\r\nimport { Tracker } from \"./tracker\";\r\nimport { ISize } from \"../interfaces\";\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 { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures, IVirtualListItemConfigMap } from \"../models\";\r\nimport { debounce } from \"../utils\";\r\nimport { CMap } from '../utils/cmap';\r\nimport { bufferInterpolation } from \"../utils/buffer-interpolation\";\r\nimport { BaseVirtualListItemComponent } from \"../components/ng-list-item/base\";\r\nimport { PrerenderCache } from \"../components/ng-prerender-container/types/cache\";\r\n\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}\r\n\r\nexport interface IMetrics {\r\n delta: number;\r\n normalizedItemWidth: number;\r\n normalizedItemHeight: number;\r\n width: number;\r\n height: number;\r\n dynamicSize: boolean;\r\n itemSize: number;\r\n itemsFromStartToScrollEnd: number;\r\n itemsFromStartToDisplayEnd: number;\r\n itemsOnDisplayWeight: number;\r\n itemsOnDisplayLength: number;\r\n isVertical: boolean;\r\n leftHiddenItemsWeight: number;\r\n leftItemLength: number;\r\n leftItemsWeight: number;\r\n renderItems: number;\r\n rightItemLength: number;\r\n rightItemsWeight: number;\r\n scrollSize: number;\r\n leftSizeOfAddedItems: number;\r\n sizeProperty: typeof HEIGHT_PROP_NAME | typeof WIDTH_PROP_NAME;\r\n snap: boolean;\r\n snipedPos: 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: ISize;\r\n collection: C;\r\n isVertical: boolean;\r\n itemSize: number;\r\n bufferSize: number;\r\n maxBufferSize: number;\r\n dynamicSize: boolean;\r\n scrollSize: number;\r\n snap: boolean;\r\n enabledBufferOptimization: boolean;\r\n fromItemId?: Id;\r\n previousTotalSize: number;\r\n crudDetected: boolean;\r\n deletedItemsMap: { [index: number]: ISize; };\r\n}\r\n\r\nexport interface IGetItemPositionOptions<I extends 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 OnTickEventListener = () => void;\r\n\r\nexport type CacheMapListeners = OnChangeEventListener | OnTickEventListener;\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 = 'n';\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/19.x/projects/ng-virtual-list/src/lib/core/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 _snappedDisplayComponents: Array<ComponentRef<C>> | null | undefined;\r\n\r\n set snappedDisplayComponents(v: Array<ComponentRef<C>> | null | undefined) {\r\n if (this._snappedDisplayComponents === v) {\r\n return;\r\n }\r\n\r\n this._snappedDisplayComponents = 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 = true;\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 = true;\r\n }\r\n }\r\n\r\n protected _isScrollEnd: boolean = false;\r\n\r\n protected _isScrollSnapToStart: boolean = false;\r\n\r\n get isSnappedToStart() {\r\n return this._isScrollStart || this._isScrollSnapToStart;\r\n }\r\n\r\n protected _isScrollSnapToEnd: boolean = false;\r\n\r\n get isSnappedToEnd() {\r\n return this._isScrollEnd || this._isScrollSnapToEnd;\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 fireTick() {\r\n this.dispatch(TrackBoxEvents.TICK);\r\n }\r\n\r\n protected _previousTotalSize = 0;\r\n\r\n protected _deltaOfNewItems: number = 0;\r\n get deltaOfNewItems() { return this._deltaOfNewItems; }\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 private _prerenderedCache: PrerenderCache | null = null;\r\n\r\n private _newItems: Array<Id> = [];\r\n\r\n protected override lifeCircle() {\r\n this.fireChangeIfNeed();\r\n\r\n this.fireTick();\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\r\n this._isReseted = 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 this._newItems = [];\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 this._newItems.push(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 preventScrollSnapping(clearBuffer: boolean = false) {\r\n this._isScrollStart = this._isScrollEnd = false;\r\n\r\n if (clearBuffer) {\r\n this._isScrollSnapToStart = this._isScrollSnapToEnd = false;\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(opt.isVertical, opt.itemSize);\r\n }\r\n this._defaultBufferSize = opt.bufferSize;\r\n this._maxBufferSize = opt.maxBufferSize;\r\n\r\n const metrics = this.recalculateMetrics({\r\n ...opt,\r\n collection: items,\r\n previousTotalSize: this._previousTotalSize,\r\n crudDetected: this._crudDetected,\r\n deletedItemsMap,\r\n });\r\n\r\n this._delta += metrics.delta;\r\n\r\n this.updateAdaptiveBufferParams(metrics, items.length);\r\n\r\n this._previousTotalSize = metrics.totalSize;\r\n\r\n this._deletedItemsMap = {};\r\n\r\n this._crudDetected = false;\r\n\r\n if (opt.dynamicSize) {\r\n this.snapshot();\r\n }\r\n\r\n const displayItems = this.generateDisplayCollection(items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected };\r\n }\r\n\r\n 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, reverse: boolean = false): { 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; reverse ? j >= 0 : 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 if (offset + itemSize > size) {\r\n return { num, offset };\r\n }\r\n offset += itemSize;\r\n num++;\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,\r\n snipedPos = 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 deltaOfNewItems = 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 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 (itemConfigMap[id]?.sticky === 1) {\r\n stickyId = id;\r\n }\r\n if (!itemConfigMap[id]?.sticky) {\r\n stickyItemId = stickyId;\r\n }\r\n if (id === fromItemId) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let y = this._scrollStartOffset, 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 = this._newItems.indexOf(id) > -1 || (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, [IS_NEW]: 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, [IS_NEW]: 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 y -= stickyComponentSize;\r\n }\r\n\r\n if (id === fromItemId) {\r\n isFromItemIdFound = true;\r\n\r\n const { num, offset } = this.getElementNumToEnd(i, collection, map, typicalItemSize, size, isVertical),\r\n leftViewportSize = size - offset;\r\n if (leftViewportSize > 0) {\r\n const { num: num1, offset: offset1 } = this.getElementNumToEnd(i + num, collection, map, typicalItemSize, size, isVertical, 0, true),\r\n deltaNum = (num1 - num), deltaOffset = (offset1 - offset);\r\n totalItemsToDisplayEndWeight += offset;\r\n itemsFromStartToScrollEnd -= deltaNum;\r\n rightItemsWeight = rightItemLength = 0;\r\n leftHiddenItemsWeight -= deltaOffset;\r\n leftItemsWeights.splice(leftItemsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\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\r\n if (itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n deltaOfNewItems += componentSizeDelta;\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 (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 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 this._deltaOfNewItems = deltaOfNewItems;\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 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 snipedPos,\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 refreshCache(cache: PrerenderCache) {\r\n this._prerenderedCache = cache;\r\n }\r\n\r\n clearDelta(clearDirectionDetector = false): void {\r\n this._delta = this._deltaOfNewItems = 0;\r\n\r\n if (clearDirectionDetector) {\r\n this.clearScrollDirectionCache();\r\n }\r\n }\r\n\r\n changes(immediately: boolean = false, force: boolean = false): void {\r\n if (immediately) {\r\n if (force) {\r\n this.bumpVersion();\r\n }\r\n this._previousVersion = this._version;\r\n this.dispatch(CACHE_BOX_CHANGE_EVENT_NAME as CacheMapEvents, this.version);\r\n } else {\r\n if (force) {\r\n this.bumpVersion();\r\n return;\r\n }\r\n if (this.changesDetected()) {\r\n return;\r\n }\r\n this.bumpVersion();\r\n }\r\n }\r\n\r\n /**\r\n * Returns true if the bounds of at least one screen object have changed.\r\n */\r\n checkBoundsOfElements(): boolean {\r\n if (!this._displayComponents) {\r\n return false;\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(), cache = this.get(itemId);\r\n if (!!bounds && !!cache) {\r\n if (bounds.width !== cache.width || bounds.height !== cache.height) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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 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 snipedPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = snipedPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n boundsSize = isVertical ? height : width, actualEndSnippedPosition = scrollSize + boundsSize - this._scrollEndOffset;\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: IRenderVirtualListItemMeasures = {\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 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 - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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: IRenderVirtualListItemMeasures = {\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 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 - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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 ((isSnappingMethodAdvanced || 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: IRenderVirtualListItemMeasures = {\r\n x: isVertical ? 0 : pos,\r\n y: isVertical ? pos : 0,\r\n size,\r\n position: pos,\r\n boundsSize,\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 - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n new: (cache satisfies 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 isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\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 : 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 : 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 : stickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextSticky.config.snapped = true;\r\n nextSticky.measures.delta = (isVertical ? nextSticky.measures.y : 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 : endStickyItem.measures.x) - scrollSize;\r\n } else {\r\n nextEndSticky.config.snapped = true;\r\n nextEndSticky.measures[axis] = actualEndSnippedPosition - nextEndSticky.measures[sizeProperty];\r\n nextEndSticky.measures.delta = (isVertical ? nextEndSticky.measures.y : nextEndSticky.measures.x) - scrollSize;\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._snappedDisplayComponents, 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 | null {\r\n if (this.has(id)) {\r\n return this.get(id) ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n private _debouncedIsScrollStartOff = debounce(() => {\r\n this._isScrollStart = false;\r\n });\r\n\r\n protected cacheElements(isVertical: boolean, itemSize: number): void {\r\n if (!this._displayComponents) {\r\n return;\r\n }\r\n\r\n for (let i = 0, l = this._displayComponents.length; i < l; i++) {\r\n const component = this._displayComponents[i], itemId = component.instance.itemId;\r\n if (itemId === undefined) {\r\n continue;\r\n }\r\n const bounds = component.instance.getBounds();\r\n this.set(itemId, {\r\n ...this.get(itemId), ...bounds,\r\n width: bounds.width || (isVertical ? 0 : itemSize),\r\n height: bounds.height || (isVertical ? itemSize : 0),\r\n });\r\n if (this._isLazy && (this._isScrollStart)) {\r\n this._debouncedIsScrollStartOff.execute();\r\n }\r\n }\r\n const cache = this._prerenderedCache;\r\n if (!!cache) {\r\n for (const id in cache) {\r\n const cacheItem = cache[id];\r\n this.set(id, { ...(this.get(id) || {}), ...cacheItem });\r\n }\r\n this._prerenderedCache = null;\r\n }\r\n }\r\n\r\n resetCacheChunkInfo(): void {\r\n this._newItems = [];\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","/**\r\n * Methods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/enums/method-for-selecting-types.ts\r\n * @author Evgenii 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}","export const NGVL_INDEX = 'ngvl-index',\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","export const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\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 { MAX_SCROLL_TO_ITERATIONS } from \"../const\";\r\nimport { FocusAlignment, Id } from \"../types\";\r\nimport { validateFloat, validateInt, validateString } from \"./validation\";\r\n\r\nexport const validateScrollIteration = (value: number) => {\r\n const result = Number.isNaN(value) || (value < 0) ? 0 : value > MAX_SCROLL_TO_ITERATIONS ? MAX_SCROLL_TO_ITERATIONS : value;\r\n return result;\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: ScrollBehavior) => {\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 };","import { ITEM_ID } from \"../const\";\r\nimport { Id } from \"../types\";\r\n\r\nexport const getSelectorByItemId = (id: Id) => {\r\n return `[${ITEM_ID}=\"${id}\"]`;\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, TrackBoxEvents } from './core/track-box';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IAnimationParams, IScrollOptions, ISize } from './interfaces';\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 {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK, DEFAULT_SELECT_BY_CLICK,\r\n ITEM_CONTAINER,\r\n TRACK_BY_PROPERTY_NAME,\r\n} from './const';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { getListElements, NGVL_INDEX } from './components/ng-list-item/utils';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { validateFocusAlignment, validateId } from './utils/list-validators';\r\nimport { getSelectorByItemId } from './utils/get-selector-by-item-id';\r\nimport { IScrollToParams } from './interfaces/scroll-to-params';\r\n\r\n/**\r\n * NgVirtualListService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListService {\r\n private _id: number = 0;\r\n get id() { return this._id; }\r\n\r\n private _nextComponentId: number = 0;\r\n\r\n private _$itemClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $itemClick = this._$itemClick.asObservable();\r\n\r\n private _$selectedIds = new BehaviorSubject<Array<Id> | Id | null>(null);\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 private _$focusItem = new Subject<FocusItemParams>();\r\n readonly $focusItem = this._$focusItem.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollToParams | undefined>();\r\n readonly $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToStart = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToStart = this._$scrollToStart.asObservable();\r\n\r\n private _$scrollToEnd = new Subject<IScrollOptions | undefined>();\r\n readonly $scrollToEnd = this._$scrollToEnd.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$cacheVersion = new BehaviorSubject<number>(-1);\r\n readonly $cacheVersion = this._$cacheVersion.asObservable();\r\n\r\n trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n\r\n lastFocusedItemId: number = -1;\r\n\r\n scrollStartOffset: number = 0;\r\n\r\n scrollEndOffset: 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 snapScrollToStart: boolean = false;\r\n\r\n snapScrollToEnd: boolean = false;\r\n\r\n animationParams: IAnimationParams = DEFAULT_ANIMATION_PARAMS;\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 get scrollBarSize() { return this._$scrollBarSize.getValue(); }\r\n\r\n private _scrollBarSize: number = 0;\r\n set scrollBarSize(v: number) {\r\n if (this._scrollBarSize === v) {\r\n return;\r\n }\r\n\r\n this._scrollBarSize = v;\r\n\r\n this._$scrollBarSize.next(v);\r\n }\r\n private _$scrollBarSize = new BehaviorSubject<number>(this._scrollBarSize);\r\n readonly $scrollBarSize = this._$scrollBarSize.asObservable();\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 private _onTickHandler = () => {\r\n this._$tick.next();\r\n };\r\n\r\n private _onTrackBoxChangeHandler = (v: number) => {\r\n this._$cacheVersion.next(v);\r\n };\r\n\r\n set selectedIds(ids: Array<Id> | Id | null) {\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 get selectedIds() { return this._$selectedIds.getValue(); }\r\n\r\n set collapsedIds(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 get collapsedIds() { return this._$collapsedIds.getValue(); }\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(null);\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(null);\r\n break;\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n itemClick(data: IRenderVirtualListItem | null) {\r\n this._$itemClick.next(data);\r\n if (this.collapseByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.collapse(id);\r\n }\r\n if (this.selectByClick) {\r\n const trackBy = this.trackBy, id = (data as any)?.[trackBy] ?? null;\r\n this.select(id);\r\n }\r\n }\r\n\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._trackBox?.changes(immediately, force);\r\n }\r\n\r\n private getItemConfig(id: Id) {\r\n const displayItems = this.displayItems;\r\n if (!!displayItems) {\r\n const trackBy = this.trackBy;\r\n return displayItems.find(data => {\r\n const _id = (data as any)?.[trackBy] ?? null;\r\n return _id === id;\r\n })?.config ?? null;\r\n }\r\n return null;\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \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(id: Id, selected?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && 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 !== id ? id : null);\r\n } else {\r\n this._$selectedIds.next(selected ? id : null);\r\n }\r\n break;\r\n }\r\n case MethodsForSelectingTypes.MULTI_SELECT: {\r\n const curr = [...(this._$selectedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(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, 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, 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(null);\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(id: Id, collapsed?: boolean) {\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.sticky > 0 && config.collapsable)) {\r\n const curr = [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(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, 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, 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 getFocusedElementById(id: Id) {\r\n const el = this.listElement?.querySelector<HTMLDivElement>(getSelectorByItemId(id));\r\n if (!!el) {\r\n const focusedEl = el.querySelector<HTMLDivElement>(`.${ITEM_CONTAINER}`);\r\n if (!!focusedEl) {\r\n return focusedEl;\r\n }\r\n }\r\n return null;\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 | null {\r\n validateId(id);\r\n return this._trackBox?.getItemBounds(id) ?? null;\r\n }\r\n\r\n /**\r\n * Focus an list item by a given id.\r\n */\r\n focusById(id: Id, align: FocusAlignment = FocusAlignments.NONE, scrollBehavior: ScrollBehavior = \"auto\") {\r\n validateId(id);\r\n validateFocusAlignment(align);\r\n const el = this.getFocusedElementById(id);\r\n if (!!el) {\r\n this.focus(el, align, scrollBehavior);\r\n }\r\n }\r\n\r\n focus(element: HTMLElement, align: FocusAlignment = FocusAlignments.CENTER, behavior: ScrollBehavior = BEHAVIOR_AUTO): boolean {\r\n element.focus({ preventScroll: true });\r\n if (!!element.parentElement) {\r\n const position = parseFloat(element.parentElement?.getAttribute('position') ?? '0');\r\n this._$focusItem.next({ element, position, align, behavior });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n focusFirstElement() {\r\n const elements = this.listElement?.querySelectorAll<HTMLDivElement>(getListElements()),\r\n elList = (elements ? Array.from(elements) : []).sort((a, b) => {\r\n const indexA = Number(a.getAttribute(NGVL_INDEX)), indexB = Number(b.getAttribute(NGVL_INDEX));\r\n if (indexA > indexB) return 1;\r\n if (indexA < indexB) return -1;\r\n return 0;\r\n });\r\n let element: HTMLElement | undefined = undefined;\r\n for (let i = 0, l = elList.length; i < l; i++) {\r\n const el = elList[i], index = Number(el.getAttribute(NGVL_INDEX));\r\n if (!!el && index > 0) {\r\n element = el;\r\n break;\r\n }\r\n }\r\n if (!!element) {\r\n this.focus(element, FocusAlignments.CENTER, BEHAVIOR_INSTANT);\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(id: number, trackBox: TrackBox) {\r\n this._id = id;\r\n this._trackBox = trackBox;\r\n this._trackBox.addEventListener(TrackBoxEvents.TICK, this._onTickHandler);\r\n this._trackBox.addEventListener(TrackBoxEvents.CHANGE, this._onTrackBoxChangeHandler);\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 /**\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) | null = null, options: IScrollOptions | null = null) {\r\n this._$scrollTo.next({ id, cb, options });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._$scrollToStart.next(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._$scrollToEnd.next(options);\r\n }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { IRenderVirtualListItem, IVirtualListItem } from './models';\r\nimport { IScrollOptions } from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { FocusItemParams } from './types/focus-item-params';\r\nimport { NgVirtualListService } from './ng-virtual-list.service';\r\nimport { FocusAlignments } from './enums';\r\n\r\n/**\r\n * NgVirtualListPublicService\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list-publick.service.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class NgVirtualListPublicService {\r\n private _internalService = inject(NgVirtualListService);\r\n\r\n /**\r\n * Unique list identifier.\r\n */\r\n get id(): number { return this._internalService.id; }\r\n\r\n /**\r\n * Informs about a click on a list item.\r\n */\r\n get $itemClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$itemClick; };\r\n\r\n /**\r\n * Informs about the selection of a list item(s).\r\n */\r\n get $selectedIds(): Observable<Array<Id> | Id | null> { return this._internalService.$selectedIds; };\r\n\r\n /**\r\n * Informs about the collapse (expanding) of a list element(s).\r\n */\r\n get $collapsedIds(): Observable<Array<Id>> { return this._internalService.$collapsedIds; };\r\n\r\n /**\r\n * Informs the focus on the specified list item.\r\n */\r\n get $focusItem(): Observable<FocusItemParams> { return this._internalService.$focusItem; };\r\n\r\n /**\r\n * Notifies about the next change detection tick. Works similarly to `setTimeout` with a timeout of 0.\r\n */\r\n get $tick(): Observable<void> { return this._internalService.$tick; };\r\n\r\n /**\r\n * Specifies a list of selected items.\r\n */\r\n set selectedIds(ids: Array<Id> | Id | null) {\r\n this._internalService.selectedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of selected items.\r\n */\r\n get selectedIds() { return this._internalService.selectedIds; }\r\n\r\n /**\r\n * Specifies a list of collapsed elements.\r\n */\r\n set сollapsedIds(ids: Array<Id>) {\r\n this._internalService.collapsedIds = ids;\r\n }\r\n\r\n /**\r\n * Returns a list of collapsed elements.\r\n */\r\n get сollapsedIds() { return this._internalService.collapsedIds; }\r\n\r\n /**\r\n * Updates the list\r\n * @param immediately - Indicates that the list is updated instantly.\r\n * @param force - Forced update.\r\n */\r\n update(immediately: boolean = false, force: boolean = false) {\r\n this._internalService.update(immediately, force);\r\n }\r\n\r\n /**\r\n * Selects a list item\r\n * @param id \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(id: Id, selected: boolean | undefined = undefined) {\r\n this._internalService.select(id, selected);\r\n }\r\n\r\n /**\r\n * Collapse list items\r\n * @param id \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(id: Id, collapsed: boolean | undefined = undefined) {\r\n this._internalService.collapse(id, collapsed);\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, scrollBehavior: ScrollBehavior = \"auto\") {\r\n return this._internalService.focusById(id, align, scrollBehavior)\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) | null = null, options: IScrollOptions | null = null) {\r\n this._internalService.scrollTo(id, cb, options);\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(options?: IScrollOptions) {\r\n this._internalService.scrollToStart(options);\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(options?: IScrollOptions) {\r\n this._internalService.scrollToEnd(options);\r\n }\r\n}\r\n","import { computed, DestroyRef, ElementRef, inject, Signal, signal, TemplateRef } from '@angular/core';\r\nimport { ISize } from '../../../interfaces';\r\nimport { IRenderVirtualListItem } from '../../../models/render-item.model';\r\nimport { IDisplayObjectConfig, IDisplayObjectMeasures } from '../../../models';\r\nimport {\r\n 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 { ITemplateContext } from '../interfaces';\r\nimport {\r\n CLASS_NAME_FOCUS, CLASS_NAME_SNAPPED, CLASS_NAME_SNAPPED_OUT, ID, ITEM_ID, POSITION, POSITION_ZERO, TRANSLATE_3D_HIDDEN,\r\n} from '../const';\r\nimport { TextDirection, TextDirections } from '../../../enums';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { createDisplayId } from '../utils';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/list-item/base/base-virtual-list-item-component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class BaseVirtualListItemComponent {\r\n private _apiService = inject(NgVirtualListPublicService);\r\n\r\n protected readonly _service = inject(NgVirtualListService);\r\n\r\n protected _id!: number;\r\n get id() {\r\n return this._id;\r\n }\r\n\r\n protected _listId!: number;\r\n get listId() {\r\n return this._listId;\r\n }\r\n\r\n protected _displayId!: string;\r\n get displayId() {\r\n return this._displayId;\r\n }\r\n\r\n protected _isSelected: boolean = false;\r\n\r\n protected _isCollapsed: boolean = false;\r\n\r\n protected readonly config = signal<IDisplayObjectConfig>({} as IDisplayObjectConfig);\r\n\r\n protected readonly measures = signal<IDisplayObjectMeasures | null>(null);\r\n\r\n protected readonly focused = signal<boolean>(false);\r\n\r\n protected readonly part = signal<string>(PART_DEFAULT_ITEM);\r\n\r\n protected readonly data = signal<IRenderVirtualListItem | null>(null);\r\n protected _data: IRenderVirtualListItem | null = null;\r\n set item(v: IRenderVirtualListItem | null) {\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.set(v);\r\n }\r\n\r\n protected readonly classes!: Signal<{ [cName: string]: boolean; }>;\r\n\r\n protected readonly index!: Signal<number>;\r\n\r\n protected readonly templateContext!: Signal<ITemplateContext>;\r\n\r\n public regular: boolean = false;\r\n\r\n protected _scrollBarSize: number = 0;\r\n\r\n protected _langTextDir: TextDirection = TextDirections.LTR;\r\n\r\n protected _regularLength: string = SIZE_100_PERSENT;\r\n set regularLength(v: string) {\r\n if (this._regularLength === v) {\r\n return;\r\n }\r\n\r\n this._regularLength = v;\r\n\r\n this.update();\r\n }\r\n\r\n get item() {\r\n return this._data;\r\n }\r\n\r\n get itemId() {\r\n return this._data?.id;\r\n }\r\n\r\n protected readonly itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n protected _renderer: TemplateRef<any> | undefined;\r\n set renderer(v: TemplateRef<any> | undefined) {\r\n if (this._renderer !== v) {\r\n this._renderer = v;\r\n this.itemRenderer.set(v);\r\n }\r\n }\r\n\r\n protected _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n get element() {\r\n return this._elementRef.nativeElement;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this._id = this._service.generateComponentId();\r\n this._listId = this._service.id;\r\n this._displayId = createDisplayId(this._listId, this._id);\r\n\r\n this.classes = computed(() => {\r\n const data = this.data(), focused = this.focused();\r\n return {\r\n [CLASS_NAME_SNAPPED]: data?.config?.snapped ?? false, [CLASS_NAME_SNAPPED_OUT]: data?.config?.snappedOut ?? false,\r\n [CLASS_NAME_FOCUS]: focused,\r\n };\r\n });\r\n\r\n this.index = computed(() => {\r\n return this.config()?.tabIndex ?? -1;\r\n });\r\n\r\n this.templateContext = computed(() => {\r\n const data = this.data(), measures = this.measures(), config = this.config();\r\n return {\r\n data: data?.data, prevData: data?.previouseData, nextData: data?.nextData, measures,\r\n config, reseted: false, index: data?.index ?? - 1, api: this._apiService,\r\n };\r\n });\r\n }\r\n\r\n protected updateMeasures(v: IRenderVirtualListItem<any> | null) {\r\n this.measures.set(v?.measures ? { ...v.measures } : null)\r\n }\r\n\r\n protected updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n protected update() {\r\n const data = this._data, regular = this.regular, length = this._regularLength, el = this._elementRef.nativeElement;\r\n if (data) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style;\r\n styles.zIndex = data.config.zIndex;\r\n styles.position = POSITION_ABSOLUTE;\r\n if (data.config.isStub === true) {\r\n el.style.visibility = VISIBILITY_HIDDEN;\r\n }\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n styles.transform = `${TRANSLATE_3D}(${data.config.isVertical ? (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) : data.measures.delta}${PX}, ${data.config.isVertical ? data.measures.delta : 0}${PX}, ${POSITION_ZERO})`;\r\n } else {\r\n el.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 el.removeAttribute(ID);\r\n }\r\n }\r\n\r\n protected updatePartStr(v: IRenderVirtualListItem | null, 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()) {\r\n part += PART_ITEM_FOCUSED;\r\n }\r\n this.part.set(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 const isStub = this._data?.config?.isStub ?? false;\r\n if (!isStub) {\r\n if (styles.visibility === VISIBILITY_VISIBLE) {\r\n return;\r\n }\r\n styles.visibility = VISIBILITY_VISIBLE;\r\n }\r\n }\r\n }\r\n\r\n hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\r\n styles.position = POSITION_ABSOLUTE;\r\n styles.transform = TRANSLATE_3D_HIDDEN;\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}","import { DestroyRef, Directive, ElementRef, inject, Input, output } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { fromEvent, of, race } 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/19.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 standalone: false,\r\n})\r\nexport class ItemClickDirective {\r\n private _maxDistance = DEFAULT_MAX_DISTANCE;\r\n\r\n @Input('maxClickDistance')\r\n set maxDistance(v: number | string) {\r\n this._maxDistance = v ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n onClick = output<PointerEvent | TouchEvent>();\r\n\r\n private _elementRef = inject(ElementRef);\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n const $pointerPressed = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown'),\r\n $pointerCancel = race([\r\n fromEvent(window, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n fromEvent<PointerEvent>(window, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n ),\r\n ]),\r\n $pointerRelease = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup', { passive: false });\r\n\r\n $pointerPressed.pipe(\r\n takeUntilDestroyed(),\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 takeUntilDestroyed(this._destroyRef),\r\n takeUntil(\r\n race([\r\n $pointerCancel,\r\n fromEvent<PointerEvent>(window, 'pointermove').pipe(\r\n takeUntilDestroyed(this._destroyRef),\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 takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n ),\r\n ]),\r\n ),\r\n takeUntilDestroyed(this._destroyRef),\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","import { ChangeDetectionStrategy, Component, inject, Injector, OnInit, signal } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { map, tap, combineLatest, fromEvent, switchMap, of, Observable, filter, debounceTime } from 'rxjs';\r\nimport { IRenderVirtualListItem } from '../../models/render-item.model';\r\nimport { Id } from '../../types';\r\nimport {\r\n DEFAULT_CLICK_DISTANCE, NAVIGATION_BY_KEYBOARD_TIMER, VISIBILITY_HIDDEN,\r\n} from '../../const';\r\nimport { BaseVirtualListItemComponent } from './base';\r\nimport { MethodsForSelectingTypes } from '../../enums/method-for-selecting-types';\r\nimport { IDisplayObjectConfig } from '../../models';\r\nimport { getListElementByIndex } from './utils';\r\nimport {\r\n ATTR_AREA_SELECTED, EVENT_FOCUS_IN, EVENT_FOCUS_OUT, EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT,\r\n KEY_ARR_RIGHT, KEY_ARR_UP, KEY_SPACE,\r\n} from './const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/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 styleUrl: './ng-virtual-list-item.component.scss',\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgVirtualListItemComponent extends BaseVirtualListItemComponent implements OnInit {\r\n protected readonly maxClickDistance = signal<number>(DEFAULT_CLICK_DISTANCE);\r\n\r\n protected _injector = inject(Injector);\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n ngOnInit(): void {\r\n this._service.$clickDistance.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this.maxClickDistance.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$langTextDir.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._langTextDir = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollBarSize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n this._scrollBarSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $data = toObservable(this.data, { injector: this._injector }),\r\n $focused = toObservable(this.focused, { injector: this._injector });\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.set(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.set(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 $focused.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(v => {\r\n if (v) {\r\n return this.keyKode();\r\n }\r\n return of(false);\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 keyKode() {\r\n return fromEvent<KeyboardEvent>(this.element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_SPACE: {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n if (!!this._data) {\r\n this._service.select(this._data!.id!);\r\n this._service.collapse(this._data!.id!);\r\n }\r\n break;\r\n }\r\n case KEY_ARR_LEFT:\r\n if (!this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.config().isVertical) {\r\n return this.toPrevItem(e);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.config().isVertical) {\r\n return this.toNextItem(e);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }\r\n\r\n private toNextItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusNext();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private toPrevItem(e: Event): Observable<any> {\r\n if (!!e && e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n\r\n const index = this.focusPrev();\r\n if (index > -1) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n debounceTime(this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER),\r\n switchMap(() => {\r\n return this.keyKode();\r\n }),\r\n );\r\n }\r\n\r\n private focusNext(): number {\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 element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.style.visibility !== VISIBILITY_HIDDEN) {\r\n const focused = this._service.focus(element);\r\n if (focused) {\r\n return index;\r\n }\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n private focusPrev(): number {\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 element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return -1;\r\n }\r\n\r\n protected override updateConfig(v: IRenderVirtualListItem<any> | null) {\r\n this.config.set({\r\n ...v?.config || {} as IDisplayObjectConfig, selected: this._isSelected, collapsed: this._isCollapsed, focused: this.focused(),\r\n });\r\n }\r\n\r\n onClickHandler() {\r\n this._service.itemClick(this._data);\r\n }\r\n}\r\n","@let renderer = itemRenderer();\r\n<div itemClick [maxClickDistance]=\"maxClickDistance()\" [part]=\"part()\" [attr.ngvl-index]=\"index()\" tabindex=\"-1\"\r\n class=\"ngvl-item__container\" [ngClass]=\"classes()\" (onClick)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n }\r\n</div>","import { SnappingMethod, SnappingMethods } from \"../enums\";\r\n\r\nconst ADVANCED_PATTERNS: Array<SnappingMethod> = [SnappingMethods.ADVANCED, SnappingMethods.STANDART, 'advanced', 'standart'],\r\n DEFAULT_PATTERN: Array<SnappingMethod> = [SnappingMethods.STANDART, 'standart'];\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}","import { Direction, Directions } from \"../enums\";\r\n\r\nconst HORIZONTAL_ALIASES = [Directions.HORIZONTAL, 'horizontal'],\r\n VERTICAL_ALIASES = [Directions.VERTICAL, 'vertical'];\r\n\r\n/**\r\n * Determines the axis membership of a virtual list\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/utils/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/19.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 }>(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 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/19.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}","import { RANGE_DISPLAY_ITEMS_END_OFFSET } from \"../const\";\r\nimport { IRenderVirtualListItem } from \"../models\";\r\nimport { IRenderVirtualListCollection } from \"../models/render-collection.model\";\r\nimport { ISize } from \"../interfaces\";\r\n\r\nexport const formatScreenReaderMessage = (items: IRenderVirtualListCollection, messagePattern: string | undefined, scrollSize: number,\r\n isVertical: boolean, bounds: ISize) => {\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\nexport const 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","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\ninterface ICalculateScrollMetrics {\r\n gradientPos: [number, number];\r\n size: number;\r\n pos: 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/19.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 const { gradientPos, size, pos, } = this.getMetrics(positionY, viewportHeight, contentHeight, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\r\n thumbPosition = pos;\r\n } else {\r\n const { gradientPos, size, pos, } = this.getMetrics(positionX, viewportWidth, contentWidth, startOffset, endOffset, minSize);\r\n thumbGradientPositions = gradientPos;\r\n thumbSize = size;\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 private getMetrics(inputPosition: number, viewportSize: number, contentSize: number, startOffset: number, endOffset: number,\r\n minSize: number): ICalculateScrollMetrics {\r\n let thumbPosition = 0, thumbSize = 0;\r\n const vh = viewportSize - startOffset - endOffset, ch = contentSize - startOffset - endOffset,\r\n ratio = ch > 0 ? vh / ch : 1, ts = vh * ratio, ats = Math.max(ts, minSize), atsDelta = ats - ts,\r\n rh = (ch !== 0 ? (inputPosition / 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 thumbSize = ats;\r\n thumbPosition = pos;\r\n return {\r\n gradientPos: [aspp, aepp],\r\n size,\r\n pos,\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}","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/enums/scroller-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ScrollerDirection {\r\n HORIZONTAL = 'horizontal',\r\n VERTICAL = 'vertical',\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 + t;\r\n};\r\n","import { Easing } from './types';\r\nimport { easeLinear } from './ease';\r\n\r\ninterface IAnimatorParams {\r\n startValue: number;\r\n endValue: number;\r\n duration?: number;\r\n getPropValue?: () => number;\r\n easingFunction?: Easing;\r\n onUpdate?: (data: IAnimatorUpdateData) => void;\r\n onComplete?: (data: IAnimatorUpdateData) => void;\r\n}\r\n\r\ninterface IAnimatorUpdateData {\r\n timestamp: number;\r\n delta: number;\r\n value: number;\r\n}\r\n\r\nexport const DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\r\n\r\nexport class Animator {\r\n private _animationId: number = 0;\r\n\r\n animate(params: IAnimatorParams) {\r\n const {\r\n startValue, endValue, duration = DEFAULT_ANIMATION_DURATION, getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\r\n\r\n this.stop();\r\n\r\n const startTime = performance.now();\r\n let isCanceled = false, prevPos = startValue, start = startValue, startPosDelta = 0, delta = 0, prevTime = startTime,\r\n diff = endValue - start;\r\n\r\n let 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 = getPropValue?.() || 0;\r\n let startDelta = 0;\r\n if (cPos !== prevPos) {\r\n startDelta = cPos - prevPos;\r\n startPosDelta += startDelta;\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 + diff * easedProgress,\r\n currentValue = val,\r\n t = Date.now();\r\n\r\n isFinished = progress === 1;\r\n\r\n delta = currentValue - startDelta - prevPos;\r\n\r\n const ts = t - prevTime, timestamp = ts < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : ts;\r\n\r\n prevTime = t;\r\n prevPos = currentValue;\r\n\r\n if (onUpdate !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onUpdate(data);\r\n }\r\n\r\n if (isFinished) {\r\n if (onComplete !== undefined) {\r\n const data: IAnimatorUpdateData = {\r\n delta,\r\n value: currentValue,\r\n timestamp,\r\n };\r\n onComplete(data);\r\n }\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 stop() {\r\n cancelAnimationFrame(this._animationId);\r\n }\r\n\r\n dispose() {\r\n this.stop();\r\n }\r\n}\r\n","import { InjectionToken } from \"@angular/core\";\r\nimport { SCROLLER_SCROLL } from \"../../../const\";\r\n\r\nexport const SCROLL_VIEW_INVERSION = new InjectionToken<boolean>('ScrollViewInversion');\r\n\r\nexport const SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO = new InjectionToken<boolean>('ScrollViewNormalizeValueFromZero');\r\n\r\nexport const TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant',\r\n AUTO = 'auto',\r\n SMOOTH = 'smooth',\r\n DURATION = 2000,\r\n FRICTION_FORCE = .035,\r\n MAX_DURATION = 4000,\r\n ANIMATION_DURATION = 50,\r\n MASS = .005,\r\n MAX_DIST = 12500,\r\n MAX_VELOCITY_TIMESTAMP = 100,\r\n SPEED_SCALE = 15,\r\n OVERSCROLL_START_ITERATION = 2;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","export const 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","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/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/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}","import {\r\n Component, computed, DestroyRef, ElementRef, inject, input, Signal, signal, viewChild,\r\n} from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { ScrollerDirection, ScrollerDirections } from '../enums';\r\nimport { ISize } from '../../../interfaces';\r\nimport { SCROLL_VIEW_INVERSION } from '../const';\r\n\r\n/**\r\n * BaseScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'base-scroll-view',\r\n template: '',\r\n})\r\nexport class BaseScrollView {\r\n readonly scrollContent = viewChild<ElementRef<HTMLDivElement>>('scrollContent');\r\n\r\n readonly scrollViewport = viewChild<ElementRef<HTMLDivElement>>('scrollViewport');\r\n\r\n readonly direction = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n readonly startOffset = input<number>(0);\r\n\r\n readonly endOffset = input<number>(0);\r\n\r\n readonly isVertical: Signal<boolean>;\r\n\r\n readonly grabbing = signal<boolean>(false);\r\n\r\n protected _$updateScrollBar = new Subject<void>();\r\n protected $updateScrollBar = this._$updateScrollBar.asObservable();\r\n\r\n get scrollable() {\r\n const { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n totalSize = this._totalSize;\r\n return totalSize > viewportSize;\r\n }\r\n\r\n protected _destroyRef = inject(DestroyRef);\r\n\r\n protected _isMoving = false;\r\n get isMoving() {\r\n return this._isMoving;\r\n }\r\n\r\n protected _x: number = this.startOffset();\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = this.endOffset();\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n }\r\n get y() { return this._y; }\r\n\r\n protected _actualTotalSize: number = 0;\r\n protected _totalSize: number = 0;\r\n set totalSize(v: number) {\r\n if (this._totalSize !== v) {\r\n this._totalSize = v;\r\n const startOffset = this.startOffset();\r\n this._actualTotalSize = v + startOffset;\r\n }\r\n }\r\n\r\n get actualScrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportHeight ? isVertical ? endOffset : 0 : viewportHeight - totalSize;\r\n }\r\n return totalSize < viewportHeight ? isVertical ? startOffset : 0 : totalSize - viewportHeight;\r\n }\r\n\r\n get actualScrollWidth() {\r\n const { width: viewportWidth } = this.viewportBounds(),\r\n totalSize = this._actualTotalSize,\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return totalSize > viewportWidth ? isVertical ? 0 : endOffset : viewportWidth - totalSize;\r\n }\r\n return totalSize < viewportWidth ? isVertical ? 0 : startOffset : totalSize - viewportWidth;\r\n }\r\n\r\n protected _actualX: number = 0;\r\n get actualScrollLeft() {\r\n return this._actualX;\r\n }\r\n\r\n protected _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(),\r\n { width: contentWidth } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentWidth > viewportWidth ? isVertical ? 0 : endOffset : (viewportWidth - contentWidth);\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : (contentWidth - viewportWidth);\r\n }\r\n\r\n get scrollHeight() {\r\n const { height: viewportHeight } = this.viewportBounds(),\r\n { height: contentHeight } = this.contentBounds(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset();\r\n if (this._inversion) {\r\n return contentHeight > viewportHeight ? isVertical ? endOffset : 0 : (viewportHeight - contentHeight);\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : (contentHeight - viewportHeight);\r\n }\r\n\r\n readonly viewportBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n readonly contentBounds = signal<ISize>({ width: 0, height: 0 });\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n constructor() {\r\n this.isVertical = computed(() => {\r\n return this.direction() === ScrollerDirection.VERTICAL;\r\n });\r\n }\r\n\r\n tick() {\r\n this.onResizeContent();\r\n this.onResizeViewport();\r\n }\r\n\r\n protected onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n w = viewport.offsetWidth,\r\n h = viewport.offsetHeight,\r\n width = isVertical ? w : w - startOffset - endOffset,\r\n height = isVertical ? h - startOffset - endOffset : h,\r\n bounds = this.viewportBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.viewportBounds.set({ width, height });\r\n }\r\n }\r\n\r\n protected onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n w = content.offsetWidth,\r\n h = content.offsetHeight,\r\n width = isVertical ? w : w - startOffset,\r\n height = isVertical ? h - startOffset : h,\r\n bounds = this.contentBounds();\r\n if (bounds.width === width && bounds.height === height) {\r\n return;\r\n }\r\n this.contentBounds.set({ width, height });\r\n }\r\n }\r\n}","import {\r\n Component, inject, input, ViewChild,\r\n} from '@angular/core';\r\nimport { CdkScrollable } from '@angular/cdk/scrolling';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ScrollerDirection } from './enums';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_SETTINGS, INTERACTIVE, MOUSE_DOWN, MOUSE_MOVE, MOUSE_UP,\r\n TOUCH_END, TOUCH_MOVE, TOUCH_START, WHEEL,\r\n} from '../../const';\r\nimport { IScrollToParams } from './interfaces';\r\nimport {\r\n ANIMATION_DURATION, AUTO, DURATION, FRICTION_FORCE, INSTANT, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_VELOCITY_TIMESTAMP,\r\n OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IScrollingSettings } from '../../interfaces';\r\n\r\n/**\r\n * NgScrollView\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/ng-scroll-view.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-scroll-view',\r\n template: '',\r\n})\r\nexport class NgScrollView extends BaseScrollView {\r\n @ViewChild('scrollViewport', { read: CdkScrollable })\r\n readonly cdkScrollable: CdkScrollable | undefined;\r\n\r\n readonly scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR);\r\n\r\n readonly overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED);\r\n\r\n readonly scrollingSettings = input<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS);\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _$scroll = new Subject<boolean>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n protected _$scrollEnd = new Subject<boolean>();\r\n readonly $scrollEnd = this._$scrollEnd.asObservable();\r\n\r\n private _startPosition = 0;\r\n\r\n protected _animator = new Animator();\r\n\r\n protected _interactive = true;\r\n\r\n private _overscrollIteration: number = 0;\r\n\r\n set delta(v: number) {\r\n this._startPosition += v;\r\n }\r\n\r\n constructor() {\r\n super();\r\n const $viewport = toObservable(this.scrollViewport).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v.nativeElement),\r\n ), $content = toObservable(this.scrollContent).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n map(v => v.nativeElement),\r\n ), $wheelEmitter = this._inversion ? $viewport : $content;\r\n\r\n $wheelEmitter.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<WheelEvent>(content, WHEEL, { passive: false }).pipe(\r\n filter(() => this._interactive),\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n const isVertical = this.isVertical();\r\n this.emitScrollableEvent();\r\n this.checkOverscroll(e);\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.scroll({ [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(this._destroyRef),\r\n ),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<MouseEvent>(content, MOUSE_DOWN, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\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 inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n startClientPos = isVertical ? e.clientY : e.clientX,\r\n offsets = new Array<[number, number]>(),\r\n velocities = new Array<[number, number]>(),\r\n 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 this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, 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 this.cancelOverscroll();\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.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\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(this._destroyRef),\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n }),\r\n );\r\n\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => {\r\n return fromEvent<TouchEvent>(content, TOUCH_START, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(() => this._interactive),\r\n switchMap(e => {\r\n this.cancelOverscroll();\r\n this.onDragStart();\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 inversion = this._inversion, isVertical = this.isVertical();\r\n this._isMoving = true;\r\n this.grabbing.set(true);\r\n this._startPosition = (isVertical ? this.y : this.x);\r\n let prevClientPosition = 0,\r\n 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 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 this.checkOverscroll(e);\r\n }),\r\n switchMap(e => {\r\n const { position, currentPos, endTime, scrollDelta } =\r\n this.calculatePosition(isVertical, e, inversion, startClientPos, startTime, prevClientPosition, offsets, velocities);\r\n prevClientPosition = currentPos;\r\n this.move(isVertical, position, true, true, 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 this.cancelOverscroll();\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.set(false);\r\n if (this.scrollBehavior() === BEHAVIOR_INSTANT) {\r\n return;\r\n }\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private calculatePosition(isVertical: boolean, e: MouseEvent | TouchEvent | any, inversion: boolean, startClientPos: number, startTime: number,\r\n prevClientPosition: number, offsets: Array<[number, number]>, velocities: Array<[number, number]>\r\n ) {\r\n const currentPos = isVertical ? e.touches?.[e.touches?.length - 1]?.clientY || e.clientY : e.touches?.[e.touches?.length - 1]?.clientX || e.clientX,\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth, delta = (inversion ? -1 : 1) * (startClientPos - currentPos),\r\n dp = this._startPosition + 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 return { position, currentPos, endTime, scrollDelta };\r\n }\r\n\r\n private cancelOverscroll() {\r\n if (!this.overscrollEnabled()) {\r\n return;\r\n }\r\n this._overscrollIteration = 0;\r\n }\r\n\r\n private checkOverscrollByAxis(e: Event, pos: number, limit: number) {\r\n const p = Math.abs(pos);\r\n if (p > 0 && p < limit) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n this._overscrollIteration = 0;\r\n } else {\r\n if (this._overscrollIteration < OVERSCROLL_START_ITERATION) {\r\n this._overscrollIteration++;\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n }\r\n }\r\n }\r\n\r\n private checkOverscroll(e: Event) {\r\n if (!this.overscrollEnabled()) {\r\n if (e.cancelable) {\r\n e.stopImmediatePropagation();\r\n e.preventDefault();\r\n }\r\n return;\r\n }\r\n if (this.isVertical()) {\r\n this.checkOverscrollByAxis(e, this._y, this.scrollHeight);\r\n } else {\r\n this.checkOverscrollByAxis(e, this._x, this.scrollWidth);\r\n }\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 < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_MIN_TIMESTAMP : timestamp]);\r\n\r\n const len = offsets.length, startIndex = len > indexOffset ? len - indexOffset : 0, lastVSign = calculateDirection(offsets),\r\n speedScale = this.scrollingSettings()?.speedScale ?? SPEED_SCALE;\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]) * speedScale : 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 < ANIMATOR_MIN_TIMESTAMP ? ANIMATOR_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 const mass = this.scrollingSettings()?.mass ?? MASS;\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.1;\r\n aSum = (aSum * mass) + a0;\r\n prevV0 = v01;\r\n }\r\n prevV0 = v01;\r\n iteration++;\r\n }\r\n\r\n const a0 = aSum * (this.scrollingSettings()?.frictionalForce ?? FRICTION_FORCE);\r\n return { a0 };\r\n }\r\n\r\n stopScrolling() {\r\n this._animator.stop();\r\n }\r\n\r\n protected move(isVertical: boolean, position: number, blending: boolean = false, userAction: boolean = false, fireUpdate: boolean = true) {\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, blending, userAction, fireUpdate });\r\n }\r\n\r\n protected moveWithAcceleration(isVertical: boolean, position: number, v0: number, v: number, a0: number, timestamp: number) {\r\n if (a0 !== 0 && timestamp < MAX_VELOCITY_TIMESTAMP) {\r\n const dvSign = Math.sign(v),\r\n mass = this.scrollingSettings()?.mass ?? MASS,\r\n duration = DURATION, maxDuration = this.scrollingSettings()?.maxDuration ?? MAX_DURATION,\r\n maxDist = this.scrollingSettings()?.maxDistance ?? MAX_DIST,\r\n maxDistance = dvSign * maxDist, s = (dvSign * Math.abs((a0 * Math.pow(duration, 2)) * .5) / 1000) / mass,\r\n distance = Math.abs(s) < maxDist ? s : maxDistance, positionWithVelocity = position + (this._inversion ? -1 : 1) * 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 protected normalizeValue(value: number) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL,\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset(),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n result = value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value;\r\n return result;\r\n }\r\n\r\n protected animate(startValue: number, endValue: number, duration = ANIMATION_DURATION, easingFunction: Easing = easeOutQuad,\r\n userAction: boolean = false) {\r\n const isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n this._animator.animate({\r\n startValue, endValue, duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n }, onComplete: ({ value }) => {\r\n this.move(isVertical, value, false, userAction);\r\n this._$scrollEnd.next(userAction);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this.stopScrolling();\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined): boolean {\r\n const x = value !== undefined ? value : this._x, y = value !== undefined ? value : this._y, isVertical = this.isVertical();\r\n if (isVertical) {\r\n const yy = this.normalizeValue(y);\r\n if (y !== yy) {\r\n this.y = yy;\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n this.x = xx;\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n scroll(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 ease = params.ease || easeOutQuad,\r\n fireUpdate = params.fireUpdate ?? true,\r\n behavior = params.behavior ?? INSTANT,\r\n blending = params.blending ?? true,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this.direction() === ScrollerDirection.VERTICAL;\r\n\r\n const x = this.normalizeValue(posX),\r\n y = this.normalizeValue(posY),\r\n prevX = this._x,\r\n prevY = this._y;\r\n if (behavior === AUTO || behavior === SMOOTH) {\r\n if (isVertical) {\r\n if (prevY !== y) {\r\n this.animate(prevY, y, duration, ease, userAction);\r\n }\r\n } else {\r\n if (prevX !== x) {\r\n this.animate(prevX, x, duration, ease, userAction);\r\n }\r\n }\r\n } else {\r\n if (isVertical) {\r\n if (this._y !== y) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshY(y);\r\n this.y = y;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n } else {\r\n if (this._x !== x) {\r\n if (!blending) {\r\n this.stopScrolling();\r\n }\r\n this.refreshX(x);\r\n this.x = x;\r\n this.emitScrollableEvent();\r\n if (fireUpdate) {\r\n this.fireScrollEvent(userAction);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n protected emitScrollableEvent() {\r\n if (!!this.cdkScrollable) {\r\n this.cdkScrollable.getElementRef()?.nativeElement?.dispatchEvent(SCROLL_EVENT);\r\n }\r\n }\r\n\r\n refreshX(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(${(this._inversion ? 1 : -1) * value}px, 0, 0)`;\r\n }\r\n\r\n refreshY(value: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = `translate3d(0, ${(this._inversion ? 1 : -1) * value}px, 0)`;\r\n }\r\n\r\n protected fireScrollEvent(userAction: boolean) {\r\n this._$scroll.next(userAction);\r\n }\r\n\r\n protected onDragStart() { }\r\n\r\n reset(offset: number = 0) {\r\n this.stopScrolling();\r\n this.move(this.isVertical(), offset);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this._animator) {\r\n this._animator.dispose();\r\n }\r\n }\r\n}","export const DEFAULT_THICKNESS = 6,\r\n DEFAULT_SIZE = 6,\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","import { Component, computed, effect, ElementRef, inject, input, output, Signal, signal, TemplateRef, viewChild } from '@angular/core';\r\nimport { combineLatest, filter, fromEvent, of, startWith, Subject, switchMap, tap } from 'rxjs';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport { NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent, IScrollBarTemplateContext } from './interfaces';\r\nimport { DEFAULT_SCROLLBAR_INTERACTIVE } from '../../const';\r\nimport {\r\n DEFAULT_SIZE, DEFAULT_THICKNESS, HEIGHT, NONE, OPACITY, OPACITY_0, OPACITY_1, PX, TRANSITION, TRANSITION_FADE_IN, WIDTH,\r\n} from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { NgScrollBarService } from './ng-scroll-bar.service';\r\nimport { NgScrollBarPublicService } from './ng-scroll-bar-public.service';\r\nimport { ScrollbarStates } from './enums';\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/19.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 providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: true },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: false },\r\n NgScrollBarService,\r\n NgScrollBarPublicService,\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroll-bar.component.html',\r\n styleUrl: './ng-scroll-bar.component.scss'\r\n})\r\nexport class NgScrollBarComponent extends NgScrollView {\r\n protected _defaultRenderer = viewChild<TemplateRef<any>>('defaultRenderer');\r\n\r\n protected _service = inject(NgScrollBarService);\r\n\r\n private _apiService = inject(NgScrollBarPublicService);\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly onDrag = output<IScrollBarDragEvent>();\r\n\r\n readonly onDragEnd = output<IScrollBarDragEvent>();\r\n\r\n readonly thumbGradientPositions = input<GradientColorPositions>([0, 0]);\r\n\r\n readonly size = input<number>(DEFAULT_SIZE);\r\n\r\n readonly thickness = input<number>(DEFAULT_THICKNESS);\r\n\r\n readonly scrollbarMinSize = input<number>(0);\r\n\r\n readonly prepared = input<boolean>(false);\r\n\r\n readonly interactive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly show = input<boolean>(false);\r\n\r\n readonly params = input<{ [propName: string]: any } | null>({});\r\n\r\n readonly renderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly thumbRenderer = signal<TemplateRef<any> | null>(this._defaultRenderer() ?? null);\r\n\r\n protected readonly hoverState = signal<boolean>(false);\r\n\r\n protected readonly pressedState = signal<boolean>(false);\r\n\r\n protected readonly templateContext!: Signal<IScrollBarTemplateContext>;\r\n\r\n protected readonly styles: Signal<{ [sName: string]: any }>;\r\n\r\n protected readonly thumbWidth: Signal<number>;\r\n\r\n protected readonly thumbHeight: Signal<number>;\r\n\r\n private _$scrollingCancel = new Subject<void>();\r\n protected readonly $scrollingCancel = this._$scrollingCancel.asObservable();\r\n\r\n private _elementRef = inject(ElementRef);\r\n\r\n constructor() {\r\n super();\r\n\r\n this.templateContext = computed(() => {\r\n const context: IScrollBarTemplateContext = {\r\n api: this._apiService,\r\n width: this.thumbWidth(),\r\n height: this.thumbHeight(),\r\n fillPositions: this.thumbGradientPositions(),\r\n params: this.params() ?? {},\r\n };\r\n return context;\r\n });\r\n\r\n const $renderer = toObservable(this.renderer).pipe(\r\n startWith(null),\r\n ),\r\n $defaultRenderer = toObservable(this._defaultRenderer);\r\n\r\n combineLatest([$renderer, $defaultRenderer]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([renderer, defaultRenderer]) => {\r\n return of((renderer ?? defaultRenderer) ?? null);\r\n }),\r\n tap(v => {\r\n this.thumbRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $prepared = toObservable(this.prepared);\r\n $prepared.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.scrollLimits();\r\n this.refreshX(this._x);\r\n this.refreshY(this._y);\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n this.thumbWidth = computed(() => {\r\n return this.isVertical() ? this.thickness() : this.size();\r\n });\r\n\r\n this.thumbHeight = computed(() => {\r\n return this.isVertical() ? this.size() : this.thickness();\r\n });\r\n\r\n const $pointerDown = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerdown').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerUp = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerup').pipe(\r\n takeUntilDestroyed(),\r\n ), $docPointerUp = fromEvent<PointerEvent>(document, 'pointerup').pipe(\r\n takeUntilDestroyed()\r\n ), $pointerEnter = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerenter').pipe(\r\n takeUntilDestroyed(),\r\n ), $pointerLeave = fromEvent<PointerEvent>(this._elementRef.nativeElement, 'pointerleave').pipe(\r\n takeUntilDestroyed(),\r\n );\r\n\r\n $pointerDown.pipe(\r\n takeUntilDestroyed(),\r\n tap(e => {\r\n this.pressedState.set(this.thumbHit(e.clientX, e.clientY));\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$docPointerUp, $pointerUp]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.pressedState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerEnter.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(true);\r\n }),\r\n ).subscribe();\r\n\r\n $pointerLeave.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.hoverState.set(false);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const pressed = this.pressedState(), hover = this.hoverState();\r\n if (pressed) {\r\n this._service.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._service.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._service.state = ScrollbarStates.NORMAL;\r\n return;\r\n });\r\n\r\n effect(() => {\r\n this.totalSize = this.size();\r\n });\r\n\r\n effect(() => {\r\n this._interactive = this.interactive();\r\n });\r\n\r\n this.styles = computed(() => {\r\n const show = this.show(), sizePropName = this.isVertical() ? WIDTH : HEIGHT;\r\n return {\r\n [sizePropName]: `${show ? this.thickness() : 0}${PX}`,\r\n [OPACITY]: show ? OPACITY_1 : OPACITY_0, [TRANSITION]: show ? TRANSITION_FADE_IN : NONE,\r\n };\r\n });\r\n\r\n this.$scroll.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const event = this.createDragEvent(v);\r\n if (!!event) {\r\n this.onDrag.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollEnd = this.$scrollEnd;\r\n $scrollEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n const event = this.createDragEvent(false);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private createDragEvent(userAction: boolean) {\r\n const isVertical = this.isVertical(), scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n scrollContent = this.scrollContent()?.nativeElement as HTMLElement,\r\n scrollViewport = this.scrollViewport()?.nativeElement as HTMLDivElement;\r\n if (!!scrollViewport && !!scrollContent) {\r\n const contentSize = isVertical ? scrollContent.offsetHeight : scrollContent.offsetWidth,\r\n viewportSize = isVertical ? scrollViewport.offsetHeight : scrollViewport.offsetWidth;\r\n const event: IScrollBarDragEvent = {\r\n position: scrollSize !== 0 ? ((isVertical ? this._y : this._x) / scrollSize) : 0,\r\n min: scrollSize !== 0 ? (this.startOffset() / scrollSize) : 0,\r\n max: scrollSize !== 0 ? ((viewportSize - this.endOffset() - contentSize) / scrollSize) : 0,\r\n animation: !this._isMoving,\r\n userAction,\r\n };\r\n return event;\r\n }\r\n return null;\r\n }\r\n\r\n private thumbHit(x: number, y: number): boolean {\r\n const thumb = this.scrollContent()?.nativeElement;\r\n if (!!thumb) {\r\n const { x: tX, y: tY, width: tWidth, height: tHeight } = thumb.getBoundingClientRect()\r\n if ((x >= tX && x <= tX + tWidth) && (y >= tY && y <= tY + tHeight)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n click(event: PointerEvent | MouseEvent) {\r\n this._service.click(event);\r\n }\r\n}\r\n","@let grab = grabbing();\r\n<div #scrollViewport class=\"track\" part=\"scrollbar-track\" [ngStyle]=\"styles()\" [ngClass]=\"{grabbing: grab}\">\r\n <div #scrollContent class=\"thumb\" part=\"scrollbar-thumb\" [class.horizontal]=\"!isVertical()\"\r\n (pointerdown)=\"click($event)\">\r\n <ng-container [ngTemplateOutlet]=\"thumbRenderer()\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n </div>\r\n</div>\r\n\r\n<ng-template #defaultRenderer let-api=\"api\" let-width=\"width\" let-height=\"height\" let-fillPositions=\"fillPositions\"\r\n let-params=\"params\">\r\n <div class=\"shape\" part=\"scrollbar-thumb__shape\" [style.width.px]=\"width\" [style.height.px]=\"height\"></div>\r\n</ng-template>","export const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n MEASURE_VELOCITY_TIMER = 20;\r\n","import { Directive, ElementRef, inject, input } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { ScrollerDirection, ScrollerDirections } from '../../components/ng-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/19.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 standalone: false,\r\n})\r\nexport class LocaleSensitiveDirective {\r\n langTextDir = input<TextDirection>(TextDirections.LTR);\r\n\r\n listDir = input<ScrollerDirections>(ScrollerDirection.VERTICAL);\r\n\r\n private _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n constructor() {\r\n const $langTextDir = toObservable(this.langTextDir),\r\n $listDir = toObservable(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 { Component, computed, effect, inject, input, OnDestroy, output, Signal, signal, TemplateRef, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { debounceTime, filter, from, Subject, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id } from '../../types';\r\nimport { NgScrollBarComponent } from \"../ng-scroll-bar/ng-scroll-bar.component\";\r\nimport { GradientColorPositions } from '../../types/gradient-color-positions';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME,\r\n SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirection, TextDirections } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS, MEASURE_VELOCITY_TIMER } from './const';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../ng-scroll-view/const';\r\nimport { ISize } from '../../interfaces';\r\n\r\nconst TOP = 'top',\r\n LEFT = 'left',\r\n INSTANT = 'instant';\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_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/19.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 providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n templateUrl: './ng-scroller.component.html',\r\n styleUrl: './ng-scroller.component.scss'\r\n})\r\nexport class NgScrollerComponent extends NgScrollView implements OnDestroy {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n readonly onScrollbarVisible = output<boolean>();\r\n\r\n readonly scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n readonly scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly focusedElement = input<Id | null>(null);\r\n\r\n readonly content = input<HTMLElement>();\r\n\r\n readonly loading = input<boolean>(false);\r\n\r\n readonly classes = input<{ [cName: string]: boolean }>({});\r\n\r\n readonly scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE);\r\n\r\n readonly scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS);\r\n\r\n readonly scrollbarThumbRenderer = input<TemplateRef<any> | null>(null);\r\n\r\n readonly scrollbarThumbParams = input<{ [propName: string]: any } | null>(null);\r\n\r\n public readonly actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly containerClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n public readonly thumbGradientPositions = signal<GradientColorPositions>([0, 0]);\r\n\r\n public readonly thumbSize = signal<number>(0);\r\n\r\n public readonly scrollbarShow = signal<boolean>(false);\r\n\r\n public readonly preparedSignal = signal<boolean>(false);\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n public readonly langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n get host() {\r\n return this.scrollViewport()?.nativeElement;\r\n }\r\n\r\n private _$scrollbarScroll = new Subject<boolean>();\r\n readonly $scrollbarScroll = this._$scrollbarScroll.asObservable();\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.set(v);\r\n }\r\n }\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.measureVelocity();\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n readonly viewInitialized = signal<boolean>(false);\r\n\r\n private _isScrollbarUserAction: boolean = false;\r\n get isScrollbarUserAction() {\r\n return this._isScrollbarUserAction;\r\n }\r\n\r\n private _measureVelocityTimestamp: number = Date.now();\r\n\r\n private _measureVelocityLastPosition: number = this.isVertical() ? this._y : this._x;\r\n\r\n private _measureVelocityAnimationFrameId: number = -1;\r\n\r\n private _measureVelocityAnimationTimer: number = -1;\r\n\r\n private _velocities: Array<number> = [];\r\n\r\n protected _velocity: number = 0;\r\n get velocity() { return this._velocity; }\r\n\r\n protected _averageVelocity: number = 0;\r\n get averageVelocity() { return this._averageVelocity; }\r\n\r\n private _measureVelocityHandler = () => {\r\n this.measureVelocityExecutor();\r\n }\r\n\r\n protected _$resizeViewport = new Subject<ISize>();\r\n readonly $resizeViewport = this._$resizeViewport.asObservable();\r\n\r\n protected _$resizeContent = new Subject<ISize>();\r\n readonly $resizeContent = this._$resizeContent.asObservable();\r\n\r\n constructor() {\r\n super();\r\n\r\n this._service.$langTextDir.pipe(\r\n tap(v => {\r\n takeUntilDestroyed(this._destroyRef),\r\n this.langTextDir.set(v);\r\n })\r\n ).subscribe();\r\n\r\n const $prepare = toObservable(this.preparedSignal);\r\n $prepare.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this.updateScrollBarHandler(true, false, true);\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $scrollbarMinSize = toObservable(this.scrollbarMinSize),\r\n $isVertical = toObservable(this.isVertical),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $scrollbarMinSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n tap(() => {\r\n this.updateScrollBarHandler(!this._isScrollbarUserAction);\r\n }),\r\n ).subscribe();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true, grabbing: this.grabbing() };\r\n });\r\n\r\n this.containerClasses = computed(() => {\r\n const { width: contentWidth, height: contentHeight } = this.contentBounds(),\r\n { width, height } = this.viewportBounds(),\r\n isVertical = this.isVertical(),\r\n viewportSize = isVertical ? height : width,\r\n contentSize = isVertical ? contentHeight : contentWidth;\r\n return { [this.direction()]: true, grabbing: this.grabbing(), enabled: this.scrollbarEnabled(), scrollable: contentSize > viewportSize };\r\n });\r\n\r\n effect(() => {\r\n const viewInitialized = this.viewInitialized();\r\n if (viewInitialized) {\r\n this.updateScrollBarHandler();\r\n }\r\n });\r\n }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n const bounds: ISize = { width: viewport.offsetWidth, height: viewport.offsetHeight }, b = this.viewportBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.viewportBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeViewport.next(bounds);\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n const bounds: ISize = { width: content.offsetWidth, height: content.offsetHeight }, b = this.contentBounds();\r\n if (bounds.width === b.width && bounds.height === b.height) {\r\n return;\r\n }\r\n this.contentBounds.set(bounds);\r\n this.updateScrollBar();\r\n this._$resizeContent.next(bounds);\r\n }\r\n }\r\n\r\n private measureVelocity() {\r\n this._measureVelocityAnimationTimer = MEASURE_VELOCITY_TIMER;\r\n\r\n this.measureVelocityExecutor();\r\n };\r\n\r\n private measureVelocityExecutor() {\r\n const timestamp = Date.now();\r\n if (timestamp === this._measureVelocityTimestamp) {\r\n return;\r\n }\r\n const position = Math.abs(this.isVertical() ? this._y : this._x);\r\n const timeDelta = timestamp - this._measureVelocityTimestamp,\r\n positionDelta = Math.abs(position - this._measureVelocityLastPosition),\r\n velocity = timeDelta > 0 ? positionDelta / timeDelta : 0;\r\n let avgVelocity = this._velocities.length > 0 ? this._velocities.reduce((p, c) => p + c) : 0;\r\n if (this._velocities.length >= MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS) {\r\n this._velocities.shift();\r\n }\r\n avgVelocity += velocity;\r\n this._velocity = velocity;\r\n this._velocities.push(velocity);\r\n this._averageVelocity = avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS;\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n\r\n this.runMeasureVelocity();\r\n }\r\n\r\n stopMeasureVelocity() {\r\n if (this._measureVelocityAnimationFrameId > -1) {\r\n cancelAnimationFrame(this._measureVelocityAnimationFrameId);\r\n this._measureVelocityAnimationFrameId = -1;\r\n }\r\n }\r\n\r\n private runMeasureVelocity() {\r\n this.stopMeasureVelocity();\r\n if (this._measureVelocityAnimationTimer >= 0) {\r\n this._measureVelocityAnimationTimer--;\r\n this._measureVelocityAnimationFrameId = requestAnimationFrame(this._measureVelocityHandler);\r\n }\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false, blending: boolean = true, fireUpdate: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n viewportBounds = this.viewportBounds(),\r\n contentBounds = this.contentBounds(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\r\n {\r\n thumbSize,\r\n thumbPosition,\r\n thumbGradientPositions,\r\n } = this._scrollBox.calculateScroll({\r\n direction,\r\n viewportWidth: viewportBounds.width,\r\n viewportHeight: viewportBounds.height,\r\n contentWidth: contentBounds.width,\r\n contentHeight: contentBounds.height,\r\n startOffset,\r\n endOffset,\r\n positionX: this._x,\r\n positionY: this._y,\r\n minSize: this.scrollbarMinSize(),\r\n });\r\n\r\n this.thumbGradientPositions.set(thumbGradientPositions);\r\n this.thumbSize.set(thumbSize);\r\n const actualThumbPosition = thumbPosition < startOffset ? startOffset : thumbPosition;\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: actualThumbPosition, fireUpdate, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable && this.scrollbarEnabled());\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.viewInitialized.set(true);\r\n this.runMeasureVelocity();\r\n }\r\n\r\n override tick() {\r\n super.tick();\r\n\r\n this.scrollBar?.tick();\r\n }\r\n\r\n private updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n\r\n refreshScrollbar() {\r\n this.updateScrollBarHandler(true, false, false);\r\n }\r\n\r\n protected override onDragStart() {\r\n super.onDragStart();\r\n\r\n this.stopScrollbar();\r\n\r\n this._isScrollbarUserAction = false;\r\n\r\n this.updateScrollBar();\r\n }\r\n\r\n override reset() {\r\n super.reset(this.startOffset());\r\n this.totalSize = 0;\r\n this.stopScrollbar();\r\n this.refresh(true, true);\r\n this.prepared = false;\r\n }\r\n\r\n refresh(fireUpdate: boolean = false, updateScrollbar: boolean = true) {\r\n if (updateScrollbar) {\r\n this.stopScrolling();\r\n }\r\n\r\n this.scrollLimits();\r\n\r\n if (this.isVertical()) {\r\n this.refreshY(this._y);\r\n } else {\r\n this.refreshX(this._x);\r\n }\r\n\r\n if (updateScrollbar) {\r\n this.updateScrollBarHandler(false);\r\n this.emitScrollableEvent();\r\n }\r\n\r\n if (fireUpdate) {\r\n this.fireScrollEvent(false);\r\n }\r\n }\r\n\r\n scrollTo(params: IScrollToParams) {\r\n const userAction = params.userAction ?? true;\r\n if (userAction) {\r\n this._isScrollbarUserAction = false;\r\n this.scrollBar?.stopScrolling();\r\n }\r\n this.scroll({ ...params, userAction: userAction });\r\n }\r\n\r\n stopScrollbar() {\r\n if (!!this.scrollBar) {\r\n this.scrollBar.stopScrolling();\r\n }\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n this._$scrollEnd.next(false);\r\n }\r\n\r\n onScrollBarDragHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = userAction;\r\n if (!userAction) {\r\n return;\r\n }\r\n this._$scrollbarScroll.next(userAction);\r\n this.stopScrolling();\r\n const isVertical = this.isVertical(),\r\n {\r\n position: absolutePosition,\r\n } = this._scrollBox.getScrollPositionByScrollBar({\r\n scrollSize: isVertical ? this.scrollHeight : this.scrollWidth,\r\n position,\r\n });\r\n\r\n this.scrollTo({\r\n [isVertical ? TOP : LEFT]: absolutePosition, behavior: INSTANT,\r\n blending: false, userAction: false, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n }\r\n\r\n onScrollBarDragEndHandler(event: IScrollBarDragEvent) {\r\n const { position, min, max, userAction } = event;\r\n this._isScrollbarUserAction = false;\r\n this._velocities = [0];\r\n this._velocity = 0;\r\n if (!userAction) {\r\n return;\r\n }\r\n this.refresh(true, true);\r\n this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n this._$scrollbarScroll.next(false);\r\n this.fireScrollEvent(false);\r\n }\r\n\r\n private fireUpdateIfEdgesDetected(position: number, min: number = 0, max: number = 1, animation: boolean = false, userAction: boolean = false) {\r\n if (userAction && animation) {\r\n if (position <= min) {\r\n this._service.scrollToStart();\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n }\r\n }\r\n }\r\n\r\n override ngOnDestroy(): void {\r\n super.ngOnDestroy();\r\n\r\n this.stopMeasureVelocity();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport cdkScrollable part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"direction()\" [attr.aria-activedescendant]=\"focusedElement()\"\r\n tabindex=\"0\" part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n @if (scrollbarEnabled()) {\r\n @let prepared = preparedSignal();\r\n <ng-scroll-bar #scrollBar [direction]=\"direction()\" [size]=\"thumbSize()\" [renderer]=\"scrollbarThumbRenderer()\"\r\n [thickness]=\"scrollbarThickness()\" [params]=\"scrollbarThumbParams()\" [loading]=\"loading()\"\r\n [thumbGradientPositions]=\"thumbGradientPositions()\" [prepared]=\"prepared\" [interactive]=\"scrollbarInteractive()\"\r\n [show]=\"scrollbarShow() && scrollbarEnabled() && prepared\" [startOffset]=\"startOffset()\"\r\n [endOffset]=\"endOffset()\" [overscrollEnabled]=\"overscrollEnabled()\" [scrollBehavior]=\"scrollBehavior()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" (onDrag)=\"onScrollBarDragHandler($event)\"\r\n (onDragEnd)=\"onScrollBarDragEndHandler($event)\"></ng-scroll-bar>\r\n }\r\n</div>","import { PrerenderCache } from \"../types/cache\";\r\n\r\nexport enum PrerenderTrackBoxEvents {\r\n RESIZE = 'resize',\r\n};\r\n\r\nexport type PrerenderTrackBoxResizeHandler = (cache: PrerenderCache) => void;\r\n\r\nexport type PrerenderTrackBoxHandlers = PrerenderTrackBoxResizeHandler;\r\n","import { ComponentRef, ViewContainerRef } from \"@angular/core\";\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem } from \"../../../models\";\r\nimport { Id } from \"../../../types\";\r\nimport { ISize } from '../../../interfaces';\r\nimport { CMap } from \"../../../utils/cmap\";\r\nimport { PrerenderCache } from \"../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../ng-list-item/base\";\r\nimport { IPrerenderTrackBoxRefreshParams } from \"../interfaces\";\r\nimport { DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, TRACK_BY_PROPERTY_NAME } from \"../../../const\";\r\nimport { Component$1 } from \"../../../models/component.model\";\r\nimport { EventEmitter } from \"../../../utils/event-emitter/event-emitter\";\r\nimport { PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers } from \"../events\";\r\n\r\nconst createItemData = (data: IVirtualListItem, isVertical: boolean, bounds: ISize, boundsSize: number,\r\n dynamic: boolean, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n return {\r\n index,\r\n id,\r\n measures: {\r\n position: 0,\r\n scrollSize: 0,\r\n size: itemSize,\r\n boundsSize,\r\n absoluteStartPosition: 0,\r\n absoluteStartPositionPercent: 0,\r\n absoluteEndPosition: 0,\r\n absoluteEndPositionPercent: 0,\r\n delta: 0,\r\n x: 0,\r\n y: 0,\r\n width: (isVertical ? bounds.width : itemSize) as any,\r\n height: (isVertical ? itemSize : bounds.height) as any,\r\n },\r\n data,\r\n previouseData: data,\r\n nextData: data,\r\n config: {\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,\r\n dynamic,\r\n isSnappingMethodAdvanced: false,\r\n tabIndex: 0,\r\n zIndex: \"0\",\r\n },\r\n }\r\n}\r\n\r\n/**\r\n * PrerenderTrackBox\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/prerender-container/core/prerender-track-box.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class PrerenderTrackBox extends EventEmitter<PrerenderTrackBoxEvents, PrerenderTrackBoxHandlers> {\r\n private _map: CMap<Id, ISize> | null = new CMap<Id, ISize>();\r\n\r\n private _items: IVirtualListCollection | null = new Array<IVirtualListItem>();\r\n\r\n private _container: ViewContainerRef | null = null;\r\n\r\n private _componentClass: Component$1<BaseVirtualListItemComponent> | null = null;\r\n\r\n private _components: Array<ComponentRef<BaseVirtualListItemComponent>> | null = new Array<ComponentRef<BaseVirtualListItemComponent>>();\r\n\r\n private _componentsResizeObserver: ResizeObserver | null = new ResizeObserver(() => {\r\n const components = this._components;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const { width, height } = comp.instance.getBounds();\r\n this._map?.set(comp.instance.itemId!, { width, height });\r\n }\r\n }\r\n this.dispatch(PrerenderTrackBoxEvents.RESIZE, (this._map?.toObject() || {}));\r\n });\r\n\r\n private _active: boolean = true;\r\n get active() { return this._active; }\r\n\r\n private refresh(componentClass: Component$1<BaseVirtualListItemComponent>, bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n const isVertical = params.isVertical ?? true,\r\n dynamic = params.dynamic ?? DEFAULT_DYNAMIC_SIZE,\r\n itemsSize = params.itemSize ?? DEFAULT_ITEM_SIZE,\r\n trackBy = params.trackBy ?? TRACK_BY_PROPERTY_NAME,\r\n itemRenderer = params.itemRenderer,\r\n boundsSize = isVertical ? bounds.height : bounds.width,\r\n items = this._items, components = this._components,\r\n resizeObserver = this._componentsResizeObserver;\r\n\r\n if (!items || !components || !this._container) {\r\n return;\r\n }\r\n let totalSize = 0, j = 0;\r\n for (let i = items.length - 1, l = 0; i >= l; i--) {\r\n if (totalSize > boundsSize) {\r\n break;\r\n }\r\n const item = items[i];\r\n if (!!item) {\r\n const id = item[trackBy], index = items.length - i - 1;\r\n let comp: ComponentRef<BaseVirtualListItemComponent>;\r\n if (components.length <= j) {\r\n comp = this._container.createComponent(componentClass);\r\n comp.instance.renderer = itemRenderer;\r\n if (!!resizeObserver) {\r\n resizeObserver.observe(comp.instance.element);\r\n }\r\n components.push(comp);\r\n } else {\r\n comp = components[j];\r\n }\r\n comp.instance.item = createItemData(item, isVertical, bounds, boundsSize, dynamic, itemsSize, id, index);\r\n comp.instance.show();\r\n const { width, height } = comp.instance.getBounds(),\r\n w = isVertical ? width : width < itemsSize ? itemsSize : width,\r\n h = isVertical ? height < itemsSize ? itemsSize : height : height;\r\n totalSize += isVertical ? h : w;\r\n j++;\r\n }\r\n }\r\n }\r\n\r\n create(container: ViewContainerRef) {\r\n this._container = container;\r\n }\r\n\r\n reset(componentClass: Component$1<BaseVirtualListItemComponent>, items: IVirtualListCollection,\r\n bounds: ISize, params: IPrerenderTrackBoxRefreshParams) {\r\n this._items = items;\r\n this._componentClass = componentClass;\r\n this.refresh(componentClass, bounds, params);\r\n }\r\n\r\n getCache(): PrerenderCache {\r\n return !!this._map ? this._map.toObject() : {};\r\n }\r\n\r\n clear() {\r\n if (!!this._map) {\r\n this._map.clear();\r\n }\r\n }\r\n\r\n on() {\r\n if (this._active) {\r\n return;\r\n }\r\n\r\n this._active = true;\r\n const components = this._components;\r\n if (!!components) {\r\n const observer = this._componentsResizeObserver;\r\n for (const comp of components) {\r\n if (!!comp && !!observer) {\r\n observer.observe(comp.instance.element);\r\n }\r\n }\r\n }\r\n }\r\n\r\n off() {\r\n if (!this._active) {\r\n return;\r\n }\r\n\r\n this._active = false;\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver?.disconnect();\r\n }\r\n }\r\n\r\n override dispose() {\r\n super.dispose();\r\n\r\n if (!!this._map) {\r\n this._map.clear();\r\n this._map = null;\r\n }\r\n\r\n if (!!this._items) {\r\n this._items = null;\r\n }\r\n\r\n if (!!this._componentClass) {\r\n this._componentClass = null;\r\n }\r\n\r\n if (!!this._container) {\r\n this._container = null;\r\n }\r\n\r\n if (!!this._components) {\r\n this._components = null;\r\n }\r\n\r\n if (!!this._componentsResizeObserver) {\r\n this._componentsResizeObserver.disconnect();\r\n this._componentsResizeObserver = null;\r\n }\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\r\nimport { NgVirtualListItemComponent } from '../../../ng-list-item/ng-virtual-list-item.component';\r\nimport {\r\n DEFAULT_ZINDEX, DISPLAY_BLOCK, DISPLAY_NONE, HIDDEN_ZINDEX, PX, SIZE_100_PERSENT, SIZE_AUTO,\r\n VISIBILITY_HIDDEN, VISIBILITY_VISIBLE,\r\n} from '../../../../const';\r\nimport { ID, POSITION, POSITION_ZERO } from '../../../ng-list-item/const';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-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-prerender-virtual-list-item',\r\n templateUrl: '../../../ng-list-item/ng-virtual-list-item.component.html',\r\n styleUrls: ['../../../ng-list-item/ng-virtual-list-item.component.scss', './ng-prerender-list-item.component.scss'],\r\n host: {\r\n 'class': 'ngvl__item',\r\n 'role': 'listitem',\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderVirtualListItemComponent extends NgVirtualListItemComponent {\r\n protected override 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 if (regular) {\r\n this._elementRef.nativeElement.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n this._elementRef.nativeElement.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\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\r\n override 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 override hide() {\r\n const el = this._elementRef.nativeElement,\r\n styles = el.style;\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}","import { ChangeDetectionStrategy, Component, computed, input, Signal, signal, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, from, tap } from 'rxjs';\r\nimport { TextDirection, TextDirections } from '../../../../enums';\r\nimport { BaseScrollView } from '../../../ng-scroll-view/base/base-scroll-view.component';\r\nimport { SCROLL_VIEW_INVERSION } from '../../../ng-scroll-view';\r\nimport { BEHAVIOR_INSTANT, DEFAULT_SCROLLBAR_ENABLED, LEFT_PROP_NAME, TOP_PROP_NAME } from '../../../../const';\r\nimport { NgScrollBarComponent } from '../../../ng-scroll-bar/ng-scroll-bar.component';\r\nimport { ScrollBox } from '../../../ng-scroller/utils';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * PrerenderScrollerComponent.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/components/prerender-container/prerender-scroller/prerender-scroller.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-scroller',\r\n templateUrl: './ng-prerender-scroller.component.html',\r\n styleUrl: '../../../ng-scroller/ng-scroller.component.scss',\r\n providers: [\r\n { provide: SCROLL_VIEW_INVERSION, useValue: false },\r\n { provide: SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, useValue: true },\r\n ],\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgPrerenderScrollerComponent extends BaseScrollView {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n scrollBar: NgScrollBarComponent | undefined;\r\n\r\n langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n classes = input<{ [cName: string]: boolean }>({});\r\n\r\n actualClasses: Signal<{ [cName: string]: boolean }>;\r\n\r\n containerClasses = signal<{ [cName: string]: boolean }>({});\r\n\r\n thumbSize = signal<number>(0);\r\n\r\n scrollbarShow = signal<boolean>(false);\r\n\r\n override set x(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._x = this._actualX = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get x() { return this._x; }\r\n\r\n override set y(v: number) {\r\n if (v !== undefined && !Number.isNaN(v)) {\r\n this._y = this._actualY = v;\r\n\r\n this.updateScrollBar();\r\n }\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected override onResizeViewport() {\r\n const viewport = this.scrollViewport()?.nativeElement;\r\n if (viewport) {\r\n this.viewportBounds.set({ width: viewport.offsetWidth, height: viewport.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n protected override onResizeContent() {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (content) {\r\n this.contentBounds.set({ width: content.offsetWidth, height: content.offsetHeight });\r\n this.updateScrollBar();\r\n }\r\n }\r\n\r\n private _scrollBox = new ScrollBox();\r\n\r\n constructor() {\r\n super();\r\n\r\n this.actualClasses = computed(() => {\r\n const classes = this.classes(), direction = this.direction();\r\n return { ...classes, [direction]: true };\r\n });\r\n\r\n const $contentBounds = toObservable(this.contentBounds),\r\n $viewportBounds = toObservable(this.viewportBounds),\r\n $isVertical = toObservable(this.isVertical),\r\n $direction = toObservable(this.direction),\r\n $scrollbarEnabled = toObservable(this.scrollbarEnabled);\r\n\r\n combineLatest([$direction, $scrollbarEnabled, $isVertical, $contentBounds, $viewportBounds]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([direction, scrollbarEnabled]) => {\r\n this.containerClasses.set({ [direction]: true, enabled: scrollbarEnabled, scrollable: scrollbarEnabled });\r\n }),\r\n ).subscribe();\r\n\r\n const $startOffset = toObservable(this.startOffset),\r\n $endOffset = toObservable(this.endOffset),\r\n $thumbSize = toObservable(this.thumbSize);\r\n\r\n from([$endOffset, $startOffset, $thumbSize, $isVertical]).pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.updateScrollBar();\r\n }),\r\n ).subscribe();\r\n\r\n const $updateScrollBar = this.$updateScrollBar;\r\n\r\n $updateScrollBar.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(() => {\r\n this.updateScrollBarHandler(true);\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n private updateScrollBarHandler(update: boolean = false) {\r\n const direction = this.direction(),\r\n isVertical = this.isVertical(),\r\n startOffset = this.startOffset(),\r\n endOffset = this.endOffset(),\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 } = 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: 1,\r\n });\r\n\r\n this.thumbSize.set(thumbSize);\r\n if (update) {\r\n this.scrollBar?.scroll({\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: thumbPosition, fireUpdate: false, behavior: BEHAVIOR_INSTANT,\r\n userAction: false, blending: true,\r\n });\r\n }\r\n this.scrollbarShow.set(this.scrollable);\r\n }\r\n\r\n protected updateScrollBar() {\r\n this._$updateScrollBar.next();\r\n }\r\n}","<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <div #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent part=\"list\" class=\"ngvl__list\" [ngClass]=\"actualClasses()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>","import {\r\n ChangeDetectionStrategy, Component, DestroyRef, effect, ElementRef, inject, input, OnDestroy, signal, TemplateRef, ViewChild,\r\n ViewContainerRef, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport { combineLatest, filter, Observable, Subject, Subscription, tap } from \"rxjs\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE,\r\n DEFAULT_SCROLLBAR_ENABLED, PX, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../../../const\";\r\nimport { ISize } from '../../../../interfaces';\r\nimport { IVirtualListCollection } from \"../../../../models\";\r\nimport { PrerenderCache } from \"../../types/cache\";\r\nimport { BaseVirtualListItemComponent } from \"../../../ng-list-item/base\";\r\nimport { Component$1 } from \"../../../../models/component.model\";\r\nimport { PrerenderTrackBox } from \"../../core\";\r\nimport { PrerenderTrackBoxEvents } from \"../../events\";\r\nimport { NgPrerenderVirtualListItemComponent } from \"../ng-prerender-list-item/ng-prerender-list-item.component\";\r\nimport { Direction } from \"../../../../enums\";\r\n\r\n/**\r\n * PrerenderList.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/prerender-container/components/prerender-list/prerender-list.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-list',\r\n templateUrl: './ng-prerender-list.component.html',\r\n styleUrls: ['../../../../ng-virtual-list.component.scss', './ng-prerender-list.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderList implements OnDestroy {\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n itemComponentClass = input<Component$1<BaseVirtualListItemComponent>>(NgPrerenderVirtualListItemComponent);\r\n\r\n protected _items = signal<IVirtualListCollection | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({ prepared: true });\r\n\r\n private _$render = new Subject<PrerenderCache>();\r\n $render = this._$render.asObservable();\r\n\r\n private _$componentResize = new Subject<PrerenderCache>();\r\n protected $componentResize = this._$componentResize.asObservable();\r\n\r\n private _trackBox: PrerenderTrackBox | null = new PrerenderTrackBox();\r\n\r\n private _onTrackBoxResizeHandler = (cache: PrerenderCache) => {\r\n this._$componentResize.next(cache);\r\n };\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n protected $isVertical: Observable<boolean>;\r\n\r\n protected $items: Observable<IVirtualListCollection | null>;\r\n\r\n protected $bounds: Observable<ISize>;\r\n\r\n get active() { return this._trackBox?.active ?? false; }\r\n\r\n private _activated: boolean = false;\r\n\r\n private _subscriptions = new Array<Subscription>();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n constructor() {\r\n this.$isVertical = toObservable(this.isVertical);\r\n this.$items = toObservable(this._items);\r\n this.$bounds = toObservable(this.bounds);\r\n\r\n effect(() => {\r\n const enabled = this.enabled();\r\n if (enabled) {\r\n this.activate();\r\n } else {\r\n this.deactivate();\r\n }\r\n });\r\n }\r\n\r\n activate() {\r\n if (this._activated) {\r\n return;\r\n }\r\n this._activated = true;\r\n\r\n this._trackBox!.addEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n\r\n this._subscriptions.push(this.$isVertical.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(v => {\r\n const el = 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 this._subscriptions.push(this.$bounds.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(({ width, height }) => {\r\n const el = this._elementRef.nativeElement;\r\n el.style.width = `${width}${PX}`;\r\n el.style.height = `${height}${PX}`;\r\n }),\r\n ).subscribe());\r\n\r\n this._subscriptions.push(combineLatest([this.$bounds, this.$items]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(([b, i]) => !!b && !!i),\r\n tap(([bounds, items]) => {\r\n if (this.active && !!this._trackBox && !!items) {\r\n this._trackBox.reset(this.itemComponentClass(), items, bounds, {\r\n itemRenderer: this.itemRenderer(),\r\n dynamic: this.dynamic(),\r\n itemSize: this.itemSize(),\r\n isVertical: this.isVertical(),\r\n trackBy: this.trackBy(),\r\n });\r\n }\r\n }),\r\n ).subscribe());\r\n\r\n const $componentResize = this.$componentResize;\r\n this._subscriptions.push($componentResize.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(cache => {\r\n this._$render.next(cache);\r\n }),\r\n ).subscribe());\r\n }\r\n\r\n deactivate() {\r\n if (!this._activated) {\r\n return;\r\n }\r\n this._activated = false;\r\n\r\n this.off();\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox!.removeEventListener(PrerenderTrackBoxEvents.RESIZE, this._onTrackBoxResizeHandler);\r\n }\r\n\r\n const subscriptions = this._subscriptions;\r\n for (const subscr of subscriptions) {\r\n if (!subscr.closed) {\r\n subscr.unsubscribe();\r\n }\r\n }\r\n this._subscriptions = [];\r\n }\r\n\r\n clear() {\r\n if (!!this._trackBox) {\r\n this._trackBox.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n if (!!this._trackBox) {\r\n this._trackBox.on();\r\n this._items.set(items);\r\n }\r\n }\r\n\r\n off() {\r\n if (!!this._trackBox) {\r\n this._trackBox.off();\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._trackBox!.create(this._listContainerRef!);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n dispose() {\r\n this._subscriptions = [];\r\n\r\n if (!!this._trackBox) {\r\n this._trackBox.dispose();\r\n this._trackBox = null;\r\n }\r\n }\r\n}","<ng-prerender-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [direction]=\"direction()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\">\r\n <ng-container #renderersContainer></ng-container>\r\n</ng-prerender-scroller>","import {\r\n ChangeDetectionStrategy, Component, input, TemplateRef, viewChild, ViewEncapsulation,\r\n} from \"@angular/core\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SCROLLBAR_ENABLED, TRACK_BY_PROPERTY_NAME,\r\n} from \"../../const\";\r\nimport { ISize } from '../../interfaces';\r\nimport { IVirtualListCollection } from \"../../models\";\r\nimport { Direction } from \"../../enums\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { filter, Observable, switchMap } from \"rxjs\";\r\nimport { PrerenderCache } from \"./types\";\r\nimport { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\n\r\n/**\r\n * Prerender container.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-prerender-container/ng-prerender-container.component.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n@Component({\r\n selector: 'ng-prerender-container',\r\n templateUrl: './ng-prerender-container.component.html',\r\n styleUrls: ['../../ng-virtual-list.component.scss', './ng-prerender-container.component.scss'],\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n})\r\nexport class NgPrerenderContainer {\r\n private _list = viewChild<NgPrerenderList>('list');\r\n\r\n enabled = input<boolean>(false);\r\n\r\n direction = input<Direction>(DEFAULT_DIRECTION);\r\n\r\n isVertical = input<boolean>(true);\r\n\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED);\r\n\r\n startOffset = input<number>(0);\r\n\r\n endOffset = input<number>(0);\r\n\r\n bounds = input.required<ISize>();\r\n\r\n dynamic = input<boolean>(DEFAULT_DYNAMIC_SIZE);\r\n\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE);\r\n\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME);\r\n\r\n itemRenderer = input<TemplateRef<any>>();\r\n\r\n readonly $render: Observable<PrerenderCache>;\r\n\r\n get active() {\r\n return this._list()?.active ?? false;\r\n }\r\n\r\n constructor() {\r\n const $list = toObservable(this._list);\r\n\r\n this.$render = $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => v.$render),\r\n );\r\n }\r\n\r\n clear() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.clear();\r\n }\r\n }\r\n\r\n on(items: IVirtualListCollection | null = null) {\r\n const list = this._list();\r\n if (!!list) {\r\n list.on(items);\r\n }\r\n }\r\n\r\n off() {\r\n const list = this._list();\r\n if (!!list) {\r\n list.off();\r\n }\r\n }\r\n}","<ng-prerender-list #list [bounds]=\"bounds()!\" [direction]=\"direction()\" [dynamic]=\"dynamic()\"\r\n [isVertical]=\"isVertical()\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\" [itemRenderer]=\"itemRenderer()\"\r\n [startOffset]=\"startOffset()\" [endOffset]=\"endOffset()\" [scrollbarEnabled]=\"scrollbarEnabled()\"\r\n [enabled]=\"enabled()\" />","import {\r\n ChangeDetectionStrategy, Component, ComponentRef, computed, DestroyRef, effect, ElementRef, inject, input,\r\n OnDestroy, output, Signal, signal, TemplateRef, ViewChild, viewChild, ViewContainerRef, ViewEncapsulation,\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n BehaviorSubject, combineLatest, debounceTime, delay, distinctUntilChanged, filter, fromEvent, map,\r\n of, skip, Subject, switchMap, take, takeUntil, tap,\r\n} from 'rxjs';\r\nimport { NgVirtualListItemComponent } from './components/ng-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, FOCUS, 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, DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, DEFAULT_SNAP_SCROLLTO_END, MIN_PIXELS_FOR_PREVENT_SNAPPING,\r\n MOUSE_DOWN, TOUCH_START, DEFAULT_LANG_TEXT_DIR, DEFAULT_CLICK_DISTANCE, DEFAULT_WAIT_FOR_PREPARATION, DEFAULT_SCROLLBAR_THICKNESS,\r\n DEFAULT_SCROLLBAR_MIN_SIZE, KEY_DOWN, BEHAVIOR_AUTO, DEFAULT_SCROLLBAR_ENABLED, DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_OVERSCROLL_ENABLED,\r\n DEFAULT_ANIMATION_PARAMS, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SNAP_SCROLLTO_START, EMPTY_SCROLL_STATE_VERSION, MAX_REGULAR_SNAPED_COMPONENTS,\r\n PREPARE_ITERATIONS, PREPARATION_REUPDATE_LENGTH, ROLE_LIST_BOX, ROLE_LIST, KEY_TAB, MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1,\r\n MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2, PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1,\r\n DEFAULT_SCROLLING_SETTINGS,\r\n} from './const';\r\nimport {\r\n IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap,\r\n} from './models';\r\nimport {\r\n IScrollEvent, IScrollOptions, IAnimationParams, ISize, IRenderStabilizerOptions, IScrollingSettings,\r\n} from './interfaces';\r\nimport { FocusAlignment, Id } from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n CollectionMode, CollectionModes, Direction, Directions, FocusAlignments, MethodForSelecting, MethodsForSelecting,\r\n SnappingMethod, SnappingMethods, TextDirection, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions, TrackBox } from './core/track-box';\r\nimport { isSnappingMethodAdvenced } from './utils/snapping-method';\r\nimport { BaseVirtualListItemComponent } from './components/ng-list-item/base';\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 { NgScrollerComponent } from './components/ng-scroller/ng-scroller.component';\r\nimport { IScrollToParams } from './components/ng-scroll-view';\r\nimport { NgPrerenderContainer } from './components/ng-prerender-container/ng-prerender-container.component';\r\nimport { IScrollParams } from './interfaces';\r\nimport { formatActualDisplayItems, formatScreenReaderMessage } from './utils/screen-reader-formatter';\r\nimport { validateId, validateIteration, validateScrollBehavior, validateScrollIteration } from './utils/list-validators';\r\nimport { EVENT_KEY_DOWN, KEY_ARR_DOWN, KEY_ARR_LEFT, KEY_ARR_RIGHT, KEY_ARR_UP } from './components/ng-list-item/const';\r\nimport { NgVirtualListPublicService } from './ng-virtual-list-public.service';\r\n\r\n/**\r\n * Virtual list component.\r\n * Maximum performance for extremely large lists.\r\n * It is based on algorithms for virtualization of screen objects.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/ng-virtual-list.component.ts\r\n * @author Evgenii 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 styleUrl: './ng-virtual-list.component.scss',\r\n host: {\r\n 'style': 'position: relative;'\r\n },\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.ShadowDom,\r\n providers: [NgVirtualListService, NgVirtualListPublicService],\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 /**\r\n * Readonly. Returns the unique identifier of the component.\r\n */\r\n get id() { return this._id; }\r\n\r\n private _service = inject(NgVirtualListService);\r\n\r\n private _prerender = viewChild<NgPrerenderContainer>('prerender');\r\n\r\n @ViewChild('renderersContainer', { read: ViewContainerRef })\r\n private _listContainerRef: ViewContainerRef | undefined;\r\n\r\n @ViewChild('snapRendererContainer', { read: ViewContainerRef })\r\n private _snapContainerRef: ViewContainerRef | undefined;\r\n\r\n private _scrollerComponent = viewChild<NgScrollerComponent>('scroller');\r\n\r\n private _scroller: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n private _list: Signal<ElementRef<HTMLDivElement> | undefined>;\r\n\r\n /**\r\n * Fires when the list has been scrolled.\r\n */\r\n onScroll = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the list has completed scrolling.\r\n */\r\n onScrollEnd = output<IScrollEvent>();\r\n\r\n /**\r\n * Fires when the viewport size is changed.\r\n */\r\n onViewportChange = output<ISize>();\r\n\r\n /**\r\n * Fires when an element is clicked.\r\n */\r\n onItemClick = output<IRenderVirtualListItem<any> | null>();\r\n\r\n /**\r\n * Fires when elements are selected.\r\n */\r\n onSelect = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when elements are collapsed.\r\n */\r\n onCollapse = output<Array<Id> | Id | null>();\r\n\r\n /**\r\n * Fires when the scroll reaches the start.\r\n */\r\n onScrollReachStart = output<void>();\r\n\r\n /**\r\n * Fires when the scroll reaches the end.\r\n */\r\n onScrollReachEnd = output<void>();\r\n\r\n private _$show = new BehaviorSubject<boolean>(false);\r\n readonly $show = this._$show.asObservable();\r\n\r\n private _scrollbarThickness = {\r\n transform: (v: number) => {\r\n const valid = validateInt(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThickness\" parameter must be of type `number`.');\r\n return DEFAULT_SCROLLBAR_THICKNESS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar thickness.\r\n */\r\n scrollbarThickness = input<number>(DEFAULT_SCROLLBAR_THICKNESS, { ...this._scrollbarThickness });\r\n\r\n private _scrollbarMinSize = {\r\n transform: (v: number) => {\r\n const valid = validateInt(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 } as any;\r\n\r\n /**\r\n * Minimum scrollbar size.\r\n */\r\n scrollbarMinSize = input<number>(DEFAULT_SCROLLBAR_MIN_SIZE, { ...this._scrollbarMinSize });\r\n\r\n private _scrollbarThumbRenderer = {\r\n transform: (v: TemplateRef<any> | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbRenderer\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrollbar customization template.\r\n */\r\n scrollbarThumbRenderer = input<TemplateRef<any> | null>(null, { ...this._scrollbarThumbRenderer });\r\n\r\n private _scrollbarThumbParams = {\r\n transform: (v: { [propName: string]: any } | null) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarThumbParams\" parameter must be of type `object`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Additional options for the scrollbar.\r\n */\r\n scrollbarThumbParams = input<{ [propName: string]: any } | null>({}, { ...this._scrollbarThumbParams });\r\n\r\n private _loading = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(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 } as any;\r\n\r\n /**\r\n * If `true`, the scrollBar goes into loading state. The default value is `false`.\r\n */\r\n loading = input<boolean>(false, { ...this._loading });\r\n\r\n private _waitForPreparation = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(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 } as any;\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 waitForPreparation = input<boolean>(DEFAULT_WAIT_FOR_PREPARATION, { ...this._waitForPreparation });\r\n\r\n private _clickDistance = {\r\n transform: (v: number) => {\r\n const valid = validateInt(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 } as any;\r\n\r\n /**\r\n * The maximum scroll distance at which a click event is triggered.\r\n */\r\n clickDistance = input<number>(DEFAULT_CLICK_DISTANCE, { ...this._clickDistance });\r\n\r\n private _itemsOptions = {\r\n transform: (v: IVirtualListCollection | undefined) => {\r\n let valid = validateArray(v, true, true);\r\n if (valid) {\r\n if (v) {\r\n const trackBy = this.trackBy();\r\n for (let i = 0, l = v.length; i < l; i++) {\r\n const item = v[i];\r\n valid = validateObject(item, true, true);\r\n if (valid) {\r\n if (item && !(validateFloat(item?.[trackBy] as number, true) || validateString(item?.[trackBy] as string, true, 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 } as any;\r\n\r\n /**\r\n * Collection of list items.\r\n */\r\n items = input.required<IVirtualListCollection>({\r\n ...this._itemsOptions,\r\n });\r\n\r\n private _selectedIdsOptions = {\r\n transform: (v: Array<Id> | Id | undefined) => {\r\n let valid = validateArray(v as any, true, true) || validateString(v as any, true, 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 `null`.');\r\n return this._isMultiSelecting ? [] : undefined;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n defaultItemValue = input<IVirtualListItem | null>(null);\r\n\r\n /**\r\n * Sets the selected items.\r\n */\r\n selectedIds = input<Array<Id> | Id | null>(null, { ...this._selectedIdsOptions });\r\n\r\n private _collapsedIdsOptions = {\r\n transform: (v: Array<Id>) => {\r\n let valid = validateArray(v as any, true, 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 \"collapsedIds\" parameter must be of type `Array<Id>.');\r\n return [];\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Sets the collapsed items.\r\n */\r\n collapsedIds = input<Array<Id>>([], { ...this._collapsedIdsOptions });\r\n\r\n private _selectByClickOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * If `false`, the element is selected using the config.select method passed to the template; \r\n * if `true`, the element is selected by clicking on it. The default value is `true`.\r\n */\r\n selectByClick = input<boolean>(DEFAULT_SELECT_BY_CLICK, { ...this._selectByClickOptions });\r\n\r\n private _collapseByClickOptions = {\r\n transform: (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 } as any;\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 collapseByClick = input<boolean>(DEFAULT_COLLAPSE_BY_CLICK, { ...this._collapseByClickOptions });\r\n\r\n private _snapOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines whether elements will snap. Default value is \"true\".\r\n */\r\n snap = input<boolean>(DEFAULT_SNAP, { ...this._snapOptions });\r\n\r\n private _snapToEndTransitionInstantOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\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 snapToEndTransitionInstantOffset = input<number>(DEFAULT_SNAP_TO_END_TRANSITION_INSTANT_OFFSET, { ...this._snapToEndTransitionInstantOffsetOptions });\r\n\r\n private _scrollStartOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\r\n\r\n /**\r\n * Sets the scroll start offset value; Default value is \"0\".\r\n */\r\n scrollStartOffset = input<number>(0, { ...this._scrollStartOffsetOptions });\r\n\r\n private _scrollEndOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true);\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 } as any;\r\n\r\n /**\r\n * Sets the scroll end offset value; Default value is \"0\".\r\n */\r\n scrollEndOffset = input<number>(0, { ...this._scrollEndOffsetOptions });\r\n\r\n private _snapScrollToStartOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToStart\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_START;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the start of the list. Default value is \"true\".\r\n * This property takes precedence over the snapScrollToEnd property.\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToStart = input<boolean>(DEFAULT_SNAP_SCROLLTO_START, { ...this._snapScrollToStartOptions });\r\n\r\n private _snapScrollToEndOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"snapScrollToEnd\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_SCROLLTO_END;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll will be anchored to the утв of the list. Default value is \"true\".\r\n * That is, if snapScrollToStart and snapScrollToEnd are enabled, the list will initially snap \r\n * to the beginning; if you move the scroll bar to the end, the list will snap to the end. \r\n * If snapScrollToStart is disabled and snapScrollToEnd is enabled, the list will snap to the end; \r\n * if you move the scroll bar to the beginning, the list will snap to the beginning. \r\n * If both snapScrollToStart and snapScrollToEnd are disabled, the list will never snap to the beginning or end.\r\n */\r\n snapScrollToEnd = input<boolean>(DEFAULT_SNAP_SCROLLTO_END, { ...this._snapScrollToEndOptions });\r\n\r\n private _snapScrollToBottomOptions = {\r\n transform: () => {\r\n throw Error('The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.');\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd property is deprecated. Use the snapScrollToEnd property.\r\n */\r\n snapScrollToBottom = input<boolean>('deprecated' as any, { ...this._snapScrollToBottomOptions });\r\n\r\n private _scrollbarEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scrollbar is shown or not. The default value is \"true\".\r\n */\r\n scrollbarEnabled = input<boolean>(DEFAULT_SCROLLBAR_ENABLED, { ...this._scrollbarEnabledOptions });\r\n\r\n private _scrollbarInteractiveOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollbarInteractive\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLBAR_INTERACTIVE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether scrolling using the scrollbar will be possible. The default value is \"true\".\r\n */\r\n scrollbarInteractive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE, { ...this._scrollbarInteractiveOptions });\r\n\r\n private _scrollBehaviorOptions = {\r\n transform: (v: ScrollBehavior) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollBehavior\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLL_BEHAVIOR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Defines the scrolling behavior for any element on the page. The default value is \"smooth\".\r\n */\r\n scrollBehavior = input<ScrollBehavior>(DEFAULT_SCROLL_BEHAVIOR, { ...this._scrollBehaviorOptions });\r\n\r\n private _scrollingSettingsOptions = {\r\n transform: (v: IScrollingSettings): IScrollingSettings | null => {\r\n let valid = validateObject(v, true, true);\r\n if (valid && !!v) {\r\n const { frictionalForce, mass, maxDistance, maxDuration, speedScale, optimization } = v;\r\n valid = validateFloat(frictionalForce, true);\r\n if (!valid) {\r\n console.error('The \"frictionalForce\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(mass, true);\r\n if (!valid) {\r\n console.error('The \"mass\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDistance, true);\r\n if (!valid) {\r\n console.error('The \"maxDistance\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(maxDuration, true);\r\n if (!valid) {\r\n console.error('The \"maxDuration\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateFloat(speedScale, true);\r\n if (!valid) {\r\n console.error('The \"speedScale\" parameter must be of type `number` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n valid = validateBoolean(optimization, true);\r\n if (!valid) {\r\n console.error('The \"optimization\" parameter must be of type `boolean` or `undefined`.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n }\r\n if (!valid) {\r\n console.error('The \"scrollingSettings\" parameter must be of type `object` or null.');\r\n return DEFAULT_SCROLLING_SETTINGS;\r\n }\r\n return {\r\n frictionalForce: v.frictionalForce !== undefined && v.frictionalForce > 0 ? v.frictionalForce : DEFAULT_SCROLLING_SETTINGS.frictionalForce,\r\n mass: v.mass !== undefined && v.mass > 0 ? v.mass : DEFAULT_SCROLLING_SETTINGS.mass,\r\n maxDistance: v.maxDistance !== undefined && v.maxDistance > 0 ? v.maxDistance : DEFAULT_SCROLLING_SETTINGS.maxDistance,\r\n maxDuration: v.maxDuration !== undefined && v.maxDuration > 0 ? v.maxDuration : DEFAULT_SCROLLING_SETTINGS.maxDuration,\r\n speedScale: v.speedScale !== undefined && v.speedScale > 0 ? v.speedScale : DEFAULT_SCROLLING_SETTINGS.speedScale,\r\n optimization: v.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n };\r\n },\r\n } as any;\r\n\r\n /**\r\n * Scrolling settings.\r\n * - frictionalForce - Frictional force. Default value is 0.035.\r\n * - mass - Mass. Default value is 0.005.\r\n * - maxDistance - Maximum scrolling distance. Default value is 12500.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 15.\r\n * - optimization - Enables scrolling performance optimization. Default value is `true`.\r\n */\r\n scrollingSettings = input<IScrollingSettings>(DEFAULT_SCROLLING_SETTINGS, { ...this._scrollingSettingsOptions });\r\n\r\n private _animationParamsOptions = {\r\n transform: (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"animationParams\" parameter must be of type `object`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Animation parameters. The default value is \"{ scrollToItem: 50, navigateToItem: 150 }\".\r\n */\r\n animationParams = input<IAnimationParams>(DEFAULT_ANIMATION_PARAMS, { ...this._animationParamsOptions });\r\n\r\n private _overscrollEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overscrollEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERSCROLL_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the overscroll (re-scroll) feature will work. The default value is \"true\".\r\n */\r\n overscrollEnabled = input<boolean>(DEFAULT_OVERSCROLL_ENABLED, { ...this._overscrollEnabledOptions });\r\n\r\n private _enabledBufferOptimizationOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Experimental!\r\n * Enables buffer optimization.\r\n * Can only be used if items in the collection are not added or updated. Otherwise, artifacts in the form of twitching of the scroll area are possible.\r\n * Works only if the property dynamic = true\r\n */\r\n enabledBufferOptimization = input<boolean>(DEFAULT_ENABLED_BUFFER_OPTIMIZATION, { ...this._enabledBufferOptimizationOptions });\r\n\r\n private _itemRendererOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Rendering element template.\r\n */\r\n itemRenderer = input.required<TemplateRef<any>>({ ...this._itemRendererOptions });\r\n\r\n private _itemRenderer = signal<TemplateRef<any> | undefined>(undefined);\r\n\r\n private _itemConfigMapOptions = {\r\n transform: (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 } as any;\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.\r\n * 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\r\n * collapse elements in front that do not have a `sticky` property.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/19.x/projects/ng-virtual-list/src/lib/models/item-config-map.model.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n itemConfigMap = input<IVirtualListItemConfigMap>({}, { ...this._itemConfigMapOptions });\r\n\r\n private _itemSizeOptions = {\r\n transform: (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 return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * If direction = 'vertical', then the height of a typical element. If direction = 'horizontal', then the width of a typical element.\r\n * If the dynamicSize property is true, the items in the list can have different sizes, and you must specify the itemSize property \r\n * to adjust the sizes of the items in the unallocated area.\r\n */\r\n itemSize = input<number>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n private _dynamicSizeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * If true, items in the list may have different sizes, and the itemSize property must be specified to adjust\r\n * the sizes of items in the unallocated area.\r\n * If false then the items in the list have a fixed size specified by the itemSize property. The default value is true.\r\n */\r\n dynamicSize = input(DEFAULT_DYNAMIC_SIZE, { ...this._dynamicSizeOptions });\r\n\r\n private _directionOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines the direction in which elements are placed. Default value is \"vertical\".\r\n */\r\n direction = input<Direction>(DEFAULT_DIRECTION, { ...this._directionOptions });\r\n\r\n private _collectionModeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Determines the action modes for collection elements. Default value is \"normal\".\r\n */\r\n collectionMode = input<CollectionMode>(DEFAULT_COLLECTION_MODE, { ...this._collectionModeOptions });\r\n\r\n private _bufferSizeOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * Number of elements outside the scope of visibility. Default value is 2.\r\n */\r\n bufferSize = input<number>(DEFAULT_BUFFER_SIZE, { ...this._bufferSizeOptions });\r\n\r\n private _maxBufferSizeTransform = {\r\n transform: (v: number | undefined) => {\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();\r\n if (val === undefined || val <= bufferSize) {\r\n return bufferSize;\r\n }\r\n return val;\r\n }\r\n } as any;\r\n\r\n /**\r\n * Maximum number of elements outside the scope of visibility. Default value is 100.\r\n * If maxBufferSize is set to be greater than bufferSize, then adaptive buffer mode is enabled.\r\n * The greater the scroll size, the more elements are allocated for rendering.\r\n */\r\n maxBufferSize = input<number>(DEFAULT_MAX_BUFFER_SIZE, { ...this._maxBufferSizeTransform });\r\n\r\n private _snappingMethodOptions = {\r\n transform: (v: SnappingMethod) => {\r\n const valid = validateString(v) && (v === SnappingMethods.ADVANCED || v === SnappingMethods.STANDART);\r\n if (!valid) {\r\n console.error(`The \"snappingMethod\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_SNAPPING_METHOD;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snapping method. Default value is 'standart'.\r\n * 'standart' - Classic group visualization.\r\n * 'advanced' - A mask is applied to the viewport area so that the background is displayed underneath the attached group.\r\n */\r\n snappingMethod = input<SnappingMethod>(DEFAULT_SNAPPING_METHOD, { ...this._snappingMethodOptions });\r\n\r\n private _methodForSelectingOptions = {\r\n transform: (v: MethodForSelecting) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === '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 } as any;\r\n\r\n /**\r\n * Method for selecting list items. Default value is 'none'.\r\n * 'select' - List items are selected one by one.\r\n * 'multi-select' - Multiple selection of list items.\r\n * 'none' - List items are not selectable.\r\n */\r\n methodForSelecting = input<MethodForSelecting>(DEFAULT_SELECT_METHOD, { ...this._methodForSelectingOptions });\r\n\r\n private _trackByOptions = {\r\n transform: (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 } as any;\r\n\r\n /**\r\n * The name of the property by which tracking is performed\r\n */\r\n trackBy = input<string>(TRACK_BY_PROPERTY_NAME, { ...this._trackByOptions });\r\n\r\n private _screenReaderMessageOptions = {\r\n transform: (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 } as any;\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 screenReaderMessage = input<string>(DEFAULT_SCREEN_READER_MESSAGE, { ...this._screenReaderMessageOptions });\r\n\r\n protected readonly screenReaderFormattedMessage = signal<string>(this.screenReaderMessage());\r\n\r\n private _langTextDir = {\r\n transform: (v: TextDirection) => {\r\n const valid = validateString(v);\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 } as any;\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 langTextDir = input<TextDirection>(DEFAULT_LANG_TEXT_DIR, { ...this._langTextDir });\r\n\r\n private _isNotSelecting = this.getIsNotSelecting();\r\n\r\n private _isSingleSelecting = this.getIsSingleSelecting();\r\n\r\n private _isMultiSelecting = this.getIsMultiSelecting();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n private _isVertical = this.getIsVertical();\r\n protected get isVertical() {\r\n return this._isVertical;\r\n }\r\n\r\n protected readonly focusedElement = signal<Id | null>(null);\r\n\r\n protected readonly classes = signal<{ [cName: string]: boolean }>({});\r\n\r\n private _actualItems = signal<IVirtualListCollection>([]);\r\n\r\n private _collapsedItemIds = signal<Array<Id>>([]);\r\n\r\n private _displayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _snappedDisplayComponents: Array<ComponentRef<BaseVirtualListItemComponent>> = [];\r\n\r\n private _bounds = signal<ISize | null>(null);\r\n protected get bounds() { return this._bounds; }\r\n\r\n private _totalSize = signal<number>(0);\r\n\r\n private _listBounds = signal<ISize | null>(null);\r\n\r\n private _scrollSize = signal<number>(0);\r\n\r\n private _isScrollStart = signal<boolean>(true);\r\n\r\n private _isScrollEnd = signal<boolean>(false);\r\n\r\n private _resizeSnappedComponentHandler = () => {\r\n const list = this._list(), scroller = this._scroller(), bounds = this._bounds(), snappedComponents = this._snappedDisplayComponents;\r\n if (list && scroller && snappedComponents.length > 0) {\r\n const isVertical = this._isVertical, listBounds = list.nativeElement.getBoundingClientRect();\r\n\r\n for (const comp of snappedComponents) {\r\n if (!!comp) {\r\n comp.instance.regularLength = `${isVertical ? listBounds.width : listBounds.height}${PX}`;\r\n }\r\n }\r\n\r\n const snappingMethod = this.snappingMethod();\r\n if (snappingMethod === SnappingMethods.ADVANCED) {\r\n const snappedComponent = snappedComponents?.[0].instance;\r\n if (!!snappedComponent) {\r\n const { width, height } = bounds ?? { width: 0, height: 0 }, langTextDir = this.langTextDir();\r\n\r\n snappedComponent.element.style.clipPath = `path(\"M 0 0 L 0 ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} ${snappedComponent.element.offsetHeight} L ${snappedComponent.element.offsetWidth} 0 Z\")`;\r\n\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 scrollBarSize = this.scrollbarThickness();\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 + 2;\r\n top = sHeight;\r\n bottom = height;\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 } else {\r\n left = sWidth;\r\n right = width;\r\n top = 0;\r\n bottom = height - scrollBarSize;\r\n scrollerElement.style.clipPath = `path(\"M ${width} 0 L ${width} ${bottom} L 0 ${bottom} L 0 0 L ${width} 0 Z\")`;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private _resizeSnappedObserver: ResizeObserver | null = null;\r\n\r\n private focusItem = (element: HTMLElement, position: number, align: FocusAlignment = FocusAlignments.CENTER,\r\n behavior: ScrollBehavior = BEHAVIOR_AUTO) => {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const { width, height } = this._bounds()!, { width: elementWidth, height: elementHeight } = element.getBoundingClientRect(),\r\n isVertical = this._isVertical,\r\n viewportSize = isVertical ? height : width,\r\n elementSize = isVertical ? elementHeight : elementWidth;\r\n let pos: number = Number.NaN;\r\n switch (align) {\r\n case FocusAlignments.START: {\r\n pos = position;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize);\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.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior,\r\n fireUpdate: true, blending: true, userAction: true, duration: this.animationParams().navigateToItem,\r\n };\r\n scroller.refresh(false);\r\n scroller.scrollTo(params);\r\n }\r\n }\r\n }\r\n\r\n private _elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\r\n\r\n /**\r\n * Base class of the element component\r\n */\r\n private _itemComponentClass: Component$1<BaseVirtualListItemComponent> = NgVirtualListItemComponent;\r\n protected get itemComponentClass() { return this._itemComponentClass; }\r\n\r\n /**\r\n * Base class trackBox\r\n */\r\n private _trackBoxClass: Component$1<TrackBox> = TrackBox;\r\n\r\n /**\r\n * Dictionary of element sizes by their id\r\n */\r\n private _trackBox: TrackBox = new this._trackBoxClass(this.trackBy());\r\n\r\n private _$update = new Subject<string>();\r\n protected readonly $update = this._$update.asObservable();\r\n\r\n private _$scrollTo = new Subject<IScrollParams>();\r\n protected $scrollTo = this._$scrollTo.asObservable();\r\n\r\n private _$scrollToExecutor = new Subject<IScrollParams>();\r\n protected readonly $scrollToExecutor = this._$scrollToExecutor.asObservable();\r\n\r\n private _$scrollingTo = new BehaviorSubject<boolean>(false);\r\n\r\n private _$scroll = new Subject<IScrollEvent>();\r\n readonly $scroll = this._$scroll.asObservable();\r\n\r\n private _$tick = new Subject<void>();\r\n readonly $tick = this._$tick.asObservable();\r\n\r\n private _$fireUpdate = new Subject<boolean>();\r\n protected readonly $fireUpdate = this._$fireUpdate.asObservable();\r\n\r\n private _$fireUpdateNextFrame = new Subject<boolean>();\r\n protected readonly $fireUpdateNextFrame = this._$fireUpdateNextFrame.asObservable();\r\n\r\n private _$preventScrollSnapping = new BehaviorSubject<boolean>(false);\r\n protected readonly $preventScrollSnapping = this._$preventScrollSnapping.asObservable();\r\n\r\n private _destroyRef = inject(DestroyRef);\r\n\r\n private _updateId: number | undefined;\r\n\r\n private _scrollStateUpdateIndex: number = 0;\r\n\r\n private _readyForShow = false;\r\n\r\n private _cached = false;\r\n\r\n private _isLoading = false;\r\n\r\n protected get cachable() {\r\n return this._prerender()?.active ?? false;\r\n }\r\n\r\n protected get prerenderable() {\r\n return this.dynamicSize() && (this._trackBox?.isSnappedToEnd ?? false);\r\n }\r\n\r\n private _$viewInit = new BehaviorSubject<boolean>(false);\r\n private readonly $viewInit = this._$viewInit.asObservable();\r\n\r\n private _$destroy = new Subject<void>();\r\n private readonly $destroy = this._$destroy.asObservable();\r\n\r\n protected getScrollStateVersion(totalSize: number, scrollSize: number, cacheVersion: number): string {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n if (totalSize < scrollSize) {\r\n this._scrollStateUpdateIndex = this._scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : this._scrollStateUpdateIndex + 1;\r\n }\r\n return `${this._scrollStateUpdateIndex}_${totalSize}_${scrollSize}_${cacheVersion}`;\r\n };\r\n\r\n constructor() {\r\n NgVirtualListComponent.__nextId = NgVirtualListComponent.__nextId + 1 === Number.MAX_SAFE_INTEGER\r\n ? 0 : NgVirtualListComponent.__nextId + 1;\r\n this._id = NgVirtualListComponent.__nextId;\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n this._service.animationParams = this.animationParams();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$tick.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.checkBoundsOfElements();\r\n this._scrollerComponent()?.tick();\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollerComponent = toObservable(this._scrollerComponent),\r\n $resizeViewport = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$resizeViewport),\r\n ),\r\n $resizeContent = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$resizeContent),\r\n );\r\n\r\n $resizeViewport.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._bounds.set(v);\r\n this.onAfterResize(true);\r\n }),\r\n ).subscribe();\r\n\r\n $resizeContent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._listBounds.set(v);\r\n this.onAfterResize();\r\n }),\r\n ).subscribe();\r\n\r\n const $trackBy = toObservable(this.trackBy);\r\n $trackBy.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false, hasScrollbarUserAction = false;\r\n\r\n this._scroller = computed(() => {\r\n return this._scrollerComponent()?.scrollViewport();\r\n });\r\n\r\n this._list = computed(() => {\r\n return this._scrollerComponent()?.scrollContent();\r\n });\r\n\r\n this._service.$focusItem.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap((params) => {\r\n const { element, position, align, behavior } = params;\r\n this.focusItem(element, position, align, behavior);\r\n }),\r\n ).subscribe();\r\n\r\n const $list = toObservable(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\r\n const preventKeyboardEvent = (event: KeyboardEvent, isVertical: boolean) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const scrollStartOffset = this.scrollStartOffset(), scrollable = scroller.scrollable ?? false,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n scrollWeight = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n if (scrollable || scrollSize <= scrollStartOffset || scrollSize >= scrollWeight) {\r\n if (!!event && event.cancelable) {\r\n event.stopImmediatePropagation();\r\n event.preventDefault();\r\n }\r\n }\r\n }\r\n };\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n switchMap(element => {\r\n return fromEvent<KeyboardEvent>(element, EVENT_KEY_DOWN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(e => {\r\n switch (e.key) {\r\n case KEY_ARR_LEFT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_UP:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_RIGHT:\r\n if (!this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n case KEY_ARR_DOWN:\r\n if (this.isVertical) {\r\n preventKeyboardEvent(e, this.isVertical);\r\n }\r\n break;\r\n }\r\n return of(null);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollbarThickness = toObservable(this.scrollbarThickness);\r\n $scrollbarThickness.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(scrollbarThickness => {\r\n this._service.scrollBarSize = scrollbarThickness;\r\n }),\r\n ).subscribe();\r\n\r\n this.$fireUpdateNextFrame.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(userAction => {\r\n this._$fireUpdate.next(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollToItem = this.$scrollTo.pipe(takeUntilDestroyed()),\r\n $mouseDown = fromEvent(this._elementRef.nativeElement, MOUSE_DOWN).pipe(takeUntilDestroyed()),\r\n $touchStart = fromEvent(this._elementRef.nativeElement, TOUCH_START).pipe(takeUntilDestroyed());\r\n\r\n fromEvent<KeyboardEvent>(document, KEY_DOWN).pipe(\r\n takeUntilDestroyed(),\r\n filter(e => e.key === KEY_TAB),\r\n switchMap(e => {\r\n return fromEvent(this._elementRef.nativeElement, FOCUS).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n takeUntil($scrollToItem),\r\n takeUntil($mouseDown),\r\n takeUntil($touchStart),\r\n tap(e => {\r\n this._service.focusFirstElement();\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToStart(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollTo.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(params => {\r\n const { id, cb, options } = params\r\n this.scrollTo(id, cb, options);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$scrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(options => {\r\n this.scrollToEnd(null, options);\r\n }),\r\n ).subscribe();\r\n\r\n effect(() => {\r\n const dir = this.langTextDir() as TextDirection;\r\n this._service.langTextDir = dir;\r\n });\r\n\r\n effect(() => {\r\n const dist = this.clickDistance();\r\n this._service.clickDistance = dist;\r\n });\r\n\r\n const $viewInit = this.$viewInit,\r\n $prerenderContainer = toObservable(this._prerender);\r\n\r\n const $prerender = $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(v => {\r\n return $prerenderContainer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n switchMap(v => v.$render),\r\n );\r\n }),\r\n );\r\n\r\n const $fireUpdate = this.$fireUpdate;\r\n $fireUpdate.pipe(\r\n takeUntilDestroyed(),\r\n tap(userAction => {\r\n hasUserAction = userAction;\r\n }),\r\n ).subscribe();\r\n\r\n const $update = this.$update,\r\n renderStabilizer = (options?: IRenderStabilizerOptions) => {\r\n let renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION,\r\n renderStabilizerUpdateIterations = 0;\r\n const prepareIterations = options?.prepareIterations ?? PREPARE_ITERATIONS,\r\n prepareReupdateLength = options?.prepareReupdateLength ?? PREPARATION_REUPDATE_LENGTH;\r\n return of(null).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(() => {\r\n renderStabilizerPrevScrollStateVersion = EMPTY_SCROLL_STATE_VERSION;\r\n renderStabilizerUpdateIterations = 0;\r\n this._cached = false;\r\n return $update.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap((v) => {\r\n if (((renderStabilizerPrevScrollStateVersion === EMPTY_SCROLL_STATE_VERSION) || (renderStabilizerPrevScrollStateVersion !== v)) &&\r\n (renderStabilizerUpdateIterations < prepareIterations)) {\r\n if (v !== EMPTY_SCROLL_STATE_VERSION) {\r\n renderStabilizerPrevScrollStateVersion = v;\r\n }\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n if (renderStabilizerPrevScrollStateVersion === v) {\r\n if (renderStabilizerUpdateIterations < prepareReupdateLength) {\r\n renderStabilizerUpdateIterations++;\r\n this._$fireUpdate.next(false);\r\n return of(false);\r\n }\r\n }\r\n renderStabilizerPrevScrollStateVersion = v;\r\n return of(true);\r\n }),\r\n filter(v => !!v),\r\n distinctUntilChanged(),\r\n )\r\n }),\r\n )\r\n };\r\n const $initialRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH,\r\n }),\r\n $updateItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $chunkLoadingRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_UPDATE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS,\r\n }),\r\n $collapseItemsRenderStabilizer = renderStabilizer({\r\n prepareIterations: PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n prepareReupdateLength: PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS,\r\n }),\r\n $items = toObservable(this.items),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $snapScrollToStart = toObservable(this.snapScrollToStart),\r\n $snapScrollToEnd = toObservable(this.snapScrollToEnd),\r\n $waitForPreparation = toObservable(this.waitForPreparation);\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $dynamicSize, $snapScrollToStart, $snapScrollToEnd, $waitForPreparation]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged(),\r\n filter(([init, prerenderContainer]) => !!init && !!prerenderContainer),\r\n debounceTime(0),\r\n switchMap(([, prerenderContainer, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged((p, c) => {\r\n const pLength = p?.length ?? 0, cLength = c?.length ?? 0;\r\n return !((cLength > 0) || (pLength !== cLength && (pLength === 0 || cLength === 0)));\r\n }),\r\n tap(items => {\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (!v) {\r\n this.cacheClean();\r\n this.cleanup();\r\n this._readyForShow = false;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n scrollerComponent.stopScrolling();\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n } else {\r\n this._trackBox.isScrollEnd = true;\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n }),\r\n switchMap(v => {\r\n if (!v) {\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n return of(false);\r\n }\r\n const waitForPreparation = this.waitForPreparation();\r\n if (waitForPreparation) {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n this._cached = false;\r\n prerenderContainer!.on(this.items());\r\n }\r\n return $initialRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._trackBox.isScrollEnd = true;\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n }),\r\n );\r\n }\r\n if (this.prerenderable) {\r\n prerenderContainer!.off();\r\n }\r\n this._readyForShow = true;\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n return of(false);\r\n }),\r\n );\r\n } else {\r\n prerenderContainer!.off();\r\n return $items.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(items => {\r\n if (!items || items.length === 0) {\r\n this.cacheClean();\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = false;\r\n }\r\n this.classes.set({ prepared: false });\r\n this._$show.next(false);\r\n }\r\n this._trackBox.resetCollection(items, this.itemSize());\r\n }),\r\n switchMap(i => of((i ?? []).length > 0)),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._readyForShow = true;\r\n if (snapScrollToStart) {\r\n this._trackBox.isScrollStart = true;\r\n } else if (snapScrollToEnd) {\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.prepared = true;\r\n }\r\n this.classes.set({ prepared: true });\r\n this._$show.next(true);\r\n this._$fireUpdate.next(false);\r\n }),\r\n );\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $items.pipe(\r\n map(v => v?.length > 0),\r\n distinctUntilChanged(),\r\n takeUntilDestroyed(this._destroyRef),\r\n filter(v => !!v),\r\n tap(() => {\r\n this._cached = false;\r\n }),\r\n switchMap(() => {\r\n return $prerender.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n take(1),\r\n tap(cache => {\r\n if (!this._readyForShow) {\r\n this._trackBox.refreshCache(cache);\r\n this._cached = true;\r\n this._$fireUpdate.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this.focusedElement.set(v ?? null);\r\n }),\r\n ).subscribe();\r\n\r\n $list.pipe(\r\n takeUntilDestroyed(),\r\n filter(element => !!element),\r\n tap(element => {\r\n this._service.listElement = element;\r\n }),\r\n ).subscribe();\r\n\r\n const $defaultItemValue = toObservable(this.defaultItemValue),\r\n $selectByClick = toObservable(this.selectByClick),\r\n $collapseByClick = toObservable(this.collapseByClick),\r\n $isScrollStart = toObservable(this._isScrollStart),\r\n $isScrollFinished = toObservable(this._isScrollEnd),\r\n $scrollStartOffset = toObservable(this.scrollStartOffset),\r\n $scrollEndOffset = toObservable(this.scrollEndOffset),\r\n $isVertical = toObservable(this.direction).pipe(\r\n map(v => this.getIsVertical(v || DEFAULT_DIRECTION)),\r\n );\r\n\r\n $snapScrollToStart.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToStart = v;\r\n }),\r\n ).subscribe();\r\n\r\n $snapScrollToEnd.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapScrollToEnd = v;\r\n }),\r\n ).subscribe();\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 $isScrollStart.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(() => {\r\n if (this._scrollerComponent()?.scrollable) {\r\n this.onScrollReachStart.emit();\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $isScrollFinished.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n filter(v => !!v && this._readyForShow),\r\n tap(v => {\r\n if (this._scrollerComponent()?.scrollable) {\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 = toObservable(this._bounds).pipe(\r\n filter(b => !!b),\r\n ),\r\n $listBounds = toObservable(this._listBounds).pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = toObservable(this._scrollSize),\r\n $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $bufferSize = toObservable(this.bufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $maxBufferSize = toObservable(this.maxBufferSize).pipe(\r\n map(v => v < 0 ? DEFAULT_BUFFER_SIZE : v),\r\n ),\r\n $itemConfigMap = toObservable(this.itemConfigMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $snap = toObservable(this.snap),\r\n $isLazy = toObservable(this.collectionMode).pipe(\r\n map(v => this.getIsLazy(v || DEFAULT_COLLECTION_MODE)),\r\n ),\r\n $enabledBufferOptimization = toObservable(this.enabledBufferOptimization),\r\n $snappingMethod = toObservable(this.snappingMethod).pipe(\r\n map(v => this.getIsSnappingMethodAdvanced(v || DEFAULT_SNAPPING_METHOD)),\r\n ),\r\n $methodForSelecting = toObservable(this.methodForSelecting),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $collapsedIds = toObservable(this.collapsedIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $actualItems = toObservable(this._actualItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n debounceTime(0),\r\n ),\r\n $screenReaderMessage = toObservable(this.screenReaderMessage),\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\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.set(\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 const $itemsComposition = $items.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(items => {\r\n return combineLatest([$collapsedItemIds, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy }) => {\r\n if (items.length === 0 || !this._readyForShow || !(this.cachable && !this._cached &&\r\n !this._trackBox.isSnappedToStart && this._trackBox.isSnappedToEnd)) {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }\r\n return $updateItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n debounceTime(0),\r\n switchMap(() => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy });\r\n }),\r\n );\r\n }),\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.set(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()?.nativeElement;\r\n if (this.getIsMultiSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelecting = true;\r\n this._isNotSelecting = this._isSingleSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelecting = true;\r\n this._isNotSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.SELECT;\r\n } else if (this.getIsNotSelecting(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isNotSelecting = true;\r\n this._isSingleSelecting = this._isMultiSelecting = false;\r\n if (el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.methodOfSelecting = MethodsForSelectingTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n const $preventScrollSnapping = this.$preventScrollSnapping;\r\n\r\n $preventScrollSnapping.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._trackBox.isScrollEnd;\r\n this._trackBox.isScrollStart = this._trackBox.isScrollEnd = false;\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n }\r\n }),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(false);\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.pipe(\r\n takeUntilDestroyed(),\r\n filter(() => this._readyForShow),\r\n switchMap(() => {\r\n return $collapseItemsRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdate.next(true);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n let isChunkLoading = false;\r\n const $loading = toObservable(this.loading);\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n skip(1),\r\n filter(v => !v),\r\n switchMap(() => {\r\n isChunkLoading = true;\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n return $actualItems.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n this._$fireUpdateNextFrame.next(true);\r\n }),\r\n switchMap(() => $chunkLoadingRenderStabilizer.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n take(1),\r\n tap(() => {\r\n isChunkLoading = false;\r\n this._trackBox.resetCacheChunkInfo();\r\n const scrollbar = this._scrollerComponent();\r\n if (!!scrollbar) {\r\n scrollbar.stopScrollbar();\r\n scrollbar.refreshScrollbar();\r\n }\r\n }),\r\n )),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n $loading.pipe(\r\n takeUntilDestroyed(),\r\n skip(1),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n if (v) {\r\n this._isLoading = true;\r\n }\r\n }),\r\n filter(v => !v),\r\n tap(() => {\r\n if (this._readyForShow) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }),\r\n debounceTime(100),\r\n tap(() => {\r\n this._isLoading = false;\r\n }),\r\n ).subscribe();\r\n\r\n const update = (params: {\r\n snapScrollToStart: boolean, snapScrollToEnd: boolean; bounds: ISize; listBounds: ISize; scrollEndOffset: number;\r\n items: IVirtualListCollection<Object>; itemConfigMap: IVirtualListItemConfigMap; scrollSize: number; itemSize: number;\r\n bufferSize: number; maxBufferSize: number; snap: boolean; isVertical: boolean; dynamicSize: boolean;\r\n enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean; collapsedIds: Array<Id>;\r\n }, optimization: boolean = false, reupdate: boolean = false) => {\r\n const {\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction, collapsedIds,\r\n } = params;\r\n const scroller = this._scrollerComponent();\r\n let totalSize = 0;\r\n if (scroller) {\r\n const collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n fireUpdate = emitUpdate || reupdate || (!optimization && !userAction) || this._$scrollingTo.getValue();\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0) :\r\n (isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0),\r\n displayItems: IRenderVirtualListCollection;\r\n\r\n const { width, height } = bounds, viewportSize = (isVertical ? height : width),\r\n opts: IUpdateCollectionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, dynamicSize, isVertical, itemSize,\r\n bufferSize, maxBufferSize, scrollSize: actualScrollSize, snap, enabledBufferOptimization,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\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 } 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.set(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 this.snappingHandler();\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = Math.round(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 scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart) ||\r\n (snapScrollToStart && currentScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n if (currentScrollSize !== roundedScrollPositionAfterUpdate) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n this._trackBox.isScrollEnd;\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: 0, userAction,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (!snapScrollToStart && snapScrollToEnd && !scroller.scrollable) ||\r\n (scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING >= roundedMaxPositionAfterUpdate) ||\r\n (roundedScrollPositionAfterUpdate >= scrollPositionAfterUpdate + MIN_PIXELS_FOR_PREVENT_SNAPPING)) {\r\n this._trackBox.clearDelta();\r\n\r\n if (!this._trackBox.isSnappedToEnd) {\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: roundedMaxPositionAfterUpdate,\r\n fireUpdate: true, behavior: BEHAVIOR_INSTANT, userAction: false,\r\n blending: false, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller?.scrollTo?.(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n\r\n if (scrollSize !== scrollPositionAfterUpdate &&\r\n ((scrollPositionAfterUpdate >= 0 && scrollPositionAfterUpdate < roundedMaxPositionAfterUpdate) ||\r\n (scrollSize !== roundedMaxPositionAfterUpdate || currentScrollSize !== scrollPositionAfterUpdate))) {\r\n this._trackBox.clearDelta();\r\n\r\n if (this._readyForShow) {\r\n this.emitScrollEvent(true, false, userAction);\r\n }\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollPositionAfterUpdate, blending: true, userAction,\r\n fireUpdate, behavior: BEHAVIOR_INSTANT, duration: this.animationParams().scrollToItem,\r\n };\r\n scroller.scrollTo(params);\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(this.getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft, cacheVersion));\r\n }\r\n }\r\n };\r\n\r\n let prevItems: IVirtualListCollection = [];\r\n const debouncedUpdate = debounce(update, 0, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1);\r\n $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return combineLatest([$snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize, $itemSize,\r\n $collapsedItemIds, $bufferSize, $maxBufferSize, $snap, $isVertical, $dynamicSize, $enabledBufferOptimization, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize,\r\n collapsedIds, bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion,\r\n ]) => {\r\n let itemsChanged = false;\r\n if (prevItems !== items) {\r\n itemsChanged = true;\r\n prevItems = items;\r\n }\r\n const enabledOptimization = this.scrollingSettings()?.optimization ?? DEFAULT_SCROLLING_SETTINGS.optimization,\r\n scroller = this._scrollerComponent(), velocity = this._scrollerComponent()?.averageVelocity ?? 0,\r\n maxScrollSize = isVertical ? (scroller?.scrollHeight || 0) : (scroller?.scrollWidth ?? 0),\r\n isEdges = scrollSize === 0 || scrollSize === maxScrollSize, isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = dynamicSize && !itemsChanged && hasUserAction && !isScrolling && (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1),\r\n rerenderOptimization = enabledOptimization && dynamicSize && !itemsChanged && (hasUserAction || hasScrollbarUserAction) && !isEdges && velocity > 0 &&\r\n (velocity > MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL2 || hasUserAction);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, collapsedIds,\r\n bufferSize, maxBufferSize, snap, isVertical, dynamicSize, enabledBufferOptimization, cacheVersion, userAction: hasUserAction,\r\n }, rerenderOptimization, itemsChanged);\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $scroller = toObservable(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 $scrollerScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scroll),\r\n ),\r\n $scrollerScrollEnd = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scrollEnd),\r\n ),\r\n $scrollbarScroll = $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n take(1),\r\n switchMap(scroller => scroller.$scrollbarScroll),\r\n );\r\n\r\n const scrollHandler = (userAction: boolean = false) => {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this._isVertical,\r\n scrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n actualScrollSize = scrollSize;\r\n\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n\r\n this._scrollSize.set(actualScrollSize);\r\n }\r\n };\r\n\r\n $scroller.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n switchMap(scroller => {\r\n return $scrollbarScroll.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(userAction => {\r\n hasScrollbarUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, hasUserAction);\r\n }\r\n if (this._readyForShow) {\r\n if (userAction) {\r\n if (this._trackBox.isSnappedToStart) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n if (this._trackBox.isSnappedToEnd) {\r\n this._$preventScrollSnapping.next(true);\r\n }\r\n }\r\n }\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 hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(false, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\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 hasUserAction = userAction;\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n this.emitScrollEvent(true, this._readyForShow, userAction);\r\n }\r\n scrollHandler(userAction);\r\n }),\r\n ).subscribe();\r\n\r\n const $scrollTo = this.$scrollTo,\r\n $scrollToExecutor = this.$scrollToExecutor;\r\n\r\n combineLatest([$scroller, $trackBy, $scrollTo]).pipe(\r\n filter(([scroller]) => scroller !== undefined),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n tap(({ event }) => {\r\n this._$scrollingTo.next(true);\r\n this._$scrollToExecutor.next(event);\r\n }),\r\n ).subscribe();\r\n\r\n $scrollToExecutor.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(event => {\r\n const trackBy = this.trackBy(), scrollerComponent = this._scrollerComponent(),\r\n {\r\n id, iteration = 0, blending = false,\r\n isLastIteration = false, scrollCalled = false, cb,\r\n } = event;\r\n const nextIteration = iteration + 1, finished = nextIteration >= MAX_SCROLL_TO_ITERATIONS, fireUpdate = false;\r\n\r\n if (!this._readyForShow) {\r\n return of([finished, { iteration: nextIteration, blending, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n this._$preventScrollSnapping.next(true);\r\n\r\n if (scrollerComponent) {\r\n const items = this._actualItems();\r\n if (items && items.length) {\r\n const dynamicSize = this.dynamicSize(), itemSize = this.itemSize(), snapScrollToEnd = this.snapScrollToEnd();\r\n\r\n if (dynamicSize) {\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap(), items = this._actualItems(), isVertical = this._isVertical,\r\n currentScrollSize = isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft,\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snap: this.snap(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n };\r\n\r\n let scrollSize = snapScrollToEnd && this._trackBox.isSnappedToEnd ?\r\n (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth) :\r\n this._trackBox.getItemPosition(id, itemConfigMap, opts);\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\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 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 this.snappingHandler();\r\n\r\n scrollSize = this._trackBox.getItemPosition(id, itemConfigMap, { ...opts, scrollSize: actualScrollSize, fromItemId: id });\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\r\n }\r\n const notChanged = scrollSize === currentScrollSize;\r\n if (!notChanged && iteration < MAX_SCROLL_TO_ITERATIONS) {\r\n this._trackBox.clearDelta();\r\n const params: IScrollToParams = {\r\n [isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, behavior: BEHAVIOR_INSTANT as ScrollBehavior,\r\n fireUpdate, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([finished, {\r\n id, iteration: nextIteration, blending,\r\n isLastIteration: nextIteration < MAX_SCROLL_TO_ITERATIONS, scrollCalled, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._scrollSize.set(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]).pipe(delay(0));\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 currentScrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n scrollSize = index * this.itemSize();\r\n if (currentScrollSize !== scrollSize) {\r\n this._$preventScrollSnapping.next(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, scrollCalled, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, scrollCalled, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n tap(([finished, params]) => {\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n if (!finished && !scrollParams?.scrollCalled) {\r\n this._$scrollToExecutor.next(params as IScrollParams);\r\n return;\r\n }\r\n\r\n if (this._readyForShow) {\r\n this._trackBox.preventScrollSnapping(true);\r\n }\r\n\r\n this._$scrollingTo.next(false);\r\n if (!this.dynamicSize()) {\r\n this._$fireUpdate.next(true);\r\n this._scrollerComponent()?.refresh(false, true);\r\n }\r\n this.emitScrollEvent(true, false, true);\r\n scrollParams?.cb?.();\r\n }),\r\n ).subscribe();\r\n\r\n const $itemRenderer = toObservable(this.itemRenderer);\r\n\r\n $itemRenderer.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n filter(v => !!v),\r\n tap(v => {\r\n this._itemRenderer.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n $bounds.pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(value => {\r\n const size: ISize = { width: value.width, height: value.height };\r\n this.onViewportChange.emit(objectAsReadonly(size));\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();\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.selectedIds = 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.set(v);\r\n\r\n if (isCollapsedIdsFirstEmit >= 2) {\r\n const curr = this.collapsedIds();\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.collapsedIds = v;\r\n }),\r\n ).subscribe();\r\n\r\n this.$destroy.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n debouncedUpdate.dispose();\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this._$viewInit.next(true);\r\n\r\n this._$fireUpdate.next(false);\r\n }\r\n\r\n private onAfterResize(update = false) {\r\n this.snappingHandler();\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n if (this._readyForShow && update) {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const updatebale = this._readyForShow;\r\n if (updatebale) {\r\n this._$fireUpdate.next(false);\r\n }\r\n scroller.refresh(updatebale, updatebale);\r\n }\r\n }\r\n }\r\n\r\n private checkBoundsOfElements() {\r\n const changed = this._trackBox.checkBoundsOfElements();\r\n if (changed) {\r\n const readyForShow = this._readyForShow,\r\n isScrolling = this._$scrollingTo.getValue();\r\n this._trackBox.changes(true, readyForShow && !isScrolling);\r\n }\r\n }\r\n\r\n private snappingHandler() {\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n const isVertical = this.isVertical,\r\n maxScrollSize = Math.round(isVertical ? scroller.scrollHeight ?? 0 : scroller.scrollWidth ?? 0),\r\n scrollSize = isVertical ? scroller.scrollTop ?? 0 : scroller.scrollLeft ?? 0,\r\n actualScrollSize = Math.round(scrollSize);\r\n if (this._readyForShow && !this._isLoading) {\r\n if (maxScrollSize >= 0) {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n if (isScrollStart) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING));\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(isScrollEnd);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = isScrollEnd;\r\n }\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this.snapScrollToStart(), snapScrollToEnd = this.snapScrollToEnd();\r\n if (!snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n } else if (snapScrollToStart && snapScrollToEnd) {\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n } else {\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private emitScrollEvent(isScrollEnd: boolean = false, update: boolean = true, userAction: boolean = false) {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scrollerEl = this._scroller()?.nativeElement, scrollerComponent = this._scrollerComponent();\r\n if (scrollerEl && scrollerComponent) {\r\n const isVertical = this._isVertical, scrollSize = (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n maxScrollSize = (isVertical ? scrollerComponent.scrollHeight : scrollerComponent.scrollWidth),\r\n bounds = this._bounds() || { x: 0, y: 0, width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n currentScrollSize = this._scrollSize();\r\n this._trackBox.deltaDirection = currentScrollSize > scrollSize ? -1 : currentScrollSize < scrollSize ? 1 : 0;\r\n const itemsRange = formatActualDisplayItems(this._service.displayItems, this.scrollStartOffset(), this.scrollEndOffset(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._trackBox.scrollDirection, container: scrollerEl,\r\n list: this._list()!.nativeElement, delta: this._trackBox.delta,\r\n deltaOfNewItems: this._trackBox.deltaOfNewItems, isVertical,\r\n scrollSize,\r\n itemsRange,\r\n isEnd: !scrollerComponent.scrollable || this._trackBox.isSnappedToEnd || (Math.round(scrollSize) === Math.round(maxScrollSize)),\r\n userAction,\r\n });\r\n if (update) {\r\n this._$scroll.next(event);\r\n }\r\n\r\n if (isScrollEnd) {\r\n this.onScrollEnd.emit(event);\r\n } else {\r\n this.onScroll.emit(event);\r\n }\r\n }\r\n }\r\n\r\n private getIsSnappingMethodAdvanced(m?: SnappingMethod) {\r\n const method = m || this.snappingMethod();\r\n return isSnappingMethodAdvenced(method);\r\n }\r\n\r\n private getIsNotSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.NONE);\r\n }\r\n\r\n private getIsSingleSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.SELECT);\r\n }\r\n\r\n private getIsMultiSelecting(m?: MethodForSelecting) {\r\n const method = m || this.methodForSelecting();\r\n return isMethodForSelecting(method, MethodsForSelecting.MULTI_SELECT);\r\n }\r\n\r\n private getIsVertical(d?: Direction) {\r\n const dir = d || this.direction();\r\n return isDirection(dir, Directions.VERTICAL);\r\n }\r\n\r\n private getIsLazy(m?: CollectionMode) {\r\n const mode = m || this.collectionMode();\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()) {\r\n if (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS && this._snapContainerRef) {\r\n while (this._snappedDisplayComponents.length < MAX_REGULAR_SNAPED_COMPONENTS) {\r\n const comp = this._snapContainerRef.createComponent(this._itemComponentClass);\r\n comp.instance.renderer = this._itemRenderer();\r\n comp.instance.regular = true;\r\n this._snappedDisplayComponents.push(comp);\r\n this._trackBox.snappedDisplayComponents = this._snappedDisplayComponents;\r\n this._resizeSnappedObserver = new ResizeObserver(this._resizeSnappedComponentHandler);\r\n this._resizeSnappedObserver.observe(comp.instance.element);\r\n }\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 const doMap: { [id: number]: number } = {};\r\n let i = 0;\r\n for (let 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 = this._itemRenderer();\r\n doMap[id] = i;\r\n }\r\n }\r\n while (components.length < maxLength) {\r\n const comp = listContainerRef.createComponent(this._itemComponentClass);\r\n const id = comp.instance.id;\r\n comp.instance.renderer = this._itemRenderer();\r\n doMap[id] = i;\r\n components.push(comp);\r\n i++;\r\n }\r\n this._trackBox.setDisplayObjectIndexMapById(doMap);\r\n }\r\n }\r\n\r\n private updateRegularRenderer() {\r\n this._resizeSnappedComponentHandler();\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(), 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 | null {\r\n return this._service.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 this._elementRef.nativeElement.focus();\r\n this._service.focusById(id, align, this.scrollBehavior());\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) | null = null, options: IScrollOptions | null = null) {\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\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._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Scrolls the scroll area to the first item in the collection.\r\n */\r\n scrollToStart(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), firstItem = items.length > 0 ? items[0] ?? null : null, id = firstItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (!!firstItem) {\r\n this._elementRef.nativeElement.focus();\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollStart.set(true);\r\n this._trackBox.isScrollStart = true;\r\n this._trackBox.isScrollEnd = false;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The scrollToEndItem method is deprecated. Use the scrollToEnd method.\r\n */\r\n scrollToEndItem(cb?: () => void, options?: IScrollOptions) {\r\n throw Error('The scrollToEndItem method is deprecated. Use the scrollToEnd method.');\r\n }\r\n\r\n /**\r\n * Scrolls the list to the end of the content size.\r\n */\r\n scrollToEnd(cb: (() => void) | null = null, options: IScrollOptions | null = null) {\r\n const scroller = this._scrollerComponent();\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n const behavior = options?.behavior ?? BEHAVIOR_INSTANT,\r\n blending = options?.blending ?? false,\r\n focused = options?.focused ?? true,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this.items(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem[trackBy],\r\n actualIteration = validateScrollIteration(iteration);\r\n this._elementRef.nativeElement.focus();\r\n if (!this._scrollerComponent()?.scrollable) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, iteration: actualIteration, isLastIteration: actualIteration === MAX_SCROLL_TO_ITERATIONS, cb: () => {\r\n this._isScrollEnd.set(true);\r\n this._trackBox.isScrollStart = false;\r\n this._trackBox.isScrollEnd = true;\r\n this._$fireUpdate.next(true);\r\n this.scrollToFinalize(id, focused, cb);\r\n }\r\n });\r\n }\r\n\r\n private scrollToFinalize(id: Id, focused: boolean, cb: (() => void) | null) {\r\n if (focused) {\r\n const el = this._service.getFocusedElementById(id);\r\n if (!!el) {\r\n this._service.focus(el, FocusAlignments.NONE);\r\n }\r\n }\r\n if (typeof cb === 'function') {\r\n cb?.();\r\n }\r\n }\r\n\r\n protected cleanup() {\r\n const displayItems: IRenderVirtualListCollection = [];\r\n this._service.collection = displayItems;\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n this.tracking();\r\n this.emitScrollEvent(true, false, false);\r\n }\r\n\r\n /**\r\n * Force clearing the cache.\r\n */\r\n protected cacheClean() {\r\n this._cached = false;\r\n if (this.dynamicSize()) {\r\n this._trackBox.cacheClean();\r\n }\r\n const prerenderContainer = this._prerender();\r\n if (!!prerenderContainer) {\r\n prerenderContainer.clear();\r\n prerenderContainer.off();\r\n }\r\n this._collapsedItemIds.set([]);\r\n this._isScrollStart.set(true);\r\n this._isScrollEnd.set(false);\r\n this._totalSize.set(0);\r\n this._scrollSize.set(0);\r\n const scrollerComponent = this._scrollerComponent();\r\n if (scrollerComponent) {\r\n scrollerComponent.reset();\r\n }\r\n }\r\n\r\n /**\r\n * @deprecated\r\n * The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.\r\n */\r\n stopSnappingScrollToEnd() {\r\n throw Error('The stopSnappingScrollToEnd method is deprecated. Use the preventSnapping method.');\r\n }\r\n\r\n /**\r\n * Prevents the list from snapping to its start or end edge.\r\n */\r\n preventSnapping() {\r\n if (!this._readyForShow) {\r\n return;\r\n }\r\n const scroller = this._scrollerComponent();\r\n this._isScrollStart.set(false);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.preventScrollSnapping(true);\r\n if (scroller) {\r\n scroller.stopScrolling();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.dispose();\r\n }\r\n\r\n private dispose() {\r\n this._$destroy.next();\r\n\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._resizeSnappedObserver) {\r\n this._resizeSnappedObserver.disconnect();\r\n }\r\n\r\n if (!!this._snappedDisplayComponents) {\r\n while (this._snappedDisplayComponents.length > 0) {\r\n const comp = this._displayComponents.shift();\r\n comp?.destroy();\r\n }\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() }}\r\n</div>\r\n\r\n<ng-prerender-container #prerender [bounds]=\"bounds()!\" [direction]=\"direction()\"\r\n [dynamic]=\"dynamicSize()\" [isVertical]=\"isVertical\" [itemSize]=\"itemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset()\" [endOffset]=\"scrollEndOffset()\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (snap()) {\r\n <div localeSensitive [langTextDir]=\"langTextDir()\" #snappedContainer class=\"ngvl__snapped-container\"\r\n [ngClass]=\"classes()\">\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}\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset()\"\r\n [direction]=\"direction()\" [endOffset]=\"scrollEndOffset()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [focusedElement]=\"focusedElement()\" [loading]=\"loading()\" [overscrollEnabled]=\"overscrollEnabled()\"\r\n [scrollbarEnabled]=\"scrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\"\r\n [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\" [scrollingSettings]=\"scrollingSettings()\">\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 { 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: [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 { NgScrollBarComponent } from './ng-scroll-bar.component';\r\n\r\n@NgModule({\r\n declarations: [NgScrollBarComponent],\r\n exports: [NgScrollBarComponent],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgScrollBarModule { }\r\n","import { 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\nimport { CdkScrollableModule } from '@angular/cdk/scrolling';\r\n\r\n@NgModule({\r\n declarations: [NgScrollerComponent],\r\n exports: [NgScrollerComponent],\r\n imports: [CommonModule, NgScrollBarModule, LocaleSensitiveModule, CdkScrollableModule],\r\n schemas: [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 { ItemClickModule } from '../../../../directives';\r\nimport { NgPrerenderVirtualListItemComponent } from './ng-prerender-list-item.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderVirtualListItemComponent],\r\n exports: [NgPrerenderVirtualListItemComponent],\r\n imports: [CommonModule, ItemClickModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderVirtualListItemModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderScrollerComponent } from './ng-prerender-scroller.component';\r\nimport { LocaleSensitiveModule } from '../../../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderScrollerComponent],\r\n exports: [NgPrerenderScrollerComponent],\r\n imports: [CommonModule, LocaleSensitiveModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderScrollerModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderVirtualListItemModule } from '../ng-prerender-list-item/ng-prerender-list-item.module';\r\nimport { NgPrerenderScrollerModule } from '../ng-prerender-scroller/ng-prerender-scroller.module';\r\nimport { NgPrerenderList } from './ng-prerender-list.component';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderList],\r\n exports: [NgPrerenderList],\r\n imports: [CommonModule, NgPrerenderVirtualListItemModule, NgPrerenderScrollerModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderListModule { }\r\n","import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgPrerenderContainer } from './ng-prerender-container.component';\r\nimport { NgPrerenderListModule } from './components/ng-prerender-list/ng-prerender-list.module';\r\n\r\n@NgModule({\r\n declarations: [NgPrerenderContainer],\r\n exports: [NgPrerenderContainer],\r\n imports: [CommonModule, NgPrerenderListModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class NgPrerenderContainerModule { }\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/ng-list-item/ng-virtual-list-item.module';\r\nimport { NgScrollerModule } from './components/ng-scroller/ng-scroller.module';\r\nimport { NgPrerenderContainerModule } from './components/ng-prerender-container/ng-prerender-container.module';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListComponent],\r\n exports: [NgVirtualListComponent],\r\n imports: [CommonModule, NgVirtualListItemModule, NgScrollerModule, NgPrerenderContainerModule, 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/ng-scroll-bar/ng-scroll-bar-public.service';\r\nexport * from './lib/components/ng-scroll-bar/types/scrollbar-state';\r\nexport * from './lib/components/ng-scroll-bar/enums/scrollbar-states';\r\nexport * from './lib/components/ng-list-item/ng-virtual-list-item.component';\r\nexport * from './lib/ng-virtual-list-public.service';\r\nexport * from './lib/ng-virtual-list.service';\r\nexport * from './lib/ng-virtual-list.component';\r\nexport * from './lib/ng-virtual-list.module';\r\nexport * from './lib/interfaces';\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","PX","ITEM_ID","BehaviorSubject","tap","switchMap","filter","i2.ItemClickDirective","ScrollerDirection","TOP","LEFT","INSTANT","SCROLL_EVENT","takeUntil","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective"],"mappings":"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"}
|