Releases: TanStack/virtual
Release list
@tanstack/marko-virtual@3.14.0
@tanstack/vue-virtual@3.13.31
@tanstack/virtual-core@3.17.3
Patch Changes
-
#1206
767ead4- Cut per-scroll-frame allocations on the defaultlanes === 1path. Range computation previously allocated an options object and two closures on every scroll event; it now does the same work allocation-free, reducing GC pressure during continuous scroll. -
#1212
bc8643b- Don't latch a scroll direction from the read-back of the virtualizer's own adjustment writeapplyScrollAdjustmentfolds the pending adjustment intoscrollOffseteagerly, so the browser's scroll event for that write arrives at exactly the held offset. The scroll-direction computation treated that equality as'backward', which made the defaultshouldAdjustScrollPositionOnItemSizeChangeskip above-viewport re-measure compensation for the rest of theisScrollingResetDelaywindow — so during multi-frame reflows (e.g. a side pane's width animation re-wrapping rows while scrolled up) most frames went uncompensated and the viewport drifted. An event at the held offset carries no direction information, so the direction now stays unchanged in that case; real gestures always move the offset and still latch normally.
@tanstack/svelte-virtual@3.13.31
@tanstack/solid-virtual@3.13.31
@tanstack/react-virtual@3.14.5
@tanstack/lit-virtual@3.13.32
@tanstack/angular-virtual@5.0.7
@tanstack/vue-virtual@3.13.30
@tanstack/virtual-core@3.17.2
Patch Changes
-
#1208
b04f9ee- Skip redundant scroll events at unchanged offset -
#1209
37be284- SyncscrollOffsetinapplyScrollAdjustmentso end-anchored streaming resize isn't lost to browser clampWith
anchorTo: 'end'and a dynamically growing last item (token streaming),resizeItemwrites the scroll adjustment toscrollTopbefore the consumer has grown the sizer, so the browser clamps the write and no scroll event fires.scrollOffsetstayed stale, the next tick'swasAtEndcheck failed, and the viewport drifted away from the end. This fix carries the intended target inscrollOffset(zeroingscrollAdjustments) the same way the prepend path insetOptionsdoes, so the nextgetVirtualDistanceFromEnd()reads the post-adjustment position.