{"version":3,"file":"index.mjs","sources":["../../src/virtualscroller/BaseVirtualScroller.vue","../../src/virtualscroller/VirtualScroller.vue","../../src/virtualscroller/VirtualScroller.vue?vue&type=template&id=93541766&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@openvue/core/basecomponent';\nimport VirtualScrollerStyle from 'openvue/virtualscroller/style';\n\nexport default {\n    name: 'BaseVirtualScroller',\n    extends: BaseComponent,\n    props: {\n        id: {\n            type: String,\n            default: null\n        },\n        style: null,\n        class: null,\n        items: {\n            type: Array,\n            default: null\n        },\n        itemSize: {\n            type: [Number, Array],\n            default: 0\n        },\n        getItemSize: {\n            type: Function,\n            default: null\n        },\n        scrollHeight: null,\n        scrollWidth: null,\n        orientation: {\n            type: String,\n            default: 'vertical'\n        },\n        numToleratedItems: {\n            type: Number,\n            default: null\n        },\n        delay: {\n            type: Number,\n            default: 0\n        },\n        resizeDelay: {\n            type: Number,\n            default: 10\n        },\n        lazy: {\n            type: Boolean,\n            default: false\n        },\n        disabled: {\n            type: Boolean,\n            default: false\n        },\n        loaderDisabled: {\n            type: Boolean,\n            default: false\n        },\n        columns: {\n            type: Array,\n            default: null\n        },\n        loading: {\n            type: Boolean,\n            default: false\n        },\n        showSpacer: {\n            type: Boolean,\n            default: true\n        },\n        showLoader: {\n            type: Boolean,\n            default: false\n        },\n        tabindex: {\n            type: Number,\n            default: 0\n        },\n        inline: {\n            type: Boolean,\n            default: false\n        },\n        step: {\n            type: Number,\n            default: 0\n        },\n        appendOnly: {\n            type: Boolean,\n            default: false\n        },\n        autoSize: {\n            type: Boolean,\n            default: false\n        }\n    },\n    style: VirtualScrollerStyle,\n    provide() {\n        return {\n            $pcVirtualScroller: this,\n            $parentInstance: this\n        };\n    },\n    beforeMount() {\n        VirtualScrollerStyle.loadCSS({ nonce: this.$primevueConfig?.csp?.nonce });\n    }\n};\n</script>\n","<template>\n    <template v-if=\"!disabled\">\n        <div :ref=\"elementRef\" :class=\"containerClass\" :tabindex=\"tabindex\" :style=\"style\" @scroll=\"onScroll\" v-bind=\"ptmi('root')\">\n            <slot\n                name=\"content\"\n                :styleClass=\"contentClass\"\n                :items=\"loadedItems\"\n                :getItemOptions=\"getOptions\"\n                :loading=\"d_loading\"\n                :getLoaderOptions=\"getLoaderOptions\"\n                :itemSize=\"itemSize\"\n                :rows=\"loadedRows\"\n                :columns=\"loadedColumns\"\n                :contentRef=\"contentRef\"\n                :spacerStyle=\"spacerStyle\"\n                :contentStyle=\"contentStyle\"\n                :vertical=\"isVertical()\"\n                :horizontal=\"isHorizontal()\"\n                :both=\"isBoth()\"\n            >\n                <div :ref=\"contentRef\" :class=\"contentClass\" :style=\"contentStyle\" v-bind=\"ptm('content')\">\n                    <template v-for=\"(item, index) of loadedItems\" :key=\"index\">\n                        <slot name=\"item\" :item=\"item\" :options=\"getOptions(index)\"></slot>\n                    </template>\n                </div>\n            </slot>\n            <div v-if=\"showSpacer\" class=\"p-virtualscroller-spacer\" :style=\"spacerStyle\" v-bind=\"ptm('spacer')\"></div>\n            <div v-if=\"!loaderDisabled && showLoader && d_loading\" :class=\"loaderClass\" v-bind=\"ptm('loader')\">\n                <template v-if=\"$slots && $slots.loader\">\n                    <template v-for=\"(_, index) of loaderArr\" :key=\"index\">\n                        <slot name=\"loader\" :options=\"getLoaderOptions(index, isBoth() && { numCols: d_numItemsInViewport.cols })\"></slot>\n                    </template>\n                </template>\n                <slot name=\"loadingicon\">\n                    <SpinnerIcon spin class=\"p-virtualscroller-loading-icon\" v-bind=\"ptm('loadingIcon')\" />\n                </slot>\n            </div>\n        </div>\n    </template>\n    <template v-else>\n        <slot></slot>\n        <slot name=\"content\" :items=\"items\" :rows=\"items\" :columns=\"loadedColumns\"></slot>\n    </template>\n</template>\n\n<script>\nimport { findSingle, getHeight, getWidth, isVisible } from '@openuxkit/utils/dom';\nimport SpinnerIcon from '@openvue/icons/spinner';\nimport BaseVirtualScroller from './BaseVirtualScroller.vue';\n\nexport default {\n    name: 'VirtualScroller',\n    extends: BaseVirtualScroller,\n    inheritAttrs: false,\n    emits: ['update:numToleratedItems', 'scroll', 'scroll-index-change', 'lazy-load'],\n    data() {\n        const both = this.isBoth();\n\n        return {\n            first: both ? { rows: 0, cols: 0 } : 0,\n            last: both ? { rows: 0, cols: 0 } : 0,\n            page: both ? { rows: 0, cols: 0 } : 0,\n            numItemsInViewport: both ? { rows: 0, cols: 0 } : 0,\n            lastScrollPos: both ? { top: 0, left: 0 } : 0,\n            d_numToleratedItems: this.numToleratedItems,\n            d_loading: this.loading,\n            loaderArr: [],\n            spacerStyle: {},\n            contentStyle: {},\n            cumulativeSizes: null\n        };\n    },\n    element: null,\n    content: null,\n    lastScrollPos: null,\n    scrollTimeout: null,\n    resizeTimeout: null,\n    defaultWidth: 0,\n    defaultHeight: 0,\n    defaultContentWidth: 0,\n    defaultContentHeight: 0,\n    isRangeChanged: false,\n    lazyLoadState: {},\n    resizeListener: null,\n    resizeObserver: null,\n    initialized: false,\n    watch: {\n        numToleratedItems(newValue) {\n            this.d_numToleratedItems = newValue;\n        },\n        loading(newValue, oldValue) {\n            if (this.lazy && newValue !== oldValue && newValue !== this.d_loading) {\n                this.d_loading = newValue;\n            }\n        },\n        items: {\n            handler(newValue, oldValue) {\n                if (!oldValue || oldValue.length !== (newValue || []).length || typeof this.getItemSize === 'function') {\n                    this.init();\n                    this.calculateAutoSize();\n                }\n            },\n            deep: true\n        },\n        itemSize() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        getItemSize() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        orientation() {\n            this.lastScrollPos = this.isBoth() ? { top: 0, left: 0 } : 0;\n        },\n        scrollHeight() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        scrollWidth() {\n            this.init();\n            this.calculateAutoSize();\n        }\n    },\n    mounted() {\n        this.viewInit();\n\n        this.lastScrollPos = this.isBoth() ? { top: 0, left: 0 } : 0;\n        this.lazyLoadState = this.lazyLoadState || {};\n    },\n    updated() {\n        !this.initialized && this.viewInit();\n    },\n    unmounted() {\n        this.unbindResizeListener();\n\n        this.initialized = false;\n    },\n    methods: {\n        viewInit() {\n            if (isVisible(this.element)) {\n                this.setContentEl(this.content);\n                this.init();\n                this.calculateAutoSize();\n\n                this.defaultWidth = getWidth(this.element);\n                this.defaultHeight = getHeight(this.element);\n                this.defaultContentWidth = getWidth(this.content);\n                this.defaultContentHeight = getHeight(this.content);\n                this.initialized = true;\n            }\n\n            if (this.element) {\n                this.bindResizeListener();\n            }\n        },\n        init() {\n            if (!this.disabled) {\n                this.setSize();\n                this.buildCumulativeSizes();\n                this.calculateOptions();\n                this.setSpacerSize();\n                this.cumulativeSizes && this.setContentPosition();\n            }\n        },\n        buildCumulativeSizes() {\n            if (typeof this.getItemSize !== 'function' || this.isBoth() || this.isHorizontal()) {\n                this.cumulativeSizes = null;\n\n                return;\n            }\n\n            const items = this.items || [];\n            const sizes = new Array(items.length + 1);\n\n            sizes[0] = 0;\n\n            for (let i = 0; i < items.length; i++) {\n                sizes[i + 1] = sizes[i] + this.getItemSize(i);\n            }\n\n            this.cumulativeSizes = sizes;\n        },\n        getItemOffset(index) {\n            if (this.cumulativeSizes) {\n                const i = Math.max(0, Math.min(index, this.cumulativeSizes.length - 1));\n\n                return this.cumulativeSizes[i];\n            }\n\n            return index * this.itemSize;\n        },\n        getIndexAtOffset(offset) {\n            if (!this.cumulativeSizes) {\n                return Math.floor(offset / (this.itemSize || offset));\n            }\n\n            const sizes = this.cumulativeSizes;\n\n            if (offset <= 0) return 0;\n\n            const last = sizes.length - 1;\n\n            if (offset >= sizes[last]) return Math.max(0, last - 1);\n\n            let lo = 0;\n            let hi = last;\n\n            while (lo < hi) {\n                const mid = (lo + hi) >>> 1;\n\n                if (sizes[mid + 1] <= offset) lo = mid + 1;\n                else hi = mid;\n            }\n\n            return lo;\n        },\n        getLastByCumulative(first, numToleratedItems, numItemsInViewport) {\n            if (!this.cumulativeSizes) return this.getLast(first);\n\n            const sizes = this.cumulativeSizes;\n            const contentPos = this.getContentPosition();\n            const contentHeight = this.element ? this.element.offsetHeight - contentPos.top : 0;\n            const startOffset = sizes[Math.min(first, sizes.length - 1)];\n            const target = startOffset + contentHeight + 2 * numToleratedItems * (this.itemSize || 0);\n\n            if (sizes[sizes.length - 1] === startOffset) {\n                return this.getLast(first + numItemsInViewport + (first < numToleratedItems ? 2 : 3) * numToleratedItems);\n            }\n\n            let lo = first;\n            let hi = sizes.length - 1;\n\n            while (lo < hi) {\n                const mid = (lo + hi) >>> 1;\n\n                if (sizes[mid] < target) lo = mid + 1;\n                else hi = mid;\n            }\n\n            return lo;\n        },\n        isVertical() {\n            return this.orientation === 'vertical';\n        },\n        isHorizontal() {\n            return this.orientation === 'horizontal';\n        },\n        isBoth() {\n            return this.orientation === 'both';\n        },\n        scrollTo(options) {\n            //this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n            this.element && this.element.scrollTo(options);\n        },\n        scrollToIndex(index, behavior = 'auto') {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const valid = both ? index.every((i) => i > -1) : index > -1;\n\n            if (valid) {\n                const first = this.first;\n                const { scrollTop = 0, scrollLeft = 0 } = this.element;\n                const { numToleratedItems } = this.calculateNumItems();\n                const contentPos = this.getContentPosition();\n                const itemSize = this.itemSize;\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                let newFirst = both ? { rows: 0, cols: 0 } : 0;\n                let isRangeChanged = false,\n                    isScrollChanged = false;\n\n                if (both) {\n                    newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };\n                    scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));\n                    isScrollChanged = this.lastScrollPos.top !== scrollTop || this.lastScrollPos.left !== scrollLeft;\n                    isRangeChanged = newFirst.rows !== first.rows || newFirst.cols !== first.cols;\n                } else {\n                    newFirst = calculateFirst(index, numToleratedItems);\n\n                    if (horizontal) {\n                        scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop);\n                    } else if (this.cumulativeSizes) {\n                        scrollTo(scrollLeft, this.getItemOffset(newFirst) + contentPos.top);\n                    } else {\n                        scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));\n                    }\n\n                    isScrollChanged = this.lastScrollPos !== (horizontal ? scrollLeft : scrollTop);\n                    isRangeChanged = newFirst !== first;\n                }\n\n                this.isRangeChanged = isRangeChanged;\n                isScrollChanged && (this.first = newFirst);\n            }\n        },\n        scrollInView(index, to, behavior = 'auto') {\n            if (to) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const valid = both ? index.every((i) => i > -1) : index > -1;\n\n                if (valid) {\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 (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                            } 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                        } else {\n                            if (viewport.first - first > index) {\n                                const target = viewport.first - 1;\n                                const pos = !horizontal && this.cumulativeSizes ? this.getItemOffset(target) : target * this.itemSize;\n\n                                horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                            }\n                        }\n                    } else if (isToEnd) {\n                        if (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                            } 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                        } else {\n                            if (viewport.last - first <= index + 1) {\n                                const target = viewport.first + 1;\n                                const pos = !horizontal && this.cumulativeSizes ? this.getItemOffset(target) : target * this.itemSize;\n\n                                horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                            }\n                        }\n                    }\n                }\n            } else {\n                this.scrollToIndex(index, behavior);\n            }\n        },\n        getRenderedRange() {\n            const calculateFirstInViewport = (_pos, _size) => Math.floor(_pos / (_size || _pos));\n\n            let firstInViewport = this.first;\n            let lastInViewport = 0;\n\n            if (this.element) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const { scrollTop, scrollLeft } = this.element;\n\n                if (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                } else {\n                    const scrollPos = horizontal ? scrollLeft : scrollTop;\n\n                    firstInViewport = !horizontal && this.cumulativeSizes ? this.getIndexAtOffset(scrollPos) : 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        calculateNumItems() {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const itemSize = this.itemSize;\n            const contentPos = this.getContentPosition();\n            const contentWidth = this.element ? this.element.offsetWidth - contentPos.left : 0;\n            const contentHeight = this.element ? this.element.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 = both\n                ? { rows: calculateNumItemsInViewport(contentHeight, itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, itemSize[1]) }\n                : calculateNumItemsInViewport(horizontal ? contentWidth : contentHeight, itemSize);\n\n            const numToleratedItems = this.d_numToleratedItems || (both ? [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : calculateNumToleratedItems(numItemsInViewport));\n\n            return { numItemsInViewport, numToleratedItems };\n        },\n        calculateOptions() {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const first = this.first;\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            let last;\n\n            if (both) {\n                last = { rows: calculateLast(first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(first.cols, numItemsInViewport.cols, numToleratedItems[1], true) };\n            } else if (!horizontal && this.cumulativeSizes) {\n                last = this.getLastByCumulative(first, numToleratedItems, numItemsInViewport);\n            } else {\n                last = calculateLast(first, numItemsInViewport, numToleratedItems);\n            }\n\n            this.last = last;\n            this.numItemsInViewport = numItemsInViewport;\n            this.d_numToleratedItems = numToleratedItems;\n            this.$emit('update:numToleratedItems', this.d_numToleratedItems);\n\n            if (this.showLoader) {\n                this.loaderArr = both ? Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : Array.from({ length: numItemsInViewport });\n            }\n\n            if (this.lazy) {\n                Promise.resolve().then(() => {\n                    this.lazyLoadState = {\n                        first: this.step ? (both ? { rows: 0, cols: first.cols } : 0) : first,\n                        last: Math.min(this.step ? this.step : last, this.items?.length || 0)\n                    };\n\n                    this.$emit('lazy-load', this.lazyLoadState);\n                });\n            }\n        },\n        calculateAutoSize() {\n            if (this.autoSize && !this.d_loading) {\n                Promise.resolve().then(() => {\n                    if (this.content) {\n                        const both = this.isBoth();\n                        const horizontal = this.isHorizontal();\n                        const vertical = this.isVertical();\n\n                        this.content.style.minHeight = this.content.style.minWidth = 'auto';\n                        this.content.style.position = 'relative';\n                        this.element.style.contain = 'none';\n\n                        /*const [contentWidth, contentHeight] = [getWidth(this.content), getHeight(this.content)];\n\n                        contentWidth !== this.defaultContentWidth && (this.element.style.width = '');\n                        contentHeight !== this.defaultContentHeight && (this.element.style.height = '');*/\n\n                        const [width, height] = [getWidth(this.element), getHeight(this.element)];\n\n                        (both || horizontal) && (this.element.style.width = width < this.defaultWidth ? width + 'px' : this.scrollWidth || this.defaultWidth + 'px');\n                        (both || vertical) && (this.element.style.height = height < this.defaultHeight ? height + 'px' : this.scrollHeight || this.defaultHeight + 'px');\n\n                        this.content.style.minHeight = this.content.style.minWidth = '';\n                        this.content.style.position = '';\n                        this.element.style.contain = '';\n                    }\n                });\n            }\n        },\n        getLast(last = 0, isCols) {\n            return this.items ? Math.min(isCols ? (this.columns || this.items[0])?.length || 0 : this.items?.length || 0, last) : 0;\n        },\n        getContentPosition() {\n            if (this.content) {\n                const style = getComputedStyle(this.content);\n                const left = parseFloat(style.paddingLeft) + Math.max(parseFloat(style.left) || 0, 0);\n                const right = parseFloat(style.paddingRight) + Math.max(parseFloat(style.right) || 0, 0);\n                const top = parseFloat(style.paddingTop) + Math.max(parseFloat(style.top) || 0, 0);\n                const bottom = parseFloat(style.paddingBottom) + Math.max(parseFloat(style.bottom) || 0, 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        setSize() {\n            if (this.element) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const parentElement = this.element.parentElement;\n                const width = this.scrollWidth || `${this.element.offsetWidth || parentElement.offsetWidth}px`;\n                const height = this.scrollHeight || `${this.element.offsetHeight || parentElement.offsetHeight}px`;\n                const setProp = (_name, _value) => (this.element.style[_name] = _value);\n\n                if (both || horizontal) {\n                    setProp('height', height);\n                    setProp('width', width);\n                } else {\n                    setProp('height', height);\n                }\n            }\n        },\n        setSpacerSize() {\n            const items = this.items;\n\n            if (items) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const contentPos = this.getContentPosition();\n                const setProp = (_name, _value, _size, _cpos = 0) => (this.spacerStyle = { ...this.spacerStyle, ...{ [`${_name}`]: (_value || []).length * _size + _cpos + 'px' } });\n                const setVerticalSize = (_cpos = 0) => (this.spacerStyle = { ...this.spacerStyle, height: this.cumulativeSizes[this.cumulativeSizes.length - 1] + _cpos + 'px' });\n\n                if (both) {\n                    setProp('height', items, this.itemSize[0], contentPos.y);\n                    setProp('width', this.columns || items[1], this.itemSize[1], contentPos.x);\n                } else if (horizontal) {\n                    setProp('width', this.columns || items, this.itemSize, contentPos.x);\n                } else if (this.cumulativeSizes) {\n                    setVerticalSize(contentPos.y);\n                } else {\n                    setProp('height', items, this.itemSize, contentPos.y);\n                }\n            }\n        },\n        setContentPosition(pos) {\n            if (this.content && !this.appendOnly) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\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 (both) {\n                    setTransform(calculateTranslateVal(first.cols, this.itemSize[1]), calculateTranslateVal(first.rows, this.itemSize[0]));\n                } else if (horizontal) {\n                    setTransform(calculateTranslateVal(first, this.itemSize), 0);\n                } else {\n                    setTransform(0, this.cumulativeSizes ? this.getItemOffset(first) : calculateTranslateVal(first, this.itemSize));\n                }\n            }\n        },\n        onScrollPositionChange(event) {\n            const target = event.target;\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\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\n            const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n                return _currentIndex <= _numT ? _numT : _isScrollDownOrRight ? _last - _num - _numT : _first + _numT - 1;\n            };\n\n            const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight, _isCols) => {\n                if (_currentIndex <= _numT) return 0;\n                const firstValue = Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);\n                const maxFirst = this.getLast(firstValue, _isCols);\n                if (firstValue > maxFirst) return maxFirst - _num;\n                else return firstValue;\n            };\n\n            const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols) => {\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 = both ? { rows: 0, cols: 0 } : 0;\n            let newLast = this.last;\n            let isRangeChanged = false;\n            let newScrollPos = this.lastScrollPos;\n\n            if (both) {\n                const isScrollDown = this.lastScrollPos.top <= scrollTop;\n                const isScrollRight = this.lastScrollPos.left <= scrollLeft;\n\n                if (!this.appendOnly || (this.appendOnly && (isScrollDown || isScrollRight))) {\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, true)\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 || this.isRangeChanged;\n                    newScrollPos = { top: scrollTop, left: scrollLeft };\n                }\n            } else {\n                const scrollPos = horizontal ? scrollLeft : scrollTop;\n                const isScrollDownOrRight = this.lastScrollPos <= scrollPos;\n\n                if (!this.appendOnly || (this.appendOnly && isScrollDownOrRight)) {\n                    const currentIndex = !horizontal && this.cumulativeSizes ? this.getIndexAtOffset(scrollPos) : 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 =\n                        !horizontal && this.cumulativeSizes ? this.getLastByCumulative(newFirst, this.d_numToleratedItems, this.numItemsInViewport) : calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);\n                    isRangeChanged = newFirst !== this.first || newLast !== this.last || this.isRangeChanged;\n                    newScrollPos = scrollPos;\n                }\n            }\n\n            return {\n                first: newFirst,\n                last: newLast,\n                isRangeChanged,\n                scrollPos: newScrollPos\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.$emit('scroll-index-change', newState);\n\n                if (this.lazy && this.isPageChanged(first)) {\n                    const lazyLoadState = {\n                        first: this.step ? Math.min(this.getPageByFirst(first) * this.step, (this.items?.length || 0) - this.step) : first,\n                        last: Math.min(this.step ? (this.getPageByFirst(first) + 1) * this.step : last, this.items?.length || 0)\n                    };\n                    const isLazyStateChanged = this.lazyLoadState.first !== lazyLoadState.first || this.lazyLoadState.last !== lazyLoadState.last;\n\n                    isLazyStateChanged && this.$emit('lazy-load', lazyLoadState);\n                    this.lazyLoadState = lazyLoadState;\n                }\n            }\n        },\n        onScroll(event) {\n            this.$emit('scroll', event);\n\n            if (this.delay) {\n                if (this.scrollTimeout) {\n                    clearTimeout(this.scrollTimeout);\n                }\n\n                if (this.isPageChanged()) {\n                    if (!this.d_loading && this.showLoader) {\n                        const { isRangeChanged } = this.onScrollPositionChange(event);\n                        const changed = isRangeChanged || (this.step ? this.isPageChanged() : false);\n\n                        changed && (this.d_loading = true);\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                            this.page = this.getPageByFirst();\n                        }\n                    }, this.delay);\n                }\n            } else {\n                this.onScrollChange(event);\n            }\n        },\n        onResize() {\n            if (this.resizeTimeout) {\n                clearTimeout(this.resizeTimeout);\n            }\n\n            this.resizeTimeout = setTimeout(() => {\n                if (isVisible(this.element)) {\n                    const both = this.isBoth();\n                    const vertical = this.isVertical();\n                    const horizontal = this.isHorizontal();\n                    const [width, height] = [getWidth(this.element), getHeight(this.element)];\n                    const [isDiffWidth, isDiffHeight] = [width !== this.defaultWidth, height !== this.defaultHeight];\n                    const reinit = both ? isDiffWidth || isDiffHeight : horizontal ? isDiffWidth : vertical ? isDiffHeight : false;\n\n                    if (reinit) {\n                        this.d_numToleratedItems = this.numToleratedItems;\n                        this.defaultWidth = width;\n                        this.defaultHeight = height;\n                        this.defaultContentWidth = getWidth(this.content);\n                        this.defaultContentHeight = getHeight(this.content);\n\n                        this.init();\n                    }\n                }\n            }, this.resizeDelay);\n        },\n        bindResizeListener() {\n            if (!this.resizeListener) {\n                this.resizeListener = this.onResize.bind(this);\n\n                window.addEventListener('resize', this.resizeListener);\n                window.addEventListener('orientationchange', this.resizeListener);\n\n                this.resizeObserver = new ResizeObserver(() => {\n                    this.onResize();\n                });\n                this.resizeObserver.observe(this.element);\n            }\n        },\n        unbindResizeListener() {\n            if (this.resizeListener) {\n                window.removeEventListener('resize', this.resizeListener);\n                window.removeEventListener('orientationchange', this.resizeListener);\n                this.resizeListener = null;\n            }\n\n            if (this.resizeObserver) {\n                this.resizeObserver.disconnect();\n                this.resizeObserver = null;\n            }\n        },\n        getOptions(renderedIndex) {\n            const count = (this.items || []).length;\n            let index = this.isBoth() ? this.first.rows + renderedIndex : this.first + renderedIndex;\n\n            if (!this.isBoth() && this.variableLoadedRange) {\n                index = this.variableLoadedRange.indexes[renderedIndex];\n            }\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        getLoaderOptions(index, extOptions) {\n            let 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        getPageByFirst(first) {\n            return Math.floor(((first ?? this.first) + this.d_numToleratedItems * 4) / (this.step || 1));\n        },\n        isPageChanged(first) {\n            return this.step && !this.lazy ? this.page !== this.getPageByFirst(first ?? this.first) : true;\n        },\n        setContentEl(el) {\n            this.content = el || this.content || findSingle(this.element, '[data-pc-section=\"content\"]');\n        },\n        elementRef(el) {\n            this.element = el;\n        },\n        contentRef(el) {\n            this.content = el;\n        }\n    },\n    computed: {\n        containerClass() {\n            return [\n                'p-virtualscroller',\n                this.class,\n                {\n                    'p-virtualscroller-inline': this.inline,\n                    'p-virtualscroller-both p-both-scroll': this.isBoth(),\n                    'p-virtualscroller-horizontal p-horizontal-scroll': this.isHorizontal()\n                }\n            ];\n        },\n        contentClass() {\n            return [\n                'p-virtualscroller-content',\n                {\n                    'p-virtualscroller-loading': this.d_loading\n                }\n            ];\n        },\n        loaderClass() {\n            return [\n                'p-virtualscroller-loader',\n                {\n                    'p-virtualscroller-loader-mask': !this.$slots.loader\n                }\n            ];\n        },\n        variableLoadedRange() {\n            if (!this.items || this.d_loading || !this.cumulativeSizes) {\n                return null;\n            }\n\n            const start = this.appendOnly ? 0 : this.first;\n            const items = [];\n            const indexes = [];\n\n            for (let index = start; index < this.last; index++) {\n                if (this.cumulativeSizes[index + 1] > this.cumulativeSizes[index]) {\n                    items.push(this.items[index]);\n                    indexes.push(index);\n                }\n            }\n\n            return { items, indexes };\n        },\n        loadedItems() {\n            if (this.items && !this.d_loading) {\n                if (this.isBoth()) return this.items.slice(this.appendOnly ? 0 : this.first.rows, this.last.rows).map((item) => (this.columns ? item : item.slice(this.appendOnly ? 0 : this.first.cols, this.last.cols)));\n                else if (this.isHorizontal() && this.columns) return this.items;\n                else if (this.variableLoadedRange) return this.variableLoadedRange.items;\n                else return this.items.slice(this.appendOnly ? 0 : this.first, this.last);\n            }\n\n            return [];\n        },\n        loadedRows() {\n            return this.d_loading ? (this.loaderDisabled ? this.loaderArr : []) : this.loadedItems;\n        },\n        loadedColumns() {\n            if (this.columns) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n\n                if (both || horizontal) {\n                    return this.d_loading && this.loaderDisabled ? (both ? this.loaderArr[0] : this.loaderArr) : this.columns.slice(both ? this.first.cols : this.first, both ? this.last.cols : this.last);\n                }\n            }\n\n            return this.columns;\n        }\n    },\n    components: {\n        SpinnerIcon: SpinnerIcon\n    }\n};\n</script>\n","<template>\n    <template v-if=\"!disabled\">\n        <div :ref=\"elementRef\" :class=\"containerClass\" :tabindex=\"tabindex\" :style=\"style\" @scroll=\"onScroll\" v-bind=\"ptmi('root')\">\n            <slot\n                name=\"content\"\n                :styleClass=\"contentClass\"\n                :items=\"loadedItems\"\n                :getItemOptions=\"getOptions\"\n                :loading=\"d_loading\"\n                :getLoaderOptions=\"getLoaderOptions\"\n                :itemSize=\"itemSize\"\n                :rows=\"loadedRows\"\n                :columns=\"loadedColumns\"\n                :contentRef=\"contentRef\"\n                :spacerStyle=\"spacerStyle\"\n                :contentStyle=\"contentStyle\"\n                :vertical=\"isVertical()\"\n                :horizontal=\"isHorizontal()\"\n                :both=\"isBoth()\"\n            >\n                <div :ref=\"contentRef\" :class=\"contentClass\" :style=\"contentStyle\" v-bind=\"ptm('content')\">\n                    <template v-for=\"(item, index) of loadedItems\" :key=\"index\">\n                        <slot name=\"item\" :item=\"item\" :options=\"getOptions(index)\"></slot>\n                    </template>\n                </div>\n            </slot>\n            <div v-if=\"showSpacer\" class=\"p-virtualscroller-spacer\" :style=\"spacerStyle\" v-bind=\"ptm('spacer')\"></div>\n            <div v-if=\"!loaderDisabled && showLoader && d_loading\" :class=\"loaderClass\" v-bind=\"ptm('loader')\">\n                <template v-if=\"$slots && $slots.loader\">\n                    <template v-for=\"(_, index) of loaderArr\" :key=\"index\">\n                        <slot name=\"loader\" :options=\"getLoaderOptions(index, isBoth() && { numCols: d_numItemsInViewport.cols })\"></slot>\n                    </template>\n                </template>\n                <slot name=\"loadingicon\">\n                    <SpinnerIcon spin class=\"p-virtualscroller-loading-icon\" v-bind=\"ptm('loadingIcon')\" />\n                </slot>\n            </div>\n        </div>\n    </template>\n    <template v-else>\n        <slot></slot>\n        <slot name=\"content\" :items=\"items\" :rows=\"items\" :columns=\"loadedColumns\"></slot>\n    </template>\n</template>\n\n<script>\nimport { findSingle, getHeight, getWidth, isVisible } from '@openuxkit/utils/dom';\nimport SpinnerIcon from '@openvue/icons/spinner';\nimport BaseVirtualScroller from './BaseVirtualScroller.vue';\n\nexport default {\n    name: 'VirtualScroller',\n    extends: BaseVirtualScroller,\n    inheritAttrs: false,\n    emits: ['update:numToleratedItems', 'scroll', 'scroll-index-change', 'lazy-load'],\n    data() {\n        const both = this.isBoth();\n\n        return {\n            first: both ? { rows: 0, cols: 0 } : 0,\n            last: both ? { rows: 0, cols: 0 } : 0,\n            page: both ? { rows: 0, cols: 0 } : 0,\n            numItemsInViewport: both ? { rows: 0, cols: 0 } : 0,\n            lastScrollPos: both ? { top: 0, left: 0 } : 0,\n            d_numToleratedItems: this.numToleratedItems,\n            d_loading: this.loading,\n            loaderArr: [],\n            spacerStyle: {},\n            contentStyle: {},\n            cumulativeSizes: null\n        };\n    },\n    element: null,\n    content: null,\n    lastScrollPos: null,\n    scrollTimeout: null,\n    resizeTimeout: null,\n    defaultWidth: 0,\n    defaultHeight: 0,\n    defaultContentWidth: 0,\n    defaultContentHeight: 0,\n    isRangeChanged: false,\n    lazyLoadState: {},\n    resizeListener: null,\n    resizeObserver: null,\n    initialized: false,\n    watch: {\n        numToleratedItems(newValue) {\n            this.d_numToleratedItems = newValue;\n        },\n        loading(newValue, oldValue) {\n            if (this.lazy && newValue !== oldValue && newValue !== this.d_loading) {\n                this.d_loading = newValue;\n            }\n        },\n        items: {\n            handler(newValue, oldValue) {\n                if (!oldValue || oldValue.length !== (newValue || []).length || typeof this.getItemSize === 'function') {\n                    this.init();\n                    this.calculateAutoSize();\n                }\n            },\n            deep: true\n        },\n        itemSize() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        getItemSize() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        orientation() {\n            this.lastScrollPos = this.isBoth() ? { top: 0, left: 0 } : 0;\n        },\n        scrollHeight() {\n            this.init();\n            this.calculateAutoSize();\n        },\n        scrollWidth() {\n            this.init();\n            this.calculateAutoSize();\n        }\n    },\n    mounted() {\n        this.viewInit();\n\n        this.lastScrollPos = this.isBoth() ? { top: 0, left: 0 } : 0;\n        this.lazyLoadState = this.lazyLoadState || {};\n    },\n    updated() {\n        !this.initialized && this.viewInit();\n    },\n    unmounted() {\n        this.unbindResizeListener();\n\n        this.initialized = false;\n    },\n    methods: {\n        viewInit() {\n            if (isVisible(this.element)) {\n                this.setContentEl(this.content);\n                this.init();\n                this.calculateAutoSize();\n\n                this.defaultWidth = getWidth(this.element);\n                this.defaultHeight = getHeight(this.element);\n                this.defaultContentWidth = getWidth(this.content);\n                this.defaultContentHeight = getHeight(this.content);\n                this.initialized = true;\n            }\n\n            if (this.element) {\n                this.bindResizeListener();\n            }\n        },\n        init() {\n            if (!this.disabled) {\n                this.setSize();\n                this.buildCumulativeSizes();\n                this.calculateOptions();\n                this.setSpacerSize();\n                this.cumulativeSizes && this.setContentPosition();\n            }\n        },\n        buildCumulativeSizes() {\n            if (typeof this.getItemSize !== 'function' || this.isBoth() || this.isHorizontal()) {\n                this.cumulativeSizes = null;\n\n                return;\n            }\n\n            const items = this.items || [];\n            const sizes = new Array(items.length + 1);\n\n            sizes[0] = 0;\n\n            for (let i = 0; i < items.length; i++) {\n                sizes[i + 1] = sizes[i] + this.getItemSize(i);\n            }\n\n            this.cumulativeSizes = sizes;\n        },\n        getItemOffset(index) {\n            if (this.cumulativeSizes) {\n                const i = Math.max(0, Math.min(index, this.cumulativeSizes.length - 1));\n\n                return this.cumulativeSizes[i];\n            }\n\n            return index * this.itemSize;\n        },\n        getIndexAtOffset(offset) {\n            if (!this.cumulativeSizes) {\n                return Math.floor(offset / (this.itemSize || offset));\n            }\n\n            const sizes = this.cumulativeSizes;\n\n            if (offset <= 0) return 0;\n\n            const last = sizes.length - 1;\n\n            if (offset >= sizes[last]) return Math.max(0, last - 1);\n\n            let lo = 0;\n            let hi = last;\n\n            while (lo < hi) {\n                const mid = (lo + hi) >>> 1;\n\n                if (sizes[mid + 1] <= offset) lo = mid + 1;\n                else hi = mid;\n            }\n\n            return lo;\n        },\n        getLastByCumulative(first, numToleratedItems, numItemsInViewport) {\n            if (!this.cumulativeSizes) return this.getLast(first);\n\n            const sizes = this.cumulativeSizes;\n            const contentPos = this.getContentPosition();\n            const contentHeight = this.element ? this.element.offsetHeight - contentPos.top : 0;\n            const startOffset = sizes[Math.min(first, sizes.length - 1)];\n            const target = startOffset + contentHeight + 2 * numToleratedItems * (this.itemSize || 0);\n\n            if (sizes[sizes.length - 1] === startOffset) {\n                return this.getLast(first + numItemsInViewport + (first < numToleratedItems ? 2 : 3) * numToleratedItems);\n            }\n\n            let lo = first;\n            let hi = sizes.length - 1;\n\n            while (lo < hi) {\n                const mid = (lo + hi) >>> 1;\n\n                if (sizes[mid] < target) lo = mid + 1;\n                else hi = mid;\n            }\n\n            return lo;\n        },\n        isVertical() {\n            return this.orientation === 'vertical';\n        },\n        isHorizontal() {\n            return this.orientation === 'horizontal';\n        },\n        isBoth() {\n            return this.orientation === 'both';\n        },\n        scrollTo(options) {\n            //this.lastScrollPos = this.both ? { top: 0, left: 0 } : 0;\n            this.element && this.element.scrollTo(options);\n        },\n        scrollToIndex(index, behavior = 'auto') {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const valid = both ? index.every((i) => i > -1) : index > -1;\n\n            if (valid) {\n                const first = this.first;\n                const { scrollTop = 0, scrollLeft = 0 } = this.element;\n                const { numToleratedItems } = this.calculateNumItems();\n                const contentPos = this.getContentPosition();\n                const itemSize = this.itemSize;\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                let newFirst = both ? { rows: 0, cols: 0 } : 0;\n                let isRangeChanged = false,\n                    isScrollChanged = false;\n\n                if (both) {\n                    newFirst = { rows: calculateFirst(index[0], numToleratedItems[0]), cols: calculateFirst(index[1], numToleratedItems[1]) };\n                    scrollTo(calculateCoord(newFirst.cols, itemSize[1], contentPos.left), calculateCoord(newFirst.rows, itemSize[0], contentPos.top));\n                    isScrollChanged = this.lastScrollPos.top !== scrollTop || this.lastScrollPos.left !== scrollLeft;\n                    isRangeChanged = newFirst.rows !== first.rows || newFirst.cols !== first.cols;\n                } else {\n                    newFirst = calculateFirst(index, numToleratedItems);\n\n                    if (horizontal) {\n                        scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop);\n                    } else if (this.cumulativeSizes) {\n                        scrollTo(scrollLeft, this.getItemOffset(newFirst) + contentPos.top);\n                    } else {\n                        scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));\n                    }\n\n                    isScrollChanged = this.lastScrollPos !== (horizontal ? scrollLeft : scrollTop);\n                    isRangeChanged = newFirst !== first;\n                }\n\n                this.isRangeChanged = isRangeChanged;\n                isScrollChanged && (this.first = newFirst);\n            }\n        },\n        scrollInView(index, to, behavior = 'auto') {\n            if (to) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const valid = both ? index.every((i) => i > -1) : index > -1;\n\n                if (valid) {\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 (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                            } 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                        } else {\n                            if (viewport.first - first > index) {\n                                const target = viewport.first - 1;\n                                const pos = !horizontal && this.cumulativeSizes ? this.getItemOffset(target) : target * this.itemSize;\n\n                                horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                            }\n                        }\n                    } else if (isToEnd) {\n                        if (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                            } 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                        } else {\n                            if (viewport.last - first <= index + 1) {\n                                const target = viewport.first + 1;\n                                const pos = !horizontal && this.cumulativeSizes ? this.getItemOffset(target) : target * this.itemSize;\n\n                                horizontal ? scrollTo(pos, 0) : scrollTo(0, pos);\n                            }\n                        }\n                    }\n                }\n            } else {\n                this.scrollToIndex(index, behavior);\n            }\n        },\n        getRenderedRange() {\n            const calculateFirstInViewport = (_pos, _size) => Math.floor(_pos / (_size || _pos));\n\n            let firstInViewport = this.first;\n            let lastInViewport = 0;\n\n            if (this.element) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const { scrollTop, scrollLeft } = this.element;\n\n                if (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                } else {\n                    const scrollPos = horizontal ? scrollLeft : scrollTop;\n\n                    firstInViewport = !horizontal && this.cumulativeSizes ? this.getIndexAtOffset(scrollPos) : 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        calculateNumItems() {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const itemSize = this.itemSize;\n            const contentPos = this.getContentPosition();\n            const contentWidth = this.element ? this.element.offsetWidth - contentPos.left : 0;\n            const contentHeight = this.element ? this.element.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 = both\n                ? { rows: calculateNumItemsInViewport(contentHeight, itemSize[0]), cols: calculateNumItemsInViewport(contentWidth, itemSize[1]) }\n                : calculateNumItemsInViewport(horizontal ? contentWidth : contentHeight, itemSize);\n\n            const numToleratedItems = this.d_numToleratedItems || (both ? [calculateNumToleratedItems(numItemsInViewport.rows), calculateNumToleratedItems(numItemsInViewport.cols)] : calculateNumToleratedItems(numItemsInViewport));\n\n            return { numItemsInViewport, numToleratedItems };\n        },\n        calculateOptions() {\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\n            const first = this.first;\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            let last;\n\n            if (both) {\n                last = { rows: calculateLast(first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(first.cols, numItemsInViewport.cols, numToleratedItems[1], true) };\n            } else if (!horizontal && this.cumulativeSizes) {\n                last = this.getLastByCumulative(first, numToleratedItems, numItemsInViewport);\n            } else {\n                last = calculateLast(first, numItemsInViewport, numToleratedItems);\n            }\n\n            this.last = last;\n            this.numItemsInViewport = numItemsInViewport;\n            this.d_numToleratedItems = numToleratedItems;\n            this.$emit('update:numToleratedItems', this.d_numToleratedItems);\n\n            if (this.showLoader) {\n                this.loaderArr = both ? Array.from({ length: numItemsInViewport.rows }).map(() => Array.from({ length: numItemsInViewport.cols })) : Array.from({ length: numItemsInViewport });\n            }\n\n            if (this.lazy) {\n                Promise.resolve().then(() => {\n                    this.lazyLoadState = {\n                        first: this.step ? (both ? { rows: 0, cols: first.cols } : 0) : first,\n                        last: Math.min(this.step ? this.step : last, this.items?.length || 0)\n                    };\n\n                    this.$emit('lazy-load', this.lazyLoadState);\n                });\n            }\n        },\n        calculateAutoSize() {\n            if (this.autoSize && !this.d_loading) {\n                Promise.resolve().then(() => {\n                    if (this.content) {\n                        const both = this.isBoth();\n                        const horizontal = this.isHorizontal();\n                        const vertical = this.isVertical();\n\n                        this.content.style.minHeight = this.content.style.minWidth = 'auto';\n                        this.content.style.position = 'relative';\n                        this.element.style.contain = 'none';\n\n                        /*const [contentWidth, contentHeight] = [getWidth(this.content), getHeight(this.content)];\n\n                        contentWidth !== this.defaultContentWidth && (this.element.style.width = '');\n                        contentHeight !== this.defaultContentHeight && (this.element.style.height = '');*/\n\n                        const [width, height] = [getWidth(this.element), getHeight(this.element)];\n\n                        (both || horizontal) && (this.element.style.width = width < this.defaultWidth ? width + 'px' : this.scrollWidth || this.defaultWidth + 'px');\n                        (both || vertical) && (this.element.style.height = height < this.defaultHeight ? height + 'px' : this.scrollHeight || this.defaultHeight + 'px');\n\n                        this.content.style.minHeight = this.content.style.minWidth = '';\n                        this.content.style.position = '';\n                        this.element.style.contain = '';\n                    }\n                });\n            }\n        },\n        getLast(last = 0, isCols) {\n            return this.items ? Math.min(isCols ? (this.columns || this.items[0])?.length || 0 : this.items?.length || 0, last) : 0;\n        },\n        getContentPosition() {\n            if (this.content) {\n                const style = getComputedStyle(this.content);\n                const left = parseFloat(style.paddingLeft) + Math.max(parseFloat(style.left) || 0, 0);\n                const right = parseFloat(style.paddingRight) + Math.max(parseFloat(style.right) || 0, 0);\n                const top = parseFloat(style.paddingTop) + Math.max(parseFloat(style.top) || 0, 0);\n                const bottom = parseFloat(style.paddingBottom) + Math.max(parseFloat(style.bottom) || 0, 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        setSize() {\n            if (this.element) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const parentElement = this.element.parentElement;\n                const width = this.scrollWidth || `${this.element.offsetWidth || parentElement.offsetWidth}px`;\n                const height = this.scrollHeight || `${this.element.offsetHeight || parentElement.offsetHeight}px`;\n                const setProp = (_name, _value) => (this.element.style[_name] = _value);\n\n                if (both || horizontal) {\n                    setProp('height', height);\n                    setProp('width', width);\n                } else {\n                    setProp('height', height);\n                }\n            }\n        },\n        setSpacerSize() {\n            const items = this.items;\n\n            if (items) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n                const contentPos = this.getContentPosition();\n                const setProp = (_name, _value, _size, _cpos = 0) => (this.spacerStyle = { ...this.spacerStyle, ...{ [`${_name}`]: (_value || []).length * _size + _cpos + 'px' } });\n                const setVerticalSize = (_cpos = 0) => (this.spacerStyle = { ...this.spacerStyle, height: this.cumulativeSizes[this.cumulativeSizes.length - 1] + _cpos + 'px' });\n\n                if (both) {\n                    setProp('height', items, this.itemSize[0], contentPos.y);\n                    setProp('width', this.columns || items[1], this.itemSize[1], contentPos.x);\n                } else if (horizontal) {\n                    setProp('width', this.columns || items, this.itemSize, contentPos.x);\n                } else if (this.cumulativeSizes) {\n                    setVerticalSize(contentPos.y);\n                } else {\n                    setProp('height', items, this.itemSize, contentPos.y);\n                }\n            }\n        },\n        setContentPosition(pos) {\n            if (this.content && !this.appendOnly) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\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 (both) {\n                    setTransform(calculateTranslateVal(first.cols, this.itemSize[1]), calculateTranslateVal(first.rows, this.itemSize[0]));\n                } else if (horizontal) {\n                    setTransform(calculateTranslateVal(first, this.itemSize), 0);\n                } else {\n                    setTransform(0, this.cumulativeSizes ? this.getItemOffset(first) : calculateTranslateVal(first, this.itemSize));\n                }\n            }\n        },\n        onScrollPositionChange(event) {\n            const target = event.target;\n            const both = this.isBoth();\n            const horizontal = this.isHorizontal();\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\n            const calculateTriggerIndex = (_currentIndex, _first, _last, _num, _numT, _isScrollDownOrRight) => {\n                return _currentIndex <= _numT ? _numT : _isScrollDownOrRight ? _last - _num - _numT : _first + _numT - 1;\n            };\n\n            const calculateFirst = (_currentIndex, _triggerIndex, _first, _last, _num, _numT, _isScrollDownOrRight, _isCols) => {\n                if (_currentIndex <= _numT) return 0;\n                const firstValue = Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);\n                const maxFirst = this.getLast(firstValue, _isCols);\n                if (firstValue > maxFirst) return maxFirst - _num;\n                else return firstValue;\n            };\n\n            const calculateLast = (_currentIndex, _first, _last, _num, _numT, _isCols) => {\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 = both ? { rows: 0, cols: 0 } : 0;\n            let newLast = this.last;\n            let isRangeChanged = false;\n            let newScrollPos = this.lastScrollPos;\n\n            if (both) {\n                const isScrollDown = this.lastScrollPos.top <= scrollTop;\n                const isScrollRight = this.lastScrollPos.left <= scrollLeft;\n\n                if (!this.appendOnly || (this.appendOnly && (isScrollDown || isScrollRight))) {\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, true)\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 || this.isRangeChanged;\n                    newScrollPos = { top: scrollTop, left: scrollLeft };\n                }\n            } else {\n                const scrollPos = horizontal ? scrollLeft : scrollTop;\n                const isScrollDownOrRight = this.lastScrollPos <= scrollPos;\n\n                if (!this.appendOnly || (this.appendOnly && isScrollDownOrRight)) {\n                    const currentIndex = !horizontal && this.cumulativeSizes ? this.getIndexAtOffset(scrollPos) : 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 =\n                        !horizontal && this.cumulativeSizes ? this.getLastByCumulative(newFirst, this.d_numToleratedItems, this.numItemsInViewport) : calculateLast(currentIndex, newFirst, this.last, this.numItemsInViewport, this.d_numToleratedItems);\n                    isRangeChanged = newFirst !== this.first || newLast !== this.last || this.isRangeChanged;\n                    newScrollPos = scrollPos;\n                }\n            }\n\n            return {\n                first: newFirst,\n                last: newLast,\n                isRangeChanged,\n                scrollPos: newScrollPos\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.$emit('scroll-index-change', newState);\n\n                if (this.lazy && this.isPageChanged(first)) {\n                    const lazyLoadState = {\n                        first: this.step ? Math.min(this.getPageByFirst(first) * this.step, (this.items?.length || 0) - this.step) : first,\n                        last: Math.min(this.step ? (this.getPageByFirst(first) + 1) * this.step : last, this.items?.length || 0)\n                    };\n                    const isLazyStateChanged = this.lazyLoadState.first !== lazyLoadState.first || this.lazyLoadState.last !== lazyLoadState.last;\n\n                    isLazyStateChanged && this.$emit('lazy-load', lazyLoadState);\n                    this.lazyLoadState = lazyLoadState;\n                }\n            }\n        },\n        onScroll(event) {\n            this.$emit('scroll', event);\n\n            if (this.delay) {\n                if (this.scrollTimeout) {\n                    clearTimeout(this.scrollTimeout);\n                }\n\n                if (this.isPageChanged()) {\n                    if (!this.d_loading && this.showLoader) {\n                        const { isRangeChanged } = this.onScrollPositionChange(event);\n                        const changed = isRangeChanged || (this.step ? this.isPageChanged() : false);\n\n                        changed && (this.d_loading = true);\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                            this.page = this.getPageByFirst();\n                        }\n                    }, this.delay);\n                }\n            } else {\n                this.onScrollChange(event);\n            }\n        },\n        onResize() {\n            if (this.resizeTimeout) {\n                clearTimeout(this.resizeTimeout);\n            }\n\n            this.resizeTimeout = setTimeout(() => {\n                if (isVisible(this.element)) {\n                    const both = this.isBoth();\n                    const vertical = this.isVertical();\n                    const horizontal = this.isHorizontal();\n                    const [width, height] = [getWidth(this.element), getHeight(this.element)];\n                    const [isDiffWidth, isDiffHeight] = [width !== this.defaultWidth, height !== this.defaultHeight];\n                    const reinit = both ? isDiffWidth || isDiffHeight : horizontal ? isDiffWidth : vertical ? isDiffHeight : false;\n\n                    if (reinit) {\n                        this.d_numToleratedItems = this.numToleratedItems;\n                        this.defaultWidth = width;\n                        this.defaultHeight = height;\n                        this.defaultContentWidth = getWidth(this.content);\n                        this.defaultContentHeight = getHeight(this.content);\n\n                        this.init();\n                    }\n                }\n            }, this.resizeDelay);\n        },\n        bindResizeListener() {\n            if (!this.resizeListener) {\n                this.resizeListener = this.onResize.bind(this);\n\n                window.addEventListener('resize', this.resizeListener);\n                window.addEventListener('orientationchange', this.resizeListener);\n\n                this.resizeObserver = new ResizeObserver(() => {\n                    this.onResize();\n                });\n                this.resizeObserver.observe(this.element);\n            }\n        },\n        unbindResizeListener() {\n            if (this.resizeListener) {\n                window.removeEventListener('resize', this.resizeListener);\n                window.removeEventListener('orientationchange', this.resizeListener);\n                this.resizeListener = null;\n            }\n\n            if (this.resizeObserver) {\n                this.resizeObserver.disconnect();\n                this.resizeObserver = null;\n            }\n        },\n        getOptions(renderedIndex) {\n            const count = (this.items || []).length;\n            let index = this.isBoth() ? this.first.rows + renderedIndex : this.first + renderedIndex;\n\n            if (!this.isBoth() && this.variableLoadedRange) {\n                index = this.variableLoadedRange.indexes[renderedIndex];\n            }\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        getLoaderOptions(index, extOptions) {\n            let 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        getPageByFirst(first) {\n            return Math.floor(((first ?? this.first) + this.d_numToleratedItems * 4) / (this.step || 1));\n        },\n        isPageChanged(first) {\n            return this.step && !this.lazy ? this.page !== this.getPageByFirst(first ?? this.first) : true;\n        },\n        setContentEl(el) {\n            this.content = el || this.content || findSingle(this.element, '[data-pc-section=\"content\"]');\n        },\n        elementRef(el) {\n            this.element = el;\n        },\n        contentRef(el) {\n            this.content = el;\n        }\n    },\n    computed: {\n        containerClass() {\n            return [\n                'p-virtualscroller',\n                this.class,\n                {\n                    'p-virtualscroller-inline': this.inline,\n                    'p-virtualscroller-both p-both-scroll': this.isBoth(),\n                    'p-virtualscroller-horizontal p-horizontal-scroll': this.isHorizontal()\n                }\n            ];\n        },\n        contentClass() {\n            return [\n                'p-virtualscroller-content',\n                {\n                    'p-virtualscroller-loading': this.d_loading\n                }\n            ];\n        },\n        loaderClass() {\n            return [\n                'p-virtualscroller-loader',\n                {\n                    'p-virtualscroller-loader-mask': !this.$slots.loader\n                }\n            ];\n        },\n        variableLoadedRange() {\n            if (!this.items || this.d_loading || !this.cumulativeSizes) {\n                return null;\n            }\n\n            const start = this.appendOnly ? 0 : this.first;\n            const items = [];\n            const indexes = [];\n\n            for (let index = start; index < this.last; index++) {\n                if (this.cumulativeSizes[index + 1] > this.cumulativeSizes[index]) {\n                    items.push(this.items[index]);\n                    indexes.push(index);\n                }\n            }\n\n            return { items, indexes };\n        },\n        loadedItems() {\n            if (this.items && !this.d_loading) {\n                if (this.isBoth()) return this.items.slice(this.appendOnly ? 0 : this.first.rows, this.last.rows).map((item) => (this.columns ? item : item.slice(this.appendOnly ? 0 : this.first.cols, this.last.cols)));\n                else if (this.isHorizontal() && this.columns) return this.items;\n                else if (this.variableLoadedRange) return this.variableLoadedRange.items;\n                else return this.items.slice(this.appendOnly ? 0 : this.first, this.last);\n            }\n\n            return [];\n        },\n        loadedRows() {\n            return this.d_loading ? (this.loaderDisabled ? this.loaderArr : []) : this.loadedItems;\n        },\n        loadedColumns() {\n            if (this.columns) {\n                const both = this.isBoth();\n                const horizontal = this.isHorizontal();\n\n                if (both || horizontal) {\n                    return this.d_loading && this.loaderDisabled ? (both ? this.loaderArr[0] : this.loaderArr) : this.columns.slice(both ? this.first.cols : this.first, both ? this.last.cols : this.last);\n                }\n            }\n\n            return this.columns;\n        }\n    },\n    components: {\n        SpinnerIcon: SpinnerIcon\n    }\n};\n</script>\n"],"names":["name","BaseComponent","props","id","type","String","style","items","Array","itemSize","Number","getItemSize","Function","scrollHeight","scrollWidth","orientation","numToleratedItems","delay","resizeDelay","lazy","Boolean","disabled","loaderDisabled","columns","loading","showSpacer","showLoader","tabindex","inline","step","appendOnly","autoSize","VirtualScrollerStyle","provide","$pcVirtualScroller","$parentInstance","beforeMount","_this$$primevueConfig","loadCSS","nonce","$primevueConfig","csp","BaseVirtualScroller","inheritAttrs","emits","data","both","isBoth","first","rows","cols","last","page","numItemsInViewport","lastScrollPos","top","left","d_numToleratedItems","d_loading","loaderArr","spacerStyle","contentStyle","cumulativeSizes","element","content","scrollTimeout","resizeTimeout","defaultWidth","defaultHeight","defaultContentWidth","defaultContentHeight","isRangeChanged","lazyLoadState","resizeListener","resizeObserver","initialized","watch","newValue","oldValue","handler","length","init","calculateAutoSize","deep","mounted","viewInit","updated","unmounted","unbindResizeListener","methods","isVisible","setContentEl","getWidth","getHeight","bindResizeListener","setSize","buildCumulativeSizes","calculateOptions","setSpacerSize","setContentPosition","isHorizontal","sizes","i","getItemOffset","index","Math","max","min","getIndexAtOffset","offset","floor","lo","hi","mid","getLastByCumulative","getLast","contentPos","getContentPosition","contentHeight","offsetHeight","startOffset","target","isVertical","scrollTo","options","scrollToIndex","_this","behavior","arguments","undefined","horizontal","valid","every","_this$element","_this$element$scrollT","scrollTop","_this$element$scrollL","scrollLeft","_this$calculateNumIte","calculateNumItems","calculateFirst","_index","_numT","calculateCoord","_first","_size","_cpos","newFirst","isScrollChanged","scrollInView","to","_this2","_this$getRenderedRang","getRenderedRange","viewport","isToStart","isToEnd","pos","calculateFirstInViewport","_pos","firstInViewport","lastInViewport","_this$element2","scrollPos","contentWidth","offsetWidth","calculateNumItemsInViewport","_contentSize","_itemSize","ceil","calculateNumToleratedItems","_numItems","_this3","_this$calculateNumIte2","calculateLast","_num","_isCols","$emit","from","map","Promise","resolve","then","_this3$items","_this4","vertical","minHeight","minWidth","position","contain","_ref","width","height","_ref2","_this$items","isCols","getComputedStyle","parseFloat","paddingLeft","right","paddingRight","paddingTop","bottom","paddingBottom","x","y","_this5","parentElement","concat","setProp","_name","_value","_this6","_objectSpread","_defineProperty","setVerticalSize","_this7","calculateTranslateVal","setTransform","_x","_y","transform","onScrollPositionChange","event","_this8","calculateScrollPos","calculateCurrentIndex","calculateTriggerIndex","_currentIndex","_last","_isScrollDownOrRight","_triggerIndex","firstValue","maxFirst","lastValue","newLast","newScrollPos","isScrollDown","isScrollRight","currentIndex","triggerIndex","isScrollDownOrRight","onScrollChange","_this$onScrollPositio","newState","isPageChanged","_this$items2","_this$items3","getPageByFirst","isLazyStateChanged","onScroll","_this9","clearTimeout","_this$onScrollPositio2","changed","setTimeout","onResize","_this0","_ref3","isDiffWidth","isDiffHeight","reinit","_this1","bind","window","addEventListener","ResizeObserver","observe","removeEventListener","disconnect","getOptions","renderedIndex","count","variableLoadedRange","indexes","even","odd","getLoaderOptions","extOptions","el","findSingle","elementRef","contentRef","computed","containerClass","contentClass","loaderClass","$slots","loader","start","push","loadedItems","_this10","slice","item","loadedRows","loadedColumns","components","SpinnerIcon","_ctx","_openBlock","_createElementBlock","_mergeProps","ref","$options","apply","ptmi","_renderSlot","styleClass","getItemOptions","$data","_createElementVNode","ptm","_Fragment","_renderList","key","_","numCols","d_numItemsInViewport","_createVNode","_component_SpinnerIcon","spin"],"mappings":"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"}