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.
Row
s are now a collection ofCell
s, themselves wrapping aText
. This means you can style
the entireTable
, an entireRow
, an entireCell
and rely on the styling capabilities of
Text
to get full control over the look of yourTable
.Row
s can have multiple lines.- The header is now optional and is just another
Row
always visible at the top. Row
s 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 anenum
but astruct
. It accepts anything that can be converted to an iterator of things
that can be converted to aCell
- 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 aStyle
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 thanmake
for easier on-boarding.