extern crate alloc; use tui_orchestrator::focus::{FocusBuilder, FocusId, FocusManager, Focusable}; #[derive(Debug, Clone, PartialEq, Eq, Hash)] enum FormElement { Username, Password, RememberMe, Submit, } struct FormPage { username: alloc::string::String, password: alloc::string::String, remember: bool, } impl Focusable for FormPage { fn focus_targets(&self) -> alloc::vec::Vec { alloc::vec![ FormElement::Username, FormElement::Password, FormElement::RememberMe, FormElement::Submit, ] } } fn main() { let form = FormPage { username: alloc::string::String::new(), password: alloc::string::String::new(), remember: false, }; let mut focus_manager = FocusManager::new(); focus_manager.set_targets(form.focus_targets()); println!("Current focus: {:?}", focus_manager.current()); focus_manager.next(); println!("After next: {:?}", focus_manager.current()); focus_manager.last(); println!("After last: {:?}", focus_manager.current()); println!("Is first: {}", focus_manager.is_first()); println!("Is last: {}", focus_manager.is_last()); println!("\n--- FocusBuilder Demo ---"); let builder = FocusBuilder::new() .target(FormElement::Username) .target(FormElement::Password) .target(FormElement::Submit); let targets = builder.build(); println!("Built targets: {:?}", targets); }