Skip to content

HorizontalVirtualList

React-level virtualization for horizontal lists. Only renders items within the visible viewport plus overscan. Items outside the viewport are not rendered -- scrolling changes which items are in the render window.

Import

tsx
import { HorizontalVirtualList } from "silvery"

Props

PropTypeDefaultDescription
itemsT[]requiredArray of items to render
widthnumberrequiredWidth of the list viewport in columns
itemWidthnumber | ((item: T, index: number) => number)requiredWidth of each item
renderItem(item: T, index: number) => ReactNoderequiredRender function for each item
scrollTonumber--Index to keep visible
overscannumber1Extra items to render left/right of viewport
maxRenderednumber20Maximum items to render at once
overflowIndicatorboolean--Show built-in overflow indicators
renderOverflowIndicator(direction: "before" | "after", hiddenCount: number) => ReactNode--Custom overflow indicator renderer
overflowIndicatorWidthnumber0Width in chars of each overflow indicator
keyExtractor(item: T, index: number) => string | numberindexKey extractor
heightnumber--Height of the list
gapnumber0Gap between items in columns
renderSeparator() => ReactNode--Render separator between items

Ref: HorizontalVirtualListHandle

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

Usage

tsx
<HorizontalVirtualList
  items={columns}
  width={80}
  itemWidth={20}
  scrollTo={selectedIndex}
  renderItem={(column, index) => <Column key={column.id} column={column} isSelected={index === selected} />}
/>

See Also

Released under the MIT License.