{"version":3,"file":"angular2-multiselect-dropdown.mjs","sources":["../../projects/angular2-multiselect-dropdown-lib/src/lib/multiselect.model.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/clickOutside.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/multiselect.service.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/list-filter.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/menu-item.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/virtual-scroll/virtual-scroll.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/multiselect.component.ts","../../projects/angular2-multiselect-dropdown-lib/src/lib/multiselect.component.html","../../projects/angular2-multiselect-dropdown-lib/src/angular2-multiselect-dropdown.ts"],"sourcesContent":["export class MyException {\n\tstatus : number;\n\tbody : any;\n\tconstructor(status : number, body : any) {\n\t\tthis.status = status;\n\t\tthis.body = body;\n\t}\n\t\n}","import { Directive, ElementRef, Output, EventEmitter, HostListener, Input, OnInit, OnChanges } from '@angular/core';\n\n@Directive({\n    selector: '[clickOutside]'\n})\nexport class ClickOutsideDirective {\n    constructor(private _elementRef: ElementRef) {\n    }\n\n    @Output()\n    public clickOutside = new EventEmitter<MouseEvent>();\n\n    @HostListener('document:pointerdown', ['$event', '$event.target'])\n    @HostListener('document:touchstart', ['$event', '$event.target'])\n    public onClick(event: MouseEvent, targetElement: HTMLElement): void {\n        if (!targetElement) {\n            return;\n        }\n\n        const clickedInside = this._elementRef.nativeElement.contains(targetElement);\n        if (!clickedInside) {\n            this.clickOutside.emit(event);\n        }\n    }\n}\n\n@Directive({\n    selector: '[scroll]'\n})\nexport class ScrollDirective {\n    constructor(private _elementRef: ElementRef) {\n    }\n\n    @Output()\n    public scroll = new EventEmitter<MouseEvent>();\n\n    @HostListener('scroll', ['$event'])\n    public onClick(event: MouseEvent, targetElement: HTMLElement): void {\n        this.scroll.emit(event);\n    }\n}\n@Directive({\n    selector: '[styleProp]'\n})\nexport class styleDirective {\n\n    constructor(private el: ElementRef) {\n\n    }\n\n    @Input('styleProp') styleVal: number;\n\n    ngOnInit() {\n\n        this.el.nativeElement.style.top = this.styleVal;\n    }\n    ngOnChanges(): void {\n        this.el.nativeElement.style.top = this.styleVal;\n    }\n}\n\n\n@Directive({\n    selector: '[setPosition]'\n})\nexport class setPosition implements OnInit, OnChanges {\n\n    @Input('setPosition') height: number;\n\n    constructor(public el: ElementRef) {\n\n    }\n    ngOnInit() {\n        if (this.height) {\n            this.el.nativeElement.style.bottom = parseInt(this.height + 15 + \"\") + 'px';\n        }\n    }\n    ngOnChanges(): void {\n        if (this.height) {\n            this.el.nativeElement.style.bottom = parseInt(this.height + 15 + \"\") + 'px';\n        }\n    }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\n\n\n@Injectable()\nexport class DataService {\n\n  filteredData: any = [];\n  private subject = new Subject<any>();\n\n  setData(data: any) {\n\n    this.filteredData = data;\n    this.subject.next(data);\n  }\n  getData(): Observable<any> {\n    return this.subject.asObservable();\n  }\n  getFilteredData() {\n    if (this.filteredData && this.filteredData.length > 0) {\n      return this.filteredData;\n    }\n    else {\n      return [];\n    }\n  }\n\n}","import { Pipe, PipeTransform } from '@angular/core';\nimport { DataService } from './multiselect.service';\n\n\n@Pipe({\n    name: 'listFilter',\n    pure: true\n})\nexport class ListFilterPipe implements PipeTransform {\n\n    public filteredList: any = [];\n    constructor(private ds: DataService) {\n\n    }\n\n    transform(items: any[], filter: any, searchBy: any): any[] {\n        if (!items || !filter || filter == \"\") {\n            return items;\n        }\n        this.filteredList = items.filter((item: any) => this.applyFilter(item, filter, searchBy));\n        return this.filteredList;\n    }\n    applyFilter(item: any, filter: any, searchBy: any): boolean {\n        let found = false;\n        if (searchBy.length > 0) {\n            if (item.grpTitle) {\n                found = true;\n            }\n            else {\n                for (var t = 0; t < searchBy.length; t++) {\n                    if (filter && item[searchBy[t]] && item[searchBy[t]] != \"\") {\n                        if (item[searchBy[t]].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {\n                            found = true;\n                        }\n                    }\n                }\n            }\n\n        } else {\n            if (item.grpTitle) {\n                found = true;\n            }\n            else {\n                for (var prop in item) {\n                    if (filter && item[prop]) {\n                        if (item[prop].toString().toLowerCase().indexOf(filter.toLowerCase()) >= 0) {\n                            found = true;\n                        }\n                    }\n                }\n            }\n        }\n\n        return found;\n    }\n}","import { Component, OnInit, OnDestroy, NgModule, TemplateRef, AfterContentInit, ContentChild, EmbeddedViewRef, OnChanges, ViewContainerRef, ViewEncapsulation, Input, Output, EventEmitter, ElementRef, AfterViewInit, Pipe, PipeTransform, Directive } from '@angular/core';\nimport { SafeResourceUrl, DomSanitizer } from '@angular/platform-browser';\nimport { CommonModule }       from '@angular/common';\n\n@Component({\n  selector: 'c-item',\n  template: ``\n})\n\nexport class Item { \n\n    @ContentChild(TemplateRef, {static: true}) template: TemplateRef<any>\n    constructor() {   \n    }\n\n}\n\n@Component({\n  selector: 'c-badge',\n  template: ``\n})\n\nexport class Badge { \n\n    @ContentChild(TemplateRef, {static: true}) template: TemplateRef<any>\n    constructor() {   \n    }\n\n}\n\n@Component({\n  selector: 'c-search',\n  template: ``\n})\n\nexport class Search { \n\n    @ContentChild(TemplateRef, {static: true}) template: TemplateRef<any>\n    constructor() {   \n    }\n\n}\n@Component({\n  selector: 'c-templateRenderer',\n  template: ``\n})\n\nexport class TemplateRenderer implements OnInit, OnDestroy { \n\n    @Input() data: any\n    @Input() item: any\n    view: EmbeddedViewRef<any>;\n\n    constructor(public viewContainer: ViewContainerRef) {   \n    }\n    ngOnInit() {\n        this.view = this.viewContainer.createEmbeddedView(this.data.template, {\n            '\\$implicit': this.data,\n            'item':this.item\n        });\n    }\n\t\n    ngOnDestroy() {\n\t\tthis.view.destroy();\n\t}\n\n}\n\n@Component({\n  selector: 'c-icon',\n  template: `<svg *ngIf=\"name == 'remove'\" width=\"100%\" height=\"100%\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n                        viewBox=\"0 0 47.971 47.971\" style=\"enable-background:new 0 0 47.971 47.971;\" xml:space=\"preserve\">\n                        <g>\n                            <path d=\"M28.228,23.986L47.092,5.122c1.172-1.171,1.172-3.071,0-4.242c-1.172-1.172-3.07-1.172-4.242,0L23.986,19.744L5.121,0.88\n                                c-1.172-1.172-3.07-1.172-4.242,0c-1.172,1.171-1.172,3.071,0,4.242l18.865,18.864L0.879,42.85c-1.172,1.171-1.172,3.071,0,4.242\n                                C1.465,47.677,2.233,47.97,3,47.97s1.535-0.293,2.121-0.879l18.865-18.864L42.85,47.091c0.586,0.586,1.354,0.879,2.121,0.879\n                                s1.535-0.293,2.121-0.879c1.172-1.171,1.172-3.071,0-4.242L28.228,23.986z\"/>\n                        </g>\n                    </svg>\n            <svg *ngIf=\"name == 'angle-down'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 612 612\" style=\"enable-background:new 0 0 612 612;\" xml:space=\"preserve\">\n<g>\n\t<g id=\"_x31_0_34_\">\n\t\t<g>\n\t\t\t<path d=\"M604.501,134.782c-9.999-10.05-26.222-10.05-36.221,0L306.014,422.558L43.721,134.782\n\t\t\t\tc-9.999-10.05-26.223-10.05-36.222,0s-9.999,26.35,0,36.399l279.103,306.241c5.331,5.357,12.422,7.652,19.386,7.296\n\t\t\t\tc6.988,0.356,14.055-1.939,19.386-7.296l279.128-306.268C614.5,161.106,614.5,144.832,604.501,134.782z\"/>\n\t\t</g>\n\t</g>\n</g>\n</svg>\n<svg *ngIf=\"name == 'angle-up'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 612 612\" style=\"enable-background:new 0 0 612 612;\" xml:space=\"preserve\">\n<g>\n\t<g id=\"_x39__30_\">\n\t\t<g>\n\t\t\t<path d=\"M604.501,440.509L325.398,134.956c-5.331-5.357-12.423-7.627-19.386-7.27c-6.989-0.357-14.056,1.913-19.387,7.27\n\t\t\t\tL7.499,440.509c-9.999,10.024-9.999,26.298,0,36.323s26.223,10.024,36.222,0l262.293-287.164L568.28,476.832\n\t\t\t\tc9.999,10.024,26.222,10.024,36.221,0C614.5,466.809,614.5,450.534,604.501,440.509z\"/>\n\t\t</g>\n\t</g>\n</g>\n\n</svg>\n<svg *ngIf=\"name == 'search'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t width=\"100%\" height=\"100%\" viewBox=\"0 0 615.52 615.52\" style=\"enable-background:new 0 0 615.52 615.52;\"\n\t xml:space=\"preserve\">\n<g>\n\t<g>\n\t\t<g id=\"Search__x28_and_thou_shall_find_x29_\">\n\t\t\t<g>\n\t\t\t\t<path d=\"M602.531,549.736l-184.31-185.368c26.679-37.72,42.528-83.729,42.528-133.548C460.75,103.35,357.997,0,231.258,0\n\t\t\t\t\tC104.518,0,1.765,103.35,1.765,230.82c0,127.47,102.753,230.82,229.493,230.82c49.53,0,95.271-15.944,132.78-42.777\n\t\t\t\t\tl184.31,185.366c7.482,7.521,17.292,11.291,27.102,11.291c9.812,0,19.62-3.77,27.083-11.291\n\t\t\t\t\tC617.496,589.188,617.496,564.777,602.531,549.736z M355.9,319.763l-15.042,21.273L319.7,356.174\n\t\t\t\t\tc-26.083,18.658-56.667,28.526-88.442,28.526c-84.365,0-152.995-69.035-152.995-153.88c0-84.846,68.63-153.88,152.995-153.88\n\t\t\t\t\ts152.996,69.034,152.996,153.88C384.271,262.769,374.462,293.526,355.9,319.763z\"/>\n\t\t\t</g>\n\t\t</g>\n\t</g>\n</g>\n\n</svg>\n<svg *ngIf=\"name == 'clear'\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" x=\"0px\" y=\"0px\"\n\t viewBox=\"0 0 51.976 51.976\" style=\"enable-background:new 0 0 51.976 51.976;\" xml:space=\"preserve\">\n<g>\n\t<path d=\"M44.373,7.603c-10.137-10.137-26.632-10.138-36.77,0c-10.138,10.138-10.137,26.632,0,36.77s26.632,10.138,36.77,0\n\t\tC54.51,34.235,54.51,17.74,44.373,7.603z M36.241,36.241c-0.781,0.781-2.047,0.781-2.828,0l-7.425-7.425l-7.778,7.778\n\t\tc-0.781,0.781-2.047,0.781-2.828,0c-0.781-0.781-0.781-2.047,0-2.828l7.778-7.778l-7.425-7.425c-0.781-0.781-0.781-2.048,0-2.828\n\t\tc0.781-0.781,2.047-0.781,2.828,0l7.425,7.425l7.071-7.071c0.781-0.781,2.047-0.781,2.828,0c0.781,0.781,0.781,2.047,0,2.828\n\t\tl-7.071,7.071l7.425,7.425C37.022,34.194,37.022,35.46,36.241,36.241z\"/>\n</g>\n</svg>`,\n  encapsulation: ViewEncapsulation.None,\n\n})\n\nexport class CIcon { \n\n    @Input() name:any;\n\n}","import {\n\tComponent,\n\tContentChild,\n\tElementRef,\n\tEventEmitter,\n\tInject,\n\tOptional,\n\tInput,\n\tNgModule,\n\tNgZone,\n\tOnChanges,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tRenderer2,\n\tViewChild,\n\tChangeDetectorRef,\n\tInjectionToken\n} from '@angular/core';\n\nimport { PLATFORM_ID } from '@angular/core';\nimport { isPlatformServer } from '@angular/common';\n\nimport { CommonModule } from '@angular/common';\n\nimport * as tween from '@tweenjs/tween.js'\nimport { VirtualScrollerDefaultOptions } from './defaultoptions';\nimport { IPageInfo } from './ipageinfo';\nimport { IViewport } from './iviewport';\n\nimport { WrapGroupDimensions } from './wrapgroupdimensions';\nimport { WrapGroupDimension } from './wrapgroupdimension';\n\nimport { IDimensions } from './idimension';\n\n \n\n\n\nexport function VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY(): VirtualScrollerDefaultOptions {\n\treturn {\n\t\tscrollThrottlingTime: 0,\n\t\tscrollDebounceTime: 0,\n\t\tscrollAnimationTime: 750,\n\t\tcheckResizeInterval: 1000,\n\t\tresizeBypassRefreshThreshold: 5,\n\t\tmodifyOverflowStyleOfParentScroll: true,\n\t\tstripedTable: false\n\t};\n}\n\n\n\n\n\n\n\n\n\n\n\n@Component({\n\tselector: 'virtual-scroller,[virtualScroller]',\n\texportAs: 'virtualScroller',\n\ttemplate: `\n    <div class=\"total-padding\" #invisiblePadding></div>\n    <div class=\"scrollable-content\" #content>\n      <ng-content></ng-content>\n    </div>\n  `,\n\thost: {\n\t\t'[class.horizontal]': \"horizontal\",\n\t\t'[class.vertical]': \"!horizontal\",\n\t\t'[class.selfScroll]': \"!parentScroll\"\n\t},\n\tstyles: [`\n    :host {\n      position: relative;\n\t  display: block;\n      -webkit-overflow-scrolling: touch;\n    }\n\t\n\t:host.horizontal.selfScroll {\n      overflow-y: visible;\n      overflow-x: auto;\n\t}\n\t:host.vertical.selfScroll {\n      overflow-y: auto;\n      overflow-x: visible;\n\t}\n\t\n    .scrollable-content {\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n      max-width: 100vw;\n      max-height: 100vh;\n      position: absolute;\n    }\n\n\t.scrollable-content ::ng-deep > * {\n\t\tbox-sizing: border-box;\n\t}\n\t\n\t:host.horizontal {\n\t\twhite-space: nowrap;\n\t}\n\t\n\t:host.horizontal .scrollable-content {\n\t\tdisplay: flex;\n\t}\n\t\n\t:host.horizontal .scrollable-content ::ng-deep > * {\n\t\tflex-shrink: 0;\n\t\tflex-grow: 0;\n\t\twhite-space: initial;\n\t}\n\t\n    .total-padding {\n      width: 1px;\n      opacity: 0;\n    }\n    \n    :host.horizontal .total-padding {\n      height: 100%;\n    }\n  `]\n})\nexport class VirtualScrollerComponent implements OnInit, OnChanges, OnDestroy {\n\tpublic viewPortItems: any[];\n\tpublic window = window;\n\n\tpublic get viewPortInfo(): IPageInfo {\n\t\tlet pageInfo: IViewport = this.previousViewPort || <any>{};\n\t\treturn {\n\t\t\tstartIndex: pageInfo.startIndex || 0,\n\t\t\tendIndex: pageInfo.endIndex || 0,\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition || 0,\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition || 0,\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition || 0,\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer || 0,\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer || 0\n\t\t};\n\t}\n\n\t@Input()\n\tpublic executeRefreshOutsideAngularZone: boolean = false;\n\n\tprotected _enableUnequalChildrenSizes: boolean = false;\n\t@Input()\n\tpublic get enableUnequalChildrenSizes(): boolean {\n\t\treturn this._enableUnequalChildrenSizes;\n\t}\n\tpublic set enableUnequalChildrenSizes(value: boolean) {\n\t\tif (this._enableUnequalChildrenSizes === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._enableUnequalChildrenSizes = value;\n\t\tthis.minMeasuredChildWidth = undefined;\n\t\tthis.minMeasuredChildHeight = undefined;\n\t}\n\n\t@Input()\n\tpublic useMarginInsteadOfTranslate: boolean = false;\n\n\t@Input()\n\tpublic modifyOverflowStyleOfParentScroll: boolean;\n\n\t@Input()\n\tpublic stripedTable: boolean;\n\n\t@Input()\n\tpublic scrollbarWidth: number;\n\n\t@Input()\n\tpublic scrollbarHeight: number;\n\n\t@Input()\n\tpublic childWidth: number;\n\n\t@Input()\n\tpublic childHeight: number;\n\n\t@Input()\n\tpublic ssrChildWidth: number;\n\n\t@Input()\n\tpublic ssrChildHeight: number;\n\n\t@Input()\n\tpublic ssrViewportWidth: number = 1920;\n\n\t@Input()\n\tpublic ssrViewportHeight: number = 1080;\n\n\tprotected _bufferAmount: number = 0;\n\t@Input()\n\tpublic get bufferAmount(): number {\n\t\tif (typeof (this._bufferAmount) === 'number' && this._bufferAmount >= 0) {\n\t\t\treturn this._bufferAmount;\n\t\t} else {\n\t\t\treturn this.enableUnequalChildrenSizes ? 5 : 0;\t\n\t\t}\n\t}\n\tpublic set bufferAmount(value: number) {\n\t\tthis._bufferAmount = value;\n\t}\n\n\t@Input()\n\tpublic scrollAnimationTime: number;\n\n\t@Input()\n\tpublic resizeBypassRefreshThreshold: number;\n\n\tprotected _scrollThrottlingTime: number;\n\t@Input()\n\tpublic get scrollThrottlingTime(): number {\n\t\treturn this._scrollThrottlingTime;\n\t}\n\tpublic set scrollThrottlingTime(value: number) {\n\t\tthis._scrollThrottlingTime = value;\n\t\tthis.updateOnScrollFunction();\n\t}\n\n\tprotected _scrollDebounceTime: number;\n\t@Input()\n\tpublic get scrollDebounceTime(): number {\n\t\treturn this._scrollDebounceTime;\n\t}\n\tpublic set scrollDebounceTime(value: number) {\n\t\tthis._scrollDebounceTime = value;\n\t\tthis.updateOnScrollFunction();\n\t}\n\n\tprotected onScroll: () => void;\n\tprotected updateOnScrollFunction(): void {\n\t\tif (this.scrollDebounceTime) {\n\t\t\tthis.onScroll = <any>this.debounce(() => {\n\t\t\t\tthis.refresh_internal(false);\n\t\t\t}, this.scrollDebounceTime);\n\t\t}\n\t\telse if (this.scrollThrottlingTime) {\n\t\t\tthis.onScroll = <any>this.throttleTrailing(() => {\n\t\t\t\tthis.refresh_internal(false);\n\t\t\t}, this.scrollThrottlingTime);\n\t\t}\n\t\telse {\n\t\t\tthis.onScroll = () => {\n\t\t\t\tthis.refresh_internal(false);\n\t\t\t};\n\t\t}\n\t}\n\n\tprotected checkScrollElementResizedTimer: number;\n\tprotected _checkResizeInterval: number;\n\t@Input()\n\tpublic get checkResizeInterval(): number {\n\t\treturn this._checkResizeInterval;\n\t}\n\tpublic set checkResizeInterval(value: number) {\n\t\tif (this._checkResizeInterval === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._checkResizeInterval = value;\n\t\tthis.addScrollEventHandlers();\n\t}\n\n\tprotected _items: any[] = [];\n\t@Input()\n\tpublic get items(): any[] {\n\t\treturn this._items;\n\t}\n\tpublic set items(value: any[]) {\n\t\tif (value === this._items) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._items = value || [];\n\t\tthis.refresh_internal(true);\n\t}\n\n\t@Input()\n\tpublic compareItems: (item1: any, item2: any) => boolean = (item1: any, item2: any) => item1 === item2;\n\n\tprotected _horizontal: boolean;\n\t@Input()\n\tpublic get horizontal(): boolean {\n\t\treturn this._horizontal;\n\t}\n\tpublic set horizontal(value: boolean) {\n\t\tthis._horizontal = value;\n\t\tthis.updateDirection();\n\t}\n\n\tprotected revertParentOverscroll(): void {\n\t\tconst scrollElement = this.getScrollElement();\n\t\tif (scrollElement && this.oldParentScrollOverflow) {\n\t\t\tscrollElement.style['overflow-y'] = this.oldParentScrollOverflow.y;\n\t\t\tscrollElement.style['overflow-x'] = this.oldParentScrollOverflow.x;\n\t\t}\n\n\t\tthis.oldParentScrollOverflow = undefined;\n\t}\n\n\tprotected oldParentScrollOverflow: { x: string, y: string };\n\tprotected _parentScroll: Element | Window;\n\t@Input()\n\tpublic get parentScroll(): Element | Window {\n\t\treturn this._parentScroll;\n\t}\n\tpublic set parentScroll(value: Element | Window) {\n\t\tif (this._parentScroll === value) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.revertParentOverscroll();\n\t\tthis._parentScroll = value;\n\t\tthis.addScrollEventHandlers();\n\n\t\tconst scrollElement = this.getScrollElement();\n\t\tif (this.modifyOverflowStyleOfParentScroll && scrollElement !== this.element.nativeElement) {\n\t\t\tthis.oldParentScrollOverflow = { x: scrollElement.style['overflow-x'], y: scrollElement.style['overflow-y'] };\n\t\t\tscrollElement.style['overflow-y'] = this.horizontal ? 'visible' : 'auto';\n\t\t\tscrollElement.style['overflow-x'] = this.horizontal ? 'auto' : 'visible';\n\t\t}\n\t}\n\n\t@Output()\n\tpublic vsUpdate: EventEmitter<any[]> = new EventEmitter<any[]>();\n\n\t@Output()\n\tpublic vsChange: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\n\n\t@Output()\n\tpublic vsStart: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\n\n\t@Output()\n\tpublic vsEnd: EventEmitter<IPageInfo> = new EventEmitter<IPageInfo>();\n\n\t@ViewChild('content', { read: ElementRef, static: false })\n\tprotected contentElementRef: ElementRef;\n\n\t@ViewChild('invisiblePadding', { read: ElementRef, static: false })\n\tprotected invisiblePaddingElementRef: ElementRef;\n\n\t@ContentChild('header', { read: ElementRef, static: false })\n\tprotected headerElementRef: ElementRef;\n\n\t@ContentChild('container', { read: ElementRef, static: false })\n\tprotected containerElementRef: ElementRef;\n\n\tpublic ngOnInit(): void {\n\t\tthis.addScrollEventHandlers();\n\t}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.removeScrollEventHandlers();\n\t\tthis.revertParentOverscroll();\n\t}\n\n\tpublic ngOnChanges(changes: any): void {\n\t\tlet indexLengthChanged = this.cachedItemsLength !== this.items.length;\n\t\tthis.cachedItemsLength = this.items.length;\n\n\t\tconst firstRun: boolean = !changes.items || !changes.items.previousValue || changes.items.previousValue.length === 0;\n\t\tthis.refresh_internal(indexLengthChanged || firstRun);\n\t}\n\n\t\n\tpublic ngDoCheck(): void {\n\t\tif (this.cachedItemsLength !== this.items.length) {\n\t\t\tthis.cachedItemsLength = this.items.length;\n\t\t\tthis.refresh_internal(true);\n\t\t\treturn;\n\t\t}\n\t\t\n\t\tif (this.previousViewPort && this.viewPortItems && this.viewPortItems.length > 0) {\n\t\t\tlet itemsArrayChanged = false;\n\t\t\tfor (let i = 0; i < this.viewPortItems.length; ++i) {\n\t\t\t\tif (!this.compareItems(this.items[this.previousViewPort.startIndexWithBuffer + i], this.viewPortItems[i])) {\n\t\t\t\t\titemsArrayChanged = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (itemsArrayChanged) {\n\t\t\t\tthis.refresh_internal(true);\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic refresh(): void {\n\t\tthis.refresh_internal(true);\n\t}\n\n\tpublic invalidateAllCachedMeasurements(): void {\n\t\tthis.wrapGroupDimensions = {\n\t\t\tmaxChildSizePerWrapGroup: [],\n\t\t\tnumberOfKnownWrapGroupChildSizes: 0,\n\t\t\tsumOfKnownWrapGroupChildWidths: 0,\n\t\t\tsumOfKnownWrapGroupChildHeights: 0\n\t\t};\n\n\t\tthis.minMeasuredChildWidth = undefined;\n\t\tthis.minMeasuredChildHeight = undefined;\n\n\t\tthis.refresh_internal(false);\n\t}\n\n\tpublic invalidateCachedMeasurementForItem(item: any): void {\n\t\tif (this.enableUnequalChildrenSizes) {\n\t\t\tlet index = this.items && this.items.indexOf(item);\n\t\t\tif (index >= 0) {\n\t\t\t\tthis.invalidateCachedMeasurementAtIndex(index);\n\t\t\t}\n\t\t} else {\n\t\t\tthis.minMeasuredChildWidth = undefined;\n\t\t\tthis.minMeasuredChildHeight = undefined;\n\t\t}\n\n\t\tthis.refresh_internal(false);\n\t}\n\n\tpublic invalidateCachedMeasurementAtIndex(index: number): void {\n\t\tif (this.enableUnequalChildrenSizes) {\n\t\t\tlet cachedMeasurement = this.wrapGroupDimensions.maxChildSizePerWrapGroup[index];\n\t\t\tif (cachedMeasurement) {\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[index] = undefined;\n\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= cachedMeasurement.childWidth || 0;\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= cachedMeasurement.childHeight || 0;\n\t\t\t}\n\t\t} else {\n\t\t\tthis.minMeasuredChildWidth = undefined;\n\t\t\tthis.minMeasuredChildHeight = undefined;\n\t\t}\n\n\t\tthis.refresh_internal(false);\n\t}\n\n\tpublic scrollInto(item: any, alignToBeginning: boolean = true, additionalOffset: number = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\n\t\tlet index: number = this.items.indexOf(item);\n\t\tif (index === -1) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.scrollToIndex(index, alignToBeginning, additionalOffset, animationMilliseconds, animationCompletedCallback);\n\t}\n\n\tpublic scrollToIndex(index: number, alignToBeginning: boolean = true, additionalOffset: number = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\n\t\tlet maxRetries: number = 5;\n\n\t\tlet retryIfNeeded = () => {\n\t\t\t--maxRetries;\n\t\t\tif (maxRetries <= 0) {\n\t\t\t\tif (animationCompletedCallback) {\n\t\t\t\t\tanimationCompletedCallback();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet dimensions = this.calculateDimensions();\n\t\t\tlet desiredStartIndex = Math.min(Math.max(index, 0), dimensions.itemCount - 1);\n\t\t\tif (this.previousViewPort.startIndex === desiredStartIndex) {\n\t\t\t\tif (animationCompletedCallback) {\n\t\t\t\t\tanimationCompletedCallback();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, 0, retryIfNeeded);\n\t\t};\n\n\t\tthis.scrollToIndex_internal(index, alignToBeginning, additionalOffset, animationMilliseconds, retryIfNeeded);\n\t}\n\n\tprotected scrollToIndex_internal(index: number, alignToBeginning: boolean = true, additionalOffset: number = 0, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\n\n\t\tlet dimensions = this.calculateDimensions();\n\t\tlet scroll = this.calculatePadding(index, dimensions) + additionalOffset;\n\t\tif (!alignToBeginning) {\n\t\t\tscroll -= dimensions.wrapGroupsPerPage * dimensions[this._childScrollDim];\n\t\t}\n\n\t\tthis.scrollToPosition(scroll, animationMilliseconds, animationCompletedCallback);\n\t}\n\n\tpublic scrollToPosition(scrollPosition: number, animationMilliseconds: number = undefined, animationCompletedCallback: () => void = undefined): void {\n\t\tscrollPosition += this.getElementsOffset();\n\n\t\tanimationMilliseconds = animationMilliseconds === undefined ? this.scrollAnimationTime : animationMilliseconds;\n\n\t\tlet scrollElement = this.getScrollElement();\n\n\t\tlet animationRequest: number;\n\n\t\tif (this.currentTween) {\n\t\t\tthis.currentTween.stop();\n\t\t\tthis.currentTween = undefined;\n\t\t}\n\n\t\tif (!animationMilliseconds) {\n\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, scrollPosition);\n\t\t\tthis.refresh_internal(false, animationCompletedCallback);\n\t\t\treturn;\n\t\t}\n\n\t\tconst tweenConfigObj = { scrollPosition: scrollElement[this._scrollType] };\n\n\t\tlet newTween = new tween.Tween(tweenConfigObj)\n\t\t\t.to({ scrollPosition }, animationMilliseconds)\n\t\t\t.easing(tween.Easing.Quadratic.Out)\n\t\t\t.onUpdate((data) => {\n\t\t\t\tif (isNaN(data.scrollPosition)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.renderer.setProperty(scrollElement, this._scrollType, data.scrollPosition);\n\t\t\t\tthis.refresh_internal(false);\n\t\t\t})\n\t\t\t.onStop(() => {\n\t\t\t\tcancelAnimationFrame(animationRequest);\n\t\t\t})\n\t\t\t.start();\n\n\t\tconst animate = (time?: number) => {\n\t\t\tif (!newTween[\"isPlaying\"]()) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tnewTween.update(time);\n\t\t\tif (tweenConfigObj.scrollPosition === scrollPosition) {\n\t\t\t\tthis.refresh_internal(false, animationCompletedCallback);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.zone.runOutsideAngular(() => {\n\t\t\t\tanimationRequest = requestAnimationFrame(animate);\n\t\t\t});\n\t\t};\n\n\t\tanimate();\n\t\tthis.currentTween = newTween;\n\t}\n\n\tprotected isAngularUniversalSSR: boolean;\n\n\tconstructor(protected readonly element: ElementRef,\n\t\tprotected readonly renderer: Renderer2,\n\t\tprotected readonly zone: NgZone,\n\t\tprotected changeDetectorRef: ChangeDetectorRef,\n\t\t@Inject(PLATFORM_ID) platformId: Object,\n\t\t@Optional() @Inject('virtual-scroller-default-options')\n\t\toptions: VirtualScrollerDefaultOptions) {\n\t\t\t\n\t\tthis.isAngularUniversalSSR = isPlatformServer(platformId);\n\n\t\tthis.scrollThrottlingTime = options.scrollThrottlingTime;\n\t\tthis.scrollDebounceTime = options.scrollDebounceTime;\n\t\tthis.scrollAnimationTime = options.scrollAnimationTime;\n\t\tthis.scrollbarWidth = options.scrollbarWidth;\n\t\tthis.scrollbarHeight = options.scrollbarHeight;\n\t\tthis.checkResizeInterval = options.checkResizeInterval;\n\t\tthis.resizeBypassRefreshThreshold = options.resizeBypassRefreshThreshold;\n\t\tthis.modifyOverflowStyleOfParentScroll = options.modifyOverflowStyleOfParentScroll;\n\t\tthis.stripedTable = options.stripedTable;\n\n\t\tthis.horizontal = false;\n\t\tthis.resetWrapGroupDimensions();\n\t}\n\t\n\tprotected getElementSize(element: HTMLElement) : ClientRect {\n\t\tlet result = element.getBoundingClientRect();\n\t\tlet styles = getComputedStyle(element);\n\t\tlet marginTop = parseInt(styles['margin-top'], 10) || 0;\n\t\tlet marginBottom = parseInt(styles['margin-bottom'], 10) || 0;\n\t\tlet marginLeft = parseInt(styles['margin-left'], 10) || 0;\n\t\tlet marginRight = parseInt(styles['margin-right'], 10) || 0;\n\t\t\n\t\treturn {\n\t\t\ttop: result.top + marginTop,\n\t\t\tbottom: result.bottom + marginBottom,\n\t\t\tleft: result.left + marginLeft,\n\t\t\tright: result.right + marginRight,\n\t\t\twidth: result.width + marginLeft + marginRight,\n\t\t\theight: result.height + marginTop + marginBottom,\n\t\t\ty:result.top +marginTop,\n\t\t\tx:result.left + marginLeft,\n\t\t\ttoJSON(): any {\n\t\t\t\tresult.toJSON();\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected previousScrollBoundingRect: ClientRect;\n\tprotected checkScrollElementResized(): void {\n\t\tlet boundingRect = this.getElementSize(this.getScrollElement());\n\n\t\tlet sizeChanged: boolean;\n\t\tif (!this.previousScrollBoundingRect) {\n\t\t\tsizeChanged = true;\n\t\t} else {\n\t\t\tlet widthChange = Math.abs(boundingRect.width - this.previousScrollBoundingRect.width);\n\t\t\tlet heightChange = Math.abs(boundingRect.height - this.previousScrollBoundingRect.height);\n\t\t\tsizeChanged = widthChange > this.resizeBypassRefreshThreshold || heightChange > this.resizeBypassRefreshThreshold;\n\t\t}\n\n\t\tif (sizeChanged) {\n\t\t\tthis.previousScrollBoundingRect = boundingRect;\n\t\t\tif (boundingRect.width > 0 && boundingRect.height > 0) {\n\t\t\t\tthis.refresh_internal(false);\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected _invisiblePaddingProperty;\n\tprotected _offsetType;\n\tprotected _scrollType;\n\tprotected _pageOffsetType;\n\tprotected _childScrollDim;\n\tprotected _translateDir;\n\tprotected _marginDir;\n\tprotected updateDirection(): void {\n\t\tif (this.horizontal) {\n\t\t\tthis._invisiblePaddingProperty = 'width';\n\t\t\tthis._offsetType = 'offsetLeft';\n\t\t\tthis._pageOffsetType = 'pageXOffset';\n\t\t\tthis._childScrollDim = 'childWidth';\n\t\t\tthis._marginDir = 'margin-left';\n\t\t\tthis._translateDir = 'translateX';\n\t\t\tthis._scrollType = 'scrollLeft';\n\t\t}\n\t\telse {\n\t\t\tthis._invisiblePaddingProperty = 'height';\n\t\t\tthis._offsetType = 'offsetTop';\n\t\t\tthis._pageOffsetType = 'pageYOffset';\n\t\t\tthis._childScrollDim = 'childHeight';\n\t\t\tthis._marginDir = 'margin-top';\n\t\t\tthis._translateDir = 'translateY';\n\t\t\tthis._scrollType = 'scrollTop';\n\t\t}\n\t}\n\n\tprotected debounce(func: Function, wait: number): Function {\n\t\tconst throttled = this.throttleTrailing(func, wait);\n\t\tconst result = function () {\n\t\t\tthrottled['cancel']();\n\t\t\tthrottled.apply(this, arguments);\n\t\t};\n\t\tresult['cancel'] = function () {\n\t\t\tthrottled['cancel']();\n\t\t};\n\n\t\treturn result;\n\t}\n\n\tprotected throttleTrailing(func: Function, wait: number): Function {\n\t\tlet timeout = undefined;\n\t\tlet _arguments = arguments;\n\t\tconst result = function () {\n\t\t\tconst _this = this;\n\t\t\t_arguments = arguments\n\n\t\t\tif (timeout) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (wait <= 0) {\n\t\t\t\tfunc.apply(_this, _arguments);\n\t\t\t} else {\n\t\t\t\ttimeout = setTimeout(function () {\n\t\t\t\t\ttimeout = undefined;\n\t\t\t\t\tfunc.apply(_this, _arguments);\n\t\t\t\t}, wait);\n\t\t\t}\n\t\t};\n\t\tresult['cancel'] = function () {\n\t\t\tif (timeout) {\n\t\t\t\tclearTimeout(timeout);\n\t\t\t\ttimeout = undefined;\n\t\t\t}\n\t\t};\n\n\t\treturn result;\n\t}\n\n\tprotected calculatedScrollbarWidth: number = 0;\n\tprotected calculatedScrollbarHeight: number = 0;\n\n\tprotected padding: number = 0;\n\tprotected previousViewPort: IViewport = <any>{};\n\tprotected currentTween: any;\n\tprotected cachedItemsLength: number;\n\n\tprotected disposeScrollHandler: () => void | undefined;\n\tprotected disposeResizeHandler: () => void | undefined;\n\n\tprotected refresh_internal(itemsArrayModified: boolean, refreshCompletedCallback: () => void = undefined, maxRunTimes: number = 2): void {\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).\n\t\t//The default of 2x max will probably be accurate enough without causing too large a performance bottleneck\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.\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.\n\n\t\tif (itemsArrayModified && this.previousViewPort && this.previousViewPort.scrollStartPosition > 0) {\n\t\t//if items were prepended, scroll forward to keep same items visible\n\t\t\tlet oldViewPort = this.previousViewPort;\n\t\t\tlet oldViewPortItems = this.viewPortItems;\n\t\t\t\n\t\t\tlet oldRefreshCompletedCallback = refreshCompletedCallback;\n\t\t\trefreshCompletedCallback = () => {\n\t\t\t\tlet scrollLengthDelta = this.previousViewPort.scrollLength - oldViewPort.scrollLength;\n\t\t\t\tif (scrollLengthDelta > 0 && this.viewPortItems) {\n\t\t\t\t\tlet oldStartItem = oldViewPortItems[0];\n\t\t\t\t\tlet oldStartItemIndex = this.items.findIndex(x => this.compareItems(oldStartItem, x));\n\t\t\t\t\tif (oldStartItemIndex > this.previousViewPort.startIndexWithBuffer) {\n\t\t\t\t\t\tlet itemOrderChanged = false;\n\t\t\t\t\t\tfor (let i = 1; i < this.viewPortItems.length; ++i) {\n\t\t\t\t\t\t\tif (!this.compareItems(this.items[oldStartItemIndex + i], oldViewPortItems[i])) {\n\t\t\t\t\t\t\t\titemOrderChanged = true;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (!itemOrderChanged) {\n\t\t\t\t\t\t\tthis.scrollToPosition(this.previousViewPort.scrollStartPosition + scrollLengthDelta , 0, oldRefreshCompletedCallback);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif (oldRefreshCompletedCallback) {\n\t\t\t\t\toldRefreshCompletedCallback();\n\t\t\t\t}\n\t\t\t};\n\t\t}\t\t\t\n\n\t\tthis.zone.runOutsideAngular(() => {\n\t\t\trequestAnimationFrame(() => {\n\n\t\t\t\tif (itemsArrayModified) {\n\t\t\t\t\tthis.resetWrapGroupDimensions();\n\t\t\t\t}\n\t\t\t\tlet viewport = this.calculateViewport();\n\n\t\t\t\tlet startChanged = itemsArrayModified || viewport.startIndex !== this.previousViewPort.startIndex;\n\t\t\t\tlet endChanged = itemsArrayModified || viewport.endIndex !== this.previousViewPort.endIndex;\n\t\t\t\tlet scrollLengthChanged = viewport.scrollLength !== this.previousViewPort.scrollLength;\n\t\t\t\tlet paddingChanged = viewport.padding !== this.previousViewPort.padding;\n\t\t\t\tlet scrollPositionChanged = viewport.scrollStartPosition !== this.previousViewPort.scrollStartPosition || viewport.scrollEndPosition !== this.previousViewPort.scrollEndPosition || viewport.maxScrollPosition !== this.previousViewPort.maxScrollPosition;\n\n\t\t\t\tthis.previousViewPort = viewport;\n\n\t\t\t\tif (scrollLengthChanged) {\n\t\t\t\t\tthis.renderer.setStyle(this.invisiblePaddingElementRef.nativeElement, this._invisiblePaddingProperty, `${viewport.scrollLength}px`);\n\t\t\t\t}\n\n\t\t\t\tif (paddingChanged) {\n\t\t\t\t\tif (this.useMarginInsteadOfTranslate) {\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, this._marginDir, `${viewport.padding}px`);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'transform', `${this._translateDir}(${viewport.padding}px)`);\n\t\t\t\t\t\tthis.renderer.setStyle(this.contentElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${viewport.padding}px)`);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this.headerElementRef) {\n\t\t\t\t\tlet scrollPosition = this.getScrollElement()[this._scrollType];\n\t\t\t\t\tlet containerOffset = this.getElementsOffset();\n\t\t\t\t\tlet offset = Math.max(scrollPosition - viewport.padding - containerOffset + this.headerElementRef.nativeElement.clientHeight, 0);\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'transform', `${this._translateDir}(${offset}px)`);\n\t\t\t\t\tthis.renderer.setStyle(this.headerElementRef.nativeElement, 'webkitTransform', `${this._translateDir}(${offset}px)`);\n\t\t\t\t}\n\n\t\t\t\tconst changeEventArg: IPageInfo = (startChanged || endChanged) ? {\n\t\t\t\t\tstartIndex: viewport.startIndex,\n\t\t\t\t\tendIndex: viewport.endIndex,\n\t\t\t\t\tscrollStartPosition: viewport.scrollStartPosition,\n\t\t\t\t\tscrollEndPosition: viewport.scrollEndPosition,\n\t\t\t\t\tstartIndexWithBuffer: viewport.startIndexWithBuffer,\n\t\t\t\t\tendIndexWithBuffer: viewport.endIndexWithBuffer,\n\t\t\t\t\tmaxScrollPosition: viewport.maxScrollPosition\n\t\t\t\t} : undefined;\n\n\n\t\t\t\tif (startChanged || endChanged || scrollPositionChanged) {\n\t\t\t\t\tconst handleChanged = () => {\n\t\t\t\t\t\t// update the scroll list to trigger re-render of components in viewport\n\t\t\t\t\t\tthis.viewPortItems = viewport.startIndexWithBuffer >= 0 && viewport.endIndexWithBuffer >= 0 ? this.items.slice(viewport.startIndexWithBuffer, viewport.endIndexWithBuffer + 1) : [];\n\t\t\t\t\t\tthis.vsUpdate.emit(this.viewPortItems);\n\n\t\t\t\t\t\tif (startChanged) {\n\t\t\t\t\t\t\tthis.vsStart.emit(changeEventArg);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (endChanged) {\n\t\t\t\t\t\t\tthis.vsEnd.emit(changeEventArg);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (startChanged || endChanged) {\n\t\t\t\t\t\t\tthis.changeDetectorRef.markForCheck();\n\t\t\t\t\t\t\tthis.vsChange.emit(changeEventArg);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (maxRunTimes > 0) {\n\t\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (refreshCompletedCallback) {\n\t\t\t\t\t\t\trefreshCompletedCallback();\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\n\t\t\t\t\tif (this.executeRefreshOutsideAngularZone) {\n\t\t\t\t\t\thandleChanged();\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.zone.run(handleChanged);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (maxRunTimes > 0 && (scrollLengthChanged || paddingChanged)) {\n\t\t\t\t\t\tthis.refresh_internal(false, refreshCompletedCallback, maxRunTimes - 1);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (refreshCompletedCallback) {\n\t\t\t\t\t\trefreshCompletedCallback();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tprotected getScrollElement(): HTMLElement {\n\t\treturn this.parentScroll instanceof Window ? document.scrollingElement || document.documentElement || document.body : this.parentScroll || this.element.nativeElement;\n\t}\n\n\tprotected addScrollEventHandlers(): void {\n\t\tif (this.isAngularUniversalSSR) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet scrollElement = this.getScrollElement();\n\n\t\tthis.removeScrollEventHandlers();\n\n\t\tthis.zone.runOutsideAngular(() => {\n\t\t\tif (this.parentScroll instanceof Window) {\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen('window', 'scroll', this.onScroll);\n\t\t\t\tthis.disposeResizeHandler = this.renderer.listen('window', 'resize', this.onScroll);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.disposeScrollHandler = this.renderer.listen(scrollElement, 'scroll', this.onScroll);\n\t\t\t\tif (this._checkResizeInterval > 0) {\n\t\t\t\t\tthis.checkScrollElementResizedTimer = <any>setInterval(() => { this.checkScrollElementResized(); }, this._checkResizeInterval);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tprotected removeScrollEventHandlers(): void {\n\t\tif (this.checkScrollElementResizedTimer) {\n\t\t\tclearInterval(this.checkScrollElementResizedTimer);\n\t\t}\n\n\t\tif (this.disposeScrollHandler) {\n\t\t\tthis.disposeScrollHandler();\n\t\t\tthis.disposeScrollHandler = undefined;\n\t\t}\n\n\t\tif (this.disposeResizeHandler) {\n\t\t\tthis.disposeResizeHandler();\n\t\t\tthis.disposeResizeHandler = undefined;\n\t\t}\n\t}\n\n\tprotected getElementsOffset(): number {\n\t\tif (this.isAngularUniversalSSR) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet offset = 0;\n\n\t\tif (this.containerElementRef && this.containerElementRef.nativeElement) {\n\t\t\toffset += this.containerElementRef.nativeElement[this._offsetType];\n\t\t}\n\n\t\tif (this.parentScroll) {\n\t\t\tlet scrollElement = this.getScrollElement();\n\t\t\tlet elementClientRect = this.getElementSize(this.element.nativeElement);\n\t\t\tlet scrollClientRect = this.getElementSize(scrollElement);\n\t\t\tif (this.horizontal) {\n\t\t\t\toffset += elementClientRect.left - scrollClientRect.left;\n\t\t\t}\n\t\t\telse {\n\t\t\t\toffset += elementClientRect.top - scrollClientRect.top;\n\t\t\t}\n\n\t\t\tif (!(this.parentScroll instanceof Window)) {\n\t\t\t\toffset += scrollElement[this._scrollType];\n\t\t\t}\n\t\t}\n\n\t\treturn offset;\n\t}\n\n\tprotected countItemsPerWrapGroup(): number {\n\t\tif (this.isAngularUniversalSSR) {\n\t\t\treturn Math.round(this.horizontal ? this.ssrViewportHeight / this.ssrChildHeight : this.ssrViewportWidth / this.ssrChildWidth);\n\t\t}\n\n\t\tlet propertyName = this.horizontal ? 'offsetLeft' : 'offsetTop';\n\t\tlet children = ((this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement).children;\n\n\t\tlet childrenLength = children ? children.length : 0;\n\t\tif (childrenLength === 0) {\n\t\t\treturn 1;\n\t\t}\n\n\t\tlet firstOffset = children[0][propertyName];\n\t\tlet result = 1;\n\t\twhile (result < childrenLength && firstOffset === children[result][propertyName]) {\n\t\t\t++result;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tprotected getScrollStartPosition(): number {\n\t\tlet windowScrollValue = undefined;\n\t\tif (this.parentScroll instanceof Window) {\n\t\t\twindowScrollValue = window[this._pageOffsetType];\n\t\t}\n\n\t\treturn windowScrollValue || this.getScrollElement()[this._scrollType] || 0;\n\t}\n\n\tprotected minMeasuredChildWidth: number;\n\tprotected minMeasuredChildHeight: number;\n\n\tprotected wrapGroupDimensions: WrapGroupDimensions;\n\n\tprotected resetWrapGroupDimensions(): void {\n\t\tconst oldWrapGroupDimensions = this.wrapGroupDimensions;\n\t\tthis.invalidateAllCachedMeasurements();\n\n\t\tif (!this.enableUnequalChildrenSizes || !oldWrapGroupDimensions || oldWrapGroupDimensions.numberOfKnownWrapGroupChildSizes === 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst itemsPerWrapGroup: number = this.countItemsPerWrapGroup();\n\t\tfor (let wrapGroupIndex = 0; wrapGroupIndex < oldWrapGroupDimensions.maxChildSizePerWrapGroup.length; ++wrapGroupIndex) {\n\t\t\tconst oldWrapGroupDimension: WrapGroupDimension = oldWrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\n\t\t\tif (!oldWrapGroupDimension || !oldWrapGroupDimension.items || !oldWrapGroupDimension.items.length) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (oldWrapGroupDimension.items.length !== itemsPerWrapGroup) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet itemsChanged = false;\n\t\t\tlet arrayStartIndex = itemsPerWrapGroup * wrapGroupIndex;\n\t\t\tfor (let i = 0; i < itemsPerWrapGroup; ++i) {\n\t\t\t\tif (!this.compareItems(oldWrapGroupDimension.items[i], this.items[arrayStartIndex + i])) {\n\t\t\t\t\titemsChanged = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!itemsChanged) {\n\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += oldWrapGroupDimension.childWidth || 0;\n\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += oldWrapGroupDimension.childHeight || 0;\n\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = oldWrapGroupDimension;\n\t\t\t}\n\t\t}\n\t}\n\n\tprotected calculateDimensions(): IDimensions {\n\t\tlet scrollElement = this.getScrollElement();\n\n\t\tconst maxCalculatedScrollBarSize: number = 25; // Note: Formula to auto-calculate doesn't work for ParentScroll, so we default to this if not set by consuming application\n\t\tthis.calculatedScrollbarHeight = Math.max(Math.min(scrollElement.offsetHeight - scrollElement.clientHeight, maxCalculatedScrollBarSize), this.calculatedScrollbarHeight);\n\t\tthis.calculatedScrollbarWidth = Math.max(Math.min(scrollElement.offsetWidth - scrollElement.clientWidth, maxCalculatedScrollBarSize), this.calculatedScrollbarWidth);\n\n\t\tlet viewportWidth = scrollElement.offsetWidth - (this.scrollbarWidth || this.calculatedScrollbarWidth || (this.horizontal ? 0 : maxCalculatedScrollBarSize));\n\t\tlet viewportHeight = scrollElement.offsetHeight - (this.scrollbarHeight || this.calculatedScrollbarHeight || (this.horizontal ? maxCalculatedScrollBarSize : 0));\n\n\t\tlet content = (this.containerElementRef && this.containerElementRef.nativeElement) || this.contentElementRef.nativeElement;\n\n\t\tlet itemsPerWrapGroup = this.countItemsPerWrapGroup();\n\t\tlet wrapGroupsPerPage;\n\n\t\tlet defaultChildWidth;\n\t\tlet defaultChildHeight;\n\n\t\tif (this.isAngularUniversalSSR) {\n\t\t\tviewportWidth = this.ssrViewportWidth;\n\t\t\tviewportHeight = this.ssrViewportHeight;\n\t\t\tdefaultChildWidth = this.ssrChildWidth;\n\t\t\tdefaultChildHeight = this.ssrChildHeight;\n\t\t\tlet itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\n\t\t\tlet itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\n\t\t}\n\t\telse if (!this.enableUnequalChildrenSizes) {\n\t\t\tif (content.children.length > 0) {\n\t\t\t\tif (!this.childWidth || !this.childHeight) {\n\t\t\t\t\tif (!this.minMeasuredChildWidth && viewportWidth > 0) {\n\t\t\t\t\t\tthis.minMeasuredChildWidth = viewportWidth;\n\t\t\t\t\t}\n\t\t\t\t\tif (!this.minMeasuredChildHeight && viewportHeight > 0) {\n\t\t\t\t\t\tthis.minMeasuredChildHeight = viewportHeight;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tlet child = content.children[0];\n\t\t\t\tlet clientRect = this.getElementSize(child);\n\t\t\t\tthis.minMeasuredChildWidth = Math.min(this.minMeasuredChildWidth, clientRect.width);\n\t\t\t\tthis.minMeasuredChildHeight = Math.min(this.minMeasuredChildHeight, clientRect.height);\n\t\t\t}\n\n\t\t\tdefaultChildWidth = this.childWidth || this.minMeasuredChildWidth || viewportWidth;\n\t\t\tdefaultChildHeight = this.childHeight || this.minMeasuredChildHeight || viewportHeight;\n\t\t\tlet itemsPerRow = Math.max(Math.ceil(viewportWidth / defaultChildWidth), 1);\n\t\t\tlet itemsPerCol = Math.max(Math.ceil(viewportHeight / defaultChildHeight), 1);\n\t\t\twrapGroupsPerPage = this.horizontal ? itemsPerRow : itemsPerCol;\n\t\t} else {\n\t\t\tlet scrollOffset = scrollElement[this._scrollType] - (this.previousViewPort ? this.previousViewPort.padding : 0);\n\n\t\t\tlet arrayStartIndex = this.previousViewPort.startIndexWithBuffer || 0;\n\t\t\tlet wrapGroupIndex = Math.ceil(arrayStartIndex / itemsPerWrapGroup);\n\n\t\t\tlet maxWidthForWrapGroup = 0;\n\t\t\tlet maxHeightForWrapGroup = 0;\n\t\t\tlet sumOfVisibleMaxWidths = 0;\n\t\t\tlet sumOfVisibleMaxHeights = 0;\n\t\t\twrapGroupsPerPage = 0;\n\n\t\t\tfor (let i = 0; i < content.children.length; ++i) {\n\t\t\t\t++arrayStartIndex;\n\t\t\t\tlet child = content.children[i];\n\t\t\t\tlet clientRect = this.getElementSize(child);\n\n\t\t\t\tmaxWidthForWrapGroup = Math.max(maxWidthForWrapGroup, clientRect.width);\n\t\t\t\tmaxHeightForWrapGroup = Math.max(maxHeightForWrapGroup, clientRect.height);\n\n\t\t\t\tif (arrayStartIndex % itemsPerWrapGroup === 0) {\n\t\t\t\t\tlet oldValue = this.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex];\n\t\t\t\t\tif (oldValue) {\n\t\t\t\t\t\t--this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths -= oldValue.childWidth || 0;\n\t\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights -= oldValue.childHeight || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\t++this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\t\t\tconst items = this.items.slice(arrayStartIndex - itemsPerWrapGroup, arrayStartIndex);\n\t\t\t\t\tthis.wrapGroupDimensions.maxChildSizePerWrapGroup[wrapGroupIndex] = {\n\t\t\t\t\t\tchildWidth: maxWidthForWrapGroup,\n\t\t\t\t\t\tchildHeight: maxHeightForWrapGroup,\n\t\t\t\t\t\titems: items\n\t\t\t\t\t};\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths += maxWidthForWrapGroup;\n\t\t\t\t\tthis.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights += maxHeightForWrapGroup;\n\n\t\t\t\t\tif (this.horizontal) {\n\t\t\t\t\t\tlet maxVisibleWidthForWrapGroup = Math.min(maxWidthForWrapGroup, Math.max(viewportWidth - sumOfVisibleMaxWidths, 0));\n\t\t\t\t\t\tif (scrollOffset > 0) {\n\t\t\t\t\t\t\tlet scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleWidthForWrapGroup);\n\t\t\t\t\t\t\tmaxVisibleWidthForWrapGroup -= scrollOffsetToRemove;\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsumOfVisibleMaxWidths += maxVisibleWidthForWrapGroup;\n\t\t\t\t\t\tif (maxVisibleWidthForWrapGroup > 0 && viewportWidth >= sumOfVisibleMaxWidths) {\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet maxVisibleHeightForWrapGroup = Math.min(maxHeightForWrapGroup, Math.max(viewportHeight - sumOfVisibleMaxHeights, 0));\n\t\t\t\t\t\tif (scrollOffset > 0) {\n\t\t\t\t\t\t\tlet scrollOffsetToRemove = Math.min(scrollOffset, maxVisibleHeightForWrapGroup);\n\t\t\t\t\t\t\tmaxVisibleHeightForWrapGroup -= scrollOffsetToRemove;\n\t\t\t\t\t\t\tscrollOffset -= scrollOffsetToRemove;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tsumOfVisibleMaxHeights += maxVisibleHeightForWrapGroup;\n\t\t\t\t\t\tif (maxVisibleHeightForWrapGroup > 0 && viewportHeight >= sumOfVisibleMaxHeights) {\n\t\t\t\t\t\t\t++wrapGroupsPerPage;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t++wrapGroupIndex;\n\n\t\t\t\t\tmaxWidthForWrapGroup = 0;\n\t\t\t\t\tmaxHeightForWrapGroup = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet averageChildWidth = this.wrapGroupDimensions.sumOfKnownWrapGroupChildWidths / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\tlet averageChildHeight = this.wrapGroupDimensions.sumOfKnownWrapGroupChildHeights / this.wrapGroupDimensions.numberOfKnownWrapGroupChildSizes;\n\t\t\tdefaultChildWidth = this.childWidth || averageChildWidth || viewportWidth;\n\t\t\tdefaultChildHeight = this.childHeight || averageChildHeight || viewportHeight;\n\n\t\t\tif (this.horizontal) {\n\t\t\t\tif (viewportWidth > sumOfVisibleMaxWidths) {\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportWidth - sumOfVisibleMaxWidths) / defaultChildWidth);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (viewportHeight > sumOfVisibleMaxHeights) {\n\t\t\t\t\twrapGroupsPerPage += Math.ceil((viewportHeight - sumOfVisibleMaxHeights) / defaultChildHeight);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet itemCount = this.items.length;\n\t\tlet itemsPerPage = itemsPerWrapGroup * wrapGroupsPerPage;\n\t\tlet pageCount_fractional = itemCount / itemsPerPage;\n\t\tlet numberOfWrapGroups = Math.ceil(itemCount / itemsPerWrapGroup);\n\n\t\tlet scrollLength = 0;\n\n\t\tlet defaultScrollLengthPerWrapGroup = this.horizontal ? defaultChildWidth : defaultChildHeight;\n\t\tif (this.enableUnequalChildrenSizes) {\n\t\t\tlet numUnknownChildSizes = 0;\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\n\t\t\t\tlet childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\n\t\t\t\tif (childSize) {\n\t\t\t\t\tscrollLength += childSize;\n\t\t\t\t} else {\n\t\t\t\t\t++numUnknownChildSizes;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tscrollLength += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\n\t\t} else {\n\t\t\tscrollLength = numberOfWrapGroups * defaultScrollLengthPerWrapGroup;\n\t\t}\n\n\t\tif (this.headerElementRef) {\n\t\t\tscrollLength += this.headerElementRef.nativeElement.clientHeight;\n\t\t}\n\n\t\tlet viewportLength = this.horizontal ? viewportWidth : viewportHeight;\n\t\tlet maxScrollPosition = Math.max(scrollLength - viewportLength, 0);\n\n\t\treturn {\n\t\t\titemCount: itemCount,\n\t\t\titemsPerWrapGroup: itemsPerWrapGroup,\n\t\t\twrapGroupsPerPage: wrapGroupsPerPage,\n\t\t\titemsPerPage: itemsPerPage,\n\t\t\tpageCount_fractional: pageCount_fractional,\n\t\t\tchildWidth: defaultChildWidth,\n\t\t\tchildHeight: defaultChildHeight,\n\t\t\tscrollLength: scrollLength,\n\t\t\tviewportLength: viewportLength,\n\t\t\tmaxScrollPosition: maxScrollPosition\n\t\t};\n\t}\n\n\tprotected cachedPageSize: number = 0;\n\tprotected previousScrollNumberElements: number = 0;\n\n\tprotected calculatePadding(arrayStartIndexWithBuffer: number, dimensions: IDimensions): number {\n\t\tif (dimensions.itemCount === 0) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tlet defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\n\t\tlet startingWrapGroupIndex = Math.floor(arrayStartIndexWithBuffer / dimensions.itemsPerWrapGroup) || 0;\n\n\t\tif (!this.enableUnequalChildrenSizes) {\n\t\t\treturn defaultScrollLengthPerWrapGroup * startingWrapGroupIndex;\n\t\t}\n\n\t\tlet numUnknownChildSizes = 0;\n\t\tlet result = 0;\n\t\tfor (let i = 0; i < startingWrapGroupIndex; ++i) {\n\t\t\tlet childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\n\t\t\tif (childSize) {\n\t\t\t\tresult += childSize;\n\t\t\t} else {\n\t\t\t\t++numUnknownChildSizes;\n\t\t\t}\n\t\t}\n\t\tresult += Math.round(numUnknownChildSizes * defaultScrollLengthPerWrapGroup);\n\n\t\treturn result;\n\t}\n\n\tprotected calculatePageInfo(scrollPosition: number, dimensions: IDimensions): IPageInfo {\n\t\tlet scrollPercentage = 0;\n\t\tif (this.enableUnequalChildrenSizes) {\n\t\t\tconst numberOfWrapGroups = Math.ceil(dimensions.itemCount / dimensions.itemsPerWrapGroup);\n\t\t\tlet totalScrolledLength = 0;\n\t\t\tlet defaultScrollLengthPerWrapGroup = dimensions[this._childScrollDim];\n\t\t\tfor (let i = 0; i < numberOfWrapGroups; ++i) {\n\t\t\t\tlet childSize = this.wrapGroupDimensions.maxChildSizePerWrapGroup[i] && this.wrapGroupDimensions.maxChildSizePerWrapGroup[i][this._childScrollDim];\n\t\t\t\tif (childSize) {\n\t\t\t\t\ttotalScrolledLength += childSize;\n\t\t\t\t} else {\n\t\t\t\t\ttotalScrolledLength += defaultScrollLengthPerWrapGroup;\n\t\t\t\t}\n\n\t\t\t\tif (scrollPosition < totalScrolledLength) {\n\t\t\t\t\tscrollPercentage = i / numberOfWrapGroups;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tscrollPercentage = scrollPosition / dimensions.scrollLength;\n\t\t}\n\n\t\tlet startingArrayIndex_fractional = Math.min(Math.max(scrollPercentage * dimensions.pageCount_fractional, 0), dimensions.pageCount_fractional) * dimensions.itemsPerPage;\n\n\t\tlet maxStart = dimensions.itemCount - dimensions.itemsPerPage - 1;\n\t\tlet arrayStartIndex = Math.min(Math.floor(startingArrayIndex_fractional), maxStart);\n\t\tarrayStartIndex -= arrayStartIndex % dimensions.itemsPerWrapGroup; // round down to start of wrapGroup\n\n\t\tif (this.stripedTable) {\n\t\t\tlet bufferBoundary = 2 * dimensions.itemsPerWrapGroup;\n\t\t\tif (arrayStartIndex % bufferBoundary !== 0) {\n\t\t\t\tarrayStartIndex = Math.max(arrayStartIndex - arrayStartIndex % bufferBoundary, 0);\n\t\t\t}\n\t\t}\n\n\t\tlet arrayEndIndex = Math.ceil(startingArrayIndex_fractional) + dimensions.itemsPerPage - 1;\n\t\tlet endIndexWithinWrapGroup = (arrayEndIndex + 1) % dimensions.itemsPerWrapGroup;\n\t\tif (endIndexWithinWrapGroup > 0) {\n\t\t\tarrayEndIndex += dimensions.itemsPerWrapGroup - endIndexWithinWrapGroup; // round up to end of wrapGroup\n\t\t}\n\n\t\tif (isNaN(arrayStartIndex)) {\n\t\t\tarrayStartIndex = 0;\n\t\t}\n\t\tif (isNaN(arrayEndIndex)) {\n\t\t\tarrayEndIndex = 0;\n\t\t}\n\n\t\tarrayStartIndex = Math.min(Math.max(arrayStartIndex, 0), dimensions.itemCount - 1);\n\t\tarrayEndIndex = Math.min(Math.max(arrayEndIndex, 0), dimensions.itemCount - 1);\n\n\t\tlet bufferSize = this.bufferAmount * dimensions.itemsPerWrapGroup;\n\t\tlet startIndexWithBuffer = Math.min(Math.max(arrayStartIndex - bufferSize, 0), dimensions.itemCount - 1);\n\t\tlet endIndexWithBuffer = Math.min(Math.max(arrayEndIndex + bufferSize, 0), dimensions.itemCount - 1);\n\n\t\treturn {\n\t\t\tstartIndex: arrayStartIndex,\n\t\t\tendIndex: arrayEndIndex,\n\t\t\tstartIndexWithBuffer: startIndexWithBuffer,\n\t\t\tendIndexWithBuffer: endIndexWithBuffer,\n\t\t\tscrollStartPosition: scrollPosition,\n\t\t\tscrollEndPosition: scrollPosition + dimensions.viewportLength,\n\t\t\tmaxScrollPosition: dimensions.maxScrollPosition\n\t\t};\n\t}\n\n\tprotected calculateViewport(): IViewport {\n\t\tlet dimensions = this.calculateDimensions();\n\t\tlet offset = this.getElementsOffset();\n\n\t\tlet scrollStartPosition = this.getScrollStartPosition();\n\t\tif (scrollStartPosition > (dimensions.scrollLength + offset) && !(this.parentScroll instanceof Window)) {\n\t\t\tscrollStartPosition = dimensions.scrollLength;\n\t\t} else {\n\t\t\tscrollStartPosition -= offset;\n\t\t}\n\t\tscrollStartPosition = Math.max(0, scrollStartPosition);\n\n\t\tlet pageInfo = this.calculatePageInfo(scrollStartPosition, dimensions);\n\t\tlet newPadding = this.calculatePadding(pageInfo.startIndexWithBuffer, dimensions);\n\t\tlet newScrollLength = dimensions.scrollLength;\n\n\t\treturn {\n\t\t\tstartIndex: pageInfo.startIndex,\n\t\t\tendIndex: pageInfo.endIndex,\n\t\t\tstartIndexWithBuffer: pageInfo.startIndexWithBuffer,\n\t\t\tendIndexWithBuffer: pageInfo.endIndexWithBuffer,\n\t\t\tpadding: Math.round(newPadding),\n\t\t\tscrollLength: Math.round(newScrollLength),\n\t\t\tscrollStartPosition: pageInfo.scrollStartPosition,\n\t\t\tscrollEndPosition: pageInfo.scrollEndPosition,\n\t\t\tmaxScrollPosition: pageInfo.maxScrollPosition\n\t\t};\n\t}\n}\n\n@NgModule({\n\texports: [VirtualScrollerComponent],\n\tdeclarations: [VirtualScrollerComponent],\n\timports: [CommonModule],\n\tproviders: [\n\t\t{\n\t\t\tprovide: 'virtual-scroller-default-options',\n\t\t\tuseFactory: VIRTUAL_SCROLLER_DEFAULT_OPTIONS_FACTORY\n\t\t}\n\t]\n})\nexport class VirtualScrollerModule { }","import { Component, OnInit, HostListener, ChangeDetectionStrategy, OnDestroy, NgModule, SimpleChanges, OnChanges, ChangeDetectorRef, AfterViewChecked, ViewEncapsulation, ContentChild, ViewChild, forwardRef, Input, Output, EventEmitter, ElementRef, AfterViewInit, Pipe, PipeTransform } from '@angular/core';\nimport { FormsModule, NG_VALUE_ACCESSOR, ControlValueAccessor, NG_VALIDATORS, Validator, UntypedFormControl } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MyException } from './multiselect.model';\nimport { DropdownSettings } from './multiselect.interface';\nimport { ClickOutsideDirective, ScrollDirective, styleDirective, setPosition } from './clickOutside';\nimport { ListFilterPipe } from './list-filter';\nimport { Item, Badge, Search, TemplateRenderer, CIcon } from './menu-item';\nimport { DataService } from './multiselect.service';\nimport { Subscription, Subject } from 'rxjs';\nimport { VirtualScrollerModule, VirtualScrollerComponent } from './virtual-scroll/virtual-scroll';\nimport { map, debounceTime, distinctUntilChanged, switchMap, tap } from 'rxjs/operators';\n\nexport const DROPDOWN_CONTROL_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => AngularMultiSelect),\n    multi: true\n};\nexport const DROPDOWN_CONTROL_VALIDATION: any = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => AngularMultiSelect),\n    multi: true,\n}\nconst noop = () => {\n};\n\n@Component({\n    selector: 'angular2-multiselect',\n    templateUrl: './multiselect.component.html',\n    host: { '[class]': 'defaultSettings.classes' },\n    styleUrls: ['./multiselect.component.scss'],\n    providers: [DROPDOWN_CONTROL_VALUE_ACCESSOR, DROPDOWN_CONTROL_VALIDATION],\n    encapsulation: ViewEncapsulation.None,\n})\n\nexport class AngularMultiSelect implements OnInit, ControlValueAccessor, OnChanges, Validator, AfterViewChecked, OnDestroy {\n\n    @Input()\n    data: Array<any>;\n\n    @Input()\n    settings: DropdownSettings;\n\n    @Input()\n    loading: boolean;\n\n    @Output('onSelect')\n    onSelect: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onDeSelect')\n    onDeSelect: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onSelectAll')\n    onSelectAll: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n    @Output('onDeSelectAll')\n    onDeSelectAll: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n    @Output('onOpen')\n    onOpen: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onClose')\n    onClose: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onScrollToEnd')\n    onScrollToEnd: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onFilterSelectAll')\n    onFilterSelectAll: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n    @Output('onFilterDeSelectAll')\n    onFilterDeSelectAll: EventEmitter<Array<any>> = new EventEmitter<Array<any>>();\n\n    @Output('onAddFilterNewItem')\n    onAddFilterNewItem: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onGroupSelect')\n    onGroupSelect: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output('onGroupDeSelect')\n    onGroupDeSelect: EventEmitter<any> = new EventEmitter<any>();\n\n    @ContentChild(Item, { static: false }) itemTempl: Item;\n    @ContentChild(Badge, { static: false }) badgeTempl: Badge;\n    @ContentChild(Search, { static: false }) searchTempl: Search;\n\n\n    @ViewChild('searchInput', { static: false }) searchInput: ElementRef;\n    @ViewChild('selectedList', { static: false }) selectedListElem: ElementRef;\n    @ViewChild('dropdownList', { static: false }) dropdownListElem: ElementRef;\n    @ViewChild('cuppaDropdown', { static: false }) cuppaDropdown: ElementRef;\n\n    @HostListener('document:keyup.escape', ['$event'])\n    onEscapeDown(event: KeyboardEvent) {\n        if (this.settings.escapeToClose) {\n            this.closeDropdown();\n        }\n    }\n\n    @HostListener('window:scroll', ['$event'])\n    onScroll(event: any) {\n        if (this.isActive && this.settings.tagToBody) {\n            this.closeDropdown();\n            /*             const elem = this.cuppaDropdown.nativeElement;\n                        if(this.settings.autoPosition){\n                            this.dropDownTop = elem.getBoundingClientRect().y + elem.clientHeight + 1;\n                        }\n                        this.dropDownLeft = elem.getBoundingClientRect().x; */\n        }\n    }\n\n    virtualdata: any = [];\n    searchTerm$ = new Subject<string>();\n\n    public selectedItems: Array<any>;\n    public isActive: boolean = false;\n    public isSelectAll: boolean = false;\n    public isFilterSelectAll: boolean = false;\n    public isInfiniteFilterSelectAll: boolean = false;\n    public groupedData: Array<any>;\n    filter: any;\n    public chunkArray: any[];\n    public scrollTop: any;\n    public chunkIndex: any[] = [];\n    public cachedItems: any[] = [];\n    public groupCachedItems: any[] = [];\n    public totalRows: any;\n    public itemHeight: any = 41.6;\n    public screenItemsLen: any;\n    public cachedItemsLen: any;\n    public totalHeight: any;\n    public scroller: any;\n    public maxBuffer: any;\n    public lastScrolled: any;\n    public lastRepaintY: any;\n    public selectedListHeight: any;\n    public filterLength: any = 0;\n    public infiniteFilterLength: any = 0;\n    public viewPortItems: any;\n    public item: any;\n    public dropdownListYOffset: number = 0;\n    subscription: Subscription;\n    public dropDownWidth: number = 0;\n    public dropDownTop: any = '';\n    public dropDownBottom: any = 'unset';\n    public dropDownLeft: number = 0;\n    public id: any = Math.random().toString(36).substring(2)\n    defaultSettings: DropdownSettings = {\n        singleSelection: false,\n        text: 'Select',\n        enableCheckAll: true,\n        selectAllText: 'Select All',\n        unSelectAllText: 'UnSelect All',\n        filterSelectAllText: 'Select all filtered results',\n        filterUnSelectAllText: 'UnSelect all filtered results',\n        enableSearchFilter: false,\n        searchBy: [],\n        maxHeight: 300,\n        badgeShowLimit: 999999999999,\n        classes: '',\n        disabled: false,\n        searchPlaceholderText: 'Search',\n        showCheckbox: true,\n        noDataLabel: 'No Data Available',\n        searchAutofocus: true,\n        lazyLoading: false,\n        labelKey: 'itemName',\n        primaryKey: 'id',\n        position: 'bottom',\n        autoPosition: true,\n        enableFilterSelectAll: true,\n        selectGroup: false,\n        addNewItemOnFilter: false,\n        addNewButtonText: \"Add\",\n        escapeToClose: true,\n        clearAll: true,\n        tagToBody: true\n    }\n    randomSize: boolean = true;\n    public parseError: boolean;\n    public filteredList: any = [];\n    virtualScroollInit: boolean = false;\n    @ViewChild(VirtualScrollerComponent, { static: false })\n    private virtualScroller: VirtualScrollerComponent;\n    public isDisabledItemPresent = false;\n\n    constructor(public _elementRef: ElementRef, private cdr: ChangeDetectorRef, private filterPipe: ListFilterPipe) {\n        this.searchTerm$.asObservable().pipe(\n            debounceTime(1000),\n            distinctUntilChanged(),\n            tap(term => term)\n        ).subscribe(val => {\n            this.filterInfiniteList(val);\n        });\n    }\n    ngOnInit() {\n        this.settings = Object.assign(this.defaultSettings, this.settings);\n\n        this.cachedItems = this.cloneArray(this.data);\n        if (this.settings.position == 'top') {\n            setTimeout(() => {\n                this.selectedListHeight = { val: 0 };\n                this.selectedListHeight.val = this.selectedListElem.nativeElement.clientHeight;\n            });\n        }\n        setTimeout(() => {\n            this.calculateDropdownDirection();\n        });\n        this.virtualScroollInit = false;\n    }\n    onKeyUp(evt: any){\n        this.searchTerm$.next((<HTMLInputElement>evt.target).value);\n    }\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.data && !changes.data.firstChange) {\n            if (this.settings.groupBy) {\n                this.groupedData = this.transformData(this.data, this.settings.groupBy);\n                if (this.data.length == 0) {\n                    this.selectedItems = [];\n                }\n                this.groupCachedItems = this.cloneArray(this.groupedData);\n            }\n            this.cachedItems = this.cloneArray(this.data);\n        }\n        if (changes.settings && !changes.settings.firstChange) {\n            this.settings = Object.assign(this.defaultSettings, this.settings);\n        }\n        if (changes.loading) {\n        }\n        if (this.settings.lazyLoading && this.virtualScroollInit && changes.data) {\n            this.virtualdata = changes.data.currentValue;\n        }\n    }\n    ngDoCheck() {\n        if (this.selectedItems) {\n            if (this.selectedItems.length == 0 || this.data.length == 0 || this.selectedItems.length < this.data.length) {\n                this.isSelectAll = false;\n            }\n        }\n    }\n    ngAfterViewInit() {\n        if (this.settings.lazyLoading) {\n            // this._elementRef.nativeElement.getElementsByClassName(\"lazyContainer\")[0].addEventListener('scroll', this.onScroll.bind(this));\n        }\n    }\n    ngAfterViewChecked() {\n        if (this.selectedListElem.nativeElement.clientHeight && this.settings.position == 'top' && this.selectedListHeight) {\n            this.selectedListHeight.val = this.selectedListElem.nativeElement.clientHeight;\n            this.cdr.detectChanges();\n        }\n        //this.calculateDropdownDirection();\n    }\n    onItemClick(item: any, index: number, evt: Event) {\n        if (item.disabled) {\n            return;\n        }\n\n        if (this.settings.disabled) {\n            return;\n        }\n\n        let found = this.isSelected(item);\n        let limit = this.selectedItems.length < this.settings.limitSelection ? true : false;\n\n        if (!found) {\n            if (this.settings.limitSelection) {\n                if (limit) {\n                    this.addSelected(item);\n                    this.onSelect.emit(item);\n                }\n            }\n            else {\n                this.addSelected(item);\n                this.onSelect.emit(item);\n            }\n\n        }\n        else {\n            this.removeSelected(item);\n            this.onDeSelect.emit(item);\n        }\n        if (this.isSelectAll || this.data.length > this.selectedItems.length) {\n            this.isSelectAll = false;\n        }\n\n        if (this.data.length == this.selectedItems.length) {\n            this.isSelectAll = true;\n        }\n        if (this.settings.groupBy) {\n            this.updateGroupInfo(item);\n        }\n\n\n    }\n    public validate(c: UntypedFormControl): any {\n        return null;\n    }\n    private onTouchedCallback: (_: any) => void = noop;\n    private onChangeCallback: (_: any) => void = noop;\n\n    writeValue(value: any) {\n        if (value !== undefined && value !== null && value !== '') {\n            if (this.settings.singleSelection) {\n                if (this.settings.groupBy) {\n                    this.groupedData = this.transformData(this.data, this.settings.groupBy);\n                    this.groupCachedItems = this.cloneArray(this.groupedData);\n                    this.selectedItems = [value[0]];\n                } else {\n                    try {\n\n                        if (value.length > 1) {\n                            this.selectedItems = [value[0]];\n                            throw new MyException(404, { \"msg\": \"Single Selection Mode, Selected Items cannot have more than one item.\" });\n                        }\n                        else {\n                            this.selectedItems = value;\n                        }\n                    }\n                    catch (e) {\n                        console.error(e.body.msg);\n                    }\n                }\n\n            }\n            else {\n                if (this.settings.limitSelection) {\n                    this.selectedItems = value.slice(0, this.settings.limitSelection);\n                }\n                else {\n                    this.selectedItems = value;\n                }\n                if (this.selectedItems!=null && this.selectedItems.length === this.data.length && this.data.length > 0) {\n                    this.isSelectAll = true;\n                }\n                if (this.settings.groupBy) {\n                    this.groupedData = this.transformData(this.data, this.settings.groupBy);\n                    this.groupCachedItems = this.cloneArray(this.groupedData);\n                }\n            }\n        } else {\n            this.selectedItems = [];\n        }\n    }\n\n    //From ControlValueAccessor interface\n    registerOnChange(fn: any) {\n        this.onChangeCallback = fn;\n    }\n\n    //From ControlValueAccessor interface\n    registerOnTouched(fn: any) {\n        this.onTouchedCallback = fn;\n    }\n    trackByFn(index: number, item: any) {\n        return item[this.settings.primaryKey];\n    }\n    isSelected(clickedItem: any) {\n        if (clickedItem.disabled) {\n            return false;\n        }\n        let found = false;\n        this.selectedItems && this.selectedItems.forEach(item => {\n            if (clickedItem[this.settings.primaryKey] === item[this.settings.primaryKey]) {\n                found = true;\n            }\n        });\n        return found;\n    }\n    addSelected(item: any) {\n        if (item.disabled) {\n            return;\n        }\n        if (this.settings.singleSelection) {\n            this.selectedItems = [];\n            this.selectedItems.push(item);\n            this.closeDropdown();\n        }\n        else\n            this.selectedItems = [...this.selectedItems, item];\n        this.onChangeCallback(this.selectedItems);\n        this.onTouchedCallback(this.selectedItems);\n    }\n    removeSelected(clickedItem: any) {\n        this.selectedItems && this.selectedItems.forEach(item => {\n            if (clickedItem[this.settings.primaryKey] === item[this.settings.primaryKey]) {\n                this.selectedItems.splice(this.selectedItems.indexOf(item), 1);\n            }\n        });\n        this.onChangeCallback(this.selectedItems);\n        this.onTouchedCallback(this.selectedItems);\n    }\n    toggleDropdown(evt: any) {\n        if (this.settings.disabled) {\n            return;\n        }\n        this.isActive = !this.isActive;\n        if (this.isActive) {\n            this.openDropdown()\n        }\n        else {\n            this.closeDropdown()\n        }\n        if (this.settings.lazyLoading) {\n            this.virtualdata = this.data;\n            this.virtualScroollInit = true;\n        }\n        evt.preventDefault();\n    }\n    public openDropdown() {\n        if (this.settings.disabled) {\n            return;\n        }\n        this.isActive = true;\n        this.calculateDropdownDirection();\n        if (this.settings.searchAutofocus && this.searchInput && this.settings.enableSearchFilter && !this.searchTempl) {\n            setTimeout(() => {\n                this.searchInput.nativeElement.focus();\n            }, 0);\n        }\n        this.onOpen.emit(true);\n    }\n    public closeDropdown() {\n        if (this.searchInput && this.settings.lazyLoading) {\n            this.searchInput.nativeElement.value = \"\";\n        }\n        if (this.searchInput) {\n            this.searchInput.nativeElement.value = \"\";\n        }\n        this.filter = \"\";\n        this.isActive = false;\n        this.searchTerm$.next('');\n        this.onClose.emit(false);\n    }\n    public closeDropdownOnClickOut() {\n        if (this.isActive) {\n            if (this.searchInput && this.settings.lazyLoading) {\n                this.searchInput.nativeElement.value = \"\";\n            }\n            if (this.searchInput) {\n                this.searchInput.nativeElement.value = \"\";\n            }\n            this.filter = \"\";\n            this.isActive = false;\n            this.clearSearch();\n            this.searchTerm$.next('');\n            this.onClose.emit(false);\n        }\n    }\n    toggleSelectAll(event) {\n        if (!this.isSelectAll) {\n            this.selectedItems = [];\n            if (this.settings.groupBy) {\n                this.groupedData.forEach((obj) => {\n                    obj.selected = !obj.disabled;\n                })\n                this.groupCachedItems.forEach((obj) => {\n                    obj.selected = !obj.disabled;\n                })\n            }\n            // this.selectedItems = this.data.slice();\n            this.selectedItems = this.data.filter((individualData) => !individualData.disabled);\n            this.isSelectAll = true;\n            this.onChangeCallback(this.selectedItems);\n            this.onTouchedCallback(this.selectedItems);\n\n            this.onSelectAll.emit(this.selectedItems);\n        }\n        else {\n            if (this.settings.groupBy) {\n                this.groupedData.forEach((obj) => {\n                    obj.selected = false;\n                });\n                this.groupCachedItems.forEach((obj) => {\n                    obj.selected = false;\n                })\n            }\n            this.selectedItems = [];\n            this.isSelectAll = false;\n            this.onChangeCallback(this.selectedItems);\n            this.onTouchedCallback(this.selectedItems);\n\n            this.onDeSelectAll.emit(this.selectedItems);\n        }\n        setTimeout(() => {\n            this.calculateDropdownDirection();\n        });\n        event.stopPropagation();\n    }\n    filterGroupedList() {\n        if (this.filter == \"\" || this.filter == null) {\n            this.clearSearch();\n            return;\n        }\n        this.groupedData = this.cloneArray(this.groupCachedItems);\n        this.groupedData = this.groupedData.filter(obj => {\n            let arr = [];\n            if (obj[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1) {\n                arr = obj.list;\n            }\n            else {\n                arr = obj.list.filter(t => {\n                    return t[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1;\n                });\n            }\n\n            obj.list = arr;\n            if (obj[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1) {\n                return arr;\n            }\n            else {\n                return arr.some(cat => {\n                    return cat[this.settings.labelKey].toLowerCase().indexOf(this.filter.toLowerCase()) > -1;\n                }\n                )\n            }\n\n        });\n    }\n    toggleFilterSelectAll() {\n        if (!this.isFilterSelectAll) {\n            let added = [];\n            if (this.settings.groupBy) {\n                this.groupedData.forEach((item: any) => {\n                    item.sele\n                    if (item.list) {\n                        item.list.forEach((el: any) => {\n                            if (!this.isSelected(el)) {\n                                this.addSelected(el);\n                                added.push(el);\n                            }\n                        });\n                    }\n                    this.updateGroupInfo(item);\n\n                });\n\n                this.filteredList.forEach((el: any) => {\n                    if (!this.isSelected(el) && !el.hasOwnProperty('grpTitle')) {\n                        this.addSelected(el);\n                        added.push(el);\n                    }\n                });\n\n            }\n            else {\n                this.filteredList.forEach((item: any) => {\n                    if (!this.isSelected(item)) {\n                        this.addSelected(item);\n                        added.push(item);\n                    }\n\n                });\n            }\n\n            this.isFilterSelectAll = true;\n            this.onFilterSelectAll.emit(added);\n        }\n        else {\n            let removed = [];\n            if (this.settings.groupBy) {\n                this.groupedData.forEach((item: any) => {\n                    if (item.list) {\n                        item.list.forEach((el: any) => {\n                            if (this.isSelected(el)) {\n                                this.removeSelected(el);\n                                removed.push(el);\n                            }\n                        });\n                    }\n                    this.updateGroupInfo(item);\n                });\n                this.filteredList.forEach((el: any) => {\n                    if (this.isSelected(el)) {\n                        this.removeSelected(el);\n                        removed.push(el);\n                    }\n                });\n            }\n            else {\n                this.filteredList.forEach((item: any) => {\n                    if (this.isSelected(item)) {\n                        this.removeSelected(item);\n                        removed.push(item);\n                    }\n\n                });\n            }\n            this.isFilterSelectAll = false;\n            this.onFilterDeSelectAll.emit(removed);\n        }\n    }\n    toggleInfiniteFilterSelectAll() {\n        if (!this.isInfiniteFilterSelectAll) {\n            this.virtualdata.forEach((item: any) => {\n                if (!this.isSelected(item)) {\n                    this.addSelected(item);\n                }\n            });\n            this.isInfiniteFilterSelectAll = true;\n        }\n        else {\n            this.virtualdata.forEach((item: any) => {\n                if (this.isSelected(item)) {\n                    this.removeSelected(item);\n                }\n\n            });\n            this.isInfiniteFilterSelectAll = false;\n        }\n    }\n    clearSearch() {\n        if (this.settings.groupBy) {\n            this.groupedData = [];\n            this.groupedData = this.cloneArray(this.groupCachedItems);\n        }\n        this.filter = \"\";\n        this.isFilterSelectAll = false;\n        this.searchTerm$.next('');\n        this.data = this.cachedItems;\n    }\n    onFilterChange(data: any) {\n        if (this.filter && this.filter == \"\" || data.length == 0) {\n            this.isFilterSelectAll = false;\n            this.data = this.cachedItems.slice();\n        }\n        let cnt = 0;\n        data.forEach((item: any) => {\n\n            if (!item.hasOwnProperty('grpTitle') && this.isSelected(item)) {\n                cnt++;\n            }\n        });\n\n        if (cnt > 0 && this.filterLength == cnt) {\n            this.isFilterSelectAll = true;\n        }\n        else if (cnt > 0 && this.filterLength != cnt) {\n            this.isFilterSelectAll = false;\n        }\n        this.data = data;\n    }\n    cloneArray(arr: any) {\n        let i, copy;\n\n        if (Array.isArray(arr)) {\n            return JSON.parse(JSON.stringify(arr));\n        } else if (typeof arr === 'object') {\n            throw 'Cannot clone array containing an object!';\n        } else {\n            return arr;\n        }\n    }\n    updateGroupInfo(item: any) {\n        if (item.disabled) {\n            return;\n        }\n        let key = this.settings.groupBy;\n        this.groupedData.forEach((obj: any) => {\n            let cnt = 0;\n            if (obj.grpTitle && (item[key] == obj[key])) {\n                if (obj.list) {\n                    obj.list.forEach((el: any) => {\n                        if (this.isSelected(el)) {\n                            cnt++;\n                        }\n                    });\n                }\n            }\n            if (obj.list && (cnt === obj.list.length) && (item[key] == obj[key])) {\n                obj.selected = true;\n            }\n            else if (obj.list && (cnt != obj.list.length) && (item[key] == obj[key])) {\n                obj.selected = false;\n            }\n        });\n        this.groupCachedItems.forEach((obj: any) => {\n            let cnt = 0;\n            if (obj.grpTitle && (item[key] == obj[key])) {\n                if (obj.list) {\n                    obj.list.forEach((el: any) => {\n                        if (this.isSelected(el)) {\n                            cnt++;\n                        }\n                    });\n                }\n            }\n            if (obj.list && (cnt === obj.list.length) && (item[key] == obj[key])) {\n                obj.selected = true;\n            }\n            else if (obj.list && (cnt != obj.list.length) && (item[key] == obj[key])) {\n                obj.selected = false;\n            }\n        });\n    }\n    transformData(arr: Array<any>, field: any): Array<any> {\n        const groupedObj: any = arr.reduce((prev: any, cur: any) => {\n            if (!prev[cur[field]]) {\n                prev[cur[field]] = [cur];\n            } else {\n                prev[cur[field]].push(cur);\n            }\n            return prev;\n        }, {});\n        const tempArr: any = [];\n        Object.keys(groupedObj).map((x: any) => {\n            let obj: any = {};\n            let disabledChildrens = [];\n            obj[\"grpTitle\"] = true;\n            obj[this.settings.labelKey] = x;\n            obj[this.settings.groupBy] = x;\n            obj['selected'] = false;\n            obj['list'] = [];\n            let cnt = 0;\n            groupedObj[x].forEach((item: any) => {\n                item['list'] = [];\n                if (item.disabled) {\n                    this.isDisabledItemPresent = true;\n                    disabledChildrens.push(item);\n                }\n                obj.list.push(item);\n                if (this.isSelected(item)) {\n                    cnt++;\n                }\n            });\n            if (cnt == obj.list.length) {\n                obj.selected = true;\n            }\n            else {\n                obj.selected = false;\n            }\n\n            // Check if current group item's all childrens are disabled or not\n            obj['disabled'] = disabledChildrens.length === groupedObj[x].length;\n            tempArr.push(obj);\n            // obj.list.forEach((item: any) => {\n            //     tempArr.push(item);\n            // });\n        });\n        return tempArr;\n    }\n    public filterInfiniteList(evt: any) {\n        let filteredElems: Array<any> = [];\n        if (this.settings.groupBy) {\n            this.groupedData = this.groupCachedItems.slice();\n        }\n        else {\n            this.data = this.cachedItems.slice();\n            this.virtualdata = this.cachedItems.slice();\n        }\n\n        if ((evt != null || evt != '') && !this.settings.groupBy) {\n            if (this.settings.searchBy.length > 0) {\n                for (let t = 0; t < this.settings.searchBy.length; t++) {\n\n                    this.virtualdata.filter((el: any) => {\n                        if (el[this.settings.searchBy[t].toString()].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {\n                            filteredElems.push(el);\n                        }\n                    });\n                }\n\n            }\n            else {\n                this.virtualdata.filter(function (el: any) {\n                    for (let prop in el) {\n                        if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {\n                            filteredElems.push(el);\n                            break;\n                        }\n                    }\n                });\n            }\n            this.virtualdata = [];\n            this.virtualdata = filteredElems;\n            this.infiniteFilterLength = this.virtualdata.length;\n        }\n        if (evt.toString() != '' && this.settings.groupBy) {\n            this.groupedData.filter(function (el: any) {\n                if (el.hasOwnProperty('grpTitle')) {\n                    filteredElems.push(el);\n                }\n                else {\n                    for (let prop in el) {\n                        if (el[prop].toString().toLowerCase().indexOf(evt.toString().toLowerCase()) >= 0) {\n                            filteredElems.push(el);\n                            break;\n                        }\n                    }\n                }\n            });\n            this.groupedData = [];\n            this.groupedData = filteredElems;\n            this.infiniteFilterLength = this.groupedData.length;\n        }\n        else if (evt.toString() == '' && this.cachedItems.length > 0) {\n            this.virtualdata = [];\n            this.virtualdata = this.cachedItems;\n            this.infiniteFilterLength = 0;\n        }\n        if(this.virtualScroller){\n            this.virtualScroller.refresh();\n        }\n    }\n    resetInfiniteSearch() {\n        this.filter = \"\";\n        this.isInfiniteFilterSelectAll = false;\n        this.virtualdata = [];\n        this.virtualdata = this.cachedItems;\n        this.groupedData = this.groupCachedItems;\n        this.searchTerm$.next('');\n        this.infiniteFilterLength = 0;\n    }\n    onScrollEnd(e: any) {\n        if (e.endIndex === this.data.length - 1 || e.startIndex === 0) {\n\n        }\n        this.onScrollToEnd.emit(e);\n\n    }\n    ngOnDestroy() {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n\n    }\n    selectGroup(item: any) {\n        if (item.disabled) {\n            return;\n        }\n        if (item.selected) {\n            item.selected = false;\n            item.list.forEach((obj: any) => {\n                this.removeSelected(obj);\n            });\n\n            this.onGroupDeSelect.emit(item);\n            this.updateGroupInfo(item);\n\n        }\n        else {\n            item.selected = true;\n            item.list.forEach((obj: any) => {\n                if (!this.isSelected(obj)) {\n                    this.addSelected(obj);\n                }\n\n            });\n            this.onGroupSelect.emit(item);\n            this.updateGroupInfo(item);\n\n        }\n\n\n    }\n    addFilterNewItem() {\n        this.onAddFilterNewItem.emit(this.filter);\n        this.filterPipe.transform(this.data, this.filter, this.settings.searchBy);\n    }\n    calculateDropdownDirection() {\n        let shouldOpenTowardsTop = this.settings.position == 'top';\n        const elem = this.cuppaDropdown.nativeElement;\n        const dropdownWidth = elem.clientWidth;\n        this.dropDownWidth = dropdownWidth;\n        this.dropDownLeft = this.settings.tagToBody ? elem.getBoundingClientRect().x : 'unset';\n        if (this.settings.position == 'top' && !this.settings.autoPosition) {\n            this.openTowardsTop(true);\n        }\n        else if (this.settings.position == 'bottom' && !this.settings.autoPosition) {\n            this.openTowardsTop(false);\n        }\n        if (this.settings.autoPosition) {\n            const dropdownHeight = this.defaultSettings.maxHeight;\n            const viewportHeight = document.documentElement.clientHeight;\n            const selectedListBounds = this.selectedListElem.nativeElement.getBoundingClientRect();\n\n            const spaceOnTop: number = selectedListBounds.top;\n            const spaceOnBottom: number = viewportHeight - selectedListBounds.top;\n            if (spaceOnBottom < spaceOnTop && dropdownHeight < spaceOnTop) {\n                this.openTowardsTop(true);\n            }\n            else {\n                this.openTowardsTop(false);\n            }\n            // Keep preference if there is not enough space on either the top or bottom\n            /* \t\t\tif (spaceOnTop || spaceOnBottom) {\n                            if (shouldOpenTowardsTop) {\n                                shouldOpenTowardsTop = spaceOnTop;\n                            } else {\n                                shouldOpenTowardsTop = !spaceOnBottom;\n                            }\n                        } */\n        }\n\n    }\n    openTowardsTop(value: boolean) {\n        const elem = this.cuppaDropdown.nativeElement;\n        if (value && this.selectedListElem.nativeElement.clientHeight) {\n            this.dropdownListYOffset = 15 - this.selectedListElem.nativeElement.clientHeight;\n            if(this.settings.tagToBody){\n                this.dropDownTop = (elem.getBoundingClientRect().y - this.selectedListElem.nativeElement.clientHeight*2 - 15 - this.defaultSettings.maxHeight)+'px';\n\n            }\n            else {\n                this.dropDownBottom = (this.selectedListElem.nativeElement.clientHeight + 15 )+'px';\n            }\n            this.settings.position = 'top'\n\n        } else {\n            if(this.settings.tagToBody){\n                this.dropDownTop = (elem.getBoundingClientRect().y + elem.clientHeight + 1)+'px';\n            }\n            else {\n                this.dropDownTop = 'unset';\n                this.dropDownBottom = 'unset';\n            }\n            this.dropdownListYOffset = 0;\n            this.settings.position = 'bottom'\n\n        }\n    }\n    clearSelection(e?: any) {\n        if (this.settings.groupBy) {\n            this.groupCachedItems.forEach((obj) => {\n                obj.selected = false;\n            })\n        }\n        this.clearSearch();\n        this.selectedItems = [];\n        this.isSelectAll = false;\n        this.onChangeCallback(this.selectedItems);\n        this.onTouchedCallback(this.selectedItems);\n        this.onDeSelectAll.emit(this.selectedItems);\n    }\n    filteritems(evt: any) {\n        this.filteredList = this.filterPipe.transform(this.cachedItems, evt.target.value, this.settings.searchBy);\n        if (this.filteredList) {\n            let len = 0;\n            this.filteredList.forEach((obj: any, i: any) => {\n                if (obj.disabled) {\n                    this.isDisabledItemPresent = true;\n                }\n                if (!obj.hasOwnProperty('grpTitle')) {\n                    len++;\n                }\n            });\n            this.filterLength = len;\n        }\n        this.onFilterChange(this.filteredList);\n    }\n}\n\n@NgModule({\n    imports: [CommonModule, FormsModule, VirtualScrollerModule],\n    declarations: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],\n    exports: [AngularMultiSelect, ClickOutsideDirective, ScrollDirective, styleDirective, ListFilterPipe, Item, TemplateRenderer, Badge, Search, setPosition, CIcon],\n    providers: [DataService, ListFilterPipe]\n})\nexport class AngularMultiSelectModule { }\n","<div class=\"cuppa-dropdown\" (clickOutside)=\"closeDropdownOnClickOut()\" #cuppaDropdown>\n    <div class=\"selected-list\" #selectedList>\n        <div class=\"c-btn\" (click)=\"toggleDropdown($event)\" [ngClass]=\"{'disabled': settings.disabled}\" [attr.tabindex]=\"0\">\n\n            <span *ngIf=\"selectedItems?.length == 0\">{{settings.text}}</span>\n            <span *ngIf=\"settings.singleSelection && !badgeTempl\">\n                <span *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n                    {{item[settings.labelKey]}}\n                </span>\n            </span>\n            <span class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && settings.singleSelection && badgeTempl \">\n                <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\">\n                    <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n\n                    <span *ngIf=\"badgeTempl\" class=\"c-label\">\n                        <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n                    </span>\n                    <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n                        <c-icon [name]=\"'remove'\"></c-icon>\n                    </span>\n                </div>\n            </span>\n            <div class=\"c-list\" *ngIf=\"selectedItems?.length > 0 && !settings.singleSelection\">\n                <div class=\"c-token\" *ngFor=\"let item of selectedItems;trackBy: trackByFn.bind(this);let k = index\" [hidden]=\"k > settings.badgeShowLimit-1\">\n                    <span *ngIf=\"!badgeTempl\" class=\"c-label\">{{item[settings.labelKey]}}</span>\n                    <span *ngIf=\"badgeTempl\" class=\"c-label\">\n                        <c-templateRenderer [data]=\"badgeTempl\" [item]=\"item\"></c-templateRenderer>\n                    </span>\n                    <span class=\"c-remove\" (click)=\"onItemClick(item,k,$event);$event.stopPropagation()\">\n                        <c-icon [name]=\"'remove'\"></c-icon>\n                    </span>\n                </div>\n            </div>\n            <span class=\"countplaceholder\" *ngIf=\"selectedItems?.length > settings.badgeShowLimit\">+{{selectedItems?.length - settings.badgeShowLimit }}</span>\n            <span class=\"c-remove clear-all\" *ngIf=\"settings.clearAll && selectedItems?.length > 0 && !settings.disabled\" (click)=\"clearSelection($event);$event.stopPropagation()\">\n                <c-icon [name]=\"'remove'\"></c-icon>\n            </span>\n            <span *ngIf=\"!isActive\" class=\"c-angle-down\">\n                <c-icon [name]=\"'angle-down'\"></c-icon>\n            </span>\n            <span *ngIf=\"isActive\" class=\"c-angle-up\">\n                <c-icon [name]=\"'angle-up'\"></c-icon>\n\n            </span>\n        </div>\n    </div>\n    <div #dropdownList class=\"dropdown-list animated fadeIn\" \n    [ngClass]=\"{'tagToBody': settings.tagToBody}\"\n    [style.width.px]=\"dropDownWidth\" \n    [style.top]=\"dropDownTop\" \n    [style.bottom]=\"dropDownBottom\"\n    [style.left.px]=\"dropDownLeft\" \n        [hidden]=\"!isActive\">\n        <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\" class=\"arrow-2\"></div>\n        <div [ngClass]=\"{'arrow-up': settings.position == 'bottom', 'arrow-down': settings.position == 'top'}\"></div>\n        <div class=\"list-area\" [ngClass]=\"{'single-select-mode': settings.singleSelection }\">\n            <div class=\"pure-checkbox select-all\" *ngIf=\"settings.enableCheckAll && !settings.singleSelection && !settings.limitSelection && data?.length > 0 && !isDisabledItemPresent\"\n                >\n                <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                [id]=\"id\" (change)=\"toggleSelectAll($event)\"/>\n                <label [for]=\"id\">\n                    <span [hidden]=\"isSelectAll\">{{settings.selectAllText}}</span>\n                    <span [hidden]=\"!isSelectAll\">{{settings.unSelectAllText}}</span>\n                </label>\n            </div>\n            <img class=\"loading-icon\" *ngIf=\"loading\" src=\"assets/img/loading.gif\" />\n            <div class=\"list-filter\" *ngIf=\"settings.enableSearchFilter\">\n                <span class=\"c-search\" id=\"searchIcon\">\n                    <c-icon [name]=\"'search'\"></c-icon>\n                </span>\n                <span *ngIf=\"!settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\" (click)=\"clearSearch()\">\n                    <c-icon [name]=\"'clear'\"></c-icon>\n                </span>\n                <span *ngIf=\"settings.lazyLoading\" [hidden]=\"filter == undefined || filter?.length == 0\" class=\"c-clear\" (click)=\"resetInfiniteSearch()\">\n                    <c-icon [name]=\"'clear'\"></c-icon>\n                </span>\n\n                <input class=\"c-input\" *ngIf=\"settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" (keyup)=\"filterGroupedList()\" aria-labelledby=\"searchIcon\">\n                <input class=\"c-input\" *ngIf=\"!settings.groupBy && !settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" (keyup)=\"filteritems($event)\" aria-labelledby=\"searchIcon\">\n                <input class=\"c-input\" *ngIf=\"settings.lazyLoading && !searchTempl\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                    [(ngModel)]=\"filter\" (keyup)=\"onKeyUp($event)\" aria-labelledby=\"searchIcon\">\n                <!--            <input class=\"c-input\" *ngIf=\"!settings.lazyLoading && !searchTempl && settings.groupBy\" #searchInput type=\"text\" [placeholder]=\"settings.searchPlaceholderText\"\n                [(ngModel)]=\"filter\" (keyup)=\"filterGroupList($event)\">-->\n                <c-templateRenderer *ngIf=\"searchTempl\" [data]=\"searchTempl\" [item]=\"item\"></c-templateRenderer>\n            </div>\n            <div class=\"filter-select-all\" *ngIf=\"!settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent\">\n                <div class=\"pure-checkbox select-all\" *ngIf=\"!settings.groupBy && filter?.length > 0 && filterLength > 0  && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isFilterSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\" aria-labelledby=\"optionName\"\n                    aria-label=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n                <div class=\"pure-checkbox select-all\" *ngIf=\"settings.groupBy && filter?.length > 0 && groupedData?.length > 0  && !settings.singleSelection\" (click)=\"toggleFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isFilterSelectAll && filter?.length > 0\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                    aria-labelledby=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n            </div>\n            <div class=\"filter-select-all\" *ngIf=\"settings.lazyLoading && settings.enableFilterSelectAll && !isDisabledItemPresent && !settings.singleSelection\">\n                <div class=\"pure-checkbox select-all\" *ngIf=\"filter?.length > 0 && infiniteFilterLength > 0\" (click)=\"toggleInfiniteFilterSelectAll()\">\n                    <input type=\"checkbox\" [checked]=\"isInfiniteFilterSelectAll\" [disabled]=\"settings.limitSelection == selectedItems?.length\"\n                    aria-labelledby=\"option\"/>\n                    <label>\n                        <span [hidden]=\"isInfiniteFilterSelectAll\">{{settings.filterSelectAllText}}</span>\n                        <span [hidden]=\"!isInfiniteFilterSelectAll\">{{settings.filterUnSelectAllText}}</span>\n                    </label>\n                </div>\n            </div>\n            <div class=\"filter-select-all\" *ngIf=\"filter?.length\">\n                <div class=\"btn-container\" *ngIf=\"settings.addNewItemOnFilter\">\n                    <button class=\"c-btn btn-iceblue\" (click)=\"addFilterNewItem()\">{{settings.addNewButtonText}}</button>\n                </div>\n            </div>\n\n            <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n                        class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        aria-labelledby=\"option\"/>\n                        <label>{{item[settings.labelKey]}}</label>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading -->\n            <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                    <li *ngFor=\"let item of scroll.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\"\n                        [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label>{{item[settings.labelKey]}}</label>\n                    </li>\n                </ul>\n            </div>\n            <!-- custom template -->\n            <div *ngIf=\"!settings.groupBy && !settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <li *ngFor=\"let item of data; let i = index;\" (click)=\"onItemClick(item,i,$event)\"\n                        class=\"pure-checkbox\" [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label></label>\n                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading and custom template -->\n            <div *ngIf=\"!settings.groupBy && settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll2 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" class=\"lazyContainer\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n                    <li *ngFor=\"let item of scroll2.viewPortItems; let i = index;\" (click)=\"onItemClick(item,i,$event)\" class=\"pure-checkbox\"\n                        [ngClass]=\"{'selected-item': isSelected(item) == true }\">\n                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                        />\n                        <label></label>\n                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                    </li>\n                </ul>\n            </div>\n            <!-- lazy loading, group By and custom template -->\n            <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul virtualScroller #scroll3 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                    (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                    <span *ngFor=\"let item of scroll3.viewPortItems; let i = index;\">\n                        <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label></label>\n                            <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                        </li>\n                        <li *ngIf=\"item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label></label>\n                            <c-templateRenderer [data]=\"itemTempl\" [item]=\"item\"></c-templateRenderer>\n                        </li>\n                    </span>\n                </ul>\n            </div>\n            <!-- group By and custom template -->\n            <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl != undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <span *ngFor=\"let item of groupedData; let i = index;\">\n                        <li (click)=\"selectGroup(item)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label>{{item[settings.labelKey]}}</label>\n                            <ul class=\"lazyContainer\">\n                                <span *ngFor=\"let val of item.list ; let j = index;\">\n                                    <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\" [ngClass]=\"{'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n                                        class=\"pure-checkbox\">\n                                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n                                        />\n                                        <label></label>\n                                        <c-templateRenderer [data]=\"itemTempl\" [item]=\"val\"></c-templateRenderer>\n                                    </li>\n                                </span>\n                            </ul>\n\n                        </li>\n                    </span>\n                </ul>\n            </div>\n            <!-- lazy loading, group By -->\n            <div *ngIf=\"settings.groupBy && settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <virtual-scroller [items]=\"groupedData\" (vsUpdate)=\"viewPortItems = $event\" (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\">\n                    <ul virtualScroller #scroll4 [enableUnequalChildrenSizes]=\"randomSize\" [items]=\"virtualdata\" (vsStart)=\"onScrollEnd($event)\"\n                        (vsEnd)=\"onScrollEnd($event)\" [ngStyle]=\"{'height': settings.maxHeight+'px'}\" class=\"lazyContainer\">\n                        <span *ngFor=\"let item of scroll4.viewPortItems; let i = index;\">\n                            <li *ngIf=\"item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n                                class=\"pure-checkbox\">\n                                <input *ngIf=\"settings.showCheckbox && !item.grpTitle && !settings.singleSelection\" type=\"checkbox\" [checked]=\"isSelected(item)\"\n                                    [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                                />\n                                <label>{{item[settings.labelKey]}}</label>\n                            </li>\n                            <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection, 'selected-item': isSelected(item) == true }\"\n                                class=\"pure-checkbox\">\n                                <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                                />\n                                <label>{{item[settings.labelKey]}}</label>\n                            </li>\n                        </span>\n                    </ul>\n                </virtual-scroller>\n            </div>\n            <!-- group By -->\n            <div *ngIf=\"settings.groupBy && !settings.lazyLoading && itemTempl == undefined\" [style.maxHeight]=\"settings.maxHeight+'px'\"\n                style=\"overflow: auto;\">\n                <ul class=\"lazyContainer\">\n                    <span *ngFor=\"let item of groupedData ; let i = index;\">\n                        <li (click)=\"selectGroup(item)\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle && !settings.singleSelection}\"\n                            class=\"pure-checkbox\">\n                            <input *ngIf=\"settings.showCheckbox && !settings.singleSelection\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(item)) || item.disabled\"\n                            />\n                            <label>{{item[settings.labelKey]}}</label>\n                            <ul class=\"lazyContainer\">\n                                <span *ngFor=\"let val of item.list ; let j = index;\">\n                                    <li (click)=\"onItemClick(val,j,$event); $event.stopPropagation()\" [ngClass]=\"{'selected-item': isSelected(val) == true,'grp-title': val.grpTitle,'grp-item': !val.grpTitle && !settings.singleSelection}\"\n                                        class=\"pure-checkbox\">\n                                        <input *ngIf=\"settings.showCheckbox\" type=\"checkbox\" [checked]=\"isSelected(val)\" [disabled]=\"(settings.limitSelection == selectedItems?.length && !isSelected(val)) || val.disabled\"\n                                        />\n                                        <label>{{val[settings.labelKey]}}</label>\n                                    </li>\n                                </span>\n                            </ul>\n                        </li>\n                    </span>\n                    <!-- <span *ngFor=\"let item of groupedData ; let i = index;\">\n                    <li (click)=\"onItemClick(item,i,$event)\" *ngIf=\"!item.grpTitle\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && !item.grpTitle\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                <li *ngIf=\"item.grpTitle && !settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"isSelected(item)\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                 <li  (click)=\"selectGroup(item)\" *ngIf=\"item.grpTitle && settings.selectGroup\" [ngClass]=\"{'grp-title': item.grpTitle,'grp-item': !item.grpTitle}\" class=\"pure-checkbox\">\n                    <input *ngIf=\"settings.showCheckbox && settings.selectGroup\" type=\"checkbox\" [checked]=\"item.selected\" [disabled]=\"settings.limitSelection == selectedItems?.length && !isSelected(item)\"\n                    />\n                    <label>{{item[settings.labelKey]}}</label>\n                </li>\n                </span> -->\n                </ul>\n            </div>\n            <h5 class=\"list-message\" *ngIf=\"data?.length == 0\">{{settings.noDataLabel}}</h5>\n        </div>\n    </div>\n</div>","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.DataService","i1","i1.ListFilterPipe"],"mappings":"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"}