tui-rs v0.14.0 Release Notes

Release Date: 2021-01-01 // over 3 years ago
  • ๐Ÿ’ฅ Breaking changes

    ๐Ÿ†• New API for the Table widget

    The Table widget got a lot of improvements that should make it easier to work with:

    • It should not longer panic when rendered on small areas.
    • ๐Ÿ’… Rows are now a collection of Cells, themselves wrapping a Text. This means you can style the entire Table, an entire Row, an entire Cell and rely on the styling capabilities of Text to get full control over the look of your Table.
    • Rows can have multiple lines.
    • The header is now optional and is just another Row always visible at the top.
    • Rows can have a bottom margin.
    • The header alignment is no longer off when an item is selected.

    ๐Ÿ’ป Taking the example of the code in examples/demo/ui.rs, this is what you may have to change:

         let failure_style = Style::default()
             .fg(Color::Red)
             .add_modifier(Modifier::RAPID_BLINK | Modifier::CROSSED_OUT);
    -    let header = ["Server", "Location", "Status"];
         let rows = app.servers.iter().map(|s| {
             let style = if s.status == "Up" {
                 up_style
             } else {
                 failure_style
             };
    -        Row::StyledData(vec![s.name, s.location, s.status].into_iter(), style)
    +        Row::new(vec![s.name, s.location, s.status]).style(style)
         });
    -    let table = Table::new(header.iter(), rows)
    +    let table = Table::new(rows)
    +        .header(
    +            Row::new(vec!["Server", "Location", "Status"])
    +                .style(Style::default().fg(Color::Yellow))
    +                .bottom_margin(1),
    +        )
             .block(Block::default().title("Servers").borders(Borders::ALL))
    -        .header_style(Style::default().fg(Color::Yellow))
             .widths(&[
                 Constraint::Length(15),
                 Constraint::Length(15),
    

    Here, we had to:

    • ๐Ÿ”„ Change the way we construct Row which is no longer an enum but a struct. It accepts anything that can be converted to an iterator of things ๐Ÿ“„ that can be converted to a Cell
    • The header is no longer a required parameter so we use ๐Ÿ“„ Table::header to set it. ๐Ÿ’… Table::header_style has been removed since the style can be directly set using ๐Ÿ’… Row::style. In addition, we want to preserve the old margin between the header and the rest of the rows so we add a bottom margin to the header using ๐Ÿ“„ Row::bottom_margin.

    ๐Ÿ“š You may want to look at the documentation of the different types to get a better understanding:

    ๐Ÿ›  Fixes

    • ๐Ÿ›  Fix handling of Non Breaking Space (NBSP) in wrapped text in Paragraph widget.

    ๐Ÿ”‹ Features

    • โž• Add Style::reset to create a Style resetting all styling properties when applied.
    • โž• Add an option to render the Gauge widget with unicode blocks.
    • Manage common project tasks with cargo-make rather than make for easier on-boarding.