{"version":3,"file":"pepperi-addons-ngx-lib-list.mjs","sources":["../../../projects/ngx-lib/list/virtual-scroller.ts","../../../projects/ngx-lib/list/list.model.ts","../../../projects/ngx-lib/list/list-pager.component.ts","../../../projects/ngx-lib/list/list-pager.component.html","../../../projects/ngx-lib/list/list.component.ts","../../../projects/ngx-lib/list/list.component.html","../../../projects/ngx-lib/list/list-actions.component.ts","../../../projects/ngx-lib/list/list-actions.component.html","../../../projects/ngx-lib/list/list-carousel.component.ts","../../../projects/ngx-lib/list/list-carousel.component.html","../../../projects/ngx-lib/list/list-chooser.component.ts","../../../projects/ngx-lib/list/list-chooser.component.html","../../../projects/ngx-lib/list/list-sorting.component.ts","../../../projects/ngx-lib/list/list-sorting.component.html","../../../projects/ngx-lib/list/list-total.component.ts","../../../projects/ngx-lib/list/list-total.component.html","../../../projects/ngx-lib/list/list-views.component.ts","../../../projects/ngx-lib/list/list-views.component.html","../../../projects/ngx-lib/list/list.pipes.ts","../../../projects/ngx-lib/list/list.module.ts","../../../projects/ngx-lib/list/public-api.ts","../../../projects/ngx-lib/list/pepperi-addons-ngx-lib-list.ts"],"sourcesContent":["import {\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tContentChild,\r\n\tElementRef,\r\n\tEventEmitter,\r\n\tInject,\r\n\tInput,\r\n\tNgModule,\r\n\tNgZone,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tOnInit,\r\n\tOptional,\r\n\tOutput,\r\n\tRenderer2,\r\n\tViewChild,\r\n} from '@angular/core';\r\n\r\nimport { PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\n\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport * as tween from '@tweenjs/tween.js'\r\n\r\nexport interface VirtualScrollerDefaultOptions {\r\n\tcheckResizeInterval: number\r\n\tmodifyOverflowStyleOfParentScroll: boolean,\r\n\tresizeBypassRefreshThreshold: number,\r\n\tscrollAnimationTime: number;\r\n\tscrollDebounceTime: number;\r\n\tscrollThrottlingTime: number;\r\n\tscrollbarHeight?: number;\r\n\tscrollbarWidth?: number;\r\n\tstripedTable: boolean\r\n}\r\n\r\nexport function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY(): VirtualScrollerDefaultOptions {\r\n\treturn {\r\n\t\tcheckResizeInterval: 1000,\r\n\t\tmodifyOverflowStyleOfParentScroll: true,\r\n\t\tresizeBypassRefreshThreshold: 5,\r\n\t\tscrollAnimationTime: 750,\r\n\t\tscrollDebounceTime: 0,\r\n\t\tscrollThrottlingTime: 0,\r\n\t\tstripedTable: false\r\n\t};\r\n}\r\n\r\nexport interface WrapGroupDimensions {\r\n\tmaxChildSizePerWrapGroup: WrapGroupDimension[];\r\n\tnumberOfKnownWrapGroupChildSizes: number;\r\n\tsumOfKnownWrapGroupChildHeights: number;\r\n\tsumOfKnownWrapGroupChildWidths: number;\r\n}\r\n\r\nexport interface WrapGroupDimension {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titems: any[];\r\n}\r\n\r\nexport interface IDimensions {\r\n\tchildHeight: number;\r\n\tchildWidth: number;\r\n\titemCount: number;\r\n\titemsPerPage: number;\r\n\titemsPerWrapGroup: number;\r\n\tmaxScrollPosition: number;\r\n\tpageCount_fractional: number;\r\n\tscrollLength: number;\r\n\tviewportLength: number;\r\n\twrapGroupsPerPage: number;\r\n}\r\n\r\nexport type ScrollDirectionType = 'backward' | 'forward';\r\n\r\nexport interface IPageInfo {\r\n\tendIndex: number;\r\n\tendIndexWithBuffer: number;\r\n\tmaxScrollPosition: number;\r\n\tscrollEndPosition: number;\r\n\tscrollStartPosition: number;\r\n\tscrollDirection?: ScrollDirectionType;\r\n\tstartIndex: number;\r\n\tstartIndexWithBuffer: number;\r\n}\r\n\r\nexport interface IViewport extends IPageInfo {\r\n\tpadding: number;\r\n\tscrollLength: number;\r\n}\r\n\r\n@Component({\r\n\tselector: 'virtual-scroller,[virtualScroller]',\r\n\texportAs: 'virtualScroller',\r\n\ttemplate: `\r\n    <div class=\"total-padding\" #invisiblePadding></div>\r\n    <div class=\"scrollable-content\" #content>\r\n      <ng-content></ng-content>\r\n    </div>\r\n  `,\r\n\thost: {\r\n\t\t'[class.horizontal]': \"horizontal\",\r\n\t\t'[class.vertical]': \"!horizontal\",\r\n\t\t'[class.selfScroll]': \"!parentScroll\",\r\n\t\t'[class.rtl]': \"RTL\"\r\n\t},\r\n\tstyles: [`\r\n    :host {\r\n      position: relative;\r\n\t  \tdisplay: block;\r\n      -webkit-overflow-scrolling: touch;\r\n    }\r\n\t\t:host.horizontal.selfScroll {\r\n      overflow-y: visible;\r\n      overflow-x: auto;\r\n\t\t}\r\n\t\t:host.horizontal.selfScroll.rtl {\r\n\t\t\ttransform: scaleX(-1);\r\n\t\t}\r\n\t\t:host.vertical.selfScroll {\r\n      overflow-y: auto;\r\n      overflow-x: visible;\r\n\t\t}\r\n    .scrollable-content {\r\n      top: 0;\r\n      left: 0;\r\n      width: 100%;\r\n      height: 100%;\r\n      max-width: 100vw;\r\n      max-height: 100vh;\r\n      position: absolute;\r\n    }\r\n\t\t.scrollable-content ::ng-deep > * {\r\n\t\t\tbox-sizing: border-box;\r\n\t\t}\r\n\t\t:host.horizontal {\r\n\t\t\twhite-space: nowrap;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content {\r\n\t\t\tdisplay: flex;\r\n\t\t}\r\n\t\t:host.horizontal .scrollable-content ::ng-deep > * {\r\n\t\t\tflex-shrink: 0;\r\n\t\t\tflex-grow: 0;\r\n\t\t\twhite-space: initial;\r\n\t\t}\r\n\t\t:host.horizontal.rtl .scrollable-content ::ng-deep > * {\r\n\t\t\ttransform:scaleX(-1);\r\n\t\t}\r\n    .total-padding {\r\n      position: absolute;\r\n      top: 0;\r\n      left: 0;\r\n      height: 1px;\r\n      width: 1px;\r\n      transform-origin: 0 0;\r\n      opacity: 0;\r\n    }\r\n    :host.horizontal .total-padding {\r\n      height: 100%;\r\n    }\r\n  `]\r\n})\r\nexport class VirtualScrollerComponent implements OnInit, OnChanges, OnDestroy {\r\n\tpublic viewPortItems: any[];\r\n\tpublic window = window;\r\n\r\n\tpublic get viewPortInfo(): IPageInfo {\r\n\t\tconst pageInfo: IViewport = this.previousViewPort || <any>{};\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex || 0,\r\n\t\t\tendIndex: pageInfo.endIndex || 0,\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition || 0,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition || 0,\r\n\t\t\tscrollDirection: pageInfo.scrollDirection || 'forward',\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition || 0,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer || 0,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected _disable = false;\r\n\t@Input()\r\n\tpublic get disable(): boolean {\r\n\t\treturn this._disable;\r\n\t}\r\n\tpublic set disable(value: boolean) {\r\n\t\tif (this._disable === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._disable = value;\r\n\t\tif (this._disable) {\r\n\t\t\tthis.removeScrollEventHandlers();\r\n\t\t} else {\r\n\t\t\tthis.addScrollEventHandlers();\r\n\t\t}\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic executeRefreshOutsideAngularZone = false;\r\n\r\n\tprotected _enableUnequalChildrenSizes = false;\r\n\t@Input()\r\n\tpublic get enableUnequalChildrenSizes(): boolean {\r\n\t\treturn this._enableUnequalChildrenSizes;\r\n\t}\r\n\tpublic set enableUnequalChildrenSizes(value: boolean) {\r\n\t\tif (this._enableUnequalChildrenSizes === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._enableUnequalChildrenSizes = value;\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic RTL = false;\r\n\r\n\t@Input()\r\n\tpublic useMarginInsteadOfTranslate = false;\r\n\r\n\t@Input()\r\n\tpublic modifyOverflowStyleOfParentScroll: boolean;\r\n\r\n\t@Input()\r\n\tpublic stripedTable: boolean;\r\n\r\n\t@Input()\r\n\tpublic scrollbarWidth: number;\r\n\r\n\t@Input()\r\n\tpublic scrollbarHeight: number;\r\n\r\n\t@Input()\r\n\tpublic childWidth: number;\r\n\r\n\t@Input()\r\n\tpublic childHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildWidth: number;\r\n\r\n\t@Input()\r\n\tpublic ssrChildHeight: number;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportWidth = 1920;\r\n\r\n\t@Input()\r\n\tpublic ssrViewportHeight = 1080;\r\n\r\n\tprotected _bufferAmount: number;\r\n\t@Input()\r\n\tpublic get bufferAmount(): number {\r\n\t\tif (typeof (this._bufferAmount) === 'number' && this._bufferAmount > 0) {\r\n\t\t\treturn this._bufferAmount;\r\n\t\t} else {\r\n\t\t\treturn this.enableUnequalChildrenSizes ? 5 : 0;\r\n\t\t}\r\n\t}\r\n\tpublic set bufferAmount(value: number) {\r\n\t\tthis._bufferAmount = value;\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic scrollAnimationTime: number;\r\n\r\n\t@Input()\r\n\tpublic resizeBypassRefreshThreshold: number;\r\n\r\n\tprotected _scrollThrottlingTime: number;\r\n\t@Input()\r\n\tpublic get scrollThrottlingTime(): number {\r\n\t\treturn this._scrollThrottlingTime;\r\n\t}\r\n\tpublic set scrollThrottlingTime(value: number) {\r\n\t\tthis._scrollThrottlingTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected _scrollDebounceTime: number;\r\n\t@Input()\r\n\tpublic get scrollDebounceTime(): number {\r\n\t\treturn this._scrollDebounceTime;\r\n\t}\r\n\tpublic set scrollDebounceTime(value: number) {\r\n\t\tthis._scrollDebounceTime = value;\r\n\t\tthis.updateOnScrollFunction();\r\n\t}\r\n\r\n\tprotected onScroll: () => void;\r\n\tprotected updateOnScrollFunction(): void {\r\n\t\tif (this.scrollDebounceTime) {\r\n\t\t\tthis.onScroll = <any>this.debounce(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollDebounceTime);\r\n\t\t}\r\n\t\telse if (this.scrollThrottlingTime) {\r\n\t\t\tthis.onScroll = <any>this.throttleTrailing(() => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}, this.scrollThrottlingTime);\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.onScroll = () => {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tprotected checkScrollElementResizedTimer: number;\r\n\tprotected _checkResizeInterval: number;\r\n\t@Input()\r\n\tpublic get checkResizeInterval(): number {\r\n\t\treturn this._checkResizeInterval;\r\n\t}\r\n\tpublic set checkResizeInterval(value: number) {\r\n\t\tif (this._checkResizeInterval === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._checkResizeInterval = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tprotected _items: any[] = [];\r\n\t@Input()\r\n\tpublic get items(): any[] {\r\n\t\treturn this._items;\r\n\t}\r\n\tpublic set items(value: any[]) {\r\n\t\tif (value === this._items) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._items = value || [];\r\n\t\tthis.refresh_internal(true);\r\n\t}\r\n\r\n\t@Input()\r\n\tpublic compareItems: (item1: any, item2: any) => boolean = (item1: any, item2: any) => item1 === item2;\r\n\r\n\tprotected _horizontal: boolean;\r\n\t@Input()\r\n\tpublic get horizontal(): boolean {\r\n\t\treturn this._horizontal;\r\n\t}\r\n\tpublic set horizontal(value: boolean) {\r\n\t\tthis._horizontal = value;\r\n\t\tthis.updateDirection();\r\n\t}\r\n\r\n\tprotected revertParentOverscroll(): void {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (scrollElement && this.oldParentScrollOverflow) {\r\n\t\t\tscrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\r\n\t\t\tscrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\r\n\t\t}\r\n\r\n\t\tthis.oldParentScrollOverflow = undefined;\r\n\t}\r\n\r\n\tprotected oldParentScrollOverflow: { x: string, y: string };\r\n\tprotected _parentScroll: Element | Window;\r\n\t@Input()\r\n\tpublic get parentScroll(): Element | Window {\r\n\t\treturn this._parentScroll;\r\n\t}\r\n\tpublic set parentScroll(value: Element | Window) {\r\n\t\tif (this._parentScroll === value) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.revertParentOverscroll();\r\n\t\tthis._parentScroll = value;\r\n\t\tthis.addScrollEventHandlers();\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\t\tif (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\r\n\t\t\tthis.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\r\n\t\t\tscrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\r\n\t\t\tscrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\r\n\t\t}\r\n\t}\r\n\r\n\t// private _lastChildRect: DOMRect = null;\r\n\r\n\t@Output()\r\n\tpublic vsChildRectChange: EventEmitter<DOMRect> = new EventEmitter<DOMRect>();\r\n\r\n\t@Output()\r\n\tpublic vsUpdate: EventEmitter<any[]> = new EventEmitter<any[]>();\r\n\r\n\t@Output()\r\n\tpublic vsChange: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsStart: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@Output()\r\n\tpublic vsEnd: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\r\n\r\n\t@ViewChild('content', { read: ElementRef, static: true })\r\n\tpublic contentElementRef: ElementRef;\r\n\r\n\t@ViewChild('invisiblePadding', { read: ElementRef, static: true })\r\n\tprotected invisiblePaddingElementRef: ElementRef;\r\n\r\n\t@ContentChild('header', { read: ElementRef, static: false })\r\n\tprotected headerElementRef: ElementRef;\r\n\r\n\t@ContentChild('container', { read: ElementRef, static: false })\r\n\tprotected containerElementRef: ElementRef;\r\n\r\n\tpublic ngOnInit(): void {\r\n\t\tthis.addScrollEventHandlers();\r\n\t}\r\n\r\n\tpublic ngOnDestroy(): void {\r\n\t\tthis.removeScrollEventHandlers();\r\n\t\tthis.revertParentOverscroll();\r\n\t}\r\n\r\n\tpublic ngOnChanges(changes: any): void {\r\n\t\tconst indexLengthChanged = this.cachedItemsLength !== this.items.length;\r\n\t\tthis.cachedItemsLength = this.items.length;\r\n\r\n\t\tconst firstRun: boolean = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\r\n\t\tthis.refresh_internal(indexLengthChanged || firstRun);\r\n\t}\r\n\r\n\tpublic ngDoCheck(): void {\r\n\t\tif (this.cachedItemsLength !== this.items.length) {\r\n\t\t\tthis.cachedItemsLength = this.items.length;\r\n\t\t\tthis.refresh_internal(true);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {\r\n\t\t\tlet itemsArrayChanged = false;\r\n\t\t\tfor (let i = 0; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\tif (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {\r\n\t\t\t\t\titemsArrayChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (itemsArrayChanged) {\r\n\t\t\t\tthis.refresh_internal(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpublic refresh(refreshCompletedCallback: () => void = undefined): void {\r\n\t\tthis.refresh_internal(true, refreshCompletedCallback);\r\n\t}\r\n\r\n\tpublic invalidateAllCachedMeasurements(): void {\r\n\t\tthis.wrapGroupDimensions = {\r\n\t\t\tmaxChildSizePerWrapGroup: [],\r\n\t\t\tnumberOfKnownWrapGroupChildSizes: 0,\r\n\t\t\tsumOfKnownWrapGroupChildWidths: 0,\r\n\t\t\tsumOfKnownWrapGroupChildHeights: 0\r\n\t\t};\r\n\r\n\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\tthis.minMeasuredChildHeight = undefined;\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementForItem(item: any): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst index = this.items && this.items.indexOf(item);\r\n\t\t\tif (index >= 0) {\r\n\t\t\t\tthis.invalidateCachedMeasurementAtIndex(index);\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic invalidateCachedMeasurementAtIndex(index: number): void {\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\r\n\t\t\tif (cachedMeasurement) {\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\r\n\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.minMeasuredChildWidth = undefined;\r\n\t\t\tthis.minMeasuredChildHeight = undefined;\r\n\t\t}\r\n\r\n\t\tthis.refresh_internal(false);\r\n\t}\r\n\r\n\tpublic scrollInto(item: any, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tconst index: number = this.items.indexOf(item);\r\n\t\tif (index === -1) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tlet maxRetries = 5;\r\n\r\n\t\tconst retryIfNeeded = () => {\r\n\t\t\t--maxRetries;\r\n\t\t\tif (maxRetries <= 0) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst dimensions = this.calculateDimensions();\r\n\t\t\tconst desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\r\n\t\t\tif (this.previousViewPort.startIndex === desiredStartIndex) {\r\n\t\t\t\tif (animationCompletedCallback) {\r\n\t\t\t\t\tanimationCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\r\n\t\t};\r\n\r\n\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\r\n\t}\r\n\r\n\tprotected scrollToIndex_internal(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tlet scroll = this.calculatePadding(index, dimensions) + additionalOffset;\r\n\t\tif (!alignToBeginning) {\r\n\t\t\tscroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\r\n\t\t}\r\n\r\n\t\tthis.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\r\n\t}\r\n\r\n\tpublic scrollToPosition(scrollPosition: number, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\r\n\t\tscrollPosition += this.getElementsOffset();\r\n\r\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tlet animationRequest: number;\r\n\r\n\t\tif (this.currentTween) {\r\n\t\t\tthis.currentTween.stop();\r\n\t\t\tthis.currentTween = undefined;\r\n\t\t}\r\n\r\n\t\tif (!animationMilliseconds) {\r\n\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\r\n\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\r\n\r\n\t\tconst newTween = new tween.Tween(tweenConfigObj)\r\n\t\t\t.to({ scrollPosition }, animationMilliseconds)\r\n\t\t\t.easing(tween.Easing.Quadratic.Out)\r\n\t\t\t.onUpdate((data) => {\r\n\t\t\t\tif (isNaN(data.scrollPosition)) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t})\r\n\t\t\t.onStop(() => {\r\n\t\t\t\tcancelAnimationFrame(animationRequest);\r\n\t\t\t})\r\n\t\t\t.start();\r\n\r\n\t\tconst animate = (time?: number) => {\r\n\t\t\tif (!newTween[\"isPlaying\"]()) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tnewTween.update(time);\r\n\t\t\tif (tweenConfigObj.scrollPosition === scrollPosition) {\r\n\t\t\t\tthis.refresh_internal(false, animationCompletedCallback);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\t\tanimationRequest = requestAnimationFrame(animate);\r\n\t\t\t});\r\n\t\t};\r\n\r\n\t\tanimate();\r\n\t\tthis.currentTween = newTween;\r\n\t}\r\n\r\n\tprotected isAngularUniversalSSR: boolean;\r\n\r\n\tconstructor(\r\n\t\tprotected readonly element: ElementRef,\r\n\t\tprotected readonly renderer: Renderer2,\r\n\t\tprotected readonly zone: NgZone,\r\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\r\n\t\t@Inject(PLATFORM_ID) platformId: any,\r\n\t\t@Optional() @Inject('virtual-scroller-default-options')\r\n\t\toptions: VirtualScrollerDefaultOptions\r\n\t) {\r\n\r\n\t\tthis.isAngularUniversalSSR = isPlatformServer(platformId);\r\n\r\n\t\tconst defaultOptions = VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY();\r\n\r\n\t\tthis.checkResizeInterval = options?.checkResizeInterval || defaultOptions.checkResizeInterval;\r\n\t\tthis.modifyOverflowStyleOfParentScroll = options?.modifyOverflowStyleOfParentScroll || defaultOptions.modifyOverflowStyleOfParentScroll;\r\n\t\tthis.resizeBypassRefreshThreshold = options?.resizeBypassRefreshThreshold || defaultOptions.resizeBypassRefreshThreshold;\r\n\t\tthis.scrollAnimationTime = options?.scrollAnimationTime || defaultOptions.scrollAnimationTime;\r\n\t\tthis.scrollDebounceTime = options?.scrollDebounceTime || defaultOptions.scrollDebounceTime;\r\n\t\tthis.scrollThrottlingTime = options?.scrollThrottlingTime || defaultOptions.scrollThrottlingTime;\r\n\t\tthis.scrollbarHeight = options?.scrollbarHeight || defaultOptions.scrollbarHeight;\r\n\t\tthis.scrollbarWidth = options?.scrollbarWidth || defaultOptions.scrollbarWidth;\r\n\t\tthis.stripedTable = options?.stripedTable || defaultOptions.stripedTable;\r\n\r\n\t\tthis.horizontal = false;\r\n\t\tthis.resetWrapGroupDimensions();\r\n\t}\r\n\r\n\tpublic getElementSize(element: HTMLElement): any {\r\n\t\tconst result = element.getBoundingClientRect();\r\n\t\tconst styles = getComputedStyle(element);\r\n\t\tconst marginTop = parseInt(styles['margin-top'], 10) || 0;\r\n\t\tconst marginBottom = parseInt(styles['margin-bottom'], 10) || 0;\r\n\t\tconst marginLeft = parseInt(styles['margin-left'], 10) || 0;\r\n\t\tconst marginRight = parseInt(styles['margin-right'], 10) || 0;\r\n\r\n\t\treturn {\r\n\t\t\ttop: result.top + marginTop,\r\n\t\t\tbottom: result.bottom + marginBottom,\r\n\t\t\tleft: result.left + marginLeft,\r\n\t\t\tright: result.right + marginRight,\r\n\t\t\twidth: parseFloat((result.width + marginLeft + marginRight).toFixed(3)),\r\n\t\t\theight: parseFloat((result.height + marginTop + marginBottom).toFixed(3))\r\n\t\t};\r\n\t}\r\n\r\n\tpublic getContent() {\r\n\t\tconst content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\r\n\t\treturn content;\r\n\t}\r\n\r\n\tprotected previousScrollBoundingRect: DOMRect;\r\n\tprotected checkScrollElementResized(): void {\r\n\t\tconst boundingRect = this.getElementSize(this.getScrollElement());\r\n\r\n\t\tlet sizeChanged: boolean;\r\n\t\tif (!this.previousScrollBoundingRect) {\r\n\t\t\tsizeChanged = true;\r\n\t\t} else {\r\n\t\t\tconst widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\r\n\t\t\tconst heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\r\n\t\t\tsizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\r\n\t\t}\r\n\r\n\t\tif (sizeChanged) {\r\n\t\t\tthis.previousScrollBoundingRect = boundingRect;\r\n\t\t\tif (boundingRect.width > 0 && boundingRect.height > 0) {\r\n\t\t\t\tthis.refresh_internal(false);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected _invisiblePaddingProperty;\r\n\tprotected _offsetType;\r\n\tprotected _scrollType;\r\n\tprotected _pageOffsetType;\r\n\tprotected _childScrollDim;\r\n\tprotected _translateDir;\r\n\tprotected _marginDir;\r\n\tprotected updateDirection(): void {\r\n\t\tif (this.horizontal) {\r\n\t\t\tthis._childScrollDim = 'childWidth';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleX';\r\n\t\t\tthis._marginDir = 'margin-left';\r\n\t\t\tthis._offsetType = 'offsetLeft';\r\n\t\t\tthis._pageOffsetType = 'pageXOffset';\r\n\t\t\tthis._scrollType = 'scrollLeft';\r\n\t\t\tthis._translateDir = 'translateX';\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis._childScrollDim = 'childHeight';\r\n\t\t\tthis._invisiblePaddingProperty = 'scaleY';\r\n\t\t\tthis._marginDir = 'margin-top';\r\n\t\t\tthis._offsetType = 'offsetTop';\r\n\t\t\tthis._pageOffsetType = 'pageYOffset';\r\n\t\t\tthis._scrollType = 'scrollTop';\r\n\t\t\tthis._translateDir = 'translateY';\r\n\t\t}\r\n\t}\r\n\r\n\tprotected debounce(func: () => void, wait: number, ...args): () => void {\r\n\t\tconst throttled = this.throttleTrailing(func, wait);\r\n\t\tconst result = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t\tthrottled.apply(this, args);\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tthrottled['cancel']();\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected throttleTrailing(func: () => void, wait: number, ...args): () => void {\r\n\t\tlet timeout = undefined;\r\n\t\tlet _arguments = args;\r\n\t\tconst result = function () {\r\n\t\t\tconst _this = this;\r\n\t\t\t_arguments = args\r\n\r\n\t\t\tif (timeout) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (wait <= 0) {\r\n\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t} else {\r\n\t\t\t\ttimeout = setTimeout(function () {\r\n\t\t\t\t\ttimeout = undefined;\r\n\t\t\t\t\tfunc.apply(_this, _arguments);\r\n\t\t\t\t}, wait);\r\n\t\t\t}\r\n\t\t};\r\n\t\tresult['cancel'] = function () {\r\n\t\t\tif (timeout) {\r\n\t\t\t\tclearTimeout(timeout);\r\n\t\t\t\ttimeout = undefined;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatedScrollbarWidth = 0;\r\n\tprotected calculatedScrollbarHeight = 0;\r\n\r\n\tprotected padding = 0;\r\n\tprotected previousViewPort: IViewport = <any>{};\r\n\tprotected currentTween: tween.Tween;\r\n\tprotected cachedItemsLength: number;\r\n\r\n\tprotected disposeScrollHandler: () => void | undefined;\r\n\tprotected disposeResizeHandler: () => void | undefined;\r\n\r\n\tprotected refresh_internal(itemsArrayModified: boolean, refreshCompletedCallback: () => void = undefined, maxRunTimes = 2): void {\r\n\t\t//note: maxRunTimes is to force it to keep recalculating if the previous iteration caused a re-render (different sliced items in viewport or scrollPosition changed).\r\n\t\t//The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\r\n\t\t//The code would typically quit out on the 2nd iteration anyways. The main time it'd think more than 2 runs would be necessary would be for vastly different sized child items or if this is the 1st time the items array was initialized.\r\n\t\t//Without maxRunTimes, If the user is actively scrolling this code would become an infinite loop until they stopped scrolling. This would be okay, except each scroll event would start an additional infinte loop. We want to short-circuit it to prevent this.\r\n\r\n\t\tif (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {\r\n\t\t\t//if items were prepended, scroll forward to keep same items visible\r\n\t\t\tconst oldViewPort = this.previousViewPort;\r\n\t\t\tconst oldViewPortItems = this.viewPortItems;\r\n\r\n\t\t\tconst oldRefreshCompletedCallback = refreshCompletedCallback;\r\n\t\t\trefreshCompletedCallback = () => {\r\n\t\t\t\tconst scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;\r\n\t\t\t\tif (scrollLengthDelta > 0 && this.viewPortItems) {\r\n\t\t\t\t\tconst oldStartItem = oldViewPortItems[0];\r\n\t\t\t\t\tconst oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));\r\n\t\t\t\t\tif (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {\r\n\t\t\t\t\t\tlet itemOrderChanged = false;\r\n\t\t\t\t\t\tfor (let i = 1; i < this.viewPortItems.length; ++i) {\r\n\t\t\t\t\t\t\tif (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {\r\n\t\t\t\t\t\t\t\titemOrderChanged = true;\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (!itemOrderChanged) {\r\n\t\t\t\t\t\t\tthis.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta, 0, oldRefreshCompletedCallback);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (oldRefreshCompletedCallback) {\r\n\t\t\t\t\toldRefreshCompletedCallback();\r\n\t\t\t\t}\r\n\t\t\t};\r\n\t\t}\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\trequestAnimationFrame(() => {\r\n\r\n\t\t\t\tif (itemsArrayModified) {\r\n\t\t\t\t\tthis.resetWrapGroupDimensions();\r\n\t\t\t\t}\r\n\t\t\t\tconst viewport = this.calculateViewport();\r\n\r\n\t\t\t\tconst startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;\r\n\t\t\t\tconst endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;\r\n\t\t\t\tconst scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;\r\n\t\t\t\tconst paddingChanged = viewport.padding !== this.previousViewPort.padding;\r\n\t\t\t\tconst scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;\r\n\r\n\t\t\t\tconst scrollDirection: ScrollDirectionType = this.previousViewPort.endIndex <= viewport.endIndex ? 'forward' : 'backward';\r\n\t\t\t\tthis.previousViewPort = viewport;\r\n\r\n\t\t\t\tif (scrollLengthChanged) {\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'transform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, 'webkitTransform', `${this._invisiblePaddingProperty}(${viewport.scrollLength})`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (paddingChanged) {\r\n\t\t\t\t\tif (this.useMarginInsteadOfTranslate) {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.headerElementRef) {\r\n\t\t\t\t\tconst scrollPosition = this.getScrollElement()[this._scrollType];\r\n\t\t\t\t\tconst containerOffset = this.getElementsOffset();\r\n\t\t\t\t\tconst offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst changeEventArg: IPageInfo = (startChanged || endChanged) ? {\r\n\t\t\t\t\tstartIndex: viewport.startIndex,\r\n\t\t\t\t\tendIndex: viewport.endIndex,\r\n\t\t\t\t\tscrollStartPosition: viewport.scrollStartPosition,\r\n\t\t\t\t\tscrollEndPosition: viewport.scrollEndPosition,\r\n\t\t\t\t\tscrollDirection: scrollDirection,\r\n\t\t\t\t\tstartIndexWithBuffer: viewport.startIndexWithBuffer,\r\n\t\t\t\t\tendIndexWithBuffer: viewport.endIndexWithBuffer,\r\n\t\t\t\t\tmaxScrollPosition: viewport.maxScrollPosition,\r\n\t\t\t\t} : undefined;\r\n\r\n\r\n\t\t\t\tif (startChanged || endChanged || scrollPositionChanged) {\r\n\t\t\t\t\tconst handleChanged = () => {\r\n\t\t\t\t\t\t// update the scroll list to trigger re-render of components in viewport\r\n\t\t\t\t\t\tthis.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\r\n\t\t\t\t\t\tthis.vsUpdate.emit(this.viewPortItems);\r\n\r\n\t\t\t\t\t\tif (startChanged) {\r\n\t\t\t\t\t\t\tthis.vsStart.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (endChanged) {\r\n\t\t\t\t\t\t\tthis.vsEnd.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (startChanged || endChanged) {\r\n\t\t\t\t\t\t\tthis.changeDetectorRef.markForCheck();\r\n\t\t\t\t\t\t\tthis.vsChange.emit(changeEventArg);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (maxRunTimes > 0) {\r\n\t\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t};\r\n\r\n\r\n\t\t\t\t\tif (this.executeRefreshOutsideAngularZone) {\r\n\t\t\t\t\t\thandleChanged();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tthis.zone.run(handleChanged);\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\r\n\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (refreshCompletedCallback) {\r\n\t\t\t\t\t\trefreshCompletedCallback();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\tprotected getScrollElement(): HTMLElement {\r\n\t\treturn this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\r\n\t}\r\n\r\n\tprotected addScrollEventHandlers(): void {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tthis.removeScrollEventHandlers();\r\n\r\n\t\tthis.zone.runOutsideAngular(() => {\r\n\t\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);\r\n\t\t\t\tthis.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);\r\n\t\t\t\tif (this._checkResizeInterval > 0) {\r\n\t\t\t\t\tthis.checkScrollElementResizedTimer = <any>setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tprotected removeScrollEventHandlers(): void {\r\n\t\tif (this.checkScrollElementResizedTimer) {\r\n\t\t\tclearInterval(this.checkScrollElementResizedTimer);\r\n\t\t}\r\n\r\n\t\tif (this.disposeScrollHandler) {\r\n\t\t\tthis.disposeScrollHandler();\r\n\t\t\tthis.disposeScrollHandler = undefined;\r\n\t\t}\r\n\r\n\t\tif (this.disposeResizeHandler) {\r\n\t\t\tthis.disposeResizeHandler();\r\n\t\t\tthis.disposeResizeHandler = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\tprotected getElementsOffset(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tlet offset = 0;\r\n\r\n\t\tif (this.containerElementRef && this.containerElementRef.nativeElement) {\r\n\t\t\toffset += this.containerElementRef.nativeElement[this._offsetType];\r\n\t\t}\r\n\r\n\t\tif (this.parentScroll) {\r\n\t\t\tconst scrollElement = this.getScrollElement();\r\n\t\t\tconst elementClientRect = this.getElementSize(this.element.nativeElement);\r\n\t\t\tconst scrollClientRect = this.getElementSize(scrollElement);\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\toffset += elementClientRect.left - scrollClientRect.left;\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\toffset += elementClientRect.top - scrollClientRect.top;\r\n\t\t\t}\r\n\r\n\t\t\tif (!(this.parentScroll instanceof Window)) {\r\n\t\t\t\toffset += scrollElement[this._scrollType];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn offset;\r\n\t}\r\n\r\n\tprotected countItemsPerWrapGroup(): number {\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\treturn Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\r\n\t\t}\r\n\r\n\t\tconst propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\r\n\t\tconst children = this.getContent().children;\r\n\r\n\t\tconst childrenLength = children ? children.length : 0;\r\n\t\tif (childrenLength === 0) {\r\n\t\t\treturn 1;\r\n\t\t}\r\n\r\n\t\tconst firstOffset = children[0][propertyName];\r\n\t\tlet result = 1;\r\n\t\twhile (result < childrenLength && firstOffset === children[result][propertyName]) {\r\n\t\t\t++result;\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected getScrollStartPosition(): number {\r\n\t\tlet windowScrollValue = undefined;\r\n\t\tif (this.parentScroll instanceof Window) {\r\n\t\t\twindowScrollValue = window[this._pageOffsetType];\r\n\t\t}\r\n\r\n\t\treturn windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\r\n\t}\r\n\r\n\tprotected minMeasuredChildWidth: number;\r\n\tprotected minMeasuredChildHeight: number;\r\n\r\n\tprotected wrapGroupDimensions: WrapGroupDimensions;\r\n\r\n\tprotected resetWrapGroupDimensions(): void {\r\n\t\tconst oldWrapGroupDimensions = this.wrapGroupDimensions;\r\n\t\tthis.invalidateAllCachedMeasurements();\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst itemsPerWrapGroup: number = this.countItemsPerWrapGroup();\r\n\t\tfor (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\r\n\t\t\tconst oldWrapGroupDimension: WrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\tif (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tif (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tlet itemsChanged = false;\r\n\t\t\tconst arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\r\n\t\t\tfor (let i = 0; i < itemsPerWrapGroup; ++i) {\r\n\t\t\t\tif (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\r\n\t\t\t\t\titemsChanged = true;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!itemsChanged) {\r\n\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\r\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tprotected calculateDimensions(): IDimensions {\r\n\t\tconst scrollElement = this.getScrollElement();\r\n\r\n\t\tconst maxCalculatedScrollBarSize = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\r\n\t\tthis.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\r\n\t\tthis.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\r\n\r\n\t\tlet viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\r\n\t\tlet viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\r\n\r\n\t\tconst content = this.getContent();\r\n\r\n\t\tconst itemsPerWrapGroup = this.countItemsPerWrapGroup();\r\n\t\tlet wrapGroupsPerPage;\r\n\r\n\t\tlet defaultChildWidth;\r\n\t\tlet defaultChildHeight;\r\n\r\n\t\tif (this.isAngularUniversalSSR) {\r\n\t\t\tviewportWidth = this.ssrViewportWidth;\r\n\t\t\tviewportHeight = this.ssrViewportHeight;\r\n\t\t\tdefaultChildWidth = this.ssrChildWidth;\r\n\t\t\tdefaultChildHeight = this.ssrChildHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t}\r\n\t\telse if (!this.enableUnequalChildrenSizes) {\r\n\t\t\tif (content.children.length > 0) {\r\n\t\t\t\tif (!this.childWidth || !this.childHeight) {\r\n\t\t\t\t\tif (!this.minMeasuredChildWidth && viewportWidth > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildWidth = viewportWidth;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (!this.minMeasuredChildHeight && viewportHeight > 0) {\r\n\t\t\t\t\t\tthis.minMeasuredChildHeight = viewportHeight;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst child = content.children[0];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\t\t\t\tthis.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\r\n\t\t\t\tthis.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\r\n\r\n\t\t\t\t// Added for getting the child height (for card view, return all the clientRect object).\r\n\t\t\t\t// if (this._lastChildRect === null ||\r\n\t\t\t\t// \t(clientRect?.height !== 0 && (\r\n\t\t\t\t// \t\tMath.round(this._lastChildRect?.height) !== Math.round(clientRect?.height) || \r\n\t\t\t\t// \t\tMath.round(this._lastChildRect?.width) !== Math.round(clientRect?.width))\r\n\t\t\t\t// \t)) {\r\n\t\t\t\t// \tthis._lastChildRect = clientRect;\r\n\t\t\t\t// \tthis.vsChildRectChange.emit(clientRect);\r\n\t\t\t\t// }\r\n\t\t\t}\r\n\r\n\t\t\tdefaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\r\n\t\t\tconst itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\r\n\t\t\tconst itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\r\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\r\n\t\t} else {\r\n\t\t\tlet scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\r\n\r\n\t\t\tlet arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\r\n\t\t\tlet wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\r\n\r\n\t\t\tlet maxWidthForWrapGroup = 0;\r\n\t\t\tlet maxHeightForWrapGroup = 0;\r\n\t\t\tlet sumOfVisibleMaxWidths = 0;\r\n\t\t\tlet sumOfVisibleMaxHeights = 0;\r\n\t\t\twrapGroupsPerPage = 0;\r\n\r\n\t\t\tfor (let i = 0; i < content.children.length; ++i) {\r\n\t\t\t\t++arrayStartIndex;\r\n\t\t\t\tconst child = content.children[i];\r\n\t\t\t\tconst clientRect = this.getElementSize(child);\r\n\r\n\t\t\t\tmaxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\r\n\t\t\t\tmaxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\r\n\r\n\t\t\t\tif (arrayStartIndex % itemsPerWrapGroup === 0) {\r\n\t\t\t\t\tconst oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\r\n\t\t\t\t\tif (oldValue) {\r\n\t\t\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\r\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\t\t\tconst items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\r\n\t\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\r\n\t\t\t\t\t\tchildWidth: maxWidthForWrapGroup,\r\n\t\t\t\t\t\tchildHeight: maxHeightForWrapGroup,\r\n\t\t\t\t\t\titems: items\r\n\t\t\t\t\t};\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\r\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\r\n\r\n\t\t\t\t\tif (this.horizontal) {\r\n\t\t\t\t\t\tlet maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tlet maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\r\n\t\t\t\t\t\tif (scrollOffset > 0) {\r\n\t\t\t\t\t\t\tconst scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\r\n\t\t\t\t\t\t\tmaxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tsumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\r\n\t\t\t\t\t\tif (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\r\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t++wrapGroupIndex;\r\n\r\n\t\t\t\t\tmaxWidthForWrapGroup = 0;\r\n\t\t\t\t\tmaxHeightForWrapGroup = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconst averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tconst averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\r\n\t\t\tdefaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\r\n\t\t\tdefaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\r\n\r\n\t\t\tif (this.horizontal) {\r\n\t\t\t\tif (viewportWidth > sumOfVisibleMaxWidths) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (viewportHeight > sumOfVisibleMaxHeights) {\r\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tconst itemCount = this.items.length;\r\n\t\tconst itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\r\n\t\tconst pageCount_fractional = itemCount / itemsPerPage;\r\n\t\tconst numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\r\n\r\n\t\tlet scrollLength = 0;\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tlet numUnknownChildSizes = 0;\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\tscrollLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tscrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\t\t} else {\r\n\t\t\tscrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\r\n\t\t}\r\n\r\n\t\tif (this.headerElementRef) {\r\n\t\t\tscrollLength += this.headerElementRef.nativeElement.clientHeight;\r\n\t\t}\r\n\r\n\t\tconst viewportLength = this.horizontal ? viewportWidth : viewportHeight;\r\n\t\tconst maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\r\n\r\n\t\treturn {\r\n\t\t\tchildHeight: defaultChildHeight,\r\n\t\t\tchildWidth: defaultChildWidth,\r\n\t\t\titemCount: itemCount,\r\n\t\t\titemsPerPage: itemsPerPage,\r\n\t\t\titemsPerWrapGroup: itemsPerWrapGroup,\r\n\t\t\tmaxScrollPosition: maxScrollPosition,\r\n\t\t\tpageCount_fractional: pageCount_fractional,\r\n\t\t\tscrollLength: scrollLength,\r\n\t\t\tviewportLength: viewportLength,\r\n\t\t\twrapGroupsPerPage: wrapGroupsPerPage,\r\n\t\t};\r\n\t}\r\n\r\n\tprotected cachedPageSize = 0;\r\n\tprotected previousScrollNumberElements = 0;\r\n\r\n\tprotected calculatePadding(arrayStartIndexWithBuffer: number, dimensions: IDimensions): number {\r\n\t\tif (dimensions.itemCount === 0) {\r\n\t\t\treturn 0;\r\n\t\t}\r\n\r\n\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\tconst startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\r\n\r\n\t\tif (!this.enableUnequalChildrenSizes) {\r\n\t\t\treturn defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\r\n\t\t}\r\n\r\n\t\tlet numUnknownChildSizes = 0;\r\n\t\tlet result = 0;\r\n\t\tfor (let i = 0; i < startingWrapGroupIndex; ++i) {\r\n\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\tif (childSize) {\r\n\t\t\t\tresult += childSize;\r\n\t\t\t} else {\r\n\t\t\t\t++numUnknownChildSizes;\r\n\t\t\t}\r\n\t\t}\r\n\t\tresult += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\tprotected calculatePageInfo(scrollPosition: number, dimensions: IDimensions): IPageInfo {\r\n\t\tlet scrollPercentage = 0;\r\n\t\tif (this.enableUnequalChildrenSizes) {\r\n\t\t\tconst numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\r\n\t\t\tlet totalScrolledLength = 0;\r\n\t\t\tconst defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\r\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\r\n\t\t\t\tconst childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\r\n\t\t\t\tif (childSize) {\r\n\t\t\t\t\ttotalScrolledLength += childSize;\r\n\t\t\t\t} else {\r\n\t\t\t\t\ttotalScrolledLength += defaultScrollLengthPerWrapGroup;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (scrollPosition < totalScrolledLength) {\r\n\t\t\t\t\tscrollPercentage = i / numberOfWrapGroups;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tscrollPercentage = scrollPosition / dimensions.scrollLength;\r\n\t\t}\r\n\r\n\t\tconst startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\r\n\r\n\t\tconst maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\r\n\t\tlet arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\r\n\t\tarrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\r\n\r\n\t\tif (this.stripedTable) {\r\n\t\t\tconst bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\r\n\t\t\tif (arrayStartIndex % bufferBoundary !== 0) {\r\n\t\t\t\tarrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tlet arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\r\n\t\tconst endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\r\n\t\tif (endIndexWithinWrapGroup > 0) {\r\n\t\t\tarrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\r\n\t\t}\r\n\r\n\t\tif (isNaN(arrayStartIndex)) {\r\n\t\t\tarrayStartIndex = 0;\r\n\t\t}\r\n\t\tif (isNaN(arrayEndIndex)) {\r\n\t\t\tarrayEndIndex = 0;\r\n\t\t}\r\n\r\n\t\tarrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\r\n\t\tarrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\r\n\r\n\t\tconst bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\r\n\t\tconst startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\r\n\t\tconst endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: arrayStartIndex,\r\n\t\t\tendIndex: arrayEndIndex,\r\n\t\t\tstartIndexWithBuffer: startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: endIndexWithBuffer,\r\n\t\t\tscrollStartPosition: scrollPosition,\r\n\t\t\tscrollEndPosition: scrollPosition + dimensions.viewportLength,\r\n\t\t\tmaxScrollPosition: dimensions.maxScrollPosition\r\n\t\t};\r\n\t}\r\n\r\n\tprotected calculateViewport(): IViewport {\r\n\t\tconst dimensions = this.calculateDimensions();\r\n\t\tconst offset = this.getElementsOffset();\r\n\r\n\t\tlet scrollStartPosition = this.getScrollStartPosition();\r\n\t\tif (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\r\n\t\t\tscrollStartPosition = dimensions.scrollLength;\r\n\t\t} else {\r\n\t\t\tscrollStartPosition -= offset;\r\n\t\t}\r\n\t\tscrollStartPosition = Math.max(0, scrollStartPosition);\r\n\r\n\t\tconst pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\r\n\t\tconst newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\r\n\t\tconst newScrollLength = dimensions.scrollLength;\r\n\r\n\t\treturn {\r\n\t\t\tstartIndex: pageInfo.startIndex,\r\n\t\t\tendIndex: pageInfo.endIndex,\r\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer,\r\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer,\r\n\t\t\tpadding: Math.round(newPadding),\r\n\t\t\tscrollLength: Math.round(newScrollLength),\r\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition,\r\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition,\r\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition\r\n\t\t};\r\n\t}\r\n}\r\n\r\n@NgModule({\r\n\texports: [VirtualScrollerComponent],\r\n\tdeclarations: [VirtualScrollerComponent],\r\n\timports: [CommonModule],\r\n\tproviders: [\r\n\t\t{\r\n\t\t\tprovide: 'virtual-scroller-default-options',\r\n\t\t\tuseFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY\r\n\t\t}\r\n\t]\r\n})\r\nexport class VirtualScrollerModule { }","import { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\n\nexport type PepListSelectionType =\n    | 'none'\n    | 'single'\n    | 'multi';\n\nexport type PepListPagerType = 'pages' | 'scroll';\n\nexport type PepListViewType = '' | 'cards' | 'lines' | 'table'; // | 'map';\n\nexport type PepListCardSizeType = 'sm' | 'md';\n\nexport type PepListTableViewType = 'compact' | 'regular';\n\nexport interface IPepListItemClickEvent {\n    source: ObjectsDataRow;\n    viewType: PepListViewType;\n}\n\nexport class PepSelectionData {\n    selectionType: number;\n    rows: Array<any>;\n    rowTypes: Array<any>;\n}\n\nexport interface IPepListLoadItemsEvent {\n    fromIndex: number;\n    toIndex: number;\n    // updateItemsFunc: () => void; //() => any; \n}\n\nexport interface IPepListLoadPageEvent {\n    pageIndex: number;\n    pageSize: number;\n    // updatePageFunc: () => void; //() => any; \n}\n\nexport interface IPepListStartIndexChangeEvent {\n    startIndex: number;\n}\n\nexport const DEFAULT_PAGE_SIZE = 50;\n\nexport interface IPepListSortingChangeEvent {\n    sortBy: string;\n    isAsc: boolean;\n}\n","import { coerceNumberProperty } from '@angular/cdk/coercion';\nimport {\n    ChangeDetectorRef,\n    Component,\n    EventEmitter,\n    Injectable,\n    Input,\n    Output,\n} from '@angular/core';\nimport { PepLayoutService, } from '@pepperi-addons/ngx-lib';\nimport { DEFAULT_PAGE_SIZE } from './list.model';\n\nexport class IPepListPagerChangeEvent {\n    pageIndex: number;\n    previousPageIndex: number;\n    pageSize: number;\n    length: number;\n}\n\n@Component({\n    selector: 'pep-list-pager',\n    templateUrl: './list-pager.component.html',\n    styleUrls: ['./list-pager.component.scss'],\n})\n@Injectable()\nexport class PepListPagerComponent {\n    @Input() disabled = false;\n    private _pageIndex = 0;\n    @Input()\n    set pageIndex(value: number) {\n        this.setPageIndex(value);\n    }\n    get pageIndex(): number {\n        return this._pageIndex;\n    }\n\n    @Input() length = 0;\n    @Input() pageSize = DEFAULT_PAGE_SIZE;\n\n    @Output()\n    pagerChange: EventEmitter<IPepListPagerChangeEvent> = new EventEmitter<IPepListPagerChangeEvent>();\n\n    constructor(\n        private _changeDetectorRef: ChangeDetectorRef,\n        public layoutService: PepLayoutService) { }\n\n    nextPage(): void {\n        if (!this.hasNextPage()) {\n            return;\n        }\n\n        this.setPageIndex(this.pageIndex + 1);\n    }\n\n    previousPage(): void {\n        if (!this.hasPreviousPage()) {\n            return;\n        }\n\n        this.setPageIndex(this.pageIndex - 1);\n    }\n\n    firstPage(): void {\n        if (!this.hasPreviousPage()) {\n            return;\n        }\n\n        this.setPageIndex(0);\n    }\n\n    lastPage(): void {\n        if (!this.hasNextPage()) {\n            return;\n        }\n\n        this.setPageIndex(this.getNumberOfPages() - 1);\n    }\n\n    hasPreviousPage(): boolean {\n        return this.pageIndex >= 1 && this.pageSize != 0;\n    }\n\n    hasNextPage(): boolean {\n        const maxPageIndex = this.getNumberOfPages() - 1;\n        return this.pageIndex < maxPageIndex && this.pageSize != 0;\n    }\n\n    getNumberOfPages(): number {\n        if (!this.pageSize) {\n            return 0;\n        }\n\n        return Math.ceil(this.length / this.pageSize);\n    }\n\n    /** Checks whether the buttons for going forwards should be disabled. */\n    _nextButtonsDisabled() {\n        return this.disabled || !this.hasNextPage();\n    }\n\n    /** Checks whether the buttons for going backwards should be disabled. */\n    _previousButtonsDisabled() {\n        return this.disabled || !this.hasPreviousPage();\n    }\n\n    onValueChange(value: string) {\n        const pageNumber = coerceNumberProperty(value);\n        this.setPageIndex(pageNumber - 1); // - 1 to convert number into index.\n    }\n\n    private setPageIndex(newIndex: number) {\n        const previousPageIndex = this.pageIndex;\n\n        if (newIndex >= 0 && newIndex < this.getNumberOfPages()) {\n            this._pageIndex = newIndex;\n        } else {\n            this._pageIndex = 0;\n        }\n\n        if (this.pageIndex !== previousPageIndex) {\n            this._emitChangeEvent(previousPageIndex);\n        }\n    }\n\n    /** Emits an event notifying that a change of the paginator's properties has been triggered. */\n    private _emitChangeEvent(previousPageIndex: number) {\n        this.pagerChange.emit({\n            previousPageIndex,\n            pageIndex: this.pageIndex,\n            pageSize: this.pageSize,\n            length: this.length,\n        });\n    }\n}\n","<div class=\"pager-container body-sm\">\n    <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_PAGE' | translate }}</span>\n    <pep-textbox pepAutoWidth class=\"page-index pep-spacing-element\" [key]=\"'pageIndex'\" [type]=\"'int'\"\n        [disabled]=\"disabled\" [xAlignment]=\"'center'\" [renderTitle]=\"false\" [renderError]=\"false\" [renderSymbol]=\"false\"\n        [value]=\"pageIndex + 1\" [minValue]=\"1\" [maxValue]=\"this.getNumberOfPages()\"\n        [maxFieldCharacters]=\"6\" [mandatory]=\"true\" (valueChange)=\"onValueChange($event)\">\n    </pep-textbox>\n    <span class=\"pep-spacing-element\">{{ 'LIST.PAGER_OUT_OF' | translate }}</span>\n    <span class=\"pep-spacing-element\">{{ getNumberOfPages() }}</span>\n    <button mat-button [disabled]=\"disabled || _previousButtonsDisabled()\"\n        [ngClass]=\"{ disabled: disabled || _previousButtonsDisabled() }\"\n        class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"previousPage()\"\n        [title]=\"('LIST.PAGER_PREVIOUS' | translate)\">\n        <mat-icon>\n            <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_right' : 'arrow_left'\"></pep-icon>\n        </mat-icon>\n    </button>\n    <button mat-button [disabled]=\"disabled || _nextButtonsDisabled()\"\n        [ngClass]=\"{ disabled: disabled || _nextButtonsDisabled() }\"\n        class=\"pep-button icon-button pep-spacing-element sm weak\" pepRtlDirection pepMenuBlur (click)=\"nextPage()\"\n        [title]=\"('LIST.PAGER_NEXT' | translate)\">\n        <mat-icon>\n            <pep-icon [name]=\"layoutService.isRtl() ? 'arrow_left' : 'arrow_right'\"></pep-icon>\n        </mat-icon>\n    </button>\n</div>","import {\n    Component,\n    Input,\n    Output,\n    EventEmitter,\n    OnInit,\n    Renderer2,\n    ViewChild,\n    ElementRef,\n    ChangeDetectorRef,\n    OnDestroy,\n    OnChanges,\n    NgZone,\n} from '@angular/core';\nimport { delay } from 'rxjs/operators';\nimport {\n    PepLayoutService,\n    PepScreenSizeType,\n    PepSessionService,\n    UIControl,\n    UIControlField,\n    FIELD_TYPE,\n    ObjectsDataRow,\n} from '@pepperi-addons/ngx-lib';\nimport {\n    IPepFormFieldValueChangeEvent,\n    IPepFormFieldClickEvent,\n} from '@pepperi-addons/ngx-lib/form';\n\nimport { VirtualScrollerComponent, IPageInfo } from './virtual-scroller';\n\nimport {\n    IPepListLoadItemsEvent,\n    IPepListSortingChangeEvent,\n    IPepListItemClickEvent,\n    PepListSelectionType,\n    PepListViewType,\n    PepSelectionData,\n    PepListPagerType,\n    IPepListLoadPageEvent,\n    DEFAULT_PAGE_SIZE,\n    IPepListStartIndexChangeEvent,\n    PepListCardSizeType,\n    PepListTableViewType,\n} from './list.model';\nimport {\n    IPepListPagerChangeEvent,\n    PepListPagerComponent,\n} from './list-pager.component';\n\nimport * as tween from '@tweenjs/tween.js';\n\n@Component({\n    selector: 'pep-list',\n    templateUrl: './list.component.html',\n    styleUrls: ['./list.component.scss'],\n    host: {\n        '(window:resize)': 'onWinResize($event)',\n    },\n    // changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PepListComponent implements OnInit, OnChanges, OnDestroy {\n    static TOP_ITEMS_DEFAULT = 100;\n    static TOP_ITEMS_TABLE = 100;\n    static TOP_ITEMS_THUMBNAILS = 100;\n    static TOP_ITEMS_ARRAY = 2500;\n\n    static SELECTED_ITEMS_STATE_KEY = 'SelectedItems';\n    static UN_SELECTED_ITEMS_STATE_KEY = 'UnSelectedItems';\n    static ALL_SELECTED_STATE_KEY = 'AllSelected';\n    static SORT_BY_STATE_KEY = 'SortBy';\n    static ASCENDING_STATE_KEY = 'IsAscending';\n\n    static MINIMUM_COLUMN_WIDTH = 48;\n\n    @Input() noDataFoundMsg: string = null;\n    @Input() selectionTypeForActions: PepListSelectionType = 'multi';\n    @Input() showCardSelection = false;\n    @Input() hideAllSelectionInMulti = false;\n\n    @Input() cardSize: PepListCardSizeType = 'md';\n    @Input() tableViewType: PepListTableViewType = 'regular';\n    \n    private _viewType: PepListViewType = '';\n    @Input()\n    set viewType(value: PepListViewType) {\n        this._viewType = value;\n        this.isTable = value === 'table';\n    }\n    get viewType(): PepListViewType {\n        return this._viewType;\n    }\n\n    @Input() firstFieldAsLink = false;\n    @Input() supportSorting = true;\n    @Input() supportResizing = true;\n\n    private _parentScroll: Element | Window = null;\n    @Input()\n    set parentScroll(value: Element | Window) {\n        this._parentScroll = value;\n    }\n    get parentScroll(): Element | Window {\n        return this._parentScroll;\n    }\n\n    @Input() disabled = false;\n\n    private _lockEvents = false;\n    @Input()\n    set lockEvents(value: boolean) {\n        this._lockEvents = value;\n\n        if (this._lockEvents) {\n            this.renderer.addClass(this.hostElement.nativeElement, 'lock-events');\n        } else {\n            this.renderer.removeClass(this.hostElement.nativeElement, 'lock-events');\n        }\n    }\n    get lockEvents(): boolean {\n        return this._lockEvents;\n    }\n\n    @Input() lockItemInnerEvents = false;\n    @Input() printMode = false;\n    @Input() isReport = false;\n    @Input() zebraStripes = false;\n    @Input() totalsRow = [];\n    @Input() pagerType: PepListPagerType = 'scroll';\n    @Input() pageSize: number = DEFAULT_PAGE_SIZE;\n    @Input() pageIndex = 0;\n    // @Input() startIndex = 0;\n\n    @Input() bufferAmount = 0;\n    @Input() scrollAnimationTime = 500;\n    @Input() scrollDebounceTime = 0;\n    @Input() scrollThrottlingTime = 0;\n\n    private _useAsWebComponent = false;\n    @Input()\n    set useAsWebComponent(value: boolean) {\n        this._useAsWebComponent = value;\n        if (value) {\n            this.exportFunctionsOnHostElement();\n        }\n    }\n    get useAsWebComponent(): boolean {\n        return this._useAsWebComponent;\n    }\n\n    @Output()\n    itemClick: EventEmitter<IPepListItemClickEvent> = new EventEmitter<IPepListItemClickEvent>();\n\n    @Output()\n    fieldClick: EventEmitter<IPepFormFieldClickEvent> = new EventEmitter<IPepFormFieldClickEvent>();\n\n    @Output()\n    valueChange: EventEmitter<IPepFormFieldValueChangeEvent> = new EventEmitter<IPepFormFieldValueChangeEvent>();\n\n    @Output()\n    sortingChange: EventEmitter<IPepListSortingChangeEvent> = new EventEmitter<IPepListSortingChangeEvent>();\n\n    @Output()\n    selectedItemsChange: EventEmitter<number> = new EventEmitter<number>();\n\n    @Output()\n    selectedItemChange: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output()\n    selectAllClick: EventEmitter<any> = new EventEmitter<any>();\n\n    // @Output()\n    // singleActionClick: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output()\n    listLoad: EventEmitter<void> = new EventEmitter<void>();\n\n    @Output()\n    loadItems: EventEmitter<IPepListLoadItemsEvent> = new EventEmitter<IPepListLoadItemsEvent>();\n\n    @Output()\n    loadPage: EventEmitter<IPepListLoadPageEvent> = new EventEmitter<IPepListLoadPageEvent>();\n\n    @Output()\n    startIndexChange: EventEmitter<IPepListStartIndexChangeEvent> = new EventEmitter<IPepListStartIndexChangeEvent>();\n\n    @ViewChild(VirtualScrollerComponent) private virtualScroller: VirtualScrollerComponent;\n    @ViewChild('selectAllCB') selectAllCB: any;\n\n    private _layout: UIControl = null;\n    get layout(): UIControl {\n        return this._layout;\n    }\n\n    totalRows = -1;\n    isTable = false;\n    private hasColumnWidthOfTypePercentage = true;\n\n    private _items: Array<ObjectsDataRow> = null;\n    get items(): Array<ObjectsDataRow> {\n        return this._items;\n    }\n\n    private itemsCounter = 0;\n\n    currentPageItems: Array<ObjectsDataRow>;\n\n    SEPARATOR = ',';\n    isAllSelected = false;\n    selectedItems = new Map<string, string>();\n    unSelectedItems = new Map<string, string>();\n\n    private currentTween: any;\n\n    selectedItemId = '';\n    hoveredItemId = '';\n\n    private containerWidth = 0;\n    private tableScrollWidth = 0;\n\n    private _loadingItemsFromApi = false;\n    get loadingItemsFromApi() {\n        return this._loadingItemsFromApi;\n    }\n\n    screenSize: PepScreenSizeType;\n    deviceHasMouse = false;\n\n    // For resize\n    pressedColumn = '';\n    startX = 0;\n    startWidth = 0;\n    tableStartWidth = 0;\n\n    // For sorting\n    isAsc = true;\n    sortBy = '';\n    isUserSelected = false;\n    checkForChanges: any = null;\n    calculatedObjectHeight = 'auto';\n\n    constructor(\n        private hostElement: ElementRef,\n        private layoutService: PepLayoutService,\n        private sessionService: PepSessionService,\n        private cd: ChangeDetectorRef,\n        private renderer: Renderer2,\n        private zone: NgZone\n    ) {\n        // this.nativeWindow = window;\n        this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n            this.screenSize = size;\n        });\n\n        this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n            this.deviceHasMouse = deviceHasMouse;\n        });\n    }\n\n    ngOnInit(): void {\n        this.containerWidth = 0;\n        this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n    }\n\n    ngOnChanges(changes): void {\n        if (this.containerWidth <= 0) {\n            this.setContainerWidth();\n        }\n    }\n\n    ngOnDestroy(): void {\n        // if (this.valueChange) {\n        //     this.valueChange.unsubscribe();\n        // }\n\n        // if (this.loadItems) {\n        //     this.loadItems.unsubscribe();\n        // }\n\n        // if (this.loadPage) {\n        //     this.loadPage.unsubscribe();\n        // }\n\n        // if (this.sortingChange) {\n        //     this.sortingChange.unsubscribe();\n        // }\n\n        // if (this.fieldClick) {\n        //     this.fieldClick.unsubscribe();\n        // }\n\n        // if (this.itemClick) {\n        //     this.itemClick.unsubscribe();\n        // }\n\n        // if (this.listLoad) {\n        //     this.listLoad.unsubscribe();\n        // }\n\n        this.saveSortingToSession();\n    }\n\n    private getScrollingElement() {\n        return this.parentScroll ? this.parentScroll : this.virtualScroller?.contentElementRef.nativeElement.parentElement;\n    }\n\n    private scrollToTop(animate = true) {\n        const scrollingElement = this.getScrollingElement();\n        if (scrollingElement) {\n            const scrollTop = 0;\n\n            // totally disable animate\n            if (!animate || this.scrollAnimationTime === 0) {\n                if (scrollingElement instanceof Window) {\n                    window.scrollTo(0, scrollTop);\n                } else {\n                    scrollingElement.scrollTop = scrollTop;\n                }\n            } else {\n                let animationRequest;\n                const isWindow = scrollingElement instanceof Window;\n                const currentScrollTop =\n                    scrollingElement instanceof Window\n                        ? window.pageYOffset\n                        : scrollingElement.scrollTop;\n\n                if (this.currentTween !== undefined) {\n                    this.currentTween.stop();\n                }\n                this.currentTween = new tween.Tween({ scrollTop: currentScrollTop })\n                    .to({ scrollTop }, this.scrollAnimationTime)\n                    .easing(tween.Easing.Quadratic.Out)\n                    .onUpdate((data) => {\n                        if (isNaN(data.scrollTop)) {\n                            return;\n                        }\n\n                        if (isWindow) {\n                            window.scrollTo(0, data.scrollTop);\n                        } else {\n                            this.renderer.setProperty(\n                                scrollingElement,\n                                'scrollTop',\n                                data.scrollTop\n                            );\n                        }\n                    })\n                    .onStop(() => {\n                        cancelAnimationFrame(animationRequest);\n                    })\n                    .start();\n\n                const animate = (time?) => {\n                    this.currentTween.update(time);\n                    if (this.currentTween._object.scrollTop !== scrollTop) {\n                        this.zone.runOutsideAngular(() => {\n                            animationRequest = requestAnimationFrame(animate);\n                        });\n                    }\n                };\n\n                animate();\n            }\n        }\n    }\n\n    private setContainerWidth(): void {\n        if (!this.hostElement.nativeElement.parentElement) {\n            return;\n        }\n\n        const selectionCheckBoxWidth =\n            this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n        const rowHeight = 40; // the table row height (2.5rem * 16font-size).\n        const style = getComputedStyle(\n            this.hostElement.nativeElement.parentElement\n        );\n        // The container-fluid class padding left + right + border\n        const containerFluidSpacing =\n            parseInt(style.paddingLeft, 10) + parseInt(style.paddingRight, 10);\n\n        const parentContainer =\n            this.hostElement.nativeElement.parentElement.parentElement > 0\n                ? this.hostElement.nativeElement.parentElement.parentElement\n                : this.hostElement.nativeElement.parentElement;\n\n        // Calculate if vertical scroll should appear, if so set the scroll width. (this.totalRows + 1) + 1 is for the header row.\n        this.tableScrollWidth = parentContainer.clientHeight < rowHeight * (this.totalRows + 1)\n            ? this.layoutService.getScrollbarWidth()\n            : 0;\n\n        // The selectionCheckBoxWidth width + containerFluidSpacing + this.tableScrollWidth.\n        const rowHeaderWidthToSub =\n            containerFluidSpacing + selectionCheckBoxWidth + this.tableScrollWidth;\n        this.containerWidth = parentContainer.offsetWidth - rowHeaderWidthToSub;\n    }\n\n    private saveSortingToSession(): void {\n        this.sessionService.setObject(\n            PepListComponent.SORT_BY_STATE_KEY,\n            this.sortBy\n        );\n        this.sessionService.setObject(\n            PepListComponent.ASCENDING_STATE_KEY,\n            this.isAsc\n        );\n    }\n\n    private getTopItems(): number {\n        return this.isTable\n            ? PepListComponent.TOP_ITEMS_TABLE\n            : PepListComponent.TOP_ITEMS_THUMBNAILS;\n    }\n\n    private disableScroll(disable: boolean) {\n        if (disable) {\n            this.renderer.addClass(this.hostElement.nativeElement.parentElement, 'lock-events');\n        } else {\n            this.renderer.removeClass(this.hostElement.nativeElement.parentElement, 'lock-events');\n        }\n    }\n\n    private toggleLoadingItemsFropApi(loadingItemsFromApi: boolean): void {\n        this._loadingItemsFromApi = loadingItemsFromApi;\n\n        // this.disableScroll(loadingItemsFromApi);\n    }\n\n    private updateCurrentPageItems(startIndex: number, endIndex: number): void {\n        this.currentPageItems = this.items.slice(startIndex, endIndex);\n    }\n\n    private setSelectionItems(\n        itemId: string,\n        uniqItemId: string,\n        isChecked: boolean\n    ): void {\n        // Set selected item checkbox\n        if (this.isAllSelected) {\n            if (isChecked) {\n                this.unSelectedItems.delete(itemId);\n                this.selectedItems.set(itemId, uniqItemId);\n            } else {\n                this.selectedItems.delete(itemId);\n                this.unSelectedItems.set(itemId, uniqItemId);\n            }\n        } else {\n            if (isChecked) {\n                this.unSelectedItems.delete(itemId);\n                this.selectedItems.set(itemId, uniqItemId);\n            } else {\n                this.selectedItems.delete(itemId);\n                this.unSelectedItems.set(itemId, uniqItemId);\n            }\n        }\n    }\n\n    private getUniqItemId(itemId: string, itemType = ''): string {\n        return itemId + this.SEPARATOR + itemType;\n    }\n\n    private setLayout(): void {\n        if (\n            this.totalRows === 0 ||\n            !this._layout ||\n            !this._layout.ControlFields ||\n            this._layout.ControlFields.length === 0\n        ) {\n            return;\n        }\n\n        this._layout.ControlFields.forEach((cf) => {\n            if (cf.ColumnWidth === 0) {\n                cf.ColumnWidth = 10;\n            }\n\n            if (\n                this.isTable &&\n                (cf.FieldType === FIELD_TYPE.Image ||\n                    // cf.FieldType === FIELD_TYPE.Indicators || ???\n                    cf.FieldType === FIELD_TYPE.Signature ||\n                    cf.FieldType === FIELD_TYPE.NumberIntegerQuantitySelector ||\n                    cf.FieldType === FIELD_TYPE.NumberRealQuantitySelector ||\n                    cf.FieldType === FIELD_TYPE.NumberIntegerForMatrix ||\n                    cf.FieldType === FIELD_TYPE.NumberRealForMatrix ||\n                    cf.FieldType === FIELD_TYPE.Package ||\n                    cf.ApiName === 'UnitsQuantity' ||\n                    cf.ApiName === 'QuantitySelector')\n            ) {\n                cf.Layout.XAlignment = 3;\n            }\n        });\n\n        if (!this.cd['destroyed']) {\n            this.cd.detectChanges();\n        }\n\n        // Set the columns width.\n        if (this.containerWidth <= 0) {\n            this.setContainerWidth();\n        }\n\n        this.calcColumnsWidth();\n        this.checkForChanges = new Date().getTime();\n    }\n\n    private calcColumnsWidth(): void {\n        const fixedMultiple = 3.78; // for converting em to pixel.\n        const length = this._layout.ControlFields.length;\n        const selectionCheckBoxWidth =\n            this.selectionTypeForActions === 'multi' ? 44 : 0;\n\n        // Is table AND there is at least one column of width type of percentage.\n        if (this.isTable) {\n            if (this._layout && this._layout.ControlFields) {\n                this.hasColumnWidthOfTypePercentage =\n                    this._layout.ControlFields.filter(\n                        (cf) => cf.ColumnWidthType === 1\n                    ).length === 0;\n            }\n        }\n\n        // If the columns size is fixed and the total is small then the container change it to percentage.\n        if (!this.hasColumnWidthOfTypePercentage) {\n            const totalFixedColsWidth = this._layout.ControlFields.map(\n                (cf) => cf.ColumnWidth * fixedMultiple\n            ).reduce((sum, current) => sum + current);\n\n            if (window.innerWidth > totalFixedColsWidth) {\n                this.hasColumnWidthOfTypePercentage = true;\n            }\n        }\n\n        let totalCalcColsWidth = 0;\n\n        // Calc by percentage\n        if (this.hasColumnWidthOfTypePercentage) {\n            const totalColsWidth: number = this._layout.ControlFields.map(\n                (cf) => cf.ColumnWidth\n            ).reduce((sum, current) => sum + current);\n\n            for (let index = 0; index < length; index++) {\n                const uiControlField: UIControlField = this._layout.ControlFields[index];\n                const calcColumnWidthPercentage = (100 / totalColsWidth) * uiControlField.ColumnWidth;\n\n                uiControlField.calcColumnWidth = Math.floor((this.containerWidth * calcColumnWidthPercentage) / 100);\n\n                if (index === length - 1) {\n                    uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + totalCalcColsWidth + 'px)'; // For 100%\n                } else {\n                    uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n                    totalCalcColsWidth += uiControlField.calcColumnWidth;\n                }\n            }\n\n            this.renderer.setStyle(\n                this.hostElement.nativeElement,\n                'width',\n                'inherit'\n            );\n        } else {\n            for (let index = 0; index < length; index++) {\n                const uiControlField: UIControlField = this._layout\n                    .ControlFields[index];\n                const currentFixedWidth = Math.floor(\n                    uiControlField.ColumnWidth * fixedMultiple\n                );\n\n                if (index === length - 1) {\n                    uiControlField.calcTitleColumnWidthString = currentFixedWidth + 'px';\n                    uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n                } else {\n                    uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = currentFixedWidth + 'px';\n                }\n\n                totalCalcColsWidth += currentFixedWidth;\n            }\n\n            this.renderer.setStyle(\n                this.hostElement.nativeElement,\n                'width',\n                totalCalcColsWidth + selectionCheckBoxWidth + 'px'\n            );\n        }\n    }\n\n    private calcObjectHeight() {\n        setTimeout(() => {\n            if (this.virtualScroller) {\n                const content = this.virtualScroller.getContent();\n                console.log(`content.children.length: ${content.children.length}`);\n\n                if (content.children.length > 0) {\n                    const rect = this.virtualScroller.getElementSize(content.children[0]);\n                    this.calculatedObjectHeight = rect.height + 'px';\n                    console.log(`this.calculatedObjectHeight: ${this.calculatedObjectHeight}`);\n                }\n            }\n            this.disableScroll(false);\n        }, 1000);\n    }\n\n    private initResizeData(): void {\n        this.startX = 0;\n        this.startWidth = 0;\n        this.tableStartWidth = 0;\n        this.pressedColumn = '';\n    }\n\n    private getParent(el, parentSelector): any {\n        // If no parentSelector defined will bubble up all the way to *document*\n        if (parentSelector === undefined) {\n            parentSelector = document;\n        }\n        const parent = [];\n        let p = el.parentNode;\n\n        while (\n            p &&\n            p.className !== '' &&\n            p.className.indexOf(parentSelector) === -1 &&\n            parentSelector !== document\n        ) {\n            const o = p;\n            p = o.parentNode;\n        }\n        if (p.className.indexOf(parentSelector) > -1) {\n            parent.push(p); // Push that parentSelector you wanted to stop at\n        }\n        return parent;\n    }\n\n    private cleanItems(): void {\n        this.itemsCounter = 0;\n        this._items =\n            this.totalRows > 0 ? Array<ObjectsDataRow>(this.totalRows) : [];\n        this.currentPageItems = [];\n        this.calculatedObjectHeight = 'auto';\n    }\n\n    private initVariablesFromSession(items: ObjectsDataRow[]): void {\n        const selectedItemsObject: Array<any> = this.sessionService.getObject<\n            Array<any>\n        >(PepListComponent.SELECTED_ITEMS_STATE_KEY);\n        const selectedItemsFromMap: Map<string, string> =\n            selectedItemsObject && selectedItemsObject.length > 0\n                ? new Map(selectedItemsObject)\n                : null;\n        if (\n            selectedItemsFromMap != null &&\n            typeof selectedItemsFromMap.size !== 'undefined' &&\n            selectedItemsFromMap.size > 0\n        ) {\n            this.selectedItems = selectedItemsFromMap;\n            this.sessionService.removeObject(\n                PepListComponent.SELECTED_ITEMS_STATE_KEY\n            );\n        } else {\n            this.selectedItems.clear();\n        }\n\n        const unSelectedItemsObject: Array<any> = this.sessionService.getObject<\n            Array<any>\n        >(PepListComponent.UN_SELECTED_ITEMS_STATE_KEY);\n        const unSelectedItemsMap: Map<string, string> =\n            unSelectedItemsObject && unSelectedItemsObject.length > 0\n                ? new Map(unSelectedItemsObject)\n                : null;\n        if (\n            unSelectedItemsMap != null &&\n            typeof unSelectedItemsMap.size !== 'undefined' &&\n            unSelectedItemsMap.size > 0\n        ) {\n            this.unSelectedItems = unSelectedItemsMap;\n            this.sessionService.removeObject(\n                PepListComponent.UN_SELECTED_ITEMS_STATE_KEY\n            );\n        } else {\n            this.unSelectedItems.clear();\n        }\n\n        const isAllSelected = this.sessionService.getObject(\n            PepListComponent.ALL_SELECTED_STATE_KEY\n        );\n        if (isAllSelected != null) {\n            this.isAllSelected = isAllSelected && this.getIsAllSelected(items);\n            this.sessionService.removeObject(\n                PepListComponent.ALL_SELECTED_STATE_KEY\n            );\n        } else {\n            this.isAllSelected = false;\n        }\n\n        const sortBy = this.sessionService.getObject(\n            PepListComponent.SORT_BY_STATE_KEY\n        );\n        if (sortBy && sortBy !== '') {\n            this.sortBy = sortBy;\n            this.sessionService.removeObject(\n                PepListComponent.SORT_BY_STATE_KEY\n            );\n        } else {\n            this.sortBy = '';\n        }\n\n        const isAsc = this.sessionService.getObject(\n            PepListComponent.ASCENDING_STATE_KEY\n        );\n        if (isAsc != null) {\n            this.isAsc = isAsc;\n            this.sessionService.removeObject(\n                PepListComponent.ASCENDING_STATE_KEY\n            );\n        } else {\n            this.isAsc = true;\n        }\n    }\n\n    private getIsAllSelected(items: Array<ObjectsDataRow>): boolean {\n        let result = true;\n\n        if (this.selectedItems?.size > 0 && items?.length > 0) {\n            for (const item of items) {\n                if (!(item && this.selectedItems.has(item?.UID.toString()))) {\n                    result = false;\n                    break;\n                }\n            }\n        } else {\n            result = false;\n        }\n\n        return result;\n    }\n\n    private getNumberOfStartItems(): number {\n        let numberOfStartItems = 20;\n\n        if (\n            this.screenSize === PepScreenSizeType.XL ||\n            this.screenSize === PepScreenSizeType.LG\n        ) {\n            numberOfStartItems = this.isTable ? 50 : 40;\n        } else if (this.screenSize === PepScreenSizeType.MD) {\n            numberOfStartItems = this.isTable ? 30 : 20;\n        } else if (this.screenSize === PepScreenSizeType.SM) {\n            numberOfStartItems = this.isTable ? 20 : 10;\n        } else if (this.screenSize === PepScreenSizeType.XS) {\n            numberOfStartItems = this.isTable ? 15 : 5;\n        }\n\n        return numberOfStartItems;\n    }\n\n    private setItemClicked(\n        itemId,\n        isSelectableForActions: boolean,\n        itemType: string,\n        isChecked: boolean\n    ): void {\n        const uniqItemId = this.getUniqItemId(itemId, itemType);\n\n        // select the selected item.\n        if (isChecked) {\n            // Set seleted item\n            this.selectedItemId = uniqItemId;\n        } else {\n            if (this.selectedItemId === uniqItemId) {\n                this.selectedItemId = '';\n            }\n        }\n\n        if (this.selectionTypeForActions === 'single') {\n            this.selectedItemsChange.emit(\n                this.selectedItemId.length === 0 ? 0 : 1\n            );\n        } else if (this.selectionTypeForActions === 'multi') {\n            if (isSelectableForActions) {\n                this.setSelectionItems(itemId, uniqItemId, isChecked);\n\n                const currentList = this.isAllSelected\n                    ? this.unSelectedItems\n                    : this.selectedItems;\n                const currentListCount = this.isAllSelected\n                    ? this.totalRows - currentList.size\n                    : currentList.size;\n                this.selectedItemsChange.emit(currentListCount);\n            }\n        }\n\n        // Raise selected item change event\n        if (this.selectionTypeForActions !== 'none') {\n            this.selectedItemChange.emit({\n                id: itemId,\n                selected: isChecked,\n            });\n        }\n    }\n\n    private exportFunctionsOnHostElement() {\n        // This is for web component usage for use those functions.\n        this.hostElement.nativeElement.clear = this.clear.bind(this);\n        this.hostElement.nativeElement.initListData = this.initListData.bind(\n            this\n        );\n        this.hostElement.nativeElement.updateItems = this.updateItems.bind(\n            this\n        );\n        this.hostElement.nativeElement.updatePage = this.updatePage.bind(this);\n        this.hostElement.nativeElement.updateItem = this.updateItem.bind(this);\n    }\n\n    // For refresh the UI when change the is selectable for action on item.\n    getisItemDisabled(item: ObjectsDataRow): boolean {\n        return this.printMode || this.lockItemInnerEvents || (item && !item.IsSelectableForActions)\n    }\n\n    getIsAllSelectedForActions(): boolean {\n        let res = false;\n\n        if (this.isAllSelected) {\n            if (this.unSelectedItems.size === 0) {\n                res = true;\n            }\n        } else {\n            if (this.virtualScroller?.viewPortItems) {\n                if (this.selectedItems.size === this.totalRows) {\n                    res = this.getIsAllSelected(this.virtualScroller.viewPortItems);\n                } else if (this.selectedItems.size < this.totalRows) {\n                    for (const item of this.virtualScroller.viewPortItems) {\n                        res =\n                            item && this.selectedItems.has(item?.UID.toString());\n\n                        if (!res) {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n\n        return res;\n    }\n\n    setIsAllSelected(isChecked: boolean): void {\n        if (this.selectionTypeForActions === 'multi') {\n            this.selectAllCB.checked = isChecked;\n            this.isAllSelected = isChecked;\n        }\n    }\n\n    selectAllItemsForActions(e: any): void {\n        // For material checkbox || radio.\n        const isChecked = e.source.checked;\n\n        // Indeterminate mode\n        let isIndeterminate = false;\n        const currentList = this.isAllSelected\n            ? this.unSelectedItems\n            : this.selectedItems;\n        if (currentList.size > 0) {\n            isIndeterminate = true;\n            this.isAllSelected = false;\n            this.selectedItemsChange.emit(0);\n            e.source.checked = false;\n        }\n\n        this.selectedItems.clear();\n        this.unSelectedItems.clear();\n\n        if (!isIndeterminate) {\n            this.isAllSelected = isChecked;\n            this.selectAllClick.emit(isChecked);\n\n            if (this.selectionTypeForActions === 'multi') {\n                if (!isChecked) {\n                    this.selectedItemsChange.emit(0);\n                    this.selectedItemId = '';\n                } else {\n                    const filteredItems = this.items.filter(\n                        (item) => item && item.IsSelectableForActions\n                    );\n                    this.selectedItemsChange.emit(filteredItems.length);\n                }\n            }\n        } else {\n            // Remove all\n            if (this.selectionTypeForActions === 'multi') {\n                this.selectAllClick.emit(false);\n            }\n        }\n    }\n\n    raiseStartIndexChange(startIndex = 0) {\n        // this.startIndex = startIndex;\n        this.startIndexChange.emit({ startIndex });\n    }\n\n    getIsItemSelected(item: ObjectsDataRow): boolean {\n        let isSelected = false;\n\n        if (item) {\n            if (this.selectionTypeForActions === 'single') {\n                isSelected = this.selectedItemId === this.getUniqItemId(item.UID, item.Type.toString());\n            } else if (this.selectionTypeForActions === 'multi') {\n                if (item.IsSelectableForActions) {\n                    isSelected = (this.isAllSelected && !this.unSelectedItems.has(item.UID)) || this.selectedItems.has(item.UID);\n                }\n            }\n        }\n\n        return isSelected;\n    }\n\n    selectItemForActions(\n        e: any,\n        itemId: string,\n        isSelectableForActions: boolean,\n        itemType = ''\n    ): void {\n        // For material checkbox || radio.\n        const isChecked = e.source.checked;\n        this.setItemClicked(\n            itemId,\n            isSelectableForActions,\n            itemType,\n            isChecked\n        );\n    }\n\n    itemClicked(e: any, item: ObjectsDataRow): void {\n        // Set seleted item\n        const itemId = item?.UID.toString();\n        const itemType = item?.Type.toString();\n        let isChecked = false;\n\n        if (item && item.IsSelectableForActions) {\n            this.selectedItemId = this.getUniqItemId(itemId, itemType);\n            isChecked = true;\n        }\n\n        if (this.isTable) {\n            if (this.selectionTypeForActions === 'single') {\n                this.setItemClicked(\n                    itemId,\n                    item.IsSelectableForActions,\n                    itemType,\n                    isChecked\n                );\n            } else if (this.selectionTypeForActions === 'none') {\n                // Just mark the row as highlighted\n                this.setItemClicked(\n                    itemId,\n                    item.IsSelectableForActions,\n                    itemType,\n                    true\n                );\n            }\n        } else {\n            if (this.disabled) {\n                return;\n            }\n        }\n\n        this.itemClick.emit({ source: item, viewType: this.viewType });\n    }\n\n    onTableRowMouseEnter(event: any, itemId: string, itemType: string): void {\n        if (!this.deviceHasMouse) {\n            return;\n        }\n\n        const uniqItemId = this.getUniqItemId(itemId, itemType);\n        this.hoveredItemId = uniqItemId;\n    }\n\n    onTableRowMouseLeave(event: any, itemId: string, itemType: string): void {\n        this.hoveredItemId = '';\n    }\n\n    onCardMouseEnter(event: any, itemId: string, itemType: string): void {\n        if (!this.deviceHasMouse) {\n            return;\n        }\n\n        const uniqItemId = this.getUniqItemId(itemId, itemType);\n        this.hoveredItemId = uniqItemId;\n    }\n\n    onCardMouseLeave(event: any, itemId: string, itemType: string): void {\n        this.hoveredItemId = '';\n    }\n\n    // trackByFunc(index: number, item: ObjectsDataRow): any {\n    //     return item && item?.UID ? item?.UID : index;\n    //     // let res: string = \"\";\n\n    //     // if (item && item?.UID) {\n    //     //    res = item?.UID + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n    //     // }\n    //     // else {\n    //     //    res = index + \"_\" + this.listType + \"_\" + (this.isTable ? \"Table\" : \"Thumbnails\");\n    //     // }\n\n    //     // return res;\n    // }\n\n    clear(): void {\n        this.cleanItems();\n        this._layout = null;\n    }\n\n    setSelectedIds(selectedIds: string[], items = null): void {\n        this.selectedItems.clear();\n        this.isAllSelected = false;\n\n        if (selectedIds) {\n            // for (let i = 0; i < selected.length; i++) {\n            for (const selectedId of selectedIds) {\n                const tmp = selectedId.split(this.SEPARATOR);\n\n                if (tmp && tmp.length > 0) {\n                    const itemId = tmp[0];\n                    const itemType = tmp.length > 1 ? tmp[1] : '';\n\n                    this.selectedItems.set(\n                        itemId,\n                        this.getUniqItemId(itemId, itemType)\n                    );\n                }\n            }\n\n            this.isAllSelected = this.getIsAllSelected(items ? items : this.virtualScroller?.viewPortItems);\n            this.setSelectionDataInSession();\n        }\n\n        this.refresh();\n    }\n\n    setSelectionDataInSession(): void {\n        if (this.selectedItems.size > 0) {\n            this.sessionService.setObject(\n                PepListComponent.SELECTED_ITEMS_STATE_KEY,\n                JSON.stringify([...this.selectedItems])\n            );\n        }\n\n        if (this.unSelectedItems.size > 0) {\n            this.sessionService.setObject(\n                PepListComponent.UN_SELECTED_ITEMS_STATE_KEY,\n                JSON.stringify([...this.unSelectedItems])\n            );\n        }\n\n        this.sessionService.setObject(\n            PepListComponent.ALL_SELECTED_STATE_KEY,\n            this.isAllSelected\n        );\n    }\n\n    initListData(\n        layout: UIControl,\n        totalRows: number,\n        items: ObjectsDataRow[]\n    ): void {\n        this.initVariablesFromSession(items);\n        const currentList = this.isAllSelected\n            ? this.unSelectedItems\n            : this.selectedItems;\n        const currentListCount = this.isAllSelected\n            ? this.totalRows - currentList.size\n            : currentList.size;\n        this.selectedItemsChange.emit(currentListCount);\n\n        this._layout = layout;\n        this.selectedItemId = '';\n        this.totalRows = totalRows;\n\n        this.scrollToTop(false);\n        this.cleanItems();\n        this.disableScroll(true);\n\n        if (items) {\n            if (this.pagerType === 'pages') {\n                // If page index out of bounds - init to 0.\n                const numberOfPages = Math.ceil(totalRows / this.pageSize);\n\n                if (this.pageIndex >= numberOfPages) {\n                    this.pageIndex = 0;\n                }\n\n                this.updatePage(items, {\n                    pageIndex: this.pageIndex,\n                    pageSize: this.pageSize,\n                });\n\n                this.disableScroll(false);\n            } else {\n                const numberOfStartItems = this.getNumberOfStartItems();\n                const event = {\n                    fromIndex: 0,\n                    toIndex: numberOfStartItems,\n                };\n                this.updateItems(items, event);\n                \n                if (this.virtualScroller) {\n                    this.refresh(() => {\n                        this.calcObjectHeight();\n                    });\n                } else {\n                    this.calcObjectHeight();\n                }\n            }\n        }\n\n        this.setLayout();\n\n        // setTimeout(() => {\n            \n            this.onListLoad();\n        // }, 0);\n    }\n\n    updateItems(\n        items: ObjectsDataRow[],\n        event: IPepListLoadItemsEvent = null\n    ): void {\n        if (!event) {\n            return; // Event isn't supplied.\n        }\n\n        // Clean array\n        if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n            this.cleanItems();\n        }\n\n        const startIndex = event.fromIndex ?? 0;\n\n        for (let i = 0; i < items.length; i++) {\n            if (!this.items[i + startIndex]) {\n                this.items[i + startIndex] = items[i];\n                this.itemsCounter += 1;\n            }\n        }\n\n        this.toggleLoadingItemsFropApi(false);\n    }\n\n    updatePage(items: ObjectsDataRow[], event: IPepListLoadPageEvent): void {\n        if (!event) {\n            return; // Event isn't supplied.\n        }\n\n        // Clean array\n        if (this.itemsCounter + items.length > PepListComponent.TOP_ITEMS_ARRAY) {\n            this.cleanItems();\n        }\n\n        // const loadInChunks = this.itemsCounter === 0;\n        const startIndex = Math.min(event.pageIndex * event.pageSize, this.totalRows);\n        const endIndex = Math.min(startIndex + event.pageSize, this.totalRows);\n\n        for (let i = 0; i < items.length; i++) {\n            if (!this.items[i + startIndex]) {\n                this.items[i + startIndex] = items[i];\n                this.itemsCounter += 1;\n            }\n        }\n\n        this.updateCurrentPageItems(startIndex, endIndex);\n        this.toggleLoadingItemsFropApi(false);\n    }\n\n    updateItem(data: ObjectsDataRow): void {\n        const index = this.items.findIndex((i) => i && i?.UID === data?.UID);\n        if (index >= 0 && index < this.items.length) {\n            this.updateItemProperties(this.items[index], data);\n        }\n    }\n\n    scrollToIndex(index: number, alignToBeginning = true, additionalOffset = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined) {\n        this.virtualScroller?.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\n    }\n\n    updateItemProperties(itemToUpdate: ObjectsDataRow, data: ObjectsDataRow) {\n        Object.assign(itemToUpdate, data);\n    }\n\n    getSelectedItemsData(isForEdit = false): PepSelectionData {\n        const res = new PepSelectionData();\n\n        let selectionType = 1;\n        const items = [];\n        const itemTypes = [];\n\n        if (this.selectionTypeForActions === 'single') {\n            if (this.selectedItemId.length > 0) {\n                const tmp = this.selectedItemId.split(this.SEPARATOR);\n                items.push(tmp[0]);\n                itemTypes.push(tmp[1]);\n            }\n        } else if (this.selectionTypeForActions === 'multi') {\n            let currentList = [];\n\n            // For edit - only the selected items.\n            if (isForEdit) {\n                if (!this.isAllSelected) {\n                    currentList = Array.from(this.selectedItems.values());\n                } else {\n                    // Get the id's of the items that not founded in unSelectedItems.\n                    this.items.forEach((item) => {\n                        if (\n                            item &&\n                            !this.unSelectedItems.has(item?.UID.toString())\n                        ) {\n                            currentList.push(\n                                this.getUniqItemId(\n                                    item?.UID.toString(),\n                                    item?.Type.toString()\n                                )\n                            );\n                        }\n                    });\n                }\n            } else {\n                // For delete - can be the unselected with select_all functionality.\n                currentList = Array.from(\n                    this.isAllSelected\n                        ? this.unSelectedItems.values()\n                        : this.selectedItems.values()\n                );\n                selectionType = this.isAllSelected ? 0 : 1;\n            }\n\n            currentList.forEach((item) => {\n                const tmp = item.split(this.SEPARATOR);\n\n                if (tmp.length === 2) {\n                    items.push(tmp[0]);\n                    itemTypes.push(tmp[1]);\n                }\n            });\n\n        }\n\n        res.selectionType = selectionType;\n        res.rows = items;\n        res.rowTypes = itemTypes;\n\n        return res;\n    }\n\n    getIsItemEditable(uid: string): boolean {\n        const item = this.items.filter((x) => x?.UID.toString() === uid);\n        if (item.length > 0) {\n            return item[0].IsEditable;\n        } else {\n            return false;\n        }\n    }\n\n    getItemDataByID(uid: string): ObjectsDataRow {\n        return this.items.find((item) => item?.UID.toString() === uid);\n    }\n\n    refresh(refreshCompletedCallback: () => void = undefined) {\n        this.virtualScroller?.refresh(refreshCompletedCallback);\n    }\n\n    // ---------------------------------------------------------------\n    //              Events handlers.\n    // ---------------------------------------------------------------\n\n    onWinResize(e): void {\n        this.refresh();\n\n        this.containerWidth = 0;\n        this.setLayout();\n    }\n\n    onListResizeStart(event, columnKey): void {\n        this.pressedColumn = columnKey;\n        this.startX = event.x;\n        this.startWidth = event.target.closest('.header-column').offsetWidth;\n        this.tableStartWidth = this.virtualScroller?.contentElementRef.nativeElement.offsetWidth;\n    }\n\n    onListResize(event): void {\n        if (this.pressedColumn.length > 0) {\n            let widthToAdd = this.layoutService.isRtl() ? this.startX - event.x : event.x - this.startX;\n\n            // Set the width of the column and the container of the whole columns.\n            if (this.startWidth + widthToAdd >= PepListComponent.MINIMUM_COLUMN_WIDTH || widthToAdd > 0) {\n                const length = this._layout.ControlFields.length;\n                let totalCalcColsWidth = 0;\n\n                for (let index = 0; index < length; index++) {\n                    const uiControlField: UIControlField = this._layout\n                        .ControlFields[index];\n\n                    if (index === length - 1) {\n                        // Calc the last column only in percentage type.\n                        if (this.hasColumnWidthOfTypePercentage) {\n                            const scrollWidth = this.layoutService.getScrollbarWidth();\n                            widthToAdd += scrollWidth;\n                            uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = 'calc(100% - ' + (totalCalcColsWidth + scrollWidth) + 'px)'; // For 100%\n                        } else {\n                            if (uiControlField.ApiName === this.pressedColumn) {\n                                uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n                                uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidth + 'px';\n                                uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n                            }\n                        }\n                    } else if (uiControlField.ApiName === this.pressedColumn) {\n                        uiControlField.calcColumnWidth = this.startWidth + widthToAdd;\n                        uiControlField.calcTitleColumnWidthString = uiControlField.calcColumnWidthString = uiControlField.calcColumnWidth + 'px';\n                    }\n\n                    totalCalcColsWidth += uiControlField.calcColumnWidth;\n                }\n\n                this.renderer.setStyle(\n                    this.hostElement.nativeElement,\n                    'width',\n                    this.tableStartWidth + widthToAdd + 'px'\n                );\n            }\n\n            this.checkForChanges = new Date().getTime();\n        }\n    }\n\n    onListResizeEnd(event): void {\n        if (this.pressedColumn.length > 0) {\n            if (\n                event &&\n                this.getParent(event.srcElement, 'resize-box').length > 0\n            ) {\n                this.initResizeData();\n            } else {\n                // Set timeout 0 for onListSortingChange will have the pressedColumn.\n                setTimeout(() => {\n                    this.initResizeData();\n                }, 0);\n            }\n\n            event.stopPropagation();\n        }\n    }\n\n    onListSortingChange(sortBy: string, isAsc: boolean, event = null): void {\n        if (\n            this.pressedColumn.length > 0 ||\n            (event && this.getParent(event.srcElement, 'resize-box').length > 0)\n        ) {\n            return;\n        }\n\n        if (this.sortBy !== sortBy || this.isAsc !== isAsc) {\n            this.sortBy = sortBy;\n            this.isAsc = isAsc;\n            this.saveSortingToSession();\n\n            this.sortingChange.emit({ sortBy, isAsc });\n        }\n    }\n\n    onListHeaderMouseEnter(event): void {\n        // this.headerIsInFocus = true;\n    }\n\n    onListHeaderMouseLeave(event): void {\n        // this.headerIsInFocus = false;\n        this.onListResizeEnd(event);\n        this.initResizeData();\n    }\n\n    onPagerChange(event: IPepListPagerChangeEvent): void {\n        this.pageIndex = event.pageIndex;\n\n        // Scroll to top.\n        this.scrollToTop();\n\n        const startIndex = event.pageIndex * event.pageSize;\n        const endIndex = Math.min(\n            startIndex + event.pageSize,\n            this.totalRows\n        );\n\n        let shouldGetItemsFromApi = false;\n        let index: number = startIndex;\n\n        while (!shouldGetItemsFromApi && index < endIndex) {\n            if (!this.items[index]) {\n                shouldGetItemsFromApi = true;\n            }\n            index++;\n        }\n\n        // Get bulk from api.\n        if (shouldGetItemsFromApi) {\n            if (!this.loadingItemsFromApi) {\n                this.toggleLoadingItemsFropApi(true);\n\n                this.loadPage.emit({\n                    pageIndex: event.pageIndex,\n                    pageSize: event.pageSize,\n                });\n            }\n        } else {\n            setTimeout(() => {\n                this.updateCurrentPageItems(startIndex, endIndex);\n            }, this.scrollAnimationTime);\n        }\n    }\n\n    onVirtualScrollerChange(event: IPageInfo): void {\n        this.raiseStartIndexChange(event.startIndex);\n\n        if (this.pagerType === 'scroll') {\n            // For other events do nothing.\n            if (typeof event.startIndex === 'undefined' || event.startIndex < 0 ||\n                typeof event.endIndex === 'undefined' || event.endIndex < 0) {\n                return;\n            }\n\n            const addAtStart = event.scrollDirection === 'backward';\n            let shouldGetItemsFromApi = false;\n            let indexOfMissingItem: number;\n\n            if (addAtStart) {\n                indexOfMissingItem = event.endIndex;\n                while (!shouldGetItemsFromApi && indexOfMissingItem >= event.startIndex) {\n                    if (!this.items[indexOfMissingItem]) {\n                        shouldGetItemsFromApi = true;\n                    }\n\n                    if (!shouldGetItemsFromApi) {\n                        indexOfMissingItem--;\n                    }\n                }\n            } else {\n                indexOfMissingItem = event.startIndex;\n                while (!shouldGetItemsFromApi && indexOfMissingItem <= event.endIndex) {\n                    if (!this.items[indexOfMissingItem]) {\n                        shouldGetItemsFromApi = true;\n                    }\n\n                    if (!shouldGetItemsFromApi) {\n                        indexOfMissingItem++;\n                    }\n                }\n            }\n\n            // Get bulk from api.\n            if (shouldGetItemsFromApi) {\n                if (!this.loadingItemsFromApi) {\n                    this.toggleLoadingItemsFropApi(true);\n\n                    const top = this.getTopItems() - 1;\n                    const fromIndex = addAtStart ? Math.max(indexOfMissingItem - top, 0) : indexOfMissingItem;\n                    const toIndex = addAtStart ? indexOfMissingItem : Math.min(indexOfMissingItem + top, this.totalRows);\n\n                    this.loadItems.emit({\n                        fromIndex,\n                        toIndex,\n                    });\n                }\n            }\n        }\n    }\n\n    onListLoad(): void {\n        setTimeout(() => {\n            this.listLoad.emit();\n        }, 0);\n    }\n\n    // onChildRectChange(event: any) {\n    //     // Set the calculatedObjectHeight only if he's not set (this case is only for the initialize when virtual scroll is undefined).\n    //     // the other cases is handled in calcObjectHeight function.\n    //     if (this.calculatedObjectHeight === 'auto') {\n    //         this.calculatedObjectHeight = event?.height + 'px';\n    //     }\n    // }\n\n    onValueChanged(valueChange: IPepFormFieldValueChangeEvent): void {\n        if (this.disabled) {\n            return;\n        }\n\n        this.valueChange.emit(valueChange);\n    }\n\n    onCustomizeFieldClick(\n        customizeFieldClickedData: IPepFormFieldClickEvent\n    ): void {\n        if (this.disabled) {\n            return;\n        }\n\n        this.fieldClick.emit(customizeFieldClickedData);\n    }\n}\n","<ng-container *ngIf=\"totalRows == 0\">\n    <ng-container *ngIf=\"noDataFoundMsg; then noDataMsgInputBlock; else noDataMsgDefaultBlock\"></ng-container>\n    <ng-template #noDataMsgInputBlock>\n        <div class=\"pep-border-bottom\">\n            <p class=\"title-xl no-data\">\n                {{ noDataFoundMsg }}\n            </p>\n        </div>\n    </ng-template>\n    <ng-template #noDataMsgDefaultBlock>\n        <div class=\"pep-border-bottom\">\n            <p class=\"title-xl no-data\">\n                {{ 'LIST.NO_DATA_FOUND' | translate}}\n            </p>\n        </div>\n        <div class=\"no-data-suggestions\">\n            <p class=\"suggestions-title title-lg\">\n                {{ 'LIST.NO_DATA_FOUND_SUGGESTIONS_TITLE' | translate}}\n            </p>\n            <ul class=\"suggestions-list body-lg\" [innerHtml]=\"'LIST.NO_DATA_FOUND_SUGGESTIONS_LIST' | translate\"></ul>\n        </div>\n    </ng-template>\n</ng-container>\n<ng-container *ngIf=\"totalRows > 0\">\n    <ng-container *ngTemplateOutlet=\"tableHeader\"></ng-container>\n\n    <!-- (vsChildRectChange)=\"onChildRectChange($event)\" -->\n    <virtual-scroller #scroller [items]=\"pagerType === 'pages' ? currentPageItems : items\"\n        [scrollDebounceTime]=\"scrollDebounceTime\" [scrollThrottlingTime]=\"scrollThrottlingTime\"\n        [bufferAmount]=\"printMode ? totalRows : bufferAmount\" [parentScroll]=\"parentScroll\" [disable]=\"loadingItemsFromApi\"\n        class=\"virtual-scroller\" [ngClass]=\"{ 'table-body': isTable, 'cards-body': !isTable }\"\n        (vsChange)=\"onVirtualScrollerChange($event)\" >\n        <ng-container *ngFor=\"let item of scroller.viewPortItems; let index = index; let isFirst = first;\">\n            <ng-container *ngTemplateOutlet=\"listData; context: {item: item, index:index}\"></ng-container>\n        </ng-container>\n    </virtual-scroller>\n\n    <pep-list-pager *ngIf=\"pagerType === 'pages'\" class=\" list-pager\" [disabled]=\"loadingItemsFromApi\"\n        [length]=\"totalRows\" [pageSize]=\"pageSize\" [pageIndex]=\"pageIndex\" (pagerChange)=\"onPagerChange($event)\">\n    </pep-list-pager>\n\n    <ng-container *ngTemplateOutlet=\"tableTotal\"></ng-container>\n</ng-container>\n\n<ng-template #listData let-item=\"item\" let-index=\"index\">\n    <ng-container *ngIf=\"isTable\">\n        <!-- getIsItemSelected(item) -> item | isItemSelected: selectionTypeForActions : selectedItemId : isAllSelected : selectedItems : unSelectedItems -->\n        <div class=\"table-row\" (mouseenter)=\"onTableRowMouseEnter($event, item?.UID, item?.Type)\" \n            (mouseleave)=\"onTableRowMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n                'compact-view': tableViewType === 'compact',\n                even: zebraStripes && index % 2 !== 0,\n                selected: getIsItemSelected(item),\n                highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId}\" [ngStyle]=\"{ visibility: !loadingItemsFromApi || item ? 'visible' : 'hidden' }\">\n            <fieldset class=\"table-row-fieldset\" [ngStyle]=\"{ 'background-color': item?.BackgroundColor }\">\n                <mat-checkbox *ngIf=\"selectionTypeForActions == 'multi'\" type=\"checkbox\"\n                    class=\"pull-left flip row-selection\" [ngClass]=\"{ 'md': tableViewType === 'compact' }\"\n                    [disabled]=\"getisItemDisabled(item)\" [ngStyle]=\"{\n                            visibility: !deviceHasMouse ||\n                            item?.UID + SEPARATOR + item?.Type === hoveredItemId || isAllSelected || selectedItems.size > 0 ? 'visible' : 'hidden'\n                        }\" [checked]=\"getIsItemSelected(item)\"\n                    (change)=\"selectItemForActions($event, item?.UID, item?.IsSelectableForActions, item?.Type)\">\n                </mat-checkbox>\n                <mat-radio-button *ngIf=\"selectionTypeForActions == 'single'\" name=\"selection\"\n                    class=\"pull-left flip row-selection pep-radio-button\" [ngClass]=\"{ 'md': tableViewType === 'compact' }\"\n                    [disabled]=\"getisItemDisabled(item)\"\n                    [checked]=\"getIsItemSelected(item)\"\n                    (change)=\"selectItemForActions($event, item?.UID, item?.IsSelectableForActions, item?.Type)\">\n                </mat-radio-button>\n                <pep-form [layoutType]=\"'table'\" [checkForChanges]=\"checkForChanges\" [layout]=\"layout\"\n                    [firstFieldAsLink]=\"firstFieldAsLink\" [data]=\"item\" [canEditObject]=\"!disabled\"\n                    [lockEvents]=\"lockItemInnerEvents || printMode\" [isReport]=\"isReport\" [isActive]=\"\n                            (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n                            item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n                        \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n                    (click)=\"itemClicked($event, item)\">\n                </pep-form>\n            </fieldset>\n        </div>\n    </ng-container>\n\n    <ng-container *ngIf=\"!isTable\">\n        <div (mouseenter)=\"onCardMouseEnter($event, item?.UID, item?.Type)\"\n            (mouseleave)=\"onCardMouseLeave($event, item?.UID, item?.Type)\" [ngClass]=\"{\n                    selected: getIsItemSelected(item),\n                    highlighted: item?.UID + SEPARATOR + item?.Type === selectedItemId,\n                    'line-view': viewType === 'lines',\n                    'card-view': viewType === 'cards',\n                    'small-card': cardSize === 'sm'\n                }\" class=\"pull-left flip\"\n            [ngStyle]=\"{ height: calculatedObjectHeight, visibility: !loadingItemsFromApi || item ? 'visible' : 'hidden' }\">\n            <mat-checkbox *ngIf=\"showCardSelection\" class=\"pull-left flip card-selection\"\n                [disabled]=\"getisItemDisabled(item)\" [checked]=\"getIsItemSelected(item)\"\n                (change)=\"selectItemForActions($event, item?.UID, item?.IsSelectableForActions, item?.Type)\">\n            </mat-checkbox>\n            <pep-form [layoutType]=\"'card'\" [firstFieldAsLink]=\"firstFieldAsLink\" [checkForChanges]=\"checkForChanges\"\n                [layout]=\"layout\" [data]=\"item\" [canEditObject]=\"!disabled\"\n                [lockEvents]=\"lockItemInnerEvents || printMode\" [isActive]=\"\n                        (item?.UID + SEPARATOR + item?.Type === selectedItemId ||\n                        item?.UID + SEPARATOR + item?.Type === hoveredItemId) && deviceHasMouse\n                    \" (valueChange)=\"onValueChanged($event)\" (fieldClick)=\"onCustomizeFieldClick($event)\"\n                (click)=\"itemClicked($event, item)\">\n            </pep-form>\n        </div>\n    </ng-container>\n</ng-template>\n\n<ng-template #tableHeader>\n    <div *ngIf=\"isTable\" class=\"table-header\" (mouseup)=\"onListResizeEnd($event)\"\n        (mouseenter)=\"onListHeaderMouseEnter($event)\" (mouseleave)=\"onListHeaderMouseLeave($event)\"\n        (mousemove)=\"onListResize($event)\">\n\n        <div class=\"table-header-padding-top\"></div>\n        <fieldset class=\"table-header-fieldset\">\n            <mat-checkbox *ngIf=\"selectionTypeForActions !== 'none'\" #selectAllCB class=\"pull-left flip row-selection\" [ngClass]=\"{ 'md': tableViewType === 'compact' }\"\n                type=\"checkbox\" [ngStyle]=\"{\n                        visibility:\n                            selectionTypeForActions == 'single' || \n                            (selectionTypeForActions == 'multi' && hideAllSelectionInMulti) ? 'hidden' : 'visible'\n                    }\"\n                [indeterminate]=\"isAllSelected ? unSelectedItems.size > 0 && unSelectedItems.size < totalRows : (selectedItems.size > 0 && !getIsAllSelectedForActions())\"\n                [disabled]=\"disabled || selectionTypeForActions === 'single'\" [checked]=\"getIsAllSelectedForActions()\"\n                (change)=\"selectAllItemsForActions($event)\"></mat-checkbox>\n            <fieldset>\n                <div *ngFor=\"let field of layout?.ControlFields; let j = index\" class=\"header-column pull-left flip\"\n                    [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\" [ngClass]=\"{\n                            'compact-view': tableViewType === 'compact',\n                            'support-sorting': supportSorting,\n                            'has-sorting': field.ApiName === sortBy,\n                            'is-resizing': field.ApiName === pressedColumn,\n                            'is-first': j === 0 && selectionTypeForActions !== 'multi',\n                            'is-last': j === layout?.ControlFields?.length - 1\n                        }\"\n                    (click)=\"supportSorting ? (onListSortingChange(field.ApiName, sortBy !== null && sortBy != field.ApiName ? true : !isAsc, $event)) : false\">\n\n                    <label id=\"{{ field.ApiName }}\"\n                        class=\"header-label body-sm pull-left flip text-align-{{ field.Layout.XAlignment }}\"\n                        title=\"{{ field.Title }}\">\n                        <span *ngIf=\"field.Mandatory\" class=\"mandatory\">\n                            <pep-icon name=\"system_must\"></pep-icon>\n                        </span>\n                        {{ field.Title != '' ? field.Title : ' '}}\n                    </label>\n\n                    <div *ngIf=\"supportResizing\" class=\"resize-box pull-right flip\"\n                        (mousedown)=\"onListResizeStart($event, field.ApiName)\">\n                        <div class=\"splitter\"></div>\n                    </div>\n\n                    <div *ngIf=\"supportSorting\" class=\"sorting-box pull-left flip\"\n                        [ngClass]=\"{ 'has-sorting': field.ApiName === sortBy }\">\n                        <mat-icon *ngIf=\"field.ApiName !== sortBy\">\n                            <pep-icon name=\"arrow_either\" class=\"asc\"></pep-icon>\n                        </mat-icon>\n                        <ng-container *ngIf=\"field.ApiName === sortBy\">\n                            <mat-icon *ngIf=\"!isAsc\" [ngClass]=\"{ 'sort-by': field.ApiName === sortBy && isAsc }\"\n                                title=\"{{ 'LIST.SORT_ASC' | translate }}\">\n                                <pep-icon name=\"arrow_up\" class=\"asc\"></pep-icon>\n                            </mat-icon>\n                            <mat-icon *ngIf=\"isAsc\" [ngClass]=\"{ 'sort-by': field.ApiName === sortBy && !isAsc }\"\n                                title=\"{{ 'LIST.SORT_DESC' | translate }}\">\n                                <pep-icon name=\"arrow_down\" class=\"desc\"></pep-icon>\n                            </mat-icon>\n                        </ng-container>\n                    </div>\n                </div>\n            </fieldset>\n        </fieldset>\n    </div>\n</ng-template>\n\n<ng-template #tableTotal>\n    <div *ngIf=\"isTable && totalsRow?.length > 0 && totalsRow.length <= layout?.ControlFields.length\"\n        class=\"table-total\">\n        <fieldset class=\"table-header-fieldset\">\n            <div *ngFor=\"let field of layout?.ControlFields; let j = index\" class=\"total-column pull-left flip\"\n                [ngStyle]=\"{ width: field.calcTitleColumnWidthString }\">\n                <label class=\"total-label body-sm text-align-{{ field.Layout.XAlignment }}\">\n                    {{ totalsRow[j] }}\n                </label>\n            </div>\n        </fieldset>\n    </div>\n</ng-template>","import {\n    Component,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n    IPepMenuStateChangeEvent,\n    PepMenuItem,\n    IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\n@Component({\n    selector: 'pep-list-actions',\n    templateUrl: './list-actions.component.html',\n    styleUrls: ['./list-actions.component.scss'],\n})\n@Injectable()\nexport class PepListActionsComponent {\n    @Input() actions: Array<PepMenuItem> = null;\n    @Input() sizeType: PepSizeType = 'md';\n    @Input() xPosition: 'before' | 'after' = 'before';\n    @Input() hidden = false;\n\n    @Output()\n    actionClick: EventEmitter<IPepMenuItemClickEvent> = new EventEmitter<IPepMenuItemClickEvent>();\n    @Output()\n    stateChange: EventEmitter<IPepMenuStateChangeEvent> = new EventEmitter<IPepMenuStateChangeEvent>();\n    @Output()\n    menuClick: EventEmitter<void> = new EventEmitter<void>();\n\n    onActionClicked(action): void {\n        this.actionClick.emit(action);\n    }\n\n    onStateChanged(menuStateChangeEvent: IPepMenuStateChangeEvent): void {\n        this.stateChange.emit(menuStateChangeEvent);\n    }\n}\n","<pep-menu [xPosition]=\"xPosition\" [styleType]=\"'strong'\" [sizeType]=\"sizeType\" [items]=\"!hidden ? actions : null\"\n    [hideOnEmptyItems]=\"true\" [iconName]=\"'system_edit'\" (menuItemClick)=\"onActionClicked($event)\"\n    (stateChange)=\"onStateChanged($event)\" (menuClick)=\"menuClick.emit();\">\n</pep-menu>\n","import {\n    Component,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n    ViewChild,\n    ElementRef,\n    Renderer2,\n    ChangeDetectorRef,\n    OnDestroy,\n    AfterViewInit,\n} from '@angular/core';\nimport {\n    ObjectsDataRow,\n    UIControl,\n    PepLayoutService,\n    PepScreenSizeType,\n} from '@pepperi-addons/ngx-lib';\nimport { PepCarouselComponent } from '@pepperi-addons/ngx-lib/carousel';\n\nexport type PepListCarouselSizeType = 'xs' | 'sm' | 'md';\n\nexport interface IPepListCarouselItemClickEvent {\n    source: ObjectsDataRow;\n}\n\n@Component({\n    selector: 'pep-list-carousel',\n    templateUrl: './list-carousel.component.html',\n    styleUrls: ['./list-carousel.component.scss'],\n})\n@Injectable()\nexport class PepListCarouselComponent implements AfterViewInit, OnDestroy {\n    @Input() duration = 1000;\n    @Input() layout: UIControl = null;\n    @Input() itemsToMove = 3;\n    @Input() lockItemInnerEvents = true;\n    @Input() hideArrowsInSmallScreen = true;\n\n    private _items: Array<ObjectsDataRow> = null;\n    @Input()\n    set items(value: Array<ObjectsDataRow>) {\n        this._items = value;\n        this.moveTo(0);\n    }\n    get items() {\n        return this._items;\n    }\n\n    private _itemSize: PepListCarouselSizeType = 'xs';\n    @Input()\n    set itemSize(value: PepListCarouselSizeType) {\n        this._itemSize = value;\n        this.moveTo(0);\n    }\n    get itemSize() {\n        return this._itemSize;\n    }\n\n    @Output()\n    itemClick: EventEmitter<IPepListCarouselItemClickEvent> = new EventEmitter<IPepListCarouselItemClickEvent>();\n\n    @ViewChild('carousel', { read: PepCarouselComponent })\n    carousel: PepCarouselComponent;\n\n    prevDisabled = false;\n    nextDisabled = false;\n    screenSize: PepScreenSizeType;\n    PepScreenSizeType = PepScreenSizeType;\n    // deviceHasMouse = false;\n\n    constructor(public layoutService: PepLayoutService) {\n        // this.deviceHasMouse = this.layoutService.getDeviceHasMouse();\n    }\n\n    ngAfterViewInit(): void {\n        this.layoutService.onResize$.subscribe((size: PepScreenSizeType) => {\n            this.screenSize = size;\n        });\n\n        // this.layoutService.onMouseOver$.subscribe((deviceHasMouse: boolean) => {\n        //     this.deviceHasMouse = deviceHasMouse;\n        // });\n    }\n\n    ngOnDestroy(): void {\n        // if (this.itemClick) {\n        //     this.itemClick.unsubscribe();\n        // }\n    }\n\n    itemClicked(item: ObjectsDataRow): void {\n        this.itemClick.emit({ source: item });\n    }\n\n    moveLeft() {\n        // this.carousel.moveLeft();\n        const indexToMove = Math.max(\n            this.carousel.currIndex - this.itemsToMove,\n            0\n        );\n        this.moveTo(indexToMove);\n    }\n\n    moveRight() {\n        // this.carousel.moveRight();\n        const indexToMove = Math.min(\n            this.carousel.currIndex + this.itemsToMove,\n            this.items.length\n        );\n        this.moveTo(indexToMove);\n    }\n\n    moveTo(index: number) {\n        if (this.carousel) {\n            this.carousel.moveTo(index);\n        }\n    }\n\n    onReachesLeftBound(event: boolean) {\n        this.prevDisabled = event;\n    }\n\n    onReachesRightBound(event: boolean) {\n        this.nextDisabled = event;\n    }\n}\n","<div class=\"carousel-container\">\n    <ng-container *ngIf=\"items?.length > 0; then carouselBlock; else emptyBlock\"></ng-container>\n    <ng-template #emptyBlock>\n        <!-- No items -->\n    </ng-template>\n    <ng-template #carouselBlock>\n        <pep-button *ngIf=\"!(hideArrowsInSmallScreen && screenSize > PepScreenSizeType.SM)\"\n            [iconName]=\"'arrow_left_alt'\" [styleType]=\"'regular'\" [disabled]=\"prevDisabled\" (click)=\"moveLeft()\"\n            class=\"carousel-arrow start-arrow\">\n        </pep-button>\n        <pep-carousel #carousel [xWheelEnabled]=\"false\" [snapDuration]=\"duration\"\n            (reachesLeftBound)=\"onReachesLeftBound($event)\" (reachesRightBound)=\"onReachesRightBound($event)\">\n            <ng-container *ngFor=\"let item of items\">\n                <pep-form pepCarouselItem [layout]=\"layout\" [data]=\"item\" [layoutType]=\"'card'\"\n                    (click)=\"itemClicked(item)\" class=\"card-view \" [lockEvents]=\"lockItemInnerEvents\"\n                    [ngClass]=\"{ 'x-small-card': itemSize === 'xs', 'small-card': itemSize === 'sm'}\">\n                </pep-form>\n            </ng-container>\n        </pep-carousel>\n        <pep-button *ngIf=\"!(hideArrowsInSmallScreen && screenSize > PepScreenSizeType.SM)\"\n            [iconName]=\"'arrow_right_alt'\" [styleType]=\"'regular'\" [disabled]=\"nextDisabled\" (click)=\"moveRight()\"\n            class=\"carousel-arrow end-arrow\">\n        </pep-button>\n    </ng-template>\n</div>","import {\n    Component,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n    PepMenuItem,\n    IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { PepBreadCrumbItem } from '@pepperi-addons/ngx-lib/bread-crumbs';\n\nexport class IPepListChooserOption {\n    key: string;\n    text: string;\n}\n\nexport interface IPepListChooserOptionChangeEvent {\n    source: IPepListChooserOption;\n}\n\n@Component({\n    selector: 'pep-list-chooser',\n    templateUrl: './list-chooser.component.html',\n    styleUrls: ['./list-chooser.component.scss'],\n})\n@Injectable()\nexport class PepListChooserComponent {\n    private _options: Array<IPepListChooserOption> = null;\n    @Input()\n    set options(value: Array<IPepListChooserOption>) {\n        this._options = value;\n\n        this.menuItems = value.map((opt) => {\n            return { key: opt.key, text: opt.text };\n        });\n\n        if (this.menuItems?.length === 1) {\n            this.breadCrumbsItems = [];\n            this.breadCrumbsItems.push(\n                new PepBreadCrumbItem({\n                    key: this.menuItems[0].key,\n                    text: this.menuItems[0].text,\n                })\n            );\n        }\n    }\n    get options(): Array<IPepListChooserOption> {\n        return this._options;\n    }\n\n    private _currentList: IPepListChooserOption = null;\n    @Input()\n    set currentList(value: IPepListChooserOption) {\n        this._currentList = value;\n        this.currentItem = this.menuItems.find((mi) => mi.key === value.key);\n    }\n    get currentList(): IPepListChooserOption {\n        return this._currentList;\n    }\n\n    @Input() sizeType: PepSizeType = 'md';\n\n    @Output()\n    change: EventEmitter<IPepListChooserOptionChangeEvent> = new EventEmitter<IPepListChooserOptionChangeEvent>();\n\n    breadCrumbsItems: Array<PepBreadCrumbItem> = null;\n    menuItems: Array<PepMenuItem> = null;\n    currentItem: PepMenuItem = null;\n\n    onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n        this.currentList = this.options.find(\n            (list) => list.key === menuItemClickEvent.source.key\n        );\n        this.change.emit({ source: this.currentList });\n    }\n}\n","<ng-container *ngIf=\"menuItems?.length > 1\">\n    <pep-menu [type]=\"'select'\" [sizeType]=\"sizeType\" [items]=\"menuItems\" [selectedItem]=\"currentItem\"\n        [iconName]=\"'arrow_down'\" (menuItemClick)=\"onMenuItemClicked($event)\"></pep-menu>\n</ng-container>\n<ng-container *ngIf=\"menuItems?.length == 1\">\n    <pep-bread-crumbs [items]=\"breadCrumbsItems\" [addSpacing]=\"true\"></pep-bread-crumbs>\n</ng-container>","import {\n    Component,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n    OnChanges,\n    OnInit,\n} from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\nimport {\n    IPepMenuItemClickEvent,\n    PepMenuItem,\n} from '@pepperi-addons/ngx-lib/menu';\nimport { IPepListSortingChangeEvent } from './list.model';\n\nexport class IPepListSortingOption {\n    sortBy: string;\n    title: string;\n    iconName?: string;\n    isAsc?: boolean;\n}\n\nexport interface IPepListSortingOptionChangeEvent {\n    source: IPepListSortingOption;\n}\n\n@Component({\n    selector: 'pep-list-sorting',\n    templateUrl: './list-sorting.component.html',\n    styleUrls: ['./list-sorting.component.scss'],\n})\n@Injectable()\nexport class PepListSortingComponent implements OnInit {\n    private _options: Array<IPepListSortingOption> = null;\n    @Input()\n    set options(value: Array<IPepListSortingOption>) {\n        this._options = value;\n\n        this.menuItems = value.map((opt) => {\n            return { key: opt.sortBy, text: opt.title, iconName: opt.iconName };\n        });\n    }\n    get options(): Array<IPepListSortingOption> {\n        return this._options;\n    }\n\n    private _currentSorting: IPepListSortingOption = null;\n    @Input()\n    set currentSorting(value: IPepListSortingOption) {\n        this._currentSorting = value;\n        this.currentItem = this.menuItems.find((mi) => mi.key === value.sortBy);\n    }\n    get currentSorting(): IPepListSortingOption {\n        return this._currentSorting;\n    }\n\n    @Input() sizeType: PepSizeType = 'md';\n    @Output()\n    change: EventEmitter<IPepListSortingOptionChangeEvent> = new EventEmitter<IPepListSortingOptionChangeEvent>();\n\n    menuItems: Array<PepMenuItem> = null;\n    currentItem: PepMenuItem = null;\n\n    ngOnInit(): void {\n        if (\n            this.currentSorting === null &&\n            this.options &&\n            this.options.length > 0\n        ) {\n            this.currentSorting = this.options[0];\n        }\n    }\n\n    onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n        this.currentSorting = this.options.find(\n            (sorting) => sorting.sortBy === menuItemClickEvent.source.key\n        );\n        this.change.emit({ source: this.currentSorting });\n    }\n}\n","<div class=\"sorting-container\">\n    <div class=\"body-xs sort-by\">\n        <span>{{ 'LIST.SORT_BY' | translate }}</span>\n    </div>\n    <pep-menu [type]=\"'select'\" [sizeType]=\"sizeType\" [items]=\"menuItems\" [selectedItem]=\"currentItem\"\n        [iconName]=\"'arrow_down'\" (menuItemClick)=\"onMenuItemClicked($event)\"></pep-menu>\n</div>","import { Component, Injectable, Input } from '@angular/core';\nimport { PepSizeType } from '@pepperi-addons/ngx-lib';\n\n@Component({\n    selector: 'pep-list-total',\n    templateUrl: './list-total.component.html',\n    styleUrls: ['./list-total.component.scss', './list-total.component.theme.scss'],\n})\n@Injectable()\nexport class PepListTotalComponent {\n    @Input() totalRows = -1;\n    @Input() totalAmount = -1;\n    @Input() isMapView = false;\n    @Input() sizeType: PepSizeType = 'md';\n}\n","<div class=\"total-items-container\">\n    <ng-container *ngIf=\"isMapView; then mapTemplate; else notMapTemplate\"></ng-container>\n\n    <ng-template #notMapTemplate>\n        <ng-container *ngIf=\"totalRows >= 0\">\n            <div class=\"body-{{sizeType}} total-items color-dimmed\"\n                [innerHtml]=\"(totalRows === 1 ? 'LIST.TOTAL_RESULT' : 'LIST.TOTAL_RESULTS') | translate: { totalRows: totalRows }\">\n            </div>\n        </ng-container>\n        <ng-container *ngIf=\"totalAmount > 0\"> {{ 'LIST.TOTAL_OF' | translate }} {{ totalAmount }} </ng-container>\n    </ng-template>\n\n    <ng-template #mapTemplate>\n        <ng-container *ngIf=\"totalAmount >= 0\">\n        </ng-container>\n        <ng-container *ngIf=\"totalRows >= 0\">\n            <div class=\"body-{{sizeType}} total-items color-dimmed\"\n                [innerHtml]=\"(totalRows === 1 ? 'LIST.TOTAL_RESULT_OUT_OF_RESULT' : 'LIST.TOTAL_RESULTS_OUT_OF') | translate: { xRows: totalAmount, totalRows: totalRows }\">\n            </div>\n        </ng-container>\n    </ng-template>\n</div>","import {\n    Component,\n    OnInit,\n    Injectable,\n    Input,\n    Output,\n    EventEmitter,\n    OnChanges,\n} from '@angular/core';\nimport { PepSizeType, PepStyleType } from '@pepperi-addons/ngx-lib';\nimport {\n    PepMenuItem,\n    IPepMenuItemClickEvent,\n} from '@pepperi-addons/ngx-lib/menu';\n\nexport type PepListViewDisplayType = 'menu' | 'buttons';\n\nexport class IPepListView {\n    key: string;\n    iconName: string;\n    title?: string;\n}\n\nexport interface IListViewChangeEvent {\n    source: IPepListView;\n}\n\n@Component({\n    selector: 'pep-list-views',\n    templateUrl: './list-views.component.html',\n    styleUrls: ['./list-views.component.scss'],\n})\n@Injectable()\nexport class PepListViewsComponent implements OnInit {\n    private _views: Array<IPepListView> = null;\n    @Input()\n    set views(value: Array<IPepListView>) {\n        this._views = value;\n\n        this.menuItems = value.map((opt) => {\n            return { key: opt.key, text: opt.title, iconName: opt.iconName };\n        });\n    }\n    get views(): Array<IPepListView> {\n        return this._views;\n    }\n\n    private _currentView: IPepListView = null;\n    @Input()\n    set currentView(value: IPepListView) {\n        this._currentView = value;\n\n        if (this.displayType === 'menu') {\n            this.currentItem = this.menuItems.find(\n                (mi) => mi.key === value.key\n            );\n        }\n    }\n    get currentView(): IPepListView {\n        return this._currentView;\n    }\n\n    @Input() displayType: PepListViewDisplayType = 'menu';\n    @Input() styleType: PepStyleType = 'weak';\n    @Input() sizeType: PepSizeType = 'md';\n    @Input() classNames = '';\n\n    @Output()\n    change: EventEmitter<IListViewChangeEvent> = new EventEmitter<IListViewChangeEvent>();\n\n    menuItems: Array<PepMenuItem> = null;\n    currentItem: PepMenuItem = null;\n\n    ngOnInit(): void {\n        if (this.displayType === 'buttons') {\n            if (\n                this.currentView === null &&\n                this.views &&\n                this.views.length > 0\n            ) {\n                this.currentView = this.views[0];\n            }\n        }\n    }\n\n    onMenuItemClicked(menuItemClickEvent: IPepMenuItemClickEvent): void {\n        this.currentView = this.views.find(\n            (list) => list.key === menuItemClickEvent.source.key\n        );\n        this.raiseChangeEvent();\n    }\n\n    onViewChanged(view: IPepListView): void {\n        this.currentView = view;\n        this.raiseChangeEvent();\n    }\n\n    private raiseChangeEvent(): void {\n        this.change.emit({ source: this.currentView });\n    }\n}\n","<ng-container *ngIf=\"displayType === 'menu' then menuTemplate else buttonsTemplate\">\n</ng-container>\n<ng-template #menuTemplate>\n    <pep-menu [type]=\"'select'\" [styleType]=\"styleType\" [sizeType]=\"sizeType\" [classNames]=\"classNames\"\n        [items]=\"menuItems\" [selectedItem]=\"currentItem\"\n        [iconName]=\"currentItem?.iconName ? currentItem?.iconName : 'arrow_down'\"\n        (menuItemClick)=\"onMenuItemClicked($event)\"></pep-menu>\n</ng-template>\n<ng-template #buttonsTemplate>\n    <div class=\"buttons-wrapper pep-spacing-element-negative\">\n        <button *ngFor=\"let view of views\" mat-button [title]=\"view.title\" [disabled]=\"view.key === currentView?.key\"\n            class=\"pep-button icon-button pep-spacing-element {{ sizeType }} {{ styleType }} {{ classNames }}\"\n            pepRtlDirection pepMenuBlur (click)=\"onViewChanged(view)\">\n            <mat-icon>\n                <pep-icon name=\"{{ view?.iconName }}\"></pep-icon>\n            </mat-icon>\n        </button>\n    </div>\n</ng-template>","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { ObjectsDataRow } from '@pepperi-addons/ngx-lib';\r\nimport { PepListSelectionType } from './list.model';\r\n\r\n@Pipe({\r\n    name: 'isItemSelected'\r\n})\r\nexport class IsItemSelectedPipe implements PipeTransform {\r\n    SEPARATOR = ',';\r\n\r\n    private getUniqItemId(itemId: string, itemType = ''): string {\r\n        return itemId + this.SEPARATOR + itemType;\r\n    }\r\n\r\n    transform(item: ObjectsDataRow, selectionTypeForActions: PepListSelectionType, selectedItemId: string, isAllSelected: boolean,\r\n        selectedItems: Map<string, string>, unSelectedItems: Map<string, string>): any {\r\n        let isSelected = false;\r\n\r\n        if (selectionTypeForActions === 'single') {\r\n            isSelected = selectedItemId === this.getUniqItemId(item?.UID, item?.Type.toString());\r\n        }\r\n        // else if (selectionTypeForActions === 'single-action') {\r\n        //     isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n        // }\r\n        else if (selectionTypeForActions === 'multi') {\r\n            if (item?.IsSelectableForActions) {\r\n                isSelected = (isAllSelected && !unSelectedItems.has(item?.UID)) || selectedItems.has(item?.UID);\r\n            }\r\n        }\r\n\r\n        return isSelected;\r\n    }\r\n}\r\n\r\n@Pipe({\r\n    name: 'isItemDisabled'\r\n})\r\nexport class IsItemDisabledPipe implements PipeTransform {\r\n    transform(item: ObjectsDataRow, lockItemInnerEvents: boolean, printMode: boolean): any {\r\n        return (\r\n            printMode || lockItemInnerEvents || (item && !item.IsSelectableForActions)\r\n        );\r\n    }\r\n}","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { MatCommonModule } from '@angular/material/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\n\nimport { PepNgxLibModule } from '@pepperi-addons/ngx-lib';\nimport { PepBreadCrumbsModule } from '@pepperi-addons/ngx-lib/bread-crumbs';\nimport { PepButtonModule } from '@pepperi-addons/ngx-lib/button';\nimport { PepCarouselModule } from '@pepperi-addons/ngx-lib/carousel';\nimport {\n    PepIconModule,\n    PepIconRegistry,\n    pepIconArrowDown,\n    pepIconArrowEither,\n    pepIconArrowUp,\n    pepIconSystemMust,\n    pepIconArrowRight,\n    pepIconArrowRightAlt,\n    pepIconArrowLeft,\n    pepIconArrowLeftAlt,\n} from '@pepperi-addons/ngx-lib/icon';\nimport { PepFormModule } from '@pepperi-addons/ngx-lib/form';\nimport { PepMenuModule } from '@pepperi-addons/ngx-lib/menu';\nimport { PepTextboxModule } from '@pepperi-addons/ngx-lib/textbox';\n\n// import { PepListOldComponent } from './list_old.component';\nimport { PepListComponent } from './list.component';\nimport { PepListActionsComponent } from './list-actions.component';\nimport { PepListCarouselComponent } from './list-carousel.component';\nimport { PepListChooserComponent } from './list-chooser.component';\nimport { PepListPagerComponent } from './list-pager.component';\nimport { PepListSortingComponent } from './list-sorting.component';\nimport { PepListTotalComponent } from './list-total.component';\nimport { PepListViewsComponent } from './list-views.component';\n\nconst listComponents = [\n    // PepListOldComponent,\n    PepListComponent,\n    PepListActionsComponent,\n    PepListCarouselComponent,\n    PepListChooserComponent,\n    PepListPagerComponent,\n    PepListSortingComponent,\n    PepListTotalComponent,\n    PepListViewsComponent,\n];\n\nimport { IsItemDisabledPipe, IsItemSelectedPipe } from './list.pipes';\n\nconst listPipes = [\n    IsItemSelectedPipe,\n    IsItemDisabledPipe\n];\n\nimport { VirtualScrollerModule } from './virtual-scroller';\n// import { PepVirtualScrollComponent } from './virtual-scroll.component';\n@NgModule({\n    imports: [\n        CommonModule,\n        // Material modules,\n        MatCommonModule,\n        MatButtonModule,\n        MatCheckboxModule,\n        MatRadioModule,\n        MatIconModule,\n        MatMenuModule,\n        // ngx-lib modules\n        PepNgxLibModule,\n        PepBreadCrumbsModule,\n        PepButtonModule,\n        PepCarouselModule,\n        PepIconModule,\n        PepFormModule,\n        PepMenuModule,\n        PepTextboxModule,\n        VirtualScrollerModule\n    ],\n    exports: [listComponents],\n    declarations: [listComponents, listPipes],\n})\nexport class PepListModule {\n    constructor(private pepIconRegistry: PepIconRegistry) {\n        this.pepIconRegistry.registerIcons([\n            pepIconArrowDown,\n            pepIconArrowEither,\n            pepIconArrowUp,\n            pepIconSystemMust,\n            pepIconArrowRight,\n            pepIconArrowRightAlt,\n            pepIconArrowLeft,\n            pepIconArrowLeftAlt,\n        ]);\n    }\n}\n","/*\n * Public API Surface of ngx-lib/list\n */\nexport * from './list.module';\nexport * from './list.model';\n// export * from './list_old.component';\nexport * from './list.component';\nexport * from './list-actions.component';\nexport * from './list-carousel.component';\nexport * from './list-chooser.component';\nexport * from './list-pager.component';\nexport * from './list-sorting.component';\nexport * from './list-total.component';\nexport * from './list-views.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i7","i3","i4","i5","i6","i8.VirtualScrollerComponent","i9.PepListPagerComponent","i10","i1","i2"],"mappings":"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"}