flow_rs_core/
lib.rs

1//! # Flow-RS Core
2//!
3//! Core data structures and algorithms for reactive flow-based node editing.
4//! This crate provides framework-agnostic foundations for building flow editors.
5
6pub mod auto_layout;
7pub mod drag_operations;
8pub mod edge_creator;
9pub mod error;
10pub mod graph;
11pub mod groups;
12pub mod handle;
13pub mod layout;
14pub mod selection;
15pub mod spatial;
16pub mod types;
17
18#[cfg(test)]
19mod proptest;
20
21#[cfg(test)]
22mod performance_tests;
23
24#[cfg(test)]
25mod api_contracts;
26
27#[cfg(test)]
28mod documentation_tests;
29
30#[cfg(test)]
31mod api_reference_tests;
32
33#[cfg(test)]
34mod renaming_validation_tests;
35
36#[cfg(test)]
37mod graph_handle_integration;
38
39#[cfg(test)]
40mod drag_node_integration;
41
42#[cfg(test)]
43mod interactive_edge_creation;
44
45#[cfg(test)]
46mod handle_connection_counting;
47
48#[cfg(test)]
49mod graph_cycle_detection;
50
51// Re-export commonly used types
52pub use auto_layout::{
53    AutoLayoutConfig, AutoLayoutConfigBuilder, AutoLayoutManager, AutoLayoutStrategy,
54};
55pub use drag_operations::DragOperation;
56pub use edge_creator::{ConnectionFeedback, EdgeCreator, PreviewEdge};
57pub use error::{FlowError, Result};
58pub use graph::{Edge, Graph, Node};
59pub use groups::{Group, GroupManager};
60pub use handle::{Handle, HandleId, HandleManager, HandlePosition, HandleType};
61pub use selection::{
62    KeyboardShortcut, NavigationDirection, SelectionManager, SelectionMode, VisualFeedback,
63};
64pub use types::{EdgeId, GroupId, NodeId, Position, Rect, Size, Viewport};
65
66/// Core prelude for convenient imports
67pub mod prelude {
68    pub use crate::error::{FlowError, Result};
69    pub use crate::graph::{Edge, EdgeBuilder, Graph, Node, NodeBuilder};
70    pub use crate::handle::{Handle, HandleId, HandleManager, HandlePosition, HandleType};
71    pub use crate::selection::{
72        KeyboardShortcut, NavigationDirection, SelectionManager, SelectionMode, VisualFeedback,
73    };
74    pub use crate::spatial::SpatialIndex;
75    pub use crate::types::{EdgeId, GroupId, NodeId, Position, Rect, Size, Viewport};
76}