{"version":3,"file":"primeng-scroller.mjs","sources":["../../src/app/components/scroller/scroller.ts","../../src/app/components/scroller/primeng-scroller.ts"],"sourcesContent":["import { NgModule, Component, Input, ElementRef, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, ChangeDetectorRef, AfterContentInit, ContentChildren, QueryList, TemplateRef, Output, EventEmitter, SimpleChanges, OnInit, AfterViewChecked, OnDestroy, NgZone } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DomHandler } from 'primeng/dom';\nimport { PrimeTemplate } from 'primeng/api';\n\nexport type ScrollerToType = 'to-start' | 'to-end' | undefined;\n\nexport type ScrollerOrientationType = 'vertical' | 'horizontal' | 'both';\n\nexport interface ScrollerOptions {\n    id?: string | undefined;\n    style?: any;\n    styleClass?: string | undefined;\n    tabindex?: number | undefined;\n    items?: any[];\n    itemSize?: any;\n    scrollHeight?: string | undefined;\n    scrollWidth?: string | undefined;\n    orientation?: ScrollerOrientationType;\n    delay?: number | undefined;\n    lazy?: boolean;\n    disabled?: boolean;\n    loaderDisabled?: boolean;\n    columns?: any[] | undefined;\n    showSpacer?: boolean;\n    showLoader?: boolean;\n    numToleratedItems?: any;\n    loading?: boolean;\n    autoSize?: boolean;\n    trackBy?: any;\n    onLazyLoad?: Function | undefined;\n    onScroll?: Function | undefined;\n    onScrollIndexChange?: Function | undefined;\n}\n\n@Component({\n    selector: 'p-scroller',\n    template: `\n        <ng-container *ngIf=\"!_disabled; else disabledContainer\">\n            <div #element [attr.id]=\"_id\" [attr.tabindex]=\"tabindex\" [ngStyle]=\"_style\" [class]=\"_styleClass\"\n                [ngClass]=\"{'p-scroller': true, 'p-both-scroll': both, 'p-horizontal-scroll': horizontal}\"\n                (scroll)=\"onContainerScroll($event)\">\n                <ng-container *ngIf=\"contentTemplate; else buildInContent\">\n                    <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: loadedItems, options: getContentOptions()}\"></ng-container>\n                </ng-container>\n                <ng-template #buildInContent>\n                    <div #content class=\"p-scroller-content\" [ngClass]=\"{'p-scroller-loading': d_loading}\" [ngStyle]=\"contentStyle\">\n                        <ng-container *ngFor=\"let item of loadedItems; let index = index; trackBy: _trackBy || index\">\n                            <ng-container *ngTemplateOutlet=\"itemTemplate; context: {$implicit: item, options: getOptions(index)}\"></ng-container>\n                        </ng-container>\n                    </div>\n                </ng-template>\n                <div *ngIf=\"_showSpacer\" class=\"p-scroller-spacer\" [ngStyle]=\"spacerStyle\"></div>\n                <div *ngIf=\"!loaderDisabled && _showLoader && d_loading\" class=\"p-scroller-loader\" [ngClass]=\"{'p-component-overlay': !loaderTemplate}\">\n                    <ng-container *ngIf=\"loaderTemplate; else buildInLoader\">\n                        <ng-container *ngFor=\"let item of loaderArr; let index = index\">\n                            <ng-container *ngTemplateOutlet=\"loaderTemplate; context: {options: getLoaderOptions(index, both && { numCols: _numItemsInViewport.cols })}\"></ng-container>\n                        </ng-container>\n                    </ng-container>\n                    <ng-template #buildInLoader>\n                        <ng-container *ngIf=\"loaderIconTemplate; else buildInLoaderIcon\">\n                            <ng-container *ngTemplateOutlet=\"loaderIconTemplate; context: {options: { styleClass: 'p-scroller-loading-icon' }}\"></ng-container>\n                        </ng-container>\n                        <ng-template #buildInLoaderIcon>\n                            <i class=\"p-scroller-loading-icon pi pi-spinner pi-spin\"></i>\n                        </ng-template>\n                    </ng-template>\n                </div>\n            </div>\n        </ng-container>\n        <ng-template #disabledContainer>\n            <ng-content></ng-content>\n            <ng-container *ngIf=\"contentTemplate\">\n                <ng-container *ngTemplateOutlet=\"contentTemplate; context: {$implicit: items, options: {rows: _items, columns: loadedColumns}}\"></ng-container>\n            </ng-container>\n        </ng-template>\n    `,\n    changeDetection: ChangeDetectionStrategy.Default,\n    encapsulation: ViewEncapsulation.None,\n    styleUrls: ['./scroller.css'],\n    host: {\n        'class': 'p-scroller-viewport p-element'\n    }\n})\nexport class Scroller implements OnInit, AfterContentInit, AfterViewChecked, OnDestroy {\n\n    @Input() get id() { return this._id; }\n    set id(val: string) { this._id = val; }\n\n    @Input() get style() { return this._style; }\n    set style(val: any) { this._style = val; }\n\n    @Input() get styleClass() { return this._styleClass; }\n    set styleClass(val: string) { this._styleClass = val; }\n\n    @Input() get tabindex() { return this._tabindex; }\n    set tabindex(val: number) { this._tabindex = val; }\n\n    @Input() get items() { return this._items; }\n    set items(val: any[]) { this._items = val; }\n\n    @Input() get itemSize() { return this._itemSize; }\n    set itemSize(val: any) { this._itemSize = val; }\n\n    @Input() get scrollHeight() { return this._scrollHeight; }\n    set scrollHeight(val: string) { this._scrollHeight = val; }\n\n    @Input() get scrollWidth() { return this._scrollWidth; }\n    set scrollWidth(val: string) { this._scrollWidth = val; }\n\n    @Input() get orientation() { return this._orientation; }\n    set orientation(val: string) { this._orientation = val; }\n\n    @Input() get delay() { return this._delay; }\n    set delay(val: number) { this._delay = val; }\n\n    @Input() get resizeDelay() { return this._resizeDelay; }\n    set resizeDelay(val: number) { this._resizeDelay = val; }\n\n    @Input() get lazy() { return this._lazy; }\n    set lazy(val: boolean) { this._lazy = val; }\n\n    @Input() get disabled() { return this._disabled; }\n    set disabled(val: boolean) { this._disabled = val; }\n\n    @Input() get loaderDisabled() { return this._loaderDisabled; }\n    set loaderDisabled(val: boolean) { this._loaderDisabled = val; }\n\n    @Input() get columns() { return this._columns; }\n    set columns(val: any[]) { this._columns = val; }\n\n    @Input() get showSpacer() { return this._showSpacer; }\n    set showSpacer(val: boolean) { this._showSpacer = val; }\n\n    @Input() get showLoader() { return this._showLoader; }\n    set showLoader(val: boolean) { this._showLoader = val; }\n\n    @Input() get numToleratedItems() { return this._numToleratedItems; }\n    set numToleratedItems(val: number) { this._numToleratedItems = val; }\n\n    @Input() get loading() { return this._loading; }\n    set loading(val: boolean) { this._loading = val; }\n\n    @Input() get autoSize() { return this._autoSize; }\n    set autoSize(val: boolean) { this._autoSize = val; }\n\n    @Input() get trackBy() { return this._trackBy; }\n    set trackBy(val: any) { this._trackBy = val; }\n\n    @Input() get options() { return this._options; }\n    set options(val: ScrollerOptions) {\n        this._options = val;\n\n        if (val && typeof val === 'object') {\n            Object.entries(val).forEach(([k, v]) => this[`_${k}`] !== v && (this[`_${k}`] = v));\n        }\n    }\n\n    @ViewChild('element') elementViewChild: ElementRef;\n\n    @ViewChild('content') contentViewChild: ElementRef;\n\n    @ContentChildren(PrimeTemplate) templates: QueryList<any>;\n\n    @Output() onLazyLoad: EventEmitter<any> = new EventEmitter();\n\n    @Output() onScroll: EventEmitter<any> = new EventEmitter();\n\n    @Output() onScrollIndexChange: EventEmitter<any> = new EventEmitter();\n\n    _id: string;\n\n    _style: any;\n\n    _styleClass: string;\n\n    _tabindex: number = 0;\n\n    _items: any[];\n\n    _itemSize: any = 0;\n\n    _scrollHeight: string;\n\n    _scrollWidth: string;\n\n    _orientation: string = 'vertical';\n\n    _delay: number = 0;\n\n    _resizeDelay: number = 10;\n\n    _lazy: boolean = false;\n\n    _disabled: boolean = false;\n\n    _loaderDisabled: boolean = false;\n\n    _columns: any[];\n\n    _showSpacer: boolean = true;\n\n    _showLoader: boolean = false;\n\n    _numToleratedItems: any;\n\n    _loading: boolean;\n\n    _autoSize: boolean = false;\n\n    _trackBy: any;\n\n    _options: ScrollerOptions;\n\n    d_loading: boolean = false;\n\n    d_numToleratedItems: any;\n\n    contentEl: any;\n\n    contentTemplate: TemplateRef<any>;\n\n    itemTemplate: TemplateRef<any>;\n\n    loaderTemplate: TemplateRef<any>;\n\n    loaderIconTemplate: TemplateRef<any>;\n\n    first: any = 0;\n\n    last: any = 0;\n\n    numItemsInViewport: any = 0;\n\n    lastScrollPos: any = 0;\n\n    loaderArr: any[] = [];\n\n    spacerStyle: any = {};\n\n    contentStyle: any = {};\n\n    scrollTimeout: any;\n\n    resizeTimeout: any;\n\n    initialized: boolean = false;\n\n    windowResizeListener: any;\n\n    defaultWidth: number;\n\n    defaultHeight: number;\n\n    get vertical() {\n        return this._orientation === 'vertical';\n    }\n\n    get horizontal() {\n        return this._orientation === 'horizontal';\n    }\n\n    get both() {\n        return this._orientation === 'both';\n    }\n\n    get loadedItems() {\n        if (this._items && !this.d_loading) {\n            if (this.both)\n                return this._items.slice(this.first.rows, this.last.rows).map(item => this._columns ? item : item.slice(this.first.cols, this.last.cols));\n            else if (this.horizontal && this._columns)\n                return this._items;\n            else\n                return this._items.slice(this.first, this.last);\n        }\n\n        return [];\n    }\n\n    get loadedRows() {\n        return this.d_loading ? (this._loaderDisabled ? this.loaderArr : []) : this.loadedItems;\n    }\n\n    get loadedColumns() {\n        if (this._columns && (this.both || this.horizontal)) {\n            return this.d_loading && this._loaderDisabled ?\n                (this.both ? this.loaderArr[0] : this.loaderArr) :\n                this._columns.slice((this.both ? this.first.cols : this.first), (this.both ? this.last.cols : this.last));\n        }\n\n        return this._columns;\n    }\n\n    constructor(private cd: ChangeDetectorRef, private zone: NgZone) {\n        if (!this._disabled) {\n            this.zone.runOutsideAngular(() => {\n                this.windowResizeListener = this.onWindowResize.bind(this);\n\n                window.addEventListener('resize', this.windowResizeListener);\n                window.addEventListener('orientationchange', this.windowResizeListener);\n            });\n        }\n    }\n\n    ngOnInit() {\n        this.setInitialState();\n    }\n\n    ngOnChanges(simpleChanges: SimpleChanges) {\n        if (this.initialized) {\n            let areItemsChanged = false;\n            if (simpleChanges.items) {\n                const { previousValue: prevItems, currentValue: currentItems } = simpleChanges.items;\n                areItemsChanged = !prevItems || prevItems.length !== (currentItems || []).length;\n            }\n\n            const isChanged = (areItemsChanged || simpleChanges.itemSize || simpleChanges.scrollHeight || simpleChanges.scrollWidth);\n            isChanged && this.init();\n        }\n\n        if (simpleChanges.orientation) {\n            this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n        }\n\n        if (simpleChanges.loading) {\n            const { previousValue, currentValue } = simpleChanges.loading;\n\n            if (this.lazy && previousValue !== currentValue && currentValue !== this.d_loading) {\n                this.d_loading = currentValue;\n            }\n        }\n\n        if (simpleChanges.numToleratedItems) {\n            const { previousValue, currentValue } = simpleChanges.numToleratedItems;\n\n            if (previousValue !== currentValue && currentValue !== this.d_numToleratedItems) {\n                this.d_numToleratedItems = currentValue;\n            }\n        }\n\n        if (simpleChanges.options) {\n            const { previousValue, currentValue } = simpleChanges.options;\n\n            if (this.lazy && previousValue?.loading !== currentValue?.loading && currentValue?.loading !== this.d_loading) {\n                this.d_loading = currentValue.loading;\n            }\n\n            if (previousValue?.numToleratedItems !== currentValue?.numToleratedItems && currentValue?.numToleratedItems !== this.d_numToleratedItems) {\n                this.d_numToleratedItems = currentValue.numToleratedItems;\n            }\n        }\n    }\n\n    ngAfterContentInit() {\n        this.templates.forEach((item) => {\n            switch (item.getType()) {\n                case 'content':\n                    this.contentTemplate = item.template;\n                    break;\n\n                case 'item':\n                    this.itemTemplate = item.template;\n                    break;\n\n                case 'loader':\n                    this.loaderTemplate = item.template;\n                    break;\n\n                case 'loadericon':\n                    this.loaderIconTemplate = item.template;\n                    break;\n\n                default:\n                    this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    }\n\n    ngAfterViewInit() {\n        this.setContentEl(this.contentEl);\n        this.init();\n\n        this.defaultWidth = DomHandler.getWidth(this.elementViewChild.nativeElement);\n        this.defaultHeight = DomHandler.getHeight(this.elementViewChild.nativeElement);\n        this.initialized = true;\n    }\n\n    ngAfterViewChecked() {\n        this.calculateAutoSize();\n    }\n\n    ngOnDestroy() {\n        if (this.windowResizeListener) {\n            window.removeEventListener('resize', this.windowResizeListener);\n            window.removeEventListener('orientationchange', this.windowResizeListener);\n            this.windowResizeListener = null;\n        }\n    }\n\n    init() {\n        if (!this._disabled) {\n            this.setSize();\n            this.calculateOptions();\n            this.setSpacerSize();\n\n            this.cd.detectChanges();\n        }\n    }\n\n    setContentEl(el?: HTMLElement) {\n        this.contentEl = el || this.contentViewChild?.nativeElement || DomHandler.findSingle(this.elementViewChild?.nativeElement, '.p-scroller-content');\n    }\n\n    setInitialState() {\n        this.first = this.both ? { rows: 0, cols: 0 } : 0;\n        this.last = this.both ? { rows: 0, cols: 0 } : 0;\n        this.numItemsInViewport = this.both ? { rows: 0, cols: 0 } : 0;\n        this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n        this.d_loading = this._loading || false;\n        this.d_numToleratedItems = this._numToleratedItems;\n    }\n\n    getElementRef() {\n        return this.elementViewChild;\n    }\n\n    scrollTo(options: ScrollToOptions) {\n        this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n        this.elementViewChild?.nativeElement?.scrollTo(options);\n    }\n\n    scrollToIndex(index: number, behavior: ScrollBehavior = 'auto') {\n        const { numToleratedItems } = this.calculateNumItems();\n        const contentPos = this.getContentPosition();\n        const calculateFirst = (_index = 0, _numT) => (_index <= _numT ? 0 : _index);\n        const calculateCoord = (_first, _size, _cpos) => (_first * _size) + _cpos;\n        const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });\n\n        if (this.both) {\n            const newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };\n            if (newFirst.rows !== this.first.rows || newFirst.cols !== this.first.cols) {\n                scrollTo(calculateCoord(newFirst.cols, this._itemSize[1], contentPos.left), calculateCoord(newFirst.rows, this._itemSize[0], contentPos.top));\n            }\n        }\n        else {\n            const newFirst = calculateFirst(index, numToleratedItems);\n\n            if (newFirst !== this.first) {\n                this.horizontal ? scrollTo(calculateCoord(newFirst, this._itemSize, contentPos.left), 0) : scrollTo(0, calculateCoord(newFirst, this._itemSize, contentPos.top));\n            }\n        }\n    }\n\n    scrollInView(index: number, to: ScrollerToType, behavior: ScrollBehavior = 'auto') {\n        if (to) {\n            const { first, viewport } = this.getRenderedRange();\n            const scrollTo = (left = 0, top = 0) => this.scrollTo({ left, top, behavior });\n            const isToStart = to === 'to-start';\n            const isToEnd = to === 'to-end';\n\n            if (isToStart) {\n                if (this.both) {\n                    if (viewport.first.rows - first.rows > index[0]) {\n                        scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows - 1) * this._itemSize[0]);\n                    }\n                    else if (viewport.first.cols - first.cols > index[1]) {\n                        scrollTo((viewport.first.cols - 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);\n                    }\n                }\n                else {\n                    if (viewport.first - first > index) {\n                        const pos = (viewport.first - 1) * this._itemSize;\n                        this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                    }\n                }\n            }\n            else if (isToEnd) {\n                if (this.both) {\n                    if (viewport.last.rows - first.rows <= index[0] + 1) {\n                        scrollTo(viewport.first.cols * this._itemSize[1], (viewport.first.rows + 1) * this._itemSize[0]);\n                    }\n                    else if (viewport.last.cols - first.cols <= index[1] + 1) {\n                        scrollTo((viewport.first.cols + 1) * this._itemSize[1], viewport.first.rows * this._itemSize[0]);\n                    }\n                }\n                else {\n                    if (viewport.last - first <= index + 1) {\n                        const pos = (viewport.first + 1) * this._itemSize;\n                        this.horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                    }\n                }\n            }\n        }\n        else {\n            this.scrollToIndex(index, behavior);\n        }\n    }\n\n    getRenderedRange() {\n        const calculateFirstInViewport = (_pos, _size) => Math.floor(_pos / (_size || _pos));\n\n        let firstInViewport = this.first;\n        let lastInViewport: any = 0;\n\n        if (this.elementViewChild?.nativeElement) {\n            const { scrollTop, scrollLeft } = this.elementViewChild.nativeElement;\n\n            if (this.both) {\n                firstInViewport = { rows: calculateFirstInViewport(scrollTop, this._itemSize[0]), cols: calculateFirstInViewport(scrollLeft, this._itemSize[1]) };\n                lastInViewport = { rows: firstInViewport.rows + this.numItemsInViewport.rows, cols: firstInViewport.cols + this.numItemsInViewport.cols };\n            }\n            else {\n                const scrollPos = this.horizontal ? scrollLeft : scrollTop;\n                firstInViewport = calculateFirstInViewport(scrollPos, this._itemSize);\n                lastInViewport = firstInViewport + this.numItemsInViewport;\n            }\n        }\n\n        return {\n            first: this.first,\n            last: this.last,\n            viewport: {\n                first: firstInViewport,\n                last: lastInViewport\n            }\n        }\n    }\n\n    calculateNumItems() {\n        const contentPos = this.getContentPosition();\n        const contentWidth = this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetWidth - contentPos.left : 0;\n        const contentHeight = this.elementViewChild?.nativeElement ? this.elementViewChild.nativeElement.offsetHeight - contentPos.top : 0;\n        const calculateNumItemsInViewport = (_contentSize, _itemSize) => Math.ceil(_contentSize / (_itemSize || _contentSize));\n        const calculateNumToleratedItems = (_numItems) => Math.ceil(_numItems / 2);\n        const numItemsInViewport: any = this.both ?\n            { rows: calculateNumItemsInViewport(contentHeight, this._itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, this._itemSize[1]) } :\n            calculateNumItemsInViewport((this.horizontal ? contentWidth : contentHeight), this._itemSize);\n\n        const numToleratedItems = this.d_numToleratedItems || (this.both ?\n            [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] :\n            calculateNumToleratedItems(numItemsInViewport));\n\n        return { numItemsInViewport, numToleratedItems };\n    }\n\n    calculateOptions() {\n        const { numItemsInViewport, numToleratedItems } = this.calculateNumItems();\n        const calculateLast = (_first, _num, _numT, _isCols = false) => this.getLast(_first + _num + ((_first < _numT ? 2 : 3) * _numT), _isCols);\n        const first = this.first;\n        const last = this.both ?\n            { rows: calculateLast(this.first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(this.first.cols, numItemsInViewport.cols, numToleratedItems[1], true) } :\n            calculateLast(this.first, numItemsInViewport, numToleratedItems);\n\n        this.last = last;\n        this.numItemsInViewport = numItemsInViewport;\n        this.d_numToleratedItems = numToleratedItems;\n\n        if (this.showLoader) {\n            this.loaderArr = this.both ?\n                Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) :\n                Array.from({ length: numItemsInViewport });\n        }\n\n        if (this._lazy) {\n            this.handleEvents('onLazyLoad', { first, last });\n        }\n    }\n\n    calculateAutoSize() {\n        if (this._autoSize && !this.d_loading) {\n            Promise.resolve().then(() => {\n                if (this.contentEl) {\n                    this.contentEl.style.minHeight = this.contentEl.style.minWidth = 'auto';\n\n                    const { offsetWidth, offsetHeight } = this.contentEl;\n\n                    (this.both || this.horizontal) && (this.elementViewChild.nativeElement.style.width = (offsetWidth < this.defaultWidth ? offsetWidth : this.defaultWidth) + 'px');\n                    (this.both || this.vertical) && (this.elementViewChild.nativeElement.style.height = (offsetHeight < this.defaultHeight ? offsetHeight : this.defaultHeight) + 'px');\n                    this.contentEl.style.minHeight = this.contentEl.style.minWidth = '';\n                }\n            });\n        }\n    }\n\n    getLast(last = 0, isCols = false) {\n        return this._items ? Math.min((isCols ? (this._columns || this._items[0]).length : this._items.length), last) : 0;\n    }\n\n    getContentPosition() {\n        if (this.contentEl) {\n            const style = getComputedStyle(this.contentEl);\n            const left = parseInt(style.paddingLeft, 10) + Math.max(parseInt(style.left, 10), 0);\n            const right = parseInt(style.paddingRight, 10) + Math.max(parseInt(style.right, 10), 0);\n            const top = parseInt(style.paddingTop, 10) + Math.max(parseInt(style.top, 10), 0);\n            const bottom = parseInt(style.paddingBottom, 10) + Math.max(parseInt(style.bottom, 10), 0);\n\n            return { left, right, top, bottom, x: left + right, y: top + bottom };\n        }\n\n        return { left: 0, right: 0, top: 0, bottom: 0, x: 0, y: 0 };\n    }\n\n    setSize() {\n        if (this.elementViewChild?.nativeElement) {\n            const parentElement = this.elementViewChild.nativeElement.parentElement.parentElement;\n            const width = this._scrollWidth || `${(this.elementViewChild.nativeElement.offsetWidth || parentElement.offsetWidth)}px`;\n            const height = this._scrollHeight || `${(this.elementViewChild.nativeElement.offsetHeight || parentElement.offsetHeight)}px`;\n            const setProp = (_name, _value) => this.elementViewChild.nativeElement.style[_name] = _value;\n\n            if (this.both || this.horizontal) {\n                setProp('height', height);\n                setProp('width', width);\n            }\n            else {\n                setProp('height', height);\n            }\n        }\n    }\n\n    setSpacerSize() {\n        if (this._items) {\n            const contentPos = this.getContentPosition();\n            const setProp = (_name, _value, _size, _cpos = 0) => this.spacerStyle = { ...this.spacerStyle, ...{ [`${_name}`]: (((_value || []).length * _size) + _cpos) + 'px' } };\n\n            if (this.both) {\n                setProp('height', this._items, this._itemSize[0], contentPos.y);\n                setProp('width', (this._columns || this._items[1]), this._itemSize[1], contentPos.x);\n            }\n            else {\n                this.horizontal ? setProp('width', (this._columns || this._items), this._itemSize, contentPos.x) : setProp('height', this._items, this._itemSize, contentPos.y);\n            }\n        }\n    }\n\n    setContentPosition(pos) {\n        if (this.contentEl) {\n            const first = pos ? pos.first : this.first;\n            const calculateTranslateVal = (_first, _size) => (_first * _size);\n            const setTransform = (_x = 0, _y = 0) => this.contentStyle = { ...this.contentStyle, ...{ transform: `translate3d(${_x}px, ${_y}px, 0)` } };\n\n            if (this.both) {\n                setTransform(calculateTranslateVal(first.cols, this._itemSize[1]), calculateTranslateVal(first.rows, this._itemSize[0]));\n            }\n            else {\n                const translateVal = calculateTranslateVal(first, this._itemSize);\n                this.horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal);\n            }\n        }\n    }\n\n    onScrollPositionChange(event) {\n        const target = event.target;\n        const contentPos = this.getContentPosition();\n        const calculateScrollPos = (_pos, _cpos) => _pos ? (_pos > _cpos ? _pos - _cpos : _pos) : 0;\n        const calculateCurrentIndex = (_pos, _size) => Math.floor(_pos / (_size || _pos));\n        const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n            return (_currentIndex <= _numT ? _numT : (_isScrollDownOrRight ? (_last - _num - _numT) : (_first + _numT - 1)))\n        };\n        const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n            if (_currentIndex <= _numT)\n                return 0;\n            else\n                return Math.max(0, _isScrollDownOrRight ?\n                    (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) :\n                    (_currentIndex > _triggerIndex ? _first : _currentIndex - (2 * _numT)));\n        };\n        const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols = false) => {\n            let lastValue = _first + _num + (2 * _numT);\n\n            if (_currentIndex >= _numT) {\n                lastValue += (_numT + 1);\n            }\n\n            return this.getLast(lastValue, _isCols);\n        };\n\n        const scrollTop = calculateScrollPos(target.scrollTop, contentPos.top);\n        const scrollLeft = calculateScrollPos(target.scrollLeft, contentPos.left);\n\n        let newFirst = this.both ? { rows: 0, cols: 0 } : 0;\n        let newLast = this.last;\n        let isRangeChanged = false;\n        let newScrollPos = this.lastScrollPos;\n\n        if (this.both) {\n            const isScrollDown = this.lastScrollPos.top <= scrollTop;\n            const isScrollRight = this.lastScrollPos.left <= scrollLeft;\n            const currentIndex = { rows: calculateCurrentIndex(scrollTop, this._itemSize[0]), cols: calculateCurrentIndex(scrollLeft, this._itemSize[1]) };\n            const triggerIndex = {\n                rows: calculateTriggerIndex(currentIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),\n                cols: calculateTriggerIndex(currentIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)\n            };\n\n            newFirst = {\n                rows: calculateFirst(currentIndex.rows, triggerIndex.rows, this.first.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0], isScrollDown),\n                cols: calculateFirst(currentIndex.cols, triggerIndex.cols, this.first.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], isScrollRight)\n            };\n            newLast = {\n                rows: calculateLast(currentIndex.rows, newFirst.rows, this.last.rows, this.numItemsInViewport.rows, this.d_numToleratedItems[0]),\n                cols: calculateLast(currentIndex.cols, newFirst.cols, this.last.cols, this.numItemsInViewport.cols, this.d_numToleratedItems[1], true)\n            };\n\n            isRangeChanged = (newFirst.rows !== this.first.rows || newLast.rows !== this.last.rows) || (newFirst.cols !== this.first.cols || newLast.cols !== this.last.cols);\n            newScrollPos = { top: scrollTop, left: scrollLeft };\n        }\n        else {\n            const scrollPos = this.horizontal ? scrollLeft : scrollTop;\n            const isScrollDownOrRight = this.lastScrollPos <= scrollPos;\n            const currentIndex = calculateCurrentIndex(scrollPos, this._itemSize);\n            const triggerIndex = calculateTriggerIndex(currentIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);\n\n            newFirst = calculateFirst(currentIndex, triggerIndex, this.first, this.last, this.numItemsInViewport, this.d_numToleratedItems, isScrollDownOrRight);\n            newLast = calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);\n            isRangeChanged = newFirst !== this.first || newLast !== this.last;\n            newScrollPos = scrollPos;\n        }\n\n        return {\n            first: newFirst,\n            last: newLast,\n            isRangeChanged,\n            scrollPos: newScrollPos\n        }\n    }\n\n    onScrollChange(event) {\n        const { first, last, isRangeChanged, scrollPos } = this.onScrollPositionChange(event);\n\n        if (isRangeChanged) {\n            const newState = { first, last };\n\n            this.setContentPosition(newState);\n\n            this.first = first;\n            this.last = last;\n            this.lastScrollPos = scrollPos;\n\n            this.handleEvents('onScrollIndexChange', newState);\n\n            if (this._lazy) {\n                this.handleEvents('onLazyLoad', newState);\n            }\n        }\n    }\n\n    onContainerScroll(event) {\n        this.handleEvents('onScroll', { originalEvent: event });\n\n        if (this._delay) {\n            if (this.scrollTimeout) {\n                clearTimeout(this.scrollTimeout);\n            }\n\n            if (!this.d_loading && this.showLoader) {\n                const { isRangeChanged: changed } = this.onScrollPositionChange(event);\n                if (changed) {\n                    this.d_loading = true;\n\n                    this.cd.detectChanges();\n                }\n            }\n\n            this.scrollTimeout = setTimeout(() => {\n                this.onScrollChange(event);\n\n                if (this.d_loading && this.showLoader && (!this._lazy || this._loading === undefined)) {\n                    this.d_loading = false;\n\n                    this.cd.detectChanges();\n                }\n            }, this._delay);\n        }\n        else {\n            this.onScrollChange(event);\n        }\n    }\n\n    onWindowResize() {\n        if (this.resizeTimeout) {\n            clearTimeout(this.resizeTimeout);\n        }\n\n        this.resizeTimeout = setTimeout(() => {\n            if (this.elementViewChild) {\n                const [width, height] = [DomHandler.getWidth(this.elementViewChild.nativeElement), DomHandler.getHeight(this.elementViewChild.nativeElement)];\n                const [isDiffWidth, isDiffHeight] = [width !== this.defaultWidth, height !== this.defaultHeight];\n                const reinit = this.both ? (isDiffWidth || isDiffHeight) : (this.horizontal ? isDiffWidth : (this.vertical ? isDiffHeight : false));\n\n                reinit && this.zone.run(() => {\n                    this.d_numToleratedItems = this._numToleratedItems;\n                    this.defaultWidth = width;\n                    this.defaultHeight = height;\n\n                    this.init();\n                });\n            }\n        }, this._resizeDelay);\n    }\n\n    handleEvents(name, params) {\n        return this.options && this.options[name] ? this.options[name](params) : this[name].emit(params);\n    }\n\n    getContentOptions() {\n        return {\n            contentStyleClass: `p-scroller-content ${this.d_loading ? 'p-scroller-loading' : ''}`,\n            items: this.loadedItems,\n            getItemOptions: (index) => this.getOptions(index),\n            loading: this.d_loading,\n            getLoaderOptions: (index, options?) => this.getLoaderOptions(index, options),\n            itemSize: this._itemSize,\n            rows: this.loadedRows,\n            columns: this.loadedColumns,\n            spacerStyle: this.spacerStyle,\n            contentStyle: this.contentStyle,\n            vertical: this.vertical,\n            horizontal: this.horizontal,\n            both: this.both\n        }\n    }\n\n    getOptions(renderedIndex) {\n        const count = (this._items || []).length;\n        const index = this.both ? this.first.rows + renderedIndex : this.first + renderedIndex;\n\n        return {\n            index,\n            count,\n            first: index === 0,\n            last: index === (count - 1),\n            even: index % 2 === 0,\n            odd: index % 2 !== 0\n        }\n    }\n\n    getLoaderOptions(index, extOptions) {\n        const count = this.loaderArr.length;\n\n        return {\n            index,\n            count,\n            first: index === 0,\n            last: index === (count - 1),\n            even: index % 2 === 0,\n            odd: index % 2 !== 0,\n            ...extOptions\n        }\n    }\n}\n\n@NgModule({\n    imports: [CommonModule],\n    exports: [Scroller],\n    declarations: [Scroller]\n})\nexport class ScrollerModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}