Skip to content

Changelog

  • #1493 d3c437e Thanks @albertcalasanzs! - Fix the transcript blanking for a frame when an older page is prepended.

    The compensation for a prepend was a deviation that grows the content followed, one requestAnimationFrame later, by the scroll that cancels it. In between there is a painted frame in which the list is displaced by the whole page — and because prepends fire near scrollTop 0, that displacement is the entire viewport.

    The scroll now runs as soon as the renderer acknowledges, from a layout effect, that the deviation has reached the DOM: after the mutation, before paint. Both land in the same paint, and because the content has already grown the scroll can no longer be clamped to the old maximum. If nothing acknowledges by the next frame the previous deferred behaviour still applies, so the worst case is unchanged.

  • #1487 d975e6c Thanks @petyosi! - Measure window-scrolling lists before they enter the viewport so their estimated height is included in the document layout.
  • #1458 0d5214a Thanks @wanxiankai! - Handle horizontal list direction changes between LTR and RTL without remounting the list.
  • fca20fa Thanks @petyosi! - Fix explicit undefined initial top-most item index values crashing when empty data updates to an object-form initial index.
  • #1444 0c68e81 Thanks @Luccas-carvalho! - Harden scroll-target and initial-index handling:
    • Clamp the initial top-most item index to the available range, so an out-of-range initialTopMostItemIndex (for example after the data set shrinks) no longer starts the list at a blank or mid-list position.
    • Stop mutating the location object passed to scrollToIndex; normalizeIndexLocation now applies its defaults to a shallow copy.
    • Treat a default-positioned initialTopMostItemIndex of { index: 0 } the same as 0, avoiding a redundant initial scroll and a delayed followOutput.
  • #1399 1fca093 Thanks @petyosi! - Fix horizontal Virtuoso item positioning and scrolling in RTL layouts.
  • #1393 fa9dd31 Thanks @petyosi! - Fix useWindowScroll SSR layout collapse by rendering the window viewport in normal flow while preserving sticky top items.
  • #1388 5871779 Thanks @petyosi! - Fix useSyncExternalStore detection for React 19+

    The version check used startsWith('18') which excluded React 19, causing it to fall back to the legacy useState+useLayoutEffect subscription path. This could cause tearing issues in concurrent rendering scenarios. Changed to parseInt(React.version) >= 18 to correctly use useSyncExternalStore for React 18 and above.

  • #1375 620b260 Thanks @marcospassos! - Fix atBottomStateChange in useWindowScroll lists when the Virtuoso instance is rendered below other page content.
  • 161db63 Thanks @petyosi! - Use changeset publish for proper git tagging and GitHub release creation
  • #1361 7b38166 Thanks @petyosi! - Replace ESLint and Prettier with oxlint and oxfmt for faster linting and formatting. Modernize TypeScript configuration with verbatimModuleSyntax and ES2022 build targets.

    Source code changes are non-behavioral: stricter equality checks (===/!== instead of truthiness), ?? instead of || for defaults, early returns instead of else blocks, self-closing JSX tags, and removal of unnecessary JSX fragments. LogLevel in react-virtuoso is changed from a TypeScript enum to a const object — the named exports (LogLevel.DEBUG, etc.) work identically, but enum reverse-mapping (LogLevel[0]) is no longer supported.

  • 58b9703: Add minOverscanItemCount prop to ensure a minimum number of items are rendered before/after the viewport, useful for tall or collapsible items where pixel-based overscan is insufficient.
  • 497681b: provenance test
  • 7e327d8: Added heightEstimates prop to provide per-item height estimates for more accurate initial scrollbar sizing with variable height items
  • 34646ce: Support fixed size for groups in grouped virtuoso
  • f4f307f: Fix bogus context attribute
  • 0898bc7: Support `scrollIntoViewOnChange prop for Virtoso”
  • 7ee973e: Support table grouping
  • dbe93a0: Follow output works with fixedItemHeight set
  • a04ba00: Fix for prepend items flickering
  • bb0402e: Support window scrolling to iframe react portals
  • b1d4519: Revert node requirements
  • fdbf0c5: Updated to latest tooling
  • fdbf0c5: correct TS types for custom component, context is always passed