{"version":3,"file":"index-9514dd28.js","sources":["../../../node_modules/vue3-virtual-scroll-list/dist/index.js"],"sourcesContent":["/**\n* vue3-virtual-scroll-list v0.2.1\n* open source under the MIT license\n* https://github.com/reactjser/vue3-virtual-scroll-list#readme\n*/\nimport { defineComponent, ref, createVNode, computed, onMounted, onUpdated, onUnmounted, watch, onBeforeMount, onActivated } from 'vue';\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\n/**\n * virtual list core calculating center\n */\nvar DIRECTION_TYPE = {\n FRONT: 'FRONT',\n // scroll up or left\n BEHIND: 'BEHIND' // scroll down or right\n\n};\nvar CALC_TYPE = {\n INIT: 'INIT',\n FIXED: 'FIXED',\n DYNAMIC: 'DYNAMIC'\n};\nvar LEADING_BUFFER = 2;\n\nvar Virtual = /*#__PURE__*/function () {\n function Virtual(param, callUpdate) {\n _classCallCheck(this, Virtual);\n\n this.init(param, callUpdate);\n }\n\n _createClass(Virtual, [{\n key: \"init\",\n value: function init(param, callUpdate) {\n // param data\n this.param = param;\n this.callUpdate = callUpdate; // size data\n\n this.sizes = new Map();\n this.firstRangeTotalSize = 0;\n this.firstRangeAverageSize = 0;\n this.lastCalcIndex = 0;\n this.fixedSizeValue = 0;\n this.calcType = CALC_TYPE.INIT; // scroll data\n\n this.offset = 0;\n this.direction = ''; // range data\n\n this.range = Object.create(null);\n\n if (param) {\n this.checkRange(0, param.keeps - 1);\n } // benchmark test data\n // this.__bsearchCalls = 0\n // this.__getIndexOffsetCalls = 0\n\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.init(null, null);\n } // return current render range\n\n }, {\n key: \"getRange\",\n value: function getRange() {\n var range = Object.create(null);\n range.start = this.range.start;\n range.end = this.range.end;\n range.padFront = this.range.padFront;\n range.padBehind = this.range.padBehind;\n return range;\n }\n }, {\n key: \"isBehind\",\n value: function isBehind() {\n return this.direction === DIRECTION_TYPE.BEHIND;\n }\n }, {\n key: \"isFront\",\n value: function isFront() {\n return this.direction === DIRECTION_TYPE.FRONT;\n } // return start index offset\n\n }, {\n key: \"getOffset\",\n value: function getOffset(start) {\n return (start < 1 ? 0 : this.getIndexOffset(start)) + this.param.slotHeaderSize;\n }\n }, {\n key: \"updateParam\",\n value: function updateParam(key, value) {\n var _this = this;\n\n if (this.param && key in this.param) {\n // if uniqueIds change, find out deleted id and remove from size map\n if (key === 'uniqueIds') {\n this.sizes.forEach(function (v, key) {\n if (!value.includes(key)) {\n _this.sizes[\"delete\"](key);\n }\n });\n }\n\n this.param[key] = value;\n }\n } // save each size map by id\n\n }, {\n key: \"saveSize\",\n value: function saveSize(id, size) {\n this.sizes.set(id, size); // we assume size type is fixed at the beginning and remember first size value\n // if there is no size value different from this at next comming saving\n // we think it's a fixed size list, otherwise is dynamic size list\n\n if (this.calcType === CALC_TYPE.INIT) {\n this.fixedSizeValue = size;\n this.calcType = CALC_TYPE.FIXED;\n } else if (this.calcType === CALC_TYPE.FIXED && this.fixedSizeValue !== size) {\n this.calcType = CALC_TYPE.DYNAMIC; // it's no use at all\n\n delete this.fixedSizeValue;\n } // calculate the average size only in the first range\n\n\n if (this.calcType !== CALC_TYPE.FIXED && typeof this.firstRangeTotalSize !== 'undefined') {\n if (this.sizes.size < Math.min(this.param.keeps, this.param.uniqueIds.length)) {\n this.firstRangeTotalSize = _toConsumableArray(this.sizes.values()).reduce(function (acc, val) {\n return acc + val;\n }, 0);\n this.firstRangeAverageSize = Math.round(this.firstRangeTotalSize / this.sizes.size);\n } else {\n // it's done using\n delete this.firstRangeTotalSize;\n }\n }\n } // in some special situation (e.g. length change) we need to update in a row\n // try goiong to render next range by a leading buffer according to current direction\n\n }, {\n key: \"handleDataSourcesChange\",\n value: function handleDataSourcesChange() {\n var start = this.range.start;\n\n if (this.isFront()) {\n start = start - LEADING_BUFFER;\n } else if (this.isBehind()) {\n start = start + LEADING_BUFFER;\n }\n\n start = Math.max(start, 0);\n this.updateRange(this.range.start, this.getEndByStart(start));\n } // when slot size change, we also need force update\n\n }, {\n key: \"handleSlotSizeChange\",\n value: function handleSlotSizeChange() {\n this.handleDataSourcesChange();\n } // calculating range on scroll\n\n }, {\n key: \"handleScroll\",\n value: function handleScroll(offset) {\n this.direction = offset < this.offset ? DIRECTION_TYPE.FRONT : DIRECTION_TYPE.BEHIND;\n this.offset = offset;\n\n if (!this.param) {\n return;\n }\n\n if (this.direction === DIRECTION_TYPE.FRONT) {\n this.handleFront();\n } else if (this.direction === DIRECTION_TYPE.BEHIND) {\n this.handleBehind();\n }\n } // ----------- public method end -----------\n\n }, {\n key: \"handleFront\",\n value: function handleFront() {\n var overs = this.getScrollOvers(); // should not change range if start doesn't exceed overs\n\n if (overs > this.range.start) {\n return;\n } // move up start by a buffer length, and make sure its safety\n\n\n var start = Math.max(overs - this.param.buffer, 0);\n this.checkRange(start, this.getEndByStart(start));\n }\n }, {\n key: \"handleBehind\",\n value: function handleBehind() {\n var overs = this.getScrollOvers(); // range should not change if scroll overs within buffer\n\n if (overs < this.range.start + this.param.buffer) {\n return;\n }\n\n this.checkRange(overs, this.getEndByStart(overs));\n } // return the pass overs according to current scroll offset\n\n }, {\n key: \"getScrollOvers\",\n value: function getScrollOvers() {\n // if slot header exist, we need subtract its size\n var offset = this.offset - this.param.slotHeaderSize;\n\n if (offset <= 0) {\n return 0;\n } // if is fixed type, that can be easily\n\n\n if (this.isFixedType()) {\n return Math.floor(offset / this.fixedSizeValue);\n }\n\n var low = 0;\n var middle = 0;\n var middleOffset = 0;\n var high = this.param.uniqueIds.length;\n\n while (low <= high) {\n // this.__bsearchCalls++\n middle = low + Math.floor((high - low) / 2);\n middleOffset = this.getIndexOffset(middle);\n\n if (middleOffset === offset) {\n return middle;\n } else if (middleOffset < offset) {\n low = middle + 1;\n } else if (middleOffset > offset) {\n high = middle - 1;\n }\n }\n\n return low > 0 ? --low : 0;\n } // return a scroll offset from given index, can efficiency be improved more here?\n // although the call frequency is very high, its only a superposition of numbers\n\n }, {\n key: \"getIndexOffset\",\n value: function getIndexOffset(givenIndex) {\n if (!givenIndex) {\n return 0;\n }\n\n var offset = 0;\n var indexSize = 0;\n\n for (var index = 0; index < givenIndex; index++) {\n // this.__getIndexOffsetCalls++\n indexSize = this.sizes.get(this.param.uniqueIds[index]);\n offset = offset + (typeof indexSize === 'number' ? indexSize : this.getEstimateSize());\n } // remember last calculate index\n\n\n this.lastCalcIndex = Math.max(this.lastCalcIndex, givenIndex - 1);\n this.lastCalcIndex = Math.min(this.lastCalcIndex, this.getLastIndex());\n return offset;\n } // is fixed size type\n\n }, {\n key: \"isFixedType\",\n value: function isFixedType() {\n return this.calcType === CALC_TYPE.FIXED;\n } // return the real last index\n\n }, {\n key: \"getLastIndex\",\n value: function getLastIndex() {\n return this.param.uniqueIds.length - 1;\n } // in some conditions range is broke, we need correct it\n // and then decide whether need update to next range\n\n }, {\n key: \"checkRange\",\n value: function checkRange(start, end) {\n var keeps = this.param.keeps;\n var total = this.param.uniqueIds.length; // datas less than keeps, render all\n\n if (total <= keeps) {\n start = 0;\n end = this.getLastIndex();\n } else if (end - start < keeps - 1) {\n // if range length is less than keeps, corrent it base on end\n start = end - keeps + 1;\n }\n\n if (this.range.start !== start) {\n this.updateRange(start, end);\n }\n } // setting to a new range and rerender\n\n }, {\n key: \"updateRange\",\n value: function updateRange(start, end) {\n this.range.start = start;\n this.range.end = end;\n this.range.padFront = this.getPadFront();\n this.range.padBehind = this.getPadBehind();\n this.callUpdate(this.getRange());\n } // return end base on start\n\n }, {\n key: \"getEndByStart\",\n value: function getEndByStart(start) {\n var theoryEnd = start + this.param.keeps - 1;\n var truelyEnd = Math.min(theoryEnd, this.getLastIndex());\n return truelyEnd;\n } // return total front offset\n\n }, {\n key: \"getPadFront\",\n value: function getPadFront() {\n if (this.isFixedType()) {\n return this.fixedSizeValue * this.range.start;\n } else {\n return this.getIndexOffset(this.range.start);\n }\n } // return total behind offset\n\n }, {\n key: \"getPadBehind\",\n value: function getPadBehind() {\n var end = this.range.end;\n var lastIndex = this.getLastIndex();\n\n if (this.isFixedType()) {\n return (lastIndex - end) * this.fixedSizeValue;\n } // if it's all calculated, return the exactly offset\n\n\n if (this.lastCalcIndex === lastIndex) {\n return this.getIndexOffset(lastIndex) - this.getIndexOffset(end);\n } else {\n // if not, use a estimated value\n return (lastIndex - end) * this.getEstimateSize();\n }\n } // get the item estimate size\n\n }, {\n key: \"getEstimateSize\",\n value: function getEstimateSize() {\n return this.isFixedType() ? this.fixedSizeValue : this.firstRangeAverageSize || this.param.estimateSize;\n }\n }]);\n\n return Virtual;\n}();\n\n/**\n * props declaration for default, item and slot component\n */\nvar VirtualProps = {\n dataKey: {\n type: [String, Function],\n required: true\n },\n dataSources: {\n type: Array,\n required: true,\n \"default\": function _default() {\n return [];\n }\n },\n dataComponent: {\n type: [Object, Function],\n required: true\n },\n keeps: {\n type: Number,\n \"default\": 30\n },\n extraProps: {\n type: Object\n },\n estimateSize: {\n type: Number,\n \"default\": 50\n },\n direction: {\n type: String,\n \"default\": 'vertical' // the other value is horizontal\n\n },\n start: {\n type: Number,\n \"default\": 0\n },\n offset: {\n type: Number,\n \"default\": 0\n },\n topThreshold: {\n type: Number,\n \"default\": 0\n },\n bottomThreshold: {\n type: Number,\n \"default\": 0\n },\n pageMode: {\n type: Boolean,\n \"default\": false\n },\n rootTag: {\n type: String,\n \"default\": 'div'\n },\n wrapTag: {\n type: String,\n \"default\": 'div'\n },\n wrapClass: {\n type: String,\n \"default\": 'wrap'\n },\n wrapStyle: {\n type: Object\n },\n itemTag: {\n type: String,\n \"default\": 'div'\n },\n itemClass: {\n type: String,\n \"default\": ''\n },\n itemClassAdd: {\n type: Function\n },\n itemStyle: {\n type: Object\n },\n headerTag: {\n type: String,\n \"default\": 'div'\n },\n headerClass: {\n type: String,\n \"default\": ''\n },\n headerStyle: {\n type: Object\n },\n footerTag: {\n type: String,\n \"default\": 'div'\n },\n footerClass: {\n type: String,\n \"default\": ''\n },\n footerStyle: {\n type: Object\n },\n itemScopedSlots: {\n type: Object\n }\n};\nvar ItemProps = {\n index: {\n type: Number\n },\n event: {\n type: String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n },\n source: {\n type: Object\n },\n component: {\n type: [Object, Function]\n },\n uniqueKey: {\n type: [String, Number]\n },\n extraProps: {\n type: Object\n },\n scopedSlots: {\n type: Object\n }\n};\nvar SlotProps = {\n event: {\n type: String\n },\n uniqueKey: {\n type: String\n },\n tag: {\n type: String\n },\n horizontal: {\n type: Boolean\n }\n};\n\nvar useResizeChange = function useResizeChange(props, rootRef, emit) {\n var resizeObserver = null;\n var shapeKey = computed(function () {\n return props.horizontal ? 'offsetWidth' : 'offsetHeight';\n });\n\n var getCurrentSize = function getCurrentSize() {\n return rootRef.value ? rootRef.value[shapeKey.value] : 0;\n }; // tell parent current size identify by unqiue key\n\n\n var dispatchSizeChange = function dispatchSizeChange() {\n var event = props.event,\n uniqueKey = props.uniqueKey,\n hasInitial = props.hasInitial;\n emit(event, uniqueKey, getCurrentSize(), hasInitial);\n };\n\n onMounted(function () {\n if (typeof ResizeObserver !== 'undefined') {\n resizeObserver = new ResizeObserver(function () {\n dispatchSizeChange();\n });\n rootRef.value && resizeObserver.observe(rootRef.value);\n }\n });\n onUpdated(function () {\n dispatchSizeChange();\n });\n onUnmounted(function () {\n if (resizeObserver) {\n resizeObserver.disconnect();\n resizeObserver = null;\n }\n });\n};\n\nvar Item = defineComponent({\n name: 'VirtualListItem',\n props: ItemProps,\n emits: ['itemResize'],\n setup: function setup(props, _ref) {\n var emit = _ref.emit;\n var rootRef = ref(null);\n useResizeChange(props, rootRef, emit);\n return function () {\n var Tag = props.tag,\n Comp = props.component,\n _props$extraProps = props.extraProps,\n extraProps = _props$extraProps === void 0 ? {} : _props$extraProps,\n index = props.index,\n source = props.source,\n _props$scopedSlots = props.scopedSlots,\n scopedSlots = _props$scopedSlots === void 0 ? {} : _props$scopedSlots,\n uniqueKey = props.uniqueKey;\n\n var mergedProps = _objectSpread2(_objectSpread2({}, extraProps), {}, {\n source: source,\n index: index\n });\n\n return createVNode(Tag, {\n \"key\": uniqueKey,\n \"ref\": rootRef\n }, {\n \"default\": function _default() {\n return [createVNode(Comp, _objectSpread2(_objectSpread2({}, mergedProps), {}, {\n \"scopedSlots\": scopedSlots\n }), null)];\n }\n });\n };\n }\n});\nvar Slot = defineComponent({\n name: 'VirtualListSlot',\n props: SlotProps,\n emits: ['slotResize'],\n setup: function setup(props, _ref2) {\n var slots = _ref2.slots,\n emit = _ref2.emit;\n var rootRef = ref(null);\n useResizeChange(props, rootRef, emit);\n return function () {\n var _slots$default;\n\n var Tag = props.tag,\n uniqueKey = props.uniqueKey;\n return createVNode(Tag, {\n \"ref\": rootRef,\n \"key\": uniqueKey\n }, {\n \"default\": function _default() {\n return [(_slots$default = slots[\"default\"]) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];\n }\n });\n };\n }\n});\n\nvar EVENT_TYPE;\n\n(function (EVENT_TYPE) {\n EVENT_TYPE[\"ITEM\"] = \"itemResize\";\n EVENT_TYPE[\"SLOT\"] = \"slotResize\";\n})(EVENT_TYPE || (EVENT_TYPE = {}));\n\nvar SLOT_TYPE;\n\n(function (SLOT_TYPE) {\n SLOT_TYPE[\"HEADER\"] = \"thead\";\n SLOT_TYPE[\"FOOTER\"] = \"tfoot\";\n})(SLOT_TYPE || (SLOT_TYPE = {}));\n\nvar VirtualList = defineComponent({\n name: 'VirtualList',\n props: VirtualProps,\n setup: function setup(props, _ref) {\n var emit = _ref.emit,\n slots = _ref.slots,\n expose = _ref.expose;\n var isHorizontal = props.direction === 'horizontal';\n var directionKey = isHorizontal ? 'scrollLeft' : 'scrollTop';\n var range = ref(null);\n var root = ref();\n var shepherd = ref(null);\n var virtual;\n /**\n * watch\n */\n\n watch(function () {\n return props.dataSources.length;\n }, function () {\n virtual.updateParam('uniqueIds', getUniqueIdFromDataSources());\n virtual.handleDataSourcesChange();\n });\n watch(function () {\n return props.keeps;\n }, function (newValue) {\n virtual.updateParam('keeps', newValue);\n virtual.handleSlotSizeChange();\n });\n watch(function () {\n return props.start;\n }, function (newValue) {\n scrollToIndex(newValue);\n });\n watch(function () {\n return props.offset;\n }, function (newValue) {\n return scrollToOffset(newValue);\n });\n /**\n * methods\n */\n // get item size by id\n\n var getSize = function getSize(id) {\n return virtual.sizes.get(id);\n };\n\n var getOffset = function getOffset() {\n if (props.pageMode) {\n return document.documentElement[directionKey] || document.body[directionKey];\n } else {\n return root.value ? Math.ceil(root.value[directionKey]) : 0;\n }\n }; // return client viewport size\n\n\n var getClientSize = function getClientSize() {\n var key = isHorizontal ? 'clientWidth' : 'clientHeight';\n\n if (props.pageMode) {\n return document.documentElement[key] || document.body[key];\n } else {\n return root.value ? Math.ceil(root.value[key]) : 0;\n }\n }; // return all scroll size\n\n\n var getScrollSize = function getScrollSize() {\n var key = isHorizontal ? 'scrollWidth' : 'scrollHeight';\n\n if (props.pageMode) {\n return document.documentElement[key] || document.body[key];\n } else {\n return root.value ? Math.ceil(root.value[key]) : 0;\n }\n };\n\n var emitEvent = function emitEvent(offset, clientSize, scrollSize, evt) {\n emit('scroll', evt, virtual.getRange());\n\n if (virtual.isFront() && !!props.dataSources.length && offset - props.topThreshold <= 0) {\n emit('totop');\n } else if (virtual.isBehind() && offset + clientSize + props.bottomThreshold >= scrollSize) {\n emit('tobottom');\n }\n };\n\n var onScroll = function onScroll(evt) {\n var offset = getOffset();\n var clientSize = getClientSize();\n var scrollSize = getScrollSize(); // \biOS scroll-spring-back behavior will make direction mistake\n\n if (offset < 0 || offset + clientSize > scrollSize + 1 || !scrollSize) {\n return;\n }\n\n virtual.handleScroll(offset);\n emitEvent(offset, clientSize, scrollSize, evt);\n };\n\n var getUniqueIdFromDataSources = function getUniqueIdFromDataSources() {\n var dataKey = props.dataKey,\n _props$dataSources = props.dataSources,\n dataSources = _props$dataSources === void 0 ? [] : _props$dataSources;\n return dataSources.map(function (dataSource) {\n return typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey];\n });\n };\n\n var onRangeChanged = function onRangeChanged(newRange) {\n range.value = newRange;\n };\n\n var installVirtual = function installVirtual() {\n virtual = new Virtual({\n slotHeaderSize: 0,\n slotFooterSize: 0,\n keeps: props.keeps,\n estimateSize: props.estimateSize,\n buffer: Math.round(props.keeps / 3),\n // recommend for a third of keeps\n uniqueIds: getUniqueIdFromDataSources()\n }, onRangeChanged); // sync initial range\n\n range.value = virtual.getRange();\n }; // set current scroll position to a expectant index\n\n\n var scrollToIndex = function scrollToIndex(index) {\n // scroll to bottom\n if (index >= props.dataSources.length - 1) {\n scrollToBottom();\n } else {\n var offset = virtual.getOffset(index);\n scrollToOffset(offset);\n }\n }; // set current scroll position to a expectant offset\n\n\n var scrollToOffset = function scrollToOffset(offset) {\n if (props.pageMode) {\n document.body[directionKey] = offset;\n document.documentElement[directionKey] = offset;\n } else {\n if (root.value) {\n root.value[directionKey] = offset;\n }\n }\n }; // get the real render slots based on range data\n // in-place patch strategy will try to reuse components as possible\n // so those components that are reused will not trigger lifecycle mounted\n\n\n var getRenderSlots = function getRenderSlots() {\n var slots = [];\n var _range$value = range.value,\n start = _range$value.start,\n end = _range$value.end;\n var dataSources = props.dataSources,\n dataKey = props.dataKey,\n itemClass = props.itemClass,\n itemTag = props.itemTag,\n itemStyle = props.itemStyle,\n extraProps = props.extraProps,\n dataComponent = props.dataComponent,\n itemScopedSlots = props.itemScopedSlots;\n\n for (var index = start; index <= end; index++) {\n var dataSource = dataSources[index];\n\n if (dataSource) {\n var uniqueKey = typeof dataKey === 'function' ? dataKey(dataSource) : dataSource[dataKey];\n\n if (typeof uniqueKey === 'string' || typeof uniqueKey === 'number') {\n slots.push(createVNode(Item, {\n \"index\": index,\n \"tag\": itemTag,\n \"event\": EVENT_TYPE.ITEM,\n \"horizontal\": isHorizontal,\n \"uniqueKey\": uniqueKey,\n \"source\": dataSource,\n \"extraProps\": extraProps,\n \"component\": dataComponent,\n \"scopedSlots\": itemScopedSlots,\n \"style\": itemStyle,\n \"class\": \"\".concat(itemClass).concat(props.itemClassAdd ? ' ' + props.itemClassAdd(index) : ''),\n \"onItemResize\": onItemResized\n }, null));\n } else {\n console.warn(\"Cannot get the data-key '\".concat(dataKey, \"' from data-sources.\"));\n }\n } else {\n console.warn(\"Cannot get the index '\".concat(index, \"' from data-sources.\"));\n }\n }\n\n return slots;\n }; // event called when each item mounted or size changed\n\n\n var onItemResized = function onItemResized(id, size) {\n virtual.saveSize(id, size);\n emit('resized', id, size);\n }; // event called when slot mounted or size changed\n\n\n var onSlotResized = function onSlotResized(type, size, hasInit) {\n if (type === SLOT_TYPE.HEADER) {\n virtual.updateParam('slotHeaderSize', size);\n } else if (type === SLOT_TYPE.FOOTER) {\n virtual.updateParam('slotFooterSize', size);\n }\n\n if (hasInit) {\n virtual.handleSlotSizeChange();\n }\n }; // set current scroll position to bottom\n\n\n var scrollToBottom = function scrollToBottom() {\n if (shepherd.value) {\n var offset = shepherd.value[isHorizontal ? 'offsetLeft' : 'offsetTop'];\n scrollToOffset(offset); // check if it's really scrolled to the bottom\n // maybe list doesn't render and calculate to last range\n // so we need retry in next event loop until it really at bottom\n\n setTimeout(function () {\n if (getOffset() + getClientSize() < getScrollSize()) {\n scrollToBottom();\n }\n }, 3);\n }\n }; // when using page mode we need update slot header size manually\n // taking root offset relative to the browser as slot header size\n\n\n var updatePageModeFront = function updatePageModeFront() {\n if (root.value) {\n var rect = root.value.getBoundingClientRect();\n var defaultView = root.value.ownerDocument.defaultView;\n var offsetFront = isHorizontal ? rect.left + defaultView.pageXOffset : rect.top + defaultView.pageYOffset;\n virtual.updateParam('slotHeaderSize', offsetFront);\n }\n }; // get the total number of stored (rendered) items\n\n\n var getSizes = function getSizes() {\n return virtual.sizes.size;\n };\n /**\n * life cycles\n */\n\n\n onBeforeMount(function () {\n installVirtual();\n }); // set back offset when awake from keep-alive\n\n onActivated(function () {\n scrollToOffset(virtual.offset);\n });\n onMounted(function () {\n // set position\n if (props.start) {\n scrollToIndex(props.start);\n } else if (props.offset) {\n scrollToOffset(props.offset);\n } // in page mode we bind scroll event to document\n\n\n if (props.pageMode) {\n updatePageModeFront();\n document.addEventListener('scroll', onScroll, {\n passive: false\n });\n }\n });\n onUnmounted(function () {\n virtual.destroy();\n\n if (props.pageMode) {\n document.removeEventListener('scroll', onScroll);\n }\n });\n /**\n * public methods\n */\n\n expose({\n scrollToBottom: scrollToBottom,\n getSizes: getSizes,\n getSize: getSize,\n getOffset: getOffset,\n getScrollSize: getScrollSize,\n getClientSize: getClientSize,\n scrollToOffset: scrollToOffset,\n scrollToIndex: scrollToIndex\n });\n return function () {\n var pageMode = props.pageMode,\n RootTag = props.rootTag,\n WrapTag = props.wrapTag,\n wrapClass = props.wrapClass,\n wrapStyle = props.wrapStyle,\n headerTag = props.headerTag,\n headerClass = props.headerClass,\n headerStyle = props.headerStyle,\n footerTag = props.footerTag,\n footerClass = props.footerClass,\n footerStyle = props.footerStyle;\n var _ref2 = range.value,\n padFront = _ref2.padFront,\n padBehind = _ref2.padBehind;\n var paddingStyle = {\n padding: isHorizontal ? \"0px \".concat(padBehind, \"px 0px \").concat(padFront, \"px\") : \"\".concat(padFront, \"px 0px \").concat(padBehind, \"px\")\n };\n var wrapperStyle = wrapStyle ? Object.assign({}, wrapStyle, paddingStyle) : paddingStyle;\n var header = slots.header,\n footer = slots.footer;\n return createVNode(RootTag, {\n \"ref\": root,\n \"onScroll\": !pageMode && onScroll\n }, {\n \"default\": function _default() {\n return [header && createVNode(Slot, {\n \"class\": headerClass,\n \"style\": headerStyle,\n \"tag\": headerTag,\n \"event\": EVENT_TYPE.SLOT,\n \"uniqueKey\": SLOT_TYPE.HEADER,\n \"onSlotResize\": onSlotResized\n }, {\n \"default\": function _default() {\n return [header()];\n }\n }), createVNode(WrapTag, {\n \"class\": wrapClass,\n \"style\": wrapperStyle\n }, {\n \"default\": function _default() {\n return [getRenderSlots()];\n }\n }), footer && createVNode(Slot, {\n \"class\": footerClass,\n \"style\": footerStyle,\n \"tag\": footerTag,\n \"event\": EVENT_TYPE.SLOT,\n \"uniqueKey\": SLOT_TYPE.FOOTER,\n \"onSlotResize\": onSlotResized\n }, {\n \"default\": function _default() {\n return [footer()];\n }\n }), createVNode(\"div\", {\n \"ref\": shepherd,\n \"style\": {\n width: isHorizontal ? '0px' : '100%',\n height: isHorizontal ? '100%' : '0px'\n }\n }, null)];\n }\n });\n };\n }\n});\n\nexport { VirtualList as default };\n"],"names":["ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","i","source","key","_defineProperty","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_createClass","protoProps","staticProps","obj","value","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_unsupportedIterableToArray","_nonIterableSpread","_arrayLikeToArray","iter","o","minLen","n","len","arr2","DIRECTION_TYPE","CALC_TYPE","LEADING_BUFFER","Virtual","param","callUpdate","range","start","_this","v","id","size","acc","val","offset","overs","low","middle","middleOffset","high","givenIndex","indexSize","index","end","keeps","total","theoryEnd","truelyEnd","lastIndex","VirtualProps","ItemProps","SlotProps","useResizeChange","rootRef","emit","resizeObserver","shapeKey","computed","getCurrentSize","dispatchSizeChange","event","uniqueKey","hasInitial","onMounted","onUpdated","onUnmounted","Item","defineComponent","_ref","ref","Tag","Comp","_props$extraProps","extraProps","_props$scopedSlots","scopedSlots","mergedProps","createVNode","Slot","_ref2","slots","_slots$default","EVENT_TYPE","SLOT_TYPE","VirtualList","expose","isHorizontal","directionKey","root","shepherd","virtual","watch","getUniqueIdFromDataSources","newValue","scrollToIndex","scrollToOffset","getSize","getOffset","getClientSize","getScrollSize","emitEvent","clientSize","scrollSize","evt","onScroll","dataKey","_props$dataSources","dataSources","dataSource","onRangeChanged","newRange","installVirtual","scrollToBottom","getRenderSlots","_range$value","itemClass","itemTag","itemStyle","dataComponent","itemScopedSlots","onItemResized","onSlotResized","type","hasInit","updatePageModeFront","rect","defaultView","offsetFront","getSizes","onBeforeMount","onActivated","pageMode","RootTag","WrapTag","wrapClass","wrapStyle","headerTag","headerClass","headerStyle","footerTag","footerClass","footerStyle","padFront","padBehind","paddingStyle","wrapperStyle","header","footer"],"mappings":"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","x_google_ignoreList":[0]}