virtualizer/
lib.rs

1//! A headless virtualization engine inspired by TanStack Virtual.
2//!
3//! For adapter-level utilities (anchoring, tweens), see the `virtualizer-adapter` crate.
4//!
5//! This crate focuses on the core algorithms needed to render massive lists at interactive
6//! frame rates: prefix sums over item sizes, fast offset → index lookup, overscanned visible
7//! ranges, and optional dynamic measurement.
8//!
9//! It is UI-agnostic. A TUI/GUI layer is expected to provide:
10//! - viewport size (height/width)
11//! - scroll offset
12//! - item size estimates and (optionally) dynamic measurements
13//!
14//! # Feature flags
15//!
16//! - `std` (default): Enables `std` support.
17//! - `serde`: Adds `serde::Serialize`/`Deserialize` for the public data types (ranges/items/state).
18//! - `tracing`: Emits internal trace/debug/warn events via `tracing` (requires `std`).
19#![cfg_attr(not(feature = "std"), no_std)]
20#![forbid(unsafe_code)]
21
22extern crate alloc;
23
24#[cfg(test)]
25extern crate std;
26
27#[macro_use]
28mod macros;
29
30mod emitter;
31mod fenwick;
32mod key;
33mod options;
34mod state;
35mod types;
36mod virtualizer;
37
38#[cfg(test)]
39mod tests;
40
41pub use emitter::IndexEmitter;
42pub use options::{
43    InitialOffset, OnChangeCallback, RangeExtractor,
44    ShouldAdjustScrollPositionOnItemSizeChangeCallback, VirtualizerOptions,
45};
46pub use state::{FrameState, ScrollState, ViewportState};
47pub use types::{
48    Align, ItemKey, Range, Rect, ScrollDirection, VirtualItem, VirtualItemKeyed, VirtualRange,
49};
50pub use virtualizer::Virtualizer;
51
52#[doc(hidden)]
53pub use key::KeyCacheKey;