{"version":3,"file":"index.mjs","sources":["../../src/virtualscroller/BaseVirtualScroller.vue","../../src/virtualscroller/VirtualScroller.vue","../../src/virtualscroller/VirtualScroller.vue?vue&type=template&id=81b1e8fe&lang.js"],"sourcesContent":["<script>\nimport BaseComponent from '@primevue/core/basecomponent';\nimport VirtualScrollerStyle from 'primevue/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        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 '@primeuix/utils/dom';\nimport SpinnerIcon from '@primevue/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        };\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    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(newValue, oldValue) {\n            if (!oldValue || oldValue.length !== (newValue || []).length) {\n                this.init();\n                this.calculateAutoSize();\n            }\n        },\n        itemSize() {\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                this.bindResizeListener();\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        init() {\n            if (!this.disabled) {\n                this.setSize();\n                this.calculateOptions();\n                this.setSpacerSize();\n            }\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                    horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop) : scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));\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 pos = (viewport.first - 1) * 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 pos = (viewport.first + 1) * 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 = 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 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            const last = both\n                ? { rows: calculateLast(first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(first.cols, numItemsInViewport.cols, numToleratedItems[1], true) }\n                : calculateLast(first, numItemsInViewport, numToleratedItems);\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\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 {\n                    horizontal ? setProp('width', this.columns || items, this.itemSize, contentPos.x) : 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 {\n                    const translateVal = calculateTranslateVal(first, this.itemSize);\n\n                    horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal);\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) => {\n                if (_currentIndex <= _numT) return 0;\n                else return Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);\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)\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 = 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 || 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        },\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        getOptions(renderedIndex) {\n            const count = (this.items || []).length;\n            const index = this.isBoth() ? 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        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.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        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 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 '@primeuix/utils/dom';\nimport SpinnerIcon from '@primevue/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        };\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    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(newValue, oldValue) {\n            if (!oldValue || oldValue.length !== (newValue || []).length) {\n                this.init();\n                this.calculateAutoSize();\n            }\n        },\n        itemSize() {\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                this.bindResizeListener();\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        init() {\n            if (!this.disabled) {\n                this.setSize();\n                this.calculateOptions();\n                this.setSpacerSize();\n            }\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                    horizontal ? scrollTo(calculateCoord(newFirst, itemSize, contentPos.left), scrollTop) : scrollTo(scrollLeft, calculateCoord(newFirst, itemSize, contentPos.top));\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 pos = (viewport.first - 1) * 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 pos = (viewport.first + 1) * 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 = 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 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            const last = both\n                ? { rows: calculateLast(first.rows, numItemsInViewport.rows, numToleratedItems[0]), cols: calculateLast(first.cols, numItemsInViewport.cols, numToleratedItems[1], true) }\n                : calculateLast(first, numItemsInViewport, numToleratedItems);\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\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 {\n                    horizontal ? setProp('width', this.columns || items, this.itemSize, contentPos.x) : 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 {\n                    const translateVal = calculateTranslateVal(first, this.itemSize);\n\n                    horizontal ? setTransform(translateVal, 0) : setTransform(0, translateVal);\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) => {\n                if (_currentIndex <= _numT) return 0;\n                else return Math.max(0, _isScrollDownOrRight ? (_currentIndex < _triggerIndex ? _first : _currentIndex - _numT) : _currentIndex > _triggerIndex ? _first : _currentIndex - 2 * _numT);\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)\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 = 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 || 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        },\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        getOptions(renderedIndex) {\n            const count = (this.items || []).length;\n            const index = this.isBoth() ? 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        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.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        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 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","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","element","content","scrollTimeout","resizeTimeout","defaultWidth","defaultHeight","defaultContentWidth","defaultContentHeight","isRangeChanged","lazyLoadState","resizeListener","initialized","watch","newValue","oldValue","length","init","calculateAutoSize","mounted","viewInit","updated","unmounted","unbindResizeListener","methods","isVisible","setContentEl","bindResizeListener","getWidth","getHeight","setSize","calculateOptions","setSpacerSize","isVertical","isHorizontal","scrollTo","options","scrollToIndex","index","_this","behavior","arguments","undefined","horizontal","valid","every","i","_this$element","_this$element$scrollT","scrollTop","_this$element$scrollL","scrollLeft","_this$calculateNumIte","calculateNumItems","contentPos","getContentPosition","calculateFirst","_index","_numT","calculateCoord","_first","_size","_cpos","newFirst","isScrollChanged","scrollInView","to","_this2","_this$getRenderedRang","getRenderedRange","viewport","isToStart","isToEnd","pos","calculateFirstInViewport","_pos","Math","floor","firstInViewport","lastInViewport","_this$element2","scrollPos","contentWidth","offsetWidth","contentHeight","offsetHeight","calculateNumItemsInViewport","_contentSize","_itemSize","ceil","calculateNumToleratedItems","_numItems","_this3","_this$calculateNumIte2","calculateLast","_num","_isCols","getLast","$emit","from","map","Promise","resolve","then","_this3$items","min","_this4","vertical","minHeight","minWidth","position","contain","_ref","width","height","_ref2","_this$items","isCols","getComputedStyle","parseFloat","paddingLeft","max","right","paddingRight","paddingTop","bottom","paddingBottom","x","y","_this5","parentElement","concat","setProp","_name","_value","_this6","_objectSpread","_defineProperty","setContentPosition","_this7","calculateTranslateVal","setTransform","_x","_y","transform","translateVal","onScrollPositionChange","event","_this8","target","calculateScrollPos","calculateCurrentIndex","calculateTriggerIndex","_currentIndex","_last","_isScrollDownOrRight","_triggerIndex","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","_this10","_ref3","isDiffWidth","isDiffHeight","reinit","bind","window","addEventListener","removeEventListener","getOptions","renderedIndex","count","even","odd","getLoaderOptions","extOptions","el","findSingle","elementRef","contentRef","computed","containerClass","contentClass","loaderClass","$slots","loader","loadedItems","_this11","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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"}