ratatui-spatial-splits 0.1.1

Pure geometry engine for spatial split management in ratatui applications
Documentation
  • Coverage
  • 100%
    29 out of 29 items documented0 out of 0 items with examples
  • Size
  • Source code size: 106.18 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 5.09 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 1m 41s Average build duration of successful builds.
  • all releases: 1m 45s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • jayson-lennon/ratatui-spatial-splits
    0 0 0
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • jayson-lennon

ratatui-spatial-splits

Crates.io License: LGPL-3.0-or-later Repository

Pure geometry engine for spatial split management in ratatui applications.

ratatui-spatial-splits provides a SplitManager that manages a binary tree of horizontal and vertical splits, computing accurate areas for each leaf. It handles spatial navigation (beam/raycasting), tree mutations (split, close, resize), and area caching with automatic invalidation.

Check out the docs for more info.

Usage

Add ratatui-spatial-splits to your Cargo.toml:

[dependencies]
ratatui-spatial-splits = "0.1.0"

Split Management

SplitManager handles a binary tree of splits — adding, removing, resizing, and navigating between areas:

use ratatui_spatial_splits::{SplitManager, AreaId, Direction};
use ratatui::layout::Rect;

let mut mgr = SplitManager::new();

// Set the viewport.
mgr.set_viewport(Rect::new(0, 0, 100, 100));

// Split the initial leaf vertically (left/right).
let result = mgr.split_vertical(AreaId(1)).unwrap();
assert_eq!(result.new, AreaId(2));

// Split the right leaf horizontally (top/bottom).
mgr.split_horizontal(AreaId(2)).unwrap();

// Retrieve computed areas for all leaves.
let areas = mgr.areas();
assert_eq!(areas.len(), 3);

// Navigate between areas using spatial raycasting.
let neighbor = mgr.navigate(AreaId(1), Direction::Right);
assert_eq!(neighbor, Some(AreaId(2)));

// Resize a split.
mgr.resize(AreaId(1), Direction::Right, 10);

// Close an area (sibling replaces parent).
let result = mgr.close(AreaId(3)).unwrap();
assert_eq!(result.surviving, AreaId(2));

License

LGPL-3.0-or-later