Releases: ratatui-org/ratatui
v0.26.3
0.26.3 - 2024-05-19
We are happy to announce a brand new Ratatui Forum 🐭 for Rust & TUI enthusiasts.
This is a patch release that fixes the unicode truncation bug, adds performance and quality of life improvements.
✨ Release highlights: https://ratatui.rs/highlights/v0263/
Features
-
97ee102 (buffer) Track_caller for index_of by @EdJoPaTo in #1046
**The caller put in the wrong x/y -> the caller is the cause.
-
bf09234 (table) Make TableState::new const by @EdJoPaTo in #1040
-
eb281df (uncategorized) Use inner Display implementation by @EdJoPaTo in #1097
-
ec763af (uncategorized) Make Stylize's
.bg(color)
generic by @kdheepak in #1099This PR makes `.bg(color)` generic accepting anything that can be converted into `Color`; similar to the `.fg(color)` method on the same trait
-
4d1784f (uncategorized) Re-export ParseColorError as style::ParseColorError by @joshka in #1086
Fixes:#1085
Bug Fixes
-
366cbae (buffer) Fix Debug panic and fix formatting of overridden parts by @EdJoPaTo in #1098
Fix panic in `Debug for Buffer` when `width == 0`. Also corrects the output when symbols are overridden.
-
4392759 (examples) Changed user_input example to work with multi-byte unicode chars by @OkieOth in #1069
This is the proposed solution for issue #1068. It solves the bug in the user_input example with multi-byte UTF-8 characters as input.
Fixes:#1068
-
20fc0dd (examples) Fix key handling in constraints by @psobolik in #1066
Add check for `KeyEventKind::Press` to constraints example's event handler to eliminate double keys on Windows.
Fixes:#1062
-
f4637d4 (reflow) Allow wrapping at zero width whitespace by @kxxt in #1074
-
699c2d7 (uncategorized) Unicode truncation bug by @joshka in #1089
- Rewrote the line / span rendering code to take into account how multi-byte / wide emoji characters are truncated when rendering into areas that cannot accommodate them in the available space - Added comprehensive coverage over the edge cases - Adds a benchmark to ensure perf
Fixes:#1032
-
b30411d (uncategorized) Termwiz underline color test by @joshka in #1094
Fixes code that doesn't compile in the termwiz tests when underline-color feature is enabled.
-
5f1e119 (uncategorized) Correct feature flag typo for termwiz by @joshka in #1088
underline-color was incorrectly spelt as underline_color
-
0a16496 (uncategorized) Use
to_string
to serialize Color by @SleepySwords in #934Since deserialize now uses `FromStr` to deserialize color, serializing `Color` RGB values, as well as index values, would produce an output that would no longer be able to be deserialized without causing an error.
Color::Rgb will now be serialized as the hex representation of their
value.
For example, with serde_json,Color::Rgb(255, 0, 255)
would be
serialized as"#FF00FF"
rather than{"Rgb": [255, 0, 255]}
.Color::Indexed will now be serialized as just the string of the index.
For example, with serde_json,Color::Indexed(10)
would be serialized
as"10"
rather than{"Indexed": 10}
.
Other color variants remain the same.
Refactor
-
2cfe82a (buffer) Deprecate assert_buffer_eq! in favor of assert_eq! by @EdJoPaTo in #1007
- Simplify `assert_buffer_eq!` logic. - Deprecate `assert_buffer_eq!`. - Introduce `TestBackend::assert_buffer_lines`. Also simplify many tests involving buffer comparisons. For the deprecation, just use `assert_eq` instead of `assert_buffer_eq`: ```diff -assert_buffer_eq!(actual, expected); +assert_eq!(actual, expected); ``` --- I noticed `assert_buffer_eq!` creating no test coverage reports and looked into this macro. First I simplified it. Then I noticed a bunch of `assert_eq!(buffer, …)` and other indirect usages of this macro (like `TestBackend::assert_buffer`). The good thing here is that it's mainly used in tests so not many changes to the library code.
-
baedc39 (buffer) Simplify set_stringn logic by @EdJoPaTo in #1083
-
9bd89c2 (clippy) Enable breaking lint checks by @EdJoPaTo in #988
We need to make sure to not change existing methods without a notice. But at the same time this also finds public additions with mistakes before they are even released which is what I would like to have. This renames a method and deprecated the old name hinting to a new name. Should this be mentioned somewhere, so it's added to the release notes? It's not breaking because the old method is still there.
-
bef5bcf (example) Remove pointless new method by @EdJoPaTo in #1038
Use `App::default()` directly.
Documentation
-
da1ade7 (github) Update code owners about past maintainers by @orhun in #1073
As per suggestion in https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990 It's good for historical purposes!
-
3687f78 (github) Update code owners by @orhun in #1067
Removes the team members that are not able to review PRs recently (with their approval ofc)
-
839cca2 (table) Fix typo in docs for highlight_symbol by @kdheepak in #1108
-
f945a0b (test) Fix typo in TestBackend documentation by @orhun in #1107
-
828d17a (uncategorized) Add minimal example by @joshka in #1114
-
e95230b (uncategorized) Add note about scrollbar state content length by @Utagai in #1077
Performance
v0.26.3-alpha.4
v0.26.3-alpha.4 - 2024-05-18
Features
-
97ee102 (buffer) Track_caller for index_of by @EdJoPaTo in #1046
The caller put in the wrong x/y -> the caller is the cause.
-
bf09234 (table) Make TableState::new const by @EdJoPaTo in #1040
-
eb281df (uncategorized) Use inner Display implementation by @EdJoPaTo in #1097
-
ec763af (uncategorized) Make Stylize's
.bg(color)
generic by @kdheepak in #1099This PR makes `.bg(color)` generic accepting anything that can be converted into `Color`; similar to the `.fg(color)` method on the same trait
-
4d1784f (uncategorized) Re-export ParseColorError as style::ParseColorError by @joshka in #1086
Fixes:#1085
Bug Fixes
-
366cbae (buffer) Fix Debug panic and fix formatting of overridden parts by @EdJoPaTo in #1098
Fix panic in `Debug for Buffer` when `width == 0`. Also corrects the output when symbols are overridden.
-
4392759 (examples) Changed user_input example to work with multi-byte unicode chars by @OkieOth in #1069
This is the proposed solution for issue #1068. It solves the bug in the user_input example with multi-byte UTF-8 characters as input.
Fixes:#1068
-
20fc0dd (examples) Fix key handling in constraints by @psobolik in #1066
Add check for `KeyEventKind::Press` to constraints example's event handler to eliminate double keys on Windows.
Fixes:#1062
-
f4637d4 (reflow) Allow wrapping at zero width whitespace by @kxxt in #1074
-
699c2d7 (uncategorized) Unicode truncation bug by @joshka in #1089
- Rewrote the line / span rendering code to take into account how multi-byte / wide emoji characters are truncated when rendering into areas that cannot accommodate them in the available space - Added comprehensive coverage over the edge cases - Adds a benchmark to ensure perf
Fixes:#1032
-
b30411d (uncategorized) Termwiz underline color test by @joshka in #1094
Fixes code that doesn't compile in the termwiz tests when underline-color feature is enabled.
-
5f1e119 (uncategorized) Correct feature flag typo for termwiz by @joshka in #1088
underline-color was incorrectly spelt as underline_color
-
0a16496 (uncategorized) Use
to_string
to serialize Color by @SleepySwords in #934Since deserialize now uses `FromStr` to deserialize color, serializing `Color` RGB values, as well as index values, would produce an output that would no longer be able to be deserialized without causing an error.
Color::Rgb will now be serialized as the hex representation of their
value.
For example, with serde_json,Color::Rgb(255, 0, 255)
would be
serialized as"#FF00FF"
rather than{"Rgb": [255, 0, 255]}
.Color::Indexed will now be serialized as just the string of the index.
For example, with serde_json,Color::Indexed(10)
would be serialized
as"10"
rather than{"Indexed": 10}
.
Other color variants remain the same.
Refactor
-
2cfe82a (buffer) Deprecate assert_buffer_eq! in favor of assert_eq! by @EdJoPaTo in #1007
- Simplify `assert_buffer_eq!` logic. - Deprecate `assert_buffer_eq!`. - Introduce `TestBackend::assert_buffer_lines`. Also simplify many tests involving buffer comparisons. For the deprecation, just use `assert_eq` instead of `assert_buffer_eq`: ```diff -assert_buffer_eq!(actual, expected); +assert_eq!(actual, expected); ``` --- I noticed `assert_buffer_eq!` creating no test coverage reports and looked into this macro. First I simplified it. Then I noticed a bunch of `assert_eq!(buffer, …)` and other indirect usages of this macro (like `TestBackend::assert_buffer`). The good thing here is that it's mainly used in tests so not many changes to the library code.
-
baedc39 (buffer) Simplify set_stringn logic by @EdJoPaTo in #1083
-
9bd89c2 (clippy) Enable breaking lint checks by @EdJoPaTo in #988
We need to make sure to not change existing methods without a notice. But at the same time this also finds public additions with mistakes before they are even released which is what I would like to have. This renames a method and deprecated the old name hinting to a new name. Should this be mentioned somewhere, so it's added to the release notes? It's not breaking because the old method is still there.
-
bef5bcf (example) Remove pointless new method by @EdJoPaTo in #1038
Use `App::default()` directly.
Documentation
-
da1ade7 (github) Update code owners about past maintainers by @orhun in #1073
As per suggestion in https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990 It's good for historical purposes!
-
3687f78 (github) Update code owners by @orhun in #1067
Removes the team members that are not able to review PRs recently (with their approval ofc)
-
839cca2 (table) Fix typo in docs for highlight_symbol by @kdheepak in #1108
-
f945a0b (test) Fix typo in TestBackend documentation by @orhun in #1107
-
e95230b (uncategorized) Add note about scrollbar state content length by @Utagai in #1077
Performance
-
366c2a0 (block) Use Block::bordered by @EdJoPaTo in #1041
Block::bordered()
is shorter thanBlock::new().borders(Borders::ALL)
, requires one less import
(Borders
) and in caseBlock::default()
was used before can even be
const
. -
2e71c18 (buffer) Simplify Buffer::filled with macro by @EdJoPaTo in #1036
The `vec![]` macro is highly optimized by the Rust team and shorter. Don't do it manually. This change is mainly cleaner code. The only production code that uses this is `Terminal::with_options` and `Terminal::insert_before` so it's not performance relevant on every render.
-
81b9633 (calendar) Use const fn by @EdJoPaTo in #1039
Also, do the comparison withou...
v0.26.3-alpha.3
v0.26.3-alpha.3 - 2024-05-11
Features
-
97ee102
(buffer) Track_caller for index_of by @EdJoPaTo in #1046The caller put in the wrong x/y -> the caller is the cause.
-
bf09234
(table) Make TableState::new const by @EdJoPaTo in #1040 -
4d1784f
(uncategorized) Re-export ParseColorError as style::ParseColorError by @joshka in #1086Fixes:#1085
Bug Fixes
-
4392759
(examples) Changed user_input example to work with multi-byte unicode chars by @OkieOth in #1069This is the proposed solution for issue #1068. It solves the bug in the user_input example with multi-byte UTF-8 characters as input.
Fixes:#1068
-
20fc0dd
(examples) Fix key handling in constraints by @psobolik in #1066Add check for `KeyEventKind::Press` to constraints example's event handler to eliminate double keys on Windows.
Fixes:#1062
-
f4637d4
(reflow) Allow wrapping at zero width whitespace by @kxxt in #1074 -
5f1e119
(uncategorized) Correct feature flag typo for termwiz by @joshka in #1088underline-color was incorrectly spelt as underline_color
-
0a16496
(uncategorized) Useto_string
to serialize Color by @SleepySwords in #934Since deserialize now uses `FromStr` to deserialize color, serializing `Color` RGB values, as well as index values, would produce an output that would no longer be able to be deserialized without causing an error.
Color::Rgb will now be serialized as the hex representation of their
value.
For example, with serde_json,Color::Rgb(255, 0, 255)
would be
serialized as"#FF00FF"
rather than{"Rgb": [255, 0, 255]}
.Color::Indexed will now be serialized as just the string of the index.
For example, with serde_json,Color::Indexed(10)
would be serialized
as"10"
rather than{"Indexed": 10}
.
Other color variants remain the same.
Refactor
-
baedc39
(buffer) Simplify set_stringn logic by @EdJoPaTo in #1083 -
bef5bcf
(example) Remove pointless new method by @EdJoPaTo in #1038Use `App::default()` directly.
Documentation
-
da1ade7
(github) Update code owners about past maintainers by @orhun in #1073As per suggestion in https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990 It's good for historical purposes!
-
3687f78
(github) Update code owners by @orhun in #1067Removes the team members that are not able to review PRs recently (with their approval ofc)
-
e95230b
(uncategorized) Add note about scrollbar state content length by @Utagai in #1077
Performance
-
366c2a0
(block) Use Block::bordered by @EdJoPaTo in #1041Block::bordered()
is shorter thanBlock::new().borders(Borders::ALL)
, requires one less import
(Borders
) and in caseBlock::default()
was used before can even be
const
. -
2e71c18
(buffer) Simplify Buffer::filled with macro by @EdJoPaTo in #1036The `vec![]` macro is highly optimized by the Rust team and shorter. Don't do it manually. This change is mainly cleaner code. The only production code that uses this is `Terminal::with_options` and `Terminal::insert_before` so it's not performance relevant on every render.
-
81b9633
(calendar) Use const fn by @EdJoPaTo in #1039Also, do the comparison without `as u8`. Stays the same at runtime and is cleaner code.
-
c442dfd
(canvas) Change map data to const instead of static by @EdJoPaTo in #1037 -
1706b0a
(crossterm) Speed up combined fg and bg color changes by up to 20% by @joshka in #1072
Styling
-
aa4260f
(uncategorized) Use std::fmt instead of importing Debug and Display by @joshka in #1087This is a small universal style change to avoid making this change a part of other PRs. [rationale](https://github.com/ratatui-org/ratatui/pull/1083#discussion_r1588466060)
Miscellaneous Tasks
-
5fbb77a
(readme) Use terminal theme for badges by @TadoTheMiner in #1026The badges in the readme were all the default theme. Giving them prettier colors that match the terminal gif is better. I've used the colors from the VHS repo.
-
bef2bc1
(cargo) Add homepage to Cargo.toml by @joshka in #1080 -
64eb391
(uncategorized) Fixup cargo lint for windows targets by @joshka in #1071Crossterm brings in multiple versions of the same dep
-
326a461
(uncategorized) Add package categories field by @mcskware in #1035Add the package categories field in Cargo.toml, with value `["command-line-interface"]`. This fixes the (currently non-default) clippy cargo group lint [`clippy::cargo_common_metadata`](https://rust-lang.github.io/rust-clippy/master/index.html#/cargo_common_metadata). As per discussion in [Cargo package categories suggestions](https://github.com/ratatui-org/ratatui/discussions/1034), this lint is not suggested to be run by default in CI, but rather as an occasional one-off as part of the larger [`clippy::cargo`](https://doc.rust-lang.org/stable/clippy/lints.html#cargo) lint group.
Build
-
c75aa19
(uncategorized) Add clippy::cargo lint by @joshka in #1053Followup to https://github.com/ratatui-org/ratatui/pull/1035 and https://github.com/ratatui-org/ratatui/discussions/1034 It's reasonable to enable this and deal with breakage by fixing any specific issues that arise.
New Contributors
- @Utagai made their first contribution in #1077
- @kxxt made their first contribution in #1074
- @OkieOth made their first contribution in #1069
- @psobolik made their first contribution in #1066
- @SleepySwords made their first contribution in #934
- @mcskware made their first contribution in #1035
Full Changelog: h...
v0.26.3-alpha.2
v0.26.3-alpha.2 - 2024-05-04
Features
-
97ee102
(buffer) Track_caller for index_of by @EdJoPaTo in #1046The caller put in the wrong x/y -> the caller is the cause.
-
bf09234
(table) Make TableState::new const by @EdJoPaTo in #1040
Bug Fixes
-
4392759
(examples) Changed user_input example to work with multi-byte unicode chars by @OkieOth in #1069This is the proposed solution for issue #1068. It solves the bug in the user_input example with multi-byte UTF-8 characters as input.
Fixes:#1068
-
20fc0dd
(examples) Fix key handling in constraints by @psobolik in #1066Add check for `KeyEventKind::Press` to constraints example's event handler to eliminate double keys on Windows.
Fixes:#1062
-
f4637d4
(reflow) Allow wrapping at zero width whitespace by @kxxt in #1074 -
0a16496
(uncategorized) Useto_string
to serialize Color by @SleepySwords in #934Since deserialize now uses `FromStr` to deserialize color, serializing `Color` RGB values, as well as index values, would produce an output that would no longer be able to be deserialized without causing an error.
Color::Rgb will now be serialized as the hex representation of their
value.
For example, with serde_json,Color::Rgb(255, 0, 255)
would be
serialized as"#FF00FF"
rather than{"Rgb": [255, 0, 255]}
.Color::Indexed will now be serialized as just the string of the index.
For example, with serde_json,Color::Indexed(10)
would be serialized
as"10"
rather than{"Indexed": 10}
.
Other color variants remain the same.
Refactor
-
baedc39
(buffer) Simplify set_stringn logic by @EdJoPaTo in #1083 -
bef5bcf
(example) Remove pointless new method by @EdJoPaTo in #1038Use `App::default()` directly.
Documentation
-
da1ade7
(github) Update code owners about past maintainers by @orhun in #1073As per suggestion in https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990 It's good for historical purposes!
-
3687f78
(github) Update code owners by @orhun in #1067Removes the team members that are not able to review PRs recently (with their approval ofc)
-
e95230b
(uncategorized) Add note about scrollbar state content length by @Utagai in #1077
Performance
-
366c2a0
(block) Use Block::bordered by @EdJoPaTo in #1041Block::bordered()
is shorter thanBlock::new().borders(Borders::ALL)
, requires one less import
(Borders
) and in caseBlock::default()
was used before can even be
const
. -
2e71c18
(buffer) Simplify Buffer::filled with macro by @EdJoPaTo in #1036The `vec![]` macro is highly optimized by the Rust team and shorter. Don't do it manually. This change is mainly cleaner code. The only production code that uses this is `Terminal::with_options` and `Terminal::insert_before` so it's not performance relevant on every render.
-
81b9633
(calendar) Use const fn by @EdJoPaTo in #1039Also, do the comparison without `as u8`. Stays the same at runtime and is cleaner code.
-
c442dfd
(canvas) Change map data to const instead of static by @EdJoPaTo in #1037 -
1706b0a
(crossterm) Speed up combined fg and bg color changes by up to 20% by @joshka in #1072
Miscellaneous Tasks
-
5fbb77a
(readme) Use terminal theme for badges by @TadoTheMiner in #1026The badges in the readme were all the default theme. Giving them prettier colors that match the terminal gif is better. I've used the colors from the VHS repo.
-
bef2bc1
(cargo) Add homepage to Cargo.toml by @joshka in #1080 -
64eb391
(uncategorized) Fixup cargo lint for windows targets by @joshka in #1071Crossterm brings in multiple versions of the same dep
-
326a461
(uncategorized) Add package categories field by @mcskware in #1035Add the package categories field in Cargo.toml, with value `["command-line-interface"]`. This fixes the (currently non-default) clippy cargo group lint [`clippy::cargo_common_metadata`](https://rust-lang.github.io/rust-clippy/master/index.html#/cargo_common_metadata). As per discussion in [Cargo package categories suggestions](https://github.com/ratatui-org/ratatui/discussions/1034), this lint is not suggested to be run by default in CI, but rather as an occasional one-off as part of the larger [`clippy::cargo`](https://doc.rust-lang.org/stable/clippy/lints.html#cargo) lint group.
Build
-
c75aa19
(uncategorized) Add clippy::cargo lint by @joshka in #1053Followup to https://github.com/ratatui-org/ratatui/pull/1035 and https://github.com/ratatui-org/ratatui/discussions/1034 It's reasonable to enable this and deal with breakage by fixing any specific issues that arise.
New Contributors
- @Utagai made their first contribution in #1077
- @kxxt made their first contribution in #1074
- @OkieOth made their first contribution in #1069
- @psobolik made their first contribution in #1066
- @SleepySwords made their first contribution in #934
- @mcskware made their first contribution in #1035
Full Changelog: v0.26.2...v0.26.3-alpha.2
v0.26.3-alpha.1
v0.26.3-alpha.1 - 2024-04-27
Features
-
97ee102
(buffer) Track_caller for index_of by @EdJoPaTo in #1046The caller put in the wrong x/y -> the caller is the cause.
-
bf09234
(table) Make TableState::new const by @EdJoPaTo in #1040
Bug Fixes
-
0a16496
(uncategorized) Useto_string
to serialize Color by @SleepySwords in #934Since deserialize now uses `FromStr` to deserialize color, serializing `Color` RGB values, as well as index values, would produce an output that would no longer be able to be deserialized without causing an error.
Color::Rgb will now be serialized as the hex representation of their
value.
For example, with serde_json,Color::Rgb(255, 0, 255)
would be
serialized as"#FF00FF"
rather than{"Rgb": [255, 0, 255]}
.Color::Indexed will now be serialized as just the string of the index.
For example, with serde_json,Color::Indexed(10)
would be serialized
as"10"
rather than{"Indexed": 10}
.
Other color variants remain the same.
Refactor
Performance
-
2e71c18
(buffer) Simplify Buffer::filled with macro by @EdJoPaTo in #1036The `vec![]` macro is highly optimized by the Rust team and shorter. Don't do it manually. This change is mainly cleaner code. The only production code that uses this is `Terminal::with_options` and `Terminal::insert_before` so it's not performance relevant on every render.
-
81b9633
(calendar) Use const fn by @EdJoPaTo in #1039Also, do the comparison without `as u8`. Stays the same at runtime and is cleaner code.
-
c442dfd
(canvas) Change map data to const instead of static by @EdJoPaTo in #1037
Miscellaneous Tasks
-
5fbb77a
(readme) Use terminal theme for badges by @TadoTheMiner in #1026The badges in the readme were all the default theme. Giving them prettier colors that match the terminal gif is better. I've used the colors from the VHS repo.
-
326a461
(uncategorized) Add package categories field by @mcskware in #1035Add the package categories field in Cargo.toml, with value `["command-line-interface"]`. This fixes the (currently non-default) clippy cargo group lint [`clippy::cargo_common_metadata`](https://rust-lang.github.io/rust-clippy/master/index.html#/cargo_common_metadata). As per discussion in [Cargo package categories suggestions](https://github.com/ratatui-org/ratatui/discussions/1034), this lint is not suggested to be run by default in CI, but rather as an occasional one-off as part of the larger [`clippy::cargo`](https://doc.rust-lang.org/stable/clippy/lints.html#cargo) lint group.
Build
-
c75aa19
(uncategorized) Add clippy::cargo lint by @joshka in #1053Followup to https://github.com/ratatui-org/ratatui/pull/1035 and https://github.com/ratatui-org/ratatui/discussions/1034 It's reasonable to enable this and deal with breakage by fixing any specific issues that arise.
New Contributors
- @SleepySwords made their first contribution in #934
- @mcskware made their first contribution in #1035
Full Changelog: v0.26.2...v0.26.3-alpha.1
v0.26.3-alpha.0
v0.26.3-alpha.0 - 2024-04-20
Refactor
Miscellaneous Tasks
-
326a461
(uncategorized) Add package categories field by @mcskware in #1035Add the package categories field in Cargo.toml, with value `["command-line-interface"]`. This fixes the (currently non-default) clippy cargo group lint [`clippy::cargo_common_metadata`](https://rust-lang.github.io/rust-clippy/master/index.html#/cargo_common_metadata). As per discussion in [Cargo package categories suggestions](https://github.com/ratatui-org/ratatui/discussions/1034), this lint is not suggested to be run by default in CI, but rather as an occasional one-off as part of the larger [`clippy::cargo`](https://doc.rust-lang.org/stable/clippy/lints.html#cargo) lint group.
New Contributors
Full Changelog: v0.26.2...v0.26.3-alpha.0
v0.26.2
0.26.2 - 2024-04-15
This is a patch release that fixes bugs and adds enhancements, including new iterator constructors, List scroll padding, and various rendering improvements. ✨
✨ Release highlights: https://ratatui.rs/highlights/v0262/
Features
-
11b452d
(layout) Mark various functions as const by @EdJoPaTo in #951 -
1cff511
(line) Impl Styled for Line by @joshka in #968This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
654949b
(list) Add Scroll Padding to Lists by @CameronBarnes in #958Introduces scroll padding, which allows the api user to request that a certain number of ListItems be kept visible above and below the currently selected item while scrolling. ```rust let list = List::new(items).scroll_padding(1); ```
Fixes:#955
-
26af650
(text) Add push methods for text and line by @joshka in #998Adds the following methods to the `Text` and `Line` structs: - Text::push_line - Text::push_span - Line::push_span This allows for adding lines and spans to a text object without having to call methods on the fields directly, which is useful for incremental construction of text objects.
-
b5bdde0
(text) AddFromIterator
impls forLine
andText
by @joshka in #967This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
12f67e8
(uncategorized) Impl Widget for&str
andString
by @kdheepak in #952Currently, `f.render_widget("hello world".bold(), area)` works but `f.render_widget("hello world", area)` doesn't. This PR changes that my implementing `Widget` for `&str` and `String`. This makes it easier to render strings with no styles as widgets. Example usage: ```rust terminal.draw(|f| f.render_widget("Hello World!", f.size()))?; ``` ---------
Bug Fixes
-
0207160
(line) Line truncation respects alignment by @TadoTheMiner in #987When rendering a `Line`, the line will be truncated: - on the right for left aligned lines - on the left for right aligned lines - on bot sides for centered lines E.g. "Hello World" will be rendered as "Hello", "World", "lo wo" for left, right, centered lines respectively.
Fixes:#932
-
c56f49b
(list) Saturating_sub to fix highlight_symbol overflow by @mrjackwills in #949An overflow (pedantically an underflow) can occur if the highlight_symbol is a multi-byte char, and area is reduced to a size less than that char length.
-
943c043
(scrollbar) Dont render on 0 length track by @EdJoPaTo in #964Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0` being smaller than `0.0`)
-
742a5ea
(text) Fix panic when rendering out of bounds by @joshka in #997Previously it was possible to cause a panic when rendering to an area outside of the buffer bounds. Instead this now correctly renders nothing to the buffer.
-
f6c4e44
(uncategorized) Ensure that paragraph correctly renders styled text by @joshka in #992Paragraph was ignoring the new `Text::style` field added in 0.26.0
Fixes:#990
-
35e971f
(uncategorized) Scrollbar thumb not visible on long lists by @ThomasMiz in #959When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
Refactor
-
c12bcfe
(non-src) Apply pedantic lints by @EdJoPaTo in #976Fixes many not yet enabled lints (mostly pedantic) on everything that is not the lib (examples, benches, tests). Therefore, this is not containing anything that can be a breaking change. Lints are not enabled as that should be the job of #974. I created this as a separate PR as its mostly independent and would only clutter up the diff of #974 even more. Also see https://github.com/ratatui-org/ratatui/pull/974#discussion_r1506458743 ---------
-
8719608
(span) Rename to_aligned_line into into_aligned_line by @EdJoPaTo in #993With the Rust method naming conventions these methods are into methods consuming the Span. Therefore, it's more consistent to use `into_` instead of `to_`. ```rust Span::to_centered_line Span::to_left_aligned_line Span::to_right_aligned_line ``` Are marked deprecated and replaced with the following ```rust Span::into_centered_line Span::into_left_aligned_line Span::into_right_aligned_line ```
-
b831c56
(widget-ref) Clippy::needless_pass_by_value by @EdJoPaTo -
359204c
(uncategorized) Simplify to io::Result by @EdJoPaTo in #1016Simplifies the code, logic stays exactly the same.
-
8e68db9
(uncategorized) Remove pointless default on internal structs by @EdJoPaTo in #980See #978
Also remove other derives. They are unused and just slow down
compilation.
v0.27.0-alpha.5
v0.27.0-alpha.5 - 2024-04-13
Features
-
1cff511
(line) Impl Styled for Line (#968)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
654949b
(list) Add Scroll Padding to Lists (#958)Introduces scroll padding, which allows the api user to request that a certain number of ListItems be kept visible above and below the currently selected item while scrolling. ```rust let list = List::new(items).scroll_padding(1); ```
Fixes:#955
-
26af650
(text) Add push methods for text and line (#998)Adds the following methods to the `Text` and `Line` structs: - Text::push_line - Text::push_span - Line::push_span This allows for adding lines and spans to a text object without having to call methods on the fields directly, which is usefult for incremental construction of text objects.
-
b5bdde0
(text) AddFromIterator
impls forLine
andText
(#967)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
12f67e8
(uncategorized) Impl Widget for&str
andString
(#952)Currently, `f.render_widget("hello world".bold(), area)` works but `f.render_widget("hello world", area)` doesn't. This PR changes that my implementing `Widget` for `&str` and `String`. This makes it easier to render strings with no styles as widgets. Example usage: ```rust terminal.draw(|f| f.render_widget("Hello World!", f.size()))?; ``` ---------
Bug Fixes
-
0207160
(line) Line truncation respects alignment (#987)When rendering a `Line`, the line will be truncated: - on the right for left aligned lines - on the left for right aligned lines - on bot sides for centered lines E.g. "Hello World" will be rendered as "Hello", "World", "lo wo" for left, right, centered lines respectively.
Fixes:#932
-
c56f49b
(list) Saturating_sub to fix highlight_symbol overflow (#949)An overflow (pedantically an underflow) can occur if the highlight_symbol is a multi-byte char, and area is reduced to a size less than that char length.
-
943c043
(scrollbar) Dont render on 0 length track (#964)Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0` being smaller than `0.0`)
-
742a5ea
(text) Fix panic when rendering out of bounds (#997)Previously it was possible to cause a panic when rendering to an area outside of the buffer bounds. Instead this now correctly renders nothing to the buffer.
-
f6c4e44
(uncategorized) Ensure that paragraph correctly renders styled text (#992)Paragraph was ignoring the new `Text::style` field added in 0.26.0
Fixes:#990
-
35e971f
(uncategorized) Scrollbar thumb not visible on long lists (#959)When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
Refactor
-
c12bcfe
(non-src) Apply pedantic lints (#976)Fixes many not yet enabled lints (mostly pedantic) on everything that is not the lib (examples, benchs, tests). Therefore, this is not containing anything that can be a breaking change. Lints are not enabled as that should be the job of #974. I created this as a separate PR as its mostly independent and would only clutter up the diff of #974 even more. Also see https://github.com/ratatui-org/ratatui/pull/974#discussion_r1506458743 ---------
-
8719608
(span) Rename to_aligned_line into into_aligned_line (#993)With the Rust method naming conventions these methods are into methods consuming the Span. Therefore, it's more consistent to use `into_` instead of `to_`. ```rust Span::to_centered_line Span::to_left_aligned_line Span::to_right_aligned_line ``` Are marked deprecated and replaced with the following ```rust Span::into_centered_line Span::into_left_aligned_line Span::into_right_aligned_line ```
-
359204c
(uncategorized) Simplify to io::Result (#1016)Simplifies the code, logic stays exactly the same.
-
8e68db9
(uncategorized) Remove pointless default on internal structs (#980)See #978
Also remove other derives. They are unused and just slow down
compilation.
-
3be189e
(uncategorized) Clippy::thread_local_initializer_can_be_made_const (#974)enabled by default on nightly
-
fdb14dc
(uncategorized) Clippy::redundant_type_annotations (#974) -
9b3b23a
(uncategorized) Remove literal suffix (#974)its not needed and can just be assumed
related:clippy::(un)separated_literal_suffix
-
[58b6e0b](https://gi...
v0.27.0-alpha.4
v0.27.0-alpha.4 - 2024-04-06
Features
-
1cff511
(line) Impl Styled for Line (#968)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
654949b
(list) Add Scroll Padding to Lists (#958)Introduces scroll padding, which allows the api user to request that a certain number of ListItems be kept visible above and below the currently selected item while scrolling. ```rust let list = List::new(items).scroll_padding(1); ```
Fixes:#955
-
26af650
(text) Add push methods for text and line (#998)Adds the following methods to the `Text` and `Line` structs: - Text::push_line - Text::push_span - Line::push_span This allows for adding lines and spans to a text object without having to call methods on the fields directly, which is usefult for incremental construction of text objects.
-
b5bdde0
(text) AddFromIterator
impls forLine
andText
(#967)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
12f67e8
(uncategorized) Impl Widget for&str
andString
(#952)Currently, `f.render_widget("hello world".bold(), area)` works but `f.render_widget("hello world", area)` doesn't. This PR changes that my implementing `Widget` for `&str` and `String`. This makes it easier to render strings with no styles as widgets. Example usage: ```rust terminal.draw(|f| f.render_widget("Hello World!", f.size()))?; ``` ---------
Bug Fixes
-
0207160
(line) Line truncation respects alignment (#987)When rendering a `Line`, the line will be truncated: - on the right for left aligned lines - on the left for right aligned lines - on bot sides for centered lines E.g. "Hello World" will be rendered as "Hello", "World", "lo wo" for left, right, centered lines respectively.
Fixes:#932
-
c56f49b
(list) Saturating_sub to fix highlight_symbol overflow (#949)An overflow (pedantically an underflow) can occur if the highlight_symbol is a multi-byte char, and area is reduced to a size less than that char length.
-
943c043
(scrollbar) Dont render on 0 length track (#964)Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0` being smaller than `0.0`)
-
742a5ea
(text) Fix panic when rendering out of bounds (#997)Previously it was possible to cause a panic when rendering to an area outside of the buffer bounds. Instead this now correctly renders nothing to the buffer.
-
f6c4e44
(uncategorized) Ensure that paragraph correctly renders styled text (#992)Paragraph was ignoring the new `Text::style` field added in 0.26.0
Fixes:#990
-
35e971f
(uncategorized) Scrollbar thumb not visible on long lists (#959)When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
Refactor
-
c12bcfe
(non-src) Apply pedantic lints (#976)Fixes many not yet enabled lints (mostly pedantic) on everything that is not the lib (examples, benchs, tests). Therefore, this is not containing anything that can be a breaking change. Lints are not enabled as that should be the job of #974. I created this as a separate PR as its mostly independent and would only clutter up the diff of #974 even more. Also see https://github.com/ratatui-org/ratatui/pull/974#discussion_r1506458743 ---------
-
8719608
(span) Rename to_aligned_line into into_aligned_line (#993)With the Rust method naming conventions these methods are into methods consuming the Span. Therefore, it's more consistent to use `into_` instead of `to_`. ```rust Span::to_centered_line Span::to_left_aligned_line Span::to_right_aligned_line ``` Are marked deprecated and replaced with the following ```rust Span::into_centered_line Span::into_left_aligned_line Span::into_right_aligned_line ```
-
359204c
(uncategorized) Simplify to io::Result (#1016)Simplifies the code, logic stays exactly the same.
-
8e68db9
(uncategorized) Remove pointless default on internal structs (#980)See #978
Also remove other derives. They are unused and just slow down
compilation.
-
3be189e
(uncategorized) Clippy::thread_local_initializer_can_be_made_const (#974)enabled by default on nightly
-
fdb14dc
(uncategorized) Clippy::redundant_type_annotations (#974) -
9b3b23a
(uncategorized) Remove literal suffix (#974)its not needed and can just be assumed
related:clippy::(un)separated_literal_suffix
-
58b6e0b
(uncategorized) Clippy::should_panic_without_expect (#974)
...
v0.27.0-alpha.3
v0.27.0-alpha.3 - 2024-03-30
Features
-
1cff511
(line) Impl Styled for Line (#968)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
654949b
(list) Add Scroll Padding to Lists (#958)Introduces scroll padding, which allows the api user to request that a certain number of ListItems be kept visible above and below the currently selected item while scrolling. ```rust let list = List::new(items).scroll_padding(1); ```
Fixes:#955
-
26af650
(text) Add push methods for text and line (#998)Adds the following methods to the `Text` and `Line` structs: - Text::push_line - Text::push_span - Line::push_span This allows for adding lines and spans to a text object without having to call methods on the fields directly, which is usefult for incremental construction of text objects.
-
b5bdde0
(text) AddFromIterator
impls forLine
andText
(#967)This adds `FromIterator` impls for `Line` and `Text` that allow creating `Line` and `Text` instances from iterators of `Span` and `Line` instances, respectively. ```rust let line = Line::from_iter(vec!["Hello".blue(), " world!".green()]); let line: Line = iter::once("Hello".blue()) .chain(iter::once(" world!".green())) .collect(); let text = Text::from_iter(vec!["The first line", "The second line"]); let text: Text = iter::once("The first line") .chain(iter::once("The second line")) .collect(); ```
-
12f67e8
(uncategorized) Impl Widget for&str
andString
(#952)Currently, `f.render_widget("hello world".bold(), area)` works but `f.render_widget("hello world", area)` doesn't. This PR changes that my implementing `Widget` for `&str` and `String`. This makes it easier to render strings with no styles as widgets. Example usage: ```rust terminal.draw(|f| f.render_widget("Hello World!", f.size()))?; ``` ---------
Bug Fixes
-
c56f49b
(list) Saturating_sub to fix highlight_symbol overflow (#949)An overflow (pedantically an underflow) can occur if the highlight_symbol is a multi-byte char, and area is reduced to a size less than that char length.
-
943c043
(scrollbar) Dont render on 0 length track (#964)Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0` being smaller than `0.0`)
-
742a5ea
(text) Fix panic when rendering out of bounds (#997)Previously it was possible to cause a panic when rendering to an area outside of the buffer bounds. Instead this now correctly renders nothing to the buffer.
-
f6c4e44
(uncategorized) Ensure that paragraph correctly renders styled text (#992)Paragraph was ignoring the new `Text::style` field added in 0.26.0
Fixes:#990
-
35e971f
(uncategorized) Scrollbar thumb not visible on long lists (#959)When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
Refactor
-
c12bcfe
(non-src) Apply pedantic lints (#976)Fixes many not yet enabled lints (mostly pedantic) on everything that is not the lib (examples, benchs, tests). Therefore, this is not containing anything that can be a breaking change. Lints are not enabled as that should be the job of #974. I created this as a separate PR as its mostly independent and would only clutter up the diff of #974 even more. Also see https://github.com/ratatui-org/ratatui/pull/974#discussion_r1506458743 ---------
-
8719608
(span) Rename to_aligned_line into into_aligned_line (#993)With the Rust method naming conventions these methods are into methods consuming the Span. Therefore, it's more consistent to use `into_` instead of `to_`. ```rust Span::to_centered_line Span::to_left_aligned_line Span::to_right_aligned_line ``` Are marked deprecated and replaced with the following ```rust Span::into_centered_line Span::into_left_aligned_line Span::into_right_aligned_line ```
-
8e68db9
(uncategorized) Remove pointless default on internal structs (#980)See #978
Also remove other derives. They are unused and just slow down
compilation.
-
3be189e
(uncategorized) Clippy::thread_local_initializer_can_be_made_const (#974)enabled by default on nightly
-
fdb14dc
(uncategorized) Clippy::redundant_type_annotations (#974) -
9b3b23a
(uncategorized) Remove literal suffix (#974)its not needed and can just be assumed
related:clippy::(un)separated_literal_suffix
-
58b6e0b
(uncategorized) Clippy::should_panic_without_expect (#974) -
c870a41
(uncategorized) Clippy::many_single_char_names (#974) -
fcbea9e
(uncategorized) Clippy::uninlined_format_args (#974) -
[14b24e7](https:...