use gilt::breadcrumbs::Breadcrumbs;
use gilt::console::Console;
use gilt::rule::Rule;
use gilt::style::Style;
fn main() {
let mut console = Console::builder()
.width(80)
.force_terminal(true)
.no_color(false)
.build();
console.print(&Rule::with_title("Default Separator ( > )"));
let default_crumbs = Breadcrumbs::new(vec!["Home".into(), "Settings".into(), "Profile".into()]);
console.print(&default_crumbs);
console.print_text("");
console.print(&Rule::with_title("Slash Separator (File Paths)"));
let file_path = Breadcrumbs::slash(vec![
"home".into(),
"user".into(),
"projects".into(),
"myapp".into(),
"src".into(),
"main.rs".into(),
]);
console.print(&file_path);
console.print_text("");
console.print(&Rule::with_title("Arrow Separator (Workflow Steps)"));
let workflow = Breadcrumbs::arrow(vec![
"Input".into(),
"Process".into(),
"Validate".into(),
"Output".into(),
]);
console.print(&workflow);
console.print_text("");
console.print(&Rule::with_title("Chevron Separator"));
let chevron_crumbs = Breadcrumbs::chevron(vec![
"Store".into(),
"Electronics".into(),
"Laptops".into(),
"Gaming".into(),
]);
console.print(&chevron_crumbs);
console.print_text("");
console.print(&Rule::with_title("From Path String"));
let from_path = Breadcrumbs::from_path("api/v1/users/123/posts");
console.print(&from_path);
console.print_text("");
console.print(&Rule::with_title("With Active Item Styling"));
let styled_active = Breadcrumbs::new(vec![
"Dashboard".into(),
"Users".into(),
"User Details".into(),
])
.style(Style::parse("dim").unwrap())
.separator_style(Style::parse("dim").unwrap())
.active_style(Style::parse("bold green").unwrap());
console.print(&styled_active);
console.print_text("");
console.print(&Rule::with_title("Custom Separator"));
let custom_sep =
Breadcrumbs::new(vec!["First".into(), "Second".into(), "Third".into()]).separator(" | ");
console.print(&custom_sep);
console.print_text("");
console.print(&Rule::with_title("Navigation Flows"));
let ecommerce = Breadcrumbs::new(vec![
"Home".into(),
"Category".into(),
"Subcategory".into(),
"Product".into(),
]);
console.print(&ecommerce);
console.print_text("");
let docs = Breadcrumbs::slash(vec![
"docs".into(),
"getting-started".into(),
"installation".into(),
]);
console.print(&docs);
console.print_text("");
console.print(&Rule::with_title("Wizard / Multi-step Form"));
let wizard = Breadcrumbs::arrow(vec![
"Welcome".into(),
"Personal Info".into(),
"Preferences".into(),
"Review".into(),
"Complete".into(),
]);
console.print(&wizard);
console.print_text("");
console.print(&Rule::with_title("Dynamic Building with Push/Pop"));
let mut dynamic = Breadcrumbs::new(vec!["Root".into()]);
console.print(&dynamic);
console.print_text("");
dynamic.push("Level 1");
console.print(&dynamic);
console.print_text("");
dynamic.push("Level 2");
dynamic.push("Level 3");
console.print(&dynamic);
console.print_text("");
dynamic.pop();
console.print_text("After pop:");
console.print(&dynamic);
console.print_text("");
console.print(&Rule::with_title("Display Trait (via println!)"));
let display_crumbs = Breadcrumbs::new(vec![
"Section A".into(),
"Section B".into(),
"Section C".into(),
]);
println!(" println! output: {}", display_crumbs);
console.print_text("");
console.print(&Rule::with_title("Single Item (No Separator)"));
let single = Breadcrumbs::new(vec!["Home".into()]);
console.print(&single);
console.print_text("");
console.print(&Rule::with_title("Empty Breadcrumbs"));
let empty = Breadcrumbs::new(vec![]);
console.print(&empty);
console.print_text("(nothing displayed above)");
}