ratatui_hypertile/lib.rs
1//! BSP tiling layout for [`ratatui`].
2//!
3//! Handles splits, focus, resize, and movement. It only computes rectangles,
4//! you render each pane and handle input.
5//!
6//! See [`ratatui-hypertile-extras`](https://docs.rs/ratatui-hypertile-extras)
7//! for a ready-made runtime with plugins, keymaps, and a palette.
8//!
9//! ```
10//! use ratatui::layout::Direction;
11//! use ratatui_hypertile::{Hypertile, HypertileAction, EventOutcome};
12//!
13//! let mut layout = Hypertile::new();
14//! let pane = layout.split_focused(Direction::Horizontal).unwrap();
15//!
16//! let outcome = layout.apply_action(HypertileAction::FocusNext);
17//! assert_eq!(outcome, EventOutcome::Consumed);
18//! ```
19
20mod core;
21mod engine;
22mod input;
23mod types;
24mod widget;
25
26pub use crate::core::{PaneId, StateError};
27pub use crate::engine::{Hypertile, HypertileBuilder};
28pub use crate::input::{
29 EventOutcome, HypertileAction, HypertileEvent, KeyChord, KeyCode, Modifiers, MoveScope, Towards,
30};
31pub use crate::types::{PaneSnapshot, SplitPolicy};
32pub use crate::widget::HypertileWidget;
33
34/// Low-level tree types and state. Use [`Hypertile`] for most work.
35pub mod raw {
36 pub use crate::core::{HypertileState, Node, PaneId, StateError, collect_pane_ids};
37}
38
39/// Re-exports every public type for convenience.
40pub mod prelude {
41 pub use crate::{
42 EventOutcome, Hypertile, HypertileAction, HypertileBuilder, HypertileEvent,
43 HypertileWidget, KeyChord, KeyCode, Modifiers, MoveScope, PaneId, PaneSnapshot,
44 SplitPolicy, StateError, Towards,
45 };
46}