use rnk::prelude::*;
fn main() {
println!("\n=== Render API Demo ===\n");
println!("1. Simple text:");
let text = Text::new("Hello, world!").color(Color::Cyan).into_element();
let output = rnk::render_to_string_auto(&text);
println!("{}", output);
println!();
println!("2. Box with border:");
let boxed = Box::new()
.border_style(BorderStyle::Round)
.border_color(Color::Green)
.padding(1)
.child(Text::new("Boxed content").into_element())
.into_element();
let output = rnk::render_to_string_auto(&boxed);
println!("{}", output);
println!();
println!("3. Multiple elements (notice no extra spaces):");
let elements = vec![
Text::new("Short").color(Color::Yellow).into_element(),
Text::new("Medium length text")
.color(Color::Magenta)
.into_element(),
Text::new("This is a much longer piece of text")
.color(Color::Cyan)
.into_element(),
];
for element in elements {
let output = rnk::render_to_string_auto(&element);
println!("{}", output);
}
println!();
println!("4. Render with specific width (40 chars):");
let long_text = Text::new(
"This is a very long text that will be wrapped to fit within the specified width",
)
.color(Color::Blue)
.into_element();
let output = rnk::render_to_string(&long_text, 40);
println!("{}", output);
println!();
println!("5. Complex nested structure:");
let complex = Box::new()
.border_style(BorderStyle::Double)
.border_color(Color::Magenta)
.padding(1)
.flex_direction(FlexDirection::Column)
.child(
Text::new("Title")
.color(Color::Yellow)
.bold()
.into_element(),
)
.child(
Box::new()
.margin_top(1.0)
.child(Text::new("Content line 1").into_element())
.into_element(),
)
.child(Text::new("Content line 2").into_element())
.into_element();
let output = rnk::render_to_string_auto(&complex);
println!("{}", output);
println!();
println!("6. Using rnk::println (inline mode):");
rnk::println(
Message::user("This is printed via rnk::println with proper alignment!").into_element(),
);
rnk::println(Message::assistant("The alignment issue is now fixed!").into_element());
println!();
println!("7. Comparison: trimmed vs no-trim:");
let test_element = Text::new("Test").color(Color::Green).into_element();
println!("With trim (default):");
let trimmed = rnk::render_to_string(&test_element, 80);
println!("|{}|", trimmed);
println!("Without trim:");
let no_trim = rnk::render_to_string_no_trim(&test_element, 80);
println!("|{}|", no_trim);
println!();
println!("=== Demo Complete ===");
}