1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//! UI modules for ISSUN
//!
//! # Structure
//!
//! - `core`: Abstract widget trait definitions (backend-independent)
//! - `ratatui`: Ratatui backend implementations for widgets (including Tui)
//! - `input`: Input polling utilities for game loops
//! - `title_screen`: Auto-generated title screen system
//! - `layer`: UI layout abstraction for composable layouts
//! - `theme`: Theme system for consistent styling
//! - `resource_guard`: Safe resource access wrapper
//! - `macros`: Rendering macros for simplified component composition
//!
//! # Usage
//!
//! ```ignore
//! use issun::ui::Tui;
//! use issun::ui::ratatui::*;
//! use issun::ui::core::{Component, Widget};
//! use issun::ui::layer::UILayoutPresets;
//! use issun::{drive, drive_to};
//!
//! let mut tui = Tui::new()?;
//!
//! // Use components with drive! macro for easy rendering
//! fn render_game(frame: &mut Frame, resources: &ResourceContext, selected: usize) {
//! let header = HeaderComponent::<GameContext>::new();
//! let districts = DistrictsComponent::<CityMap>::new();
//! let log = LogComponent::<GameLog>::new();
//!
//! drive! {
//! frame: frame,
//! layout: RatatuiLayer::three_panel().apply(frame.area()),
//! [
//! header.render(resources),
//! districts.render_with_selection(resources, selected),
//! log.render_multi(resources),
//! ]
//! }
//! }
//! ```
// Re-exports for convenience
pub use ;
pub use ;
pub use Tui;
pub use ;
pub use ;
pub use ;