@tanstack/virtual-core 3.0.0-beta.56 → 3.0.0-beta.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/lib/index.esm.js +1 -1
- package/build/lib/index.esm.js.map +1 -1
- package/build/lib/index.js +1 -1
- package/build/lib/index.js.map +1 -1
- package/build/lib/index.mjs +1 -1
- package/build/lib/index.mjs.map +1 -1
- package/build/umd/index.development.js +1 -1
- package/build/umd/index.development.js.map +1 -1
- package/build/umd/index.production.js +1 -1
- package/build/umd/index.production.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -1
|
@@ -8,5 +8,5 @@
|
|
|
8
8
|
*
|
|
9
9
|
* @license MIT
|
|
10
10
|
*/
|
|
11
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,i,r=null!=(o=n.initialDeps)?o:[];return function(){var o;n.key&&null!=n.debug&&n.debug()&&(o=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return i;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),i=t.apply(void 0,l),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-o))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return null==n||null==n.onChange||n.onChange(i),i}}function o(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?": "+t:""));return e}var i=function(e,t){return Math.abs(e-t)<1},r=function(e){return e},s=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=t;i<=n;i++)o.push(i);return o},l=function(e,t,n){if(null!=t&&t.borderBoxSize){var o=t.borderBoxSize[0];if(o)return Math.round(o[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])},a=function(e,t,n,o){for(;e<=t;){var i=(e+t)/2|0,r=n(i);if(r<o)e=i+1;else{if(!(r>o))return i;t=i-1}}return e>0?e-1:0};e.Virtualizer=function(e){var u,c,d=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache=new Map,this.observer=(u=null,c=function(){return u||("undefined"!=typeof ResizeObserver?u=new ResizeObserver((function(e){e.forEach((function(e){d._measureElement(e.target,e)}))})):null)},{disconnect:function(){var e;return null==(e=c())?void 0:e.disconnect()},observe:function(e){var t;return null==(t=c())?void 0:t.observe(e,{box:"border-box"})},unobserve:function(e){var t;return null==(t=c())?void 0:t.unobserve(e)}}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),d.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:r,rangeExtractor:s,onChange:function(){},measureElement:l,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",elementKeyAttribute:"data-element-key",initialMeasurementsCache:[],lanes:1},e)},this.notify=function(){null==d.options.onChange||d.options.onChange(d)},this.cleanup=function(){d.unsubs.filter(Boolean).forEach((function(e){return e()})),d.unsubs=[],d.scrollElement=null},this._didMount=function(){return d.measureElementCache.forEach(d.observer.observe),function(){d.observer.disconnect(),d.cleanup()}},this._willUpdate=function(){var e=d.options.getScrollElement();d.scrollElement!==e&&(d.cleanup(),d.scrollElement=e,d._scrollToOffset(d.scrollOffset,{adjustments:void 0,behavior:void 0}),d.unsubs.push(d.options.observeElementRect(d,(function(e){var t=d.scrollRect;d.scrollRect=e,(d.options.horizontal?e.width!==t.width:e.height!==t.height)&&d.maybeNotify()}))),d.unsubs.push(d.options.observeElementOffset(d,(function(e){d.scrollAdjustments=0,d.scrollOffset!==e&&(null!==d.isScrollingTimeoutId&&(clearTimeout(d.isScrollingTimeoutId),d.isScrollingTimeoutId=null),d.isScrolling=!0,d.scrollDirection=d.scrollOffset<e?"forward":"backward",d.scrollOffset=e,d.maybeNotify(),d.isScrollingTimeoutId=setTimeout((function(){d.isScrollingTimeoutId=null,d.isScrolling=!1,d.scrollDirection=null,d.maybeNotify()}),d.options.scrollingDelay))}))))},this.getSize=function(){return d.scrollRect[d.options.horizontal?"width":"height"]},this.memoOptions=n((function(){return[d.options.count,d.options.paddingStart,d.options.scrollMargin,d.options.getItemKey]}),(function(e,t,n,o){return d.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:n,getItemKey:o}}),{key:!1}),this.getFurthestMeasurement=function(e,t){for(var n=new Map,o=new Map,i=t-1;i>=0;i--){var r=e[i];if(!n.has(r.lane)){var s=o.get(r.lane);if(null==s||r.end>s.end?o.set(r.lane,r):r.end<s.end&&n.set(r.lane,!0),n.size===d.options.lanes)break}}return o.size===d.options.lanes?Array.from(o.values()).sort((function(e,t){return e.end-t.end}))[0]:void 0},this.getMeasurements=n((function(){return[d.memoOptions(),d.itemSizeCache]}),(function(e,t){var n=e.count,o=e.paddingStart,i=e.scrollMargin,r=e.getItemKey,s=d.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,d.pendingMeasuredCacheIndexes):0;d.pendingMeasuredCacheIndexes=[];for(var l=d.measurementsCache.slice(0,s),a=s;a<n;a++){var u=r(a),c=1===d.options.lanes?l[a-1]:d.getFurthestMeasurement(l,a),f=c?c.end:o+i,h=t.get(u),m="number"==typeof h?h:d.options.estimateSize(a),v=f+m,g=c?c.lane:a%d.options.lanes;l[a]={index:a,start:f,size:m,end:v,key:u,lane:g}}return d.measurementsCache=l,l}),{key:!1,debug:function(){return d.options.debug}}),this.calculateRange=n((function(){return[d.getMeasurements(),d.getSize(),d.scrollOffset]}),(function(e,t,n){return d.range=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,i=t.length-1,r=a(0,i,(function(e){return t[e].start}),o),s=r;for(;s<i&&t[s].end<o+n;)s++;return{startIndex:r,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n})}),{key:!1,debug:function(){return d.options.debug}}),this.maybeNotify=n((function(){var e=d.calculateRange();return[e.startIndex,e.endIndex,d.isScrolling]}),(function(){d.notify()}),{key:!1,debug:function(){return d.options.debug},initialDeps:[this.range.startIndex,this.range.endIndex,this.isScrolling]}),this.getIndexes=n((function(){return[d.options.rangeExtractor,d.calculateRange(),d.options.overscan,d.options.count]}),(function(e,n,o,i){return e(t({},n,{overscan:o,count:i}))}),{key:!1,debug:function(){return d.options.debug}}),this.indexFromElement=function(e){var t=d.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,t){var n,i=d.indexFromElement(e),r=o(d.measurementsCache[i]),s=null!=(n=e.getAttribute(d.options.elementKeyAttribute))?n:r.key,l=d.measureElementCache.get(s);if(!e.isConnected)return d.observer.unobserve(e),void(e===l&&d.measureElementCache.delete(s));l!==e&&(l&&d.observer.unobserve(l),d.observer.observe(e),d.measureElementCache.set(s,e));var a=d.options.measureElement(e,t,d);d.resizeItem(i,a)},this.resizeItem=function(e,t){var n,o=d.measurementsCache[e];if(o){var i=t-(null!=(n=d.itemSizeCache.get(o.key))?n:o.size);0!==i&&(o.start<d.scrollOffset&&d._scrollToOffset(d.scrollOffset,{adjustments:d.scrollAdjustments+=i,behavior:void 0}),d.pendingMeasuredCacheIndexes.push(e),d.itemSizeCache=new Map(d.itemSizeCache.set(o.key,t)),d.notify())}},this.measureElement=function(e){e&&d._measureElement(e,void 0)},this.getVirtualItems=n((function(){return[d.getIndexes(),d.getMeasurements()]}),(function(e,t){for(var n=[],o=0,i=e.length;o<i;o++){var r=t[e[o]];n.push(r)}return n}),{key:!1,debug:function(){return d.options.debug}}),this.getVirtualItemForOffset=function(e){var t=d.getMeasurements();return o(t[a(0,t.length-1,(function(e){return o(t[e]).start}),e)])},this.getOffsetForAlignment=function(e,t){var n=d.getSize();"auto"===t&&(t=e<=d.scrollOffset?"start":e>=d.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=d.options.horizontal?"scrollWidth":"scrollHeight",i=(d.scrollElement?"document"in d.scrollElement?d.scrollElement.document.documentElement[o]:d.scrollElement[o]:0)-d.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=function(e,t){void 0===t&&(t="auto"),e=Math.max(0,Math.min(e,d.options.count-1));var n=o(d.getMeasurements()[e]);if("auto"===t)if(n.end>=d.scrollOffset+d.getSize()-d.options.scrollPaddingEnd)t="end";else{if(!(n.start<=d.scrollOffset+d.options.scrollPaddingStart))return[d.scrollOffset,t];t="start"}var i="end"===t?n.end+d.options.scrollPaddingEnd:n.start-d.options.scrollPaddingStart;return[d.getOffsetForAlignment(i,t),t]},this.isDynamicMode=function(){return d.measureElementCache.size>0},this.cancelScrollToIndex=function(){null!==d.scrollToIndexTimeoutId&&(clearTimeout(d.scrollToIndexTimeoutId),d.scrollToIndexTimeoutId=null)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,i=void 0===o?"start":o,r=n.behavior;d.cancelScrollToIndex(),"smooth"===r&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.getOffsetForAlignment(e,i),{adjustments:void 0,behavior:r})},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,s=n.behavior;e=Math.max(0,Math.min(e,d.options.count-1)),d.cancelScrollToIndex(),"smooth"===s&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");var l=d.getOffsetForIndex(e,r),a=l[0],u=l[1];d._scrollToOffset(a,{adjustments:void 0,behavior:s}),"smooth"!==s&&d.isDynamicMode()&&(d.scrollToIndexTimeoutId=setTimeout((function(){if(d.scrollToIndexTimeoutId=null,d.measureElementCache.has(d.options.getItemKey(e))){var t=d.getOffsetForIndex(e,u)[0];i(t,d.scrollOffset)||d.scrollToIndex(e,{align:u,behavior:s})}else d.scrollToIndex(e,{align:u,behavior:s})})))},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;d.cancelScrollToIndex(),"smooth"===n&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=d.getMeasurements()[d.options.count-1])?void 0:e.end)||d.options.paddingStart)-d.options.scrollMargin+d.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;d.options.scrollToFn(e,{behavior:o,adjustments:n},d)},this.measure=function(){d.itemSizeCache=new Map,d.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){d.itemSizeCache.set(e.key,e.size)})),this.maybeNotify()},e.approxEqual=i,e.defaultKeyExtractor=r,e.defaultRangeExtractor=s,e.elementScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},e.measureElement=l,e.memo=n,e.notUndefined=o,e.observeElementOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollLeft":"scrollTop"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeElementRect=function(e,t){var n=e.scrollElement;if(n){var o=function(e){var n=e.width,o=e.height;t({width:Math.round(n),height:Math.round(o)})};o(n.getBoundingClientRect());var i=new ResizeObserver((function(e){var t=e[0];if(null!=t&&t.borderBoxSize){var i=t.borderBoxSize[0];if(i)return void o({width:i.inlineSize,height:i.blockSize})}o(n.getBoundingClientRect())}));return i.observe(n,{box:"border-box"}),function(){i.unobserve(n)}}},e.observeWindowOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollX":"scrollY"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeWindowRect=function(e,t){var n=e.scrollElement;if(n){var o=function(){t({width:n.innerWidth,height:n.innerHeight})};return o(),n.addEventListener("resize",o,{passive:!0}),function(){n.removeEventListener("resize",o)}}},e.windowScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
11
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).VirtualCore={})}(this,(function(e){"use strict";function t(){return t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o])}return e},t.apply(this,arguments)}function n(e,t,n){var o,i,r=null!=(o=n.initialDeps)?o:[];return function(){var o;n.key&&null!=n.debug&&n.debug()&&(o=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return i;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),i=t.apply(void 0,l),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-o))/100,u=Math.round(100*(Date.now()-s))/100,c=u/16,d=function(e,t){for(e=String(e);e.length<t;)e=" "+e;return e};console.info("%c⏱ "+d(u,5)+" /"+d(a,5)+" ms","\n font-size: .6rem;\n font-weight: bold;\n color: hsl("+Math.max(0,Math.min(120-120*c,120))+"deg 100% 31%);",null==n?void 0:n.key)}return null==n||null==n.onChange||n.onChange(i),i}}function o(e,t){if(void 0===e)throw new Error("Unexpected undefined"+(t?": "+t:""));return e}var i=function(e,t){return Math.abs(e-t)<1},r=function(e){return e},s=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],i=t;i<=n;i++)o.push(i);return o},l=function(e,t,n){if(null!=t&&t.borderBoxSize){var o=t.borderBoxSize[0];if(o)return Math.round(o[n.options.horizontal?"inlineSize":"blockSize"])}return Math.round(e.getBoundingClientRect()[n.options.horizontal?"width":"height"])},a=function(e,t,n,o){for(;e<=t;){var i=(e+t)/2|0,r=n(i);if(r<o)e=i+1;else{if(!(r>o))return i;t=i-1}}return e>0?e-1:0};e.Virtualizer=function(e){var u,c,d=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache=new Map,this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache=new Map,this.observer=(u=null,c=function(){return u||("undefined"!=typeof ResizeObserver?u=new ResizeObserver((function(e){e.forEach((function(e){d._measureElement(e.target,e)}))})):null)},{disconnect:function(){var e;return null==(e=c())?void 0:e.disconnect()},observe:function(e){var t;return null==(t=c())?void 0:t.observe(e,{box:"border-box"})},unobserve:function(e){var t;return null==(t=c())?void 0:t.unobserve(e)}}),this.range={startIndex:0,endIndex:0},this.setOptions=function(e){Object.entries(e).forEach((function(t){var n=t[0];void 0===t[1]&&delete e[n]})),d.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:r,rangeExtractor:s,onChange:function(){},measureElement:l,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",elementKeyAttribute:"data-element-key",initialMeasurementsCache:[],lanes:1},e)},this.notify=function(){null==d.options.onChange||d.options.onChange(d)},this.cleanup=function(){d.unsubs.filter(Boolean).forEach((function(e){return e()})),d.unsubs=[],d.scrollElement=null},this._didMount=function(){return d.measureElementCache.forEach(d.observer.observe),function(){d.observer.disconnect(),d.cleanup()}},this._willUpdate=function(){var e=d.options.getScrollElement();d.scrollElement!==e&&(d.cleanup(),d.scrollElement=e,d._scrollToOffset(d.scrollOffset,{adjustments:void 0,behavior:void 0}),d.unsubs.push(d.options.observeElementRect(d,(function(e){var t=d.scrollRect;d.scrollRect=e,(d.options.horizontal?e.width!==t.width:e.height!==t.height)&&d.maybeNotify()}))),d.unsubs.push(d.options.observeElementOffset(d,(function(e){d.scrollAdjustments=0,d.scrollOffset!==e&&(null!==d.isScrollingTimeoutId&&(clearTimeout(d.isScrollingTimeoutId),d.isScrollingTimeoutId=null),d.isScrolling=!0,d.scrollDirection=d.scrollOffset<e?"forward":"backward",d.scrollOffset=e,d.maybeNotify(),d.isScrollingTimeoutId=setTimeout((function(){d.isScrollingTimeoutId=null,d.isScrolling=!1,d.scrollDirection=null,d.maybeNotify()}),d.options.scrollingDelay))}))))},this.getSize=function(){return d.scrollRect[d.options.horizontal?"width":"height"]},this.memoOptions=n((function(){return[d.options.count,d.options.paddingStart,d.options.scrollMargin,d.options.getItemKey]}),(function(e,t,n,o){return d.pendingMeasuredCacheIndexes=[],{count:e,paddingStart:t,scrollMargin:n,getItemKey:o}}),{key:!1}),this.getFurthestMeasurement=function(e,t){for(var n=new Map,o=new Map,i=t-1;i>=0;i--){var r=e[i];if(!n.has(r.lane)){var s=o.get(r.lane);if(null==s||r.end>s.end?o.set(r.lane,r):r.end<s.end&&n.set(r.lane,!0),n.size===d.options.lanes)break}}return o.size===d.options.lanes?Array.from(o.values()).sort((function(e,t){return e.end-t.end}))[0]:void 0},this.getMeasurements=n((function(){return[d.memoOptions(),d.itemSizeCache]}),(function(e,t){var n=e.count,o=e.paddingStart,i=e.scrollMargin,r=e.getItemKey,s=d.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,d.pendingMeasuredCacheIndexes):0;d.pendingMeasuredCacheIndexes=[];for(var l=d.measurementsCache.slice(0,s),a=s;a<n;a++){var u=r(a),c=1===d.options.lanes?l[a-1]:d.getFurthestMeasurement(l,a),f=c?c.end:o+i,h=t.get(u),m="number"==typeof h?h:d.options.estimateSize(a),v=f+m,g=c?c.lane:a%d.options.lanes;l[a]={index:a,start:f,size:m,end:v,key:u,lane:g}}return d.measurementsCache=l,l}),{key:!1,debug:function(){return d.options.debug}}),this.calculateRange=n((function(){return[d.getMeasurements(),d.getSize(),d.scrollOffset]}),(function(e,t,n){return d.range=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,i=t.length-1,r=a(0,i,(function(e){return t[e].start}),o),s=r;for(;s<i&&t[s].end<o+n;)s++;return{startIndex:r,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n})}),{key:!1,debug:function(){return d.options.debug}}),this.maybeNotify=n((function(){var e=d.calculateRange();return[e.startIndex,e.endIndex,d.isScrolling]}),(function(){d.notify()}),{key:!1,debug:function(){return d.options.debug},initialDeps:[this.range.startIndex,this.range.endIndex,this.isScrolling]}),this.getIndexes=n((function(){return[d.options.rangeExtractor,d.calculateRange(),d.options.overscan,d.options.count]}),(function(e,n,o,i){return e(t({},n,{overscan:o,count:i}))}),{key:!1,debug:function(){return d.options.debug}}),this.indexFromElement=function(e){var t=d.options.indexAttribute,n=e.getAttribute(t);return n?parseInt(n,10):(console.warn("Missing attribute name '"+t+"={index}' on measured element."),-1)},this._measureElement=function(e,t){var n,i=d.indexFromElement(e),r=o(d.measurementsCache[i]),s=null!=(n=e.getAttribute(d.options.elementKeyAttribute))?n:r.key,l=d.measureElementCache.get(s);if(!e.isConnected)return d.observer.unobserve(e),void(e===l&&d.measureElementCache.delete(s));l!==e&&(l&&d.observer.unobserve(l),d.observer.observe(e),d.measureElementCache.set(s,e));var a=d.options.measureElement(e,t,d);d.resizeItem(i,a)},this.resizeItem=function(e,t){var n,o=d.measurementsCache[e];if(o){var i=t-(null!=(n=d.itemSizeCache.get(o.key))?n:o.size);0!==i&&(o.start<d.scrollOffset&&d._scrollToOffset(d.scrollOffset,{adjustments:d.scrollAdjustments+=i,behavior:void 0}),d.pendingMeasuredCacheIndexes.push(e),d.itemSizeCache=new Map(d.itemSizeCache.set(o.key,t)),d.notify())}},this.measureElement=function(e){e&&d._measureElement(e,void 0)},this.getVirtualItems=n((function(){return[d.getIndexes(),d.getMeasurements()]}),(function(e,t){for(var n=[],o=0,i=e.length;o<i;o++){var r=t[e[o]];n.push(r)}return n}),{key:!1,debug:function(){return d.options.debug}}),this.getVirtualItemForOffset=function(e){var t=d.getMeasurements();return o(t[a(0,t.length-1,(function(e){return o(t[e]).start}),e)])},this.getOffsetForAlignment=function(e,t){var n=d.getSize();"auto"===t&&(t=e<=d.scrollOffset?"start":e>=d.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=d.options.horizontal?"scrollWidth":"scrollHeight",i=(d.scrollElement?"document"in d.scrollElement?d.scrollElement.document.documentElement[o]:d.scrollElement[o]:0)-d.getSize();return Math.max(Math.min(i,e),0)},this.getOffsetForIndex=function(e,t){void 0===t&&(t="auto"),e=Math.max(0,Math.min(e,d.options.count-1));var n=o(d.getMeasurements()[e]);if("auto"===t)if(n.end>=d.scrollOffset+d.getSize()-d.options.scrollPaddingEnd)t="end";else{if(!(n.start<=d.scrollOffset+d.options.scrollPaddingStart))return[d.scrollOffset,t];t="start"}var i="end"===t?n.end+d.options.scrollPaddingEnd:n.start-d.options.scrollPaddingStart;return[d.getOffsetForAlignment(i,t),t]},this.isDynamicMode=function(){return d.measureElementCache.size>0},this.cancelScrollToIndex=function(){null!==d.scrollToIndexTimeoutId&&(clearTimeout(d.scrollToIndexTimeoutId),d.scrollToIndexTimeoutId=null)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,i=void 0===o?"start":o,r=n.behavior;d.cancelScrollToIndex(),"smooth"===r&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.getOffsetForAlignment(e,i),{adjustments:void 0,behavior:r})},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,s=n.behavior;e=Math.max(0,Math.min(e,d.options.count-1)),d.cancelScrollToIndex(),"smooth"===s&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size.");var l=d.getOffsetForIndex(e,r),a=l[0],u=l[1];d._scrollToOffset(a,{adjustments:void 0,behavior:s}),"smooth"!==s&&d.isDynamicMode()&&(d.scrollToIndexTimeoutId=setTimeout((function(){if(d.scrollToIndexTimeoutId=null,d.measureElementCache.has(d.options.getItemKey(e))){var t=d.getOffsetForIndex(e,u)[0];i(t,d.scrollOffset)||d.scrollToIndex(e,{align:u,behavior:s})}else d.scrollToIndex(e,{align:u,behavior:s})})))},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;d.cancelScrollToIndex(),"smooth"===n&&d.isDynamicMode()&&console.warn("The `smooth` scroll behavior is not fully supported with dynamic size."),d._scrollToOffset(d.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=d.getMeasurements()[d.options.count-1])?void 0:e.end)||d.options.paddingStart)-d.options.scrollMargin+d.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;d.options.scrollToFn(e,{behavior:o,adjustments:n},d)},this.measure=function(){d.itemSizeCache=new Map,d.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){d.itemSizeCache.set(e.key,e.size)})),this.maybeNotify()},e.approxEqual=i,e.defaultKeyExtractor=r,e.defaultRangeExtractor=s,e.elementScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?0:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},e.measureElement=l,e.memo=n,e.notUndefined=o,e.observeElementOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollLeft":"scrollTop"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeElementRect=function(e,t){var n=e.scrollElement;if(n){var o=function(e){var n=e.width,o=e.height;t({width:Math.round(n),height:Math.round(o)})};o(n.getBoundingClientRect());var i=new ResizeObserver((function(e){var t=e[0];if(null!=t&&t.borderBoxSize){var i=t.borderBoxSize[0];if(i)return void o({width:i.inlineSize,height:i.blockSize})}o(n.getBoundingClientRect())}));return i.observe(n,{box:"border-box"}),function(){i.unobserve(n)}}},e.observeWindowOffset=function(e,t){var n=e.scrollElement;if(n){var o=function(){t(n[e.options.horizontal?"scrollX":"scrollY"])};return o(),n.addEventListener("scroll",o,{passive:!0}),function(){n.removeEventListener("scroll",o)}}},e.observeWindowRect=function(e,t){var n=e.scrollElement;if(n){var o=function(){t({width:n.innerWidth,height:n.innerHeight})};return o(),n.addEventListener("resize",o,{passive:!0}),function(){n.removeEventListener("resize",o)}}},e.windowScroll=function(e,t,n){var o,i,r=t.adjustments,s=void 0===r?window.scrollY:r,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((i={})[n.options.horizontal?"left":"top"]=a,i.behavior=l,i))},Object.defineProperty(e,"__esModule",{value:!0})}));
|
|
12
12
|
//# sourceMappingURL=index.production.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","_opts$initialDeps","result","deps","initialDeps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","measureElement","element","entry","instance","borderBoxSize","box","options","horizontal","getBoundingClientRect","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","_ro","get","_this","this","unsubs","scrollElement","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","observer","ResizeObserver","entries","forEach","_measureElement","target","disconnect","_get","observe","_get2","unobserve","_get3","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","behavior","observeElementRect","rect","prev","scrollRect","maybeNotify","observeElementOffset","offset","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","size","Array","from","values","sort","getMeasurements","_ref4","slice","furthestMeasurement","measuredSize","estimateSize","process","calculateRange","outerSize","_ref9","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","parseInt","warn","_node$getAttribute","item","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","_this$itemSizeCache$g","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","_temp","_ref5","_ref5$align","scrollToIndex","_temp2","_ref6","_ref6$align","initialAlign","_this$getOffsetForInd","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref8","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","cb","handler","addEventListener","passive","removeEventListener","inlineSize","blockSize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref"],"mappings":";;;;;;;;;;udAIO,SAASA,EACdC,EACAC,EACAC,GAMA,IAAAC,EAEIC,EADAC,SAAOH,EAAAA,EAAKI,eAAe,GAG/B,OAAO,WACL,IAAIC,EACAL,EAAKM,KAAON,MAAAA,EAAKO,OAALP,EAAKO,UAAWF,EAAUG,KAAKC,OAE/C,IAYIC,EAZEC,EAAUb,IAMhB,KAHEa,EAAQC,SAAWT,EAAKS,QACxBD,EAAQE,MAAK,SAACC,EAAUC,GAAa,OAAKZ,EAAKY,KAAWD,MAG1D,OAAOZ,EAUT,GAPAC,EAAOQ,EAGHX,EAAKM,KAAON,MAAAA,EAAKO,OAALP,EAAKO,UAAWG,EAAaF,KAAKC,OAElDP,EAASH,EAAMY,WAAAA,EAAAA,GAEXX,EAAKM,KAAiB,MAAVN,EAAKO,OAALP,EAAKO,QAAW,CAC9B,IAAMS,EAAaC,KAAKC,MAAgC,KAAzBV,KAAKC,MAAQJ,IAAmB,IACzDc,EAAgBF,KAAKC,MAAmC,KAA5BV,KAAKC,MAAQC,IAAsB,IAC/DU,EAAsBD,EAAgB,GAEtCE,EAAM,SAACC,EAAsBC,GAEjC,IADAD,EAAME,OAAOF,GACNA,EAAIV,OAASW,GAClBD,EAAM,IAAMA,EAEd,OAAOA,GAGTG,QAAQC,KAAI,OACHL,EAAIF,EAAe,QAAOE,EAAIL,EAAY,GAIhCC,MAAAA,2FAAAA,KAAKU,IAChB,EACAV,KAAKW,IAAI,IAAM,IAAMR,EAAqB,MAEhDpB,uBAAAA,SAAAA,EAAMM,IAEV,CAIA,OAFI,MAAJN,GAAc,MAAdA,EAAM6B,UAAN7B,EAAM6B,SAAW3B,GAEVA,EAEX,CAEO,SAAS4B,EAAgBC,EAAsBC,GACpD,QAAcC,IAAVF,EACF,MAAM,IAAIG,MAA6BF,wBAAAA,OAAWA,EAAQ,KAE1D,OAAOD,CAEX,CAEaI,IAAAA,EAAc,SAACC,EAAWC,GAAS,OAAKpB,KAAKqB,IAAIF,EAAIC,GAAK,CAAC,EChC3DE,EAAsB,SAACxB,GAAa,OAAKA,CAAK,EAE9CyB,EAAwB,SAACC,GAMpC,IALA,IAAMC,EAAQzB,KAAKU,IAAIc,EAAME,WAAaF,EAAMG,SAAU,GACpDC,EAAM5B,KAAKW,IAAIa,EAAMK,SAAWL,EAAMG,SAAUH,EAAMM,MAAQ,GAE9DC,EAAM,GAEHC,EAAIP,EAAOO,GAAKJ,EAAKI,IAC5BD,EAAIE,KAAKD,GAGX,OAAOD,CACT,EA0GaG,EAAiB,SAC5BC,EACAC,EACAC,GAEA,GAAS,MAALD,GAAAA,EAAOE,cAAe,CACxB,IAAMC,EAAMH,EAAME,cAAc,GAChC,GAAIC,EAIF,OAHavC,KAAKC,MAChBsC,EAAIF,EAASG,QAAQC,WAAa,aAAe,aAIvD,CACA,OAAOzC,KAAKC,MACVkC,EAAQO,wBACNL,EAASG,QAAQC,WAAa,QAAU,UAG9C,EA0sBME,EAA0B,SAC9BC,EACAC,EACAC,EACAhC,GAEA,KAAO8B,GAAOC,GAAM,CAClB,IAAME,GAAWH,EAAMC,GAAQ,EAAK,EAC9BG,EAAeF,EAAgBC,GAErC,GAAIC,EAAelC,EACjB8B,EAAMG,EAAS,MACV,MAAIC,EAAelC,GAGxB,OAAOiC,EAFPF,EAAOE,EAAS,CAGlB,CACF,CAEA,OAAIH,EAAM,EACDA,EAAM,EAEN,CAEX,gBA/lBE,SAAY7D,GAAwD,IA5B9DkE,EAEEC,EA0B4DC,EAAAC,KAAAA,KA3C5DC,OAAkC,GAAED,KAE5CE,cAAuC,KAAIF,KAC3CG,aAAuB,EAAKH,KACpBI,qBAA6D,KAAIJ,KACjEK,uBAA+D,KAAIL,KAC3EM,kBAAmC,GAAEN,KAC7BO,cAAgB,IAAIC,IAAkBR,KACtCS,4BAAwC,GAAET,KAGlDU,gBAA0C,KAAIV,KACtCW,kBAA4B,EAACX,KACrCY,oBAAsB,IAAIJ,IAAwBR,KAC1Ca,UACFhB,EAA6B,KAE3BC,EAAM,WACV,OAAID,IAEiC,oBAAnBiB,eACRjB,EAAM,IAAIiB,gBAAe,SAACC,GAChCA,EAAQC,SAAQ,SAAChC,GACfe,EAAKkB,gBAAgBjC,EAAMkC,OAAwBlC,EACrD,GACF,IAEO,OAIJ,CACLmC,WAAY,WAAA,IAAAC,EAAA,OAAM,OAANA,EAAMtB,UAAA,EAAAsB,EAAOD,YAAY,EACrCE,QAAS,SAACH,GAAe,IAAAI,EAAA,OAClB,OADkBA,EACvBxB,UAAK,EAALwB,EAAOD,QAAQH,EAAQ,CAAE/B,IAAK,cAAe,EAC/CoC,UAAW,SAACL,GAAe,IAAAM,EAAA,OAAU,OAAVA,EAAK1B,UAAK,EAAL0B,EAAOD,UAAUL,EAAO,IAExDlB,KACJ5B,MAAkD,CAChDE,WAAY,EACZG,SAAU,GACXuB,KAcDyB,WAAa,SAAC9F,GACZ+F,OAAOX,QAAQpF,GAAMqF,SAAQ,SAAkBW,GAAA,IAAhB1F,EAAG0F,EAAA,QACX,IADkBA,EAAA,WACGhG,EAAaM,EACzD,IAEA8D,EAAKX,QAAOwC,EAAA,CACV1F,OAAO,EACP2F,cAAe,EACftD,SAAU,EACVuD,aAAc,EACdC,WAAY,EACZC,mBAAoB,EACpBC,iBAAkB,EAClB5C,YAAY,EACZ6C,WAAYhE,EACZiE,eAAgBhE,EAChBX,SAAU,WAAQ,EAClBsB,eAAAA,EACAsD,YAAa,CAAEC,MAAO,EAAGC,OAAQ,GACjCC,aAAc,EACdC,eAAgB,IAChBC,eAAgB,aAChBC,oBAAqB,mBACrBC,yBAA0B,GAC1BC,MAAO,GACJjH,IAENqE,KAEO6C,OAAS,WACf,MAAA9C,EAAKX,QAAQ5B,UAAbuC,EAAKX,QAAQ5B,SAAWuC,IACzBC,KAEO8C,QAAU,WAChB/C,EAAKE,OAAO8C,OAAOC,SAAShC,SAAQ,SAACiC,GAAC,OAAKA,OAC3ClD,EAAKE,OAAS,GACdF,EAAKG,cAAgB,MACtBF,KAEDkD,UAAY,WAEV,OADAnD,EAAKa,oBAAoBI,QAAQjB,EAAKc,SAASQ,SACxC,WACLtB,EAAKc,SAASM,aACdpB,EAAK+C,YAER9C,KAEDmD,YAAc,WACZ,IAAMjD,EAAgBH,EAAKX,QAAQgE,mBAE/BrD,EAAKG,gBAAkBA,IACzBH,EAAK+C,UAEL/C,EAAKG,cAAgBA,EAErBH,EAAKsD,gBAAgBtD,EAAKuD,aAAc,CACtCC,iBAAa3F,EACb4F,cAAU5F,IAGZmC,EAAKE,OAAOpB,KACVkB,EAAKX,QAAQqE,mBAAmB1D,GAAM,SAAC2D,GACrC,IAAMC,EAAO5D,EAAK6D,WAClB7D,EAAK6D,WAAaF,GAEhB3D,EAAKX,QAAQC,WACTqE,EAAKrB,QAAUsB,EAAKtB,MACpBqB,EAAKpB,SAAWqB,EAAKrB,SAEzBvC,EAAK8D,aAER,KAGH9D,EAAKE,OAAOpB,KACVkB,EAAKX,QAAQ0E,qBAAqB/D,GAAM,SAACgE,GACvChE,EAAKY,kBAAoB,EAErBZ,EAAKuD,eAAiBS,IAIQ,OAA9BhE,EAAKK,uBACP4D,aAAajE,EAAKK,sBAClBL,EAAKK,qBAAuB,MAG9BL,EAAKI,aAAc,EACnBJ,EAAKW,gBACHX,EAAKuD,aAAeS,EAAS,UAAY,WAC3ChE,EAAKuD,aAAeS,EAEpBhE,EAAK8D,cAEL9D,EAAKK,qBAAuB6D,YAAW,WACrClE,EAAKK,qBAAuB,KAC5BL,EAAKI,aAAc,EACnBJ,EAAKW,gBAAkB,KAEvBX,EAAK8D,aACP,GAAG9D,EAAKX,QAAQoD,gBACjB,OAGNxC,KAEOkE,QAAU,WAChB,OAAOnE,EAAK6D,WAAW7D,EAAKX,QAAQC,WAAa,QAAU,WAC5DW,KAEOmE,YAAc3I,GACpB,WAAA,MAAM,CACJuE,EAAKX,QAAQV,MACbqB,EAAKX,QAAQ0C,aACb/B,EAAKX,QAAQmD,aACbxC,EAAKX,QAAQ8C,WAEf,IAAA,SAACxD,EAAOoD,EAAcS,EAAcL,GAElC,OADAnC,EAAKU,4BAA8B,GAC5B,CACL/B,MAAAA,EACAoD,aAAAA,EACAS,aAAAA,EACAL,WAAAA,EAEJ,GACA,CACEjG,KAAK,IAER+D,KAEOoE,uBAAyB,SAC/BC,EACA3H,GAIA,IAFA,IAAM4H,EAA4B,IAAI9D,IAChC+D,EAAuB,IAAI/D,IACxBgE,EAAI9H,EAAQ,EAAG8H,GAAK,EAAGA,IAAK,CACnC,IAAMC,EAAcJ,EAAaG,GAEjC,IAAIF,EAA0BI,IAAID,EAAYE,MAA9C,CAIA,IAAMC,EAA8BL,EAAqBzE,IACvD2E,EAAYE,MAWd,GARiC,MAA/BC,GACAH,EAAYjG,IAAMoG,EAA4BpG,IAE9C+F,EAAqBM,IAAIJ,EAAYE,KAAMF,GAClCA,EAAYjG,IAAMoG,EAA4BpG,KACvD8F,EAA0BO,IAAIJ,EAAYE,MAAM,GAG9CL,EAA0BQ,OAAS/E,EAAKX,QAAQwD,MAClD,KAfF,CAiBF,CAEA,OAAO2B,EAAqBO,OAAS/E,EAAKX,QAAQwD,MAC9CmC,MAAMC,KAAKT,EAAqBU,UAAUC,MACxC,SAACnH,EAAGC,GAAC,OAAKD,EAAES,IAAMR,EAAEQ,GAAG,IACvB,QACFZ,GACLoC,KAEOmF,gBAAkB3J,GACxB,WAAA,MAAM,CAACuE,EAAKoE,cAAepE,EAAKQ,kBAChC,SAAA6E,EAAoD7E,GAAkB,IAAnE7B,IAAAA,MAAOoD,IAAAA,aAAcS,IAAAA,aAAcL,IAAAA,WAC9B3E,EACJwC,EAAKU,4BAA4BlE,OAAS,EACtCK,KAAKW,UAALX,KAAYmD,EAAKU,6BACjB,EACNV,EAAKU,4BAA8B,GAInC,IAFA,IAAM4D,EAAetE,EAAKO,kBAAkB+E,MAAM,EAAG9H,GAE5CqB,EAAIrB,EAAKqB,EAAIF,EAAOE,IAAK,CAChC,IAAM3C,EAAMiG,EAAWtD,GAEjB0G,EACmB,IAAvBvF,EAAKX,QAAQwD,MACTyB,EAAazF,EAAI,GACjBmB,EAAKqE,uBAAuBC,EAAczF,GAE1CP,EAAQiH,EACVA,EAAoB9G,IACpBsD,EAAeS,EAEbgD,EAAehF,EAAcT,IAAI7D,GACjC6I,EACoB,iBAAjBS,EACHA,EACAxF,EAAKX,QAAQoG,aAAa5G,GAE1BJ,EAAMH,EAAQyG,EAEdH,EAAOW,EACTA,EAAoBX,KACpB/F,EAAImB,EAAKX,QAAQwD,MAErByB,EAAazF,GAAK,CAChBlC,MAAOkC,EACPP,MAAAA,EACAyG,KAAAA,EACAtG,IAAAA,EACAvC,IAAAA,EACA0I,KAAAA,EAEJ,CAIA,OAFA5E,EAAKO,kBAAoB+D,EAElBA,CACT,GACA,CACEpI,KAAKwJ,EACLvJ,MAAO,WAAA,OAAM6D,EAAKX,QAAQlD,KAAK,IAElC8D,KAED0F,eAAiBlK,GACf,WAAA,MAAM,CAACuE,EAAKoF,kBAAmBpF,EAAKmE,UAAWnE,EAAKuD,aAAa,IACjE,SAACe,EAAcsB,EAAWrC,GACxB,OAAQvD,EAAK3B,MAmXnB,SAQGwH,GAAA,IAPDvB,IAAAA,aACAsB,IAAAA,UACArC,IAAAA,aAMM5E,EAAQ2F,EAAa9H,OAAS,EAG9B+B,EAAaiB,EAAwB,EAAGb,GAF5B,SAAChC,GAAa,OAAK2H,EAAa3H,GAAQ2B,KAAK,GAECiF,GAC5D7E,EAAWH,EAEf,KACEG,EAAWC,GACX2F,EAAa5F,GAAWD,IAAM8E,EAAeqC,GAE7ClH,IAGF,MAAO,CAAEH,WAAAA,EAAYG,SAAAA,EACvB,CA1Y2BiH,CAAe,CAClCrB,aAAAA,EACAsB,UAAAA,EACArC,aAAAA,GAEJ,GACA,CACErH,KAAKwJ,EACLvJ,MAAO,WAAA,OAAM6D,EAAKX,QAAQlD,KAAK,IAElC8D,KAEO6D,YAAcrI,GACpB,WACE,IAAM4C,EAAQ2B,EAAK2F,iBAEnB,MAAO,CAACtH,EAAME,WAAYF,EAAMK,SAAUsB,EAAKI,YACjD,IACA,WACEJ,EAAK8C,QACP,GACA,CACE5G,KAAKwJ,EACLvJ,MAAO,WAAA,OAAM6D,EAAKX,QAAQlD,KAAK,EAC/BH,YAAa,CACXiE,KAAK5B,MAAME,WACX0B,KAAK5B,MAAMK,SACXuB,KAAKG,eAGVH,KAEO6F,WAAarK,GACnB,WAAA,MAAM,CACJuE,EAAKX,QAAQ+C,eACbpC,EAAK2F,iBACL3F,EAAKX,QAAQb,SACbwB,EAAKX,QAAQV,MAEf,IAAA,SAACyD,EAAgB/D,EAAOG,EAAUG,GAChC,OAAOyD,OACF/D,EAAK,CACRG,SAAAA,EACAG,MAAAA,IAEJ,GACA,CACEzC,KAAKwJ,EACLvJ,MAAO,WAAA,OAAM6D,EAAKX,QAAQlD,KAAK,IAElC8D,KAED8F,iBAAmB,SAACC,GAClB,IAAMC,EAAgBjG,EAAKX,QAAQqD,eAC7BwD,EAAWF,EAAKG,aAAaF,GAEnC,OAAKC,EAOEE,SAASF,EAAU,KANxB7I,QAAQgJ,KACqBJ,2BAAAA,EAC5B,mCACO,IAIXhG,KAEOiB,gBAAkB,SACxB8E,EACA/G,GACG,IAAAqH,EACG3J,EAAQqD,EAAK+F,iBAAiBC,GAE9BO,EAAO7I,EAAasC,EAAKO,kBAAkB5D,IAE3C6J,EACmDD,OADzCD,EACdN,EAAKG,aAAanG,EAAKX,QAAQsD,sBAAwB4D,EAAAA,EAAKrK,IAExDuK,EAAWzG,EAAKa,oBAAoBd,IAAIyG,GAE9C,IAAKR,EAAKU,YAKR,OAJA1G,EAAKc,SAASU,UAAUwE,QACpBA,IAASS,GACXzG,EAAKa,oBAA0B,OAAC2F,IAKhCC,IAAaT,IACXS,GACFzG,EAAKc,SAASU,UAAUiF,GAE1BzG,EAAKc,SAASQ,QAAQ0E,GACtBhG,EAAKa,oBAAoBiE,IAAI0B,EAAYR,IAG3C,IAAMW,EAAmB3G,EAAKX,QAAQN,eAAeiH,EAAM/G,EAAOe,GAElEA,EAAK4G,WAAWjK,EAAOgK,IACxB1G,KAED2G,WAAa,SAACjK,EAAeoI,GAAiB,IAAA8B,EACtCN,EAAOvG,EAAKO,kBAAkB5D,GACpC,GAAK4J,EAAL,CAIA,IAEMO,EAAQ/B,GAFuCwB,OAAvCM,EAAG7G,EAAKQ,cAAcT,IAAIwG,EAAKrK,MAAQqK,EAAAA,EAAKxB,MAI5C,IAAV+B,IACEP,EAAKjI,MAAQ0B,EAAKuD,cAKpBvD,EAAKsD,gBAAgBtD,EAAKuD,aAAc,CACtCC,YAAcxD,EAAKY,mBAAqBkG,EACxCrD,cAAU5F,IAIdmC,EAAKU,4BAA4B5B,KAAKnC,GAEtCqD,EAAKQ,cAAgB,IAAIC,IACvBT,EAAKQ,cAAcsE,IAAIyB,EAAKrK,IAAK6I,IAGnC/E,EAAK8C,SAxBP,GA0BD7C,KAEDlB,eAAiB,SAACiH,GACXA,GAILhG,EAAKkB,gBAAgB8E,OAAMnI,IAC5BoC,KAED8G,gBAAkBtL,GAChB,WAAA,MAAM,CAACuE,EAAK8F,aAAc9F,EAAKoF,kBAAkB,IACjD,SAAC4B,EAAS1C,GAGR,IAFA,IAAM2C,EAA8B,GAE3BC,EAAI,EAAGC,EAAMH,EAAQxK,OAAQ0K,EAAIC,EAAKD,IAAK,CAClD,IACMxC,EAAcJ,EADV0C,EAAQE,IAGlBD,EAAanI,KAAK4F,EACpB,CAEA,OAAOuC,CACT,GACA,CACE/K,KAAKwJ,EACLvJ,MAAO,WAAA,OAAM6D,EAAKX,QAAQlD,KAAK,IAElC8D,KAEDmH,wBAA0B,SAACpD,GACzB,IAAMM,EAAetE,EAAKoF,kBAE1B,OAAO1H,EACL4G,EACE9E,EACE,EACA8E,EAAa9H,OAAS,GACtB,SAACG,GAAa,OAAKe,EAAa4G,EAAa3H,IAAQ2B,QACrD0F,MAIP/D,KAEDoH,sBAAwB,SAACC,EAAkBC,GACzC,IAAMxC,EAAO/E,EAAKmE,UAEJ,SAAVoD,IAEAA,EADED,GAAYtH,EAAKuD,aACX,QACC+D,GAAYtH,EAAKuD,aAAewB,EACjC,MAEA,SAIE,UAAVwC,IAEiB,QAAVA,EACTD,GAAsBvC,EACH,WAAVwC,IACTD,GAAsBvC,EAAO,IAG/B,IAAMyC,EAAiBxH,EAAKX,QAAQC,WAChC,cACA,eAOEmI,GANazH,EAAKG,cACpB,aAAcH,EAAKG,cACjBH,EAAKG,cAAcuH,SAASC,gBAAgBH,GAC5CxH,EAAKG,cAAcqH,GACrB,GAE2BxH,EAAKmE,UAEpC,OAAOtH,KAAKU,IAAIV,KAAKW,IAAIiK,EAAWH,GAAW,IAChDrH,KAED2H,kBAAoB,SAACjL,EAAe4K,QAAsB,IAAtBA,IAAAA,EAAyB,QAC3D5K,EAAQE,KAAKU,IAAI,EAAGV,KAAKW,IAAIb,EAAOqD,EAAKX,QAAQV,MAAQ,IAEzD,IAAM+F,EAAchH,EAAasC,EAAKoF,kBAAkBzI,IAExD,GAAc,SAAV4K,EACF,GACE7C,EAAYjG,KACZuB,EAAKuD,aAAevD,EAAKmE,UAAYnE,EAAKX,QAAQ6C,iBAElDqF,EAAQ,UACH,MACL7C,EAAYpG,OACZ0B,EAAKuD,aAAevD,EAAKX,QAAQ4C,oBAIjC,MAAO,CAACjC,EAAKuD,aAAcgE,GAF3BA,EAAQ,OAGV,CAGF,IAAMD,EACM,QAAVC,EACI7C,EAAYjG,IAAMuB,EAAKX,QAAQ6C,iBAC/BwC,EAAYpG,MAAQ0B,EAAKX,QAAQ4C,mBAEvC,MAAO,CAACjC,EAAKqH,sBAAsBC,EAAUC,GAAQA,IACtDtH,KAEO4H,cAAgB,WAAA,OAAM7H,EAAKa,oBAAoBkE,KAAO,CAAC,EAAA9E,KAEvD6H,oBAAsB,WACQ,OAAhC9H,EAAKM,yBACP2D,aAAajE,EAAKM,wBAClBN,EAAKM,uBAAyB,OAEjCL,KAED8H,eAAiB,SACfT,EAEGU,GAAA,IAAAC,OAAA,IAAAD,EADoD,CAAE,EAAAA,EAAAE,EAAAD,EAAvDV,MAAAA,aAAQ,QAAOW,EAAEzE,IAAAA,SAEnBzD,EAAK8H,sBAEY,WAAbrE,GAAyBzD,EAAK6H,iBAChCxK,QAAQgJ,KACN,0EAIJrG,EAAKsD,gBAAgBtD,EAAKqH,sBAAsBC,EAAUC,GAAQ,CAChE/D,iBAAa3F,EACb4F,SAAAA,KAEHxD,KAEDkI,cAAgB,SACdxL,EAEGyL,GAAA,IAAAC,OAAA,IAAAD,EADgE,CAAE,EAAAA,EAAAE,EAAAD,EAAnEd,MAAOgB,aAAe,OAAMD,EAAE7E,IAAAA,SAEhC9G,EAAQE,KAAKU,IAAI,EAAGV,KAAKW,IAAIb,EAAOqD,EAAKX,QAAQV,MAAQ,IAEzDqB,EAAK8H,sBAEY,WAAbrE,GAAyBzD,EAAK6H,iBAChCxK,QAAQgJ,KACN,0EAIJ,IAAAmC,EAA0BxI,EAAK4H,kBAAkBjL,EAAO4L,GAAjDjB,EAAQkB,EAAA,GAAEjB,EAAKiB,EAAA,GAEtBxI,EAAKsD,gBAAgBgE,EAAU,CAAE9D,iBAAa3F,EAAW4F,SAAAA,IAExC,WAAbA,GAAyBzD,EAAK6H,kBAChC7H,EAAKM,uBAAyB4D,YAAW,WAOvC,GANAlE,EAAKM,uBAAyB,KAETN,EAAKa,oBAAoB8D,IAC5C3E,EAAKX,QAAQ8C,WAAWxF,IAGR,CAChB,IAAO2K,EAAYtH,EAAK4H,kBAAkBjL,EAAO4K,GAAlC,GAEVxJ,EAAYuJ,EAAUtH,EAAKuD,eAC9BvD,EAAKmI,cAAcxL,EAAO,CAAE4K,MAAAA,EAAO9D,SAAAA,GAEvC,MACEzD,EAAKmI,cAAcxL,EAAO,CAAE4K,MAAAA,EAAO9D,SAAAA,GAEvC,MAEHxD,KAEDwI,SAAW,SAAC3B,EAA4D4B,GAAA,IAA3CjF,QAA2C,IAAAiF,EAAP,CAAE,EAAAA,GAAtCjF,SAC3BzD,EAAK8H,sBAEY,WAAbrE,GAAyBzD,EAAK6H,iBAChCxK,QAAQgJ,KACN,0EAIJrG,EAAKsD,gBAAgBtD,EAAKuD,aAAeuD,EAAO,CAC9CtD,iBAAa3F,EACb4F,SAAAA,KAEHxD,KAED0I,aAAe,WAAA,IAAAC,EAAA,eACZA,EAAA5I,EAAKoF,kBAAkBpF,EAAKX,QAAQV,MAAQ,WAA5CiK,EAAgDnK,MAC/CuB,EAAKX,QAAQ0C,cACf/B,EAAKX,QAAQmD,aACbxC,EAAKX,QAAQ2C,UAAU,EAAA/B,KAEjBqD,gBAAkB,SACxBU,EAQG6E,GAAA,IANDrF,IAAAA,YACAC,IAAAA,SAMFzD,EAAKX,QAAQyJ,WAAW9E,EAAQ,CAAEP,SAAAA,EAAUD,YAAAA,GAAexD,IAC5DC,KAED8I,QAAU,WACR/I,EAAKQ,cAAgB,IAAIC,IACzBT,EAAK8C,UAlkBL7C,KAAKyB,WAAW9F,GAChBqE,KAAK4D,WAAa5D,KAAKZ,QAAQgD,YAC/BpC,KAAKsD,aAAetD,KAAKZ,QAAQyC,cACjC7B,KAAKM,kBAAoBN,KAAKZ,QAAQuD,yBACtC3C,KAAKM,kBAAkBU,SAAQ,SAACsF,GAC9BvG,EAAKQ,cAAcsE,IAAIyB,EAAKrK,IAAKqK,EAAKxB,KACxC,IAEA9E,KAAK6D,aACP,oFA3H2B,SAC3BE,EAKA9E,EAAAA,GACG,IAAA8J,EAAAC,EAAAC,EAAAC,EAJD3F,YAAAA,aAAc,EAAC0F,EACfzF,IAAAA,SAII6D,EAAWtD,EAASR,EAE1B,OAAAtE,EAAAA,EAASiB,gBAAT,MAAA6I,EAAwBI,UAAxBJ,EAAwBI,WAAQH,EAAA,CAAA,GAC7B/J,EAASG,QAAQC,WAAa,OAAS,OAAQgI,EAChD7D,EAAAA,SAAAA,EACAwF,GACJ,sEAjGoC,SAClC/J,EACAmK,GAEA,IAAMrK,EAAUE,EAASiB,cACzB,GAAKnB,EAAL,CAIA,IAAMsK,EAAU,WACdD,EAAGrK,EAAQE,EAASG,QAAQC,WAAa,aAAe,eAQ1D,OANAgK,IAEAtK,EAAQuK,iBAAiB,SAAUD,EAAS,CAC1CE,SAAS,IAGJ,WACLxK,EAAQyK,oBAAoB,SAAUH,GAZxC,CAcF,uBA/EkC,SAChCpK,EACAmK,GAEA,IAAMrK,EAAUE,EAASiB,cACzB,GAAKnB,EAAL,CAIA,IAAMsK,EAAU,SAAC3F,GACf,IAAQrB,EAAkBqB,EAAlBrB,MAAOC,EAAWoB,EAAXpB,OACf8G,EAAG,CAAE/G,MAAOzF,KAAKC,MAAMwF,GAAQC,OAAQ1F,KAAKC,MAAMyF,MAGpD+G,EAAQtK,EAAQO,yBAEhB,IAAMuB,EAAW,IAAIC,gBAAe,SAACC,GACnC,IAAM/B,EAAQ+B,EAAQ,GACtB,GAAS,MAAL/B,GAAAA,EAAOE,cAAe,CACxB,IAAMC,EAAMH,EAAME,cAAc,GAChC,GAAIC,EAEF,YADAkK,EAAQ,CAAEhH,MAAOlD,EAAIsK,WAAYnH,OAAQnD,EAAIuK,WAGjD,CACAL,EAAQtK,EAAQO,wBAClB,IAIA,OAFAuB,EAASQ,QAAQtC,EAAS,CAAEI,IAAK,eAE1B,WACL0B,EAASU,UAAUxC,GAxBrB,CA0BF,wBAgDmC,SACjCE,EACAmK,GAEA,IAAMrK,EAAUE,EAASiB,cACzB,GAAKnB,EAAL,CAIA,IAAMsK,EAAU,WACdD,EAAGrK,EAAQE,EAASG,QAAQC,WAAa,UAAY,aAQvD,OANAgK,IAEAtK,EAAQuK,iBAAiB,SAAUD,EAAS,CAC1CE,SAAS,IAGJ,WACLxK,EAAQyK,oBAAoB,SAAUH,GAZxC,CAcF,sBAnEiC,SAC/BpK,EACAmK,GAEA,IAAMrK,EAAUE,EAASiB,cACzB,GAAKnB,EAAL,CAIA,IAAMsK,EAAU,WACdD,EAAG,CAAE/G,MAAOtD,EAAQ4K,WAAYrH,OAAQvD,EAAQ6K,eAQlD,OANAP,IAEAtK,EAAQuK,iBAAiB,SAAUD,EAAS,CAC1CE,SAAS,IAGJ,WACLxK,EAAQyK,oBAAoB,SAAUH,GAZxC,CAcF,iBAqE4B,SAC1BtF,EAKA9E,EAAAA,GACG,IAAA4K,EAAAC,EAAAC,EAAAC,EAJDzG,YAAAA,aAAc,EAACwG,EACfvG,IAAAA,SAII6D,EAAWtD,EAASR,EAE1B,OAAAtE,EAAAA,EAASiB,gBAAT,MAAA2J,EAAwBV,UAAxBU,EAAwBV,WAAQW,EAAA,CAAA,GAC7B7K,EAASG,QAAQC,WAAa,OAAS,OAAQgI,EAChD7D,EAAAA,SAAAA,EACAsG,GACJ"}
|
|
1
|
+
{"version":3,"file":"index.production.js","sources":["../../src/utils.ts","../../src/index.ts"],"sourcesContent":["export type NoInfer<A extends any> = [A][A extends any ? 0 : never]\n\nexport type PartialKeys<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>\n\nexport function memo<TDeps extends readonly any[], TResult>(\n getDeps: () => [...TDeps],\n fn: (...args: NoInfer<[...TDeps]>) => TResult,\n opts: {\n key: false | string\n debug?: () => any\n onChange?: (result: TResult) => void\n initialDeps?: TDeps\n },\n) {\n let deps = opts.initialDeps ?? []\n let result: TResult | undefined\n\n return (): TResult => {\n let depTime: number\n if (opts.key && opts.debug?.()) depTime = Date.now()\n\n const newDeps = getDeps()\n\n const depsChanged =\n newDeps.length !== deps.length ||\n newDeps.some((dep: any, index: number) => deps[index] !== dep)\n\n if (!depsChanged) {\n return result!\n }\n\n deps = newDeps\n\n let resultTime: number\n if (opts.key && opts.debug?.()) resultTime = Date.now()\n\n result = fn(...newDeps)\n\n if (opts.key && opts.debug?.()) {\n const depEndTime = Math.round((Date.now() - depTime!) * 100) / 100\n const resultEndTime = Math.round((Date.now() - resultTime!) * 100) / 100\n const resultFpsPercentage = resultEndTime / 16\n\n const pad = (str: number | string, num: number) => {\n str = String(str)\n while (str.length < num) {\n str = ' ' + str\n }\n return str\n }\n\n console.info(\n `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,\n `\n font-size: .6rem;\n font-weight: bold;\n color: hsl(${Math.max(\n 0,\n Math.min(120 - 120 * resultFpsPercentage, 120),\n )}deg 100% 31%);`,\n opts?.key,\n )\n }\n\n opts?.onChange?.(result)\n\n return result!\n }\n}\n\nexport function notUndefined<T>(value: T | undefined, msg?: string): T {\n if (value === undefined) {\n throw new Error(`Unexpected undefined${msg ? `: ${msg}` : ''}`)\n } else {\n return value\n }\n}\n\nexport const approxEqual = (a: number, b: number) => Math.abs(a - b) < 1\n","import { approxEqual, memo, notUndefined } from './utils'\n\nexport * from './utils'\n\n//\n\ntype ScrollDirection = 'forward' | 'backward'\n\ntype ScrollAlignment = 'start' | 'center' | 'end' | 'auto'\n\ntype ScrollBehavior = 'auto' | 'smooth'\n\nexport interface ScrollToOptions {\n align?: ScrollAlignment\n behavior?: ScrollBehavior\n}\n\ntype ScrollToOffsetOptions = ScrollToOptions\n\ntype ScrollToIndexOptions = ScrollToOptions\n\nexport interface Range {\n startIndex: number\n endIndex: number\n overscan: number\n count: number\n}\n\ntype Key = number | string\n\nexport interface VirtualItem {\n key: Key\n index: number\n start: number\n end: number\n size: number\n lane: number\n}\n\ninterface Rect {\n width: number\n height: number\n}\n\n//\n\nexport const defaultKeyExtractor = (index: number) => index\n\nexport const defaultRangeExtractor = (range: Range) => {\n const start = Math.max(range.startIndex - range.overscan, 0)\n const end = Math.min(range.endIndex + range.overscan, range.count - 1)\n\n const arr = []\n\n for (let i = start; i <= end; i++) {\n arr.push(i)\n }\n\n return arr\n}\n\nexport const observeElementRect = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = (rect: Rect) => {\n const { width, height } = rect\n cb({ width: Math.round(width), height: Math.round(height) })\n }\n\n handler(element.getBoundingClientRect())\n\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0]\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n handler({ width: box.inlineSize, height: box.blockSize })\n return\n }\n }\n handler(element.getBoundingClientRect())\n })\n\n observer.observe(element, { box: 'border-box' })\n\n return () => {\n observer.unobserve(element)\n }\n}\n\nexport const observeWindowRect = (\n instance: Virtualizer<Window, any>,\n cb: (rect: Rect) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb({ width: element.innerWidth, height: element.innerHeight })\n }\n handler()\n\n element.addEventListener('resize', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('resize', handler)\n }\n}\n\nexport const observeElementOffset = <T extends Element>(\n instance: Virtualizer<T, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const observeWindowOffset = (\n instance: Virtualizer<Window, any>,\n cb: (offset: number) => void,\n) => {\n const element = instance.scrollElement\n if (!element) {\n return\n }\n\n const handler = () => {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY'])\n }\n handler()\n\n element.addEventListener('scroll', handler, {\n passive: true,\n })\n\n return () => {\n element.removeEventListener('scroll', handler)\n }\n}\n\nexport const measureElement = <TItemElement extends Element>(\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<any, TItemElement>,\n) => {\n if (entry?.borderBoxSize) {\n const box = entry.borderBoxSize[0]\n if (box) {\n const size = Math.round(\n box[instance.options.horizontal ? 'inlineSize' : 'blockSize'],\n )\n return size\n }\n }\n return Math.round(\n element.getBoundingClientRect()[\n instance.options.horizontal ? 'width' : 'height'\n ],\n )\n}\n\nexport const windowScroll = <T extends Window>(\n offset: number,\n {\n adjustments = window.scrollY,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport const elementScroll = <T extends Element>(\n offset: number,\n {\n adjustments = 0,\n behavior,\n }: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<T, any>,\n) => {\n const toOffset = offset + adjustments\n\n instance.scrollElement?.scrollTo?.({\n [instance.options.horizontal ? 'left' : 'top']: toOffset,\n behavior,\n })\n}\n\nexport interface VirtualizerOptions<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n // Required from the user\n count: number\n getScrollElement: () => TScrollElement | null\n estimateSize: (index: number) => number\n\n // Required from the framework adapter (but can be overridden)\n scrollToFn: (\n offset: number,\n options: { adjustments?: number; behavior?: ScrollBehavior },\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => void\n observeElementRect: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (rect: Rect) => void,\n ) => void | (() => void)\n observeElementOffset: (\n instance: Virtualizer<TScrollElement, TItemElement>,\n cb: (offset: number) => void,\n ) => void | (() => void)\n\n // Optional\n debug?: any\n initialRect?: Rect\n onChange?: (instance: Virtualizer<TScrollElement, TItemElement>) => void\n measureElement?: (\n element: TItemElement,\n entry: ResizeObserverEntry | undefined,\n instance: Virtualizer<TScrollElement, TItemElement>,\n ) => number\n overscan?: number\n horizontal?: boolean\n paddingStart?: number\n paddingEnd?: number\n scrollPaddingStart?: number\n scrollPaddingEnd?: number\n initialOffset?: number\n getItemKey?: (index: number) => Key\n rangeExtractor?: (range: Range) => number[]\n scrollMargin?: number\n scrollingDelay?: number\n elementKeyAttribute?: string\n indexAttribute?: string\n initialMeasurementsCache?: VirtualItem[]\n lanes?: number\n}\n\nexport class Virtualizer<\n TScrollElement extends Element | Window,\n TItemElement extends Element,\n> {\n private unsubs: (void | (() => void))[] = []\n options!: Required<VirtualizerOptions<TScrollElement, TItemElement>>\n scrollElement: TScrollElement | null = null\n isScrolling: boolean = false\n private isScrollingTimeoutId: ReturnType<typeof setTimeout> | null = null\n private scrollToIndexTimeoutId: ReturnType<typeof setTimeout> | null = null\n measurementsCache: VirtualItem[] = []\n private itemSizeCache = new Map<Key, number>()\n private pendingMeasuredCacheIndexes: number[] = []\n private scrollRect: Rect\n scrollOffset: number\n scrollDirection: ScrollDirection | null = null\n private scrollAdjustments: number = 0\n measureElementCache = new Map<Key, TItemElement>()\n private observer = (() => {\n let _ro: ResizeObserver | null = null\n\n const get = () => {\n if (_ro) {\n return _ro\n } else if (typeof ResizeObserver !== 'undefined') {\n return (_ro = new ResizeObserver((entries) => {\n entries.forEach((entry) => {\n this._measureElement(entry.target as TItemElement, entry)\n })\n }))\n } else {\n return null\n }\n }\n\n return {\n disconnect: () => get()?.disconnect(),\n observe: (target: Element) =>\n get()?.observe(target, { box: 'border-box' }),\n unobserve: (target: Element) => get()?.unobserve(target),\n }\n })()\n range: { startIndex: number; endIndex: number } = {\n startIndex: 0,\n endIndex: 0,\n }\n\n constructor(opts: VirtualizerOptions<TScrollElement, TItemElement>) {\n this.setOptions(opts)\n this.scrollRect = this.options.initialRect\n this.scrollOffset = this.options.initialOffset\n this.measurementsCache = this.options.initialMeasurementsCache\n this.measurementsCache.forEach((item) => {\n this.itemSizeCache.set(item.key, item.size)\n })\n\n this.maybeNotify()\n }\n\n setOptions = (opts: VirtualizerOptions<TScrollElement, TItemElement>) => {\n Object.entries(opts).forEach(([key, value]) => {\n if (typeof value === 'undefined') delete (opts as any)[key]\n })\n\n this.options = {\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: () => {},\n measureElement,\n initialRect: { width: 0, height: 0 },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n elementKeyAttribute: 'data-element-key',\n initialMeasurementsCache: [],\n lanes: 1,\n ...opts,\n }\n }\n\n private notify = () => {\n this.options.onChange?.(this)\n }\n\n private cleanup = () => {\n this.unsubs.filter(Boolean).forEach((d) => d!())\n this.unsubs = []\n this.scrollElement = null\n }\n\n _didMount = () => {\n this.measureElementCache.forEach(this.observer.observe)\n return () => {\n this.observer.disconnect()\n this.cleanup()\n }\n }\n\n _willUpdate = () => {\n const scrollElement = this.options.getScrollElement()\n\n if (this.scrollElement !== scrollElement) {\n this.cleanup()\n\n this.scrollElement = scrollElement\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined,\n })\n\n this.unsubs.push(\n this.options.observeElementRect(this, (rect) => {\n const prev = this.scrollRect\n this.scrollRect = rect\n if (\n this.options.horizontal\n ? rect.width !== prev.width\n : rect.height !== prev.height\n ) {\n this.maybeNotify()\n }\n }),\n )\n\n this.unsubs.push(\n this.options.observeElementOffset(this, (offset) => {\n this.scrollAdjustments = 0\n\n if (this.scrollOffset === offset) {\n return\n }\n\n if (this.isScrollingTimeoutId !== null) {\n clearTimeout(this.isScrollingTimeoutId)\n this.isScrollingTimeoutId = null\n }\n\n this.isScrolling = true\n this.scrollDirection =\n this.scrollOffset < offset ? 'forward' : 'backward'\n this.scrollOffset = offset\n\n this.maybeNotify()\n\n this.isScrollingTimeoutId = setTimeout(() => {\n this.isScrollingTimeoutId = null\n this.isScrolling = false\n this.scrollDirection = null\n\n this.maybeNotify()\n }, this.options.scrollingDelay)\n }),\n )\n }\n }\n\n private getSize = () => {\n return this.scrollRect[this.options.horizontal ? 'width' : 'height']\n }\n\n private memoOptions = memo(\n () => [\n this.options.count,\n this.options.paddingStart,\n this.options.scrollMargin,\n this.options.getItemKey,\n ],\n (count, paddingStart, scrollMargin, getItemKey) => {\n this.pendingMeasuredCacheIndexes = []\n return {\n count,\n paddingStart,\n scrollMargin,\n getItemKey,\n }\n },\n {\n key: false,\n },\n )\n\n private getFurthestMeasurement = (\n measurements: VirtualItem[],\n index: number,\n ) => {\n const furthestMeasurementsFound = new Map<number, true>()\n const furthestMeasurements = new Map<number, VirtualItem>()\n for (let m = index - 1; m >= 0; m--) {\n const measurement = measurements[m]!\n\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue\n }\n\n const previousFurthestMeasurement = furthestMeasurements.get(\n measurement.lane,\n )\n if (\n previousFurthestMeasurement == null ||\n measurement.end > previousFurthestMeasurement.end\n ) {\n furthestMeasurements.set(measurement.lane, measurement)\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true)\n }\n\n if (furthestMeasurementsFound.size === this.options.lanes) {\n break\n }\n }\n\n return furthestMeasurements.size === this.options.lanes\n ? Array.from(furthestMeasurements.values()).sort(\n (a, b) => a.end - b.end,\n )[0]\n : undefined\n }\n\n private getMeasurements = memo(\n () => [this.memoOptions(), this.itemSizeCache],\n ({ count, paddingStart, scrollMargin, getItemKey }, itemSizeCache) => {\n const min =\n this.pendingMeasuredCacheIndexes.length > 0\n ? Math.min(...this.pendingMeasuredCacheIndexes)\n : 0\n this.pendingMeasuredCacheIndexes = []\n\n const measurements = this.measurementsCache.slice(0, min)\n\n for (let i = min; i < count; i++) {\n const key = getItemKey(i)\n\n const furthestMeasurement =\n this.options.lanes === 1\n ? measurements[i - 1]\n : this.getFurthestMeasurement(measurements, i)\n\n const start = furthestMeasurement\n ? furthestMeasurement.end\n : paddingStart + scrollMargin\n\n const measuredSize = itemSizeCache.get(key)\n const size =\n typeof measuredSize === 'number'\n ? measuredSize\n : this.options.estimateSize(i)\n\n const end = start + size\n\n const lane = furthestMeasurement\n ? furthestMeasurement.lane\n : i % this.options.lanes\n\n measurements[i] = {\n index: i,\n start,\n size,\n end,\n key,\n lane,\n }\n }\n\n this.measurementsCache = measurements\n\n return measurements\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: () => this.options.debug,\n },\n )\n\n calculateRange = memo(\n () => [this.getMeasurements(), this.getSize(), this.scrollOffset],\n (measurements, outerSize, scrollOffset) => {\n return (this.range = calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n }))\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: () => this.options.debug,\n },\n )\n\n private maybeNotify = memo(\n () => {\n const range = this.calculateRange()\n\n return [range.startIndex, range.endIndex, this.isScrolling]\n },\n () => {\n this.notify()\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: () => this.options.debug,\n initialDeps: [\n this.range.startIndex,\n this.range.endIndex,\n this.isScrolling,\n ],\n },\n )\n\n private getIndexes = memo(\n () => [\n this.options.rangeExtractor,\n this.calculateRange(),\n this.options.overscan,\n this.options.count,\n ],\n (rangeExtractor, range, overscan, count) => {\n return rangeExtractor({\n ...range,\n overscan,\n count,\n })\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n indexFromElement = (node: TItemElement) => {\n const attributeName = this.options.indexAttribute\n const indexStr = node.getAttribute(attributeName)\n\n if (!indexStr) {\n console.warn(\n `Missing attribute name '${attributeName}={index}' on measured element.`,\n )\n return -1\n }\n\n return parseInt(indexStr, 10)\n }\n\n private _measureElement = (\n node: TItemElement,\n entry: ResizeObserverEntry | undefined,\n ) => {\n const index = this.indexFromElement(node)\n\n const item = notUndefined(this.measurementsCache[index])\n\n const elementKey =\n node.getAttribute(this.options.elementKeyAttribute) ?? item.key\n\n const prevNode = this.measureElementCache.get(elementKey)\n\n if (!node.isConnected) {\n this.observer.unobserve(node)\n if (node === prevNode) {\n this.measureElementCache.delete(elementKey)\n }\n return\n }\n\n if (prevNode !== node) {\n if (prevNode) {\n this.observer.unobserve(prevNode)\n }\n this.observer.observe(node)\n this.measureElementCache.set(elementKey, node)\n }\n\n const measuredItemSize = this.options.measureElement(node, entry, this)\n\n this.resizeItem(index, measuredItemSize)\n }\n\n resizeItem = (index: number, size: number) => {\n const item = this.measurementsCache[index]\n if (!item) {\n return\n }\n\n const itemSize = this.itemSizeCache.get(item.key) ?? item.size\n\n const delta = size - itemSize\n\n if (delta !== 0) {\n if (item.start < this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && this.options.debug) {\n console.info('correction', delta)\n }\n\n this._scrollToOffset(this.scrollOffset, {\n adjustments: (this.scrollAdjustments += delta),\n behavior: undefined,\n })\n }\n\n this.pendingMeasuredCacheIndexes.push(index)\n\n this.itemSizeCache = new Map(\n this.itemSizeCache.set(item.key, size),\n )\n\n this.notify()\n }\n }\n\n measureElement = (node: TItemElement | null) => {\n if (!node) {\n return\n }\n\n this._measureElement(node, undefined)\n }\n\n getVirtualItems = memo(\n () => [this.getIndexes(), this.getMeasurements()],\n (indexes, measurements) => {\n const virtualItems: VirtualItem[] = []\n\n for (let k = 0, len = indexes.length; k < len; k++) {\n const i = indexes[k]!\n const measurement = measurements[i]!\n\n virtualItems.push(measurement)\n }\n\n return virtualItems\n },\n {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: () => this.options.debug,\n },\n )\n\n getVirtualItemForOffset = (offset: number) => {\n const measurements = this.getMeasurements()\n\n return notUndefined(\n measurements[\n findNearestBinarySearch(\n 0,\n measurements.length - 1,\n (index: number) => notUndefined(measurements[index]).start,\n offset,\n )\n ],\n )\n }\n\n getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => {\n const size = this.getSize()\n\n if (align === 'auto') {\n if (toOffset <= this.scrollOffset) {\n align = 'start'\n } else if (toOffset >= this.scrollOffset + size) {\n align = 'end'\n } else {\n align = 'start'\n }\n }\n\n if (align === 'start') {\n toOffset = toOffset\n } else if (align === 'end') {\n toOffset = toOffset - size\n } else if (align === 'center') {\n toOffset = toOffset - size / 2\n }\n\n const scrollSizeProp = this.options.horizontal\n ? 'scrollWidth'\n : 'scrollHeight'\n const scrollSize = this.scrollElement\n ? 'document' in this.scrollElement\n ? this.scrollElement.document.documentElement[scrollSizeProp]\n : this.scrollElement[scrollSizeProp]\n : 0\n\n const maxOffset = scrollSize - this.getSize()\n\n return Math.max(Math.min(maxOffset, toOffset), 0)\n }\n\n getOffsetForIndex = (index: number, align: ScrollAlignment = 'auto') => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n const measurement = notUndefined(this.getMeasurements()[index])\n\n if (align === 'auto') {\n if (\n measurement.end >=\n this.scrollOffset + this.getSize() - this.options.scrollPaddingEnd\n ) {\n align = 'end'\n } else if (\n measurement.start <=\n this.scrollOffset + this.options.scrollPaddingStart\n ) {\n align = 'start'\n } else {\n return [this.scrollOffset, align] as const\n }\n }\n\n const toOffset =\n align === 'end'\n ? measurement.end + this.options.scrollPaddingEnd\n : measurement.start - this.options.scrollPaddingStart\n\n return [this.getOffsetForAlignment(toOffset, align), align] as const\n }\n\n private isDynamicMode = () => this.measureElementCache.size > 0\n\n private cancelScrollToIndex = () => {\n if (this.scrollToIndexTimeoutId !== null) {\n clearTimeout(this.scrollToIndexTimeoutId)\n this.scrollToIndexTimeoutId = null\n }\n }\n\n scrollToOffset = (\n toOffset: number,\n { align = 'start', behavior }: ScrollToOffsetOptions = {},\n ) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior,\n })\n }\n\n scrollToIndex = (\n index: number,\n { align: initialAlign = 'auto', behavior }: ScrollToIndexOptions = {},\n ) => {\n index = Math.max(0, Math.min(index, this.options.count - 1))\n\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n const [toOffset, align] = this.getOffsetForIndex(index, initialAlign)\n\n this._scrollToOffset(toOffset, { adjustments: undefined, behavior })\n\n if (behavior !== 'smooth' && this.isDynamicMode()) {\n this.scrollToIndexTimeoutId = setTimeout(() => {\n this.scrollToIndexTimeoutId = null\n\n const elementInDOM = this.measureElementCache.has(\n this.options.getItemKey(index),\n )\n\n if (elementInDOM) {\n const [toOffset] = this.getOffsetForIndex(index, align)\n\n if (!approxEqual(toOffset, this.scrollOffset)) {\n this.scrollToIndex(index, { align, behavior })\n }\n } else {\n this.scrollToIndex(index, { align, behavior })\n }\n })\n }\n }\n\n scrollBy = (delta: number, { behavior }: ScrollToOffsetOptions = {}) => {\n this.cancelScrollToIndex()\n\n if (behavior === 'smooth' && this.isDynamicMode()) {\n console.warn(\n 'The `smooth` scroll behavior is not fully supported with dynamic size.',\n )\n }\n\n this._scrollToOffset(this.scrollOffset + delta, {\n adjustments: undefined,\n behavior,\n })\n }\n\n getTotalSize = () =>\n (this.getMeasurements()[this.options.count - 1]?.end ||\n this.options.paddingStart) -\n this.options.scrollMargin +\n this.options.paddingEnd\n\n private _scrollToOffset = (\n offset: number,\n {\n adjustments,\n behavior,\n }: {\n adjustments: number | undefined\n behavior: ScrollBehavior | undefined\n },\n ) => {\n this.options.scrollToFn(offset, { behavior, adjustments }, this)\n }\n\n measure = () => {\n this.itemSizeCache = new Map()\n this.notify()\n }\n}\n\nconst findNearestBinarySearch = (\n low: number,\n high: number,\n getCurrentValue: (i: number) => number,\n value: number,\n) => {\n while (low <= high) {\n const middle = ((low + high) / 2) | 0\n const currentValue = getCurrentValue(middle)\n\n if (currentValue < value) {\n low = middle + 1\n } else if (currentValue > value) {\n high = middle - 1\n } else {\n return middle\n }\n }\n\n if (low > 0) {\n return low - 1\n } else {\n return 0\n }\n}\n\nfunction calculateRange({\n measurements,\n outerSize,\n scrollOffset,\n}: {\n measurements: VirtualItem[]\n outerSize: number\n scrollOffset: number\n}) {\n const count = measurements.length - 1\n const getOffset = (index: number) => measurements[index]!.start\n\n const startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset)\n let endIndex = startIndex\n\n while (\n endIndex < count &&\n measurements[endIndex]!.end < scrollOffset + outerSize\n ) {\n endIndex++\n }\n\n return { startIndex, endIndex }\n}\n"],"names":["memo","getDeps","fn","opts","_opts$initialDeps","result","deps","initialDeps","depTime","key","debug","Date","now","resultTime","newDeps","length","some","dep","index","depEndTime","Math","round","resultEndTime","resultFpsPercentage","pad","str","num","String","console","info","max","min","onChange","notUndefined","value","msg","undefined","Error","approxEqual","a","b","abs","defaultKeyExtractor","defaultRangeExtractor","range","start","startIndex","overscan","end","endIndex","count","arr","i","push","measureElement","element","entry","instance","borderBoxSize","box","options","horizontal","getBoundingClientRect","findNearestBinarySearch","low","high","getCurrentValue","middle","currentValue","_ro","get","_this","this","unsubs","scrollElement","isScrolling","isScrollingTimeoutId","scrollToIndexTimeoutId","measurementsCache","itemSizeCache","Map","pendingMeasuredCacheIndexes","scrollDirection","scrollAdjustments","measureElementCache","observer","ResizeObserver","entries","forEach","_measureElement","target","disconnect","_get","observe","_get2","unobserve","_get3","setOptions","Object","_ref3","_extends","initialOffset","paddingStart","paddingEnd","scrollPaddingStart","scrollPaddingEnd","getItemKey","rangeExtractor","initialRect","width","height","scrollMargin","scrollingDelay","indexAttribute","elementKeyAttribute","initialMeasurementsCache","lanes","notify","cleanup","filter","Boolean","d","_didMount","_willUpdate","getScrollElement","_scrollToOffset","scrollOffset","adjustments","behavior","observeElementRect","rect","prev","scrollRect","maybeNotify","observeElementOffset","offset","clearTimeout","setTimeout","getSize","memoOptions","getFurthestMeasurement","measurements","furthestMeasurementsFound","furthestMeasurements","m","measurement","has","lane","previousFurthestMeasurement","set","size","Array","from","values","sort","getMeasurements","_ref4","slice","furthestMeasurement","measuredSize","estimateSize","process","calculateRange","outerSize","_ref9","getIndexes","indexFromElement","node","attributeName","indexStr","getAttribute","parseInt","warn","_node$getAttribute","item","elementKey","prevNode","isConnected","measuredItemSize","resizeItem","_this$itemSizeCache$g","delta","getVirtualItems","indexes","virtualItems","k","len","getVirtualItemForOffset","getOffsetForAlignment","toOffset","align","scrollSizeProp","maxOffset","document","documentElement","getOffsetForIndex","isDynamicMode","cancelScrollToIndex","scrollToOffset","_temp","_ref5","_ref5$align","scrollToIndex","_temp2","_ref6","_ref6$align","initialAlign","_this$getOffsetForInd","scrollBy","_temp3","getTotalSize","_this$getMeasurements","_ref8","scrollToFn","measure","_instance$scrollEleme3","_instance$scrollEleme4","_ref2$adjustments","_ref2","scrollTo","cb","handler","addEventListener","passive","removeEventListener","inlineSize","blockSize","innerWidth","innerHeight","_instance$scrollEleme","_instance$scrollEleme2","_ref$adjustments","_ref","window","scrollY"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/virtual-core",
|
|
3
3
|
"author": "Tanner Linsley",
|
|
4
|
-
"version": "3.0.0-beta.
|
|
4
|
+
"version": "3.0.0-beta.57",
|
|
5
5
|
"description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://github.com/tanstack/virtual#readme",
|
package/src/index.ts
CHANGED
|
@@ -187,7 +187,7 @@ export const measureElement = <TItemElement extends Element>(
|
|
|
187
187
|
export const windowScroll = <T extends Window>(
|
|
188
188
|
offset: number,
|
|
189
189
|
{
|
|
190
|
-
adjustments =
|
|
190
|
+
adjustments = window.scrollY,
|
|
191
191
|
behavior,
|
|
192
192
|
}: { adjustments?: number; behavior?: ScrollBehavior },
|
|
193
193
|
instance: Virtualizer<T, any>,
|