Skip to content

VirtualView

Deprecated: Use ListView instead. VirtualView is now a thin wrapper.

App-managed scrolling within a Screen rectangle. A scrollable area where items mount/unmount based on scroll position, managed entirely by the app.

Unlike ScrollbackView (which uses native terminal scrollback), VirtualView keeps everything in the React tree.

Import

tsx
import { VirtualView } from "silvery"

Props

PropTypeDefaultDescription
itemsT[]requiredArray of items to render
heightnumberrequiredHeight of the viewport in rows
renderItem(item: T, index: number) => ReactNoderequiredRender function for each item
estimateHeightnumber | ((index: number) => number)1Estimated height of each item
scrollTonumber--Index to scroll to (declarative)
overscannumber5Extra items to render beyond viewport
maxRenderednumber100Maximum items to render at once
scrollPaddingnumber2Padding from edge before scrolling
overflowIndicatorbooleanfalseShow overflow indicators
keyExtractor(item: T, index: number) => string | numberindexKey extractor
widthnumber--Viewport width
gapnumber0Gap between items in rows
renderSeparator() => ReactNode--Render separator between items

Ref: VirtualViewHandle

ts
interface VirtualViewHandle {
  scrollToItem(index: number): void
}

Usage

tsx
<Screen>
  <Header />
  <VirtualView
    items={logs}
    height={20}
    renderItem={(item, index) => <LogEntry key={item.id} data={item} />}
    estimateHeight={() => 3}
  />
  <StatusBar />
</Screen>

See Also

Released under the MIT License.