ng-virtual-list 21.12.0 → 22.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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/alignments.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/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/spreading-modes.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/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/components/ng-list-item/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/events/track-box-events.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes-types.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/virtual-click/virtual-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/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/utils/get-service-id-prop.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/utils/object.ts","../../../projects/ng-virtual-list/src/lib/core/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../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-select-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collapse-mode.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/utils/is-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts","../../../projects/ng-virtual-list/src/lib/utils/normalize-collection.ts","../../../projects/ng-virtual-list/src/lib/utils/is-spreading-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/get-scroll-state-version.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/utils/animator/const/index.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/enums/scroller-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/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.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/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/virtual-click/virtual-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/lib/transformations/linear.ts","../../../projects/ng-virtual-list/src/lib/transformations/event-horizon.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/index.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/21.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/21.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 * Alignments\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Alignments {\r\n NONE = 'none',\r\n CENTER = 'center',\r\n}","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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/21.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 * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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 * Modes for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollapsingModes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are collapsed one by one.\r\n */\r\n MULTI_COLLAPSE = 'multi-collapse',\r\n /**\r\n * Accordion collapsible list items.\r\n */\r\n ACCORDION = 'accordion',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/selecting-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModes {\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 * SnapToAtemAligns.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnapToItemAligns {\r\n /**\r\n * An anchor indicates the beginning of an element.\r\n */\r\n START = 'start',\r\n /**\r\n * The anchor points to the middle of the element.\r\n */\r\n CENTER = 'center',\r\n /**\r\n * An anchor indicates the end of an element.\r\n */\r\n END = 'end',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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 * SpreadingModes.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/spreading-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SpreadingModes {\r\n /**\r\n * List elements are ordered according to the collection sequence.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * List elements are ordered cyclically, forming an infinite list.\r\n */\r\n INFINITY = 'infinity',\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/21.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 {\r\n Alignments, CollapsingModes, CollectionModes, SelectingModes, SnappingMethods, SnapToItemAligns, TextDirections, SpreadingModes,\r\n} from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams, IScrollingSettings } from '../interfaces';\r\nimport { SpreadingMode } from \"../types\";\r\nimport { Alignment, SnappingDistance, SnapToItemAlign } from \"../types\";\r\n\r\nexport const SERVICE_PROP_DUMMY_ID = '__service-dummy-id__';\r\n\r\nexport const SERVICE_PROP_DUMMY = '__service-dummy__';\r\n\r\nexport const SERVICE_TYPE_DUMMY = '__service-type-dummy__';\r\n\r\nexport const SERVICE_PROP_DUMMY_ENABLED = Symbol('__service-dummy-enabled__');\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_MIN_ITEM_SIZE = 1;\r\n\r\nexport const DEFAULT_MAX_ITEM_SIZE = Number.MAX_SAFE_INTEGER;\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_OVERLAPPING_SCROLLBAR = false;\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_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_SNAP_TO_ITEM_ALIGN: SnapToItemAlign = SnapToItemAligns.CENTER;\r\n\r\nexport const DEFAULT_SNAPPING_DISTANCE: SnappingDistance = '25%';\r\n\r\nexport const DEFAULT_SCROLLING_ONE_BY_ONE = false;\r\n\r\nexport const DEFAULT_ALIGNMENT: Alignment = Alignments.NONE;\r\n\r\nexport const DEFAULT_SPREADING_MODE: SpreadingMode = SpreadingModes.NORMAL;\r\n\r\nexport const DEFAULT_DIVIDES = 1;\r\n\r\nexport const DEFAULT_MOTION_BLUR = 0.15;\r\n\r\nexport const DEFAULT_MOTION_BLUR_ENABLED = false;\r\n\r\nexport const DEFAULT_MAX_MOTION_BLUR = 0.5;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n snapToItem: 150,\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 mass: 0.005,\r\n maxDistance: 100000,\r\n maxDuration: 4000,\r\n speedScale: 10,\r\n optimization: false,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_STICKY_ENABLED = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ZINDEX_WHEN_SELECTING = null;\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_COLLAPSING_MODES = CollapsingModes.MULTI_COLLAPSE;\r\n\r\nexport const DEFAULT_SELECTING_MODES = SelectingModes.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 DISABLED = 'disabled';\r\n\r\nexport const VIEWPORT = 'viewport';\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 UNSET = 'unset';\r\n\r\nexport const LEFT = 'left';\r\n\r\nexport const RIGHT = 'right';\r\n\r\nexport const POSITION = 'position';\r\n\r\nexport const POSITION_RELATIVE = 'relative';\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_ROW_ODD = ' item-row-odd';\r\n\r\nexport const PART_ITEM_ROW_EVEN = ' item-row-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 PART_DEFAULT_ITEM_FX = 'item-fx';\r\n\r\nexport const PART_ITEM_FX_NEW = ' item-fx-new';\r\n\r\nexport const PART_ITEM_FX_ODD = ' item-fx-odd';\r\n\r\nexport const PART_ITEM_FX_EVEN = ' item-fx-even';\r\n\r\nexport const PART_ITEM_ROW_FX_ODD = ' item-row-fx-odd';\r\n\r\nexport const PART_ITEM_ROW_FX_EVEN = ' item-row-fx-even';\r\n\r\nexport const PART_ITEM_FX_SNAPPED = ' item-fx-snapped';\r\n\r\nexport const PART_ITEM_FX_SELECTED = ' item-fx-selected';\r\n\r\nexport const PART_ITEM_FX_COLLAPSED = ' item-fx-collapsed';\r\n\r\nexport const PART_ITEM_FX_FOCUSED = ' item-fx-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_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';\r\n\r\nexport const PERCENTAGE_VALUE_PATTERN = /^([\\d]+%)$/;\r\n\r\nexport const Z_INDEX_NONE = '-1',\r\n Z_INDEX_0 = '0',\r\n Z_INDEX_1 = '1',\r\n Z_INDEX_2 = '2',\r\n Z_INDEX_3 = '3';","export const NGVL_INDEX = 'ngvl-index',\r\n /**\r\n * getListElementByIndex\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n /**\r\n * getListElements\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","/**\r\n * createDisplayId\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number, rotationZ: number) => {\r\n return rotationZ !== 0 ? `${__matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY)} rotateZ(${rotationZ}deg)` : __matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY);\r\n};\r\n\r\nconst __matrix3d__ = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number) => {\r\n return `matrix3d(\r\n ${scaleX}, 0, ${rotationX}, 0,\r\n 0, ${scaleY}, ${rotationY}, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, ${z}, ${scaleZ}\r\n )`;\r\n};\r\n","import { matrix3d } from \"../utils\";\r\n\r\nexport const ID = 'id',\r\n NGVL_VISIBILITY = 'ngvl-visibility',\r\n MATRIX_3D_HIDDEN = matrix3d(-1000, -1000, 0, 1, 1, 1, 0, 0, 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","/**\r\n * TrackBoxEvents\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/core/events/track-box-events.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/enums/selecting-modes-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModesTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { 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 } from './core/track-box';\r\nimport { TrackBoxEvents } from './core/events';\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap } from './models';\r\nimport { IAnimationParams, IRect, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirections } from './enums';\r\nimport { TextDirection } from './types';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK,\r\n DEFAULT_ITEM_SIZE, DEFAULT_SELECT_BY_CLICK, DEFAULT_SNAP_TO_ITEM, DEFAULT_ZINDEX_WHEN_SELECTING, 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/21.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 _$virtualClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $virtualClick = this._$virtualClick.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 _$selectingMode = new BehaviorSubject<SelectingModesTypes>(0);\r\n $selectingMode = this._$selectingMode.asObservable();\r\n\r\n set selectingMode(v: SelectingModesTypes) {\r\n this._$selectingMode.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n set focusedId(v: Id | null) {\r\n if (this._$focusedId.getValue() !== v) {\r\n this._$focusedId.next(v);\r\n }\r\n }\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 zIndexWhenSelecting: string | null = DEFAULT_ZINDEX_WHEN_SELECTING;\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 snapToItem: boolean = DEFAULT_SNAP_TO_ITEM;\r\n\r\n isInfinity: boolean = false;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n itemSize: number = DEFAULT_ITEM_SIZE;\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 isNoneCollapse: boolean = false;\r\n\r\n isMultipleCollapse: boolean = false;\r\n\r\n isAccordionCollapse: boolean = false;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n items: IVirtualListCollection = [];\r\n\r\n itemConfigMap: IVirtualListItemConfigMap = {};\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 _$intersectionElementBySnapToItemAlign = new BehaviorSubject<Id | null>(null);\r\n readonly $intersectionElementBySnapToItemAlign = this._$intersectionElementBySnapToItemAlign.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._$selectingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 virtualClick(data: IRenderVirtualListItem | null) {\r\n this._$virtualClick.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) {\r\n this._trackBox?.changes(immediately, false);\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._$selectingMode.getValue()) {\r\n case SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 if (this.isNoneCollapse) {\r\n return;\r\n }\r\n\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.collapsable)) {\r\n const allGroups: Array<Id> = [];\r\n if (this.isAccordionCollapse) {\r\n const items = this.items, itemConfigMap = this.itemConfigMap, trackBy = this.trackBy;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n\r\n const curr = this.isAccordionCollapse ? allGroups : [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (!collapsed) {\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 if (this.isAccordionCollapse) {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\r\n });\r\n } else {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\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 focusList() {\r\n const element = this.listElement;\r\n if (!!element) {\r\n element.focus({ preventScroll: true });\r\n }\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 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 getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n return this._trackBox?.getComponentBoundsByIntersectionPosition(position, maxPosition) ?? null;\r\n }\r\n\r\n setIntersectionElementBySnapToItemAlign(id: Id | null) {\r\n if (this._$intersectionElementBySnapToItemAlign.getValue() !== id) {\r\n this._$intersectionElementBySnapToItemAlign.next(id);\r\n }\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | 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 } 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/21.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 $virtualClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$virtualClick; };\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 collapsedIds(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 collapsedIds() { 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 */\r\n update(immediately: boolean = false) {\r\n this._internalService.update(immediately);\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 { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, Signal, signal, TemplateRef, viewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { map, tap } from 'rxjs';\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, PART_DEFAULT_ITEM_FX, PART_ITEM_FX_COLLAPSED,\r\n PART_ITEM_FX_EVEN, PART_ITEM_FX_FOCUSED, PART_ITEM_FX_NEW, PART_ITEM_FX_ODD, PART_ITEM_FX_SELECTED, PART_ITEM_FX_SNAPPED,\r\n PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, PART_ITEM_ROW_ODD, PART_ITEM_ROW_EVEN,\r\n PART_ITEM_ROW_FX_ODD, PART_ITEM_ROW_FX_EVEN,\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,\r\n} from '../const';\r\nimport { TextDirections } from '../../../enums';\r\nimport { TextDirection } from '../../../types';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { createDisplayId, matrix3d } from '../utils';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\nimport { IBaseVirtualListItemComponent } from '../../../interfaces/base-virtual-list-item-component';\r\nimport { Color } from '../../../types';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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\n@Component({\r\n selector: 'ng-base-virtual-list-item',\r\n template: '',\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BaseVirtualListItemComponent implements IBaseVirtualListItemComponent {\r\n protected _item = viewChild<ElementRef<HTMLDivElement>>('item');\r\n\r\n protected _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\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 set isSelected(v: boolean) {\r\n if (this._isSelected !== v) {\r\n this._isSelected = v;\r\n\r\n this.update();\r\n }\r\n }\r\n get isSelected() { return this._isSelected; }\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 fxPart = signal<string>(PART_DEFAULT_ITEM_FX);\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 _blendColor: Color | null = null;\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 get zIndex() {\r\n return this._elementRef.nativeElement.style.zIndex;\r\n }\r\n\r\n get visibility() {\r\n return this._elementRef.nativeElement.style.visibility;\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 effect(() => {\r\n const part = this.part();\r\n this._elementRef.nativeElement.setAttribute('part', part);\r\n });\r\n\r\n const $focus = this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n map(id => id === this.itemId),\r\n );\r\n\r\n $focus.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n const focus = toSignal($focus);\r\n\r\n this.classes = computed(() => {\r\n const data = this.data(), _focus = focus() ?? false;\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]: _focus,\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 if (this._service.isVertical) {\r\n this._elementRef.nativeElement.style.height = `${this._service.itemSize}px`;\r\n } else {\r\n this._elementRef.nativeElement.style.width = `${this._service.itemSize}px`;\r\n }\r\n\r\n this.hide();\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 itemElement = this._item()?.nativeElement, containerElement = this._container()?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n if (this._service.zIndexWhenSelecting !== null && this._isSelected) {\r\n styles.zIndex = this._service.zIndexWhenSelecting;\r\n } else {\r\n styles.zIndex = data.config.zIndex;\r\n }\r\n this._blendColor = data.config.blendColor ?? null;\r\n if (!!containerElement && !!data.config.blendColor) {\r\n containerElement.style.opacity = String(data.config.opacity);\r\n }\r\n if (!!data.config.filter) {\r\n styles.filter = data.config.filter;\r\n }\r\n if (this.item?.config?.dynamic && 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 ?\r\n (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) :\r\n 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 = matrix3d(data.measures.transformedX, data.measures.transformedY, data.measures.z, data.measures.scaleX, data.measures.scaleY,\r\n data.measures.scaleZ, data.measures.rotationX, data.measures.rotationY, data.measures.rotationZ);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n itemElementStyles.maxHeight = styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n\r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n }\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 const odd = v?.config.odd, rowOdd = v?.measures.row.odd;\r\n\r\n let part = PART_DEFAULT_ITEM, fxPart = PART_DEFAULT_ITEM_FX;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n part += rowOdd ? PART_ITEM_ROW_ODD : PART_ITEM_ROW_EVEN;\r\n fxPart += odd ? PART_ITEM_FX_ODD : PART_ITEM_FX_EVEN;\r\n fxPart += rowOdd ? PART_ITEM_ROW_FX_ODD : PART_ITEM_ROW_FX_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n fxPart += PART_ITEM_FX_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n fxPart += PART_ITEM_FX_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n fxPart += PART_ITEM_FX_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n fxPart += PART_ITEM_FX_NEW;\r\n }\r\n if (this.hasFocus()) {\r\n part += PART_ITEM_FOCUSED;\r\n fxPart += PART_ITEM_FX_FOCUSED;\r\n }\r\n this.part.set(part);\r\n this.fxPart.set(fxPart);\r\n }\r\n\r\n protected hasFocus() {\r\n return this._service.focusedId === this.itemId;\r\n }\r\n\r\n getBounds(): ISize {\r\n const el = this._item()?.nativeElement;\r\n if (!!el) {\r\n const width = el.offsetWidth, height = el.offsetHeight;\r\n return { width, height, };\r\n }\r\n return { width: 0, height: 0 };\r\n }\r\n\r\n show() {\r\n if (!this.item?.config?.dynamic) {\r\n return;\r\n }\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n 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 if (!this.item?.config?.dynamic) {\r\n return;\r\n }\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 { 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 * VirtualClickDirective\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/21.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: '[virtualClick]',\r\n standalone: false,\r\n})\r\nexport class VirtualClickDirective {\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 !== null || v !== undefined) ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n onVirtualClick = 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.onVirtualClick.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, 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 { SelectingModesTypes } from '../../enums/selecting-modes-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, NGVL_VISIBILITY,\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/21.x/projects/ng-virtual-list/src/lib/components/ng-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 fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._service.focusedId = this.itemId ?? null;\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.getNavigationTimeout()),\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.$selectingMode, 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 SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 getNavigationTimeout() {\r\n return this._service.snapToItem ?\r\n Math.max(this._service.animationParams.snapToItem, this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER) :\r\n this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER;\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 !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this.getNavigationTimeout()),\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 !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this.getNavigationTimeout()),\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._data?.config.totalItems ?? 0,\r\n l = length > 0 ? (this._service.isInfinity ? (length + 1) : length) : 0;\r\n let index = tabIndex;\r\n while (index <= l) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_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 Number.MIN_SAFE_INTEGER;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, min = -(this._data?.config?.layoutIndexOffset ?? 0);\r\n let index = tabIndex;\r\n while (index >= min) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_VISIBILITY) !== VISIBILITY_HIDDEN) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return Number.MIN_SAFE_INTEGER;\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.virtualClick(this._data);\r\n }\r\n}\r\n","@let renderer = itemRenderer();\r\n@let class = classes();\r\n<div #item class=\"ngvl-item\" [ngClass]=\"class\" [part]=\"part()\" [attr.ngvl-index]=\"index()\" [attr.ngvl-visibility]=\"visibility\" tabindex=\"-1\">\r\n @if (_blendColor) {\r\n <div class=\"ngvl-item__blend-color\" [style.--blend-color]=\"_blendColor\"></div>\r\n }\r\n <div #container virtualClick [part]=\"fxPart()\" [maxClickDistance]=\"maxClickDistance()\" class=\"ngvl-item__container\"\r\n [ngClass]=\"class\" (onVirtualClick)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n }\r\n </div>\r\n</div>","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/21.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/21.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/21.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\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/21.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 get version() {\r\n return this._version;\r\n }\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 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}","/**\r\n * getServiceIdProp\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/core/utils/get-service-id-prop.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getServiceIdProp = (trackBy: string) => {\r\n return `__service-id-${trackBy}__`;\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\nimport { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED } from \"../const\";\r\nimport { getServiceIdProp } from \"./utils\";\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/21.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, trackBy: string): 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 const serviceIdProp = getServiceIdProp(trackBy);\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],\r\n isDummy = item?.data?.[SERVICE_PROP_DUMMY] && (item?.data?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (isDummy) {\r\n continue;\r\n }\r\n const itemTrackingProperty = (item as any)[serviceIdProp] ?? (item as any)[trackBy];\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] ?? null,\r\n data = item?.data,\r\n compId = comp?.instance?.id ?? null;\r\n if (comp !== null && compId === diId && compId !== null && data?.[SERVICE_PROP_DUMMY] !== SERVICE_PROP_DUMMY_ENABLED) {\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 (!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 (!!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","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}","export const START_COLLECTION_PREFIX_ID = 'n',\r\n END_COLLECTION_PREFIX_ID = 'p',\r\n 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\n * ItemDisplayMethods\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\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 { IRect, ISize } from \"../interfaces\";\r\nimport {\r\n DEFAULT_DIVIDES, HEIGHT_PROP_NAME, SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n 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\nimport { ScrollDirection } from \"../types\";\r\nimport { objectAsReadonly } from \"../utils/object\";\r\nimport { getServiceIdProp } from \"./utils\";\r\nimport {\r\n DEFAULT_BUFFER_EXTREMUM_THRESHOLD, DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH, DEFAULT_RESET_BUFFER_SIZE_TIMEOUT, END_COLLECTION_PREFIX_ID,\r\n IS_NEW, START_COLLECTION_PREFIX_ID,\r\n} from \"./const\";\r\nimport { Z_INDEX_0, Z_INDEX_1, Z_INDEX_2, Z_INDEX_3, } from '../const';\r\nimport {\r\n IGetItemPositionOptions, IGetMetricsReturns, IItem, IMetrics, IRecalculateMetricsOptions, IUpdateCollectionOptions,\r\n IUpdateCollectionReturns,\r\n} from \"./interfaces\";\r\nimport { TrackBoxEvents } from \"./events\";\r\nimport { Cache, CacheMapEvents, CacheMapListeners } from \"./types\";\r\nimport { ItemDisplayMethods } from \"./enums\";\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/21.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 _scrollDirection: ScrollDirection = 0;\r\n set scrollDirection(v: ScrollDirection) {\r\n if (this._scrollDirection === v) {\r\n return;\r\n }\r\n\r\n this._scrollDirection = v;\r\n }\r\n get scrollDirection() { return this._scrollDirection; }\r\n\r\n protected _trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n set trackBy(v: string) {\r\n if (this._trackBy === v) {\r\n return;\r\n }\r\n\r\n this._trackBy = v;\r\n }\r\n get trackBy() { return this._trackBy; }\r\n\r\n protected _divides: number = DEFAULT_DIVIDES;\r\n\r\n set divides(v: number) {\r\n if (this._divides === v) {\r\n return;\r\n }\r\n\r\n this._divides = v;\r\n }\r\n\r\n protected _isInfinity: boolean = false;\r\n\r\n set isInfinity(v: boolean) {\r\n if (this._isInfinity === v) {\r\n return;\r\n }\r\n\r\n this._isInfinity = 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 protected _isScrollStart: boolean = false;\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 _isScrollEnd: 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 _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 (!!item && 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 if (!!item) {\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\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 ?? options.fromItemId, 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(metrics.items, items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected, leftLayoutOffset: metrics.leftLayoutOffset };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams<I extends IItem>(metrics: IMetrics<I>, 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<I> {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize,\r\n scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign,\r\n deletedItemsMap, itemTransform } = 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, divides = this._divides,\r\n stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights: 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 * divides;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize * divides;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1,\r\n itemsFromDisplayEndToOffsetEnd = 0,\r\n 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 | null = null,\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 leftYOffset = 0,\r\n leftLayoutOffset = 0,\r\n leftLayoutIndexOffset = 0,\r\n rightLayoutIndexOffset = 0;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n let items: Array<I>;\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 items = [];\r\n const serviceIdProp = getServiceIdProp(trackBy);\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,\r\n stickyComponentSize = 0,\r\n row: {\r\n startItemIndex: number;\r\n endItemIndex: number;\r\n size: number;\r\n snapshotSize: number;\r\n deltaFromStartCreation: number;\r\n leftSizeOfAddedItems: number;\r\n leftSizeOfUpdatedItems: number;\r\n leftSizeOfDeletedItems: number;\r\n deltaOfNewItems: number;\r\n leftItemsOrRowsWeights: number | null;\r\n rightItemsWeight: number;\r\n leftHiddenItemsWeight: number;\r\n totalItemsToDisplayEndWeight: number;\r\n } = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const calculate = (i: number, l: number, li: number, isPrecollection: boolean = false, idPrefix: string | null = null) => {\r\n const ii = i + 1;\r\n if (ii > l) {\r\n return false;\r\n }\r\n const collectionItem = collection[i],\r\n id = collectionItem[trackBy],\r\n sticky = itemConfigMap?.[id]?.sticky ?? 0,\r\n isNewRow = i % divides === 0,\r\n isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li,\r\n isRowEnd = (isLastItemInRow || (!isLastItemInRow && isLastItem));\r\n items.push(isPrecollection ? { ...collectionItem, [serviceIdProp]: `_${idPrefix}-${id}_` } : collectionItem);\r\n if (isNewRow || row === null) {\r\n row = {\r\n startItemIndex: i + 1,\r\n endItemIndex: i + divides,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n }\r\n let componentSize = 0, rowSizeDelta = 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 snapshotSize = snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize;\r\n\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = Math.max(row.snapshotSize, snapshotSize);\r\n\r\n rowSizeDelta = row.size - row.snapshotSize;\r\n\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 (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n rowSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n } else {\r\n componentSize = typicalItemSize;\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = row.size;\r\n rowSizeDelta = row.size - row.snapshotSize;\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 row.leftSizeOfDeletedItems = Math.max(row.leftSizeOfDeletedItems, size);\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null) {\r\n if (id != fromItemId && id === stickyItemId && 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 leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsOrRowsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n if (row.leftItemsOrRowsWeights === null) {\r\n row.leftItemsOrRowsWeights = 0;\r\n }\r\n row.leftItemsOrRowsWeights = Math.max(row.leftItemsOrRowsWeights, componentSize);\r\n row.leftHiddenItemsWeight = Math.max(row.leftHiddenItemsWeight, componentSize);\r\n if (!isPrecollection) {\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n if (!isPrecollection) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n row.totalItemsToDisplayEndWeight = Math.max(row.totalItemsToDisplayEndWeight, componentSize);\r\n\r\n if (isRowEnd && y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n row.leftSizeOfAddedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n row.leftSizeOfUpdatedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n row.leftSizeOfDeletedItems = rowSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (isRowEnd && itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n row.deltaOfNewItems = rowSizeDelta;\r\n }\r\n } else {\r\n if (isRowEnd && i < itemsFromDisplayEndToOffsetEnd) {\r\n row.rightItemsWeight = Math.max(row.rightItemsWeight, componentSize);\r\n }\r\n }\r\n\r\n if (isRowEnd) {\r\n if (!isPrecollection) {\r\n deltaFromStartCreation += row.deltaFromStartCreation;\r\n leftSizeOfAddedItems += row.leftSizeOfAddedItems;\r\n leftSizeOfUpdatedItems += row.leftSizeOfUpdatedItems;\r\n leftSizeOfDeletedItems += row.leftSizeOfDeletedItems;\r\n deltaOfNewItems += row.deltaOfNewItems;\r\n rightItemsWeight += row.rightItemsWeight;\r\n totalItemsToDisplayEndWeight += row.totalItemsToDisplayEndWeight;\r\n leftHiddenItemsWeight += row.leftHiddenItemsWeight;\r\n if (row.leftItemsOrRowsWeights !== null) {\r\n leftItemsOrRowsWeights.push(row.leftItemsOrRowsWeights);\r\n }\r\n }\r\n totalSize += row.size;\r\n y += row.size;\r\n }\r\n return true;\r\n }\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n if (!calculate(li - i, l, li, true, START_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n y = this._scrollStartOffset;\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset;\r\n itemsFromStartToDisplayEnd = itemsFromDisplayEndToOffsetEnd = 0;\r\n\r\n (row as any) = null;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0, l = collection.length, li = l - 1; i < l; i++) {\r\n if (!calculate(i, l, li)) {\r\n break;\r\n }\r\n }\r\n\r\n if (this._isInfinity) {\r\n (row as any) = null;\r\n\r\n const yy = y, currentTotalSize = totalSize, viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n row = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (!calculate(i, l, li, true, END_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n y = yy;\r\n totalSize = currentTotalSize;\r\n rightLayoutIndexOffset = count;\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize);\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n\r\n leftItemsOrRowsWeights.splice(0, leftItemsOrRowsWeights.length - bufferSize);\r\n leftItemsOrRowsWeights.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 startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n const dividedTypicalItemSize = typicalItemSize / divides, bufferItemNumbers = bufferSize * divides;\r\n itemsFromStartToScrollEnd = Math.floor(dividedTypicalItemSize !== 0 ? (scrollSize / dividedTypicalItemSize) : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(dividedTypicalItemSize !== 0 ? ((scrollSize + size) / dividedTypicalItemSize) : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize * divides);\r\n rightItemLength = (itemsFromStartToDisplayEnd + bufferItemNumbers) > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferItemNumbers;\r\n leftItemsWeight = Math.floor(leftItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n rightItemsWeight = Math.floor(rightItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n leftHiddenItemsWeight = Math.floor(itemsFromStartToScrollEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalItemsToDisplayEndWeight = Math.floor(itemsFromStartToDisplayEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalSize = (totalLength * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n\r\n if (isFromId) {\r\n const index = collection.findIndex(item => item[trackBy] == fromItemId);\r\n if (index > -1) {\r\n itemByIdPos = this._scrollStartOffset + Math.floor(index * dividedTypicalItemSize / divides);\r\n isFromItemIdFound = true;\r\n }\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize * k);\r\n\r\n items = [];\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1, y = this._scrollStartOffset;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n const itemIndex = li - i;\r\n if (collection.length > itemIndex) {\r\n items.push(collection[itemIndex] as I);\r\n } else {\r\n break;\r\n }\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n }\r\n }\r\n }\r\n\r\n items.push(...collection);\r\n\r\n if (this._isInfinity) {\r\n let y = Math.floor(totalSize / dividedTypicalItemSize) * dividedTypicalItemSize;\r\n const viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (collection.length <= i) {\r\n break;\r\n }\r\n items.push(collection[i]);\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n rightLayoutIndexOffset = count;\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else {\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n }\r\n }\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight - leftYOffset,\r\n renderItems = (Math.ceil((itemsOnDisplayLength + leftItemLength + rightItemLength) / divides) * divides) + rightLayoutIndexOffset,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\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<I> = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n divides,\r\n itemSize,\r\n minItemSize,\r\n maxItemSize,\r\n items,\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 leftLayoutOffset,\r\n leftLayoutIndexOffset,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\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 snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\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(): void {\r\n this._delta = this._deltaOfNewItems = 0;\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, actualItems: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics<I>): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n divides,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n leftLayoutOffset: layoutOffset,\r\n leftLayoutIndexOffset: layoutIndexOffset,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n minItemSize,\r\n maxItemSize,\r\n snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = stickyPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n scrollDirection = this._scrollDirection,\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;\r\n\r\n const li = layoutIndexOffset + actualItems.length - 1;\r\n if (stickyEnabled) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? (divides > 1 ? (itemsFromStartToScrollEnd - 1) : itemsFromStartToScrollEnd) : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\r\n continue;\r\n }\r\n const rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides), 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 x = isVertical ? 0 : actualSnippedPosition,\r\n y = isVertical ? actualSnippedPosition : 0;\r\n if (sticky === 1) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n scrollDirection,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_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 break;\r\n }\r\n }\r\n }\r\n\r\n if (stickyEnabled) {\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),\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n l = totalLength; i < l; i++) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\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 = (items.length - layoutIndexOffset + 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 x = isVertical ? 0 : actualEndSnippedPosition - w,\r\n y = isVertical ? actualEndSnippedPosition - h : 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\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 minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_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 const collectionLength = items.length;\r\n let i = startIndex,\r\n ci = 0,\r\n row: {\r\n size: number;\r\n odd: boolean;\r\n even: boolean;\r\n } = {\r\n size: 0,\r\n odd: false,\r\n even: false,\r\n };\r\n while (renderItems > 0) {\r\n if (i >= collectionLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n break;\r\n }\r\n\r\n const isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED),\r\n ii = i + 1,\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n id = collectionItem[trackBy],\r\n cache = this.get(id)!,\r\n size = isDummy ? typicalItemSize : (dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize),\r\n divSize = (isVertical ? normalizedItemWidth : normalizedItemHeight) / divides;\r\n\r\n if (i % divides === 0) {\r\n ci = 0;\r\n row = {\r\n size,\r\n odd: rowIndex % 2 !== 0,\r\n even: rowIndex % 2 === 0,\r\n };\r\n } else {\r\n row.size = Math.max(row.size, size);\r\n ci++;\r\n }\r\n\r\n if (!isDummy) {\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n fullSize = itemConfigMap[id]?.fullSize ?? false,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = stickyEnabled && (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 x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos,\r\n y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row,\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 ? ((sticky || fullSize) ? normalizedItemWidth : (normalizedItemWidth / divides)) : size,\r\n height: isVertical ? size : ((sticky || fullSize) ? normalizedItemHeight : (normalizedItemHeight / divides)),\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_0,\r\n fullSize,\r\n };\r\n\r\n if (snapped) {\r\n config.zIndex = Z_INDEX_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 = Z_INDEX_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 = Z_INDEX_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\r\n renderItems--;\r\n if (ii % divides === 0 || renderItems <= 0) {\r\n pos += row.size;\r\n }\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 if (itemTransform !== null) {\r\n for (let i = 0, l = displayItems.length; i < l; i++) {\r\n const item = displayItems[i];\r\n if (!!item) {\r\n const transformation = itemTransform(item.index, objectAsReadonly(item.measures), objectAsReadonly(item.config));\r\n item.measures.transformedX = transformation.x;\r\n item.measures.transformedY = transformation.y;\r\n item.measures.z = transformation.z;\r\n item.measures.rotationX = transformation.rotationX;\r\n item.measures.rotationY = transformation.rotationY;\r\n item.measures.rotationZ = transformation.rotationZ;\r\n item.measures.scaleX = transformation.scaleX;\r\n item.measures.scaleY = transformation.scaleY;\r\n item.measures.scaleZ = transformation.scaleZ;\r\n item.config.opacity = transformation.opacity;\r\n item.config.filter = transformation.filter;\r\n item.config.blendColor = transformation.blendColor;\r\n item.config.zIndex = String(transformation.zIndex);\r\n }\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.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, this._trackBy);\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 getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n const components = this._displayComponents;\r\n let first: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null,\r\n last: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const id = comp.instance.itemId ?? null, isVertical = comp.instance.item?.config?.isVertical,\r\n x = comp.instance.item?.measures?.x ?? 0,\r\n y = comp.instance.item?.measures?.y ?? 0,\r\n isFirst = comp.instance.item?.config?.isFirst ?? false,\r\n isLast = comp.instance.item?.config?.isLast ?? false,\r\n { width, height } = comp.instance.getBounds(),\r\n pos = position;\r\n if (isVertical && (pos >= y && pos < y + height)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n } else if (!isVertical && (pos >= x && pos < x + width)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n }\r\n if (isFirst) {\r\n first = { id, x, y, width, height, isFirst, isLast };\r\n } else if (isLast) {\r\n last = { id, x, y, width, height, isFirst, isLast };\r\n }\r\n }\r\n }\r\n if (position < 0) {\r\n return first;\r\n }\r\n if (maxPosition !== null && position > maxPosition) {\r\n return last;\r\n }\r\n return null;\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","import { SnappingMethods } from \"../enums\";\r\nimport { SnappingMethod } from \"../types\";\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 { Directions } from \"../enums\";\r\nimport { Direction } from \"../types\";\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/21.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 { SelectingModes } from \"../enums\";\r\nimport { SelectingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [SelectingModes.NONE, 'none'],\r\n SELECT_ALIASES = [SelectingModes.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [SelectingModes.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the mode for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSelectMode = (src: SelectingMode, expected: SelectingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","import { CollapsingModes } from \"../enums\";\r\nimport { CollapsingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [CollapsingModes.NONE, 'none'],\r\n MULTIMPLE_ALIASES = [CollapsingModes.MULTI_COLLAPSE, 'multi-collapse'],\r\n ACCORDION_ALIASES = [CollapsingModes.ACCORDION, 'accordion'];\r\n\r\n/**\r\n * Defines the mode for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/is-collapse-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollapseMode = (src: CollapsingMode, expected: CollapsingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (MULTIMPLE_ALIASES.includes(expected)) {\r\n return MULTIMPLE_ALIASES.includes(src);\r\n }\r\n return ACCORDION_ALIASES.includes(src);\r\n}\r\n","import { CollectionModes } from \"../enums\";\r\nimport { CollectionMode } from \"../types\";\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/21.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","import { PERCENTAGE_VALUE_PATTERN } from \"../const\";\r\n\r\n/**\r\n * isPercentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/is-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isPercentageValue = (value: number | `${number}%` | string) => {\r\n if (value === undefined || typeof value === 'number') {\r\n return false;\r\n }\r\n return PERCENTAGE_VALUE_PATTERN.test(value);\r\n};","import { isPercentageValue } from \"./is-persentage-value\";\r\n\r\nconst PERSENTS_100 = 100,\r\n PERSENTS_1 = 1,\r\n SIZE_PERSENT = '%',\r\n CHAR_NONE = '';\r\n\r\n/**\r\n * parseFloatOrPersentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseFloatOrPersentageValue = (value: number | `${number}%` | string): number => {\r\n const isPercentage = isPercentageValue(value);\r\n if (isPercentage) {\r\n const v = parseFloat(String(value).replace(SIZE_PERSENT, CHAR_NONE));\r\n return v / (isPercentage ? PERSENTS_100 : PERSENTS_1);\r\n }\r\n return value as number;\r\n}\r\n","import { ArithmeticExpression } from \"../types\";\r\nimport { isPercentageValue } from \"./is-persentage-value\";\r\nimport { parseFloatOrPersentageValue } from \"./parse-float-or-persentage-value\";\r\n\r\nconst WHITESPACE = ' ', PLUS = '+', MINUS = '-', OPERATORS = [PLUS, MINUS];\r\n\r\nconst calculate = (exp: string, reference: number, operator: -1 | 1 = 1) => {\r\n let result: number = 0;\r\n const isPercentage = isPercentageValue(exp);\r\n if (isPercentage) {\r\n const v = parseFloatOrPersentageValue(exp);\r\n result += (reference * v) * operator;\r\n } else {\r\n result += (Number(exp) ?? 0) * operator;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * parseArithmeticExpression\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseArithmeticExpression = (value: ArithmeticExpression, reference: number): number => {\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n let result: number = 0, operator: 1 | -1 = 1, exp: string = '';\r\n for (let i = 0, l = value.length; i < l; i++) {\r\n const char = value[i], isLast = i === l - 1;\r\n if ((char === WHITESPACE) || isLast) {\r\n if (isLast) {\r\n exp = `${exp}${char}`;\r\n }\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n continue;\r\n }\r\n else if (OPERATORS.indexOf(char) > -1) {\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n operator = char === PLUS ? 1 : -1;\r\n continue;\r\n } else {\r\n exp = `${exp}${char}`;\r\n }\r\n }\r\n return result;\r\n}\r\n","import { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, SERVICE_PROP_DUMMY_ID, SERVICE_TYPE_DUMMY } from \"../const\";\r\nimport { IVirtualListCollection, IVirtualListItemConfigMap } from \"../models\";\r\n\r\n/**\r\n * normalizeCollection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/normalize-collection.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const normalizeCollection = (items: IVirtualListCollection, itemConfigMap: IVirtualListItemConfigMap, trackBy: string, divides: number) => {\r\n if (divides > 1) {\r\n const normalizedItems: IVirtualListCollection<any | null> = [];\r\n let ci = -1, emptyId = Number.MIN_SAFE_INTEGER, offset = 0;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const ii = i + offset, item = items[i], id = item[trackBy] ?? null, config = id !== null ? itemConfigMap[id] : null,\r\n fullSize = !!config ? ((!!config.sticky && config.sticky > 0) || (config.fullSize === true)) : false;\r\n\r\n if ((ii % divides) === 0) {\r\n ci = 0;\r\n } else {\r\n ci++;\r\n }\r\n\r\n if (fullSize && ii > 0 && ci !== 0) {\r\n for (let j = ci; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n normalizedItems.push(item);\r\n if (fullSize && (i < (l - 1))) {\r\n for (let j = 1; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n }\r\n return normalizedItems;\r\n }\r\n return items;\r\n}\r\n","import { SpreadingModes } from \"../enums\";\r\nimport { SpreadingMode } from \"../types\";\r\n\r\nconst NORMAL_ALIASES = [SpreadingModes.NORMAL, 'normal'],\r\n INFINITY_ALIASES = [SpreadingModes.INFINITY, 'infinity'];\r\n\r\n/**\r\n * Determines the display mode of list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSpreadingMode = (src: SpreadingMode, expected: SpreadingMode): boolean => {\r\n if (INFINITY_ALIASES.includes(expected)) {\r\n return INFINITY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}\r\n","import { EMPTY_SCROLL_STATE_VERSION } from \"../const\";\r\n\r\nexport const getScrollStateVersion = (totalSize: number, scrollSize: number): string => {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n let scrollStateUpdateIndex = 0;\r\n if (totalSize < scrollSize) {\r\n scrollStateUpdateIndex = scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : scrollStateUpdateIndex + 1;\r\n }\r\n return `${scrollStateUpdateIndex}_${totalSize}_${scrollSize}`;\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/21.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}","export const DEFAULT_WITH_DELTA = false,\r\n DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\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 { ANIMATOR_MIN_TIMESTAMP, DEFAULT_ANIMATION_DURATION, DEFAULT_WITH_DELTA } from './const';\r\nimport { easeLinear } from './ease';\r\nimport { IAnimatorParams, IAnimatorUpdateData } from './interfaces';\r\n\r\n/**\r\n * Animator\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/animator/animator.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Animator {\r\n private static _nextId: number = 0;\r\n\r\n private _animationId: number = 0;\r\n\r\n private _currentId: number = Animator._nextId;\r\n\r\n private generateId() {\r\n return Animator._nextId = Animator._nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : Animator._nextId + 1;\r\n }\r\n\r\n animate(params: IAnimatorParams) {\r\n this.stop();\r\n\r\n const id = this.generateId();\r\n this._currentId = id;\r\n\r\n const {\r\n withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION,\r\n getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\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, isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (id !== this._currentId) {\r\n isCanceled = true;\r\n }\r\n\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 = (withDelta ? startPosDelta : 0) + start + diff * easedProgress,\r\n currentValue = val,\r\n t = performance.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 id,\r\n delta,\r\n elapsed,\r\n value: !withDelta && isFinished ? endValue : 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 id,\r\n delta,\r\n elapsed,\r\n value: withDelta ? currentValue : endValue,\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_OVERSCROLL_ENABLED = new InjectionToken<boolean>('ScrollViewOverscrollEnabled');\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 INTERSECTION_DISTANCE = 1;\r\n\r\nexport const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n INSTANT_VELOCITY_SCALE = 1000;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","/**\r\n * calculateDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport 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","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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}","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/21.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}","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number) => {\r\n return `matrix3d(\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, 0, 1\r\n )`;\r\n};\r\n","/**\r\n * getDir\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getDir = (p: number, c: number) => {\r\n return p < c ? 1 : p > c ? -1 : 0;\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, SCROLL_VIEW_OVERSCROLL_ENABLED } 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/21.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 alignmentStartOffset = input<number>(0);\r\n\r\n readonly alignmentEndOffset = input<number>(0);\r\n\r\n readonly isInfinity = input<boolean>(false);\r\n\r\n readonly isVertical: Signal<boolean>;\r\n\r\n readonly grabbing = signal<boolean>(false);\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n protected _overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);\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 this._inversion ? (totalSize < viewportSize) : (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 = 0;\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = 0;\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n\r\n this.normalizeScrollSize();\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(), endOffset = this.alignmentEndOffset();\r\n this._actualTotalSize = v + startOffset + endOffset;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n }\r\n get totalSize() {\r\n return this._totalSize;\r\n }\r\n\r\n protected _startLayoutOffset: number = 0;\r\n set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n }\r\n }\r\n get startLayoutOffset() { return this._startLayoutOffset; }\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 + this.alignmentEndOffset()));\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : ((contentWidth + this.alignmentEndOffset()) - 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 + this.alignmentEndOffset()));\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : ((contentHeight + this.alignmentEndOffset()) - 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 _isCoordinatesOverrided: boolean = false;\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 overrideCoordinates(x: number, y: number) { }\r\n\r\n protected normalizeScrollSize() {\r\n if (this.isInfinity()) {\r\n const isVertical = this.isVertical();\r\n if (isVertical) {\r\n const scrollSize = (this._totalSize - this.viewportBounds().height);\r\n if (this._y < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n } else if (this._y > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n }\r\n } else {\r\n const scrollSize = (this._totalSize - this.viewportBounds().width);\r\n if (this._x < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n } else if (this._x > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n }\r\n }\r\n }\r\n this._isCoordinatesOverrided = false;\r\n return false;\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(value: number | null = null) {\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 : value ?? (w - startOffset),\r\n height = isVertical ? value ?? (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 { BehaviorSubject } from \"rxjs\";\r\nimport { ScrollDirection } from \"../types\";\r\n\r\n/**\r\n * ScrollingDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollingDirection {\r\n private _value: number = 0;\r\n\r\n private _$direction = new BehaviorSubject<ScrollDirection>(0);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n constructor(private _length: number = 5) { }\r\n\r\n add(v: ScrollDirection) {\r\n this._value += v;\r\n const dir = this._value < this._length ? -this._length : this._value > this._length ? this._length : this._value,\r\n result = dir === 0 ? 0 : Math.sign(dir) as ScrollDirection;\r\n this._$direction.next(result);\r\n }\r\n\r\n get(): ScrollDirection {\r\n return this._$direction.getValue();\r\n }\r\n\r\n clear() {\r\n this._value = 0;\r\n this._$direction.next(0);\r\n }\r\n}","import { INSTANT_VELOCITY_SCALE } from \"../const\";\r\n\r\n/**\r\n * calculateVelocity\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const calculateVelocity = (startPosition: number, currentPosition: number, timestamp: number) => {\r\n const s = currentPosition - startPosition, t = timestamp;\r\n return t !== 0 ? (s / t) * INSTANT_VELOCITY_SCALE : 0;\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 { BehaviorSubject, debounceTime, delay, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_SCROLLING_SETTINGS, DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, DEFAULT_SNAPPING_DISTANCE, INTERACTIVE, MOUSE_DOWN,\r\n MOUSE_MOVE, MOUSE_UP, 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, INTERSECTION_DISTANCE, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS,\r\n MAX_VELOCITY_TIMESTAMP, OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection, matrix3d } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IAnimationParams, IScrollingSettings } from '../../interfaces';\r\nimport { SnapToItemAligns } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { Id, SnappingDistance, SnapToItemAlign } from '../../types';\r\nimport { parseFloatOrPersentageValue } from '../../utils/parse-float-or-persentage-value';\r\nimport { isPercentageValue } from '../../utils/is-persentage-value';\r\nimport { ScrollingDirection } from '../../utils/scrolling-direction';\r\nimport { calculateVelocity } from './utils/calculate-velocity';\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/21.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 protected _service = inject(NgVirtualListService);\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 readonly snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n\r\n readonly scrollingOneByOne = input<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE);\r\n\r\n readonly snapToItemAlign = input<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN);\r\n\r\n readonly snappingDistance = input<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE);\r\n\r\n readonly animationParams = input<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _isScrollsTo: boolean = false;\r\n\r\n protected _scrollDirection = new ScrollingDirection();\r\n get scrollDirection() {\r\n return this._scrollDirection.get();\r\n }\r\n\r\n get $scrollDirection() { return this._scrollDirection.$direction; }\r\n\r\n protected _$wheel = new Subject<number>();\r\n readonly $wheel = this._$wheel.asObservable();\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 protected _velocities: Array<number> = [];\r\n\r\n protected _$velocity = new BehaviorSubject<number>(0);\r\n protected $velocity = this._$velocity.asObservable();\r\n get velocity() { return this._$velocity.getValue(); }\r\n\r\n protected _$averageVelocity = new BehaviorSubject<number>(0);\r\n protected $averageVelocity = this._$averageVelocity.asObservable();\r\n get averageVelocity() { return this._$averageVelocity.getValue(); }\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 _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 override set x(v: number) {\r\n this.setX(v);\r\n }\r\n override get x() { return this._x; }\r\n\r\n protected setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._y);\r\n\r\n this._x = this._actualY = x;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set y(v: number) {\r\n this.setY(v);\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected _delta: number = 0;\r\n set delta(v: number) {\r\n this._delta = v;\r\n this._startPosition += v;\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\r\n\r\n protected _intersectionComponentId: Id | null = null;\r\n\r\n protected _isAlignmentAnimation = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n let mouseCanceled = false,\r\n touchCanceled = false;\r\n\r\n const $viewportBounds = toObservable(this.viewportBounds);\r\n $viewportBounds.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled || !touchCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = touchCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this.stopScrolling(true);\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(v => of(this.averageVelocity)),\r\n debounceTime(100),\r\n tap(v => {\r\n this.snapWithInitialForceIfNecessary(v);\r\n this._scrollDirection.clear();\r\n }),\r\n ).subscribe();\r\n\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(true);\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),\r\n position = this.isInfinity() ? dp : (dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true, blending: false, fireUpdate: true });\r\n this._$wheel.next(delta);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = race([\r\n fromEvent<MouseEvent>(window, MOUSE_UP, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => fromEvent<MouseEvent>(content, MOUSE_UP, { passive: true }))\r\n ),\r\n ]),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem() && this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\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(() => this._interactive),\r\n switchMap(e => {\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 takeUntil(fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\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 mouseCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\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 = isVertical ? e.clientY : e.clientX,\r\n startClientPos = prevClientPosition,\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 const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\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 takeUntil($mouseDragCancel),\r\n tap(e => {\r\n mouseCanceled = true;\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.snapIfNecessary(v0, false) && this.scrollBehavior() !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = race(\r\n [\r\n fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })),\r\n ),\r\n ]\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem() && this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\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 return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil(fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\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 touchCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\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 = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n startClientPos = prevClientPosition,\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 const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\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 takeUntil($touchCanceler),\r\n tap(e => {\r\n touchCanceled = true;\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.snapIfNecessary(v0, false) && this.scrollBehavior() !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n protected updateDirection(position: number, prePosition: number) {\r\n const delta = (position - this._delta) - prePosition;\r\n this._scrollDirection.add(delta > 0 ? 1 : delta < 0 ? -1 : 0);\r\n }\r\n\r\n protected override overrideCoordinates(x: number, y: number) {\r\n super.overrideCoordinates(x, y);\r\n const position = Math.abs(this.isVertical() ? y : x);\r\n this._measureVelocityTimestamp = Date.now();\r\n this._measureVelocityLastPosition = position;\r\n this.refreshCoordinate(x, y);\r\n }\r\n\r\n protected measureVelocity() {\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 if (!this.isInfinity()) {\r\n if (position <= 0 || position >= (this.isVertical() ? this.scrollHeight : this.scrollWidth)) {\r\n this._velocities = [0];\r\n this._$averageVelocity.next(0);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n return;\r\n }\r\n }\r\n if (this._delta !== 0) {\r\n return;\r\n }\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.next(velocity);\r\n this._velocities.push(velocity);\r\n this._$averageVelocity.next(avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n }\r\n\r\n protected stopMoving() { }\r\n\r\n private snapIfNecessary(v0: number, withInitialForce: boolean = true, animated: boolean = true, force: boolean = false) {\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const snapToItem = this.snapToItem();\r\n if (!!snapToItem) {\r\n const scrollingOneByOne = this.scrollingOneByOne();\r\n if (scrollingOneByOne) {\r\n return this.alignPosition();\r\n }\r\n if (withInitialForce) {\r\n return this.snapWithInitialForceIfNecessary(v0, animated, force);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected snapWithInitialForceIfNecessary(v0: number | null = null, animated = true, force: boolean = false) {\r\n const t = this.animationParams().snapToItem * .01, s = this.getSnappedComponentSize(),\r\n va = s !== null && t !== 0 ? (s / t) : 0;\r\n if (va >= Math.abs(v0 ?? this.averageVelocity)) {\r\n return this.alignPosition(animated, force);\r\n }\r\n return false;\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 = this.isInfinity() ? dp : dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp,\r\n endTime = Date.now(), 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 || !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._overscrollEnabled) {\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\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(force: boolean = false) {\r\n if (this._isAlignmentAnimation && !force) {\r\n return;\r\n }\r\n this._isAlignmentAnimation = false;\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 } else {\r\n this.alignPosition(true, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n if (this.isInfinity()) {\r\n return value;\r\n }\r\n const isVertical = this.isVertical(),\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset(),\r\n scrollSize = this.scrollable ? ((isVertical ? this.scrollHeight : this.scrollWidth) - this.alignmentEndOffset()) : 0,\r\n result = this.scrollable ? (value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value) : startOffset;\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, alignmentAtComplete: boolean = true, skipOverridedCoordinates: boolean = false) {\r\n const isVertical = this.isVertical();\r\n let iteration = 0, position = startValue;\r\n this._isAlignmentAnimation = !alignmentAtComplete;\r\n\r\n this._animator.animate({\r\n withDelta: this._service.dynamic && !this.isInfinity(),\r\n startValue,\r\n endValue,\r\n duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value, timestamp, elapsed }) => {\r\n if (this._isCoordinatesOverrided && !skipOverridedCoordinates) {\r\n this._isCoordinatesOverrided = false;\r\n const currentCoordinate = isVertical ? this._y : this._x, delta = endValue - value;\r\n this.animate(currentCoordinate, currentCoordinate + delta, duration - elapsed, easingFunction, userAction, alignmentAtComplete);\r\n return;\r\n }\r\n const v0 = calculateVelocity(position, value, timestamp) ?? this.averageVelocity;\r\n position = value;\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n if (iteration < MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS || !this.snapIfNecessary(v0)) {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n iteration++;\r\n this._service.update(true);\r\n }, onComplete: ({ value, timestamp }) => {\r\n this._isAlignmentAnimation = false;\r\n const v0 = calculateVelocity(position, value, timestamp);\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n this.snapIfNecessary(v0);\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n this._$scrollEnd.next(userAction);\r\n this._service.update(true);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected getSnappedComponentSize() {\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(), sd = this.snappingDistance(),\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let size: number | null = null;\r\n const scrollDirection = this._scrollDirection.get(),\r\n currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n }\r\n return size;\r\n }\r\n\r\n protected alignPosition(animated: boolean = true, force: boolean = false) {\r\n if (!this.snapToItem() || this._isAlignmentAnimation) {\r\n return false;\r\n }\r\n this.stopScrolling(true);\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(),\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n sd = this.snappingDistance(),\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let position: number | null = null, size: number = 0;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset(), alignmentStartOffset = this.alignmentStartOffset(),\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n position = componentPosition - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n if (this.isInfinity()) {\r\n if (position < 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset(), alignmentStartOffset = this.alignmentStartOffset(),\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5;\r\n position = componentPosition + size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5 + this._startLayoutOffset;\r\n if (this.isInfinity()) {\r\n if (position <= 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds,\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n position = componentPosition - viewportSize + this._startLayoutOffset;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const cPos = (isVertical ? this.scrollTop : this.scrollLeft);\r\n\r\n if (position !== null && position !== cPos) {\r\n this.stopScrolling(true);\r\n this.animate(cPos, position, animated ? this.animationParams().snapToItem : 1, easeOutQuad, false, false, true);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected checkIntersectionComponent() {\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(),\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n let componentId: Id | null = null;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const actualPos = currentPosition + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const actualPos = currentPosition + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (componentId !== this._intersectionComponentId && componentId !== null) {\r\n this._service.setIntersectionElementBySnapToItemAlign(componentId);\r\n }\r\n this._intersectionComponentId = componentId;\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined, silent: boolean = false): boolean {\r\n if (!this.isInfinity()) {\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 if (silent) {\r\n this._y = yy;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.y = yy;\r\n }\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n if (silent) {\r\n this._x = xx;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.x = xx;\r\n }\r\n return true;\r\n }\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 snap = params.snap ?? true,\r\n normalize = params.normalize ?? true,\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 force = params.force ?? false,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this.isVertical();\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 || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setY(y, snap, normalize);\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 || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setX(x, snap, normalize);\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 refreshCoordinate(x: number, y: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = matrix3d((this._inversion ? 1 : -1) * x + (this.isVertical() ? 0 : this._startLayoutOffset),\r\n (this._inversion ? 1 : -1) * y + (this.isVertical() ? this._startLayoutOffset : 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, debounceTime, 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 {\r\n DEFAULT_LANG_TEXT_DIR, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_INTERACTIVE, LEFT, POSITION, POSITION_ABSOLUTE,\r\n POSITION_RELATIVE, RIGHT, SIZE_100_PERSENT, SIZE_AUTO, UNSET,\r\n} 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, SCROLL_VIEW_OVERSCROLL_ENABLED } 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\nimport { TextDirection } from '../../types';\r\nimport { TextDirections } 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/21.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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, 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 _scrollBarService = 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 langTextDir = input<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n\r\n readonly interactive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly overlapping = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\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.refreshCoordinate(this._x, 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 $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(100),\r\n tap(() => {\r\n const event = this.createDragEvent(true);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\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._scrollBarService.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._scrollBarService.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._scrollBarService.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 effect(() => {\r\n const el = this._elementRef.nativeElement;\r\n if (!!el) {\r\n const overlapping = this.overlapping(), langTextDir = this.langTextDir();\r\n el.style[POSITION] = overlapping ? POSITION_ABSOLUTE : POSITION_RELATIVE;\r\n el.style[LEFT] = overlapping && langTextDir === TextDirections.RTL ? '0' : UNSET;\r\n el.style[RIGHT] = overlapping && langTextDir === TextDirections.LTR ? '0' : UNSET;\r\n el.style[WIDTH] = overlapping ? SIZE_AUTO : SIZE_100_PERSENT;\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(userAction => {\r\n const event = this.createDragEvent(userAction);\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._scrollBarService.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>","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 { TextDirections } from '../../enums';\r\nimport { TextDirection } from '../../types';\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/21.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, ElementRef, input, output, Signal, signal, TemplateRef, viewChild, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, debounceTime, filter, from, Subject, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id, TextDirection } 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_MAX_MOTION_BLUR, DEFAULT_MOTION_BLUR, DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_ENABLED,\r\n DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME, PX, SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirections } from '../../enums';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } 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 MOTION_BLUR = 'motion-blur';\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/21.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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, 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 {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n readonly filter = viewChild<ElementRef<SVGFEGaussianBlurElement>>('filter');\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 overlappingScrollbar = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\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 readonly motionBlur = input<number | 'disabled'>(DEFAULT_MOTION_BLUR);\r\n\r\n readonly maxMotionBlur = input<number>(DEFAULT_MAX_MOTION_BLUR);\r\n\r\n readonly motionBlurEnabled = input<boolean>(DEFAULT_MOTION_BLUR_ENABLED);\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 public readonly langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n public readonly listStyles = signal<{ perspectiveOrigin: string }>({ perspectiveOrigin: 'center' });\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 protected override setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._x);\r\n\r\n this._x = this._actualX = x;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected override setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.recalculatePerspective();\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\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 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 protected _filterId: string;\r\n\r\n protected _filter: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._filterId = `${this._service.id}-${MOTION_BLUR}`;\r\n this._filter = `url(#${this._filterId})`;\r\n\r\n const $filter = toObservable(this.filter),\r\n $motionBlur = toObservable(this.motionBlur),\r\n $maxMotionBlur = toObservable(this.maxMotionBlur),\r\n $motionBlurEnabled = toObservable(this.motionBlurEnabled),\r\n $isVertical = toObservable(this.isVertical);\r\n\r\n const $scrollbarScroll = this.$scrollbarScroll;\r\n $scrollbarScroll.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(50),\r\n tap(() => {\r\n this.dropVelocity();\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $averageVelocity = this.$averageVelocity;\r\n combineLatest([$isVertical, $averageVelocity, $filter, $motionBlurEnabled, $motionBlur, $maxMotionBlur]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([, , f, e, mb]) => !!f && (!!e && mb !== 0)),\r\n tap(([isVertical, v, filter, , mb, mbMax]) => {\r\n const _v = v * (mb as number), value = _v > mbMax ? mbMax : _v;\r\n filter!.nativeElement.setStdDeviation(isVertical ? 0 : v * value, isVertical ? v * value : 0);\r\n }),\r\n debounceTime(50),\r\n tap(([, , filter, ,]) => {\r\n filter!.nativeElement.setStdDeviation(0, 0);\r\n }),\r\n ).subscribe();\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 $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(), filtered = this.motionBlurEnabled();\r\n return { ...classes, [direction]: true, grabbing: this.grabbing(), filtered };\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 overlappingScrollbar = this.overlappingScrollbar(),\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, overlapping: overlappingScrollbar };\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 private recalculatePerspective() {\r\n const isVertical = this.isVertical(), scrollSize = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n { width, height } = this.viewportBounds();\r\n this.listStyles.set({\r\n perspectiveOrigin: `${isVertical ? width * .5 : (scrollSize + width * .5)}${PX} ${isVertical ? (scrollSize + height * .5) : height * .5}${PX}`\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(value: number | null = null) {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (!!content) {\r\n const isVertical = this.isVertical(), bounds: ISize = {\r\n width: isVertical ? content.offsetWidth : (value ?? content.offsetWidth),\r\n height: isVertical ? (value ?? content.offsetHeight) : content.offsetHeight\r\n }, b = this.contentBounds();\r\n if (value === null && 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 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 }\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();\r\n this.totalSize = 0;\r\n this.onResizeContent(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 this.refreshCoordinate(this._x, this._y);\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 snapIfNeed(animated = true) {\r\n this.snapWithInitialForceIfNecessary(null, animated, true);\r\n }\r\n\r\n startScrollTo() {\r\n this.stopScrollbar();\r\n this.stopScrolling(true);\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this._isScrollsTo = true;\r\n }\r\n\r\n finishedScrollTo() {\r\n this._isScrollsTo = false;\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this.checkIntersectionComponent();\r\n this.fireScrollEvent(true);\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 this.alignPosition();\r\n this.dropVelocity();\r\n }\r\n }\r\n\r\n private dropVelocity() {\r\n this._velocities = [0];\r\n this._$velocity.next(0);\r\n this._$averageVelocity.next(0);\r\n }\r\n\r\n protected override stopMoving() {\r\n super.stopMoving();\r\n this.dropVelocity();\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this.dropVelocity();\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(true);\r\n this.stopScrolling(true);\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: true, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this._service.update(false);\r\n }\r\n\r\n onScrollBarDragEndHandler(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._isScrollbarUserAction = false;\r\n this.dropVelocity();\r\n this._service.update(false);\r\n const isEdge = this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n if (!isEdge) {\r\n this.alignPosition();\r\n }\r\n this._scrollDirection.clear();\r\n this._$scrollbarScroll.next(true);\r\n this.fireScrollEvent(true);\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 return true;\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}","@let filtered = motionBlurEnabled();\r\n<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"filtered\" [style.filter]=\"filtered ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"direction()\"\r\n [attr.aria-activedescendant]=\"focusedElement()\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"actualClasses()\" [ngStyle]=\"listStyles()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\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()\" [overlapping]=\"overlappingScrollbar()\"\r\n [thumbGradientPositions]=\"thumbGradientPositions()\" [prepared]=\"prepared\" [interactive]=\"scrollbarInteractive()\"\r\n [show]=\"scrollbarShow() && scrollbarEnabled() && prepared\" [startOffset]=\"startOffset()\" [langTextDir]=\"langTextDir()\"\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_DIVIDES, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SNAP_TO_ITEM_ALIGN, 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, divides: number, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n const w = (isVertical ? (bounds.width / divides) : itemSize) as any,\r\n h = (isVertical ? itemSize : (bounds.height / divides)) as any;\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 row: {\r\n size: itemSize,\r\n odd: false,\r\n even: false\r\n },\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 transformedX: 0,\r\n transformedY: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 0,\r\n scaleY: 0,\r\n scaleZ: 0,\r\n width: w,\r\n height: h,\r\n minWidth: 0,\r\n minHeight: 0,\r\n maxWidth: Number.MAX_SAFE_INTEGER,\r\n maxHeight: Number.MAX_SAFE_INTEGER,\r\n scrollDirection: 0,\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 divides: 1,\r\n tabIndex: 0,\r\n opacity: 1,\r\n zIndex: \"0\",\r\n snapToItem: false,\r\n snapToItemAlign: DEFAULT_SNAP_TO_ITEM_ALIGN,\r\n layoutOffset: 0,\r\n isFirst: false,\r\n isLast: false,\r\n fullSize: false,\r\n layoutIndexOffset: 0,\r\n totalItems: 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/21.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 divides = params.divides ?? DEFAULT_DIVIDES,\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, divides, 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 * NgPrerenderVirtualListItemComponent\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/21.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/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, el = this._elementRef.nativeElement,\r\n itemElement = this._item()?.nativeElement, containerElement = this._container()?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n el.setAttribute(ID, `${data.id}`);\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n itemElementStyles.maxHeight = styles.maxHeight = `${data.measures.maxHeight}${PX}`;\r\n \r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n styles.maxHeight = `${data.measures.maxHeight}${PX}`;\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 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 { TextDirections } from '../../../../enums';\r\nimport { TextDirection } from '../../../../types';\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, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * NgPrerenderScrollerComponent\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/21.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: false },\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 { combineLatest, filter, Observable, Subject, Subscription, tap } from \"rxjs\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DIVIDES, 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 \"../../../../types\";\r\n\r\n/**\r\n * NgPrerenderList\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/21.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-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 divides = input<number>(DEFAULT_DIVIDES);\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 divides: this.divides(),\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 { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { filter, Observable, switchMap } from \"rxjs\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DIVIDES, 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 \"../../types\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { PrerenderCache } from \"./types\";\r\n\r\n/**\r\n * NgPrerenderContainer\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/21.x/projects/ng-virtual-list/src/lib/components/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 divides = input<number>(DEFAULT_DIVIDES);\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()\" [divides]=\"divides()\"\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_STICKY_ENABLED, 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_SELECTING_MODES, 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 PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS, PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1, DEFAULT_SCROLLING_SETTINGS,\r\n DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, VIEWPORT, DEFAULT_MOTION_BLUR, DEFAULT_MAX_MOTION_BLUR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_DIVIDES, DEFAULT_SNAPPING_DISTANCE, DEFAULT_MAX_ITEM_SIZE, DEFAULT_MIN_ITEM_SIZE,\r\n DEFAULT_ALIGNMENT, DEFAULT_COLLAPSING_MODES, DEFAULT_SPREADING_MODE, DEFAULT_ZINDEX_WHEN_SELECTING,\r\n DEFAULT_OVERLAPPING_SCROLLBAR,\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 {\r\n Alignment, ArithmeticExpression, FocusAlignment, Id, ItemTransform, SnappingDistance, CollectionMode, Direction, SelectingMode,\r\n SnappingMethod, SnapToItemAlign, TextDirection, CollapsingMode,\r\n SpreadingMode,\r\n} from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n Alignments, CollectionModes, Directions, FocusAlignments, SelectingModes, SnappingMethods, SnapToItemAligns, SpreadingModes, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { 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 { isSelectMode } from './utils/is-select-mode';\r\nimport { isCollapseMode } from './utils/is-collapse-mode';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport { CMap } from './utils/cmap';\r\nimport {\r\n validateArray, validateBoolean, validateFloat, validateFunction, validateInt, validateObject, validateString,\r\n} 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\nimport { isPercentageValue } from './utils/is-persentage-value';\r\nimport { parseArithmeticExpression } from './utils/parse-arithmetic-expression';\r\nimport { normalizeCollection } from './utils/normalize-collection';\r\nimport { CollapsingModes } from './enums';\r\nimport { isSpreadingMode } from './utils/is-spreading-mode';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions } from './core/interfaces';\r\nimport { getScrollStateVersion } from './utils/get-scroll-state-version';\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/21.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 * Emit the component ID when an element crosses the alignment line specified by the snapToItemAlign property.\r\n */\r\n onSnapItem = output<Id>();\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 _$initialized = new BehaviorSubject<boolean>(false);\r\n readonly $initialized = this._$initialized.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._isMultiSelection ? [] : 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 api.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 throw Error(`Property snap is deprecated. Use the \\`stickyEnabled\\` property instead.`);\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * Use the `stickyEnabled` property instead.\r\n */\r\n snap = input<boolean>(false, { ...this._snapOptions });\r\n\r\n private _stickyEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"stickyEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_STICKY_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether items with the given `sticky` in `itemConfigMap` will stick to the edges. Default value is \"true\".\r\n */\r\n stickyEnabled = input<boolean>(DEFAULT_STICKY_ENABLED, { ...this._stickyEnabledOptions });\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) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be one of type `number` or `string`.');\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. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n scrollStartOffset = input<ArithmeticExpression>(0, { ...this._scrollStartOffsetOptions });\r\n\r\n private _scrollEndOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be one of type `number` or `string`.');\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. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n scrollEndOffset = input<ArithmeticExpression>(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 * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToStart` property is automatically disabled, since the list has no 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 * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToEnd` property is automatically disabled, since the list has no 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 _overlappingScrollbarOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overlappingScrollbar\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERLAPPING_SCROLLBAR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll bar will overlap the list. The default value is \"false\".\r\n */\r\n overlappingScrollbar = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR, { ...this._overlappingScrollbarOptions });\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 100000.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 10.\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 _itemTransformOptions = {\r\n transform: (v: any) => {\r\n let valid = validateFunction(v, true, true);\r\n if (!valid) {\r\n console.error('The \"itemTransform\" parameter must be of type `ItemTransform` or `null`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Custom transformation of element's position, rotation, scale, opacity and zIndex. The default value is `null`.\r\n */\r\n itemTransform = input<ItemTransform | null>(null, { ...this._itemTransformOptions });\r\n\r\n private _snapToItemOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItem\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_TO_ITEM;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snap to an item. The default value is `false`.\r\n */\r\n snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM, { ...this._snapToItemOptions });\r\n\r\n private _snapToItemAlignOptions = {\r\n transform: (v: SnapToItemAlign) => {\r\n const valid = validateString(v) && (v === 'start' || v === 'center' || v === 'end');\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItemAlign\" parameter must be one of `start`, `center` or `end`.');\r\n return DEFAULT_SNAP_TO_ITEM_ALIGN;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Alignment for snapToItem. Available values ​​are `start`, `center`, and `end`. The default value is `center`.\r\n */\r\n snapToItemAlign = input<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN, { ...this._snapToItemAlignOptions });\r\n\r\n private _snappingDistanceOptions = {\r\n transform: (v: SnappingDistance | any) => {\r\n const valid = validateString(v) || validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snappingDistance\" parameter must be of type `number` or `string`.');\r\n return DEFAULT_SNAPPING_DISTANCE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snapping activation distance. Can be specified as a percentage of the element size or in absolute values.\r\n * The default value is `25%`.\r\n */\r\n snappingDistance = input<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE, { ...this._snappingDistanceOptions });\r\n\r\n private _scrollingOneByOneOptions = {\r\n transform: (v: any) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollingOneByOne\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLING_ONE_BY_ONE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Specifies whether to scroll one item at a time if true and the scrollToItem property is set. The default value is `false`.\r\n */\r\n scrollingOneByOne = input<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE, { ...this._scrollingOneByOneOptions });\r\n\r\n private _alignmentOptions = {\r\n transform: (v: Alignment) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'center');\r\n\r\n if (!valid) {\r\n console.error('The \"alignment\" parameter must be one of `none` or `centert`.');\r\n return DEFAULT_ALIGNMENT;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines the alignment of the list. Two modes are available: `none` and `center`. The `center` mode aligns the list items to the center of the viewport, ideal for use with the `itemTransform` property.\r\n * The `none` mode means no alignment. The default value is `none`.\r\n */\r\n alignment = input<Alignment>(DEFAULT_ALIGNMENT, { ...this._alignmentOptions });\r\n\r\n private _zIndexWhenSelectingOptions = {\r\n transform: (v: string | null) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"zIndexWhenSelecting\" parameter must be of type `number` or `null`.');\r\n return DEFAULT_ZINDEX_WHEN_SELECTING;\r\n }\r\n return v ?? null;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Defines the zIndex when a list item is selected. The default value is `null`.\r\n */\r\n zIndexWhenSelecting = input<string | null>(DEFAULT_ZINDEX_WHEN_SELECTING, { ...this._zIndexWhenSelectingOptions });\r\n\r\n private _spreadingModeOptions = {\r\n transform: (v: SpreadingMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'infinity');\r\n\r\n if (!valid) {\r\n console.error('The \"spreadingMode\" parameter must be one of `normal` or `infinity`.');\r\n return DEFAULT_SPREADING_MODE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * The order of list elements. Available values ​​are `standard` and `infinity`.\r\n * `normal` — list elements are ordered according to the collection sequence.\r\n * `infinity` — list elements are ordered cyclically, forming an infinite list.\r\n * When set to `infinity`, the `alignment` property is forced to the value `Alignments.CENTER`, the `scrollbarEnabled` property is forced to the `false`\r\n * The default value is `standard`.\r\n */\r\n spreadingMode = input<SpreadingMode>(DEFAULT_SPREADING_MODE, { ...this._spreadingModeOptions });\r\n\r\n private _dividesOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"divides\" parameter must be of type `number`.');\r\n return DEFAULT_DIVIDES;\r\n }\r\n return v <= 0 ? DEFAULT_DIVIDES : v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Column or row numbers. The default value is `1`.\r\n */\r\n divides = input<number>(DEFAULT_DIVIDES, { ...this._dividesOptions });\r\n\r\n private _motionBlurOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_MOTION_BLUR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Motion blur effect. The default value is `0.15`.\r\n */\r\n motionBlur = input<number>(DEFAULT_MOTION_BLUR, { ...this._motionBlurOptions });\r\n\r\n private _maxMotionBlurOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"maxMotionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_MAX_MOTION_BLUR;\r\n }\r\n return v <= 0 ? DEFAULT_MAX_MOTION_BLUR : v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Maximum motion blur effect. The default value is `0.5`.\r\n */\r\n maxMotionBlur = input<number>(DEFAULT_MAX_MOTION_BLUR, { ...this._maxMotionBlurOptions });\r\n\r\n private _motionBlurEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlurEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_MOTION_BLUR_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether to apply motion blur or not. The default value is `false`.\r\n */\r\n motionBlurEnabled = input<boolean>(DEFAULT_MOTION_BLUR_ENABLED, { ...this._motionBlurEnabledOptions });\r\n\r\n private _animationParamsOptions = {\r\n transform: (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!validateFloat(v.scrollToItem)) {\r\n console.error('The \"scrollToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.snapToItem)) {\r\n console.error('The \"snapToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateByKeyboard)) {\r\n console.error('The \"navigateByKeyboard\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateToItem)) {\r\n console.error('The \"navigateToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\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, snapToItem: 150, navigateToItem: 150, navigateByKeyboard: 50 }\".\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, `fullSize`, `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 * `fullSize` determines the size of an element when rendering lists with cell divisions. If sticky is 1 or 2, fullSize automatically becomes true. The default value is false.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.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: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be one of `number`, `viewport` 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 * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n itemSize = input<number | 'viewport'>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n private _minItemSizeOptions = {\r\n transform: (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"minItemSize\" parameter must be one of `number`, `viewport` 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 the `dynamicSize` property is enabled, the minimum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n minItemSize = input<number | 'viewport'>(DEFAULT_MIN_ITEM_SIZE, { ...this._minItemSizeOptions });\r\n\r\n private _maxItemSizeOptions = {\r\n transform: (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"maxItemSize\" parameter must be one of `number`, `viewport` 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 the `dynamicSize` property is enabled, the maximum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n maxItemSize = input<number | 'viewport'>(DEFAULT_MAX_ITEM_SIZE, { ...this._maxItemSizeOptions });\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 be one of `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 be one of `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 _collapsingModeOptions = {\r\n transform: (v: CollapsingMode) => {\r\n const valid = validateString(v) && (v === CollapsingModes.NONE || v === CollapsingModes.MULTI_COLLAPSE || v === CollapsingModes.ACCORDION);\r\n if (!valid) {\r\n console.error(`The \"collapsingMode\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_COLLAPSING_MODES;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Mode for collapsing list items. \r\n * `none` - List items are not selectable.\r\n * `multi-collapse` - List items are collapsed one by one.\r\n * 'accordion' - Accordion collapsible list items.\r\n * Default value is `multi-collapse\r\n */\r\n collapsingMode = input<CollapsingMode>(DEFAULT_COLLAPSING_MODES, { ...this._collapsingModeOptions });\r\n\r\n private _methodForSelectingOptions = {\r\n transform: (v: SelectingMode) => {\r\n throw new Error('The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property instead.');\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property.\r\n */\r\n methodForSelecting = input<SelectingMode>(DEFAULT_SELECTING_MODES, { ...this._methodForSelectingOptions });\r\n\r\n private _selectingModeOptions = {\r\n transform: (v: SelectingMode) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"selectingMode\" parameter must be one of `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECTING_MODES;\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 selectingMode = input<SelectingMode>(DEFAULT_SELECTING_MODES, { ...this._selectingModeOptions });\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 _isSingleSelection = this.getIsSingleSelection();\r\n\r\n private _isMultiSelection = this.getIsMultiSelection();\r\n\r\n private _isMultipleCollapse = this.getIsMultipleCollapse();\r\n\r\n private _isAccordionCollapse = this.getIsAccordionCollapse();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n protected _isInfinity: Signal<boolean>;\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 protected _actualScrollbarEnabled: Signal<boolean>;\r\n\r\n private _actualAlignment: Signal<Alignment>;\r\n protected get actualAlignment() { return this._actualAlignment; }\r\n\r\n private _actualItemSize = signal<number>(DEFAULT_ITEM_SIZE);\r\n protected get actualItemSize() { return this._actualItemSize; }\r\n\r\n private _actualMinItemSize = signal<number>(DEFAULT_MIN_ITEM_SIZE);\r\n protected get actualMinItemSize() { return this._actualMinItemSize; }\r\n\r\n private _actualMaxItemSize = signal<number>(DEFAULT_MAX_ITEM_SIZE);\r\n protected get actualMaxItemSize() { return this._actualMaxItemSize; }\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 = new BehaviorSubject<number>(0);\r\n\r\n private _isScrollStart = signal<boolean>(true);\r\n\r\n private _isScrollEnd = signal<boolean>(false);\r\n\r\n protected _precalculatedScrollStartOffset = signal<number>(0);\r\n\r\n protected _precalculatedScrollEndOffset = signal<number>(0);\r\n\r\n protected _actualScrollStartOffset = signal<number>(0);\r\n\r\n protected _actualScrollEndOffset = signal<number>(0);\r\n\r\n protected _actualSnapScrollToStart: Signal<boolean>;\r\n\r\n protected _actualSnapScrollToEnd: Signal<boolean>;\r\n\r\n protected _alignmentScrollStartOffset = signal<number>(0);\r\n\r\n protected _alignmentScrollEndOffset = signal<number>(0);\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 right: number, top: number, bottom: number;\r\n if (isVertical) {\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 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 + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5 + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize) + scroller.startLayoutOffset;\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 this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior, snap: false, normalize: true,\r\n fireUpdate: false, blending: false, userAction: false,\r\n duration: this.snapToItem() ? Math.max(this.animationParams().scrollToItem, this.animationParams().navigateToItem) : this.animationParams().navigateToItem,\r\n };\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 _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 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 const _$created = new BehaviorSubject<boolean>(false),\r\n $created = _$created.asObservable();\r\n\r\n combineLatest([$created, this.$show]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([created, shown]) => created && shown),\r\n debounceTime(1),\r\n tap(v => {\r\n this._$initialized.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n const $animationParams = toObservable(this.animationParams);\r\n $animationParams.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.animationParams = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._isInfinity = computed(() => {\r\n const mode = this.spreadingMode();\r\n return isSpreadingMode(mode, SpreadingModes.INFINITY);\r\n });\r\n\r\n const $isInfinity = toObservable(this._isInfinity);\r\n $isInfinity.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.isInfinity = this._service.isInfinity = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $zIndexWhenSelecting = toObservable(this.zIndexWhenSelecting);\r\n $zIndexWhenSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.zIndexWhenSelecting = 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 $rawScrollStartOffset = toObservable(this.scrollStartOffset),\r\n $rawScrollEndOffset = toObservable(this.scrollEndOffset);\r\n\r\n combineLatest([$bounds, $rawScrollStartOffset]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds.height : bounds.width);\r\n this._precalculatedScrollStartOffset.set(val);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$bounds, $rawScrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds.height : bounds.width);\r\n this._precalculatedScrollEndOffset.set(val);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$intersectionElementBySnapToItemAlign.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => v !== null),\r\n tap(id => {\r\n this.onSnapItem.emit(id);\r\n }),\r\n ).subscribe();\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 filter(() => this.dynamicSize() === true),\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 $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$scrollDirection),\r\n tap(v => {\r\n this._trackBox.scrollDirection = v;\r\n }),\r\n ).subscribe();\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 = this._trackBox.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false;\r\n\r\n const $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $minItemSize = toObservable(this.minItemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MIN_ITEM_SIZE : v),\r\n ),\r\n $maxItemSize = toObservable(this.maxItemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MAX_ITEM_SIZE : v),\r\n ),\r\n $scrollStartOffset = toObservable(this._actualScrollStartOffset).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n ),\r\n $scrollEndOffset = toObservable(this._actualScrollEndOffset).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n );\r\n\r\n combineLatest([$minItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._actualMinItemSize.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$maxItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._actualMaxItemSize.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $actualMinItemSize = toObservable(this._actualMinItemSize),\r\n $actualMaxItemSize = toObservable(this._actualMaxItemSize);\r\n\r\n combineLatest([$itemSize, $bounds, $actualMinItemSize, $actualMaxItemSize, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, min, max, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result < min ? min : (result > max ? max : result));\r\n }\r\n return of(v < min ? min : (v > max ? max : v));\r\n }),\r\n tap(v => {\r\n this._actualItemSize.set(v);\r\n this._service.itemSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $actualItemSize = toObservable(this._actualItemSize),\r\n $actualItems = toObservable(this._actualItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n );\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._actualScrollStartOffset(), 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 this._actualSnapScrollToStart = computed(() => {\r\n const snapScrollToStart = this.snapScrollToStart(), spreadingMode = this.spreadingMode(),\r\n isInfinity = isSpreadingMode(spreadingMode, SpreadingModes.INFINITY);\r\n return isInfinity ? false : snapScrollToStart;\r\n });\r\n\r\n this._actualSnapScrollToEnd = computed(() => {\r\n const snapScrollToEnd = this.snapScrollToEnd(), spreadingMode = this.spreadingMode(),\r\n isInfinity = isSpreadingMode(spreadingMode, SpreadingModes.INFINITY);\r\n return isInfinity ? false : snapScrollToEnd;\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 $itemConfigMap = toObservable(this.itemConfigMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $divides = toObservable(this.divides),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $snapScrollToStart = toObservable(this._actualSnapScrollToStart),\r\n $snapScrollToEnd = toObservable(this._actualSnapScrollToEnd),\r\n $waitForPreparation = toObservable(this.waitForPreparation),\r\n $items = toObservable(this.items);\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $divides, $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, divides, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.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._actualItemSize());\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 scrollerComponent.refresh();\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 scrollerComponent.refresh();\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 scrollerComponent.refresh();\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 const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.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._actualItemSize());\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 scrollerComponent.refresh();\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 $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 $divides.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.divides = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._actualAlignment = computed(() => {\r\n const alignment = this.alignment(), spreadingMode = this.spreadingMode();\r\n return isSpreadingMode(spreadingMode, SpreadingModes.INFINITY) ? Alignments.CENTER : alignment;\r\n });\r\n\r\n this._actualScrollbarEnabled = computed(() => {\r\n const scrollbarEnabled = this.scrollbarEnabled(), spreadingMode = this.spreadingMode();\r\n return isSpreadingMode(spreadingMode, SpreadingModes.INFINITY) ? false : scrollbarEnabled;\r\n });\r\n\r\n const $alignment = toObservable(this._actualAlignment),\r\n $precalculatedScrollStartOffset = toObservable(this._precalculatedScrollStartOffset),\r\n $precalculatedScrollEndOffset = toObservable(this._precalculatedScrollEndOffset),\r\n $listBounds = toObservable(this._listBounds).pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = this._$scrollSize.asObservable(),\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 $snapToItem = toObservable(this.snapToItem),\r\n $snapToItemAlign = toObservable(this.snapToItemAlign),\r\n $stickyEnabled = toObservable(this.stickyEnabled),\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 $collapsingMode = toObservable(this.collapsingMode),\r\n $selectingMode = toObservable(this.selectingMode),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $collapsedIds = toObservable(this.collapsedIds).pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $itemTransform = toObservable(this.itemTransform),\r\n $screenReaderMessage = toObservable(this.screenReaderMessage),\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n $snapToItem.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapToItem = v;\r\n }),\r\n ).subscribe();\r\n\r\n $actualItems.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.items = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$actualItems, $viewInit]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([, init]) => init),\r\n debounceTime(0),\r\n tap(() => {\r\n this._scrollerComponent()?.snapIfNeed();\r\n }),\r\n ).subscribe();\r\n\r\n $itemConfigMap.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.itemConfigMap = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\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, $divides]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy, divides]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy, divides });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\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, divides });\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, divides });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\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];\r\n if (!!item) {\r\n const 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\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 (!!item && hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n const normalizedCollection = normalizeCollection(actualItems, itemConfigMap, trackBy, divides);\r\n\r\n this._actualItems.set(normalizedCollection);\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 $selectingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._list()?.nativeElement;\r\n if (this.getIsMultiSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelection = true;\r\n this._isSingleSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = true;\r\n this._isMultiSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.SELECT;\r\n } else if (this.getIsNoneSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = this._isMultiSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n if (this.getIsNoneCollapse()) {\r\n this._service.isNoneCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isMultipleCollapse = this._isAccordionCollapse = this._isMultipleCollapse = false;\r\n } else if (this.getIsMultipleCollapse()) {\r\n this._service.isMultipleCollapse = this._isMultipleCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isNoneCollapse = this._isAccordionCollapse = false;\r\n } else if (this.getIsAccordionCollapse()) {\r\n this._service.isAccordionCollapse = this._isAccordionCollapse = true;\r\n this._service.isMultipleCollapse = this._service.isNoneCollapse = this._isMultipleCollapse = false;\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 alignment: Alignment; precalculatedScrollStartOffset: number; precalculatedScrollEndOffset: number; trackBy: string; isInfinity: boolean;\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 minItemSize: number; maxItemSize: number; bufferSize: number; maxBufferSize: number; stickyEnabled: boolean; isVertical: boolean;\r\n dynamicSize: boolean; divides: number; enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean;\r\n snapToItem: boolean, snapToItemAlign: SnapToItemAlign, collapsedIds: Array<Id>; itemTransform: ItemTransform | null;\r\n }) => {\r\n const {\r\n alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, trackBy, isInfinity,\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, divides, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem,\r\n snapToItemAlign, cacheVersion, userAction, collapsedIds, itemTransform,\r\n } = params;\r\n const scroller = this._scrollerComponent();\r\n let totalSize = 0;\r\n if (!!scroller) {\r\n const isInfinity = this._isInfinity(), collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading,\r\n fireUpdate = !this._readyForShow || this._$scrollingTo.getValue(),\r\n fireUpdateAtEdges = fireUpdate || !isInfinity;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft);\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :\r\n (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n leftLayoutOffset = 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, minItemSize, maxItemSize, bufferSize, maxBufferSize,\r\n scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n scroller.startLayoutOffset = leftLayoutOffset;\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 if (!_$created.getValue()) {\r\n _$created.next(true);\r\n }\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = actualScrollSize + delta,\r\n roundedScrollPositionAfterUpdate = scrollPositionAfterUpdate,\r\n roundedMaxPositionAfterUpdate = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n switch (alignment) {\r\n case Alignments.NONE: {\r\n this._actualScrollStartOffset.set(precalculatedScrollStartOffset);\r\n this._actualScrollEndOffset.set(precalculatedScrollEndOffset);\r\n break;\r\n }\r\n case Alignments.CENTER: {\r\n const firstItemId: Id | null = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null,\r\n endItemId: Id | null = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null,\r\n alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5),\r\n alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);\r\n\r\n this._alignmentScrollStartOffset.set(alignmentStartOffset);\r\n this._alignmentScrollEndOffset.set(alignmentEndOffset);\r\n this._actualScrollStartOffset.set(precalculatedScrollStartOffset + alignmentStartOffset);\r\n this._actualScrollEndOffset.set(precalculatedScrollEndOffset + alignmentEndOffset);\r\n break;\r\n }\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||\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: fireUpdateAtEdges, 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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (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.isScrollEnd = true;\r\n this._trackBox.isScrollStart = false;\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: fireUpdateAtEdges, 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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\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([$trackBy, $isInfinity, $snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize,\r\n $actualItemSize, $actualMinItemSize, $actualMaxItemSize, $collapsedItemIds, $bufferSize, $maxBufferSize, $stickyEnabled, $isVertical,\r\n $dynamicSize, $divides, $snapToItem, $snapToItemAlign, $enabledBufferOptimization, $itemTransform, $alignment,\r\n $precalculatedScrollStartOffset, $precalculatedScrollEndOffset, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, snapToItem, snapToItemAlign,\r\n enabledBufferOptimization, itemTransform, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, 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 velocity = this._scrollerComponent()?.averageVelocity ?? 0,\r\n isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = (dynamicSize && !itemTransform) && !(snapScrollToEnd && this._trackBox.isSnappedToEnd) && !itemsChanged && hasUserAction && !isScrolling &&\r\n (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\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.next(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 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, , event]) => !!scroller && !!event),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n switchMap(({ event }) => {\r\n const d = event?.delay ?? 0;\r\n if (d > 0) {\r\n return of(event).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(d),\r\n );\r\n }\r\n return of(event);\r\n }),\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 { id, iteration = 0, blending = false, isLastIteration = false, cb } = 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, { id, iteration: nextIteration, blending, 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 scrollerComponent.startScrollTo();\r\n\r\n const items = this._actualItems();\r\n if (!!items && items.length) {\r\n const dynamicSize = this.dynamicSize(), itemSize = this._actualItemSize(), minItemSize = this._actualMinItemSize(),\r\n maxItemSize = this._actualMaxItemSize(), 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(), 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, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(), itemTransform: this.itemTransform(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem(), snapToItemAlign: this.snapToItemAlign(),\r\n stickyEnabled: this.stickyEnabled(), 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, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n const normalizedTotalSize = totalSize < viewportSize ? viewportSize : totalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\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\r\n if (this._isInfinity()) {\r\n if (this.snapToItem()) {\r\n const itemBounds = this._trackBox.getItemBounds(id);\r\n if (!!itemBounds) {\r\n const itemSize = isVertical ? itemBounds.height : itemBounds.width;\r\n switch (this.snapToItemAlign()) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, 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, force: true, snap: false, normalize: false,\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, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, 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, itemSize = this._actualItemSize();\r\n let scrollSize = index * itemSize;\r\n\r\n if (this._isInfinity()) {\r\n if (this.snapToItem()) {\r\n switch (this.snapToItemAlign()) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap(), items = this._actualItems(),\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(), itemTransform: this.itemTransform(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem(), snapToItemAlign: this.snapToItemAlign(),\r\n stickyEnabled: this.stickyEnabled(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n };\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n });\r\n\r\n const actualTotalSize = this._isInfinity() ? (totalSize + viewportSize) : totalSize;\r\n\r\n const normalizedTotalSize = actualTotalSize < viewportSize ? viewportSize : actualTotalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n this._$preventScrollSnapping.next(true);\r\n\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate: false,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending, force: true, snap: false, normalize: false,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, blending, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n tap(([finished, params]) => {\r\n if (!finished) {\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 this._scrollerComponent()?.finishedScrollTo();\r\n this._$fireUpdate.next(true);\r\n this.emitScrollEvent(true, false, true);\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n scrollParams?.cb?.();\r\n }),\r\n delay(100),\r\n tap(([finished]) => {\r\n if (finished) {\r\n this._scrollerComponent()?.snapIfNeed();\r\n }\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.$virtualClick.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._isSingleSelection || (this._isMultiSelection && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds();\r\n if ((this._isSingleSelection && 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 $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return this._service.$collapsedIds.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n const curr = this._collapsedItemIds();\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(v) !== JSON.stringify(curr))) {\r\n this._collapsedItemIds.set(v);\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$collapsingMode, $items, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([collapsingMode, items, itemConfigMap, trackBy]) => {\r\n const isAccordion = isCollapseMode(collapsingMode, CollapsingModes.ACCORDION);\r\n if (isAccordion) {\r\n const allGroups: Array<Id> = [];\r\n if (this._isAccordionCollapse) {\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(this._collapsedItemIds()) !== JSON.stringify(allGroups))) {\r\n this._collapsedItemIds.set(allGroups);\r\n this.onCollapse.emit(copyValueAsReadonly(allGroups));\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.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 const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) || !scroller.scrollable || this._trackBox.isScrollEnd;\r\n if (isScrollEnd) {\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 {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n this._isScrollStart.set(isScrollStart);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = isScrollStart;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this._actualSnapScrollToStart(), snapScrollToEnd = this._actualSnapScrollToEnd();\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 const itemsRange = formatActualDisplayItems(this._service.displayItems, this._actualScrollStartOffset(), this._actualScrollEndOffset(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._scrollerComponent()?.scrollDirection ?? 0, 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 getIsNoneSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.NONE);\r\n }\r\n\r\n private getIsSingleSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.SELECT);\r\n }\r\n\r\n private getIsMultiSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.MULTI_SELECT);\r\n }\r\n\r\n private getIsNoneCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.NONE);\r\n }\r\n\r\n private getIsMultipleCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.MULTI_COLLAPSE);\r\n }\r\n\r\n private getIsAccordionCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.ACCORDION);\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.stickyEnabled()) {\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 delay = options?.delay ?? 0,\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 && !this._isInfinity()) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, delay, 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 const scrollSize = this.isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n if (scrollSize === 0) {\r\n return;\r\n }\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 delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this._actualItems(), 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, delay, 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 const isVertical = this.isVertical,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n maxScrollSize = isVertical ? scroller.scrollHeight : scroller.scrollTop;\r\n if (scrollSize === maxScrollSize) {\r\n return;\r\n }\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 delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this._actualItems(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (latItem === null) {\r\n return;\r\n }\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, delay, 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.next(0);\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n scroller.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._snappedDisplayComponents.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","@let scrollStartOffset = _actualScrollStartOffset();\r\n@let scrollEndOffset = _actualScrollEndOffset();\r\n@let alignmentScrollStartOffset = _alignmentScrollStartOffset();\r\n@let alignmentScrollEndOffset = _alignmentScrollEndOffset();\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()\" [dynamic]=\"dynamicSize()\"\r\n [divides]=\"divides()\" [isVertical]=\"isVertical\" [itemSize]=\"actualItemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset\" [endOffset]=\"scrollEndOffset\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (stickyEnabled()) {\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\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset\"\r\n [endOffset]=\"scrollEndOffset\" [alignmentStartOffset]=\"alignmentScrollStartOffset\" [alignmentEndOffset]=\"alignmentScrollEndOffset\"\r\n [direction]=\"direction()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\" [isInfinity]=\"_isInfinity()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [animationParams]=\"animationParams()\" [focusedElement]=\"focusedElement()\" [loading]=\"loading()\"\r\n [overscrollEnabled]=\"overscrollEnabled()\" [snappingDistance]=\"snappingDistance()\" [overlappingScrollbar]=\"overlappingScrollbar()\"\r\n [scrollbarEnabled]=\"_actualScrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\" [snapToItem]=\"snapToItem()\"\r\n [snapToItemAlign]=\"snapToItemAlign()\" [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\"\r\n [scrollingSettings]=\"scrollingSettings()\" [scrollingOneByOne]=\"scrollingOneByOne()\" [motionBlur]=\"motionBlur()\"\r\n [maxMotionBlur]=\"maxMotionBlur()\" [motionBlurEnabled]=\"motionBlurEnabled()\">\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 { VirtualClickDirective } from './virtual-click.directive';\r\n\r\n@NgModule({\r\n declarations: [VirtualClickDirective],\r\n exports: [VirtualClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class VirtualClickModule { }\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 { VirtualClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, VirtualClickModule],\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 { VirtualClickModule } 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, VirtualClickModule],\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","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface ILintearOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * linear\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/transformations/linear.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const linear = (options?: ILintearOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface IEventHorizonOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * eventHorizon\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/transformations/event-horizon.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const eventHorizon = (options?: IEventHorizonOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .025;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * Math.pow(px, 2) * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * Math.pow(py, 2) * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCardsOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards = (options?: IDeckOfCardsOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCards3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards3D = (options?: IDeckOfCards3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n angle = options?.angle ?? 1,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.rotationX = (isVertical ? py : px) * 200 * angle;\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface ISwipe3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `1.5`.\r\n */\r\n depth?: number;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n}\r\n\r\n/**\r\n * swipe3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/21.x/projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const swipe3D = (options?: ISwipe3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .35,\r\n angle = options?.angle ?? 25,\r\n depth = options?.depth ?? .15,\r\n depthPow = options?.depthPow ?? 4;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n const rx = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + xx * Math.pow(px, 2) * spacingBetweenItems),\r\n ry = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + yy * Math.pow(py, 2) * spacingBetweenItems) : yy;\r\n result.x = rx;\r\n result.y = ry;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * depth, depthPow);\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.rotationZ = (Math.pow(s, 4) * -angle);\r\n result.zIndex = -index;\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { linear } from \"./linear\";\r\nimport { eventHorizon } from \"./event-horizon\";\r\nimport { deckOfCards } from \"./deck-of-cards\";\r\nimport { deckOfCards3D } from \"./deck-of-cards-3d\";\r\nimport { swipe3D } from \"./swipe-3d\";\r\n\r\nexport const ItemTransformations = {\r\n EVENT_HORIZON: eventHorizon,\r\n LINEAR: linear,\r\n DECK_OF_CARDS: deckOfCards,\r\n DECK_OF_CARDS_3D: deckOfCards3D,\r\n SWIPE_3D: swipe3D,\r\n};\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/directives/virtual-click/virtual-click.directive';\r\nexport * from './lib/directives/virtual-click/virtual-click.module';\r\nexport * from './lib/transformations';\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","UNSET","LEFT","RIGHT","POSITION","PX","ITEM_ID","matrix3d","BehaviorSubject","tap","switchMap","i2.VirtualClickDirective","NONE_ALIASES","NORMAL_ALIASES","ScrollerDirection","TOP","INSTANT","SCROLL_EVENT","filter","takeUntil","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective","B_LIMIT"],"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/alignments.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/focus-alignments.ts","../../../projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes.ts","../../../projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts","../../../projects/ng-virtual-list/src/lib/enums/snapping-methods.ts","../../../projects/ng-virtual-list/src/lib/enums/spreading-modes.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/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/components/ng-list-item/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-list-item/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/events/track-box-events.ts","../../../projects/ng-virtual-list/src/lib/enums/selecting-modes-types.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/virtual-click/virtual-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/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/utils/get-service-id-prop.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/utils/object.ts","../../../projects/ng-virtual-list/src/lib/core/const/index.ts","../../../projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts","../../../projects/ng-virtual-list/src/lib/core/track-box.ts","../../../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-select-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/is-collapse-mode.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/utils/is-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts","../../../projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts","../../../projects/ng-virtual-list/src/lib/utils/normalize-collection.ts","../../../projects/ng-virtual-list/src/lib/utils/is-spreading-mode.ts","../../../projects/ng-virtual-list/src/lib/utils/get-scroll-state-version.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/utils/animator/const/index.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/enums/scroller-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/utils/matrix-3d.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/base/base-scroll-view.component.ts","../../../projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts","../../../projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.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/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/virtual-click/virtual-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/lib/transformations/linear.ts","../../../projects/ng-virtual-list/src/lib/transformations/event-horizon.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts","../../../projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts","../../../projects/ng-virtual-list/src/lib/transformations/index.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/22.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/22.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 * Alignments\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/alignments.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum Alignments {\r\n NONE = 'none',\r\n CENTER = 'center',\r\n}","/**\r\n * Action modes for collection elements.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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/22.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 * Focus Alignments.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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 * Modes for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/collapsing-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum CollapsingModes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 'none',\r\n /**\r\n * List items are collapsed one by one.\r\n */\r\n MULTI_COLLAPSE = 'multi-collapse',\r\n /**\r\n * Accordion collapsible list items.\r\n */\r\n ACCORDION = 'accordion',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/selecting-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModes {\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 * SnapToAtemAligns.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/snap-to-item-aligns.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SnapToItemAligns {\r\n /**\r\n * An anchor indicates the beginning of an element.\r\n */\r\n START = 'start',\r\n /**\r\n * The anchor points to the middle of the element.\r\n */\r\n CENTER = 'center',\r\n /**\r\n * An anchor indicates the end of an element.\r\n */\r\n END = 'end',\r\n}","/**\r\n * Snapping method.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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 * SpreadingModes.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/spreading-modes.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SpreadingModes {\r\n /**\r\n * List elements are ordered according to the collection sequence.\r\n */\r\n NORMAL = 'normal',\r\n /**\r\n * List elements are ordered cyclically, forming an infinite list.\r\n */\r\n INFINITY = 'infinity',\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/22.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 {\r\n Alignments, CollapsingModes, CollectionModes, SelectingModes, SnappingMethods, SnapToItemAligns, TextDirections, SpreadingModes,\r\n} from \"../enums\";\r\nimport { Directions } from \"../enums/directions\";\r\nimport { IAnimationParams, IScrollingSettings } from '../interfaces';\r\nimport { SpreadingMode } from \"../types\";\r\nimport { Alignment, SnappingDistance, SnapToItemAlign } from \"../types\";\r\n\r\nexport const SERVICE_PROP_DUMMY_ID = '__service-dummy-id__';\r\n\r\nexport const SERVICE_PROP_DUMMY = '__service-dummy__';\r\n\r\nexport const SERVICE_TYPE_DUMMY = '__service-type-dummy__';\r\n\r\nexport const SERVICE_PROP_DUMMY_ENABLED = Symbol('__service-dummy-enabled__');\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_MIN_ITEM_SIZE = 1;\r\n\r\nexport const DEFAULT_MAX_ITEM_SIZE = Number.MAX_SAFE_INTEGER;\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_OVERLAPPING_SCROLLBAR = false;\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_SNAP_TO_ITEM = false;\r\n\r\nexport const DEFAULT_SNAP_TO_ITEM_ALIGN: SnapToItemAlign = SnapToItemAligns.CENTER;\r\n\r\nexport const DEFAULT_SNAPPING_DISTANCE: SnappingDistance = '25%';\r\n\r\nexport const DEFAULT_SCROLLING_ONE_BY_ONE = false;\r\n\r\nexport const DEFAULT_ALIGNMENT: Alignment = Alignments.NONE;\r\n\r\nexport const DEFAULT_SPREADING_MODE: SpreadingMode = SpreadingModes.NORMAL;\r\n\r\nexport const DEFAULT_DIVIDES = 1;\r\n\r\nexport const DEFAULT_MOTION_BLUR = 0.15;\r\n\r\nexport const DEFAULT_MOTION_BLUR_ENABLED = false;\r\n\r\nexport const DEFAULT_MAX_MOTION_BLUR = 0.5;\r\n\r\nexport const DEFAULT_ANIMATION_PARAMS: IAnimationParams = {\r\n scrollToItem: 50,\r\n snapToItem: 150,\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 mass: 0.005,\r\n maxDistance: 100000,\r\n maxDuration: 4000,\r\n speedScale: 10,\r\n optimization: false,\r\n};\r\n\r\nexport const DEFAULT_OVERSCROLL_ENABLED = true;\r\n\r\nexport const DEFAULT_STICKY_ENABLED = false;\r\n\r\nexport const DEFAULT_SELECT_BY_CLICK = true;\r\n\r\nexport const DEFAULT_ZINDEX_WHEN_SELECTING = null;\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_COLLAPSING_MODES = CollapsingModes.MULTI_COLLAPSE;\r\n\r\nexport const DEFAULT_SELECTING_MODES = SelectingModes.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 DISABLED = 'disabled';\r\n\r\nexport const VIEWPORT = 'viewport';\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 UNSET = 'unset';\r\n\r\nexport const LEFT = 'left';\r\n\r\nexport const RIGHT = 'right';\r\n\r\nexport const POSITION = 'position';\r\n\r\nexport const POSITION_RELATIVE = 'relative';\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_ROW_ODD = ' item-row-odd';\r\n\r\nexport const PART_ITEM_ROW_EVEN = ' item-row-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 PART_DEFAULT_ITEM_FX = 'item-fx';\r\n\r\nexport const PART_ITEM_FX_NEW = ' item-fx-new';\r\n\r\nexport const PART_ITEM_FX_ODD = ' item-fx-odd';\r\n\r\nexport const PART_ITEM_FX_EVEN = ' item-fx-even';\r\n\r\nexport const PART_ITEM_ROW_FX_ODD = ' item-row-fx-odd';\r\n\r\nexport const PART_ITEM_ROW_FX_EVEN = ' item-row-fx-even';\r\n\r\nexport const PART_ITEM_FX_SNAPPED = ' item-fx-snapped';\r\n\r\nexport const PART_ITEM_FX_SELECTED = ' item-fx-selected';\r\n\r\nexport const PART_ITEM_FX_COLLAPSED = ' item-fx-collapsed';\r\n\r\nexport const PART_ITEM_FX_FOCUSED = ' item-fx-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_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';\r\n\r\nexport const PERCENTAGE_VALUE_PATTERN = /^([\\d]+%)$/;\r\n\r\nexport const Z_INDEX_NONE = '-1',\r\n Z_INDEX_0 = '0',\r\n Z_INDEX_1 = '1',\r\n Z_INDEX_2 = '2',\r\n Z_INDEX_3 = '3';","export const NGVL_INDEX = 'ngvl-index',\r\n /**\r\n * getListElementByIndex\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElementByIndex = (index: number) => {\r\n return `[${NGVL_INDEX}=\"${index}\"]`;\r\n },\r\n /**\r\n * getListElements\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/get-element-by-index.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\n getListElements = () => {\r\n return `[${NGVL_INDEX}]`;\r\n };\r\n","/**\r\n * createDisplayId\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/create-display-id.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const createDisplayId = (listId: number, id: number) => {\r\n return `${listId}-${id}`;\r\n};\r\n","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-list-item/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number, rotationZ: number) => {\r\n return rotationZ !== 0 ? `${__matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY)} rotateZ(${rotationZ}deg)` : __matrix3d__(x, y, z, scaleX, scaleY, scaleZ, rotationX, rotationY);\r\n};\r\n\r\nconst __matrix3d__ = (x: number, y: number, z: number, scaleX: number, scaleY: number, scaleZ: number, rotationX: number, rotationY: number) => {\r\n return `matrix3d(\r\n ${scaleX}, 0, ${rotationX}, 0,\r\n 0, ${scaleY}, ${rotationY}, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, ${z}, ${scaleZ}\r\n )`;\r\n};\r\n","import { matrix3d } from \"../utils\";\r\n\r\nexport const ID = 'id',\r\n NGVL_VISIBILITY = 'ngvl-visibility',\r\n MATRIX_3D_HIDDEN = matrix3d(-1000, -1000, 0, 1, 1, 1, 0, 0, 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","/**\r\n * TrackBoxEvents\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/core/events/track-box-events.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum TrackBoxEvents {\r\n CHANGE = 'change',\r\n TICK = 'tick',\r\n}","/**\r\n * Mods for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/enums/selecting-modes-types.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum SelectingModesTypes {\r\n /**\r\n * List items are not selectable.\r\n */\r\n NONE = 0,\r\n /**\r\n * List items are selected one by one.\r\n */\r\n SELECT = 1,\r\n /**\r\n * Multiple selection of list items.\r\n */\r\n MULTI_SELECT = 2,\r\n}","const isUndefinable = <T = any>(value: T) => {\r\n return value === undefined;\r\n}\r\n\r\nconst isNullable = <T = any>(value: T) => {\r\n return value === null;\r\n}\r\n\r\n/**\r\n * Int validator\r\n * @param value Int\r\n */\r\nexport const validateInt = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseInt(`${value}`));\r\n};\r\n\r\n/**\r\n * Float validator\r\n * @param value Float\r\n */\r\nexport const validateFloat = (value: number | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || !Number.isNaN(Number.parseFloat(`${value}`));\r\n};\r\n\r\n/**\r\n * String validator\r\n * @param value String\r\n */\r\nexport const validateString = (value: string | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'string';\r\n};\r\n\r\n/**\r\n * Boolean validator\r\n * @param value Boolean\r\n */\r\nexport const validateBoolean = (value: boolean | undefined, undefinable = false) => {\r\n return (undefinable && isUndefinable(value)) || typeof value === 'boolean';\r\n};\r\n\r\n/**\r\n * Array validator\r\n * @param value Array\r\n */\r\nexport const validateArray = <T = any>(value: Array<T> | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || Array.isArray(value);\r\n};\r\n\r\n/**\r\n * Object validator\r\n * @param value Object\r\n */\r\nexport const validateObject = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'object';\r\n};\r\n\r\n/**\r\n * Function validator\r\n * @param value Function\r\n */\r\nexport const validateFunction = <T = any>(value: Object & T | undefined | null, undefinable = false, nullable = false) => {\r\n return (undefinable && isUndefinable(value)) || (nullable && isNullable(value)) || typeof value === 'function';\r\n};\r\n","import { 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 } from './core/track-box';\r\nimport { TrackBoxEvents } from './core/events';\r\nimport { IRenderVirtualListItem, IVirtualListCollection, IVirtualListItem, IVirtualListItemConfigMap } from './models';\r\nimport { IAnimationParams, IRect, IScrollOptions, ISize } from './interfaces';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport { FocusAlignments, TextDirections } from './enums';\r\nimport { TextDirection } from './types';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport {\r\n BEHAVIOR_AUTO, BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_CLICK_DISTANCE, DEFAULT_COLLAPSE_BY_CLICK,\r\n DEFAULT_ITEM_SIZE, DEFAULT_SELECT_BY_CLICK, DEFAULT_SNAP_TO_ITEM, DEFAULT_ZINDEX_WHEN_SELECTING, 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/22.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 _$virtualClick = new Subject<IRenderVirtualListItem<any> | null>();\r\n $virtualClick = this._$virtualClick.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 _$selectingMode = new BehaviorSubject<SelectingModesTypes>(0);\r\n $selectingMode = this._$selectingMode.asObservable();\r\n\r\n set selectingMode(v: SelectingModesTypes) {\r\n this._$selectingMode.next(v);\r\n }\r\n\r\n private _$focusedId = new BehaviorSubject<Id | null>(null);\r\n $focusedId = this._$focusedId.asObservable();\r\n set focusedId(v: Id | null) {\r\n if (this._$focusedId.getValue() !== v) {\r\n this._$focusedId.next(v);\r\n }\r\n }\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 zIndexWhenSelecting: string | null = DEFAULT_ZINDEX_WHEN_SELECTING;\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 snapToItem: boolean = DEFAULT_SNAP_TO_ITEM;\r\n\r\n isInfinity: boolean = false;\r\n\r\n isVertical: boolean = true;\r\n\r\n dynamic: boolean = true;\r\n\r\n itemSize: number = DEFAULT_ITEM_SIZE;\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 isNoneCollapse: boolean = false;\r\n\r\n isMultipleCollapse: boolean = false;\r\n\r\n isAccordionCollapse: boolean = false;\r\n\r\n private _trackBox: TrackBox | undefined;\r\n\r\n listElement: HTMLDivElement | null = null;\r\n\r\n items: IVirtualListCollection = [];\r\n\r\n itemConfigMap: IVirtualListItemConfigMap = {};\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 _$intersectionElementBySnapToItemAlign = new BehaviorSubject<Id | null>(null);\r\n readonly $intersectionElementBySnapToItemAlign = this._$intersectionElementBySnapToItemAlign.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._$selectingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n switch (v) {\r\n case SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 virtualClick(data: IRenderVirtualListItem | null) {\r\n this._$virtualClick.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) {\r\n this._trackBox?.changes(immediately, false);\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._$selectingMode.getValue()) {\r\n case SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 if (this.isNoneCollapse) {\r\n return;\r\n }\r\n\r\n validateId(id);\r\n const config = this.getItemConfig(id);\r\n if ((!!config && config.collapsable)) {\r\n const allGroups: Array<Id> = [];\r\n if (this.isAccordionCollapse) {\r\n const items = this.items, itemConfigMap = this.itemConfigMap, trackBy = this.trackBy;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n\r\n const curr = this.isAccordionCollapse ? allGroups : [...(this._$collapsedIds.getValue() || []) as Array<Id>],\r\n index = curr.indexOf(id);\r\n if (!collapsed) {\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 if (this.isAccordionCollapse) {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\r\n });\r\n } else {\r\n this._$scrollTo.next({\r\n id, cb: null, options: {\r\n delay: 100, focused: true,\r\n },\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 focusList() {\r\n const element = this.listElement;\r\n if (!!element) {\r\n element.focus({ preventScroll: true });\r\n }\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 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 getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n return this._trackBox?.getComponentBoundsByIntersectionPosition(position, maxPosition) ?? null;\r\n }\r\n\r\n setIntersectionElementBySnapToItemAlign(id: Id | null) {\r\n if (this._$intersectionElementBySnapToItemAlign.getValue() !== id) {\r\n this._$intersectionElementBySnapToItemAlign.next(id);\r\n }\r\n }\r\n\r\n /**\r\n * The method scrolls the list to the element with the given `id` and returns the value of the scrolled area.\r\n */\r\n scrollTo(id: Id, cb: (() => void) | 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 } 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/22.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 $virtualClick(): Observable<IRenderVirtualListItem<any> | null> { return this._internalService.$virtualClick; };\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 collapsedIds(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 collapsedIds() { 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 */\r\n update(immediately: boolean = false) {\r\n this._internalService.update(immediately);\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 { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, ElementRef, inject, Signal, signal, TemplateRef, viewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\r\nimport { map, tap } from 'rxjs';\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, PART_DEFAULT_ITEM_FX, PART_ITEM_FX_COLLAPSED,\r\n PART_ITEM_FX_EVEN, PART_ITEM_FX_FOCUSED, PART_ITEM_FX_NEW, PART_ITEM_FX_ODD, PART_ITEM_FX_SELECTED, PART_ITEM_FX_SNAPPED,\r\n PX, SIZE_100_PERSENT, SIZE_AUTO, TRANSLATE_3D, VISIBILITY_HIDDEN, VISIBILITY_VISIBLE, PART_ITEM_ROW_ODD, PART_ITEM_ROW_EVEN,\r\n PART_ITEM_ROW_FX_ODD, PART_ITEM_ROW_FX_EVEN,\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,\r\n} from '../const';\r\nimport { TextDirections } from '../../../enums';\r\nimport { TextDirection } from '../../../types';\r\nimport { NgVirtualListPublicService } from '../../../ng-virtual-list-public.service';\r\nimport { createDisplayId, matrix3d } from '../utils';\r\nimport { NgVirtualListService } from '../../../ng-virtual-list.service';\r\nimport { IBaseVirtualListItemComponent } from '../../../interfaces/base-virtual-list-item-component';\r\nimport { Color } from '../../../types';\r\n\r\n/**\r\n * BaseVirtualListItemComponent\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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\n@Component({\r\n selector: 'ng-base-virtual-list-item',\r\n template: '',\r\n standalone: false,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class BaseVirtualListItemComponent implements IBaseVirtualListItemComponent {\r\n protected _item = viewChild<ElementRef<HTMLDivElement>>('item');\r\n\r\n protected _container = viewChild<ElementRef<HTMLDivElement>>('container');\r\n\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 set isSelected(v: boolean) {\r\n if (this._isSelected !== v) {\r\n this._isSelected = v;\r\n\r\n this.update();\r\n }\r\n }\r\n get isSelected() { return this._isSelected; }\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 fxPart = signal<string>(PART_DEFAULT_ITEM_FX);\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 _blendColor: Color | null = null;\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 get zIndex() {\r\n return this._elementRef.nativeElement.style.zIndex;\r\n }\r\n\r\n get visibility() {\r\n return this._elementRef.nativeElement.style.visibility;\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 effect(() => {\r\n const part = this.part();\r\n this._elementRef.nativeElement.setAttribute('part', part);\r\n });\r\n\r\n const $focus = this._service.$focusedId.pipe(\r\n takeUntilDestroyed(),\r\n map(id => id === this.itemId),\r\n );\r\n\r\n $focus.pipe(\r\n takeUntilDestroyed(),\r\n tap(() => {\r\n this.updatePartStr(this._data, this._isSelected, this._isCollapsed);\r\n }),\r\n ).subscribe();\r\n\r\n const focus = toSignal($focus);\r\n\r\n this.classes = computed(() => {\r\n const data = this.data(), _focus = focus() ?? false;\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]: _focus,\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 if (this._service.isVertical) {\r\n this._elementRef.nativeElement.style.height = `${this._service.itemSize}px`;\r\n } else {\r\n this._elementRef.nativeElement.style.width = `${this._service.itemSize}px`;\r\n }\r\n\r\n this.hide();\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 itemElement = this._item()?.nativeElement, containerElement = this._container()?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n el.setAttribute(ITEM_ID, `${data.id}`);\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n if (this._service.zIndexWhenSelecting !== null && this._isSelected) {\r\n styles.zIndex = this._service.zIndexWhenSelecting;\r\n } else {\r\n styles.zIndex = data.config.zIndex;\r\n }\r\n this._blendColor = data.config.blendColor ?? null;\r\n if (!!containerElement && !!data.config.blendColor) {\r\n containerElement.style.opacity = String(data.config.opacity);\r\n }\r\n if (!!data.config.filter) {\r\n styles.filter = data.config.filter;\r\n }\r\n if (this.item?.config?.dynamic && 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 ?\r\n (this._langTextDir === TextDirections.RTL ? this._scrollBarSize : 0) :\r\n 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 = matrix3d(data.measures.transformedX, data.measures.transformedY, data.measures.z, data.measures.scaleX, data.measures.scaleY,\r\n data.measures.scaleZ, data.measures.rotationX, data.measures.rotationY, data.measures.rotationZ);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n itemElementStyles.maxHeight = styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n\r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = data.config.isVertical ? SIZE_AUTO : `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = data.config.isVertical ? `${data.measures.minHeight}${PX}` : SIZE_AUTO;\r\n styles.maxHeight = data.config.isVertical ? `${data.measures.maxHeight}${PX}` : SIZE_AUTO;\r\n }\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 const odd = v?.config.odd, rowOdd = v?.measures.row.odd;\r\n\r\n let part = PART_DEFAULT_ITEM, fxPart = PART_DEFAULT_ITEM_FX;\r\n part += odd ? PART_ITEM_ODD : PART_ITEM_EVEN;\r\n part += rowOdd ? PART_ITEM_ROW_ODD : PART_ITEM_ROW_EVEN;\r\n fxPart += odd ? PART_ITEM_FX_ODD : PART_ITEM_FX_EVEN;\r\n fxPart += rowOdd ? PART_ITEM_ROW_FX_ODD : PART_ITEM_ROW_FX_EVEN;\r\n if (v ? v.config.snapped : false) {\r\n part += PART_ITEM_SNAPPED;\r\n fxPart += PART_ITEM_FX_SNAPPED;\r\n }\r\n if (isSelected) {\r\n part += PART_ITEM_SELECTED;\r\n fxPart += PART_ITEM_FX_SELECTED;\r\n }\r\n if (isCollapsed) {\r\n part += PART_ITEM_COLLAPSED;\r\n fxPart += PART_ITEM_FX_COLLAPSED;\r\n }\r\n if (v ? v.config.new : false) {\r\n part += PART_ITEM_NEW;\r\n fxPart += PART_ITEM_FX_NEW;\r\n }\r\n if (this.hasFocus()) {\r\n part += PART_ITEM_FOCUSED;\r\n fxPart += PART_ITEM_FX_FOCUSED;\r\n }\r\n this.part.set(part);\r\n this.fxPart.set(fxPart);\r\n }\r\n\r\n protected hasFocus() {\r\n return this._service.focusedId === this.itemId;\r\n }\r\n\r\n getBounds(): ISize {\r\n const el = this._item()?.nativeElement;\r\n if (!!el) {\r\n const width = el.offsetWidth, height = el.offsetHeight;\r\n return { width, height, };\r\n }\r\n return { width: 0, height: 0 };\r\n }\r\n\r\n show() {\r\n if (!this.item?.config?.dynamic) {\r\n return;\r\n }\r\n const el = this._elementRef.nativeElement as HTMLElement,\r\n styles = el.style;\r\n styles.zIndex = this._data?.config?.zIndex ?? DEFAULT_ZINDEX;\r\n if (this.regular) {\r\n if (styles.display === DISPLAY_BLOCK) {\r\n return;\r\n }\r\n\r\n styles.display = DISPLAY_BLOCK;\r\n } else {\r\n 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 if (!this.item?.config?.dynamic) {\r\n return;\r\n }\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 { 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 * VirtualClickDirective\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/22.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: '[virtualClick]',\r\n standalone: false,\r\n})\r\nexport class VirtualClickDirective {\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 !== null || v !== undefined) ? Number(v) : DEFAULT_MAX_DISTANCE;\r\n }\r\n\r\n onVirtualClick = 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.onVirtualClick.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, 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 { SelectingModesTypes } from '../../enums/selecting-modes-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, NGVL_VISIBILITY,\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/22.x/projects/ng-virtual-list/src/lib/components/ng-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 fromEvent(this.element, EVENT_FOCUS_IN).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(e => {\r\n this._service.focusedId = this.itemId ?? null;\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.getNavigationTimeout()),\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.$selectingMode, 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 SelectingModesTypes.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 SelectingModesTypes.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 SelectingModesTypes.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 getNavigationTimeout() {\r\n return this._service.snapToItem ?\r\n Math.max(this._service.animationParams.snapToItem, this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER) :\r\n this._service.animationParams.navigateByKeyboard ?? NAVIGATION_BY_KEYBOARD_TIMER;\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 !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this.getNavigationTimeout()),\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 !== Number.MIN_SAFE_INTEGER) {\r\n this._service.lastFocusedItemId = index;\r\n }\r\n return of(e).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(this.getNavigationTimeout()),\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._data?.config.totalItems ?? 0,\r\n l = length > 0 ? (this._service.isInfinity ? (length + 1) : length) : 0;\r\n let index = tabIndex;\r\n while (index <= l) {\r\n index++;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_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 Number.MIN_SAFE_INTEGER;\r\n }\r\n\r\n private focusPrev(): number {\r\n if (this._service.listElement) {\r\n const tabIndex = this._data?.config?.tabIndex ?? 0, min = -(this._data?.config?.layoutIndexOffset ?? 0);\r\n let index = tabIndex;\r\n while (index >= min) {\r\n index--;\r\n const element = this._service.listElement.querySelector<HTMLDivElement>(getListElementByIndex(index));\r\n if (!!element && element.getAttribute(NGVL_VISIBILITY) !== VISIBILITY_HIDDEN) {\r\n this._service.focus(element);\r\n return index;\r\n }\r\n }\r\n }\r\n return Number.MIN_SAFE_INTEGER;\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.virtualClick(this._data);\r\n }\r\n}\r\n","@let renderer = itemRenderer();\r\n@let class = classes();\r\n<div #item class=\"ngvl-item\" [ngClass]=\"class\" [part]=\"part()\" [attr.ngvl-index]=\"index()\" [attr.ngvl-visibility]=\"visibility\" tabindex=\"-1\">\r\n @if (_blendColor) {\r\n <div class=\"ngvl-item__blend-color\" [style.--blend-color]=\"_blendColor\"></div>\r\n }\r\n <div #container virtualClick [part]=\"fxPart()\" [maxClickDistance]=\"maxClickDistance()\" class=\"ngvl-item__container\"\r\n [ngClass]=\"class\" (onVirtualClick)=\"onClickHandler()\">\r\n @if (renderer) {\r\n <ng-container [ngTemplateOutlet]=\"renderer\" [ngTemplateOutletContext]=\"templateContext()\" />\r\n }\r\n </div>\r\n</div>","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/22.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/22.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/22.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\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/22.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 get version() {\r\n return this._version;\r\n }\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 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}","/**\r\n * getServiceIdProp\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/core/utils/get-service-id-prop.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getServiceIdProp = (trackBy: string) => {\r\n return `__service-id-${trackBy}__`;\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\nimport { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED } from \"../const\";\r\nimport { getServiceIdProp } from \"./utils\";\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/22.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, trackBy: string): 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 const serviceIdProp = getServiceIdProp(trackBy);\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],\r\n isDummy = item?.data?.[SERVICE_PROP_DUMMY] && (item?.data?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (isDummy) {\r\n continue;\r\n }\r\n const itemTrackingProperty = (item as any)[serviceIdProp] ?? (item as any)[trackBy];\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] ?? null,\r\n data = item?.data,\r\n compId = comp?.instance?.id ?? null;\r\n if (comp !== null && compId === diId && compId !== null && data?.[SERVICE_PROP_DUMMY] !== SERVICE_PROP_DUMMY_ENABLED) {\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 (!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 (!!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","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}","export const START_COLLECTION_PREFIX_ID = 'n',\r\n END_COLLECTION_PREFIX_ID = 'p',\r\n 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\n * ItemDisplayMethods\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/core/enums/item-display-methods.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport enum ItemDisplayMethods {\r\n CREATE,\r\n UPDATE,\r\n DELETE,\r\n NOT_CHANGED,\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 { IRect, ISize } from \"../interfaces\";\r\nimport {\r\n DEFAULT_DIVIDES, HEIGHT_PROP_NAME, SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, TRACK_BY_PROPERTY_NAME, WIDTH_PROP_NAME,\r\n 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\nimport { ScrollDirection } from \"../types\";\r\nimport { objectAsReadonly } from \"../utils/object\";\r\nimport { getServiceIdProp } from \"./utils\";\r\nimport {\r\n DEFAULT_BUFFER_EXTREMUM_THRESHOLD, DEFAULT_MAX_BUFFER_SEQUENCE_LENGTH, DEFAULT_RESET_BUFFER_SIZE_TIMEOUT, END_COLLECTION_PREFIX_ID,\r\n IS_NEW, START_COLLECTION_PREFIX_ID,\r\n} from \"./const\";\r\nimport { Z_INDEX_0, Z_INDEX_1, Z_INDEX_2, Z_INDEX_3, } from '../const';\r\nimport {\r\n IGetItemPositionOptions, IGetMetricsReturns, IItem, IMetrics, IRecalculateMetricsOptions, IUpdateCollectionOptions,\r\n IUpdateCollectionReturns,\r\n} from \"./interfaces\";\r\nimport { TrackBoxEvents } from \"./events\";\r\nimport { Cache, CacheMapEvents, CacheMapListeners } from \"./types\";\r\nimport { ItemDisplayMethods } from \"./enums\";\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/22.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 _scrollDirection: ScrollDirection = 0;\r\n set scrollDirection(v: ScrollDirection) {\r\n if (this._scrollDirection === v) {\r\n return;\r\n }\r\n\r\n this._scrollDirection = v;\r\n }\r\n get scrollDirection() { return this._scrollDirection; }\r\n\r\n protected _trackBy: string = TRACK_BY_PROPERTY_NAME;\r\n set trackBy(v: string) {\r\n if (this._trackBy === v) {\r\n return;\r\n }\r\n\r\n this._trackBy = v;\r\n }\r\n get trackBy() { return this._trackBy; }\r\n\r\n protected _divides: number = DEFAULT_DIVIDES;\r\n\r\n set divides(v: number) {\r\n if (this._divides === v) {\r\n return;\r\n }\r\n\r\n this._divides = v;\r\n }\r\n\r\n protected _isInfinity: boolean = false;\r\n\r\n set isInfinity(v: boolean) {\r\n if (this._isInfinity === v) {\r\n return;\r\n }\r\n\r\n this._isInfinity = 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 protected _isScrollStart: boolean = false;\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 _isScrollEnd: 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 _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 (!!item && 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 if (!!item) {\r\n this._map.set(id, { width: itemSize, height: itemSize, method: ItemDisplayMethods.CREATE });\r\n }\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 ?? options.fromItemId, 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(metrics.items, items, itemConfigMap, { ...metrics, });\r\n return { displayItems, totalSize: metrics.totalSize, delta: metrics.delta, crudDetected, leftLayoutOffset: metrics.leftLayoutOffset };\r\n }\r\n\r\n protected _previousScrollSize = 0;\r\n\r\n protected updateAdaptiveBufferParams<I extends IItem>(metrics: IMetrics<I>, 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<I> {\r\n const { fromItemId, bounds, collection, dynamicSize, isVertical, itemSize, minItemSize, maxItemSize, bufferSize: minBufferSize,\r\n scrollSize, stickyEnabled, itemConfigMap, enabledBufferOptimization, previousTotalSize, snapToItem, snapToItemAlign,\r\n deletedItemsMap, itemTransform } = 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, divides = this._divides,\r\n stickyPos = Math.floor(scrollSize) + this._scrollStartOffset, leftItemsOrRowsWeights: 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 * divides;\r\n break;\r\n }\r\n case -1: {\r\n leftItemsOffset = bufferSize * divides;\r\n rightItemsOffset = 0;\r\n break;\r\n }\r\n case 0:\r\n default: {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n }\r\n } else {\r\n leftItemsOffset = rightItemsOffset = bufferSize * divides;\r\n }\r\n\r\n let itemsFromStartToScrollEnd: number = -1,\r\n itemsFromDisplayEndToOffsetEnd = 0,\r\n 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 | null = null,\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 leftYOffset = 0,\r\n leftLayoutOffset = 0,\r\n leftLayoutIndexOffset = 0,\r\n rightLayoutIndexOffset = 0;\r\n\r\n const isStart = ((roundedScrollSize === 0) || this.isSnappedToStart);\r\n let stickyItemId: Id | undefined, isNew = false;\r\n\r\n let items: Array<I>;\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 items = [];\r\n const serviceIdProp = getServiceIdProp(trackBy);\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,\r\n stickyComponentSize = 0,\r\n row: {\r\n startItemIndex: number;\r\n endItemIndex: number;\r\n size: number;\r\n snapshotSize: number;\r\n deltaFromStartCreation: number;\r\n leftSizeOfAddedItems: number;\r\n leftSizeOfUpdatedItems: number;\r\n leftSizeOfDeletedItems: number;\r\n deltaOfNewItems: number;\r\n leftItemsOrRowsWeights: number | null;\r\n rightItemsWeight: number;\r\n leftHiddenItemsWeight: number;\r\n totalItemsToDisplayEndWeight: number;\r\n } = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const calculate = (i: number, l: number, li: number, isPrecollection: boolean = false, idPrefix: string | null = null) => {\r\n const ii = i + 1;\r\n if (ii > l) {\r\n return false;\r\n }\r\n const collectionItem = collection[i],\r\n id = collectionItem[trackBy],\r\n sticky = itemConfigMap?.[id]?.sticky ?? 0,\r\n isNewRow = i % divides === 0,\r\n isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li,\r\n isRowEnd = (isLastItemInRow || (!isLastItemInRow && isLastItem));\r\n items.push(isPrecollection ? { ...collectionItem, [serviceIdProp]: `_${idPrefix}-${id}_` } : collectionItem);\r\n if (isNewRow || row === null) {\r\n row = {\r\n startItemIndex: i + 1,\r\n endItemIndex: i + divides,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n }\r\n let componentSize = 0, rowSizeDelta = 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 snapshotSize = snapshotBounds ? snapshotBounds[sizeProperty] : typicalItemSize;\r\n\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = Math.max(row.snapshotSize, snapshotSize);\r\n\r\n rowSizeDelta = row.size - row.snapshotSize;\r\n\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 (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n case ItemDisplayMethods.CREATE: {\r\n rowSizeDelta = typicalItemSize;\r\n map.set(id, { ...cache, method: ItemDisplayMethods.UPDATE, [IS_NEW]: isNew });\r\n if (isRowEnd && isNew && y <= (scrollSize + size + deltaFromStartCreation + componentSize)) {\r\n row.deltaFromStartCreation = rowSizeDelta;\r\n rowSizeDelta = 0;\r\n }\r\n break;\r\n }\r\n }\r\n } else {\r\n componentSize = typicalItemSize;\r\n row.size = Math.max(row.size, componentSize);\r\n row.snapshotSize = row.size;\r\n rowSizeDelta = row.size - row.snapshotSize;\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 row.leftSizeOfDeletedItems = Math.max(row.leftSizeOfDeletedItems, size);\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null) {\r\n if (id != fromItemId && id === stickyItemId && 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 leftItemsOrRowsWeights.splice(leftItemsOrRowsWeights.length - deltaNum, deltaNum);\r\n y -= deltaOffset;\r\n }\r\n\r\n itemById = collectionItem;\r\n itemByIdPos = y;\r\n } else {\r\n leftItemsOrRowsWeights.push(componentSize);\r\n leftHiddenItemsWeight += componentSize;\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n } else if (y <= scrollSize - componentSize) {\r\n if (row.leftItemsOrRowsWeights === null) {\r\n row.leftItemsOrRowsWeights = 0;\r\n }\r\n row.leftItemsOrRowsWeights = Math.max(row.leftItemsOrRowsWeights, componentSize);\r\n row.leftHiddenItemsWeight = Math.max(row.leftHiddenItemsWeight, componentSize);\r\n if (!isPrecollection) {\r\n itemsFromStartToScrollEnd = row.startItemIndex;\r\n }\r\n }\r\n\r\n if (isFromId) {\r\n if (itemById === null || y < itemByIdPos + size + componentSize) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n totalItemsToDisplayEndWeight += componentSize;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n } else if (y <= scrollSize + size + componentSize) {\r\n if (!isPrecollection) {\r\n itemsFromStartToDisplayEnd = row.endItemIndex;\r\n itemsFromDisplayEndToOffsetEnd = itemsFromStartToDisplayEnd + rightItemsOffset;\r\n }\r\n row.totalItemsToDisplayEndWeight = Math.max(row.totalItemsToDisplayEndWeight, componentSize);\r\n\r\n if (isRowEnd && y <= scrollSize + componentSize) {\r\n switch (itemDisplayMethod) {\r\n case ItemDisplayMethods.CREATE: {\r\n row.leftSizeOfAddedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.UPDATE:\r\n case ItemDisplayMethods.NOT_CHANGED: {\r\n row.leftSizeOfUpdatedItems = rowSizeDelta;\r\n break;\r\n }\r\n case ItemDisplayMethods.DELETE: {\r\n row.leftSizeOfDeletedItems = rowSizeDelta;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (isRowEnd && itemDisplayMethod === ItemDisplayMethods.CREATE) {\r\n row.deltaOfNewItems = rowSizeDelta;\r\n }\r\n } else {\r\n if (isRowEnd && i < itemsFromDisplayEndToOffsetEnd) {\r\n row.rightItemsWeight = Math.max(row.rightItemsWeight, componentSize);\r\n }\r\n }\r\n\r\n if (isRowEnd) {\r\n if (!isPrecollection) {\r\n deltaFromStartCreation += row.deltaFromStartCreation;\r\n leftSizeOfAddedItems += row.leftSizeOfAddedItems;\r\n leftSizeOfUpdatedItems += row.leftSizeOfUpdatedItems;\r\n leftSizeOfDeletedItems += row.leftSizeOfDeletedItems;\r\n deltaOfNewItems += row.deltaOfNewItems;\r\n rightItemsWeight += row.rightItemsWeight;\r\n totalItemsToDisplayEndWeight += row.totalItemsToDisplayEndWeight;\r\n leftHiddenItemsWeight += row.leftHiddenItemsWeight;\r\n if (row.leftItemsOrRowsWeights !== null) {\r\n leftItemsOrRowsWeights.push(row.leftItemsOrRowsWeights);\r\n }\r\n }\r\n totalSize += row.size;\r\n y += row.size;\r\n }\r\n return true;\r\n }\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n if (!calculate(li - i, l, li, true, START_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n y = this._scrollStartOffset;\r\n totalSize = this._scrollStartOffset + this._scrollEndOffset;\r\n itemsFromStartToDisplayEnd = itemsFromDisplayEndToOffsetEnd = 0;\r\n\r\n (row as any) = null;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0, l = collection.length, li = l - 1; i < l; i++) {\r\n if (!calculate(i, l, li)) {\r\n break;\r\n }\r\n }\r\n\r\n if (this._isInfinity) {\r\n (row as any) = null;\r\n\r\n const yy = y, currentTotalSize = totalSize, viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n row = {\r\n startItemIndex: 0,\r\n endItemIndex: 0,\r\n size: 0,\r\n snapshotSize: 0,\r\n deltaFromStartCreation: 0,\r\n leftSizeOfAddedItems: 0,\r\n leftSizeOfUpdatedItems: 0,\r\n leftSizeOfDeletedItems: 0,\r\n deltaOfNewItems: 0,\r\n leftItemsOrRowsWeights: null,\r\n rightItemsWeight: 0,\r\n leftHiddenItemsWeight: 0,\r\n totalItemsToDisplayEndWeight: 0,\r\n };\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (!calculate(i, l, li, true, END_COLLECTION_PREFIX_ID)) {\r\n break;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n y = yy;\r\n totalSize = currentTotalSize;\r\n rightLayoutIndexOffset = count;\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize);\r\n\r\n if (itemsFromStartToScrollEnd <= -1) {\r\n itemsFromStartToScrollEnd = 0;\r\n }\r\n if (itemsFromStartToDisplayEnd <= -1) {\r\n itemsFromStartToDisplayEnd = 0;\r\n }\r\n\r\n leftItemsOrRowsWeights.splice(0, leftItemsOrRowsWeights.length - bufferSize);\r\n leftItemsOrRowsWeights.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 startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else\r\n // Buffer optimization does not work on fast linear algorithm\r\n {\r\n const dividedTypicalItemSize = typicalItemSize / divides, bufferItemNumbers = bufferSize * divides;\r\n itemsFromStartToScrollEnd = Math.floor(dividedTypicalItemSize !== 0 ? (scrollSize / dividedTypicalItemSize) : 0);\r\n itemsFromStartToDisplayEnd = Math.ceil(dividedTypicalItemSize !== 0 ? ((scrollSize + size) / dividedTypicalItemSize) : 0);\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, bufferSize * divides);\r\n rightItemLength = (itemsFromStartToDisplayEnd + bufferItemNumbers) > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : bufferItemNumbers;\r\n leftItemsWeight = Math.floor(leftItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n rightItemsWeight = Math.floor(rightItemLength * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n leftHiddenItemsWeight = Math.floor(itemsFromStartToScrollEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalItemsToDisplayEndWeight = Math.floor(itemsFromStartToDisplayEnd * dividedTypicalItemSize / typicalItemSize) * typicalItemSize;\r\n totalSize = (totalLength * dividedTypicalItemSize) + this._scrollStartOffset + this._scrollEndOffset;\r\n const k = totalSize !== 0 ? previousTotalSize / totalSize : 0;\r\n\r\n if (isFromId) {\r\n const index = collection.findIndex(item => item[trackBy] == fromItemId);\r\n if (index > -1) {\r\n itemByIdPos = this._scrollStartOffset + Math.floor(index * dividedTypicalItemSize / divides);\r\n isFromItemIdFound = true;\r\n }\r\n }\r\n\r\n actualScrollSize = (isFromId ? itemByIdPos : scrollSize * k);\r\n\r\n items = [];\r\n\r\n if (this._isInfinity) {\r\n const viewportSize = isVertical ? height : width;\r\n let buffSize = -1, y = this._scrollStartOffset;\r\n if (scrollSize <= viewportSize) {\r\n let i = 0, l = collection.length, li = l > 0 ? (l - 1) : 0;\r\n if (l > 0) {\r\n const limit = viewportSize;\r\n while (y <= limit || buffSize > -1) {\r\n const ii = i + 1;\r\n if (buffSize === -1) {\r\n buffSize = leftItemsOffset;\r\n }\r\n if (y >= limit) {\r\n buffSize--;\r\n }\r\n const itemIndex = li - i;\r\n if (collection.length > itemIndex) {\r\n items.push(collection[itemIndex] as I);\r\n } else {\r\n break;\r\n }\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n }\r\n\r\n items.reverse();\r\n leftYOffset = y;\r\n leftLayoutOffset = viewportSize * .5;\r\n leftLayoutIndexOffset = i;\r\n }\r\n }\r\n }\r\n\r\n items.push(...collection);\r\n\r\n if (this._isInfinity) {\r\n let y = Math.floor(totalSize / dividedTypicalItemSize) * dividedTypicalItemSize;\r\n const viewportSize = isVertical ? height : width,\r\n normalizedTotalSize = totalSize + viewportSize;\r\n const l = collection.length, li = l - 1;\r\n let i = 0, count = 0;\r\n while (y < normalizedTotalSize) {\r\n const ii = i + 1;\r\n if (collection.length <= i) {\r\n break;\r\n }\r\n items.push(collection[i]);\r\n const isLastItemInRow = ii % divides === 0,\r\n isLastItem = i === li;\r\n if (isLastItemInRow || (!isLastItemInRow && isLastItem)) {\r\n y += dividedTypicalItemSize;\r\n }\r\n if (ii === l) {\r\n i = 0;\r\n } else {\r\n i++;\r\n }\r\n count++;\r\n }\r\n rightLayoutIndexOffset = count;\r\n leftItemLength = Math.min(itemsFromStartToScrollEnd, leftItemsOffset);\r\n rightItemLength = itemsFromStartToDisplayEnd + rightItemsOffset > totalLength\r\n ? totalLength - itemsFromStartToDisplayEnd : rightItemsOffset;\r\n\r\n startIndex = (Math.ceil(Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0) / divides) * divides);\r\n } else {\r\n startIndex = Math.min(itemsFromStartToScrollEnd - leftItemLength, totalLength > 0 ? totalLength - 1 : 0);\r\n }\r\n }\r\n\r\n const itemsOnDisplayWeight = totalItemsToDisplayEndWeight - leftItemsWeight,\r\n itemsOnDisplayLength = itemsFromStartToDisplayEnd - itemsFromStartToScrollEnd,\r\n startPosition = this._scrollStartOffset + leftHiddenItemsWeight - leftItemsWeight - leftYOffset,\r\n renderItems = (Math.ceil((itemsOnDisplayLength + leftItemLength + rightItemLength) / divides) * divides) + rightLayoutIndexOffset,\r\n startCreationDelta = deltaFromStartCreation > 0 ? deltaFromStartCreation : 0,\r\n delta = leftSizeOfUpdatedItems + leftSizeOfAddedItems - leftSizeOfDeletedItems + startCreationDelta;\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<I> = {\r\n delta,\r\n normalizedItemWidth: w,\r\n normalizedItemHeight: h,\r\n width,\r\n height,\r\n dynamicSize,\r\n divides,\r\n itemSize,\r\n minItemSize,\r\n maxItemSize,\r\n items,\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 leftLayoutOffset,\r\n leftLayoutIndexOffset,\r\n renderItems,\r\n rightItemLength,\r\n rightItemsWeight,\r\n scrollSize: actualScrollSize,\r\n leftSizeOfAddedItems,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\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 snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\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(): void {\r\n this._delta = this._deltaOfNewItems = 0;\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, actualItems: C, itemConfigMap: IVirtualListItemConfigMap,\r\n metrics: IMetrics<I>): IRenderVirtualListCollection {\r\n const {\r\n width,\r\n height,\r\n normalizedItemWidth,\r\n normalizedItemHeight,\r\n dynamicSize,\r\n divides,\r\n itemsOnDisplayLength,\r\n itemsFromStartToScrollEnd,\r\n isVertical,\r\n leftLayoutOffset: layoutOffset,\r\n leftLayoutIndexOffset: layoutIndexOffset,\r\n renderItems: renderItemsLength,\r\n scrollSize,\r\n sizeProperty,\r\n stickyEnabled,\r\n stickyPos,\r\n startPosition,\r\n totalLength,\r\n startIndex,\r\n typicalItemSize,\r\n minItemSize,\r\n maxItemSize,\r\n snapToItem,\r\n snapToItemAlign,\r\n itemTransform,\r\n } = metrics,\r\n displayItems: IRenderVirtualListCollection = [];\r\n\r\n if (items.length) {\r\n const trackBy = this._trackingPropertyName, actualSnippedPosition = stickyPos,\r\n isSnappingMethodAdvanced = this._isSnappingMethodAdvanced,\r\n deltaOffet = (isSnappingMethodAdvanced ? scrollSize : 0),\r\n scrollDirection = this._scrollDirection,\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;\r\n\r\n const li = layoutIndexOffset + actualItems.length - 1;\r\n if (stickyEnabled) {\r\n for (let i = Math.min(itemsFromStartToScrollEnd > 0 ? (divides > 1 ? (itemsFromStartToScrollEnd - 1) : itemsFromStartToScrollEnd) : 0, totalLength - 1); i >= 0; i--) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\r\n continue;\r\n }\r\n const rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides), 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 x = isVertical ? 0 : actualSnippedPosition,\r\n y = isVertical ? actualSnippedPosition : 0;\r\n if (sticky === 1) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n width: isVertical ? normalizedItemWidth : size,\r\n height: isVertical ? size : normalizedItemHeight,\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\r\n position: pos,\r\n boundsSize,\r\n scrollSize,\r\n absoluteStartPosition,\r\n absoluteStartPositionPercent,\r\n absoluteEndPosition,\r\n absoluteEndPositionPercent,\r\n scrollDirection,\r\n delta: sticky === 1 ? this._scrollStartOffset : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_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 break;\r\n }\r\n }\r\n }\r\n\r\n if (stickyEnabled) {\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),\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n l = totalLength; i < l; i++) {\r\n const collectionItem = items[i],\r\n isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED);\r\n if (!collectionItem || isDummy) {\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 = (items.length - layoutIndexOffset + 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 x = isVertical ? 0 : actualEndSnippedPosition - w,\r\n y = isVertical ? actualEndSnippedPosition - h : 0,\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row: {\r\n size,\r\n odd: rowIndex % 2 != 0,\r\n even: rowIndex % 2 == 0,\r\n },\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 minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: actualEndSnippedPosition - deltaOffet - size,\r\n }, config: IRenderVirtualListItemConfig = {\r\n fullSize: true,\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: true,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_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 const collectionLength = items.length;\r\n let i = startIndex,\r\n ci = 0,\r\n row: {\r\n size: number;\r\n odd: boolean;\r\n even: boolean;\r\n } = {\r\n size: 0,\r\n odd: false,\r\n even: false,\r\n };\r\n while (renderItems > 0) {\r\n if (i >= collectionLength) {\r\n break;\r\n }\r\n const collectionItem = items[i];\r\n if (!collectionItem) {\r\n break;\r\n }\r\n\r\n const isDummy = collectionItem?.[SERVICE_PROP_DUMMY] && (collectionItem?.[SERVICE_PROP_DUMMY] === SERVICE_PROP_DUMMY_ENABLED),\r\n ii = i + 1,\r\n rowIndex = Math.floor(((items.length - layoutIndexOffset + i) + 1) / divides),\r\n id = collectionItem[trackBy],\r\n cache = this.get(id)!,\r\n size = isDummy ? typicalItemSize : (dynamicSize ? cache?.[sizeProperty] || typicalItemSize : typicalItemSize),\r\n divSize = (isVertical ? normalizedItemWidth : normalizedItemHeight) / divides;\r\n\r\n if (i % divides === 0) {\r\n ci = 0;\r\n row = {\r\n size,\r\n odd: rowIndex % 2 !== 0,\r\n even: rowIndex % 2 === 0,\r\n };\r\n } else {\r\n row.size = Math.max(row.size, size);\r\n ci++;\r\n }\r\n\r\n if (!isDummy) {\r\n if ((isSnappingMethodAdvanced || id !== stickyItem?.id) && id !== endStickyItem?.id) {\r\n const isOdd = (items.length - layoutIndexOffset + i) % 2 != 0,\r\n sticky = itemConfigMap[id]?.sticky ?? 0,\r\n fullSize = itemConfigMap[id]?.fullSize ?? false,\r\n selectable = itemConfigMap[id]?.selectable ?? true,\r\n collapsable = itemConfigMap[id]?.collapsable ?? false,\r\n snapped = stickyEnabled && (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 x = isVertical ? divSize * ((sticky || fullSize) ? 0 : ci) : pos,\r\n y = isVertical ? pos : divSize * ((sticky || fullSize) ? 0 : ci),\r\n measures: IRenderVirtualListItemMeasures = {\r\n x,\r\n y,\r\n transformedX: x,\r\n transformedY: y,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n size,\r\n row,\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 ? ((sticky || fullSize) ? normalizedItemWidth : (normalizedItemWidth / divides)) : size,\r\n height: isVertical ? size : ((sticky || fullSize) ? normalizedItemHeight : (normalizedItemHeight / divides)),\r\n minWidth: minItemSize,\r\n minHeight: minItemSize,\r\n maxWidth: maxItemSize,\r\n maxHeight: maxItemSize,\r\n scrollDirection,\r\n delta: sticky === 1 ? actualSnippedPosition : sticky === 2 ? actualEndSnippedPosition - deltaOffet - size : 0,\r\n }, config: IRenderVirtualListItemConfig = {\r\n isFirst: i === layoutIndexOffset,\r\n isLast: i === li,\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: stickyEnabled,\r\n snapped: false,\r\n snappedOut: false,\r\n dynamic: dynamicSize,\r\n isSnappingMethodAdvanced,\r\n layoutOffset,\r\n layoutIndexOffset,\r\n totalItems: items.length,\r\n snapToItem,\r\n snapToItemAlign,\r\n tabIndex: i - layoutIndexOffset,\r\n isStub: (isSnappingMethodAdvanced && id === stickyItem?.id),\r\n divides,\r\n opacity: 1,\r\n zIndex: Z_INDEX_0,\r\n fullSize,\r\n };\r\n\r\n if (snapped) {\r\n config.zIndex = Z_INDEX_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 = Z_INDEX_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 = Z_INDEX_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\r\n renderItems--;\r\n if (ii % divides === 0 || renderItems <= 0) {\r\n pos += row.size;\r\n }\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 if (itemTransform !== null) {\r\n for (let i = 0, l = displayItems.length; i < l; i++) {\r\n const item = displayItems[i];\r\n if (!!item) {\r\n const transformation = itemTransform(item.index, objectAsReadonly(item.measures), objectAsReadonly(item.config));\r\n item.measures.transformedX = transformation.x;\r\n item.measures.transformedY = transformation.y;\r\n item.measures.z = transformation.z;\r\n item.measures.rotationX = transformation.rotationX;\r\n item.measures.rotationY = transformation.rotationY;\r\n item.measures.rotationZ = transformation.rotationZ;\r\n item.measures.scaleX = transformation.scaleX;\r\n item.measures.scaleY = transformation.scaleY;\r\n item.measures.scaleZ = transformation.scaleZ;\r\n item.config.opacity = transformation.opacity;\r\n item.config.filter = transformation.filter;\r\n item.config.blendColor = transformation.blendColor;\r\n item.config.zIndex = String(transformation.zIndex);\r\n }\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.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, this._trackBy);\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 getComponentBoundsByIntersectionPosition(position: number, maxPosition: number | null = null): (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null {\r\n const components = this._displayComponents;\r\n let first: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null,\r\n last: (IRect & { id: Id | null; isFirst: boolean; isLast: boolean; }) | null = null;\r\n if (!!components) {\r\n for (const comp of components) {\r\n const id = comp.instance.itemId ?? null, isVertical = comp.instance.item?.config?.isVertical,\r\n x = comp.instance.item?.measures?.x ?? 0,\r\n y = comp.instance.item?.measures?.y ?? 0,\r\n isFirst = comp.instance.item?.config?.isFirst ?? false,\r\n isLast = comp.instance.item?.config?.isLast ?? false,\r\n { width, height } = comp.instance.getBounds(),\r\n pos = position;\r\n if (isVertical && (pos >= y && pos < y + height)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n } else if (!isVertical && (pos >= x && pos < x + width)) {\r\n return { id, x, y, width, height, isFirst, isLast };\r\n }\r\n if (isFirst) {\r\n first = { id, x, y, width, height, isFirst, isLast };\r\n } else if (isLast) {\r\n last = { id, x, y, width, height, isFirst, isLast };\r\n }\r\n }\r\n }\r\n if (position < 0) {\r\n return first;\r\n }\r\n if (maxPosition !== null && position > maxPosition) {\r\n return last;\r\n }\r\n return null;\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","import { SnappingMethods } from \"../enums\";\r\nimport { SnappingMethod } from \"../types\";\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 { Directions } from \"../enums\";\r\nimport { Direction } from \"../types\";\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/22.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 { SelectingModes } from \"../enums\";\r\nimport { SelectingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [SelectingModes.NONE, 'none'],\r\n SELECT_ALIASES = [SelectingModes.SELECT, 'select'],\r\n MULTI_SELECT_ALIASES = [SelectingModes.MULTI_SELECT, 'multi-select'];\r\n\r\n/**\r\n * Defines the mode for selecting list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSelectMode = (src: SelectingMode, expected: SelectingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (SELECT_ALIASES.includes(expected)) {\r\n return SELECT_ALIASES.includes(src);\r\n }\r\n return MULTI_SELECT_ALIASES.includes(src);\r\n}\r\n","import { CollapsingModes } from \"../enums\";\r\nimport { CollapsingMode } from \"../types\";\r\n\r\nconst NONE_ALIASES = [CollapsingModes.NONE, 'none'],\r\n MULTIMPLE_ALIASES = [CollapsingModes.MULTI_COLLAPSE, 'multi-collapse'],\r\n ACCORDION_ALIASES = [CollapsingModes.ACCORDION, 'accordion'];\r\n\r\n/**\r\n * Defines the mode for collapsing list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/is-collapse-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isCollapseMode = (src: CollapsingMode, expected: CollapsingMode): boolean => {\r\n if (NONE_ALIASES.includes(expected)) {\r\n return NONE_ALIASES.includes(src);\r\n } else if (MULTIMPLE_ALIASES.includes(expected)) {\r\n return MULTIMPLE_ALIASES.includes(src);\r\n }\r\n return ACCORDION_ALIASES.includes(src);\r\n}\r\n","import { CollectionModes } from \"../enums\";\r\nimport { CollectionMode } from \"../types\";\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/22.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","import { PERCENTAGE_VALUE_PATTERN } from \"../const\";\r\n\r\n/**\r\n * isPercentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/is-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isPercentageValue = (value: number | `${number}%` | string) => {\r\n if (value === undefined || typeof value === 'number') {\r\n return false;\r\n }\r\n return PERCENTAGE_VALUE_PATTERN.test(value);\r\n};","import { isPercentageValue } from \"./is-persentage-value\";\r\n\r\nconst PERSENTS_100 = 100,\r\n PERSENTS_1 = 1,\r\n SIZE_PERSENT = '%',\r\n CHAR_NONE = '';\r\n\r\n/**\r\n * parseFloatOrPersentageValue\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/parse-float-or-persentage-value.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseFloatOrPersentageValue = (value: number | `${number}%` | string): number => {\r\n const isPercentage = isPercentageValue(value);\r\n if (isPercentage) {\r\n const v = parseFloat(String(value).replace(SIZE_PERSENT, CHAR_NONE));\r\n return v / (isPercentage ? PERSENTS_100 : PERSENTS_1);\r\n }\r\n return value as number;\r\n}\r\n","import { ArithmeticExpression } from \"../types\";\r\nimport { isPercentageValue } from \"./is-persentage-value\";\r\nimport { parseFloatOrPersentageValue } from \"./parse-float-or-persentage-value\";\r\n\r\nconst WHITESPACE = ' ', PLUS = '+', MINUS = '-', OPERATORS = [PLUS, MINUS];\r\n\r\nconst calculate = (exp: string, reference: number, operator: -1 | 1 = 1) => {\r\n let result: number = 0;\r\n const isPercentage = isPercentageValue(exp);\r\n if (isPercentage) {\r\n const v = parseFloatOrPersentageValue(exp);\r\n result += (reference * v) * operator;\r\n } else {\r\n result += (Number(exp) ?? 0) * operator;\r\n }\r\n return result;\r\n}\r\n\r\n/**\r\n * parseArithmeticExpression\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/parse-arithmetic-expression.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const parseArithmeticExpression = (value: ArithmeticExpression, reference: number): number => {\r\n if (typeof value === 'number') {\r\n return value;\r\n }\r\n\r\n let result: number = 0, operator: 1 | -1 = 1, exp: string = '';\r\n for (let i = 0, l = value.length; i < l; i++) {\r\n const char = value[i], isLast = i === l - 1;\r\n if ((char === WHITESPACE) || isLast) {\r\n if (isLast) {\r\n exp = `${exp}${char}`;\r\n }\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n continue;\r\n }\r\n else if (OPERATORS.indexOf(char) > -1) {\r\n if (exp.length > 0) {\r\n result += calculate(exp, reference, operator);\r\n }\r\n exp = '';\r\n operator = char === PLUS ? 1 : -1;\r\n continue;\r\n } else {\r\n exp = `${exp}${char}`;\r\n }\r\n }\r\n return result;\r\n}\r\n","import { SERVICE_PROP_DUMMY, SERVICE_PROP_DUMMY_ENABLED, SERVICE_PROP_DUMMY_ID, SERVICE_TYPE_DUMMY } from \"../const\";\r\nimport { IVirtualListCollection, IVirtualListItemConfigMap } from \"../models\";\r\n\r\n/**\r\n * normalizeCollection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/normalize-collection.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const normalizeCollection = (items: IVirtualListCollection, itemConfigMap: IVirtualListItemConfigMap, trackBy: string, divides: number) => {\r\n if (divides > 1) {\r\n const normalizedItems: IVirtualListCollection<any | null> = [];\r\n let ci = -1, emptyId = Number.MIN_SAFE_INTEGER, offset = 0;\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const ii = i + offset, item = items[i], id = item[trackBy] ?? null, config = id !== null ? itemConfigMap[id] : null,\r\n fullSize = !!config ? ((!!config.sticky && config.sticky > 0) || (config.fullSize === true)) : false;\r\n\r\n if ((ii % divides) === 0) {\r\n ci = 0;\r\n } else {\r\n ci++;\r\n }\r\n\r\n if (fullSize && ii > 0 && ci !== 0) {\r\n for (let j = ci; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n normalizedItems.push(item);\r\n if (fullSize && (i < (l - 1))) {\r\n for (let j = 1; j < divides; j++) {\r\n const dummyId = `${SERVICE_PROP_DUMMY_ID}-${i},${j}`;\r\n normalizedItems.push({ [trackBy]: dummyId, [SERVICE_PROP_DUMMY]: SERVICE_PROP_DUMMY_ENABLED, type: SERVICE_TYPE_DUMMY });\r\n emptyId++;\r\n offset++;\r\n }\r\n }\r\n }\r\n return normalizedItems;\r\n }\r\n return items;\r\n}\r\n","import { SpreadingModes } from \"../enums\";\r\nimport { SpreadingMode } from \"../types\";\r\n\r\nconst NORMAL_ALIASES = [SpreadingModes.NORMAL, 'normal'],\r\n INFINITY_ALIASES = [SpreadingModes.INFINITY, 'infinity'];\r\n\r\n/**\r\n * Determines the display mode of list items.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/is-select-mode.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const isSpreadingMode = (src: SpreadingMode, expected: SpreadingMode): boolean => {\r\n if (INFINITY_ALIASES.includes(expected)) {\r\n return INFINITY_ALIASES.includes(src);\r\n }\r\n return NORMAL_ALIASES.includes(src);\r\n}\r\n","import { EMPTY_SCROLL_STATE_VERSION } from \"../const\";\r\n\r\nexport const getScrollStateVersion = (totalSize: number, scrollSize: number): string => {\r\n if (totalSize === -1) {\r\n return EMPTY_SCROLL_STATE_VERSION;\r\n }\r\n let scrollStateUpdateIndex = 0;\r\n if (totalSize < scrollSize) {\r\n scrollStateUpdateIndex = scrollStateUpdateIndex === Number.MAX_SAFE_INTEGER ? 0 : scrollStateUpdateIndex + 1;\r\n }\r\n return `${scrollStateUpdateIndex}_${totalSize}_${scrollSize}`;\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/22.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}","export const DEFAULT_WITH_DELTA = false,\r\n DEFAULT_ANIMATION_DURATION = 500,\r\n ANIMATOR_MIN_TIMESTAMP = 1000 / 30,\r\n MIN_ANIMATED_VALUE = 10;\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 { ANIMATOR_MIN_TIMESTAMP, DEFAULT_ANIMATION_DURATION, DEFAULT_WITH_DELTA } from './const';\r\nimport { easeLinear } from './ease';\r\nimport { IAnimatorParams, IAnimatorUpdateData } from './interfaces';\r\n\r\n/**\r\n * Animator\r\n * @link https://github.com/DjonnyX/data-channel-router/blob/main/library/src/utils/animator/animator.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class Animator {\r\n private static _nextId: number = 0;\r\n\r\n private _animationId: number = 0;\r\n\r\n private _currentId: number = Animator._nextId;\r\n\r\n private generateId() {\r\n return Animator._nextId = Animator._nextId === Number.MAX_SAFE_INTEGER\r\n ? 0 : Animator._nextId + 1;\r\n }\r\n\r\n animate(params: IAnimatorParams) {\r\n this.stop();\r\n\r\n const id = this.generateId();\r\n this._currentId = id;\r\n\r\n const {\r\n withDelta = DEFAULT_WITH_DELTA, startValue, endValue, duration = DEFAULT_ANIMATION_DURATION,\r\n getPropValue, easingFunction = easeLinear, onUpdate, onComplete,\r\n } = params;\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, isFinished = false;\r\n\r\n const step = (currentTime: number) => {\r\n if (id !== this._currentId) {\r\n isCanceled = true;\r\n }\r\n\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 = (withDelta ? startPosDelta : 0) + start + diff * easedProgress,\r\n currentValue = val,\r\n t = performance.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 id,\r\n delta,\r\n elapsed,\r\n value: !withDelta && isFinished ? endValue : 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 id,\r\n delta,\r\n elapsed,\r\n value: withDelta ? currentValue : endValue,\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_OVERSCROLL_ENABLED = new InjectionToken<boolean>('ScrollViewOverscrollEnabled');\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 INTERSECTION_DISTANCE = 1;\r\n\r\nexport const MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS = 5,\r\n INSTANT_VELOCITY_SCALE = 1000;\r\n\r\nexport const SCROLL_EVENT = new Event(SCROLLER_SCROLL);\r\n","/**\r\n * calculateDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport 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","/**\r\n * ScrollerDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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}","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/22.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}","/**\r\n * matrix3d\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/matrix-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const matrix3d = (x: number, y: number) => {\r\n return `matrix3d(\r\n 1, 0, 0, 0,\r\n 0, 1, 0, 0,\r\n 0, 0, 1, 0,\r\n ${x}, ${y}, 0, 1\r\n )`;\r\n};\r\n","/**\r\n * getDir\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/get-dir.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const getDir = (p: number, c: number) => {\r\n return p < c ? 1 : p > c ? -1 : 0;\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, SCROLL_VIEW_OVERSCROLL_ENABLED } 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/22.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 alignmentStartOffset = input<number>(0);\r\n\r\n readonly alignmentEndOffset = input<number>(0);\r\n\r\n readonly isInfinity = input<boolean>(false);\r\n\r\n readonly isVertical: Signal<boolean>;\r\n\r\n readonly grabbing = signal<boolean>(false);\r\n\r\n protected _inversion = inject(SCROLL_VIEW_INVERSION);\r\n\r\n protected _overscrollEnabled = inject(SCROLL_VIEW_OVERSCROLL_ENABLED);\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 this._inversion ? (totalSize < viewportSize) : (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 = 0;\r\n set x(v: number) {\r\n this._x = this._actualX = v;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n get x() { return this._x; }\r\n\r\n protected _y: number = 0;\r\n set y(v: number) {\r\n this._y = this._actualY = v;\r\n\r\n this.normalizeScrollSize();\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(), endOffset = this.alignmentEndOffset();\r\n this._actualTotalSize = v + startOffset + endOffset;\r\n\r\n this.normalizeScrollSize();\r\n }\r\n }\r\n get totalSize() {\r\n return this._totalSize;\r\n }\r\n\r\n protected _startLayoutOffset: number = 0;\r\n set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n }\r\n }\r\n get startLayoutOffset() { return this._startLayoutOffset; }\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 + this.alignmentEndOffset()));\r\n }\r\n return contentWidth < viewportWidth ? isVertical ? 0 : startOffset : ((contentWidth + this.alignmentEndOffset()) - 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 + this.alignmentEndOffset()));\r\n }\r\n return contentHeight < viewportHeight ? isVertical ? startOffset : 0 : ((contentHeight + this.alignmentEndOffset()) - 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 _isCoordinatesOverrided: boolean = false;\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 overrideCoordinates(x: number, y: number) { }\r\n\r\n protected normalizeScrollSize() {\r\n if (this.isInfinity()) {\r\n const isVertical = this.isVertical();\r\n if (isVertical) {\r\n const scrollSize = (this._totalSize - this.viewportBounds().height);\r\n if (this._y < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n } else if (this._y > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(this._x, currentPosition);\r\n this._y = currentPosition;\r\n return true;\r\n }\r\n } else {\r\n const scrollSize = (this._totalSize - this.viewportBounds().width);\r\n if (this._x < 0) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = scrollSize;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n } else if (this._x > scrollSize) {\r\n this._isCoordinatesOverrided = true;\r\n const currentPosition = 0;\r\n this.overrideCoordinates(currentPosition, this._y);\r\n this._x = currentPosition;\r\n return true;\r\n }\r\n }\r\n }\r\n this._isCoordinatesOverrided = false;\r\n return false;\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(value: number | null = null) {\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 : value ?? (w - startOffset),\r\n height = isVertical ? value ?? (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 { BehaviorSubject } from \"rxjs\";\r\nimport { ScrollDirection } from \"../types\";\r\n\r\n/**\r\n * ScrollingDirection\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/utils/scrolling-direction.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport class ScrollingDirection {\r\n private _value: number = 0;\r\n\r\n private _$direction = new BehaviorSubject<ScrollDirection>(0);\r\n readonly $direction = this._$direction.asObservable();\r\n\r\n constructor(private _length: number = 5) { }\r\n\r\n add(v: ScrollDirection) {\r\n this._value += v;\r\n const dir = this._value < this._length ? -this._length : this._value > this._length ? this._length : this._value,\r\n result = dir === 0 ? 0 : Math.sign(dir) as ScrollDirection;\r\n this._$direction.next(result);\r\n }\r\n\r\n get(): ScrollDirection {\r\n return this._$direction.getValue();\r\n }\r\n\r\n clear() {\r\n this._value = 0;\r\n this._$direction.next(0);\r\n }\r\n}","import { INSTANT_VELOCITY_SCALE } from \"../const\";\r\n\r\n/**\r\n * calculateVelocity\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/components/ng-scroll-view/utils/calculate-velocity.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const calculateVelocity = (startPosition: number, currentPosition: number, timestamp: number) => {\r\n const s = currentPosition - startPosition, t = timestamp;\r\n return t !== 0 ? (s / t) * INSTANT_VELOCITY_SCALE : 0;\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 { BehaviorSubject, debounceTime, delay, filter, fromEvent, map, of, race, Subject, switchMap, takeUntil, tap } from 'rxjs';\r\nimport { ANIMATOR_MIN_TIMESTAMP, Animator, Easing, easeOutQuad } from '../../utils/animator';\r\nimport {\r\n BEHAVIOR_INSTANT, DEFAULT_ANIMATION_PARAMS, DEFAULT_OVERSCROLL_ENABLED, DEFAULT_SCROLL_BEHAVIOR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_SCROLLING_SETTINGS, DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, DEFAULT_SNAPPING_DISTANCE, INTERACTIVE, MOUSE_DOWN,\r\n MOUSE_MOVE, MOUSE_UP, 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, INTERSECTION_DISTANCE, LEFT, MASS, MAX_DIST, MAX_DURATION, MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS,\r\n MAX_VELOCITY_TIMESTAMP, OVERSCROLL_START_ITERATION, SCROLL_EVENT, SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SMOOTH, SPEED_SCALE, TOP,\r\n} from './const';\r\nimport { calculateDirection, matrix3d } from './utils';\r\nimport { BaseScrollView } from './base/base-scroll-view.component';\r\nimport { IAnimationParams, IScrollingSettings } from '../../interfaces';\r\nimport { SnapToItemAligns } from '../../enums';\r\nimport { NgVirtualListService } from '../../ng-virtual-list.service';\r\nimport { Id, SnappingDistance, SnapToItemAlign } from '../../types';\r\nimport { parseFloatOrPersentageValue } from '../../utils/parse-float-or-persentage-value';\r\nimport { isPercentageValue } from '../../utils/is-persentage-value';\r\nimport { ScrollingDirection } from '../../utils/scrolling-direction';\r\nimport { calculateVelocity } from './utils/calculate-velocity';\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/22.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 protected _service = inject(NgVirtualListService);\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 readonly snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM);\r\n\r\n readonly scrollingOneByOne = input<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE);\r\n\r\n readonly snapToItemAlign = input<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN);\r\n\r\n readonly snappingDistance = input<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE);\r\n\r\n readonly animationParams = input<IAnimationParams>(DEFAULT_ANIMATION_PARAMS);\r\n\r\n protected _normalizeValueFromZero = inject(SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO);\r\n\r\n protected _isScrollsTo: boolean = false;\r\n\r\n protected _scrollDirection = new ScrollingDirection();\r\n get scrollDirection() {\r\n return this._scrollDirection.get();\r\n }\r\n\r\n get $scrollDirection() { return this._scrollDirection.$direction; }\r\n\r\n protected _$wheel = new Subject<number>();\r\n readonly $wheel = this._$wheel.asObservable();\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 protected _velocities: Array<number> = [];\r\n\r\n protected _$velocity = new BehaviorSubject<number>(0);\r\n protected $velocity = this._$velocity.asObservable();\r\n get velocity() { return this._$velocity.getValue(); }\r\n\r\n protected _$averageVelocity = new BehaviorSubject<number>(0);\r\n protected $averageVelocity = this._$averageVelocity.asObservable();\r\n get averageVelocity() { return this._$averageVelocity.getValue(); }\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 _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 override set x(v: number) {\r\n this.setX(v);\r\n }\r\n override get x() { return this._x; }\r\n\r\n protected setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._y);\r\n\r\n this._x = this._actualY = x;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set y(v: number) {\r\n this.setY(v);\r\n }\r\n override get y() { return this._y; }\r\n\r\n protected setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n if (normalize) {\r\n this.normalizeScrollSize();\r\n }\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.measureVelocity();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected _delta: number = 0;\r\n set delta(v: number) {\r\n this._delta = v;\r\n this._startPosition += v;\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\r\n\r\n protected _intersectionComponentId: Id | null = null;\r\n\r\n protected _isAlignmentAnimation = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n let mouseCanceled = false,\r\n touchCanceled = false;\r\n\r\n const $viewportBounds = toObservable(this.viewportBounds);\r\n $viewportBounds.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled || !touchCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = touchCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this.stopScrolling(true);\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(v => of(this.averageVelocity)),\r\n debounceTime(100),\r\n tap(v => {\r\n this.snapWithInitialForceIfNecessary(v);\r\n this._scrollDirection.clear();\r\n }),\r\n ).subscribe();\r\n\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(true);\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),\r\n position = this.isInfinity() ? dp : (dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp);\r\n this.scroll({ [isVertical ? TOP : LEFT]: position, behavior: INSTANT, userAction: true, blending: false, fireUpdate: true });\r\n this._$wheel.next(delta);\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $mouseUp = race([\r\n fromEvent<MouseEvent>(window, MOUSE_UP, { passive: true }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => fromEvent<MouseEvent>(content, MOUSE_UP, { passive: true }))\r\n ),\r\n ]),\r\n $mouseDragCancel = $mouseUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem() && this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\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(() => this._interactive),\r\n switchMap(e => {\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 takeUntil(fromEvent<MouseEvent>(window, MOUSE_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!mouseCanceled) {\r\n this.stopMoving();\r\n }\r\n mouseCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\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 mouseCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\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 = isVertical ? e.clientY : e.clientX,\r\n startClientPos = prevClientPosition,\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 const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\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 takeUntil($mouseDragCancel),\r\n tap(e => {\r\n mouseCanceled = true;\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.snapIfNecessary(v0, false) && this.scrollBehavior() !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n const $touchUp = race(\r\n [\r\n fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n ),\r\n $content.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n switchMap(content => fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })),\r\n ),\r\n ]\r\n ),\r\n $touchCanceler = $touchUp.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(0),\r\n tap(() => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem() && this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\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 return race([fromEvent<TouchEvent>(window, TOUCH_END, { passive: false }), fromEvent<TouchEvent>(content, TOUCH_END, { passive: false })]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n takeUntil(fromEvent<TouchEvent>(window, TOUCH_MOVE, { passive: false })),\r\n tap(e => {\r\n this._isMoving = false;\r\n this.grabbing.set(false);\r\n if (!touchCanceled) {\r\n this.stopMoving();\r\n }\r\n touchCanceled = true;\r\n if (this.snapToItem() || this.scrollingOneByOne()) {\r\n this._isAlignmentAnimation = false;\r\n this.alignPosition(true, true);\r\n }\r\n this._$scrollEnd.next(true);\r\n }),\r\n );\r\n }),\r\n );\r\n }),\r\n ).subscribe();\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 touchCanceled = false;\r\n this._scrollDirection.clear();\r\n this.cancelOverscroll();\r\n this.onDragStart();\r\n this.stopScrolling(true);\r\n this.stopMoving();\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 = isVertical ? e.touches[e.touches.length - 1].clientY : e.touches[e.touches.length - 1].clientX,\r\n startClientPos = prevClientPosition,\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 const offset = Math.abs(position) - Math.abs(isVertical ? this._y : this._x),\r\n scrollSize = isVertical ? this.scrollHeight : this.scrollWidth,\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n if (position >= (scrollSize - viewportSize * .5) || position <= 0) {\r\n startClientPos -= offset;\r\n }\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 takeUntil($touchCanceler),\r\n tap(e => {\r\n touchCanceled = true;\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.snapIfNecessary(v0, false) && this.scrollBehavior() !== BEHAVIOR_INSTANT) {\r\n this.moveWithAcceleration(isVertical, position, 0, v0, a0, timestamp);\r\n } else {\r\n this.snapIfNecessary(v0);\r\n this._$scrollEnd.next(true);\r\n }\r\n }),\r\n );\r\n }),\r\n );\r\n })\r\n );\r\n }),\r\n ).subscribe();\r\n }\r\n\r\n protected updateDirection(position: number, prePosition: number) {\r\n const delta = (position - this._delta) - prePosition;\r\n this._scrollDirection.add(delta > 0 ? 1 : delta < 0 ? -1 : 0);\r\n }\r\n\r\n protected override overrideCoordinates(x: number, y: number) {\r\n super.overrideCoordinates(x, y);\r\n const position = Math.abs(this.isVertical() ? y : x);\r\n this._measureVelocityTimestamp = Date.now();\r\n this._measureVelocityLastPosition = position;\r\n this.refreshCoordinate(x, y);\r\n }\r\n\r\n protected measureVelocity() {\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 if (!this.isInfinity()) {\r\n if (position <= 0 || position >= (this.isVertical() ? this.scrollHeight : this.scrollWidth)) {\r\n this._velocities = [0];\r\n this._$averageVelocity.next(0);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n return;\r\n }\r\n }\r\n if (this._delta !== 0) {\r\n return;\r\n }\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.next(velocity);\r\n this._velocities.push(velocity);\r\n this._$averageVelocity.next(avgVelocity / MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS);\r\n this._measureVelocityLastPosition = position;\r\n this._measureVelocityTimestamp = timestamp;\r\n }\r\n\r\n protected stopMoving() { }\r\n\r\n private snapIfNecessary(v0: number, withInitialForce: boolean = true, animated: boolean = true, force: boolean = false) {\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const snapToItem = this.snapToItem();\r\n if (!!snapToItem) {\r\n const scrollingOneByOne = this.scrollingOneByOne();\r\n if (scrollingOneByOne) {\r\n return this.alignPosition();\r\n }\r\n if (withInitialForce) {\r\n return this.snapWithInitialForceIfNecessary(v0, animated, force);\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n protected snapWithInitialForceIfNecessary(v0: number | null = null, animated = true, force: boolean = false) {\r\n const t = this.animationParams().snapToItem * .01, s = this.getSnappedComponentSize(),\r\n va = s !== null && t !== 0 ? (s / t) : 0;\r\n if (va >= Math.abs(v0 ?? this.averageVelocity)) {\r\n return this.alignPosition(animated, force);\r\n }\r\n return false;\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 = this.isInfinity() ? dp : dp < 0 ? 0 : dp > scrollSize ? scrollSize : dp,\r\n endTime = Date.now(), 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 || !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._overscrollEnabled) {\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\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(force: boolean = false) {\r\n if (this._isAlignmentAnimation && !force) {\r\n return;\r\n }\r\n this._isAlignmentAnimation = false;\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 } else {\r\n this.alignPosition(true, true);\r\n }\r\n }\r\n\r\n protected normalizeValue(value: number) {\r\n if (this.isInfinity()) {\r\n return value;\r\n }\r\n const isVertical = this.isVertical(),\r\n startOffset = this._normalizeValueFromZero ? 0 : this.startOffset(),\r\n scrollSize = this.scrollable ? ((isVertical ? this.scrollHeight : this.scrollWidth) - this.alignmentEndOffset()) : 0,\r\n result = this.scrollable ? (value <= startOffset ? startOffset : value > scrollSize ? scrollSize : value) : startOffset;\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, alignmentAtComplete: boolean = true, skipOverridedCoordinates: boolean = false) {\r\n const isVertical = this.isVertical();\r\n let iteration = 0, position = startValue;\r\n this._isAlignmentAnimation = !alignmentAtComplete;\r\n\r\n this._animator.animate({\r\n withDelta: this._service.dynamic && !this.isInfinity(),\r\n startValue,\r\n endValue,\r\n duration,\r\n easingFunction,\r\n getPropValue: () => {\r\n return isVertical ? this._y : this._x;\r\n }, onUpdate: ({ value, timestamp, elapsed }) => {\r\n if (this._isCoordinatesOverrided && !skipOverridedCoordinates) {\r\n this._isCoordinatesOverrided = false;\r\n const currentCoordinate = isVertical ? this._y : this._x, delta = endValue - value;\r\n this.animate(currentCoordinate, currentCoordinate + delta, duration - elapsed, easingFunction, userAction, alignmentAtComplete);\r\n return;\r\n }\r\n const v0 = calculateVelocity(position, value, timestamp) ?? this.averageVelocity;\r\n position = value;\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n if (iteration < MAX_ITERATIONS_FOR_AVERAGE_CALCULATIONS || !this.snapIfNecessary(v0)) {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n iteration++;\r\n this._service.update(true);\r\n }, onComplete: ({ value, timestamp }) => {\r\n this._isAlignmentAnimation = false;\r\n const v0 = calculateVelocity(position, value, timestamp);\r\n if (alignmentAtComplete && !this._isAlignmentAnimation && !skipOverridedCoordinates) {\r\n this.snapIfNecessary(v0);\r\n } else {\r\n this.move(isVertical, value, false, userAction);\r\n }\r\n this._$scrollEnd.next(userAction);\r\n this._service.update(true);\r\n this.onAnimationComplete(value);\r\n },\r\n });\r\n }\r\n\r\n protected getSnappedComponentSize() {\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(), sd = this.snappingDistance(),\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let size: number | null = null;\r\n const scrollDirection = this._scrollDirection.get(),\r\n currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { width, height } = componentBounds,\r\n compSize = isVertical ? height : width;\r\n size = compSize;\r\n }\r\n break;\r\n }\r\n }\r\n return size;\r\n }\r\n\r\n protected alignPosition(animated: boolean = true, force: boolean = false) {\r\n if (!this.snapToItem() || this._isAlignmentAnimation) {\r\n return false;\r\n }\r\n this.stopScrolling(true);\r\n const scrollDirection = this._scrollDirection.get() || (force ? 1 : 0);\r\n if (scrollDirection === 0) {\r\n return false;\r\n }\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(),\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width,\r\n sd = this.snappingDistance(),\r\n snappingDistance = parseFloatOrPersentageValue(sd),\r\n isPersentageSnappingDistance = isPercentageValue(sd);\r\n let position: number | null = null, size: number = 0;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n currentComponentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition),\r\n currentComponentSize = isVertical ? currentComponentBounds?.height ?? 0 : currentComponentBounds?.width ?? 0;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition + offset);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset(), alignmentStartOffset = this.alignmentStartOffset(),\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n position = componentPosition - (startOffset - alignmentStartOffset) + this._startLayoutOffset;\r\n if (this.isInfinity()) {\r\n if (position < 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const offset = (currentComponentSize * .5 - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds, startOffset = this.startOffset(), alignmentStartOffset = this.alignmentStartOffset(),\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n const maxPos = (isVertical ? this.scrollHeight : this.scrollWidth) - size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5;\r\n position = componentPosition + size * .5 - viewportSize * .5 - (startOffset - alignmentStartOffset) * .5 + this._startLayoutOffset;\r\n if (this.isInfinity()) {\r\n if (position <= 0 || position > maxPos) {\r\n position = maxPos;\r\n if (isVertical) {\r\n this._y = this.scrollHeight;\r\n } else {\r\n this._x = this.scrollWidth;\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const offset = ((scrollDirection === 1 ? currentComponentSize : 0) - (isPersentageSnappingDistance ? currentComponentSize * snappingDistance : snappingDistance)) * scrollDirection,\r\n actualPos = currentPosition + offset + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos);\r\n if (!!componentBounds) {\r\n const { x, y, width, height } = componentBounds,\r\n componentPosition = isVertical ? y : x;\r\n size = isVertical ? height : width;\r\n position = componentPosition - viewportSize + this._startLayoutOffset;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const cPos = (isVertical ? this.scrollTop : this.scrollLeft);\r\n\r\n if (position !== null && position !== cPos) {\r\n this.stopScrolling(true);\r\n this.animate(cPos, position, animated ? this.animationParams().snapToItem : 1, easeOutQuad, false, false, true);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected checkIntersectionComponent() {\r\n const align = this.snapToItemAlign(), isVertical = this.isVertical(),\r\n viewportSize = isVertical ? this.viewportBounds().height : this.viewportBounds().width;\r\n let componentId: Id | null = null;\r\n const currentPosition = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset;\r\n switch (align) {\r\n case SnapToItemAligns.START: {\r\n const maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n componentBounds = this._service.getComponentBoundsByIntersectionPosition(currentPosition, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.CENTER: {\r\n const actualPos = currentPosition + viewportSize * .5,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n case SnapToItemAligns.END: {\r\n const actualPos = currentPosition + viewportSize,\r\n maxPos = isVertical ? this.scrollHeight : this.scrollWidth,\r\n pos = Math.min(actualPos, maxPos);\r\n const componentBounds = this._service.getComponentBoundsByIntersectionPosition(pos, maxPos);\r\n if (!!componentBounds) {\r\n const { id } = componentBounds;\r\n componentId = id;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n if (componentId !== this._intersectionComponentId && componentId !== null) {\r\n this._service.setIntersectionElementBySnapToItemAlign(componentId);\r\n }\r\n this._intersectionComponentId = componentId;\r\n }\r\n\r\n protected onAnimationComplete(position: number) { }\r\n\r\n fireScroll(userAction: boolean = false) {\r\n this._$updateScrollBar.next();\r\n this.emitScrollableEvent();\r\n this.fireScrollEvent(userAction);\r\n }\r\n\r\n scrollLimits(value?: number | undefined, silent: boolean = false): boolean {\r\n if (!this.isInfinity()) {\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 if (silent) {\r\n this._y = yy;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.y = yy;\r\n }\r\n return true;\r\n }\r\n } else {\r\n const xx = this.normalizeValue(x);\r\n if (x !== xx) {\r\n if (silent) {\r\n this._x = xx;\r\n this.refreshCoordinate(this._x, this._y);\r\n } else {\r\n this.x = xx;\r\n }\r\n return true;\r\n }\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 snap = params.snap ?? true,\r\n normalize = params.normalize ?? true,\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 force = params.force ?? false,\r\n duration = params.duration ?? ANIMATION_DURATION,\r\n isVertical = this.isVertical();\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 || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setY(y, snap, normalize);\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 || force) {\r\n if (!blending) {\r\n this.stopScrolling(force);\r\n }\r\n this.setX(x, snap, normalize);\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 refreshCoordinate(x: number, y: number) {\r\n const scrollContent = this.scrollContent()?.nativeElement as HTMLDivElement;\r\n scrollContent.style.transform = matrix3d((this._inversion ? 1 : -1) * x + (this.isVertical() ? 0 : this._startLayoutOffset),\r\n (this._inversion ? 1 : -1) * y + (this.isVertical() ? this._startLayoutOffset : 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, debounceTime, 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 {\r\n DEFAULT_LANG_TEXT_DIR, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_INTERACTIVE, LEFT, POSITION, POSITION_ABSOLUTE,\r\n POSITION_RELATIVE, RIGHT, SIZE_100_PERSENT, SIZE_AUTO, UNSET,\r\n} 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, SCROLL_VIEW_OVERSCROLL_ENABLED } 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\nimport { TextDirection } from '../../types';\r\nimport { TextDirections } 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/22.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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, 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 _scrollBarService = 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 langTextDir = input<TextDirection>(DEFAULT_LANG_TEXT_DIR);\r\n\r\n readonly interactive = input<boolean>(DEFAULT_SCROLLBAR_INTERACTIVE);\r\n\r\n readonly overlapping = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\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.refreshCoordinate(this._x, 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 $wheel = this.$wheel;\r\n $wheel.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(100),\r\n tap(() => {\r\n const event = this.createDragEvent(true);\r\n if (!!event) {\r\n this.onDragEnd.emit(event);\r\n }\r\n }),\r\n ).subscribe();\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._scrollBarService.state = ScrollbarStates.PRESSED;\r\n return;\r\n } else if (hover) {\r\n this._scrollBarService.state = ScrollbarStates.HOVER;\r\n return;\r\n }\r\n this._scrollBarService.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 effect(() => {\r\n const el = this._elementRef.nativeElement;\r\n if (!!el) {\r\n const overlapping = this.overlapping(), langTextDir = this.langTextDir();\r\n el.style[POSITION] = overlapping ? POSITION_ABSOLUTE : POSITION_RELATIVE;\r\n el.style[LEFT] = overlapping && langTextDir === TextDirections.RTL ? '0' : UNSET;\r\n el.style[RIGHT] = overlapping && langTextDir === TextDirections.LTR ? '0' : UNSET;\r\n el.style[WIDTH] = overlapping ? SIZE_AUTO : SIZE_100_PERSENT;\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(userAction => {\r\n const event = this.createDragEvent(userAction);\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._scrollBarService.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>","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 { TextDirections } from '../../enums';\r\nimport { TextDirection } from '../../types';\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/22.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, ElementRef, input, output, Signal, signal, TemplateRef, viewChild, ViewChild } from '@angular/core';\r\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\r\nimport { combineLatest, debounceTime, filter, from, Subject, tap } from 'rxjs';\r\nimport { ScrollBox } from './utils';\r\nimport { Id, TextDirection } 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_MAX_MOTION_BLUR, DEFAULT_MOTION_BLUR, DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_OVERLAPPING_SCROLLBAR, DEFAULT_SCROLLBAR_ENABLED,\r\n DEFAULT_SCROLLBAR_INTERACTIVE, DEFAULT_SCROLLBAR_MIN_SIZE, DEFAULT_SCROLLBAR_THICKNESS, LEFT_PROP_NAME, PX, SCROLLER_SCROLL, TOP_PROP_NAME,\r\n} from '../../const';\r\nimport { TextDirections } from '../../enums';\r\nimport { IScrollToParams, NgScrollView, SCROLL_VIEW_INVERSION } from '../ng-scroll-view';\r\nimport { IScrollBarDragEvent } from '../ng-scroll-bar/interfaces';\r\nimport { SCROLL_VIEW_NORMALIZE_VALUE_FROM_ZERO, SCROLL_VIEW_OVERSCROLL_ENABLED } 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 MOTION_BLUR = 'motion-blur';\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/22.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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, 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 {\r\n @ViewChild('scrollBar', { read: NgScrollBarComponent })\r\n readonly scrollBar: NgScrollBarComponent | undefined;\r\n\r\n readonly filter = viewChild<ElementRef<SVGFEGaussianBlurElement>>('filter');\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 overlappingScrollbar = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR);\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 readonly motionBlur = input<number | 'disabled'>(DEFAULT_MOTION_BLUR);\r\n\r\n readonly maxMotionBlur = input<number>(DEFAULT_MAX_MOTION_BLUR);\r\n\r\n readonly motionBlurEnabled = input<boolean>(DEFAULT_MOTION_BLUR_ENABLED);\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 public readonly langTextDir = signal<TextDirection>(TextDirections.LTR);\r\n\r\n public readonly listStyles = signal<{ perspectiveOrigin: string }>({ perspectiveOrigin: 'center' });\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 protected override setX(x: number, snap: boolean = true, normalize: boolean = true) {\r\n if (x !== undefined && !Number.isNaN(x)) {\r\n this.updateDirection(x, this._x);\r\n\r\n this._x = this._actualX = x;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n protected override setY(y: number, snap: boolean = true, normalize: boolean = true) {\r\n if (y !== undefined && !Number.isNaN(y)) {\r\n this.updateDirection(y, this._y);\r\n\r\n this._y = this._actualY = y;\r\n\r\n const overridden = normalize ? this.normalizeScrollSize() : false;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n if (!overridden) {\r\n this.measureVelocity();\r\n }\r\n\r\n this.updateScrollBar();\r\n\r\n this.recalculatePerspective();\r\n\r\n if (snap) {\r\n this.checkIntersectionComponent();\r\n }\r\n }\r\n }\r\n\r\n override set startLayoutOffset(v: number) {\r\n if (this._startLayoutOffset !== v) {\r\n this._startLayoutOffset = v;\r\n\r\n this.refreshCoordinate(this._x, this._y);\r\n\r\n this.recalculatePerspective();\r\n }\r\n }\r\n override get startLayoutOffset() { return this._startLayoutOffset; }\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 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 protected _filterId: string;\r\n\r\n protected _filter: string;\r\n\r\n constructor() {\r\n super();\r\n\r\n this._filterId = `${this._service.id}-${MOTION_BLUR}`;\r\n this._filter = `url(#${this._filterId})`;\r\n\r\n const $filter = toObservable(this.filter),\r\n $motionBlur = toObservable(this.motionBlur),\r\n $maxMotionBlur = toObservable(this.maxMotionBlur),\r\n $motionBlurEnabled = toObservable(this.motionBlurEnabled),\r\n $isVertical = toObservable(this.isVertical);\r\n\r\n const $scrollbarScroll = this.$scrollbarScroll;\r\n $scrollbarScroll.pipe(\r\n takeUntilDestroyed(),\r\n debounceTime(50),\r\n tap(() => {\r\n this.dropVelocity();\r\n this.fireScrollEvent(false);\r\n }),\r\n ).subscribe();\r\n\r\n const $averageVelocity = this.$averageVelocity;\r\n combineLatest([$isVertical, $averageVelocity, $filter, $motionBlurEnabled, $motionBlur, $maxMotionBlur]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([, , f, e, mb]) => !!f && (!!e && mb !== 0)),\r\n tap(([isVertical, v, filter, , mb, mbMax]) => {\r\n const _v = v * (mb as number), value = _v > mbMax ? mbMax : _v;\r\n filter!.nativeElement.setStdDeviation(isVertical ? 0 : v * value, isVertical ? v * value : 0);\r\n }),\r\n debounceTime(50),\r\n tap(([, , filter, ,]) => {\r\n filter!.nativeElement.setStdDeviation(0, 0);\r\n }),\r\n ).subscribe();\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 $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(), filtered = this.motionBlurEnabled();\r\n return { ...classes, [direction]: true, grabbing: this.grabbing(), filtered };\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 overlappingScrollbar = this.overlappingScrollbar(),\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, overlapping: overlappingScrollbar };\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 private recalculatePerspective() {\r\n const isVertical = this.isVertical(), scrollSize = (isVertical ? this.scrollTop : this.scrollLeft) - this._startLayoutOffset,\r\n { width, height } = this.viewportBounds();\r\n this.listStyles.set({\r\n perspectiveOrigin: `${isVertical ? width * .5 : (scrollSize + width * .5)}${PX} ${isVertical ? (scrollSize + height * .5) : height * .5}${PX}`\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(value: number | null = null) {\r\n const content = this.scrollContent()?.nativeElement;\r\n if (!!content) {\r\n const isVertical = this.isVertical(), bounds: ISize = {\r\n width: isVertical ? content.offsetWidth : (value ?? content.offsetWidth),\r\n height: isVertical ? (value ?? content.offsetHeight) : content.offsetHeight\r\n }, b = this.contentBounds();\r\n if (value === null && 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 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 }\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();\r\n this.totalSize = 0;\r\n this.onResizeContent(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 this.refreshCoordinate(this._x, this._y);\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 snapIfNeed(animated = true) {\r\n this.snapWithInitialForceIfNecessary(null, animated, true);\r\n }\r\n\r\n startScrollTo() {\r\n this.stopScrollbar();\r\n this.stopScrolling(true);\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this._isScrollsTo = true;\r\n }\r\n\r\n finishedScrollTo() {\r\n this._isScrollsTo = false;\r\n this._scrollDirection.clear();\r\n this.dropVelocity();\r\n this.checkIntersectionComponent();\r\n this.fireScrollEvent(true);\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 this.alignPosition();\r\n this.dropVelocity();\r\n }\r\n }\r\n\r\n private dropVelocity() {\r\n this._velocities = [0];\r\n this._$velocity.next(0);\r\n this._$averageVelocity.next(0);\r\n }\r\n\r\n protected override stopMoving() {\r\n super.stopMoving();\r\n this.dropVelocity();\r\n }\r\n\r\n protected override onAnimationComplete(position: number) {\r\n this.dropVelocity();\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(true);\r\n this.stopScrolling(true);\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: true, fireUpdate: true,\r\n });\r\n this.emitScrollableEvent();\r\n this._service.update(false);\r\n }\r\n\r\n onScrollBarDragEndHandler(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._isScrollbarUserAction = false;\r\n this.dropVelocity();\r\n this._service.update(false);\r\n const isEdge = this.fireUpdateIfEdgesDetected(position, min, max, true, true);\r\n if (!isEdge) {\r\n this.alignPosition();\r\n }\r\n this._scrollDirection.clear();\r\n this._$scrollbarScroll.next(true);\r\n this.fireScrollEvent(true);\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 return true;\r\n } else if (position >= max) {\r\n this._service.scrollToEnd();\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n}","@let filtered = motionBlurEnabled();\r\n<div localeSensitive [langTextDir]=\"langTextDir()\" [listDir]=\"direction()\" class=\"ngvl__container\"\r\n [ngClass]=\"containerClasses()\">\r\n <svg part=\"viewport\" width=\"100%\" height=\"100%\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n <filter [id]=\"_filterId\">\r\n <feGaussianBlur #filter></feGaussianBlur>\r\n </filter>\r\n <foreignObject xmlns=\"http://www.w3.org/1999/xhtml\" width=\"100%\" height=\"100%\" class=\"ngvl__viewport\">\r\n <div class=\"ngvl__scroller-wrapper\" [class.filtered]=\"filtered\" [style.filter]=\"filtered ? _filter : 'unset'\">\r\n <div cdkScrollable #scrollViewport part=\"scroller\" class=\"ngvl__scroller\">\r\n <div #scrollContent [attr.aria-orientation]=\"direction()\"\r\n [attr.aria-activedescendant]=\"focusedElement()\" tabindex=\"0\" part=\"list\" class=\"ngvl__list\"\r\n [ngClass]=\"actualClasses()\" [ngStyle]=\"listStyles()\">\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n </div>\r\n </foreignObject>\r\n </svg>\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()\" [overlapping]=\"overlappingScrollbar()\"\r\n [thumbGradientPositions]=\"thumbGradientPositions()\" [prepared]=\"prepared\" [interactive]=\"scrollbarInteractive()\"\r\n [show]=\"scrollbarShow() && scrollbarEnabled() && prepared\" [startOffset]=\"startOffset()\" [langTextDir]=\"langTextDir()\"\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_DIVIDES, DEFAULT_DYNAMIC_SIZE, DEFAULT_ITEM_SIZE, DEFAULT_SNAP_TO_ITEM_ALIGN, 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, divides: number, itemSize: number, id: Id, index: number): IRenderVirtualListItem => {\r\n const w = (isVertical ? (bounds.width / divides) : itemSize) as any,\r\n h = (isVertical ? itemSize : (bounds.height / divides)) as any;\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 row: {\r\n size: itemSize,\r\n odd: false,\r\n even: false\r\n },\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 transformedX: 0,\r\n transformedY: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 0,\r\n scaleY: 0,\r\n scaleZ: 0,\r\n width: w,\r\n height: h,\r\n minWidth: 0,\r\n minHeight: 0,\r\n maxWidth: Number.MAX_SAFE_INTEGER,\r\n maxHeight: Number.MAX_SAFE_INTEGER,\r\n scrollDirection: 0,\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 divides: 1,\r\n tabIndex: 0,\r\n opacity: 1,\r\n zIndex: \"0\",\r\n snapToItem: false,\r\n snapToItemAlign: DEFAULT_SNAP_TO_ITEM_ALIGN,\r\n layoutOffset: 0,\r\n isFirst: false,\r\n isLast: false,\r\n fullSize: false,\r\n layoutIndexOffset: 0,\r\n totalItems: 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/22.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 divides = params.divides ?? DEFAULT_DIVIDES,\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, divides, 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 * NgPrerenderVirtualListItemComponent\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/22.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list-item/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, el = this._elementRef.nativeElement,\r\n itemElement = this._item()?.nativeElement, containerElement = this._container()?.nativeElement;\r\n if (!!data && !!el && !!itemElement && !!containerElement) {\r\n const styles = el.style, itemElementStyles = itemElement.style;\r\n el.setAttribute(ID, `${data.id}`);\r\n styles.zIndex = data.config.zIndex;\r\n if (regular) {\r\n el.setAttribute(POSITION, POSITION_ZERO);\r\n } else {\r\n el.setAttribute(POSITION, `${data.config.isVertical ? data.measures.y : data.measures.x}`);\r\n }\r\n if (data.config.divides > 1) {\r\n styles.height = data.config.isVertical ? `${data.measures.row.size}${PX}` : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? `${data.measures.width}${PX}` : `${data.measures.row.size}${PX}`;\r\n itemElementStyles.minWidth = styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n itemElementStyles.maxWidth = styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n itemElementStyles.minHeight = styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n itemElementStyles.maxHeight = styles.maxHeight = `${data.measures.maxHeight}${PX}`;\r\n \r\n itemElementStyles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n itemElementStyles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n } else {\r\n styles.height = data.config.isVertical ? data.config.dynamic ? SIZE_AUTO : `${data.measures.height}${PX}` : regular ? length : `${data.measures.height}${PX}`;\r\n styles.width = data.config.isVertical ? regular ? length : `${data.measures.width}${PX}` : data.config.dynamic ? SIZE_AUTO : `${data.measures.width}${PX}`;\r\n styles.minWidth = `${data.measures.minWidth}${PX}`;\r\n styles.maxWidth = `${data.measures.maxWidth}${PX}`;\r\n styles.minHeight = `${data.measures.minHeight}${PX}`;\r\n styles.maxHeight = `${data.measures.maxHeight}${PX}`;\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 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 { TextDirections } from '../../../../enums';\r\nimport { TextDirection } from '../../../../types';\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, SCROLL_VIEW_OVERSCROLL_ENABLED } from '../../../ng-scroll-view/const';\r\n\r\n/**\r\n * NgPrerenderScrollerComponent\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/22.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-scroller/ng-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 { provide: SCROLL_VIEW_OVERSCROLL_ENABLED, useValue: false },\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 { combineLatest, filter, Observable, Subject, Subscription, tap } from \"rxjs\";\r\nimport { toggleClassName } from \"../../../../utils\";\r\nimport {\r\n CLASS_LIST_HORIZONTAL, CLASS_LIST_VERTICAL, DEFAULT_DIRECTION, DEFAULT_DIVIDES, 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 \"../../../../types\";\r\n\r\n/**\r\n * NgPrerenderList\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/22.x/projects/ng-virtual-list/src/lib/components/ng-prerender-container/components/ng-prerender-list/ng-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 divides = input<number>(DEFAULT_DIVIDES);\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 divides: this.divides(),\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 { takeUntilDestroyed, toObservable } from \"@angular/core/rxjs-interop\";\r\nimport { filter, Observable, switchMap } from \"rxjs\";\r\nimport {\r\n DEFAULT_DIRECTION, DEFAULT_DIVIDES, 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 \"../../types\";\r\nimport { NgPrerenderList } from \"./components/ng-prerender-list/ng-prerender-list.component\";\r\nimport { PrerenderCache } from \"./types\";\r\n\r\n/**\r\n * NgPrerenderContainer\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/22.x/projects/ng-virtual-list/src/lib/components/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 divides = input<number>(DEFAULT_DIVIDES);\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()\" [divides]=\"divides()\"\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_STICKY_ENABLED, 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_SELECTING_MODES, 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 PREPARE_ITERATIONS_FOR_UPDATE_ITEMS, PREPARATION_REUPDATE_LENGTH_FOR_UPDATE_ITEMS, PREPARE_ITERATIONS_FOR_COLLAPSE_ITEMS,\r\n PREPARATION_REUPDATE_LENGTH_FOR_COLLAPSE_ITEMS, MAX_NUMBERS_OF_SKIPS_FOR_QUALITY_OPTIMIZATION_LVL1, DEFAULT_SCROLLING_SETTINGS,\r\n DEFAULT_SNAP_TO_ITEM, DEFAULT_SNAP_TO_ITEM_ALIGN, VIEWPORT, DEFAULT_MOTION_BLUR, DEFAULT_MAX_MOTION_BLUR, DEFAULT_SCROLLING_ONE_BY_ONE,\r\n DEFAULT_MOTION_BLUR_ENABLED, DEFAULT_DIVIDES, DEFAULT_SNAPPING_DISTANCE, DEFAULT_MAX_ITEM_SIZE, DEFAULT_MIN_ITEM_SIZE,\r\n DEFAULT_ALIGNMENT, DEFAULT_COLLAPSING_MODES, DEFAULT_SPREADING_MODE, DEFAULT_ZINDEX_WHEN_SELECTING,\r\n DEFAULT_OVERLAPPING_SCROLLBAR,\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 {\r\n Alignment, ArithmeticExpression, FocusAlignment, Id, ItemTransform, SnappingDistance, CollectionMode, Direction, SelectingMode,\r\n SnappingMethod, SnapToItemAlign, TextDirection, CollapsingMode,\r\n SpreadingMode,\r\n} from './types';\r\nimport { IRenderVirtualListCollection } from './models/render-collection.model';\r\nimport {\r\n Alignments, CollectionModes, Directions, FocusAlignments, SelectingModes, SnappingMethods, SnapToItemAligns, SpreadingModes, TextDirections,\r\n} from './enums';\r\nimport { debounce, ScrollEvent, toggleClassName } from './utils';\r\nimport { 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 { isSelectMode } from './utils/is-select-mode';\r\nimport { isCollapseMode } from './utils/is-collapse-mode';\r\nimport { SelectingModesTypes } from './enums/selecting-modes-types';\r\nimport { CMap } from './utils/cmap';\r\nimport {\r\n validateArray, validateBoolean, validateFloat, validateFunction, validateInt, validateObject, validateString,\r\n} 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\nimport { isPercentageValue } from './utils/is-persentage-value';\r\nimport { parseArithmeticExpression } from './utils/parse-arithmetic-expression';\r\nimport { normalizeCollection } from './utils/normalize-collection';\r\nimport { CollapsingModes } from './enums';\r\nimport { isSpreadingMode } from './utils/is-spreading-mode';\r\nimport { IGetItemPositionOptions, IUpdateCollectionOptions } from './core/interfaces';\r\nimport { getScrollStateVersion } from './utils/get-scroll-state-version';\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/22.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 * Emit the component ID when an element crosses the alignment line specified by the snapToItemAlign property.\r\n */\r\n onSnapItem = output<Id>();\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 _$initialized = new BehaviorSubject<boolean>(false);\r\n readonly $initialized = this._$initialized.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._isMultiSelection ? [] : 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 api.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 throw Error(`Property snap is deprecated. Use the \\`stickyEnabled\\` property instead.`);\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * Use the `stickyEnabled` property instead.\r\n */\r\n snap = input<boolean>(false, { ...this._snapOptions });\r\n\r\n private _stickyEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"stickyEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_STICKY_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether items with the given `sticky` in `itemConfigMap` will stick to the edges. Default value is \"true\".\r\n */\r\n stickyEnabled = input<boolean>(DEFAULT_STICKY_ENABLED, { ...this._stickyEnabledOptions });\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) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollStartOffset\" parameter must be one of type `number` or `string`.');\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. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n scrollStartOffset = input<ArithmeticExpression>(0, { ...this._scrollStartOffsetOptions });\r\n\r\n private _scrollEndOffsetOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v, true) || isPercentageValue(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollEndOffset\" parameter must be one of type `number` or `string`.');\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. Can be specified in absolute or percentage values.\r\n * Supports arithmetic expressions of addition `50% + 25` or subtraction `50% - 25`. Default value is \"0\".\r\n */\r\n scrollEndOffset = input<ArithmeticExpression>(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 * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToStart` property is automatically disabled, since the list has no 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 * In the `spreadingMode=SpreadingModes.INFINITY` mode, the `snapScrollToEnd` property is automatically disabled, since the list has no 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 _overlappingScrollbarOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v, true);\r\n\r\n if (!valid) {\r\n console.error('The \"overlappingScrollbar\" parameter must be of type `boolean`.');\r\n return DEFAULT_OVERLAPPING_SCROLLBAR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether the scroll bar will overlap the list. The default value is \"false\".\r\n */\r\n overlappingScrollbar = input<boolean>(DEFAULT_OVERLAPPING_SCROLLBAR, { ...this._overlappingScrollbarOptions });\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 100000.\r\n * - maxDuration - Maximum animation duration. Default value is 4000.\r\n * - speedScale - Speed scale. Default value is 10.\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 _itemTransformOptions = {\r\n transform: (v: any) => {\r\n let valid = validateFunction(v, true, true);\r\n if (!valid) {\r\n console.error('The \"itemTransform\" parameter must be of type `ItemTransform` or `null`.');\r\n return null;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Custom transformation of element's position, rotation, scale, opacity and zIndex. The default value is `null`.\r\n */\r\n itemTransform = input<ItemTransform | null>(null, { ...this._itemTransformOptions });\r\n\r\n private _snapToItemOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItem\" parameter must be of type `boolean`.');\r\n return DEFAULT_SNAP_TO_ITEM;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snap to an item. The default value is `false`.\r\n */\r\n snapToItem = input<boolean>(DEFAULT_SNAP_TO_ITEM, { ...this._snapToItemOptions });\r\n\r\n private _snapToItemAlignOptions = {\r\n transform: (v: SnapToItemAlign) => {\r\n const valid = validateString(v) && (v === 'start' || v === 'center' || v === 'end');\r\n\r\n if (!valid) {\r\n console.error('The \"snapToItemAlign\" parameter must be one of `start`, `center` or `end`.');\r\n return DEFAULT_SNAP_TO_ITEM_ALIGN;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Alignment for snapToItem. Available values ​​are `start`, `center`, and `end`. The default value is `center`.\r\n */\r\n snapToItemAlign = input<SnapToItemAlign>(DEFAULT_SNAP_TO_ITEM_ALIGN, { ...this._snapToItemAlignOptions });\r\n\r\n private _snappingDistanceOptions = {\r\n transform: (v: SnappingDistance | any) => {\r\n const valid = validateString(v) || validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"snappingDistance\" parameter must be of type `number` or `string`.');\r\n return DEFAULT_SNAPPING_DISTANCE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Snapping activation distance. Can be specified as a percentage of the element size or in absolute values.\r\n * The default value is `25%`.\r\n */\r\n snappingDistance = input<SnappingDistance>(DEFAULT_SNAPPING_DISTANCE, { ...this._snappingDistanceOptions });\r\n\r\n private _scrollingOneByOneOptions = {\r\n transform: (v: any) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"scrollingOneByOne\" parameter must be of type `boolean`.');\r\n return DEFAULT_SCROLLING_ONE_BY_ONE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Specifies whether to scroll one item at a time if true and the scrollToItem property is set. The default value is `false`.\r\n */\r\n scrollingOneByOne = input<boolean>(DEFAULT_SCROLLING_ONE_BY_ONE, { ...this._scrollingOneByOneOptions });\r\n\r\n private _alignmentOptions = {\r\n transform: (v: Alignment) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'center');\r\n\r\n if (!valid) {\r\n console.error('The \"alignment\" parameter must be one of `none` or `centert`.');\r\n return DEFAULT_ALIGNMENT;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines the alignment of the list. Two modes are available: `none` and `center`. The `center` mode aligns the list items to the center of the viewport, ideal for use with the `itemTransform` property.\r\n * The `none` mode means no alignment. The default value is `none`.\r\n */\r\n alignment = input<Alignment>(DEFAULT_ALIGNMENT, { ...this._alignmentOptions });\r\n\r\n private _zIndexWhenSelectingOptions = {\r\n transform: (v: string | null) => {\r\n const valid = validateString(v, true, true);\r\n\r\n if (!valid) {\r\n console.error('The \"zIndexWhenSelecting\" parameter must be of type `number` or `null`.');\r\n return DEFAULT_ZINDEX_WHEN_SELECTING;\r\n }\r\n return v ?? null;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Defines the zIndex when a list item is selected. The default value is `null`.\r\n */\r\n zIndexWhenSelecting = input<string | null>(DEFAULT_ZINDEX_WHEN_SELECTING, { ...this._zIndexWhenSelectingOptions });\r\n\r\n private _spreadingModeOptions = {\r\n transform: (v: SpreadingMode) => {\r\n const valid = validateString(v) && (v === 'normal' || v === 'infinity');\r\n\r\n if (!valid) {\r\n console.error('The \"spreadingMode\" parameter must be one of `normal` or `infinity`.');\r\n return DEFAULT_SPREADING_MODE;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * The order of list elements. Available values ​​are `standard` and `infinity`.\r\n * `normal` — list elements are ordered according to the collection sequence.\r\n * `infinity` — list elements are ordered cyclically, forming an infinite list.\r\n * When set to `infinity`, the `alignment` property is forced to the value `Alignments.CENTER`, the `scrollbarEnabled` property is forced to the `false`\r\n * The default value is `standard`.\r\n */\r\n spreadingMode = input<SpreadingMode>(DEFAULT_SPREADING_MODE, { ...this._spreadingModeOptions });\r\n\r\n private _dividesOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"divides\" parameter must be of type `number`.');\r\n return DEFAULT_DIVIDES;\r\n }\r\n return v <= 0 ? DEFAULT_DIVIDES : v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Column or row numbers. The default value is `1`.\r\n */\r\n divides = input<number>(DEFAULT_DIVIDES, { ...this._dividesOptions });\r\n\r\n private _motionBlurOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_MOTION_BLUR;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Motion blur effect. The default value is `0.15`.\r\n */\r\n motionBlur = input<number>(DEFAULT_MOTION_BLUR, { ...this._motionBlurOptions });\r\n\r\n private _maxMotionBlurOptions = {\r\n transform: (v: number) => {\r\n const valid = validateFloat(v);\r\n\r\n if (!valid) {\r\n console.error('The \"maxMotionBlur\" parameter must be of type `number`.');\r\n return DEFAULT_MAX_MOTION_BLUR;\r\n }\r\n return v <= 0 ? DEFAULT_MAX_MOTION_BLUR : v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Maximum motion blur effect. The default value is `0.5`.\r\n */\r\n maxMotionBlur = input<number>(DEFAULT_MAX_MOTION_BLUR, { ...this._maxMotionBlurOptions });\r\n\r\n private _motionBlurEnabledOptions = {\r\n transform: (v: boolean) => {\r\n const valid = validateBoolean(v);\r\n\r\n if (!valid) {\r\n console.error('The \"motionBlurEnabled\" parameter must be of type `boolean`.');\r\n return DEFAULT_MOTION_BLUR_ENABLED;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Determines whether to apply motion blur or not. The default value is `false`.\r\n */\r\n motionBlurEnabled = input<boolean>(DEFAULT_MOTION_BLUR_ENABLED, { ...this._motionBlurEnabledOptions });\r\n\r\n private _animationParamsOptions = {\r\n transform: (v: IAnimationParams) => {\r\n const valid = validateObject(v, true, true);\r\n\r\n if (!validateFloat(v.scrollToItem)) {\r\n console.error('The \"scrollToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.snapToItem)) {\r\n console.error('The \"snapToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateByKeyboard)) {\r\n console.error('The \"navigateByKeyboard\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\r\n }\r\n if (!validateFloat(v.navigateToItem)) {\r\n console.error('The \"navigateToItem\" parameter must be of type `number`.');\r\n return DEFAULT_ANIMATION_PARAMS;\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, snapToItem: 150, navigateToItem: 150, navigateByKeyboard: 50 }\".\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, `fullSize`, `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 * `fullSize` determines the size of an element when rendering lists with cell divisions. If sticky is 1 or 2, fullSize automatically becomes true. The default value is false.\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.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: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"itemSize\" parameter must be one of `number`, `viewport` 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 * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n itemSize = input<number | 'viewport'>(DEFAULT_ITEM_SIZE, { ...this._itemSizeOptions });\r\n\r\n private _minItemSizeOptions = {\r\n transform: (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"minItemSize\" parameter must be one of `number`, `viewport` 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 the `dynamicSize` property is enabled, the minimum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n minItemSize = input<number | 'viewport'>(DEFAULT_MIN_ITEM_SIZE, { ...this._minItemSizeOptions });\r\n\r\n private _maxItemSizeOptions = {\r\n transform: (v: any) => {\r\n const valid = validateFloat(v) || v === VIEWPORT;\r\n if (!valid) {\r\n console.error('The \"maxItemSize\" parameter must be one of `number`, `viewport` 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 the `dynamicSize` property is enabled, the maximum size of the element is set.\r\n * If the value is 'viewport', the sizes of elements are automatically resized to fit the viewport size.\r\n */\r\n maxItemSize = input<number | 'viewport'>(DEFAULT_MAX_ITEM_SIZE, { ...this._maxItemSizeOptions });\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 be one of `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 be one of `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 _collapsingModeOptions = {\r\n transform: (v: CollapsingMode) => {\r\n const valid = validateString(v) && (v === CollapsingModes.NONE || v === CollapsingModes.MULTI_COLLAPSE || v === CollapsingModes.ACCORDION);\r\n if (!valid) {\r\n console.error(`The \"collapsingMode\" parameter must have the value '${SnappingMethods.ADVANCED}' or '${SnappingMethods.STANDART}'.`);\r\n return DEFAULT_COLLAPSING_MODES;\r\n }\r\n return v;\r\n },\r\n } as any;\r\n\r\n /**\r\n * Mode for collapsing list items. \r\n * `none` - List items are not selectable.\r\n * `multi-collapse` - List items are collapsed one by one.\r\n * 'accordion' - Accordion collapsible list items.\r\n * Default value is `multi-collapse\r\n */\r\n collapsingMode = input<CollapsingMode>(DEFAULT_COLLAPSING_MODES, { ...this._collapsingModeOptions });\r\n\r\n private _methodForSelectingOptions = {\r\n transform: (v: SelectingMode) => {\r\n throw new Error('The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property instead.');\r\n },\r\n } as any;\r\n\r\n /**\r\n * @deprecated\r\n * The \"methodForSelecting\" property is deprecated. Use the \"selectMode\" property.\r\n */\r\n methodForSelecting = input<SelectingMode>(DEFAULT_SELECTING_MODES, { ...this._methodForSelectingOptions });\r\n\r\n private _selectingModeOptions = {\r\n transform: (v: SelectingMode) => {\r\n const valid = validateString(v) && (v === 'none' || v === 'select' || v === 'multi-select');\r\n if (!valid) {\r\n console.error('The \"selectingMode\" parameter must be one of `none`, `select` or `multi-select`.');\r\n return DEFAULT_SELECTING_MODES;\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 selectingMode = input<SelectingMode>(DEFAULT_SELECTING_MODES, { ...this._selectingModeOptions });\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 _isSingleSelection = this.getIsSingleSelection();\r\n\r\n private _isMultiSelection = this.getIsMultiSelection();\r\n\r\n private _isMultipleCollapse = this.getIsMultipleCollapse();\r\n\r\n private _isAccordionCollapse = this.getIsAccordionCollapse();\r\n\r\n private _isSnappingMethodAdvanced: boolean = this.getIsSnappingMethodAdvanced();\r\n\r\n protected _isInfinity: Signal<boolean>;\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 protected _actualScrollbarEnabled: Signal<boolean>;\r\n\r\n private _actualAlignment: Signal<Alignment>;\r\n protected get actualAlignment() { return this._actualAlignment; }\r\n\r\n private _actualItemSize = signal<number>(DEFAULT_ITEM_SIZE);\r\n protected get actualItemSize() { return this._actualItemSize; }\r\n\r\n private _actualMinItemSize = signal<number>(DEFAULT_MIN_ITEM_SIZE);\r\n protected get actualMinItemSize() { return this._actualMinItemSize; }\r\n\r\n private _actualMaxItemSize = signal<number>(DEFAULT_MAX_ITEM_SIZE);\r\n protected get actualMaxItemSize() { return this._actualMaxItemSize; }\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 = new BehaviorSubject<number>(0);\r\n\r\n private _isScrollStart = signal<boolean>(true);\r\n\r\n private _isScrollEnd = signal<boolean>(false);\r\n\r\n protected _precalculatedScrollStartOffset = signal<number>(0);\r\n\r\n protected _precalculatedScrollEndOffset = signal<number>(0);\r\n\r\n protected _actualScrollStartOffset = signal<number>(0);\r\n\r\n protected _actualScrollEndOffset = signal<number>(0);\r\n\r\n protected _actualSnapScrollToStart: Signal<boolean>;\r\n\r\n protected _actualSnapScrollToEnd: Signal<boolean>;\r\n\r\n protected _alignmentScrollStartOffset = signal<number>(0);\r\n\r\n protected _alignmentScrollEndOffset = signal<number>(0);\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 right: number, top: number, bottom: number;\r\n if (isVertical) {\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 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 + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.CENTER: {\r\n pos = position - (viewportSize - elementSize) * .5 + scroller.startLayoutOffset;\r\n break;\r\n }\r\n case FocusAlignments.END: {\r\n pos = position - (viewportSize - elementSize) + scroller.startLayoutOffset;\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 this._trackBox.preventScrollSnapping(true);\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: pos, behavior, snap: false, normalize: true,\r\n fireUpdate: false, blending: false, userAction: false,\r\n duration: this.snapToItem() ? Math.max(this.animationParams().scrollToItem, this.animationParams().navigateToItem) : this.animationParams().navigateToItem,\r\n };\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 _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 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 const _$created = new BehaviorSubject<boolean>(false),\r\n $created = _$created.asObservable();\r\n\r\n combineLatest([$created, this.$show]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([created, shown]) => created && shown),\r\n debounceTime(1),\r\n tap(v => {\r\n this._$initialized.next(true);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.initialize(this._id, this._trackBox);\r\n\r\n const $animationParams = toObservable(this.animationParams);\r\n $animationParams.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.animationParams = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._isInfinity = computed(() => {\r\n const mode = this.spreadingMode();\r\n return isSpreadingMode(mode, SpreadingModes.INFINITY);\r\n });\r\n\r\n const $isInfinity = toObservable(this._isInfinity);\r\n $isInfinity.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.isInfinity = this._service.isInfinity = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $zIndexWhenSelecting = toObservable(this.zIndexWhenSelecting);\r\n $zIndexWhenSelecting.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.zIndexWhenSelecting = 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 $rawScrollStartOffset = toObservable(this.scrollStartOffset),\r\n $rawScrollEndOffset = toObservable(this.scrollEndOffset);\r\n\r\n combineLatest([$bounds, $rawScrollStartOffset]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds.height : bounds.width);\r\n this._precalculatedScrollStartOffset.set(val);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$bounds, $rawScrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([bounds, value]) => {\r\n const val = parseArithmeticExpression(value, this.isVertical ? bounds.height : bounds.width);\r\n this._precalculatedScrollEndOffset.set(val);\r\n }),\r\n ).subscribe();\r\n\r\n this._service.$intersectionElementBySnapToItemAlign.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => v !== null),\r\n tap(id => {\r\n this.onSnapItem.emit(id);\r\n }),\r\n ).subscribe();\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 filter(() => this.dynamicSize() === true),\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 $scrollerComponent.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(scroller => scroller.$scrollDirection),\r\n tap(v => {\r\n this._trackBox.scrollDirection = v;\r\n }),\r\n ).subscribe();\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 = this._trackBox.trackBy = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._trackBox.displayComponents = this._displayComponents;\r\n\r\n let hasUserAction = false;\r\n\r\n const $itemSize = toObservable(this.itemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_ITEM_SIZE : v),\r\n ),\r\n $minItemSize = toObservable(this.minItemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MIN_ITEM_SIZE : v),\r\n ),\r\n $maxItemSize = toObservable(this.maxItemSize).pipe(\r\n map(v => typeof v === 'number' && v <= 0 ? DEFAULT_MAX_ITEM_SIZE : v),\r\n ),\r\n $scrollStartOffset = toObservable(this._actualScrollStartOffset).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n ),\r\n $scrollEndOffset = toObservable(this._actualScrollEndOffset).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n );\r\n\r\n combineLatest([$minItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._actualMinItemSize.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$maxItemSize, $bounds, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result <= 0 ? 1 : result);\r\n }\r\n return of(v);\r\n }),\r\n tap(v => {\r\n this._actualMaxItemSize.set(v);\r\n }),\r\n ).subscribe();\r\n\r\n const $actualMinItemSize = toObservable(this._actualMinItemSize),\r\n $actualMaxItemSize = toObservable(this._actualMaxItemSize);\r\n\r\n combineLatest([$itemSize, $bounds, $actualMinItemSize, $actualMaxItemSize, $scrollStartOffset, $scrollEndOffset]).pipe(\r\n takeUntilDestroyed(),\r\n switchMap(([v, bounds, min, max, startOffset, endOffset]) => {\r\n if (v === VIEWPORT) {\r\n const isVertical = this.isVertical, viewportBounds = bounds,\r\n result = (isVertical ? (viewportBounds?.height ?? 0) : (viewportBounds?.width ?? 0)) - startOffset - endOffset;\r\n return of(result < min ? min : (result > max ? max : result));\r\n }\r\n return of(v < min ? min : (v > max ? max : v));\r\n }),\r\n tap(v => {\r\n this._actualItemSize.set(v);\r\n this._service.itemSize = v;\r\n }),\r\n ).subscribe();\r\n\r\n const $actualItemSize = toObservable(this._actualItemSize),\r\n $actualItems = toObservable(this._actualItems).pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n );\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._actualScrollStartOffset(), 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 this._actualSnapScrollToStart = computed(() => {\r\n const snapScrollToStart = this.snapScrollToStart(), spreadingMode = this.spreadingMode(),\r\n isInfinity = isSpreadingMode(spreadingMode, SpreadingModes.INFINITY);\r\n return isInfinity ? false : snapScrollToStart;\r\n });\r\n\r\n this._actualSnapScrollToEnd = computed(() => {\r\n const snapScrollToEnd = this.snapScrollToEnd(), spreadingMode = this.spreadingMode(),\r\n isInfinity = isSpreadingMode(spreadingMode, SpreadingModes.INFINITY);\r\n return isInfinity ? false : snapScrollToEnd;\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 $itemConfigMap = toObservable(this.itemConfigMap).pipe(\r\n map(v => !v ? {} : v),\r\n ),\r\n $divides = toObservable(this.divides),\r\n $dynamicSize = toObservable(this.dynamicSize),\r\n $snapScrollToStart = toObservable(this._actualSnapScrollToStart),\r\n $snapScrollToEnd = toObservable(this._actualSnapScrollToEnd),\r\n $waitForPreparation = toObservable(this.waitForPreparation),\r\n $items = toObservable(this.items);\r\n\r\n combineLatest([$viewInit, $prerenderContainer, $divides, $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, divides, dynamicSize, snapScrollToStart, snapScrollToEnd, waitForPreparation]) => {\r\n if (!!dynamicSize && !snapScrollToStart && !!snapScrollToEnd && !!waitForPreparation) {\r\n const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.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._actualItemSize());\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 scrollerComponent.refresh();\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 scrollerComponent.refresh();\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 scrollerComponent.refresh();\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 const $collection = (divides > 1 ? $actualItems : $items);\r\n return $collection.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._actualItemSize());\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 scrollerComponent.refresh();\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 $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 $divides.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._trackBox.divides = v;\r\n }),\r\n ).subscribe();\r\n\r\n this._actualAlignment = computed(() => {\r\n const alignment = this.alignment(), spreadingMode = this.spreadingMode();\r\n return isSpreadingMode(spreadingMode, SpreadingModes.INFINITY) ? Alignments.CENTER : alignment;\r\n });\r\n\r\n this._actualScrollbarEnabled = computed(() => {\r\n const scrollbarEnabled = this.scrollbarEnabled(), spreadingMode = this.spreadingMode();\r\n return isSpreadingMode(spreadingMode, SpreadingModes.INFINITY) ? false : scrollbarEnabled;\r\n });\r\n\r\n const $alignment = toObservable(this._actualAlignment),\r\n $precalculatedScrollStartOffset = toObservable(this._precalculatedScrollStartOffset),\r\n $precalculatedScrollEndOffset = toObservable(this._precalculatedScrollEndOffset),\r\n $listBounds = toObservable(this._listBounds).pipe(\r\n filter(b => !!b),\r\n ), $scrollSize = this._$scrollSize.asObservable(),\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 $snapToItem = toObservable(this.snapToItem),\r\n $snapToItemAlign = toObservable(this.snapToItemAlign),\r\n $stickyEnabled = toObservable(this.stickyEnabled),\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 $collapsingMode = toObservable(this.collapsingMode),\r\n $selectingMode = toObservable(this.selectingMode),\r\n $selectedIds = toObservable(this.selectedIds),\r\n $collapsedIds = toObservable(this.collapsedIds).pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $collapsedItemIds = toObservable(this._collapsedItemIds).pipe(\r\n distinctUntilChanged(),\r\n map(v => Array.isArray(v) ? v : []),\r\n ),\r\n $itemTransform = toObservable(this.itemTransform),\r\n $screenReaderMessage = toObservable(this.screenReaderMessage),\r\n $displayItems = this._service.$displayItems,\r\n $cacheVersion = this._service.$cacheVersion;\r\n\r\n $snapToItem.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.snapToItem = v;\r\n }),\r\n ).subscribe();\r\n\r\n $actualItems.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.items = v;\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$actualItems, $viewInit]).pipe(\r\n takeUntilDestroyed(),\r\n filter(([, init]) => init),\r\n debounceTime(0),\r\n tap(() => {\r\n this._scrollerComponent()?.snapIfNeed();\r\n }),\r\n ).subscribe();\r\n\r\n $itemConfigMap.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.itemConfigMap = v;\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedIds.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n this._service.collapsedIds = v;\r\n }),\r\n ).subscribe();\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, $divides]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n debounceTime(0),\r\n switchMap(([collapsedIds, itemConfigMap, trackBy, divides]) => {\r\n return of({ items, collapsedIds, itemConfigMap, trackBy, divides });\r\n }),\r\n );\r\n }),\r\n );\r\n\r\n $itemsComposition.pipe(\r\n takeUntilDestroyed(),\r\n switchMap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\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, divides });\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, divides });\r\n }),\r\n );\r\n }),\r\n tap(({ items, collapsedIds, itemConfigMap, trackBy, divides }) => {\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];\r\n if (!!item) {\r\n const 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\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 (!!item && hiddenItems.has(id)) {\r\n continue;\r\n }\r\n actualItems.push(item);\r\n }\r\n\r\n const normalizedCollection = normalizeCollection(actualItems, itemConfigMap, trackBy, divides);\r\n\r\n this._actualItems.set(normalizedCollection);\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 $selectingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n const el = this._list()?.nativeElement;\r\n if (this.getIsMultiSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isMultiSelection = true;\r\n this._isSingleSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.MULTI_SELECT;\r\n } else if (this.getIsSingleSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = true;\r\n this._isMultiSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST_BOX;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.SELECT;\r\n } else if (this.getIsNoneSelection(v || DEFAULT_SNAPPING_METHOD)) {\r\n this._isSingleSelection = this._isMultiSelection = false;\r\n if (!!el) {\r\n el.role = ROLE_LIST;\r\n }\r\n this._service.selectingMode = SelectingModesTypes.NONE;\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsingMode.pipe(\r\n takeUntilDestroyed(),\r\n tap(v => {\r\n if (this.getIsNoneCollapse()) {\r\n this._service.isNoneCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isMultipleCollapse = this._isAccordionCollapse = this._isMultipleCollapse = false;\r\n } else if (this.getIsMultipleCollapse()) {\r\n this._service.isMultipleCollapse = this._isMultipleCollapse = true;\r\n this._service.isAccordionCollapse = this._service.isNoneCollapse = this._isAccordionCollapse = false;\r\n } else if (this.getIsAccordionCollapse()) {\r\n this._service.isAccordionCollapse = this._isAccordionCollapse = true;\r\n this._service.isMultipleCollapse = this._service.isNoneCollapse = this._isMultipleCollapse = false;\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 alignment: Alignment; precalculatedScrollStartOffset: number; precalculatedScrollEndOffset: number; trackBy: string; isInfinity: boolean;\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 minItemSize: number; maxItemSize: number; bufferSize: number; maxBufferSize: number; stickyEnabled: boolean; isVertical: boolean;\r\n dynamicSize: boolean; divides: number; enabledBufferOptimization: boolean; cacheVersion: number; userAction: boolean;\r\n snapToItem: boolean, snapToItemAlign: SnapToItemAlign, collapsedIds: Array<Id>; itemTransform: ItemTransform | null;\r\n }) => {\r\n const {\r\n alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, trackBy, isInfinity,\r\n snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, divides, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, enabledBufferOptimization, snapToItem,\r\n snapToItemAlign, cacheVersion, userAction, collapsedIds, itemTransform,\r\n } = params;\r\n const scroller = this._scrollerComponent();\r\n let totalSize = 0;\r\n if (!!scroller) {\r\n const isInfinity = this._isInfinity(), collapsable = collapsedIds.length > 0, cachable = this.cachable, cached = this._cached, waitingCache = cachable && !cached,\r\n emitUpdate = !this._readyForShow || waitingCache || collapsable || isChunkLoading,\r\n fireUpdate = !this._readyForShow || this._$scrollingTo.getValue(),\r\n fireUpdateAtEdges = fireUpdate || !isInfinity;\r\n if (this._readyForShow || (cachable && cached)) {\r\n const currentScrollSize = (isVertical ? scroller.scrollTop : scroller.scrollLeft);\r\n let actualScrollSize = !this._readyForShow && snapScrollToEnd ? (isVertical ? scroller.scrollHeight : scroller.scrollWidth) :\r\n (isVertical ? scroller.scrollTop : scroller.scrollLeft),\r\n leftLayoutOffset = 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, minItemSize, maxItemSize, bufferSize, maxBufferSize,\r\n scrollSize: actualScrollSize, stickyEnabled, enabledBufferOptimization, snapToItem, snapToItemAlign, itemTransform,\r\n };\r\n\r\n if (snapScrollToEnd && !this._readyForShow) {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize1, leftLayoutOffset: leftLayoutOffset1 } =\r\n this._trackBox.updateCollection(items, itemConfigMap, { ...opts, scrollSize: actualScrollSize });\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize1;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n } else {\r\n const { displayItems: calculatedDisplayItems, totalSize: calculatedTotalSize, leftLayoutOffset: leftLayoutOffset1 } = this._trackBox.updateCollection(items, itemConfigMap, opts);\r\n displayItems = calculatedDisplayItems;\r\n totalSize = calculatedTotalSize;\r\n leftLayoutOffset = leftLayoutOffset1;\r\n }\r\n\r\n scroller.totalSize = totalSize;\r\n\r\n scroller.startLayoutOffset = leftLayoutOffset;\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 if (!_$created.getValue()) {\r\n _$created.next(true);\r\n }\r\n\r\n const delta = this._trackBox.delta,\r\n scrollPositionAfterUpdate = actualScrollSize + delta,\r\n roundedScrollPositionAfterUpdate = scrollPositionAfterUpdate,\r\n roundedMaxPositionAfterUpdate = isVertical ? scroller.scrollHeight : scroller.scrollWidth;\r\n\r\n if (this._isSnappingMethodAdvanced) {\r\n this.updateRegularRenderer();\r\n }\r\n\r\n switch (alignment) {\r\n case Alignments.NONE: {\r\n this._actualScrollStartOffset.set(precalculatedScrollStartOffset);\r\n this._actualScrollEndOffset.set(precalculatedScrollEndOffset);\r\n break;\r\n }\r\n case Alignments.CENTER: {\r\n const firstItemId: Id | null = items.length > 0 ? (items[0]?.[trackBy] ?? null) : null,\r\n endItemId: Id | null = items.length > 0 ? (items?.[items.length - 1]?.[trackBy] ?? null) : null,\r\n alignmentStartOffset = viewportSize * .5 - (firstItemId !== null ? (isVertical ? (this._service.getItemBounds(firstItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(firstItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5),\r\n alignmentEndOffset = viewportSize * .5 - (endItemId !== null ? (isVertical ? (this._service.getItemBounds(endItemId)?.height ?? 0) :\r\n (this._service.getItemBounds(endItemId)?.width ?? 0)) : 0) * (isInfinity ? 0 : .5);\r\n\r\n this._alignmentScrollStartOffset.set(alignmentStartOffset);\r\n this._alignmentScrollEndOffset.set(alignmentEndOffset);\r\n this._actualScrollStartOffset.set(precalculatedScrollStartOffset + alignmentStartOffset);\r\n this._actualScrollEndOffset.set(precalculatedScrollEndOffset + alignmentEndOffset);\r\n break;\r\n }\r\n }\r\n\r\n scroller.delta = delta;\r\n\r\n if ((snapScrollToStart && this._trackBox.isSnappedToStart && scroller.scrollable) ||\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: fireUpdateAtEdges, 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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n }\r\n return;\r\n }\r\n\r\n if ((snapScrollToEnd && this._trackBox.isSnappedToEnd) || (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.isScrollEnd = true;\r\n this._trackBox.isScrollStart = false;\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: fireUpdateAtEdges, 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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\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(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\r\n }\r\n return;\r\n }\r\n }\r\n if (emitUpdate) {\r\n this._$update.next(getScrollStateVersion(totalSize, this._isVertical ? scroller.scrollTop : scroller.scrollLeft));\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([$trackBy, $isInfinity, $snapScrollToStart, $snapScrollToEnd, $bounds, $listBounds, $scrollEndOffset, $actualItems, $itemConfigMap, $scrollSize,\r\n $actualItemSize, $actualMinItemSize, $actualMaxItemSize, $collapsedItemIds, $bufferSize, $maxBufferSize, $stickyEnabled, $isVertical,\r\n $dynamicSize, $divides, $snapToItem, $snapToItemAlign, $enabledBufferOptimization, $itemTransform, $alignment,\r\n $precalculatedScrollStartOffset, $precalculatedScrollEndOffset, $cacheVersion, this.$fireUpdate,\r\n ]).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n tap(([\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, snapToItem, snapToItemAlign,\r\n enabledBufferOptimization, itemTransform, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, 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 velocity = this._scrollerComponent()?.averageVelocity ?? 0,\r\n isScrolling = this._$scrollingTo.getValue(),\r\n useDebouncedUpdate = (dynamicSize && !itemTransform) && !(snapScrollToEnd && this._trackBox.isSnappedToEnd) && !itemsChanged && hasUserAction && !isScrolling &&\r\n (velocity > 0 && velocity < MAX_VELOCITY_FOR_SCROLL_QUALITY_OPTIMIZATION_LVL1);\r\n if (enabledOptimization) {\r\n if (useDebouncedUpdate) {\r\n debouncedUpdate.execute({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\r\n return;\r\n }\r\n\r\n debouncedUpdate.dispose();\r\n }\r\n\r\n if (!isScrolling) {\r\n update({\r\n trackBy, isInfinity, snapScrollToStart, snapScrollToEnd, bounds, listBounds, scrollEndOffset, items, itemConfigMap, scrollSize, itemSize, minItemSize,\r\n maxItemSize, collapsedIds, bufferSize, maxBufferSize, stickyEnabled, isVertical, dynamicSize, divides, enabledBufferOptimization, itemTransform,\r\n snapToItem, snapToItemAlign, alignment, precalculatedScrollStartOffset, precalculatedScrollEndOffset, cacheVersion, userAction: hasUserAction,\r\n });\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.next(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 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, , event]) => !!scroller && !!event),\r\n map(([scroller, trackBy, event]) => ({ scroller: scroller, trackBy, event })),\r\n switchMap(({ event }) => {\r\n const d = event?.delay ?? 0;\r\n if (d > 0) {\r\n return of(event).pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n delay(d),\r\n );\r\n }\r\n return of(event);\r\n }),\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 { id, iteration = 0, blending = false, isLastIteration = false, cb } = 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, { id, iteration: nextIteration, blending, 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 scrollerComponent.startScrollTo();\r\n\r\n const items = this._actualItems();\r\n if (!!items && items.length) {\r\n const dynamicSize = this.dynamicSize(), itemSize = this._actualItemSize(), minItemSize = this._actualMinItemSize(),\r\n maxItemSize = this._actualMaxItemSize(), 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(), 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, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(), itemTransform: this.itemTransform(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem(), snapToItemAlign: this.snapToItemAlign(),\r\n stickyEnabled: this.stickyEnabled(), 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, cb }]).pipe(delay(0));\r\n }\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n }), delta1 = this._trackBox.delta;\r\n\r\n const normalizedTotalSize = totalSize < viewportSize ? viewportSize : totalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n let actualScrollSize = scrollSize + delta1;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\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\r\n if (this._isInfinity()) {\r\n if (this.snapToItem()) {\r\n const itemBounds = this._trackBox.getItemBounds(id);\r\n if (!!itemBounds) {\r\n const itemSize = isVertical ? itemBounds.height : itemBounds.width;\r\n switch (this.snapToItemAlign()) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (scrollSize === -1) {\r\n return of([finished, { id, blending, iteration: nextIteration, 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, force: true, snap: false, normalize: false,\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, cb\r\n }]).pipe(delay(0));\r\n } else {\r\n this._$scrollSize.next(actualScrollSize);\r\n return of([true, { id, blending, iteration: nextIteration, 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, itemSize = this._actualItemSize();\r\n let scrollSize = index * itemSize;\r\n\r\n if (this._isInfinity()) {\r\n if (this.snapToItem()) {\r\n switch (this.snapToItemAlign()) {\r\n case SnapToItemAligns.CENTER: {\r\n scrollSize += itemSize * .5;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n const { width, height } = this._bounds() || { width: DEFAULT_LIST_SIZE, height: DEFAULT_LIST_SIZE },\r\n itemConfigMap = this.itemConfigMap(), items = this._actualItems(),\r\n opts: IGetItemPositionOptions<IVirtualListItem, IVirtualListCollection> = {\r\n bounds: { width, height }, collection: items, dynamicSize, isVertical: this._isVertical, itemSize, minItemSize, maxItemSize,\r\n bufferSize: this.bufferSize(), maxBufferSize: this.maxBufferSize(), itemTransform: this.itemTransform(),\r\n scrollSize: (isVertical ? scrollerComponent.scrollTop : scrollerComponent.scrollLeft),\r\n snapToItem: this.snapToItem(), snapToItemAlign: this.snapToItemAlign(),\r\n stickyEnabled: this.stickyEnabled(), fromItemId: id, enabledBufferOptimization: this.enabledBufferOptimization(),\r\n };\r\n\r\n this._trackBox.clearDelta();\r\n\r\n const viewportSize = (isVertical ? height : width),\r\n { displayItems, totalSize, leftLayoutOffset } = this._trackBox.updateCollection(items, itemConfigMap, {\r\n ...opts, scrollSize, fromItemId: isLastIteration ? undefined : id,\r\n });\r\n\r\n const actualTotalSize = this._isInfinity() ? (totalSize + viewportSize) : totalSize;\r\n\r\n const normalizedTotalSize = actualTotalSize < viewportSize ? viewportSize : actualTotalSize;\r\n\r\n scrollerComponent.startLayoutOffset = leftLayoutOffset;\r\n\r\n scrollerComponent.totalSize = normalizedTotalSize;\r\n\r\n this._service.collection = displayItems;\r\n\r\n this.resetBoundsSize(isVertical, normalizedTotalSize);\r\n\r\n this.createDisplayComponentsIfNeed(displayItems);\r\n\r\n this.tracking();\r\n\r\n this.snappingHandler();\r\n\r\n this._$preventScrollSnapping.next(true);\r\n\r\n const params: IScrollToParams = {\r\n [this._isVertical ? TOP_PROP_NAME : LEFT_PROP_NAME]: scrollSize, fireUpdate: false,\r\n behavior: BEHAVIOR_INSTANT as ScrollBehavior, blending, force: true, snap: false, normalize: false,\r\n };\r\n scrollerComponent?.scrollTo?.(params);\r\n return of([true, { id, blending, iteration: nextIteration, cb }]);\r\n }\r\n }\r\n }\r\n }\r\n return of([finished, { id, iteration: nextIteration, blending, cb }]);\r\n }),\r\n takeUntilDestroyed(),\r\n tap(([finished, params]) => {\r\n if (!finished) {\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 this._scrollerComponent()?.finishedScrollTo();\r\n this._$fireUpdate.next(true);\r\n this.emitScrollEvent(true, false, true);\r\n const scrollParams = params as IScrollParams & { scrollCalled: boolean; };\r\n scrollParams?.cb?.();\r\n }),\r\n delay(100),\r\n tap(([finished]) => {\r\n if (finished) {\r\n this._scrollerComponent()?.snapIfNeed();\r\n }\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.$virtualClick.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._isSingleSelection || (this._isMultiSelection && isSelectedIdsFirstEmit >= 2)) {\r\n const curr = this.selectedIds();\r\n if ((this._isSingleSelection && 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 $viewInit.pipe(\r\n takeUntilDestroyed(),\r\n filter(v => !!v),\r\n switchMap(() => {\r\n return this._service.$collapsedIds.pipe(\r\n takeUntilDestroyed(this._destroyRef),\r\n distinctUntilChanged(),\r\n tap(v => {\r\n const curr = this._collapsedItemIds();\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(v) !== JSON.stringify(curr))) {\r\n this._collapsedItemIds.set(v);\r\n this.onCollapse.emit(copyValueAsReadonly(v));\r\n }\r\n }),\r\n );\r\n }),\r\n ).subscribe();\r\n\r\n combineLatest([$collapsingMode, $items, $itemConfigMap, $trackBy]).pipe(\r\n takeUntilDestroyed(),\r\n tap(([collapsingMode, items, itemConfigMap, trackBy]) => {\r\n const isAccordion = isCollapseMode(collapsingMode, CollapsingModes.ACCORDION);\r\n if (isAccordion) {\r\n const allGroups: Array<Id> = [];\r\n if (this._isAccordionCollapse) {\r\n for (let i = 0, l = items.length; i < l; i++) {\r\n const item = items[i], id = item[trackBy], collapsable = itemConfigMap?.[id]?.collapsable === true;\r\n if (!collapsable) {\r\n continue;\r\n }\r\n allGroups.push(id);\r\n }\r\n }\r\n if ((this._isAccordionCollapse || this._isMultipleCollapse) && (JSON.stringify(this._collapsedItemIds()) !== JSON.stringify(allGroups))) {\r\n this._collapsedItemIds.set(allGroups);\r\n this.onCollapse.emit(copyValueAsReadonly(allGroups));\r\n }\r\n }\r\n }),\r\n ).subscribe();\r\n\r\n $collapsedItemIds.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 const isScrollEnd = (actualScrollSize >= (maxScrollSize - MIN_PIXELS_FOR_PREVENT_SNAPPING)) || !scroller.scrollable || this._trackBox.isScrollEnd;\r\n if (isScrollEnd) {\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 {\r\n const isScrollStart = (actualScrollSize <= MIN_PIXELS_FOR_PREVENT_SNAPPING);\r\n this._isScrollStart.set(isScrollStart);\r\n this._isScrollEnd.set(false);\r\n this._trackBox.isScrollStart = isScrollStart;\r\n this._trackBox.isScrollEnd = false;\r\n }\r\n } else if (!this._readyForShow) {\r\n const snapScrollToStart = this._actualSnapScrollToStart(), snapScrollToEnd = this._actualSnapScrollToEnd();\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 const itemsRange = formatActualDisplayItems(this._service.displayItems, this._actualScrollStartOffset(), this._actualScrollEndOffset(),\r\n scrollSize, isVertical, bounds),\r\n event = new ScrollEvent({\r\n direction: this._scrollerComponent()?.scrollDirection ?? 0, 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 getIsNoneSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.NONE);\r\n }\r\n\r\n private getIsSingleSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.SELECT);\r\n }\r\n\r\n private getIsMultiSelection(m?: SelectingMode) {\r\n const mode = m || this.selectingMode();\r\n return isSelectMode(mode, SelectingModes.MULTI_SELECT);\r\n }\r\n\r\n private getIsNoneCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.NONE);\r\n }\r\n\r\n private getIsMultipleCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.MULTI_COLLAPSE);\r\n }\r\n\r\n private getIsAccordionCollapse(m?: CollapsingMode) {\r\n const mode = m || this.collapsingMode();\r\n return isCollapseMode(mode, CollapsingModes.ACCORDION);\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.stickyEnabled()) {\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 delay = options?.delay ?? 0,\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 && !this._isInfinity()) {\r\n this.scrollToFinalize(id, focused, cb);\r\n return;\r\n }\r\n this._$scrollTo.next({\r\n id, behavior, blending, delay, 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 const scrollSize = this.isVertical ? scroller.scrollTop : scroller.scrollLeft;\r\n if (scrollSize === 0) {\r\n return;\r\n }\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 delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this._actualItems(), 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, delay, 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 const isVertical = this.isVertical,\r\n scrollSize = isVertical ? scroller.scrollTop : scroller.scrollLeft,\r\n maxScrollSize = isVertical ? scroller.scrollHeight : scroller.scrollTop;\r\n if (scrollSize === maxScrollSize) {\r\n return;\r\n }\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 delay = options?.delay ?? 0,\r\n iteration = options?.iteration ?? 0;\r\n validateScrollBehavior(behavior);\r\n validateIteration(iteration);\r\n const trackBy = this.trackBy(), items = this._actualItems(), latItem = items[items.length > 0 ? items.length - 1 : 0], id = latItem?.[trackBy] ?? null,\r\n actualIteration = validateScrollIteration(iteration);\r\n if (latItem === null) {\r\n return;\r\n }\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, delay, 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.next(0);\r\n const scroller = this._scrollerComponent();\r\n if (!!scroller) {\r\n scroller.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._snappedDisplayComponents.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","@let scrollStartOffset = _actualScrollStartOffset();\r\n@let scrollEndOffset = _actualScrollEndOffset();\r\n@let alignmentScrollStartOffset = _alignmentScrollStartOffset();\r\n@let alignmentScrollEndOffset = _alignmentScrollEndOffset();\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()\" [dynamic]=\"dynamicSize()\"\r\n [divides]=\"divides()\" [isVertical]=\"isVertical\" [itemSize]=\"actualItemSize()\" [trackBy]=\"trackBy()\"\r\n [itemRenderer]=\"itemRenderer()\" [startOffset]=\"scrollStartOffset\" [endOffset]=\"scrollEndOffset\"\r\n [scrollbarEnabled]=\"scroller.scrollbarShow()\" [enabled]=\"dynamicSize() && snapScrollToEnd()\" />\r\n\r\n@if (stickyEnabled()) {\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\r\n<ng-scroller #scroller class=\"ngvl__list-scroller\" [classes]=\"classes()\" [startOffset]=\"scrollStartOffset\"\r\n [endOffset]=\"scrollEndOffset\" [alignmentStartOffset]=\"alignmentScrollStartOffset\" [alignmentEndOffset]=\"alignmentScrollEndOffset\"\r\n [direction]=\"direction()\" [scrollbarThumbRenderer]=\"scrollbarThumbRenderer()\" [isInfinity]=\"_isInfinity()\"\r\n [scrollbarThickness]=\"scrollbarThickness()\" [scrollbarThumbParams]=\"scrollbarThumbParams()\"\r\n [animationParams]=\"animationParams()\" [focusedElement]=\"focusedElement()\" [loading]=\"loading()\"\r\n [overscrollEnabled]=\"overscrollEnabled()\" [snappingDistance]=\"snappingDistance()\" [overlappingScrollbar]=\"overlappingScrollbar()\"\r\n [scrollbarEnabled]=\"_actualScrollbarEnabled()\" [scrollbarInteractive]=\"scrollbarInteractive()\" [snapToItem]=\"snapToItem()\"\r\n [snapToItemAlign]=\"snapToItemAlign()\" [scrollbarMinSize]=\"scrollbarMinSize()\" [scrollBehavior]=\"scrollBehavior()\"\r\n [scrollingSettings]=\"scrollingSettings()\" [scrollingOneByOne]=\"scrollingOneByOne()\" [motionBlur]=\"motionBlur()\"\r\n [maxMotionBlur]=\"maxMotionBlur()\" [motionBlurEnabled]=\"motionBlurEnabled()\">\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 { VirtualClickDirective } from './virtual-click.directive';\r\n\r\n@NgModule({\r\n declarations: [VirtualClickDirective],\r\n exports: [VirtualClickDirective],\r\n imports: [CommonModule],\r\n schemas: [NO_ERRORS_SCHEMA],\r\n})\r\nexport class VirtualClickModule { }\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 { VirtualClickModule } from '../../directives';\r\n\r\n@NgModule({\r\n declarations: [NgVirtualListItemComponent],\r\n exports: [NgVirtualListItemComponent],\r\n imports: [CommonModule, VirtualClickModule],\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 { VirtualClickModule } 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, VirtualClickModule],\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","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface ILintearOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * linear\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/transformations/linear.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const linear = (options?: ILintearOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset';\r\n\r\nexport interface IEventHorizonOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n}\r\n\r\n/**\r\n * eventHorizon\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/transformations/event-horizon.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const eventHorizon = (options?: IEventHorizonOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .025;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * Math.pow(px, 2) * spacingBetweenItems));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * Math.pow(py, 2) * spacingBetweenItems)) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * .15, 4);\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - 1,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCardsOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards = (options?: IDeckOfCardsOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface IDeckOfCards3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `0.15`.\r\n */\r\n depth?: number;\r\n /**\r\n * Scale. Default value is `0.15`.\r\n */\r\n scale?: number;\r\n /**\r\n * Scale X. Default value is `null`.\r\n */\r\n scaleX?: number | null;\r\n /**\r\n * Scale Y. Default value is `null`.\r\n */\r\n scaleY?: number | null;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n /**\r\n * Sinusoidal distribution. Default value is `false`.\r\n */\r\n sineWave?: boolean;\r\n}\r\n\r\n/**\r\n * deckOfCards3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/transformations/deck-of-cards-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const deckOfCards3D = (options?: IDeckOfCards3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .5,\r\n angle = options?.angle ?? 1,\r\n depth = options?.depth ?? .15,\r\n scaleValue = options?.scale ?? .15,\r\n scaleXValue = options?.scaleX ?? null,\r\n scaleYValue = options?.scaleY ?? null,\r\n depthPow = options?.depthPow ?? 4,\r\n sineWave = options?.sineWave ?? false;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n result.x = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (xx * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(px)) : 1)));\r\n result.y = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + (yy * spacingBetweenItems * (sineWave ? Math.abs(Math.sin(py)) : 1))) : yy;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * scaleValue, depthPow),\r\n scaleX = scaleXValue !== null ? Math.pow(1 - s * scaleXValue, depthPow) : null,\r\n scaleY = scaleYValue !== null ? Math.pow(1 - s * scaleYValue, depthPow) : null,\r\n dofScale = Math.pow(1 - s * depth, depthPow);\r\n if (scaleXValue === null && scaleYValue === null) {\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.scaleX = result.scaleY = scale;\r\n } else {\r\n result.scaleX = scaleX !== null ? scaleX : 1;\r\n result.scaleY = scaleY !== null ? scaleY : 1;\r\n }\r\n result.rotationX = (isVertical ? py : px) * 200 * angle;\r\n result.zIndex = 100 - Math.floor(Math.abs(isVertical ? py : px) * 100);\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(dofScale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { PX } from '../const';\r\nimport { IItemTransformation } from '../interfaces';\r\nimport { IRenderVirtualListItemConfig, IRenderVirtualListItemMeasures } from '../models';\r\nimport { Color, ItemTransform } from '../types';\r\n\r\nconst UNSET = 'unset',\r\n B_LIMIT = 0.5;\r\n\r\nexport interface ISwipe3DOptions {\r\n /**\r\n * Depth Of Field. Default value is `null`.\r\n */\r\n dof?: number;\r\n /**\r\n * Fog color. Default value is `null`.\r\n */\r\n fogColor?: Color;\r\n /**\r\n * Fog weight. Default value is `null`.\r\n */\r\n fogWeight?: number;\r\n /**\r\n * Spacing between items. Default value is `0.5`.\r\n */\r\n spacingBetweenItems?: number;\r\n /**\r\n * Angle of inclination. Default value is `1`.\r\n */\r\n angle?: number;\r\n /**\r\n * Depth. Default value is `1.5`.\r\n */\r\n depth?: number;\r\n /**\r\n * Depth exponent. Default value is `4`.\r\n */\r\n depthPow?: number;\r\n}\r\n\r\n/**\r\n * swipe3D\r\n * @link https://github.com/DjonnyX/ng-virtual-list/blob/22.x/projects/ng-virtual-list/src/lib/transformations/swipe-3d.ts\r\n * @author Evgenii Alexandrovich Grebennikov\r\n * @email djonnyx@gmail.com\r\n */\r\nexport const swipe3D = (options?: ISwipe3DOptions): ItemTransform => {\r\n const dof = options?.dof ?? null,\r\n fogColor = options?.fogColor ?? null,\r\n fogWeight = options?.fogWeight ?? null,\r\n spacingBetweenItems = options?.spacingBetweenItems ?? .35,\r\n angle = options?.angle ?? 25,\r\n depth = options?.depth ?? .15,\r\n depthPow = options?.depthPow ?? 4;\r\n return (index: number, measures: IRenderVirtualListItemMeasures,\r\n config: IRenderVirtualListItemConfig): IItemTransformation => {\r\n const result: IItemTransformation = {\r\n x: 0,\r\n y: 0,\r\n z: 0,\r\n rotationX: 0,\r\n rotationY: 0,\r\n rotationZ: 0,\r\n scaleX: 1,\r\n scaleY: 1,\r\n scaleZ: 1,\r\n opacity: 1,\r\n zIndex: 1,\r\n },\r\n isVertical = config.isVertical,\r\n boundsSize = measures.boundsSize,\r\n scrollSize = measures.scrollSize,\r\n itemSize = isVertical ? measures.height : measures.width,\r\n itemSizeHalf = itemSize * .5,\r\n boundsSizeHalf = boundsSize * .5,\r\n xx = isVertical ? measures.x : (measures.x + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize),\r\n yy = isVertical ? (measures.y + config.layoutOffset + itemSizeHalf - boundsSizeHalf - scrollSize) : measures.y,\r\n pxOffset = isVertical ? boundsSizeHalf : xx, px = isVertical ? 1 : (pxOffset / boundsSizeHalf),\r\n pyOffset = isVertical ? yy : boundsSizeHalf, py = isVertical ? (pyOffset / boundsSizeHalf) : 1;\r\n if (config.snapped || config.snappedOut) {\r\n result.x = measures.x;\r\n result.y = measures.y;\r\n result.zIndex = config.zIndex;\r\n } else {\r\n const rx = isVertical ? xx : (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + xx * Math.pow(px, 2) * spacingBetweenItems),\r\n ry = isVertical ? (scrollSize - config.layoutOffset + boundsSizeHalf - itemSizeHalf + yy * Math.pow(py, 2) * spacingBetweenItems) : yy;\r\n result.x = rx;\r\n result.y = ry;\r\n const s = (isVertical ? Math.abs(yy) : Math.abs(xx)) / boundsSize, scale = Math.pow(1 - s * depth, depthPow);\r\n const z = scale + .1;\r\n result.z = z > 1 ? 1 : z;\r\n result.rotationZ = (Math.pow(s, 4) * -angle);\r\n result.zIndex = -index;\r\n if (!!dof) {\r\n const blur = (s * dof) - B_LIMIT,\r\n actualBlur = blur > 0 ? blur : 0;\r\n result.filter = actualBlur ? `blur(${actualBlur}${PX})` : UNSET;\r\n }\r\n if (!!fogColor) {\r\n result.opacity = fogWeight ? Math.pow(scale, fogWeight) : scale;\r\n result.blendColor = fogColor;\r\n }\r\n }\r\n return result;\r\n }\r\n}","import { linear } from \"./linear\";\r\nimport { eventHorizon } from \"./event-horizon\";\r\nimport { deckOfCards } from \"./deck-of-cards\";\r\nimport { deckOfCards3D } from \"./deck-of-cards-3d\";\r\nimport { swipe3D } from \"./swipe-3d\";\r\n\r\nexport const ItemTransformations = {\r\n EVENT_HORIZON: eventHorizon,\r\n LINEAR: linear,\r\n DECK_OF_CARDS: deckOfCards,\r\n DECK_OF_CARDS_3D: deckOfCards3D,\r\n SWIPE_3D: swipe3D,\r\n};\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/directives/virtual-click/virtual-click.directive';\r\nexport * from './lib/directives/virtual-click/virtual-click.module';\r\nexport * from './lib/transformations';\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","UNSET","LEFT","RIGHT","POSITION","PX","ITEM_ID","matrix3d","BehaviorSubject","tap","switchMap","i2.VirtualClickDirective","NONE_ALIASES","NORMAL_ALIASES","ScrollerDirection","TOP","INSTANT","SCROLL_EVENT","filter","takeUntil","ScrollBox","i2.NgScrollBarComponent","i3.LocaleSensitiveDirective","i2.LocaleSensitiveDirective","i1.NgPrerenderScrollerComponent","i1.NgPrerenderList","i2.NgScrollerComponent","i3.NgPrerenderContainer","i4.LocaleSensitiveDirective","B_LIMIT"],"mappings":"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"}