titik 0.3.1

A cross platform text ui widget
Documentation
use std::io;
use titik::crossterm::Result;
use titik::{
    Button, Callback, Checkbox, FlexBox, GroupBox, Image, ListBox, Radio,
    Renderer, Slider, TabBox, TextArea, TextInput, TextLabel, Widget,
};

fn main() -> Result<()> {
    let mut stdout = io::stdout();
    let mut root_node = FlexBox::<()>::new();
    root_node.set_border(false);
    root_node.set_thick_border(true);
    let mut column = FlexBox::new();
    column.vertical();
    column.set_border(false);
    column.set_thick_border(false);
    let mut row = FlexBox::<()>::new();
    row.horizontal();
    row.set_border(false);
    row.set_thick_border(false);
    row.set_rounded(true);
    let btn1 = Button::<()>::new("btn 1");
    let btn2 = Button::<()>::new("btn 2");
    let cb1 = Checkbox::<()>::new("cb 1");
    let cb2 = Checkbox::<()>::new("cb 2");
    let label1 = TextLabel::new("label1");

    let rb1 = Radio::<()>::new("Radio1");
    let rb2 = Radio::<()>::new("Radio2");

    let input1 = TextInput::new("Hello");

    let mut list_box1 = ListBox::<()>::new();
    list_box1.set_use_divider(true);
    list_box1.set_list(vec![
        "Item1".into(),
        "Item2".into(),
        "Item3".into(),
        "Item4".into(),
        "Item5".into(),
        "Item6".into(),
        "Item7".into(),
        "Item8".into(),
        "Item9".into(),
        "Item10".into(),
        "Item11".into(),
        "Item12".into(),
        "Item13".into(),
        "Item14".into(),
        "Item15".into(),
        "Item16".into(),
        "Item17".into(),
        "Item18".into(),
        "Item19".into(),
        "Item20".into(),
        "Item21".into(),
        "Item22".into(),
        "Item23".into(),
        "Item24".into(),
        "Item25".into(),
        "Item26".into(),
        "Item27".into(),
        "Item28".into(),
        "Item29".into(),
        "Item30".into(),
    ]);

    let mut tab1 = TabBox::new();
    tab1.set_tab_labels(vec![
        "Tab1".into(),
        "Tab2".into(),
        "Tab3".into(),
        "Tab4".into(),
        "Tab5".into(),
        "And more tabs..".into(),
    ]);

    let cb11 = Checkbox::new("Checkbox1");
    let cb12 = Checkbox::new("Checkbox2");
    let rb11 = Radio::new("Radio1");
    let rb12 = Radio::new("Radio2");

    let mut gb1 = GroupBox::new();
    gb1.set_label("Selection");
    gb1.add_child(Box::new(cb11));
    gb1.add_child(Box::new(cb12));
    gb1.add_child(Box::new(rb11));
    gb1.add_child(Box::new(rb12));

    let mut tab_row = FlexBox::new();
    tab_row.vertical();

    tab1.set_active_tab(2);
    tab1.add_child_to_tab(1, Box::new(list_box1));
    tab_row.add_child(Box::new(Checkbox::new("checkbox1 in first tab")));
    tab_row.add_child(Box::new(Checkbox::new("checkbox2 in first tab")));
    tab_row.add_child(Box::new(Radio::new("radio1 in first tab")));
    tab_row.add_child(Box::new(TextInput::new("Hello input in first tab")));
    tab1.add_child_to_tab(0, Box::new(tab_row));
    tab1.add_child_to_tab(2, Box::new(gb1));
    tab1.add_child_to_tab(
        3,
        Box::new(TextArea::new("This is a good textarea view")),
    );

    column.add_child(Box::new(cb1));
    column.add_child(Box::new(cb2));
    column.add_child(Box::new(rb1));
    column.add_child(Box::new(rb2));
    column.add_child(Box::new(input1));
    column.add_child(Box::new(label1));

    row.add_child(Box::new(btn1));
    row.add_child(Box::new(btn2));
    row.add_child(Box::new(tab1));
    //row.add_child(Box::new(list_box1));
    column.add_child(Box::new(row));
    root_node.add_child(Box::new(column));
    let mut renderer = Renderer::<()>::new(&mut stdout, None, &mut root_node);
    renderer.run()?;
    Ok(())
}