Search documentation

Search all pages, headings and text, in the current package or topic or in all documentation.

active-virtual

Layout-stable virtualization - a headless core that decides which items of a long, changing collection belong on screen, with a browser and a React adapter.

@workspace/active-virtual 2.1.0Status unknowncontent differs from the recorded release 2.1.0baseline ce081dc3

@workspace/active-virtual decides which items of a long, mutable collection belong on screen, where they go, and what keeps its place when items are measured, inserted, removed or reordered. You render the items; the package renders nothing. A browser adapter observes the scroll container and carries out the scroll writes, and a React hook binds one axis.

Ten thousand rows of varying heightClient

0 of 10,000 rows in the DOM

What it gives you#

  • Headless, one axis at a time. No components and no styling. A grid is two axes on one scroll container.
  • Identity. Positional (the position is the identity) or keyed (a key stays with its item through every change). Measurements belong to the identity.
  • Estimates now, measurements later. Items are measured through their element, and measured again when they grow or shrink.
  • Anchoring. Every geometry change keeps an anchor in place: an edge, a keyed item or the focused item. Older items loaded above the viewport do not move what is on screen.
  • Scroll requests. To an item, an offset, a delta or an edge; the latest request wins, a request to an item converges as its surroundings are measured, and a user scroll takes over.
  • Platform. Element or window scrolling, right to left on horizontal axes, server rendering with a seeded first window.

What it does not do#

  • It renders nothing and styles nothing: the markup, the positioning and the accessibility of the list are yours.
  • It does not fetch or page data; it virtualizes a collection whose count or keys you give it.
  • Vertical writing modes and nested scroll containers are not proven.

Entry points#

ImportContents
@workspace/active-virtualcreateAxisStore, createScrollHost, findScrollHost, and every type
@workspace/active-virtual/reactuseVirtualAxis, inspectAxis, and the types of the hook

What your application provides#

  • A scroll container with a fixed or bounded size and overflow: auto, and the inner element of projection.extent that gives the content its length.
  • The rendering: one element per projected item, positioned at item.offset, with the itemRef that lets the item be measured.
  • Accessibility: a list of 10,000 rows has 10,000 rows for a screen reader only if you say so (aria-rowcount, aria-setsize and aria-posinset, or a different design); the package keeps focus in place when you enable focusCustody.
  • React 19 for ./react; nothing for the root entry.

Dependencies#

None at run time. react and react-dom are optional peers, needed only for ./react. active-grid uses this package for its row and column virtualization.

Next#

This page as Markdown