dioxus_mosaic/lib.rs
1//! # dioxus-mosaic
2//!
3//! A React-Mosaic-style tiling window manager library for Dioxus applications.
4//!
5//! ## Features
6//!
7//! - **HashMap-based architecture** - O(1) operations for smooth 60 FPS performance
8//! - **Binary splits** - Simple, proven pattern (like VSCode, Sublime)
9//! - **Resizable dividers** - Drag to resize panes
10//! - **Dynamic splitting** - Split any tile horizontally or vertically
11//! - **Panel controls** - Close tiles, collapse/expand
12//! - **LocalStorage persistence** - Layout survives page reloads
13//! - **Clean builder API** - Easy-to-use tree-like configuration
14//!
15//! ## Quick Start
16//!
17//! ```ignore
18//! use dioxus::prelude::*;
19//! use dioxus_mosaic::{Mosaic, MosaicBuilder, tile};
20//!
21//! #[component]
22//! fn App() -> Element {
23//! let mut layout = use_signal(|| {
24//! MosaicBuilder::horizontal()
25//! .left(tile("sidebar"))
26//! .right(tile("editor"))
27//! .split(25.0)
28//! .build()
29//! });
30//!
31//! rsx! {
32//! Mosaic {
33//! layout: layout,
34//! render_tile: move |tile_id| {
35//! match tile_id.as_str() {
36//! "sidebar" => rsx! { div { "Sidebar" } },
37//! "editor" => rsx! { div { "Editor" } },
38//! _ => None
39//! }
40//! },
41//! }
42//! }
43//! }
44//! ```
45
46mod builder;
47mod drag_drop;
48mod layout;
49mod mosaic;
50mod node;
51mod split_pane;
52mod tile_pane;
53mod tree_api;
54mod types;
55
56// Re-export public API
57pub use builder::{tile, MosaicBuilder};
58pub use drag_drop::{DragGhost, DragState, DropZone};
59pub use layout::MosaicLayout;
60pub use mosaic::Mosaic;
61pub use split_pane::SplitPane;
62pub use tile_pane::TilePane;
63pub use tree_api::MosaicNode;
64pub use types::{NodeId, SplitDirection, TileId};