@tanstack/virtual-core
Advanced tools
Comparing version 3.0.0-beta.36 to 3.0.0-beta.39
@@ -409,8 +409,7 @@ /** | ||
this.getOffsetForAlignment = function (toOffset, align) { | ||
var offset = _this.scrollOffset; | ||
var size = _this.getSize(); | ||
if (align === 'auto') { | ||
if (toOffset <= offset) { | ||
if (toOffset <= _this.scrollOffset) { | ||
align = 'start'; | ||
} else if (toOffset >= offset + size) { | ||
} else if (toOffset >= _this.scrollOffset + size) { | ||
align = 'end'; | ||
@@ -422,9 +421,12 @@ } else { | ||
if (align === 'start') { | ||
return toOffset; | ||
toOffset = toOffset; | ||
} else if (align === 'end') { | ||
return toOffset - size; | ||
toOffset = toOffset - size; | ||
} else if (align === 'center') { | ||
return toOffset - size / 2; | ||
toOffset = toOffset - size / 2; | ||
} | ||
return toOffset; | ||
var scrollSizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[scrollSizeProp] : _this.scrollElement[scrollSizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.max(Math.min(maxOffset, toOffset), 0); | ||
}; | ||
@@ -482,6 +484,3 @@ this.scrollToOffset = function (toOffset, _temp) { | ||
var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart; | ||
var sizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align)); | ||
return _this.getOffsetForAlignment(toOffset, align); | ||
}; | ||
@@ -488,0 +487,0 @@ var toOffset = getOffsetForIndexAndAlignment(measurement); |
@@ -412,8 +412,7 @@ /** | ||
this.getOffsetForAlignment = function (toOffset, align) { | ||
var offset = _this.scrollOffset; | ||
var size = _this.getSize(); | ||
if (align === 'auto') { | ||
if (toOffset <= offset) { | ||
if (toOffset <= _this.scrollOffset) { | ||
align = 'start'; | ||
} else if (toOffset >= offset + size) { | ||
} else if (toOffset >= _this.scrollOffset + size) { | ||
align = 'end'; | ||
@@ -425,9 +424,12 @@ } else { | ||
if (align === 'start') { | ||
return toOffset; | ||
toOffset = toOffset; | ||
} else if (align === 'end') { | ||
return toOffset - size; | ||
toOffset = toOffset - size; | ||
} else if (align === 'center') { | ||
return toOffset - size / 2; | ||
toOffset = toOffset - size / 2; | ||
} | ||
return toOffset; | ||
var scrollSizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[scrollSizeProp] : _this.scrollElement[scrollSizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.max(Math.min(maxOffset, toOffset), 0); | ||
}; | ||
@@ -485,6 +487,3 @@ this.scrollToOffset = function (toOffset, _temp) { | ||
var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart; | ||
var sizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align)); | ||
return _this.getOffsetForAlignment(toOffset, align); | ||
}; | ||
@@ -491,0 +490,0 @@ var toOffset = getOffsetForIndexAndAlignment(measurement); |
@@ -461,8 +461,7 @@ /** | ||
this.getOffsetForAlignment = function (toOffset, align) { | ||
var offset = _this.scrollOffset; | ||
var size = _this.getSize(); | ||
if (align === 'auto') { | ||
if (toOffset <= offset) { | ||
if (toOffset <= _this.scrollOffset) { | ||
align = 'start'; | ||
} else if (toOffset >= offset + size) { | ||
} else if (toOffset >= _this.scrollOffset + size) { | ||
align = 'end'; | ||
@@ -474,9 +473,12 @@ } else { | ||
if (align === 'start') { | ||
return toOffset; | ||
toOffset = toOffset; | ||
} else if (align === 'end') { | ||
return toOffset - size; | ||
toOffset = toOffset - size; | ||
} else if (align === 'center') { | ||
return toOffset - size / 2; | ||
toOffset = toOffset - size / 2; | ||
} | ||
return toOffset; | ||
var scrollSizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[scrollSizeProp] : _this.scrollElement[scrollSizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.max(Math.min(maxOffset, toOffset), 0); | ||
}; | ||
@@ -534,6 +536,3 @@ this.scrollToOffset = function (toOffset, _temp) { | ||
var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart; | ||
var sizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight'; | ||
var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[sizeProp] : _this.scrollElement[sizeProp] : 0; | ||
var maxOffset = scrollSize - _this.getSize(); | ||
return Math.min(maxOffset, _this.getOffsetForAlignment(toOffset, align)); | ||
return _this.getOffsetForAlignment(toOffset, align); | ||
}; | ||
@@ -540,0 +539,0 @@ var toOffset = getOffsetForIndexAndAlignment(measurement); |
@@ -11,3 +11,3 @@ /** | ||
*/ | ||
!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,r=[];return function(){var i;n.key&&null!=n.debug&&n.debug()&&(i=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return o;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),o=t.apply(void 0,l),null==n||null==n.onChange||n.onChange(o),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-i))/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 o}}var o=function(e){return e},r=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=t;r<=n;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},s=function(e){return function(t,n){if(t.scrollElement){var o=i[e][0],r=i[e][1],s=t.scrollElement[o],l=t.scrollElement[r],a=function(){var e=t.scrollElement[t.options.horizontal?o:r];n(e)};a();var u=function(e){var n=e.currentTarget,i=n[o],u=n[r];(t.options.horizontal?s-i:l-u)&&a(),s=i,l=u};return t.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){t.scrollElement.removeEventListener("scroll",u)}}}},l=s("element"),a=s("window"),u=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,s=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){s._measureElement(e.target,!1)}))})):null)}),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]})),s.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:r,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==s.options.onChange||s.options.onChange(s)},this.cleanup=function(){s.unsubs.filter(Boolean).forEach((function(e){return e()})),s.unsubs=[],s.scrollElement=null},this._didMount=function(){var e=s.getResizeObserver();return Object.values(s.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),s.cleanup()}},this._willUpdate=function(){var e=s.options.getScrollElement();s.scrollElement!==e?(s.cleanup(),s.scrollElement=e,s._scrollToOffset(s.scrollOffset,{adjustments:void 0,behavior:void 0}),s.unsubs.push(s.options.observeElementRect(s,(function(e){s.scrollRect=e,s.calculateRange()}))),s.unsubs.push(s.options.observeElementOffset(s,(function(e){if(s.scrollAdjustments=0,s.scrollOffset!==e){null!==s.isScrollingTimeoutId&&(clearTimeout(s.isScrollingTimeoutId),s.isScrollingTimeoutId=null);var t=function(e){s.isScrolling!==e&&(s.isScrolling=e,s.notify())};s.scrollDirection=s.scrollOffset<e?"forward":"backward",s.scrollOffset=e,s.calculateRange(),t(!0),s.isScrollingTimeoutId=setTimeout((function(){s.isScrollingTimeoutId=null,s.scrollDirection=null,t(!1)}),s.options.scrollingDelay)}})))):s.isScrolling||s.calculateRange()},this.getSize=function(){return s.scrollRect[s.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[s.options.count,s.options.paddingStart,s.options.scrollMargin,s.options.getItemKey,s.itemSizeCache]}),(function(e,t,n,o,r){var i=s.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,s.pendingMeasuredCacheIndexes):0;s.pendingMeasuredCacheIndexes=[];for(var l=s.measurementsCache.slice(0,i),a=i;a<e;a++){var u=o(a),c=r[u],d=l[a-1]?l[a-1].end:t+n,f="number"==typeof c?c:s.options.estimateSize(a),h=d+f;l[a]={index:a,start:d,size:f,end:h,key:u}}return s.measurementsCache=l,l}),{key:!1,debug:function(){return s.options.debug}}),this.calculateRange=n((function(){return[s.getMeasurements(),s.getSize(),s.scrollOffset]}),(function(e,t,n){var o=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,r=t.length-1,i=function(e,t,n,o){for(;e<=t;){var r=(e+t)/2|0,i=n(r);if(i<o)e=r+1;else{if(!(i>o))return r;t=r-1}}return e>0?e-1:0}(0,r,(function(e){return t[e].start}),o),s=i;for(;s<r&&t[s].end<o+n;)s++;return{startIndex:i,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n});return o.startIndex===s.range.startIndex&&o.endIndex===s.range.endIndex||(s.range=o,s.notify()),s.range}),{key:!1,debug:function(){return s.options.debug}}),this.getIndexes=n((function(){return[s.options.rangeExtractor,s.range,s.options.overscan,s.options.count]}),(function(e,n,o,r){return e(t({},n,{overscan:o,count:r}))}),{key:!1,debug:function(){return s.options.debug}}),this.indexFromElement=function(e){var t=s.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,n){var o,r=s.indexFromElement(e),i=s.measurementsCache[r];if(i){var l=s.measureElementCache[i.key],a=s.getResizeObserver();if(e.isConnected){l&&l===e||(l&&(null==a||a.unobserve(l)),s.measureElementCache[i.key]=e,null==a||a.observe(e));var u,c=s.options.measureElement(e,s),d=c-(null!=(o=s.itemSizeCache[i.key])?o:i.size);if(0!==d)i.start<s.scrollOffset&&s._scrollToOffset(s.scrollOffset,{adjustments:s.scrollAdjustments+=d,behavior:void 0}),s.pendingMeasuredCacheIndexes.push(r),s.itemSizeCache=t({},s.itemSizeCache,((u={})[i.key]=c,u)),s.notify()}else l&&(null==a||a.unobserve(l),delete s.measureElementCache[i.key])}},this.measureElement=function(e){e&&s._measureElement(e,!0)},this.getVirtualItems=n((function(){return[s.getIndexes(),s.getMeasurements()]}),(function(e,t){for(var n=[],o=0,r=e.length;o<r;o++){var i=t[e[o]];n.push(i)}return n}),{key:!1,debug:function(){return s.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=s.scrollOffset,o=s.getSize();return"auto"===t&&(t=e<=n?"start":e>=n+o?"end":"start"),"start"===t?e:"end"===t?e-o:"center"===t?e-o/2:e},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"start":o,i=n.behavior;if(Object.keys(s.measureElementCache).length>0&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var l={adjustments:void 0,behavior:i,sync:!1};s._scrollToOffset(s.getOffsetForAlignment(e,r),l)}},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,i=n.behavior;null!==s.scrollToIndexTimeoutId&&(clearTimeout(s.scrollToIndexTimeoutId),s.scrollToIndexTimeoutId=null);var l=Object.keys(s.measureElementCache).length>0;if(l&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var a=function(){var t=s.getMeasurements()[Math.max(0,Math.min(e,s.options.count-1))];if(!t)throw new Error("VirtualItem not found for index = "+e);return t},u=a();if("auto"===r)if(u.end>=s.scrollOffset+s.getSize()-s.options.scrollPaddingEnd)r="end";else{if(!(u.start<=s.scrollOffset+s.options.scrollPaddingStart))return;r="start"}var c=function(e){var t="end"===r?e.end+s.options.scrollPaddingEnd:e.start-s.options.scrollPaddingStart,n=s.options.horizontal?"scrollWidth":"scrollHeight",o=(s.scrollElement?"document"in s.scrollElement?s.scrollElement.document.documentElement[n]:s.scrollElement[n]:0)-s.getSize();return Math.min(o,s.getOffsetForAlignment(t,r))},d=c(u),f={adjustments:void 0,behavior:i};s._scrollToOffset(d,f);l&&(s.scrollToIndexTimeoutId=setTimeout((function(){var t,n;if(s.scrollToIndexTimeoutId=null,!!s.measureElementCache[s.options.getItemKey(e)]){var o=c(a());t=o,n=s.scrollOffset,Math.abs(t-n)<1||s.scrollToIndex(e,{align:r,behavior:i})}else s.scrollToIndex(e,{align:r,behavior:i})})))}},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;Object.keys(s.measureElementCache).length>0&&"smooth"===n?console.warn("The `smooth` scroll behavior is not supported with dynamic size."):s._scrollToOffset(s.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=s.getMeasurements()[s.options.count-1])?void 0:e.end)||s.options.paddingStart)-s.options.scrollMargin+s.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;s.options.scrollToFn(e,{behavior:o,adjustments:n},s)},this.measure=function(){s.itemSizeCache={},s.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){s.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},e.measureElement=u,e.memo=n,e.observeElementOffset=l,e.observeElementRect=function(e,t){var n=new ResizeObserver((function(e){var n=e[0];if(n){var o=n.contentRect,r=o.width,i=o.height;t({width:Math.round(r),height:Math.round(i)})}else t({width:0,height:0})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),n.observe(e.scrollElement),function(){n.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,t){var n=function(e,t){var n={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==n.width:o.height!==n.height)&&t(o),n=o}}(e,t),o=function(){return n({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},Object.defineProperty(e,"__esModule",{value:!0})})); | ||
!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,r=[];return function(){var i;n.key&&null!=n.debug&&n.debug()&&(i=Date.now());var s,l=e();if(!(l.length!==r.length||l.some((function(e,t){return r[t]!==e}))))return o;if(r=l,n.key&&null!=n.debug&&n.debug()&&(s=Date.now()),o=t.apply(void 0,l),null==n||null==n.onChange||n.onChange(o),n.key&&null!=n.debug&&n.debug()){var a=Math.round(100*(Date.now()-i))/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 o}}var o=function(e){return e},r=function(e){for(var t=Math.max(e.startIndex-e.overscan,0),n=Math.min(e.endIndex+e.overscan,e.count-1),o=[],r=t;r<=n;r++)o.push(r);return o},i={element:["scrollLeft","scrollTop"],window:["scrollX","scrollY"]},s=function(e){return function(t,n){if(t.scrollElement){var o=i[e][0],r=i[e][1],s=t.scrollElement[o],l=t.scrollElement[r],a=function(){var e=t.scrollElement[t.options.horizontal?o:r];n(e)};a();var u=function(e){var n=e.currentTarget,i=n[o],u=n[r];(t.options.horizontal?s-i:l-u)&&a(),s=i,l=u};return t.scrollElement.addEventListener("scroll",u,{capture:!1,passive:!0}),function(){t.scrollElement.removeEventListener("scroll",u)}}}},l=s("element"),a=s("window"),u=function(e,t){return Math.round(e.getBoundingClientRect()[t.options.horizontal?"width":"height"])};e.Virtualizer=function(e){var i,s=this;this.unsubs=[],this.scrollElement=null,this.isScrolling=!1,this.isScrollingTimeoutId=null,this.scrollToIndexTimeoutId=null,this.measurementsCache=[],this.itemSizeCache={},this.pendingMeasuredCacheIndexes=[],this.scrollDirection=null,this.scrollAdjustments=0,this.measureElementCache={},this.getResizeObserver=(i=null,function(){return i||("undefined"!=typeof ResizeObserver?i=new ResizeObserver((function(e){e.forEach((function(e){s._measureElement(e.target,!1)}))})):null)}),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]})),s.options=t({debug:!1,initialOffset:0,overscan:1,paddingStart:0,paddingEnd:0,scrollPaddingStart:0,scrollPaddingEnd:0,horizontal:!1,getItemKey:o,rangeExtractor:r,onChange:function(){},measureElement:u,initialRect:{width:0,height:0},scrollMargin:0,scrollingDelay:150,indexAttribute:"data-index",initialMeasurementsCache:[]},e)},this.notify=function(){null==s.options.onChange||s.options.onChange(s)},this.cleanup=function(){s.unsubs.filter(Boolean).forEach((function(e){return e()})),s.unsubs=[],s.scrollElement=null},this._didMount=function(){var e=s.getResizeObserver();return Object.values(s.measureElementCache).forEach((function(t){return null==e?void 0:e.observe(t)})),function(){null==e||e.disconnect(),s.cleanup()}},this._willUpdate=function(){var e=s.options.getScrollElement();s.scrollElement!==e?(s.cleanup(),s.scrollElement=e,s._scrollToOffset(s.scrollOffset,{adjustments:void 0,behavior:void 0}),s.unsubs.push(s.options.observeElementRect(s,(function(e){s.scrollRect=e,s.calculateRange()}))),s.unsubs.push(s.options.observeElementOffset(s,(function(e){if(s.scrollAdjustments=0,s.scrollOffset!==e){null!==s.isScrollingTimeoutId&&(clearTimeout(s.isScrollingTimeoutId),s.isScrollingTimeoutId=null);var t=function(e){s.isScrolling!==e&&(s.isScrolling=e,s.notify())};s.scrollDirection=s.scrollOffset<e?"forward":"backward",s.scrollOffset=e,s.calculateRange(),t(!0),s.isScrollingTimeoutId=setTimeout((function(){s.isScrollingTimeoutId=null,s.scrollDirection=null,t(!1)}),s.options.scrollingDelay)}})))):s.isScrolling||s.calculateRange()},this.getSize=function(){return s.scrollRect[s.options.horizontal?"width":"height"]},this.getMeasurements=n((function(){return[s.options.count,s.options.paddingStart,s.options.scrollMargin,s.options.getItemKey,s.itemSizeCache]}),(function(e,t,n,o,r){var i=s.pendingMeasuredCacheIndexes.length>0?Math.min.apply(Math,s.pendingMeasuredCacheIndexes):0;s.pendingMeasuredCacheIndexes=[];for(var l=s.measurementsCache.slice(0,i),a=i;a<e;a++){var u=o(a),c=r[u],d=l[a-1]?l[a-1].end:t+n,f="number"==typeof c?c:s.options.estimateSize(a),h=d+f;l[a]={index:a,start:d,size:f,end:h,key:u}}return s.measurementsCache=l,l}),{key:!1,debug:function(){return s.options.debug}}),this.calculateRange=n((function(){return[s.getMeasurements(),s.getSize(),s.scrollOffset]}),(function(e,t,n){var o=function(e){var t=e.measurements,n=e.outerSize,o=e.scrollOffset,r=t.length-1,i=function(e,t,n,o){for(;e<=t;){var r=(e+t)/2|0,i=n(r);if(i<o)e=r+1;else{if(!(i>o))return r;t=r-1}}return e>0?e-1:0}(0,r,(function(e){return t[e].start}),o),s=i;for(;s<r&&t[s].end<o+n;)s++;return{startIndex:i,endIndex:s}}({measurements:e,outerSize:t,scrollOffset:n});return o.startIndex===s.range.startIndex&&o.endIndex===s.range.endIndex||(s.range=o,s.notify()),s.range}),{key:!1,debug:function(){return s.options.debug}}),this.getIndexes=n((function(){return[s.options.rangeExtractor,s.range,s.options.overscan,s.options.count]}),(function(e,n,o,r){return e(t({},n,{overscan:o,count:r}))}),{key:!1,debug:function(){return s.options.debug}}),this.indexFromElement=function(e){var t=s.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,n){var o,r=s.indexFromElement(e),i=s.measurementsCache[r];if(i){var l=s.measureElementCache[i.key],a=s.getResizeObserver();if(e.isConnected){l&&l===e||(l&&(null==a||a.unobserve(l)),s.measureElementCache[i.key]=e,null==a||a.observe(e));var u,c=s.options.measureElement(e,s),d=c-(null!=(o=s.itemSizeCache[i.key])?o:i.size);if(0!==d)i.start<s.scrollOffset&&s._scrollToOffset(s.scrollOffset,{adjustments:s.scrollAdjustments+=d,behavior:void 0}),s.pendingMeasuredCacheIndexes.push(r),s.itemSizeCache=t({},s.itemSizeCache,((u={})[i.key]=c,u)),s.notify()}else l&&(null==a||a.unobserve(l),delete s.measureElementCache[i.key])}},this.measureElement=function(e){e&&s._measureElement(e,!0)},this.getVirtualItems=n((function(){return[s.getIndexes(),s.getMeasurements()]}),(function(e,t){for(var n=[],o=0,r=e.length;o<r;o++){var i=t[e[o]];n.push(i)}return n}),{key:!1,debug:function(){return s.options.debug}}),this.getOffsetForAlignment=function(e,t){var n=s.getSize();"auto"===t&&(t=e<=s.scrollOffset?"start":e>=s.scrollOffset+n?"end":"start"),"start"===t||("end"===t?e-=n:"center"===t&&(e-=n/2));var o=s.options.horizontal?"scrollWidth":"scrollHeight",r=(s.scrollElement?"document"in s.scrollElement?s.scrollElement.document.documentElement[o]:s.scrollElement[o]:0)-s.getSize();return Math.max(Math.min(r,e),0)},this.scrollToOffset=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"start":o,i=n.behavior;if(Object.keys(s.measureElementCache).length>0&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var l={adjustments:void 0,behavior:i,sync:!1};s._scrollToOffset(s.getOffsetForAlignment(e,r),l)}},this.scrollToIndex=function(e,t){var n=void 0===t?{}:t,o=n.align,r=void 0===o?"auto":o,i=n.behavior;null!==s.scrollToIndexTimeoutId&&(clearTimeout(s.scrollToIndexTimeoutId),s.scrollToIndexTimeoutId=null);var l=Object.keys(s.measureElementCache).length>0;if(l&&"smooth"===i)console.warn("The `smooth` scroll behavior is not supported with dynamic size.");else{var a=function(){var t=s.getMeasurements()[Math.max(0,Math.min(e,s.options.count-1))];if(!t)throw new Error("VirtualItem not found for index = "+e);return t},u=a();if("auto"===r)if(u.end>=s.scrollOffset+s.getSize()-s.options.scrollPaddingEnd)r="end";else{if(!(u.start<=s.scrollOffset+s.options.scrollPaddingStart))return;r="start"}var c=function(e){var t="end"===r?e.end+s.options.scrollPaddingEnd:e.start-s.options.scrollPaddingStart;return s.getOffsetForAlignment(t,r)},d=c(u),f={adjustments:void 0,behavior:i};s._scrollToOffset(d,f);l&&(s.scrollToIndexTimeoutId=setTimeout((function(){var t,n;if(s.scrollToIndexTimeoutId=null,!!s.measureElementCache[s.options.getItemKey(e)]){var o=c(a());t=o,n=s.scrollOffset,Math.abs(t-n)<1||s.scrollToIndex(e,{align:r,behavior:i})}else s.scrollToIndex(e,{align:r,behavior:i})})))}},this.scrollBy=function(e,t){var n=(void 0===t?{}:t).behavior;Object.keys(s.measureElementCache).length>0&&"smooth"===n?console.warn("The `smooth` scroll behavior is not supported with dynamic size."):s._scrollToOffset(s.scrollOffset+e,{adjustments:void 0,behavior:n})},this.getTotalSize=function(){var e;return((null==(e=s.getMeasurements()[s.options.count-1])?void 0:e.end)||s.options.paddingStart)-s.options.scrollMargin+s.options.paddingEnd},this._scrollToOffset=function(e,t){var n=t.adjustments,o=t.behavior;s.options.scrollToFn(e,{behavior:o,adjustments:n},s)},this.measure=function(){s.itemSizeCache={},s.notify()},this.setOptions(e),this.scrollRect=this.options.initialRect,this.scrollOffset=this.options.initialOffset,this.measurementsCache=this.options.initialMeasurementsCache,this.measurementsCache.forEach((function(e){s.itemSizeCache[e.key]=e.size})),this.calculateRange()},e.defaultKeyExtractor=o,e.defaultRangeExtractor=r,e.elementScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},e.measureElement=u,e.memo=n,e.observeElementOffset=l,e.observeElementRect=function(e,t){var n=new ResizeObserver((function(e){var n=e[0];if(n){var o=n.contentRect,r=o.width,i=o.height;t({width:Math.round(r),height:Math.round(i)})}else t({width:0,height:0})}));if(e.scrollElement)return t(e.scrollElement.getBoundingClientRect()),n.observe(e.scrollElement),function(){n.unobserve(e.scrollElement)}},e.observeWindowOffset=a,e.observeWindowRect=function(e,t){var n=function(e,t){var n={height:-1,width:-1};return function(o){(e.options.horizontal?o.width!==n.width:o.height!==n.height)&&t(o),n=o}}(e,t),o=function(){return n({width:e.scrollElement.innerWidth,height:e.scrollElement.innerHeight})};if(e.scrollElement)return o(),e.scrollElement.addEventListener("resize",o,{capture:!1,passive:!0}),function(){e.scrollElement.removeEventListener("resize",o)}},e.windowScroll=function(e,t,n){var o,r,i=t.adjustments,s=void 0===i?0:i,l=t.behavior,a=e+s;null==(o=n.scrollElement)||null==o.scrollTo||o.scrollTo(((r={})[n.options.horizontal?"left":"top"]=a,r.behavior=l,r))},Object.defineProperty(e,"__esModule",{value:!0})})); | ||
//# sourceMappingURL=index.production.js.map |
{ | ||
"name": "@tanstack/virtual-core", | ||
"author": "Tanner Linsley", | ||
"version": "3.0.0-beta.36", | ||
"version": "3.0.0-beta.39", | ||
"description": "Headless UI for virtualizing scrollable elements in TS/JS + Frameworks", | ||
@@ -6,0 +6,0 @@ "license": "MIT", |
@@ -522,3 +522,3 @@ import { memo } from './utils' | ||
overscan, | ||
count: count, | ||
count, | ||
}) | ||
@@ -630,9 +630,8 @@ }, | ||
getOffsetForAlignment = (toOffset: number, align: ScrollAlignment) => { | ||
const offset = this.scrollOffset | ||
const size = this.getSize() | ||
if (align === 'auto') { | ||
if (toOffset <= offset) { | ||
if (toOffset <= this.scrollOffset) { | ||
align = 'start' | ||
} else if (toOffset >= offset + size) { | ||
} else if (toOffset >= this.scrollOffset + size) { | ||
align = 'end' | ||
@@ -645,9 +644,21 @@ } else { | ||
if (align === 'start') { | ||
return toOffset | ||
toOffset = toOffset | ||
} else if (align === 'end') { | ||
return toOffset - size | ||
toOffset = toOffset - size | ||
} else if (align === 'center') { | ||
return toOffset - size / 2 | ||
toOffset = toOffset - size / 2 | ||
} | ||
return toOffset | ||
const scrollSizeProp = this.options.horizontal | ||
? 'scrollWidth' | ||
: 'scrollHeight' | ||
const scrollSize = this.scrollElement | ||
? 'document' in this.scrollElement | ||
? this.scrollElement.document.documentElement[scrollSizeProp] | ||
: this.scrollElement[scrollSizeProp] | ||
: 0 | ||
const maxOffset = scrollSize - this.getSize() | ||
return Math.max(Math.min(maxOffset, toOffset), 0) | ||
} | ||
@@ -730,12 +741,3 @@ | ||
const sizeProp = this.options.horizontal ? 'scrollWidth' : 'scrollHeight' | ||
const scrollSize = this.scrollElement | ||
? 'document' in this.scrollElement | ||
? this.scrollElement.document.documentElement[sizeProp] | ||
: this.scrollElement[sizeProp] | ||
: 0 | ||
const maxOffset = scrollSize - this.getSize() | ||
return Math.min(maxOffset, this.getOffsetForAlignment(toOffset, align)) | ||
return this.getOffsetForAlignment(toOffset, align) | ||
} | ||
@@ -742,0 +744,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
383560
3591