diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0f8a6aca..76ba2a5f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5124 +1,5433 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-## [0.26.2](https://github.com/ratatui-org/ratatui/releases/tag/v0.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**:
-
-### Features
-
-- [11b452d](https://github.com/ratatui-org/ratatui/commit/11b452d56fe590188ee7a53fa2dde95513b1a4c7)
- *(layout)* Mark various functions as const by @EdJoPaTo in [#951](https://github.com/ratatui-org/ratatui/pull/951)
-
-- [1cff511](https://github.com/ratatui-org/ratatui/commit/1cff51193466f5a94d202b6233d56889eccf6d7b)
- *(line)* Impl Styled for Line by @joshka in [#968](https://github.com/ratatui-org/ratatui/pull/968)
-
- ````text
- 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](https://github.com/ratatui-org/ratatui/commit/654949bb00b4522130642f9ad50ab4d9095d921b)
- *(list)* Add Scroll Padding to Lists by @CameronBarnes in [#958](https://github.com/ratatui-org/ratatui/pull/958)
-
- ````text
- 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:https://github.com/ratatui-org/ratatui/pull/955
-
-- [26af650](https://github.com/ratatui-org/ratatui/commit/26af65043ee9f165459dec228d12eaeed9997d92)
- *(text)* Add push methods for text and line by @joshka in [#998](https://github.com/ratatui-org/ratatui/pull/998)
-
- ````text
- 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 useful for incremental
- construction of text objects.
- ````
-
-- [b5bdde0](https://github.com/ratatui-org/ratatui/commit/b5bdde079e0e1eda98b9b1bbbba011b770e5b167)
- *(text)* Add `FromIterator` impls for `Line` and `Text` by @joshka in [#967](https://github.com/ratatui-org/ratatui/pull/967)
-
- ````text
- 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](https://github.com/ratatui-org/ratatui/commit/12f67e810fad0f907546408192a2380b590ff7bd)
- *(uncategorized)* Impl Widget for `&str` and `String` by @kdheepak in [#952](https://github.com/ratatui-org/ratatui/pull/952)
-
- ````text
- 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](https://github.com/ratatui-org/ratatui/commit/02071607848c51250b4663722c52e19c8ce1c5e2)
- *(line)* Line truncation respects alignment by @TadoTheMiner in [#987](https://github.com/ratatui-org/ratatui/pull/987)
-
- ````text
- 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:https://github.com/ratatui-org/ratatui/issues/932
-
-- [c56f49b](https://github.com/ratatui-org/ratatui/commit/c56f49b9fb1c7f1c8c97749119e85f81882ca9a9)
- *(list)* Saturating_sub to fix highlight_symbol overflow by @mrjackwills in [#949](https://github.com/ratatui-org/ratatui/pull/949)
-
- ````text
- 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.
- ````
-
-- [b7778e5](https://github.com/ratatui-org/ratatui/commit/b7778e5cd15d0d4b28f7bbb8b3c62950748e333a)
- *(paragraph)* Unit test typo by @joshka in [#1022](https://github.com/ratatui-org/ratatui/pull/1022)
-
-- [943c043](https://github.com/ratatui-org/ratatui/commit/943c0431d968a82b23a2f31527f32e57f86f8a7c)
- *(scrollbar)* Dont render on 0 length track by @EdJoPaTo in [#964](https://github.com/ratatui-org/ratatui/pull/964)
-
- ````text
- Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0`
- being smaller than `0.0`)
- ````
-
-- [742a5ea](https://github.com/ratatui-org/ratatui/commit/742a5ead066bec14047f6ab7ffa3ac8307eea715)
- *(text)* Fix panic when rendering out of bounds by @joshka in [#997](https://github.com/ratatui-org/ratatui/pull/997)
-
- ````text
- 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](https://github.com/ratatui-org/ratatui/commit/f6c4e447e65fe10f4fc7fcc9e9c4312acad41096)
- *(uncategorized)* Ensure that paragraph correctly renders styled text by @joshka in [#992](https://github.com/ratatui-org/ratatui/pull/992)
-
- ````text
- Paragraph was ignoring the new `Text::style` field added in 0.26.0
- ````
-
- Fixes:https://github.com/ratatui-org/ratatui/issues/990
-
-- [35e971f](https://github.com/ratatui-org/ratatui/commit/35e971f7ebb0deadc613b561b15511abd48bdb54)
- *(uncategorized)* Scrollbar thumb not visible on long lists by @ThomasMiz in [#959](https://github.com/ratatui-org/ratatui/pull/959)
-
- ````text
- When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
- ````
-
-### Refactor
-
-- [6fd5f63](https://github.com/ratatui-org/ratatui/commit/6fd5f631bbd58156d9fcae196040bb0248097819)
- *(lint)* Prefer idiomatic for loops by @EdJoPaTo
-
-- [37b957c](https://github.com/ratatui-org/ratatui/commit/37b957c7e167a7ecda07b8a60cee5de71efcc55e)
- *(lints)* Add lints to scrollbar by @EdJoPaTo
-
-- [c12bcfe](https://github.com/ratatui-org/ratatui/commit/c12bcfefa26529610886040bd96f2b6762436b15)
- *(non-src)* Apply pedantic lints by @EdJoPaTo in [#976](https://github.com/ratatui-org/ratatui/pull/976)
-
- ````text
- Fixes 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](https://github.com/ratatui-org/ratatui/commit/8719608bdaf32ba92bdfdd60569cf73f7070a618)
- *(span)* Rename to_aligned_line into into_aligned_line by @EdJoPaTo in [#993](https://github.com/ratatui-org/ratatui/pull/993)
-
- ````text
- 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
- ```
- ````
-
-- [b831c56](https://github.com/ratatui-org/ratatui/commit/b831c5688c6f1fbfa6ae2bcd70d803a54fcf0196)
- *(widget-ref)* Clippy::needless_pass_by_value by @EdJoPaTo
-
-- [359204c](https://github.com/ratatui-org/ratatui/commit/359204c9298cc26ea21807d886d596de0329bacc)
- *(uncategorized)* Simplify to io::Result by @EdJoPaTo in [#1016](https://github.com/ratatui-org/ratatui/pull/1016)
-
- ````text
- Simplifies the code, logic stays exactly the same.
- ````
-
-- [8e68db9](https://github.com/ratatui-org/ratatui/commit/8e68db9e2f57fcbf7cb5140006bbbd4dd80bf907)
- *(uncategorized)* Remove pointless default on internal structs by @EdJoPaTo in [#980](https://github.com/ratatui-org/ratatui/pull/980)
-
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+## [0.26.3](https://github.com/ratatui-org/ratatui/releases/tag/v0.26.3) - 2024-05-19
+
+We are happy to announce a brand new [**Ratatui Forum**](https://forum.ratatui.rs) 🐭 for Rust & TUI enthusiasts.
+
+This is a patch release that fixes the unicode truncation bug, adds performance and quality of life improvements.
+
+✨ **Release highlights**:
+
+### Features
+
+- [97ee102](https://github.com/ratatui-org/ratatui/commit/97ee102f179eed4f309d575495f0e4c8359b4f04) *(buffer)* Track_caller for index_of by @EdJoPaTo in [#1046](https://github.com/ratatui-org/ratatui/pull/1046)
+**
+ ````text
+ The caller put in the wrong x/y -> the caller is the cause.
+ ````
+
+- [bf09234](https://github.com/ratatui-org/ratatui/commit/bf0923473c5cb7f2cff24b010f0072b5ce2f8cf2) *(table)* Make TableState::new const by @EdJoPaTo in [#1040](https://github.com/ratatui-org/ratatui/pull/1040)
+
+- [eb281df](https://github.com/ratatui-org/ratatui/commit/eb281df97482c2aab66875dc27a49a316a4d7fd7) *(uncategorized)* Use inner Display implementation by @EdJoPaTo in [#1097](https://github.com/ratatui-org/ratatui/pull/1097)
+
+- [ec763af](https://github.com/ratatui-org/ratatui/commit/ec763af8512df731799c8f30c38c37252068a4c4) *(uncategorized)* Make Stylize's `.bg(color)` generic by @kdheepak in [#1099](https://github.com/ratatui-org/ratatui/pull/1099)
+
+ ````text
+ This PR makes `.bg(color)` generic accepting anything that can be
+ converted into `Color`; similar to the `.fg(color)` method on the same
+ trait
+ ````
+
+- [4d1784f](https://github.com/ratatui-org/ratatui/commit/4d1784f2de104b88e998216addaae96ab018f44f) *(uncategorized)* Re-export ParseColorError as style::ParseColorError by @joshka in [#1086](https://github.com/ratatui-org/ratatui/pull/1086)
+
+ Fixes:https://github.com/ratatui-org/ratatui/issues/1085
+
+### Bug Fixes
+
+- [366cbae](https://github.com/ratatui-org/ratatui/commit/366cbae09fb2bf5b5d7f489de1ff15f930569f05) *(buffer)* Fix Debug panic and fix formatting of overridden parts by @EdJoPaTo in [#1098](https://github.com/ratatui-org/ratatui/pull/1098)
+
+ ````text
+ Fix panic in `Debug for Buffer` when `width == 0`.
+ Also corrects the output when symbols are overridden.
+ ````
+
+- [4392759](https://github.com/ratatui-org/ratatui/commit/43927595012254b33a3901e0d2e5d28164ad04f0) *(examples)* Changed user_input example to work with multi-byte unicode chars by @OkieOth in [#1069](https://github.com/ratatui-org/ratatui/pull/1069)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/20fc0ddfca97a863c9ec7537bcf283d3d49baab4) *(examples)* Fix key handling in constraints by @psobolik in [#1066](https://github.com/ratatui-org/ratatui/pull/1066)
+
+ ````text
+ Add check for `KeyEventKind::Press` to constraints example's event
+ handler to eliminate double keys
+ on Windows.
+ ````
+
+ Fixes:#1062
+
+---------
+
+- [f4637d4](https://github.com/ratatui-org/ratatui/commit/f4637d40c35e068fd60d17c9a42b9114667c9861) *(reflow)* Allow wrapping at zero width whitespace by @kxxt in [#1074](https://github.com/ratatui-org/ratatui/pull/1074)
+
+- [699c2d7](https://github.com/ratatui-org/ratatui/commit/699c2d7c8d0e8c2023cf75350b66535a7b48a102) *(uncategorized)* Unicode truncation bug by @joshka in [#1089](https://github.com/ratatui-org/ratatui/pull/1089)
+
+ ````text
+ - 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:https://github.com/ratatui-org/ratatui/issues/1032
+
+- [b30411d](https://github.com/ratatui-org/ratatui/commit/b30411d1c71cb7b43b7232226514caa54a56c25f) *(uncategorized)* Termwiz underline color test by @joshka in [#1094](https://github.com/ratatui-org/ratatui/pull/1094)
+
+ ````text
+ Fixes code that doesn't compile in the termwiz tests when
+ underline-color feature is enabled.
+ ````
+
+- [5f1e119](https://github.com/ratatui-org/ratatui/commit/5f1e119563043e97e5c2c5e7dd48ccd75e17791e) *(uncategorized)* Correct feature flag typo for termwiz by @joshka in [#1088](https://github.com/ratatui-org/ratatui/pull/1088)
+
+ ````text
+ underline-color was incorrectly spelt as underline_color
+ ````
+
+- [0a16496](https://github.com/ratatui-org/ratatui/commit/0a164965ea2b163433871717cee4fd774a23ee5a) *(uncategorized)* Use `to_string` to serialize Color by @SleepySwords in [#934](https://github.com/ratatui-org/ratatui/pull/934)
+
+ ````text
+ Since 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](https://github.com/ratatui-org/ratatui/commit/2cfe82a47eb34baa25f474db7be364de7b95374a) *(buffer)* Deprecate assert_buffer_eq! in favor of assert_eq! by @EdJoPaTo in [#1007](https://github.com/ratatui-org/ratatui/pull/1007)
+
+ ````text
+ - 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](https://github.com/ratatui-org/ratatui/commit/baedc39494ea70292b1d247934420a20d0544b7e) *(buffer)* Simplify set_stringn logic by @EdJoPaTo in [#1083](https://github.com/ratatui-org/ratatui/pull/1083)
+
+- [9bd89c2](https://github.com/ratatui-org/ratatui/commit/9bd89c218afb1f3999dce1bfe6edea5b7442966d) *(clippy)* Enable breaking lint checks by @EdJoPaTo in [#988](https://github.com/ratatui-org/ratatui/pull/988)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/bef5bcf750375a78b11ae06f217091b2463e842f) *(example)* Remove pointless new method by @EdJoPaTo in [#1038](https://github.com/ratatui-org/ratatui/pull/1038)
+
+ ````text
+ Use `App::default()` directly.
+ ````
+
+- [f3172c5](https://github.com/ratatui-org/ratatui/commit/f3172c59d4dae6ce4909251976a39c21d88f1907) *(gauge)* Fix internal typo by @EdJoPaTo in [#1048](https://github.com/ratatui-org/ratatui/pull/1048)
+
+### Documentation
+
+- [da1ade7](https://github.com/ratatui-org/ratatui/commit/da1ade7b2e4d8909ea0001483780d2c907349fd6) *(github)* Update code owners about past maintainers by @orhun in [#1073](https://github.com/ratatui-org/ratatui/pull/1073)
+
+ ````text
+ As per suggestion in
+ https://github.com/ratatui-org/ratatui/pull/1067#issuecomment-2079766990
+
+ It's good for historical purposes!
+ ````
+
+- [3687f78](https://github.com/ratatui-org/ratatui/commit/3687f78f6a06bd175eda3e19819f6dc68012fb59) *(github)* Update code owners by @orhun in [#1067](https://github.com/ratatui-org/ratatui/pull/1067)
+
+ ````text
+ Removes the team members that are not able to review PRs recently (with
+ their approval ofc)
+ ````
+
+- [839cca2](https://github.com/ratatui-org/ratatui/commit/839cca20bf3f109352ea43f1119e13c879e04b95) *(table)* Fix typo in docs for highlight_symbol by @kdheepak in [#1108](https://github.com/ratatui-org/ratatui/pull/1108)
+
+- [f945a0b](https://github.com/ratatui-org/ratatui/commit/f945a0bcff644c1fa2ad3caaa87cf2b640beaf46) *(test)* Fix typo in TestBackend documentation by @orhun in [#1107](https://github.com/ratatui-org/ratatui/pull/1107)
+
+- [828d17a](https://github.com/ratatui-org/ratatui/commit/828d17a3f5f449255d7981bb462bf48382c7cb2e) *(uncategorized)* Add minimal example by @joshka in [#1114](https://github.com/ratatui-org/ratatui/pull/1114)
+
+- [e95230b](https://github.com/ratatui-org/ratatui/commit/e95230beda9f86dfb7a9bc1c1167e5a91a2748c3) *(uncategorized)* Add note about scrollbar state content length by @Utagai in [#1077](https://github.com/ratatui-org/ratatui/pull/1077)
+
+### Performance
+
+- [366c2a0](https://github.com/ratatui-org/ratatui/commit/366c2a0e6d17810b26ba37918e72c2f784176d2c) *(block)* Use Block::bordered by @EdJoPaTo in [#1041](https://github.com/ratatui-org/ratatui/pull/1041)
+
+ `Block::bordered()` is shorter than
+
+ `Block::new().borders(Borders::ALL)`, requires one less import
+(`Borders`) and in case `Block::default()` was used before can even be
+`const`.
+
+- [2e71c18](https://github.com/ratatui-org/ratatui/commit/2e71c1874e2de6d9f2bd21622246e55484a9fc62) *(buffer)* Simplify Buffer::filled with macro by @EdJoPaTo in [#1036](https://github.com/ratatui-org/ratatui/pull/1036)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/81b96338ea41f9e5fbb0868808a0b450f31eef41) *(calendar)* Use const fn by @EdJoPaTo in [#1039](https://github.com/ratatui-org/ratatui/pull/1039)
+
+ ````text
+ Also, do the comparison without `as u8`. Stays the same at runtime and
+ is cleaner code.
+ ````
+
+- [c442dfd](https://github.com/ratatui-org/ratatui/commit/c442dfd1ad4896e7abeeaac1754b94bae1f8d014) *(canvas)* Change map data to const instead of static by @EdJoPaTo in [#1037](https://github.com/ratatui-org/ratatui/pull/1037)
+
+- [1706b0a](https://github.com/ratatui-org/ratatui/commit/1706b0a3e434c51dfed9af88470f47162b615c33) *(crossterm)* Speed up combined fg and bg color changes by up to 20% by @joshka in [#1072](https://github.com/ratatui-org/ratatui/pull/1072)
+
+- [1a4bb1c](https://github.com/ratatui-org/ratatui/commit/1a4bb1cbb8dc98ab3c9ecfce225a591b0f7a36bc) *(layout)* Avoid allocating memory when using split ergonomic utils by @tranzystorekk in [#1105](https://github.com/ratatui-org/ratatui/pull/1105)
+
+ ````text
+ Don't create intermediate vec in `Layout::areas` and
+ `Layout::spacers` when there's no need for one.
+ ````
+
+### Styling
+
+- [aa4260f](https://github.com/ratatui-org/ratatui/commit/aa4260f92c869ed77123fab700f9f20b059bbe07) *(uncategorized)* Use std::fmt instead of importing Debug and Display by @joshka in [#1087](https://github.com/ratatui-org/ratatui/pull/1087)
+
+ ````text
+ This 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)
+ ````
+
+### Testing
+
+- [3cc29bd](https://github.com/ratatui-org/ratatui/commit/3cc29bdada096283f1fa89d0a610fa6fd5425f9b) *(block)* Use rstest to simplify test cases by @EdJoPaTo in [#1095](https://github.com/ratatui-org/ratatui/pull/1095)
+
+### Miscellaneous Tasks
+
+- [5fbb77a](https://github.com/ratatui-org/ratatui/commit/5fbb77ad205ccff763d71899c2f5a34560d25b92) *(readme)* Use terminal theme for badges by @TadoTheMiner in [#1026](https://github.com/ratatui-org/ratatui/pull/1026)
+
+ ````text
+ The 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](https://github.com/ratatui-org/ratatui/commit/bef2bc1e7c012ecbf357ac54a5262304646b292d) *(cargo)* Add homepage to Cargo.toml by @joshka in [#1080](https://github.com/ratatui-org/ratatui/pull/1080)
+
+- [76e5fe5](https://github.com/ratatui-org/ratatui/commit/76e5fe5a9a1934aa7cce8f0d48c1c9035ac0bf41) *(uncategorized)* Revert "Make Stylize's `.bg(color)` generic" by @kdheepak in [#1102](https://github.com/ratatui-org/ratatui/pull/1102)
+
+ ````text
+ This reverts commit ec763af8512df731799c8f30c38c37252068a4c4 from #1099
+ ````
+
+- [64eb391](https://github.com/ratatui-org/ratatui/commit/64eb3913a4776db290baeb4179e00d2686d42934) *(uncategorized)* Fixup cargo lint for windows targets by @joshka in [#1071](https://github.com/ratatui-org/ratatui/pull/1071)
+
+ ````text
+ Crossterm brings in multiple versions of the same dep
+ ````
+
+- [326a461](https://github.com/ratatui-org/ratatui/commit/326a461f9a345ba853d57afefc8d77ba0b0b5a14) *(uncategorized)* Add package categories field by @mcskware in [#1035](https://github.com/ratatui-org/ratatui/pull/1035)
+
+ ````text
+ Add 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
+
+- [4955380](https://github.com/ratatui-org/ratatui/commit/4955380932ab4d657be15dd6c65f48334795c785) *(uncategorized)* Remove pre-push hooks by @joshka in [#1115](https://github.com/ratatui-org/ratatui/pull/1115)
+
+- [28e81c0](https://github.com/ratatui-org/ratatui/commit/28e81c0714d55f0103d9f075609bcf7e5f551fb1) *(uncategorized)* Add underline-color to all features flag in makefile by @joshka in [#1100](https://github.com/ratatui-org/ratatui/pull/1100)
+
+- [c75aa19](https://github.com/ratatui-org/ratatui/commit/c75aa1990f5c1e7e86de0fafc9ce0c1b1dcac3ea) *(uncategorized)* Add clippy::cargo lint by @joshka in [#1053](https://github.com/ratatui-org/ratatui/pull/1053)
+
+ ````text
+ Followup 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](https://github.com/ratatui-org/ratatui/pull/1077)
+* @kxxt made their first contribution in [#1074](https://github.com/ratatui-org/ratatui/pull/1074)
+* @OkieOth made their first contribution in [#1069](https://github.com/ratatui-org/ratatui/pull/1069)
+* @psobolik made their first contribution in [#1066](https://github.com/ratatui-org/ratatui/pull/1066)
+* @SleepySwords made their first contribution in [#934](https://github.com/ratatui-org/ratatui/pull/934)
+* @mcskware made their first contribution in [#1035](https://github.com/ratatui-org/ratatui/pull/1035)
+
+**Full Changelog**: https://github.com/ratatui-org/ratatui/compare/v0.26.2...v0.26.3
+
+## [0.26.2](https://github.com/ratatui-org/ratatui/releases/tag/v0.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**:
+
+### Features
+
+- [11b452d](https://github.com/ratatui-org/ratatui/commit/11b452d56fe590188ee7a53fa2dde95513b1a4c7)
+ *(layout)* Mark various functions as const by @EdJoPaTo in [#951](https://github.com/ratatui-org/ratatui/pull/951)
+
+- [1cff511](https://github.com/ratatui-org/ratatui/commit/1cff51193466f5a94d202b6233d56889eccf6d7b)
+ *(line)* Impl Styled for Line by @joshka in [#968](https://github.com/ratatui-org/ratatui/pull/968)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/654949bb00b4522130642f9ad50ab4d9095d921b)
+ *(list)* Add Scroll Padding to Lists by @CameronBarnes in [#958](https://github.com/ratatui-org/ratatui/pull/958)
+
+ ````text
+ 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:https://github.com/ratatui-org/ratatui/pull/955
+
+- [26af650](https://github.com/ratatui-org/ratatui/commit/26af65043ee9f165459dec228d12eaeed9997d92)
+ *(text)* Add push methods for text and line by @joshka in [#998](https://github.com/ratatui-org/ratatui/pull/998)
+
+ ````text
+ 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 useful for incremental
+ construction of text objects.
+ ````
+
+- [b5bdde0](https://github.com/ratatui-org/ratatui/commit/b5bdde079e0e1eda98b9b1bbbba011b770e5b167)
+ *(text)* Add `FromIterator` impls for `Line` and `Text` by @joshka in [#967](https://github.com/ratatui-org/ratatui/pull/967)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/12f67e810fad0f907546408192a2380b590ff7bd)
+ *(uncategorized)* Impl Widget for `&str` and `String` by @kdheepak in [#952](https://github.com/ratatui-org/ratatui/pull/952)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/02071607848c51250b4663722c52e19c8ce1c5e2)
+ *(line)* Line truncation respects alignment by @TadoTheMiner in [#987](https://github.com/ratatui-org/ratatui/pull/987)
+
+ ````text
+ 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:https://github.com/ratatui-org/ratatui/issues/932
+
+- [c56f49b](https://github.com/ratatui-org/ratatui/commit/c56f49b9fb1c7f1c8c97749119e85f81882ca9a9)
+ *(list)* Saturating_sub to fix highlight_symbol overflow by @mrjackwills in [#949](https://github.com/ratatui-org/ratatui/pull/949)
+
+ ````text
+ 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.
+ ````
+
+- [b7778e5](https://github.com/ratatui-org/ratatui/commit/b7778e5cd15d0d4b28f7bbb8b3c62950748e333a)
+ *(paragraph)* Unit test typo by @joshka in [#1022](https://github.com/ratatui-org/ratatui/pull/1022)
+
+- [943c043](https://github.com/ratatui-org/ratatui/commit/943c0431d968a82b23a2f31527f32e57f86f8a7c)
+ *(scrollbar)* Dont render on 0 length track by @EdJoPaTo in [#964](https://github.com/ratatui-org/ratatui/pull/964)
+
+ ````text
+ Fixes a panic when `track_length - 1` is used. (clamp panics on `-1.0`
+ being smaller than `0.0`)
+ ````
+
+- [742a5ea](https://github.com/ratatui-org/ratatui/commit/742a5ead066bec14047f6ab7ffa3ac8307eea715)
+ *(text)* Fix panic when rendering out of bounds by @joshka in [#997](https://github.com/ratatui-org/ratatui/pull/997)
+
+ ````text
+ 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](https://github.com/ratatui-org/ratatui/commit/f6c4e447e65fe10f4fc7fcc9e9c4312acad41096)
+ *(uncategorized)* Ensure that paragraph correctly renders styled text by @joshka in [#992](https://github.com/ratatui-org/ratatui/pull/992)
+
+ ````text
+ Paragraph was ignoring the new `Text::style` field added in 0.26.0
+ ````
+
+ Fixes:https://github.com/ratatui-org/ratatui/issues/990
+
+- [35e971f](https://github.com/ratatui-org/ratatui/commit/35e971f7ebb0deadc613b561b15511abd48bdb54)
+ *(uncategorized)* Scrollbar thumb not visible on long lists by @ThomasMiz in [#959](https://github.com/ratatui-org/ratatui/pull/959)
+
+ ````text
+ When displaying somewhat-long lists, the `Scrollbar` widget sometimes did not display a thumb character, and only the track will be visible.
+ ````
+
+### Refactor
+
+- [6fd5f63](https://github.com/ratatui-org/ratatui/commit/6fd5f631bbd58156d9fcae196040bb0248097819)
+ *(lint)* Prefer idiomatic for loops by @EdJoPaTo
+
+- [37b957c](https://github.com/ratatui-org/ratatui/commit/37b957c7e167a7ecda07b8a60cee5de71efcc55e)
+ *(lints)* Add lints to scrollbar by @EdJoPaTo
+
+- [c12bcfe](https://github.com/ratatui-org/ratatui/commit/c12bcfefa26529610886040bd96f2b6762436b15)
+ *(non-src)* Apply pedantic lints by @EdJoPaTo in [#976](https://github.com/ratatui-org/ratatui/pull/976)
+
+ ````text
+ Fixes 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](https://github.com/ratatui-org/ratatui/commit/8719608bdaf32ba92bdfdd60569cf73f7070a618)
+ *(span)* Rename to_aligned_line into into_aligned_line by @EdJoPaTo in [#993](https://github.com/ratatui-org/ratatui/pull/993)
+
+ ````text
+ 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
+ ```
+ ````
+
+- [b831c56](https://github.com/ratatui-org/ratatui/commit/b831c5688c6f1fbfa6ae2bcd70d803a54fcf0196)
+ *(widget-ref)* Clippy::needless_pass_by_value by @EdJoPaTo
+
+- [359204c](https://github.com/ratatui-org/ratatui/commit/359204c9298cc26ea21807d886d596de0329bacc)
+ *(uncategorized)* Simplify to io::Result by @EdJoPaTo in [#1016](https://github.com/ratatui-org/ratatui/pull/1016)
+
+ ````text
+ Simplifies the code, logic stays exactly the same.
+ ````
+
+- [8e68db9](https://github.com/ratatui-org/ratatui/commit/8e68db9e2f57fcbf7cb5140006bbbd4dd80bf907)
+ *(uncategorized)* Remove pointless default on internal structs by @EdJoPaTo in [#980](https://github.com/ratatui-org/ratatui/pull/980)
+
See #978
Also remove other derives. They are unused and just slow down
-compilation.
-
-- [3be189e](https://github.com/ratatui-org/ratatui/commit/3be189e3c6ebd418d13138ff32bc4a749dc840cf)
- *(uncategorized)* Clippy::thread_local_initializer_can_be_made_const by @EdJoPaTo
-
- ````text
- enabled by default on nightly
- ````
-
-- [5c4efac](https://github.com/ratatui-org/ratatui/commit/5c4efacd1d70bb295d90ffaa73853dc206c187fb)
- *(uncategorized)* Clippy::map_err_ignore by @EdJoPaTo
-
-- [bbb6d65](https://github.com/ratatui-org/ratatui/commit/bbb6d65e063df9a74ab6487b2216183c1fdd7230)
- *(uncategorized)* Clippy::else_if_without_else by @EdJoPaTo
-
-- [fdb14dc](https://github.com/ratatui-org/ratatui/commit/fdb14dc7cd69788e2ed20709e767f7631b11ffa2)
- *(uncategorized)* Clippy::redundant_type_annotations by @EdJoPaTo
-
-- [9b3b23a](https://github.com/ratatui-org/ratatui/commit/9b3b23ac14518a1ef23065d4a5da0fb047b18213)
- *(uncategorized)* Remove literal suffix by @EdJoPaTo
-
- ````text
- its not needed and can just be assumed
- ````
-
- related:clippy::(un)separated_literal_suffix
-
-- [58b6e0b](https://github.com/ratatui-org/ratatui/commit/58b6e0be0f4db3d90005e130e4b84cd865179785)
- *(uncategorized)* Clippy::should_panic_without_expect by @EdJoPaTo
-
-- [c870a41](https://github.com/ratatui-org/ratatui/commit/c870a41057ac0c14c2e72e762b37689dc32e7b23)
- *(uncategorized)* Clippy::many_single_char_names by @EdJoPaTo
-
-- [a6036ad](https://github.com/ratatui-org/ratatui/commit/a6036ad78911653407f607f5efa556a055d3dce9)
- *(uncategorized)* Clippy::similar_names by @EdJoPaTo
-
-- [060d26b](https://github.com/ratatui-org/ratatui/commit/060d26b6dc6e1027dbf46ae98b0ebba83701f941)
- *(uncategorized)* Clippy::match_same_arms by @EdJoPaTo
-
-- [fcbea9e](https://github.com/ratatui-org/ratatui/commit/fcbea9ee68591344a29a7b2e83f1c8c878857aeb)
- *(uncategorized)* Clippy::uninlined_format_args by @EdJoPaTo
-
-- [14b24e7](https://github.com/ratatui-org/ratatui/commit/14b24e75858af48f39d5880e7f6c9adeac1b1da9)
- *(uncategorized)* Clippy::if_not_else by @EdJoPaTo
-
-- [5ed1f43](https://github.com/ratatui-org/ratatui/commit/5ed1f43c627053f25d9ee711677ebec6cb8fcd85)
- *(uncategorized)* Clippy::redundant_closure_for_method_calls by @EdJoPaTo
-
-- [c8c7924](https://github.com/ratatui-org/ratatui/commit/c8c7924e0ca84351f5ed5c54e79611ce16d4dc37)
- *(uncategorized)* Clippy::too_many_lines by @EdJoPaTo
-
-- [e3afe7c](https://github.com/ratatui-org/ratatui/commit/e3afe7c8a14c1cffd7de50782a7acf0f95f41673)
- *(uncategorized)* Clippy::unreadable_literal by @EdJoPaTo
-
-- [a1f54de](https://github.com/ratatui-org/ratatui/commit/a1f54de7d60fa6c57be29bf8f02a675e58b7b9c2)
- *(uncategorized)* Clippy::bool_to_int_with_if by @EdJoPaTo
-
-- [b8ea190](https://github.com/ratatui-org/ratatui/commit/b8ea190bf2cde8c18e2ac8276d2eb57d219db263)
- *(uncategorized)* Clippy::cast_lossless by @EdJoPaTo
-
-- [0de5238](https://github.com/ratatui-org/ratatui/commit/0de5238ed3613f2d663f5e9628ca7b2aa205ed02)
- *(uncategorized)* Dead_code by @EdJoPaTo
-
- ````text
- enabled by default, only detected by nightly yet
- ````
-
-- [df5dddf](https://github.com/ratatui-org/ratatui/commit/df5dddfbc9c679d15a5a90ea79bb1f8946d5cb9c)
- *(uncategorized)* Unused_imports by @EdJoPaTo
-
- ````text
- enabled by default, only detected on nightly yet
- ````
-
-- [f1398ae](https://github.com/ratatui-org/ratatui/commit/f1398ae6cb1abd32106923d64844b482c7ba6f82)
- *(uncategorized)* Clippy::useless_vec by @EdJoPaTo
-
- ````text
- Lint enabled by default but only nightly finds this yet
- ````
-
-- [525848f](https://github.com/ratatui-org/ratatui/commit/525848ff4e066526d402fecf1d5b9c63cff1f22a)
- *(uncategorized)* Manually apply clippy::use_self for impl with lifetimes by @EdJoPaTo
-
-- [660c718](https://github.com/ratatui-org/ratatui/commit/660c7183c7a10dc453d80dfb651d9534536960b9)
- *(uncategorized)* Clippy::empty_line_after_doc_comments by @EdJoPaTo
-
-- [ab951fa](https://github.com/ratatui-org/ratatui/commit/ab951fae8166c9321728ba942b48552dfe4d9c55)
- *(uncategorized)* Clippy::return_self_not_must_use by @EdJoPaTo
-
-- [3cd4369](https://github.com/ratatui-org/ratatui/commit/3cd436917649a93b4b80d0c4a0343284e0585522)
- *(uncategorized)* Clippy::doc_markdown by @EdJoPaTo
-
-- [9bc014d](https://github.com/ratatui-org/ratatui/commit/9bc014d7f16efdb70fcd6b6b786fe74eac7b9bdf)
- *(uncategorized)* Clippy::items_after_statements by @EdJoPaTo
-
-- [36a0cd5](https://github.com/ratatui-org/ratatui/commit/36a0cd56e5645533a1d6c2720536fa10a56b0d40)
- *(uncategorized)* Clippy::deref_by_slicing by @EdJoPaTo
-
-- [f7f6692](https://github.com/ratatui-org/ratatui/commit/f7f66928a8833532a3bc97292665640285e7aafa)
- *(uncategorized)* Clippy::equatable_if_let by @EdJoPaTo
-
-- [01418eb](https://github.com/ratatui-org/ratatui/commit/01418eb7c2e1874cb4070828c485d81ea171b18d)
- *(uncategorized)* Clippy::default_trait_access by @EdJoPaTo
-
-- [8536760](https://github.com/ratatui-org/ratatui/commit/8536760e7802a498f7c6d9fe8fb4c7920a1c6e71)
- *(uncategorized)* Clippy::inefficient_to_string by @EdJoPaTo
-
-- [a558b19](https://github.com/ratatui-org/ratatui/commit/a558b19c9a7b90a1ed3f309301f49f0b483e02ec)
- *(uncategorized)* Clippy::implicit_clone by @EdJoPaTo
-
-- [5b00e3a](https://github.com/ratatui-org/ratatui/commit/5b00e3aae98cb5c20c10bec944948a75ac83f956)
- *(uncategorized)* Clippy::use_self by @EdJoPaTo
-
-- [27680c0](https://github.com/ratatui-org/ratatui/commit/27680c05ce1670f026ad23c446ada321c1c755f0)
- *(uncategorized)* Clippy::semicolon_if_nothing_returned by @EdJoPaTo
-
-### Documentation
-
-- [14461c3](https://github.com/ratatui-org/ratatui/commit/14461c3a3554c95905ebca433fc3d4dae1e1acda)
- *(breaking-changes)* Typos and markdownlint by @EdJoPaTo in [#1009](https://github.com/ratatui-org/ratatui/pull/1009)
-
-- [d0067c8](https://github.com/ratatui-org/ratatui/commit/d0067c8815d5244d319934d58a9366c8ad36b3e5)
- *(license)* Update copyright years by @orhun in [#962](https://github.com/ratatui-org/ratatui/pull/962)
-
-- [88bfb5a](https://github.com/ratatui-org/ratatui/commit/88bfb5a43027cf3410ad560772c5bfdbaa3d58b7)
- *(text)* Update Text and Line docs by @joshka in [#969](https://github.com/ratatui-org/ratatui/pull/969)
-
-- [3b002fd](https://github.com/ratatui-org/ratatui/commit/3b002fdcab964ce3f65f55dc8053d9678ae247a3)
- *(uncategorized)* Update incompatible code warning in examples readme by @joshka in [#1013](https://github.com/ratatui-org/ratatui/pull/1013)
-
-### Performance
-
-- [e02f476](https://github.com/ratatui-org/ratatui/commit/e02f4768ce2ee30473200fe98e2687e42acb9c33)
- *(borders)* Allow border!() in const by @EdJoPaTo in [#977](https://github.com/ratatui-org/ratatui/pull/977)
-
- ````text
- This allows more compiler optimizations when the macro is used.
- ````
-
-- [541f0f9](https://github.com/ratatui-org/ratatui/commit/541f0f99538762a07d68a71b2989ecc6ff6f71ef)
- *(cell)* Use const CompactString::new_inline by @EdJoPaTo in [#979](https://github.com/ratatui-org/ratatui/pull/979)
-
- ````text
- Some minor find when messing around trying to `const` all the things.
-
- While `reset()` and `default()` can not be `const` it's still a benefit
- when their contents are.
- ````
-
-- [65e7923](https://github.com/ratatui-org/ratatui/commit/65e792375396c3160d76964ef0dfc4fb1e53be41)
- *(scrollbar)* Const creation by @EdJoPaTo in [#963](https://github.com/ratatui-org/ratatui/pull/963)
-
- ````text
- A bunch of `const fn` allow for more performance and `Default` now uses the `const` new implementations.
- ````
-
-- [8195f52](https://github.com/ratatui-org/ratatui/commit/8195f526cb4b321f337dcbe9e689cc7f6eb84065)
- *(uncategorized)* Clippy::needless_pass_by_value by @EdJoPaTo
-
-- [183c07e](https://github.com/ratatui-org/ratatui/commit/183c07ef436cbb8fb0bec418042b44b4fedd836f)
- *(uncategorized)* Clippy::trivially_copy_pass_by_ref by @EdJoPaTo
-
-- [a13867f](https://github.com/ratatui-org/ratatui/commit/a13867ffceb2f8f57f4540049754c2f916fd3efc)
- *(uncategorized)* Clippy::cloned_instead_of_copied by @EdJoPaTo
-
-- [3834374](https://github.com/ratatui-org/ratatui/commit/3834374652b46c5ddbfedcf8dea2086fd762f884)
- *(uncategorized)* Clippy::missing_const_for_fn by @EdJoPaTo
-
-### Miscellaneous Tasks
-
-- [125ee92](https://github.com/ratatui-org/ratatui/commit/125ee929ee9009b97a270e2e105a3f1167ab13d7)
- *(docs)* Fix: fix typos in crate documentation by @orhun in [#1002](https://github.com/ratatui-org/ratatui/pull/1002)
-
-- [38c17e0](https://github.com/ratatui-org/ratatui/commit/38c17e091cf3f4de2d196ecdd6a40129019eafc4)
- *(editorconfig)* Set and apply some defaults by @EdJoPaTo
-
-- [07da90a](https://github.com/ratatui-org/ratatui/commit/07da90a7182035b24f870bcbf0a0ffaad75eb48b)
- *(funding)* Add eth address for receiving funds from drips.network by @BenJam in [#994](https://github.com/ratatui-org/ratatui/pull/994)
-
-- [078e97e](https://github.com/ratatui-org/ratatui/commit/078e97e4ff65c02afa7c884914ecd38a6e959b58)
- *(github)* Add EdJoPaTo as a maintainer by @orhun in [#986](https://github.com/ratatui-org/ratatui/pull/986)
-
-- [b0314c5](https://github.com/ratatui-org/ratatui/commit/b0314c5731b32f51f5b6ca71a5194c6d7f265972)
- *(uncategorized)* Remove conventional commit check for PR by @Valentin271 in [#950](https://github.com/ratatui-org/ratatui/pull/950)
-
- ````text
- This removes conventional commit check for PRs.
-
- Since we use the PR title and description this is useless. It fails a
- lot of time and we ignore it.
-
- IMPORTANT NOTE: This does **not** mean Ratatui abandons conventional
- commits. This only relates to commits in PRs.
- ````
-
-### Build
-
-- [6e6ba27](https://github.com/ratatui-org/ratatui/commit/6e6ba27a122560bcf47b0efd20b7095f1bfd8714)
- *(lint)* Warn on pedantic and allow the rest by @EdJoPaTo
-
-- [c4ce7e8](https://github.com/ratatui-org/ratatui/commit/c4ce7e8ff6f00875e1ead5b68052f0db737bd44d)
- *(uncategorized)* Enable more satisfied lints by @EdJoPaTo
-
- ````text
- These lints dont generate warnings and therefore dont need refactoring.
- I think they are useful in the future.
- ````
-
-- [a4e84a6](https://github.com/ratatui-org/ratatui/commit/a4e84a6a7f6f5b80903799028f30e2a4438f2807)
- *(uncategorized)* Increase msrv to 1.74.0 by @EdJoPaTo [**breaking**]
-
- ````text
- configure lints in Cargo.toml requires 1.74.0
- ````
-
- BREAKING CHANGE:rust 1.74 is required now
-
-### New Contributors
-
-* @TadoTheMiner made their first contribution in [#987](https://github.com/ratatui-org/ratatui/pull/987)
-* @BenJam made their first contribution in [#994](https://github.com/ratatui-org/ratatui/pull/994)
-* @CameronBarnes made their first contribution in [#958](https://github.com/ratatui-org/ratatui/pull/958)
-* @ThomasMiz made their first contribution in [#959](https://github.com/ratatui-org/ratatui/pull/959)
-
-**Full Changelog**: https://github.com/ratatui-org/ratatui/compare/v0.26.1...0.26.2
-
-## [0.26.1](https://github.com/ratatui-org/ratatui/releases/tag/v0.26.1) - 2024-02-12
-
-This is a patch release that fixes bugs and adds enhancements, including new iterators, title options for blocks, and various rendering improvements. ✨
-
-### Features
-
-- [74a0511](https://github.com/ratatui-org/ratatui/commit/74a051147a4059990c31e08d96a8469d8220537b)
- *(rect)* Add Rect::positions iterator ([#928](https://github.com/ratatui-org/ratatui/issues/928))
-
- ````text
- Useful for performing some action on all the cells in a particular area.
- E.g.,
-
- ```rust
- fn render(area: Rect, buf: &mut Buffer) {
- for position in area.positions() {
- buf.get_mut(position.x, position.y).set_symbol("x");
- }
- }
- ```
- ````
-
-- [9182f47](https://github.com/ratatui-org/ratatui/commit/9182f47026d1630cb749163b6f8b8987474312ae)
- *(uncategorized)* Add Block::title_top and Block::title_top_bottom ([#940](https://github.com/ratatui-org/ratatui/issues/940))
-
- ````text
- This adds the ability to add titles to the top and bottom of a block
- without having to use the `Title` struct (which will be removed in a
- future release - likely v0.28.0).
-
- Fixes a subtle bug if the title was created from a right aligned Line
- and was also right aligned. The title would be rendered one cell too far
- to the right.
-
- ```rust
- Block::bordered()
- .title_top(Line::raw("A").left_aligned())
- .title_top(Line::raw("B").centered())
- .title_top(Line::raw("C").right_aligned())
- .title_bottom(Line::raw("D").left_aligned())
- .title_bottom(Line::raw("E").centered())
- .title_bottom(Line::raw("F").right_aligned())
- .render(buffer.area, &mut buffer);
- // renders
- "┌A─────B─────C┐",
- "│ │",
- "└D─────E─────F┘",
- ```
-
- Addresses part of https://github.com/ratatui-org/ratatui/issues/738
- ````
-
-### Bug Fixes
-
-- [2202059](https://github.com/ratatui-org/ratatui/commit/220205925911ed4377358d2a28ffca9373f11bda)
- *(block)* Fix crash on empty right aligned title ([#933](https://github.com/ratatui-org/ratatui/issues/933))
-
- ````text
- - Simplified implementation of the rendering for block.
- - Introduces a subtle rendering change where centered titles that are
- odd in length will now be rendered one character to the left compared
- to before. This aligns with other places that we render centered text
- and is a more consistent behavior. See
- https://github.com/ratatui-org/ratatui/pull/807#discussion_r1455645954
- for another example of this.
- ````
-
- Fixes: https://github.com/ratatui-org/ratatui/pull/929
-
-- [14c67fb](https://github.com/ratatui-org/ratatui/commit/14c67fbb52101d10b2d2e26898c408ab8dd3ec2d)
- *(list)* Highlight symbol when using a multi-bytes char ([#924](https://github.com/ratatui-org/ratatui/issues/924))
-
- ````text
- ratatui v0.26.0 brought a regression in the List widget, in which the
- highlight symbol width was incorrectly calculated - specifically when
- the highlight symbol was a multi-char character, e.g. `▶`.
- ````
-
-- [0dcdbea](https://github.com/ratatui-org/ratatui/commit/0dcdbea083aace6d531c0d505837e0911f400675)
- *(paragraph)* Render Line::styled correctly inside a paragraph ([#930](https://github.com/ratatui-org/ratatui/issues/930))
-
- ````text
- Renders the styled graphemes of the line instead of the contained spans.
- ````
-
-- [fae5862](https://github.com/ratatui-org/ratatui/commit/fae5862c6e0947ee1488a7e4775413dbead67c8b)
- *(uncategorized)* Ensure that buffer::set_line sets the line style ([#926](https://github.com/ratatui-org/ratatui/issues/926))
-
- ````text
- Fixes a regression in 0.26 where buffer::set_line was no longer setting
- the style. This was due to the new style field on Line instead of being
- stored only in the spans.
-
- Also adds a configuration for just running unit tests to bacon.toml.
- ````
-
-- [fbb5dfa](https://github.com/ratatui-org/ratatui/commit/fbb5dfaaa903efde0e63114c393dc3063d5f56fd)
- *(uncategorized)* Scrollbar rendering when no track symbols are provided ([#911](https://github.com/ratatui-org/ratatui/issues/911))
-
-### Refactor
-
-- [c3fb258](https://github.com/ratatui-org/ratatui/commit/c3fb25898f3e3ffe485ee69631b680679874d2cb)
- *(rect)* Move iters to module and add docs ([#927](https://github.com/ratatui-org/ratatui/issues/927))
-
-- [e51ca6e](https://github.com/ratatui-org/ratatui/commit/e51ca6e0d2705e6e0a96aeee78f1e80fcaaf34fc)
- *(uncategorized)* Finish tidying up table ([#942](https://github.com/ratatui-org/ratatui/issues/942))
-
-- [91040c0](https://github.com/ratatui-org/ratatui/commit/91040c0865043b8d5e7387509523a41345ed5af3)
- *(uncategorized)* Rearrange block structure ([#939](https://github.com/ratatui-org/ratatui/issues/939))
-
-### Documentation
-
-- [61a8278](https://github.com/ratatui-org/ratatui/commit/61a827821dff2bd733377cfc143266edce1dbeec)
- *(canvas)* Add documentation to canvas module ([#913](https://github.com/ratatui-org/ratatui/issues/913))
-
- ````text
- Document the whole `canvas` module. With this, the whole `widgets`
- module is documented.
- ````
-
-- [d2d91f7](https://github.com/ratatui-org/ratatui/commit/d2d91f754c87458c6d07863eca20f3ea8ae319ce)
- *(changelog)* Add sponsors section ([#908](https://github.com/ratatui-org/ratatui/issues/908))
-
-- [410d08b](https://github.com/ratatui-org/ratatui/commit/410d08b2b5812d7e29302adc0e8ddf18eb7d1d26)
- *(uncategorized)* Add link to FOSDEM 2024 talk ([#944](https://github.com/ratatui-org/ratatui/issues/944))
-
-- [1f208ff](https://github.com/ratatui-org/ratatui/commit/1f208ffd0368b4d269854dc0c550686dcd2d1de0)
- *(uncategorized)* Add GitHub Sponsors badge ([#943](https://github.com/ratatui-org/ratatui/issues/943))
-
-### Performance
-
-- [0963463](https://github.com/ratatui-org/ratatui/commit/096346350e19c5de9a4d74bba64796997e9f40da)
- *(uncategorized)* Use drain instead of remove in chart examples ([#922](https://github.com/ratatui-org/ratatui/issues/922))
-
-### Miscellaneous Tasks
-
-- [a4892ad](https://github.com/ratatui-org/ratatui/commit/a4892ad444739d7a760bc45bbd954e728c66b2d2)
- *(uncategorized)* Fix typo in docsrs example ([#946](https://github.com/ratatui-org/ratatui/issues/946))
-
-- [18870ce](https://github.com/ratatui-org/ratatui/commit/18870ce99063a492674de061441b2cce5dc54c60)
- *(uncategorized)* Fix the method name for setting the Line style ([#947](https://github.com/ratatui-org/ratatui/issues/947))
-
-- [8fb4630](https://github.com/ratatui-org/ratatui/commit/8fb46301a00b5d065f9b890496f914d3fdc17495)
- *(uncategorized)* Remove github action bot that makes comments nudging commit signing ([#937](https://github.com/ratatui-org/ratatui/issues/937))
-
- ````text
- We can consider reverting this commit once this PR is merged:
- https://github.com/1Password/check-signed-commits-action/pull/9
- ````
-
-### Contributors
-
-Thank you so much to everyone that contributed to this release!
-
-Here is the list of contributors who have contributed to `ratatui` for the first time!
-
-* @mo8it
-* @m4rch3n1ng
-
-## [0.26.0](https://github.com/ratatui-org/ratatui/releases/tag/v0.26.0) - 2024-02-02
-
-We are excited to announce the new version of `ratatui` - a Rust library that's all about cooking up TUIs 🐭
-
-In this version, we have primarily focused on simplifications and quality-of-life improvements for providing a more intuitive and user-friendly experience while building TUIs.
-
-✨ **Release highlights**:
-
-⚠️ List of breaking changes can be found [here](https://github.com/ratatui-org/ratatui/blob/main/BREAKING-CHANGES.md).
-
-💖 Consider sponsoring us at !
-
-### Features
-
-- [79ceb9f](https://github.com/ratatui-org/ratatui/commit/79ceb9f7b6ce7d7079fd7a1e1de8b160086206d0)
- _(line)_ Add alignment convenience functions ([#856](https://github.com/ratatui-org/ratatui/issues/856))
-
- ```text
- This adds convenience functions `left_aligned()`, `centered()` and
- `right_aligned()` plus unit tests. Updated example code.
- ```
-
-- [0df9354](https://github.com/ratatui-org/ratatui/commit/0df935473f59d9bcf16ea5092878e59ee129d876)
- _(padding)_ Add new constructors for padding ([#828](https://github.com/ratatui-org/ratatui/issues/828))
-
- ````text
- Adds `proportional`, `symmetric`, `left`, `right`, `top`, and `bottom`
- constructors for Padding struct.
-
- Proportional is
- ```
- /// **NOTE**: Terminal cells are often taller than they are wide, so to make horizontal and vertical
- /// padding seem equal, doubling the horizontal padding is usually pretty good.
- ```
- ````
-
- Fixes:https://github.com/ratatui-org/ratatui/issues/798
-
-- [d726e92](https://github.com/ratatui-org/ratatui/commit/d726e928d2004d2a99caeeb00b95ce27dbc04bc0)
- _(paragraph)_ Add alignment convenience functions ([#866](https://github.com/ratatui-org/ratatui/issues/866))
-
- ```text
- Added convenience functions left_aligned(), centered() and
- right_aligned() plus unit tests. Updated example code.
- ```
-
-- [c1ed5c3](https://github.com/ratatui-org/ratatui/commit/c1ed5c3637dc4574612ac2029249ba700e9192b5)
- _(span)_ Add alignment functions ([#873](https://github.com/ratatui-org/ratatui/issues/873))
-
- ```text
- Implemented functions that convert Span into a
- left-/center-/right-aligned Line. Implemented unit tests.
- ```
-
- Closes #853
-
-- [b80264d](https://github.com/ratatui-org/ratatui/commit/b80264de877e7ca240cea15716379622d822bc08)
- _(text)_ Add alignment convenience functions ([#862](https://github.com/ratatui-org/ratatui/issues/862))
-
- ```text
- Adds convenience functions `left_aligned()`, `centered()` and
- `right_aligned()` plus unit tests.
- ```
-
-- [23f6938](https://github.com/ratatui-org/ratatui/commit/23f6938498a7c31916a091d5b79c9d95a0575344)
- _(block)_ Add `Block::bordered` ([#736](https://github.com/ratatui-org/ratatui/issues/736))
-
- ````text
- This avoid creating a block with no borders and then settings Borders::ALL. i.e.
-
- ```diff
- - Block::default().borders(Borders::ALL);
- + Block::bordered();
- ```
- ````
-
-- [ffd5fc7](https://github.com/ratatui-org/ratatui/commit/ffd5fc79fcaf8bfff1a49c55f8d4b503a9e6dfed)
- _(color)_ Add Color::from_u32 constructor ([#785](https://github.com/ratatui-org/ratatui/issues/785))
-
- ````text
- Convert a u32 in the format 0x00RRGGBB to a Color.
-
- ```rust
- let white = Color::from_u32(0x00FFFFFF);
- let black = Color::from_u32(0x00000000);
- ```
- ````
-
-- [4f2db82](https://github.com/ratatui-org/ratatui/commit/4f2db82a774a3faea7db9659f30684e9635c24b2)
- _(color)_ Use the FromStr implementation for deserialization ([#705](https://github.com/ratatui-org/ratatui/issues/705))
-
- ```text
- The deserialize implementation for Color used to support only the enum
- names (e.g. Color, LightRed, etc.) With this change, you can use any of
- the strings supported by the FromStr implementation (e.g. black,
- light-red, #00ff00, etc.)
- ```
-
-- [1cbe1f5](https://github.com/ratatui-org/ratatui/commit/1cbe1f52abb7ab1cd5bd05030e7857ee1762f44a)
- _(constraints)_ Rename `Constraint::Proportional` to `Constraint::Fill` ([#880](https://github.com/ratatui-org/ratatui/issues/880))
-
- `Constraint::Fill` is a more intuitive name for the behavior, and it is
- shorter.
-
- Resolves #859
-
-- [dfd6db9](https://github.com/ratatui-org/ratatui/commit/dfd6db988faa7a45cbe99b01024c086c4fcf7577)
- _(demo2)_ Add destroy mode to celebrate commit 1000! ([#809](https://github.com/ratatui-org/ratatui/issues/809))
-
- ````text
- ```shell
- cargo run --example demo2 --features="crossterm widget-calendar"
- ```
-
- Press `d` to activate destroy mode and Enjoy!
-
- 
-
- Vendors a copy of tui-big-text to allow us to use it in the demo.
- ````
-
-- [540fd2d](https://github.com/ratatui-org/ratatui/commit/540fd2df036648674a2f6d37f7b12326d5978bbd)
- _(layout)_ Change `Flex::default()` ([#881](https://github.com/ratatui-org/ratatui/issues/881)) [**breaking**]
-
- ````text
- This PR makes a number of simplifications to the layout and constraint
- features that were added after v0.25.0.
-
- For users upgrading from v0.25.0, the net effect of this PR (along with
- the other PRs) is the following:
-
- - New `Flex` modes have been added.
- - `Flex::Start` (new default)
- - `Flex::Center`
- - `Flex::End`
- - `Flex::SpaceAround`
- - `Flex::SpaceBetween`
- - `Flex::Legacy` (old default)
- - `Min(v)` grows to allocate excess space in all `Flex` modes instead of
- shrinking (except in `Flex::Legacy` where it retains old behavior).
- - `Fill(1)` grows to allocate excess space, growing equally with
- `Min(v)`.
-
- ---
-
- The following contains a summary of the changes in this PR and the
- motivation behind them.
-
- **`Flex`**
-
- - Removes `Flex::Stretch`
- - Renames `Flex::StretchLast` to `Flex::Legacy`
-
- **`Constraint`**
-
- - Removes `Fixed`
- - Makes `Min(v)` grow as much as possible everywhere (except
- `Flex::Legacy` where it retains the old behavior)
- - Makes `Min(v)` grow equally as `Fill(1)` while respecting `Min` lower
- bounds. When `Fill` and `Min` are used together, they both fill excess
- space equally.
-
- Allowing `Min(v)` to grow still allows users to build the same layouts
- as before with `Flex::Start` with no breaking changes to the behavior.
-
- This PR also removes the unstable feature `SegmentSize`.
-
- This is a breaking change to the behavior of constraints. If users want
- old behavior, they can use `Flex::Legacy`.
-
- ```rust
- Layout::vertical([Length(25), Length(25)]).flex(Flex::Legacy)
- ```
-
- Users that have constraint that exceed the available space will probably
- not see any difference or see an improvement in their layouts. Any
- layout with `Min` will be identical in `Flex::Start` and `Flex::Legacy`
- so any layout with `Min` will not be breaking.
-
- Previously, `Table` used `EvenDistribution` internally by default, but
- with that gone the default is now `Flex::Start`. This changes the
- behavior of `Table` (for the better in most cases). The only way for
- users to get exactly the same as the old behavior is to change their
- constraints. I imagine most users will be happier out of the box with
- the new Table default.
-
- Resolves https://github.com/ratatui-org/ratatui/issues/843
-
- Thanks to @joshka for the direction
- ````
-
-- [bbcfa55](https://github.com/ratatui-org/ratatui/commit/bbcfa55a88c1916598ea0442217ac7f6a99ea96f)
- _(layout)_ Add Rect::contains method ([#882](https://github.com/ratatui-org/ratatui/issues/882))
-
- ```text
- This is useful for performing hit tests (i.e. did the user click in an
- area).
- ```
-
-- [736605e](https://github.com/ratatui-org/ratatui/commit/736605ec88aac4877b19dd66ded97b26d933407f)
- _(layout)_ Add default impl for Position ([#869](https://github.com/ratatui-org/ratatui/issues/869))
-
-- [1e75596](https://github.com/ratatui-org/ratatui/commit/1e755967c53e9a1803cc7fcc46ad0946c78f0eda)
- _(layout)_ Increase default cache size to 500 ([#850](https://github.com/ratatui-org/ratatui/issues/850))
-
- ```text
- This is a somewhat arbitrary size for the layout cache based on adding
- the columns and rows on my laptop's terminal (171+51 = 222) and doubling
- it for good measure and then adding a bit more to make it a round
- number. This gives enough entries to store a layout for every row and
- every column, twice over, which should be enough for most apps. For
- those that need more, the cache size can be set with
- `Layout::init_cache()`.
- ```
-
- Fixes:https://github.com/ratatui-org/ratatui/issues/820
-
-- [2819eea](https://github.com/ratatui-org/ratatui/commit/2819eea82bfde48562b830b4ef1c998dacae8b69)
- _(layout)_ Add Position struct ([#790](https://github.com/ratatui-org/ratatui/issues/790))
-
- ```text
- This stores the x and y coordinates (columns and rows)
-
- - add conversions from Rect
- - add conversion with Size to Rect
- - add Rect::as_position
- ```
-
-- [1561d64](https://github.com/ratatui-org/ratatui/commit/1561d64c80e6498f90807a1607d84a1405d3e0bb)
- _(layout)_ Add Rect -> Size conversion methods ([#789](https://github.com/ratatui-org/ratatui/issues/789))
-
- ```text
- - add Size::new() constructor
- - add Rect::as_size()
- - impl From for Size
- - document and add tests for Size
- ```
-
-- [f13fd73](https://github.com/ratatui-org/ratatui/commit/f13fd73d9ec108af723a9cd11f4262f2b09c9d25)
- _(layout)_ Add `Rect::clamp()` method ([#749](https://github.com/ratatui-org/ratatui/issues/749))
-
- ````text
- * feat(layout): add a Rect::clamp() method
-
- This ensures a rectangle does not end up outside an area. This is useful
- when you want to be able to dynamically move a rectangle around, but
- keep it constrained to a certain area.
-
- For example, this can be used to implement a draggable window that can
- be moved around, but not outside the terminal window.
-
- ```rust
- let window_area = Rect::new(state.x, state.y, 20, 20).clamp(area);
- state.x = rect.x;
- state.y = rect.y;
- ```
-
- * refactor: use rstest to simplify clamp test
-
- * fix: use rstest description instead of string
-
- test layout::rect::tests::clamp::case_01_inside ... ok
- test layout::rect::tests::clamp::case_02_up_left ... ok
- test layout::rect::tests::clamp::case_04_up_right ... ok
- test layout::rect::tests::clamp::case_05_left ... ok
- test layout::rect::tests::clamp::case_03_up ... ok
- test layout::rect::tests::clamp::case_06_right ... ok
- test layout::rect::tests::clamp::case_07_down_left ... ok
- test layout::rect::tests::clamp::case_08_down ... ok
- test layout::rect::tests::clamp::case_09_down_right ... ok
- test layout::rect::tests::clamp::case_10_too_wide ... ok
- test layout::rect::tests::clamp::case_11_too_tall ... ok
- test layout::rect::tests::clamp::case_12_too_large ... ok
-
- * fix: less ambiguous docs for this / other rect
-
- * fix: move rstest to dev deps
- ````
-
-- [98bcf1c](https://github.com/ratatui-org/ratatui/commit/98bcf1c0a57a340229684345497b2d378979de04)
- _(layout)_ Add Rect::split method ([#729](https://github.com/ratatui-org/ratatui/issues/729))
-
- ````text
- This method splits a Rect and returns a fixed-size array of the
- resulting Rects. This allows the caller to use array destructuring
- to get the individual Rects.
-
- ```rust
- use Constraint::*;
- let layout = &Layout::vertical([Length(1), Min(0)]);
- let [top, main] = area.split(&layout);
- ```
- ````
-
-- [0494ee5](https://github.com/ratatui-org/ratatui/commit/0494ee52f1f0070f1ccf4532f7301fd59d4a5c10)
- _(layout)_ Accept Into for constructors ([#744](https://github.com/ratatui-org/ratatui/issues/744))
-
- ````text
- This allows Layout constructors to accept any type that implements
- Into instead of just AsRef. This is useful when
- you want to specify a fixed size for a layout, but don't want to
- explicitly create a Constraint::Length yourself.
-
- ```rust
- Layout::new(Direction::Vertical, [1, 2, 3]);
- Layout::horizontal([1, 2, 3]);
- Layout::vertical([1, 2, 3]);
- Layout::default().constraints([1, 2, 3]);
- ```
- ````
-
-- [7ab12ed](https://github.com/ratatui-org/ratatui/commit/7ab12ed8ce8f6cdb0712d132b4dfc4cccfda08da)
- _(layout)_ Add horizontal and vertical constructors ([#728](https://github.com/ratatui-org/ratatui/issues/728))
-
- ````text
- * feat(layout): add vertical and horizontal constructors
-
- This commit adds two new constructors to the `Layout` struct, which
- allow the user to create a vertical or horizontal layout with default
- values.
-
- ```rust
- let layout = Layout::vertical([
- Constraint::Length(10),
- Constraint::Min(5),
- Constraint::Length(10),
- ]);
-
- let layout = Layout::horizontal([
- Constraint::Length(10),
- Constraint::Min(5),
- Constraint::Length(10),
- ]);
- ```
- ````
-
-- [4278b40](https://github.com/ratatui-org/ratatui/commit/4278b4088d2ab1d94aa5d73d7a0c321a46dbd9de)
- _(line)_ Implement iterators for Line ([#896](https://github.com/ratatui-org/ratatui/issues/896))
-
- ```text
- This allows iterating over the `Span`s of a line using `for` loops and
- other iterator methods.
-
- - add `iter` and `iter_mut` methods to `Line`
- - implement `IntoIterator` for `Line`, `&Line`, and `&mut Line` traits
- - update call sites to iterate over `Line` rather than `Line::spans`
- ```
-
-- [5d410c6](https://github.com/ratatui-org/ratatui/commit/5d410c6895de49e77c7e0d1884be63d797724448)
- _(line)_ Implement Widget for Line ([#715](https://github.com/ratatui-org/ratatui/issues/715))
-
- ````text
- This allows us to use Line as a child of other widgets, and to use
- Line::render() to render it rather than calling buffer.set_line().
-
- ```rust
- frame.render_widget(Line::raw("Hello, world!"), area);
- // or
- Line::raw("Hello, world!").render(frame, area);
- ```
- ````
-
-- [c977293](https://github.com/ratatui-org/ratatui/commit/c977293f14b019ee520379bf5eaafb44cef04a01)
- _(line)_ Add style field, setters and docs ([#708](https://github.com/ratatui-org/ratatui/issues/708)) [**breaking**]
-
- ```text
- - The `Line` struct now stores the style of the line rather than each
- `Span` storing it.
- - Adds two new setters for style and spans
- - Adds missing docs
- ```
-
- BREAKING CHANGE:`Line::style` is now a field of `Line` instead of being
- stored in each `Span`.
-
-- [bbf2f90](https://github.com/ratatui-org/ratatui/commit/bbf2f906fbe7e593fdeb5dd7530d3479788f77a5)
- _(rect.rs)_ Implement Rows and Columns iterators in Rect ([#765](https://github.com/ratatui-org/ratatui/issues/765))
-
- ```text
- This enables iterating over rows and columns of a Rect. In tern being able to use that with other iterators and simplify looping over cells.
- ```
-
-- [fe06f0c](https://github.com/ratatui-org/ratatui/commit/fe06f0c7b06e50cd5d7916dab9ccb5e28f5a6511)
- _(serde)_ Support TableState, ListState, and ScrollbarState ([#723](https://github.com/ratatui-org/ratatui/issues/723))
-
- ````text
- TableState, ListState, and ScrollbarState can now be serialized and deserialized
- using serde.
-
- ```rust
- #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
- struct AppState {
- list_state: ListState,
- table_state: TableState,
- scrollbar_state: ScrollbarState,
- }
-
- let app_state = AppState::default();
- let serialized = serde_json::to_string(app_state);
-
- let app_state = serde_json::from_str(serialized);
- ```
- ````
-
-- [37c1836](https://github.com/ratatui-org/ratatui/commit/37c183636b573e7637af5fbab9ae5c6f2d3fec6b)
- _(span)_ Implement Widget on Span ([#709](https://github.com/ratatui-org/ratatui/issues/709))
-
- ````text
- This allows us to use Span as a child of other widgets, and to use
- Span::render() to render it rather than calling buffer.set_span().
-
- ```rust
- frame.render_widget(Span::raw("Hello, world!"), area);
- // or
- Span::raw("Hello, world!").render(frame, area);
- // or even
- "Hello, world!".green().render(frame, area);
- ```
- ````
-
-- [e1e85aa](https://github.com/ratatui-org/ratatui/commit/e1e85aa7af2a7624b12a0ad7f0aa2413b409475d)
- _(style)_ Add material design color palette ([#786](https://github.com/ratatui-org/ratatui/issues/786))
-
- ````text
- The `ratatui::style::palette::material` module contains the Google 2014
- Material Design palette.
-
- See https://m2.material.io/design/color/the-color-system.html#tools-for-picking-colors
- for more information.
-
- ```rust
- use ratatui::style::palette::material::BLUE_GRAY;
- Line::styled("Hello", BLUE_GRAY.c500);
- ```
- ````
-
-- [bf67850](https://github.com/ratatui-org/ratatui/commit/bf678507395a528befcf5c5e3180368cb8f4b826)
- _(style)_ Add tailwind color palette ([#787](https://github.com/ratatui-org/ratatui/issues/787))
-
- ````text
- The `ratatui::style::palette::tailwind` module contains the default
- Tailwind color palette. This is useful for styling components with
- colors that match the Tailwind color palette.
-
- See https://tailwindcss.com/docs/customizing-colors for more information
- on Tailwind.
-
- ```rust
- use ratatui::style::palette::tailwind::SLATE;
- Line::styled("Hello", SLATE.c500);
- ```
- ````
-
-- [27e9216](https://github.com/ratatui-org/ratatui/commit/27e9216cea7f25fcf172fe0a8f11e7cca222b055)
- _(table)_ Remove allow deprecated attribute used previously for segment_size ✨ ([#875](https://github.com/ratatui-org/ratatui/issues/875))
-
-- [a489d85](https://github.com/ratatui-org/ratatui/commit/a489d85f2dda561ea18f1431f6e44f0335549eca)
- _(table)_ Deprecate SegmentSize on table ([#842](https://github.com/ratatui-org/ratatui/issues/842))
-
- ```text
- This adds for table:
-
- - Added new flex method with flex field
- - Deprecated segment_size method and removed segment_size field
- - Updated documentation
- - Updated tests
- ```
-
-- [c69ca47](https://github.com/ratatui-org/ratatui/commit/c69ca47922619332f76488f5d9e70541b496fe1c)
- _(table)_ Collect iterator of `Row` into `Table` ([#774](https://github.com/ratatui-org/ratatui/issues/774)) [**breaking**]
-
- ```text
- Any iterator whose item is convertible into `Row` can now be
- collected into a `Table`.
-
- Where previously, `Table::new` accepted `IntoIterator- `, it
- now accepts `IntoIterator>`.
- ```
-
- BREAKING CHANGE:The compiler can no longer infer the element type of the container
- passed to `Table::new()`. For example, `Table::new(vec![], widths)`
- will no longer compile, as the type of `vec![]` can no longer be
- inferred.
-
-- [2faa879](https://github.com/ratatui-org/ratatui/commit/2faa879658a439d233edc4ac886fb42c17ff971a)
- _(table)_ Accept Text for highlight_symbol ([#781](https://github.com/ratatui-org/ratatui/issues/781))
-
- ````text
- This allows for multi-line symbols to be used as the highlight symbol.
-
- ```rust
- let table = Table::new(rows, widths)
- .highlight_symbol(Text::from(vec![
- "".into(),
- " █ ".into(),
- " █ ".into(),
- "".into(),
- ]));
- ```
- ````
-
-- [e64e194](https://github.com/ratatui-org/ratatui/commit/e64e194b6bc5f89c68fe73d430e63c264af6ca4f)
- _(table)_ Implement FromIterator for widgets::Row ([#755](https://github.com/ratatui-org/ratatui/issues/755))
-
- ```text
- The `Row::new` constructor accepts a single argument that implements
- `IntoIterator`. This commit adds an implementation of `FromIterator`,
- as a thin wrapper around `Row::new`. This allows `.collect::
()`
- to be used at the end of an iterator chain, rather than wrapping the
- entire iterator chain in `Row::new`.
- ```
-
-- [803a72d](https://github.com/ratatui-org/ratatui/commit/803a72df27190e273556e089e42036bfc001f003)
- _(table)_ Accept Into for widths ([#745](https://github.com/ratatui-org/ratatui/issues/745))
-
- ````text
- This allows Table constructors to accept any type that implements
- Into instead of just AsRef. This is useful when
- you want to specify a fixed size for a table columns, but don't want to
- explicitly create a Constraint::Length yourself.
-
- ```rust
- Table::new(rows, [1,2,3])
- Table::default().widths([1,2,3])
- ```
- ````
-
-- [f025d2b](https://github.com/ratatui-org/ratatui/commit/f025d2bfa26eac11ef5c2a63943a4e177abfc800)
- _(table)_ Add Table::footer and Row::top_margin methods ([#722](https://github.com/ratatui-org/ratatui/issues/722))
-
- ```text
- * feat(table): Add a Table::footer method
- ```
-
-- [f29c73f](https://github.com/ratatui-org/ratatui/commit/f29c73fb1cf746aea0adfaed4a8b959e0466b830)
- _(tabs)_ Accept Iterators of `Line` in constructors ([#776](https://github.com/ratatui-org/ratatui/issues/776)) [**breaking**]
-
- ```text
- Any iterator whose item is convertible into `Line` can now be
- collected into `Tabs`.
-
- In addition, where previously `Tabs::new` required a `Vec`, it can now
- accept any object that implements `IntoIterator` with an item type
- implementing `Into`.
- ```
-
- BREAKING CHANGE:Calls to `Tabs::new()` whose argument is collected from an iterator
- will no longer compile. For example,
-
- `Tabs::new(["a","b"].into_iter().collect())` will no longer compile,
- because the return type of `.collect()` can no longer be inferred to
- be a `Vec<_>`.
-
-- [b459228](https://github.com/ratatui-org/ratatui/commit/b459228e26b9429b8a09084d76251361f7f5bfd3)
- _(termwiz)_ Add `From` termwiz style impls ([#726](https://github.com/ratatui-org/ratatui/issues/726))
-
- ```text
- Important note: this also fixes a wrong mapping between ratatui's gray
- and termwiz's grey. `ratatui::Color::Gray` now maps to
- `termwiz::color::AnsiColor::Silver`
- ```
-
-- [9ba7354](https://github.com/ratatui-org/ratatui/commit/9ba7354335a106607fe0670e1205a038ec54aa1b)
- _(text)_ Implement iterators for Text ([#900](https://github.com/ratatui-org/ratatui/issues/900))
-
- ```text
- This allows iterating over the `Lines`s of a text using `for` loops and
- other iterator methods.
-
- - add `iter` and `iter_mut` methods to `Text`
- - implement `IntoIterator` for `Text`, `&Text`, and `&mut Text` traits
- - update call sites to iterate over `Text` rather than `Text::lines`
- ```
-
-- [68d5783](https://github.com/ratatui-org/ratatui/commit/68d5783a6912c644b922b7030facff4b1172a434)
- _(text)_ Add style and alignment ([#807](https://github.com/ratatui-org/ratatui/issues/807))
-
- Fixes #758, fixes #801
-
-This PR adds:
-
-- `style` and `alignment` to `Text`
-- impl `Widget` for `Text`
-- replace `Text` manual draw to call for Widget impl
-
-All places that use `Text` have been updated and support its new
-features expect paragraph which still has a custom implementation.
-
-- [815757f](https://github.com/ratatui-org/ratatui/commit/815757fcbbc147050f8ce9418a4e91fd871d011f)
- _(widgets)_ Implement Widget for Widget refs ([#833](https://github.com/ratatui-org/ratatui/issues/833))
-
- ````text
- Many widgets can be rendered without changing their state.
-
- This commit implements The `Widget` trait for references to
- widgets and changes their implementations to be immutable.
-
- This allows us to render widgets without consuming them by passing a ref
- to the widget when calling `Frame::render_widget()`.
-
- ```rust
- // this might be stored in a struct
- let paragraph = Paragraph::new("Hello world!");
-
- let [left, right] = area.split(&Layout::horizontal([20, 20]));
- frame.render_widget(¶graph, left);
- frame.render_widget(¶graph, right); // we can reuse the widget
- ```
-
- Implemented for all widgets except BarChart (which has an implementation
- that modifies the internal state and requires a rewrite to fix.
-
- Other widgets will be implemented in follow up commits.
- ````
-
- Fixes:https://github.com/ratatui-org/ratatui/discussions/164
- Replaces PRs: https://github.com/ratatui-org/ratatui/pull/122 and
-
- https://github.com/ratatui-org/ratatui/pull/16
-
- Enables:https://github.com/ratatui-org/ratatui/issues/132
- Validated as a viable working solution by:
-
- https://github.com/ratatui-org/ratatui/pull/836
-
-- [eb79256](https://github.com/ratatui-org/ratatui/commit/eb79256ceea151130c6b80930b51098b9ad43f5b)
- _(widgets)_ Collect iterator of `ListItem` into `List` ([#775](https://github.com/ratatui-org/ratatui/issues/775))
-
- ````text
- Any iterator whose item is convertible into `ListItem` can now be
- collected into a `List`.
-
- ```rust
- let list: List = (0..3).map(|i| format!("Item{i}")).collect();
- ```
- ````
-
-- [c8dd879](https://github.com/ratatui-org/ratatui/commit/c8dd87918d44fff6d4c3c78e1fc821a3275db1ae)
- _(uncategorized)_ Add WidgetRef and StatefulWidgetRef traits ([#903](https://github.com/ratatui-org/ratatui/issues/903))
-
- ````text
- The Widget trait consumes self, which makes it impossible to use in a
- boxed context. Previously we implemented the Widget trait for &T, but
- this was not enough to render a boxed widget. We now have a new trait
- called `WidgetRef` that allows rendering a widget by reference. This
- trait is useful when you want to store a reference to one or more
- widgets and render them later. Additionally this makes it possible to
- render boxed widgets where the type is not known at compile time (e.g.
- in a composite layout with multiple panes of different types).
-
- This change also adds a new trait called `StatefulWidgetRef` which is
- the stateful equivalent of `WidgetRef`.
-
- Both new traits are gated behind the `unstable-widget-ref` feature flag
- as we may change the exact name / approach a little on this based on
- further discussion.
-
- Blanket implementation of `Widget` for `&W` where `W` implements
- `WidgetRef` and `StatefulWidget` for `&W` where `W` implements
- `StatefulWidgetRef` is provided. This allows you to render a widget by
- reference and a stateful widget by reference.
-
- A blanket implementation of `WidgetRef` for `Option` where `W`
- implements `WidgetRef` is provided. This makes it easier to render
- child widgets that are optional without the boilerplate of unwrapping
- the option. Previously several widgets implemented this manually. This
- commits expands the pattern to apply to all widgets.
-
- ```rust
- struct Parent {
- child: Option,
- }
-
- impl WidgetRef for Parent {
- fn render_ref(&self, area: Rect, buf: &mut Buffer) {
- self.child.render_ref(area, buf);
- }
- }
- ```
-
- ```rust
- let widgets: Vec> = vec![Box::new(Greeting), Box::new(Farewell)];
- for widget in widgets {
- widget.render_ref(buf.area, &mut buf);
- }
- assert_eq!(buf, Buffer::with_lines(["Hello Goodbye"]));
- ```
- ````
-
-- [87bf1dd](https://github.com/ratatui-org/ratatui/commit/87bf1dd9dfb8bf2e6c08c488d4a38dac21e14304)
- _(uncategorized)_ Replace Rect::split with Layout::areas and spacers ([#904](https://github.com/ratatui-org/ratatui/issues/904))
-
- ```text
- In a recent commit we added Rec::split, but this feels more ergonomic as
- Layout::areas. This also adds Layout::spacers to get the spacers between
- the areas.
- ```
-
-- [dab08b9](https://github.com/ratatui-org/ratatui/commit/dab08b99b6a2a4c8ced6f780af7a37a0f3c34f6b)
- _(uncategorized)_ Show space constrained UIs conditionally ([#895](https://github.com/ratatui-org/ratatui/issues/895))
-
- ```text
- With this PR the constraint explorer demo only shows space constrained
- UIs instead:
-
- Smallest (15 row height):
-
-
-
- Small (20 row height):
-
-
-
- Medium (30 row height):
-
-
-
- Full (40 row height):
-
-
- ```
-
-- [2a12f7b](https://github.com/ratatui-org/ratatui/commit/2a12f7bddf0b286e63439c2d1fa894dcfbfde6c0)
- _(uncategorized)_ Impl Widget for &BarChart ([#897](https://github.com/ratatui-org/ratatui/issues/897))
-
- ```text
- BarChart had some internal mutations that needed to be removed to
- implement the Widget trait for &BarChart to bring it in line with the
- other widgets.
- ```
-
-- [9ec43ef](https://github.com/ratatui-org/ratatui/commit/9ec43eff1c7a62631fab99e4874ccd15fe7b210a)
- _(uncategorized)_ Constraint Explorer example ([#893](https://github.com/ratatui-org/ratatui/issues/893))
-
- ```text
- Here's a constraint explorer demo put together with @joshka
- ```
-
- https://github.com/ratatui-org/ratatui/assets/1813121/08d7d8f6-d013-44b4-8331-f4eee3589cce
-
-It allows users to interactive explore how the constraints behave with
-respect to each other and compare that across flex modes. It allows
-users to swap constraints out for other constraints, increment or
-decrement the values, add and remove constraints, and add spacing
-
-It is also a good example for how to structure a simple TUI with several
-Ratatui code patterns that are useful for refactoring.
-
-Fixes:https://github.com/ratatui-org/ratatui/issues/792
-
----
-
-- [4ee4e6d](https://github.com/ratatui-org/ratatui/commit/4ee4e6d78a136b5a1e4942f25b9afe34f7dd5d0c)
- _(uncategorized)_ Make spacing work in `Flex::SpaceAround` and `Flex::SpaceBetween` ([#892](https://github.com/ratatui-org/ratatui/issues/892))
-
- ```text
- This PR implements user provided spacing gaps for `SpaceAround` and
- `SpaceBetween`.
- ```
-
- https://github.com/ratatui-org/ratatui/assets/1813121/2e260708-e8a7-48ef-aec7-9cf84b655e91
-
-Now user provided spacing gaps always take priority in all `Flex` modes.
-
-- [dd5ca3a](https://github.com/ratatui-org/ratatui/commit/dd5ca3a0c83bc1efc281133707eec04864567e69)
- _(uncategorized)_ Better weights for constraints ([#889](https://github.com/ratatui-org/ratatui/issues/889))
-
- ````text
- This PR is a split of reworking the weights from #888
-
- This keeps the same ranking of weights, just uses a different numerical
- value so that the lowest weight is `WEAK` (`1.0`).
-
- No tests are changed as a result of this change, and running the
- following multiple times did not cause any errors for me:
-
- ```rust
- for i in {0..100}
- do
- cargo test --lib --
- if [ $? -ne 0 ]; then
- echo "Test failed. Exiting loop."
- break
- fi
- done
- ```
- ````
-
-- [aeec163](https://github.com/ratatui-org/ratatui/commit/aeec16369bdf26dc96af46cc580df191078464ae)
- _(uncategorized)_ Change rounding to make tests stable ([#888](https://github.com/ratatui-org/ratatui/issues/888))
-
- ```text
- This fixes some unstable tests
- ```
-
-- [be4fdaa](https://github.com/ratatui-org/ratatui/commit/be4fdaa0c7c863daa50c0109cd5f96005365029d)
- _(uncategorized)_ Change priority of constraints and add `split_with_spacers` ✨ ([#788](https://github.com/ratatui-org/ratatui/issues/788))
-
- ```text
- Follow up to https://github.com/ratatui-org/ratatui/pull/783
-
- This PR introduces different priorities for each kind of constraint.
- This PR also adds tests that specifies this behavior. This PR resolves a
- number of broken tests.
-
- Fixes https://github.com/ratatui-org/ratatui/issues/827
-
- With this PR, the layout algorithm will do the following in order:
-
- 1. Ensure that all the segments are within the user provided area and
- ensure that all segments and spacers are aligned next to each other
- 2. if a user provides a `layout.spacing`, it will enforce it.
- 3. ensure proportional elements are all proportional to each other
- 4. if a user provides a `Fixed(v)` constraint, it will enforce it.
- 5. `Min` / `Max` binding inequality constraints
- 6. `Length`
- 7. `Percentage`
- 8. `Ratio`
- 9. collapse `Min` or collapse `Max`
- 10. grow `Proportional` as much as possible
- 11. grow spacers as much as possible
-
- This PR also returns the spacer areas as `Rects` to the user. Users can
- then draw into the spacers as they see fit (thanks @joshka for the
- idea). Here's a screenshot with the modified flex example:
-
-
-
- This PR introduces a `strengths` module that has "default" weights that
- give stable solutions as well as predictable behavior.
- ```
-
-- [d713201](https://github.com/ratatui-org/ratatui/commit/d7132011f921cb87593914bd7d2e24ac676ec911)
- _(uncategorized)_ Add `Color::from_hsl` ✨ ([#772](https://github.com/ratatui-org/ratatui/issues/772))
-
- ````text
- This PR adds `Color::from_hsl` that returns a valid `Color::Rgb`.
-
- ```rust
- let color: Color = Color::from_hsl(360.0, 100.0, 100.0);
- assert_eq!(color, Color::Rgb(255, 255, 255));
-
- let color: Color = Color::from_hsl(0.0, 0.0, 0.0);
- assert_eq!(color, Color::Rgb(0, 0, 0));
- ```
-
- HSL stands for Hue (0-360 deg), Saturation (0-100%), and Lightness
- (0-100%) and working with HSL the values can be more intuitive. For
- example, if you want to make a red color more orange, you can change the
- Hue closer toward yellow on the color wheel (i.e. increase the Hue).
- ````
-
- Related #763
-
-- [405a125](https://github.com/ratatui-org/ratatui/commit/405a125c8235b983993e3774361821b67a340aa0)
- _(uncategorized)_ Add wide and tall proportional border set ([#848](https://github.com/ratatui-org/ratatui/issues/848))
-
- ```text
- Adds `PROPORTIONAL_WIDE` and `PROPORTIONAL_TALL` border sets.
- ```
-
- `symbols::border::PROPORTIONAL_WIDE`
-
-```
-▄▄▄▄
-█xx█
-█xx█
-▀▀▀▀
-```
-
-`symbols::border::PROPORTIONAL_TALL`
-
-```
-█▀▀█
-█xx█
-█xx█
-█▄▄█
-```
-
-Fixes:https://github.com/ratatui-org/ratatui/issues/834
-
-- [9df6ceb](https://github.com/ratatui-org/ratatui/commit/9df6cebb58e97ac795868fa0af96a8aaf9c794c0)
- _(uncategorized)_ Table column calculation uses layout spacing ✨ ([#824](https://github.com/ratatui-org/ratatui/issues/824))
-
- ```text
- This uses the new `spacing` feature of the `Layout` struct to allocate
- columns spacing in the `Table` widget.
- This changes the behavior of the table column layout in the following
- ways:
-
- 1. Selection width is always allocated.
- - if a user does not want a selection width ever they should use
- `HighlightSpacing::Never`
- 2. Column spacing is prioritized over other constraints
- - if a user does not want column spacing, they should use
- `Table::new(...).column_spacing(0)`
-
- ---------
- ```
-
-- [f299463](https://github.com/ratatui-org/ratatui/commit/f299463847e8aa4b61619e5a5c02c5855d8fdb7b)
- _(uncategorized)_ Add one eighth wide and tall border sets ✨ ([#831](https://github.com/ratatui-org/ratatui/issues/831))
-
- ````text
- This PR adds the
- [`McGugan`](https://www.willmcgugan.com/blog/tech/post/ceo-just-wants-to-draw-boxes/)
- border set, which allows for tighter borders.
-
- For example, with the `flex` example you can get this effect (top is
- mcgugan wide, bottom is mcgugan tall):
-
-
-
-
-
- As of this PR, `MCGUGAN_WIDE` has to be styled manually, like so:
-
- ```rust
- let main_color = color_for_constraint(*constraint);
- let cell = buf.get_mut(block.x, block.y + 1);
- cell.set_style(Style::reset().fg(main_color).reversed());
- let cell = buf.get_mut(block.x, block.y + 2);
- cell.set_style(Style::reset().fg(main_color).reversed());
- let cell = buf.get_mut(block.x + block.width.saturating_sub(1), block.y + 1);
- cell.set_style(Style::reset().fg(main_color).reversed());
- let cell = buf.get_mut(block.x + block.width.saturating_sub(1), block.y + 2);
- cell.set_style(Style::reset().fg(main_color).reversed());
-
- ```
-
- `MCGUGAN_TALL` has to be styled manually, like so:
-
- ```rust
- let main_color = color_for_constraint(*constraint);
- for x in block.x + 1..(block.x + block.width).saturating_sub(1) {
- let cell = buf.get_mut(x, block.y);
- cell.set_style(Style::reset().fg(main_color).reversed());
- let cell = buf.get_mut(x, block.y + block.height - 1);
- cell.set_style(Style::reset().fg(main_color).reversed());
- }
-
- ```
- ````
-
-- [ae6a2b0](https://github.com/ratatui-org/ratatui/commit/ae6a2b0007ee7195de14d36420e2e30853fbb2f4)
- _(uncategorized)_ Add spacing feature to flex example ✨ ([#830](https://github.com/ratatui-org/ratatui/issues/830))
-
- ```text
- This adds the `spacing` using `+` and `-` to the flex example
- ```
-
-- [cddf4b2](https://github.com/ratatui-org/ratatui/commit/cddf4b2930f573fafad64a4ddd7fe5753f7540e2)
- _(uncategorized)_ Implement Display for Text, Line, Span ([#826](https://github.com/ratatui-org/ratatui/issues/826))
-
- Issue:https://github.com/ratatui-org/ratatui/issues/816
-
-This PR adds:
-
-`std::fmt::Display` for `Text`, `Line`, and `Span` structs.
-
-Display implementation displays actual content while ignoring style.
-
-- [5131c81](https://github.com/ratatui-org/ratatui/commit/5131c813ce5de078be0458c9a067bca2d6b38921)
- _(uncategorized)_ Add layout spacing ✨ ([#821](https://github.com/ratatui-org/ratatui/issues/821))
-
- ```text
- This adds a `spacing` feature for layouts.
-
- Spacing can be added between items of a layout.
- ```
-
-- [de97a1f](https://github.com/ratatui-org/ratatui/commit/de97a1f1da4fd146034f7c8f20264f4d558cc1a0)
- _(uncategorized)_ Add flex to layout ✨
-
- ```text
- This PR adds a new way to space elements in a `Layout`.
-
- Loosely based on
- [flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/), this
- PR adds a `Flex` enum with the following variants:
-
- - Start
- - Center
- - End
- - SpaceAround
- - SpaceBetween
-
-
-
- It also adds two more variants, to make this backward compatible and to
- make it replace `SegmentSize`:
-
- - StretchLast (default in the `Flex` enum, also behavior matches old
- default `SegmentSize::LastTakesRemainder`)
- - Stretch (behavior matches `SegmentSize::EvenDistribution`)
-
- The `Start` variant from above matches `SegmentSize::None`.
-
- This allows `Flex` to be a complete replacement for `SegmentSize`, hence
- this PR also deprecates the `segment_size` constructor on `Layout`.
- `SegmentSize` is still used in `Table` but under the hood `segment_size`
- maps to `Flex` with all tests passing unchanged.
-
- I also put together a simple example for `Flex` layouts so that I could
- test it visually, shared below:
- ```
-
- https://github.com/ratatui-org/ratatui/assets/1813121/c8716c59-493f-4631-add5-feecf4bd4e06
-
-- [9a3815b](https://github.com/ratatui-org/ratatui/commit/9a3815b66d8b6e4ff9f6475666f5742701e256bb)
- _(uncategorized)_ Add Constraint::Fixed and Constraint::Proportional ✨ ([#783](https://github.com/ratatui-org/ratatui/issues/783))
-
-- [425a651](https://github.com/ratatui-org/ratatui/commit/425a65140b61695169c996784974488ad2fd16ea)
- _(uncategorized)_ Add comprehensive tests for Length interacting with other constraints ✨ ([#802](https://github.com/ratatui-org/ratatui/issues/802))
-
-- [c50ff08](https://github.com/ratatui-org/ratatui/commit/c50ff08a630ae59c9aac10f69fe3ce67c2db449c)
- _(uncategorized)_ Add frame count ✨ ([#766](https://github.com/ratatui-org/ratatui/issues/766))
-
-- [8f56fab](https://github.com/ratatui-org/ratatui/commit/8f56fabcdd34cb3938736f3302902a7fead64ee5)
- _(uncategorized)_ Accept Color and Modifier for all Styles ([#720](https://github.com/ratatui-org/ratatui/issues/720)) [**breaking**]
-
- ````text
- * feat: accept Color and Modifier for all Styles
-
- All style related methods now accept `S: Into