Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Dec 26, 2025

Note: This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change
ratatui (source) workspace.dependencies minor 0.29.0 -> 0.30.0

Release Notes

ratatui/ratatui (ratatui)

v0.30.0

Compare Source

"Rats don't just survive; they discover; they create. ... I mean, just look at what they do with
the terminal!" – Remy & Orhun

We are excited to announce the biggest release of ratatui so far - a Rust library that's all about cooking up TUIs 👨‍🍳🐀

🌠 Added "no_std" support for embedded targets, modularized architecture, major widget & layout upgrades!

Release highlights: https://ratatui.rs/highlights/v030/

⚠️ List of breaking changes can be found here.

Features
  • 90a77aa (direction) Add Direction::perpendicular(self) by @​b-guild in #​2197

  • 56d5e05 (bar) Update label and text_value to accept Into<> by @​Emivvvvv in #​1471 [breaking]

    BREAKING CHANGE:label and text_value now accept Into<> types, which
    breaks type inference.

    - Bar::default().label("foo".into());
    + Bar::default().label("foo");
    - Bar::default().text_value("bar".into());
    + Bar::default().text_value("bar");
  • b76ad3b (bar) Impl Styled for Bar by @​Emivvvvv in #​1476

    Related:#​683

  • e15fefa (barchar) Add BarChart::grouped constructor by @​joshka in #​1513

    Add a new constructor to the BarChart widget that allows creating a
    grouped barchart with multiple groups of bars.

    Also add a new constructor to the BarGroup widget that allows creating
    a group of bars with a label.

  • 369b18e (barchart) Reduce barchart creation verbosity by @​Emivvvvv in #​1453

    Adds constructor methods for BarChart, BarGroup, and Bar

  • 1dc18bf (calendar) Add width and height functions by @​joshka in #​2198

    Fixes #​2016


  • f18bcbf (canvas) Add quadrant, sextant and octant markers by @​sbarral in #​2235 [breaking]

    The octant marker is an alternative to the Braille marker with the same
    resolution, but offering densely packed, regular pseudo-pixels, without
    visible bands between rows and columns.

    Quadrant and Sextants are also added to support 2x2 and 2x3.

    Sextant and Octant unicode characters that are less widely supported at
    the moment, which is why Braille was left as the default.

    BREAKING CHANGE:addition of new variants to Marker and removal of
    no longer used constants in ratatui::symbols::braille.

  • 26b05de (chart) Render Braille over Blocks in Charts and Canvas by @​j-g00da in #​2165

    This makes it possible to stack charts, and write text over block symbols in
    Charts and Canvas while still showing the block symbols behind the text.

  • bf84c62 (core) Add a has_modifier() method to Style by @​sxyazi in #​2267

    Resolves #​2264

  • 2d713d7 (crossterm) Allow multiple crossterm versions by @​joshka in #​1841

    This commit introduces feature flags to make it possible for widget
    library authors to depend on a specific version of crossterm without
    causing version conflicts. This should make it easier for libraries and
    apps to update crossterm versions more easily.

    The available feature flags are crossterm_0_28 and crossterm_0_29.
    By default, the latest version is enabled. If a multiple features are
    enabled we choose the latest version. We will in general support at
    least the last two major (0.x) versions of crossterm, and will only
    remove versions in a major version bump.

  • d99984f (layout) Add Flex::SpaceEvenly by @​kdheepak in #​1952 [breaking]

    Resolves #​1951

    BREAKING CHANGE:Old Flex::SpaceAround behavior is available by using

    Flex::SpaceEvenly and new

    Flex::SpaceAround now distributes space evenly around each element
    except the middle spacers
    are twice the size of first and last elements

    With this change, the following variants of Flex are supported:

    • Flex::Start: Aligns items to the start; excess space appears at the
      end.
    • Flex::End: Aligns items to the end; excess space appears at the
      start.
    • Flex::Center: Centers items with equal space on both sides.
    • Flex::SpaceAround (new): Distributes space around items; space
      between items is twice the edge spacing.
    • Flex::SpaceBetween: Distributes space evenly between items except
      no space at the edges.
    • Flex::SpaceEvenly (previously Flex::SpaceAround): Distributes
      space evenly between items and edges.
    • Flex::Legacy: Preserves legacy behavior, placing all excess space at
      the end.

    This aligns behavior of Flex with CSS flexbox more closely.

    The following is a screenshot in action:

    <img width="1090" alt="image"

    src="https://github.com/user-attachments/assets/2c7cd797-27bd-4242-a824-4565d369227b"
    />


  • 9275d34 (layout) Add Offset::new() constructor by @​joshka in #​1547

  • 7ad9c29 (linegauge) Customized symbols by @​sectore in #​1601

    With this PR any symbol (&str) can be used to render filled and
    unfilled parts of LineGauge now. Before that change, only
    symbols::line::Set
    was accepted.

    Note:New methods are introduced to define those symbols:
    filled_symbol and unfilled_symbol. The method
    line_set
    is still there, but marked as deprecated.

    line_gauge

  • 92a19cb (list) Highlight symbol styling by @​airblast-dev in #​1595 [breaking]

    Allow styling for List's highlight symbol

    This change makes it so anything that implements Into<Line> can be
    used as a highlight symbol.

    BREAKING CHANGE:List::highlight_symbol can no longer be used in const
    context

    BREAKING CHANGE:List::highlight_symbol accepted &str. Conversion
    methods that rely on type inference will need to be rewritten as the
    compiler cannot infer the type.

    closes:#​1443


  • e89a526 (no_std) Portable-atomic integration for targets with no atomic types by @​j-g00da in #​2076

    Improves compatibility with no-std targets that don't support atomic
    types.

    We support three different scenarios depending on the target:

    1. Terminal applications and other std targets (e.g. espidf):
    • std enabled, portable-atomic disabled
    1. Embedded targets with atomic types, bare metal x86, etc.:
    • std disabled portable-atomic disabled
    1. Embedded targets without atomic types (e.g. single-core MCUs):
    • std disabled, portable-atomic enabled

    Turning on portable-atomic together with std will fall back to std
    atomic.

  • 1399d95 (no_std) Make palette and serde features depends on std by @​j-g00da in #​1919

  • b32f781 (no_std) Make ratatui-macros no-std by @​j-g00da in #​1865

  • 3e1c72f (no_std) Make ratatui compatible with #![no_std] by @​j-g00da in #​1794 [breaking]

    Resolves #​1781

    This PR makes it possible to compile ratatui with #![no_std].
    Also makes me answer "We Are So Embedded" to "Are We Embedded Yet?"

  • ab48c06 (no_std) Option to disable layout cache for no_std compatibility by @​j-g00da in #​1795 [breaking]

    Resolves #​1780

    BREAKING CHANGE:Disabling default-features will now disable layout
    cache, which can have a negative impact on performance.

    Layout::init_cache and Layout::DEFAULT_CACHE_SIZE are now only
    available if layout-cache feature is enabled.

  • 09173d1 (no_std) Make TestBackend::Error Infallible by @​j-g00da in #​1823 [breaking]

    BREAKING CHANGE:TestBackend now uses core::convert::Infallible for
    error handling instead of std::io::Error

  • 007713e (no_std) Replace Backend's io::Error usages with associated Error type by @​j-g00da in #​1778 [breaking]

    Resolves #​1775

    BREAKING CHANGE:Custom backends now have to implement Backend::Error
    and Backend::clear_region. Additionally some generic Backend usage
    will have to explicitly set trait bounds for Backend::Error.

  • a42a17e (no_std) Make ratatui-widgets no_std by @​j-g00da in #​1779

    Resolves #​1776

  • 5a232a3 (no_std) Remove redundant std usages in ratatui-widgets by @​j-g00da in #​1762

  • ebe10cd (no_std) Remove redundant std usages in ratatui-core by @​j-g00da in #​1753

    Resolves #​1751

  • 08b08cc (rect) Centering by @​janTatesa in #​1814

    Resolves #​617

  • ff729b7 (scrollbar) Support retrieving the current position of state by @​orhun in #​1552

    As of now it is possible to change the position of the Scrollbar but not
    possible to retrieve the position for further use. e.g.

    let mut state = ScrollbarState::default();
    state.next();

    This commit adds a new method "current_position" (since position is
    already taken by the fluent setter) for that purpose:

    let index = state.get_position(); // yay

    See #​1545 for the concrete usage of this.

  • 4c3c054 (serde) Handle null modifiers in serde Style by @​joshka in #​2172

    Allow Style's add_modifier and sub_modifier fields to
    deserialize from null

  • b9da192 (serde) Derive Serialize/Deserialize for alignment enums by @​j-g00da in #​1957

    Resolves #​1954

  • 89b7421 (serde) Derive Serialize/Deserialize for additional structs/enums by @​aurreland in #​1883

    This PR adds #[derive(Serialize, Deserialize)] to the following
    structs:

    • Constraint
    • Direction
    • Spacing
    • Layout
    • AccentedPalette
    • NonAccentedPalette
    • Palette
    • Padding
    • Borders
    • BorderType
    • ListDirection
    • ScrollbarOrientation
    • ScrollDirection
    • RenderDirection
    • HighlightSpacing

    Fixes #​1877

  • 03f3f6d (style) Allow add/sub modifiers to be omitted in Style serialization. by @​rcorre in #​2057

    It's really useful that Style supports Deserialize, this allows TUI
    apps to have configurable theming without much extra code.

    However, deserializing a style currently fails if add_modifier and
    sub_modifier are
    not specified. That means the following TOML config:

    [theme.highlight]
    fg = "white"
    bg = "black"

    Will fail to deserialize with "missing field add_modifier". It should
    be possible
    to omit modifiers and have them default to "none".

  • ee67347 (symbols) Make Marker non-exhaustive by @​j-g00da in #​2236 [breaking]

    This will allow us to add new markers without causing further breaking
    changes.

    BREAKING CHANGE:Marker is now non-exhaustive

  • 985cd05 (symbols) Add dashed borders by @​theotchlx in #​1573

    Adds several new border sets:

    • ratatui::symbols::border::LIGHT_DOUBLE_DASHED
    • ratatui::symbols::border::HEAVY_DOUBLE_DASHED
    • ratatui::symbols::border::LIGHT_TRIPLE_DASHED
    • ratatui::symbols::border::HEAVY_TRIPLE_DASHED
    • ratatui::symbols::border::LIGHT_QUADRUPLE_DASHED
    • ratatui::symbols::border::HEAVY_QUADRUPLE_DASHED

    And corresponding variants to the ratatui::widgets::BorderType enum

    Fixes:#​1355

  • 4c301e8 (text) Implement AddAssign for Text by @​acuteenvy in #​1956

    This makes it possible to add a second Text instance to a first one using the += operator.

    let mut text = Text::from("line 1");
    text += Text::from("line 2");

    Style and alignment applied to the second text is ignored (though styles and alignment of lines and spans are copied).

  • ce4856a (widgets) Add the missing constructor to canvas types by @​orhun in #​1538

    Allows constructing Rectangle, Points and Circle using the new
    method instead of initializing with the public fields directly.

  • 22610b0 (uncategorized) Support adding an Offset to Position by @​joshka in #​2239

    Adds Position::offset() and arithmentic ops (Position + Offset and
    Position - Offset)

    Fixes:#​2018

  • 24e3133 (uncategorized) Add Rect::resize() method by @​joshka in #​2240

    Fixes:#​1440

  • 96d097e (uncategorized) Implement Rect ops for moving by @​joshka in #​1596

    feat:implement Rect ops for moving

    Implemented Add, AddAssign, Sub, and SubAssign on Rect for
    Offset. This makes it possible to move rects

    let rect = Rect::new(1, 2, 3, 4);
    let moved = rect + Offset(1, 2);
    let moved = rect - Offset(1, 2);
    let moved = rect + Offset(-1, -2);

    Additionally Rect, Size, Offset, and Position now all have MIN and MAX
    consts.

  • e869cb9 (uncategorized) Add Size::area() by @​joshka in #​2226

    Add Size::area() returning u32 to avoid u16 overflow
    Fixes #​2204

  • b6588fd (uncategorized) Implement From<Size> for (u16, u16) by @​0xb002f0 in #​2223

  • 75b78be (uncategorized) Add width() impl for tabs by @​joshka in #​2049

    The purpose of this is to make it easy for apps to easily calculate the
    total tab width including all dividers and padding.

  • 8188ed3 (uncategorized) Implement UnicodeWidthStr for Text/Line/Span by @​joshka in #​2030

    You can now calculate the width of any Text/Line/Span using the
    UnicodeWidthStr trait instead of the width method on the type. This also
    makes it possible to use the width_cjk() method if needed.

  • c845fec (uncategorized) Add conversion from Size to Rect by @​joshka in #​2028

    Rect::from(size) returns a new Rect at the origin (0, 0) with the
    specified Size

  • 017af11 (uncategorized) Preserve block titles when merging borders by @​j-g00da in #​1977

    Resolves #​1939

  • 6dcd53b (uncategorized) Add ergonomic methods for layouting Rects by @​joshka in #​1909

    This commit introduces new methods for the Rect struct that simplify
    the process of splitting a Rect into sub-rects according to a given
    Layout. By putting these methods on the Rect struct, we make it a
    bit more natural that a layout is applied to the Rect itself, rather
    than passing a Rect to the Layout struct to be split.

    Adds:- Rect::layout and Rect::try_layout methods that allow splitting a
    Rect into an array of sub-rects according to a given Layout.

    • Rect::layout_vec method that returns a Vec of sub-rects.
    • Layout::try_areas method that returns an array of sub-rects, with
      compile-time checks for the number of constraints. This is added
      mainly for consistency with the new Rect methods.
    use ratatui_core::layout::{Layout, Constraint, Rect};
    let area = Rect::new(0, 0, 10, 10);
    let layout = Layout::vertical([Constraint::Fill(1); 2]);
    
    // Rect::layout() infers the number of constraints at compile time:
    let [top, main] = area.layout(&layout);
    
    // Rect::try_layout() and Layout::try_areas() do the same, but return a
    // Result:
    let [top, main] = area.try_layout(&layout)?;
    let [top, main] = layout.try_areas(area)?;
    
    // Rect::layout_vec() returns a Vec of sub-rects:
    let areas_vec = area.layout_vec(&layout);
    
    // you can also explicitly specify the number of constraints:
    let areas = area.layout::<2>(&layout);
    let areas = area.try_layout::<2>(&layout)?;
    let areas = layout.try_areas::<2>(area)?;
  • 0c3872f (uncategorized) Add Rect::outer() by @​joshka in #​1929

    Fixes:#​211

  • 7bc78bc (uncategorized) Add ratatui::run() method by @​joshka in #​1707

    This introduces a new ratatui::run() method which runs a closure with
    a terminal initialized with reasonable defaults for most applications.
    This calls ratatui::init() before running the closure and
    ratatui::restore() after the closure completes, and returns the result
    of the closure.

    A minimal hello world example using the new ratatui::run() method:

    fn main() -> Result<(), Box<dyn std::error::Error>> {
        ratatui::run(|terminal| {
            loop {
                terminal.draw(|frame| frame.render_widget("Hello World!", frame.area()))?;
                if crossterm::event::read()?.is_key_press() {
                    break Ok(());
                }
            }
        })
    }

    Of course, this also works both with apps that use free methods and
    structs:

    fn run(terminal: &mut DefaultTerminal) -> Result<(), AppError> { ... }
    
    ratatui::run(run)?;
    struct App { ... }
    
    impl App {
        fn new() -> Self { ... }
        fn run(mut self, terminal: &mut DefaultTerminal) -> Result<(), AppError> { ... }
    }
    
    ratatui::run(|terminal| App::new().run(terminal))?;
  • b6fbfcd (uncategorized) Add lifetime to symbol sets by @​joshka in #​1935

    This makes it possible to create symbol sets at runtime with non-static
    lifetimes.

    Fixes:#​1722

  • 488e5f0 (uncategorized) Make border! work without importing Borders by @​j-g00da in #​1918

    Currently using border! macro requires explicit import of Borders
    which is unnecessary.

  • 671c2b4 (uncategorized) Support merging the borders of blocks by @​j-g00da

    When two borders overlap, they will automatically merge into a single,
    clean border instead of overlapping.

    This improves visual clarity and reduces rendering glitches around corners.

    For example:

    assert_eq!(Cell::new("┘").merge_symbol("┏", MergeStrategy::Exact).symbol(), "╆");
    
  • 702fff5 (uncategorized) Implement stylize methods directly on Style by @​joshka in #​1572 [breaking]

    This makes it possible to create constants using the shorthand methods.

    const MY_STYLE: Style = Style::new().blue().on_black();

    Rather than implementing Styled for Style and then adding extension
    methods that implement the Stylize shorthands, this implements the
    methods as const functions directly on Style.

    BREAKING CHANGE:Style no longer implements Styled. Any calls to
    methods implemented by the blanket implementation of Stylize are now
    defined directly on Style. Remove the Stylize import if it is no longer
    used by your code.

    The reset() method does not have a direct replacement, as it clashes
    with the existing reset() method. Use Style::reset() rather than
    some_style.reset()

    Fixes:#​1158

  • 4fcd238 (uncategorized) Support no-std for calendar widget by @​joshka in #​1852

    Removes the CalendarEventStore::today() function in no-std environments

  • 53cdbbc (uncategorized) Enable serde propagation to backend crates (crossterm, termion) by @​ArjunKrish7356 in #​1812

    This PR propagates the serde feature from the main ratatui crate to the
    ratatui-crossterm and ratatui-termion backend crates. Solves #​1805

  • 6836a69 (uncategorized) Implement styled for other primitives by @​aschey in #​1684

  • fcb47d6 (uncategorized) Rename Alignment to HorizontalAlignment and add VerticalAlignment by @​joshka in #​1735 [breaking]

    We don't anticipate removing or deprecating the type alias in the near
    future, but it is recommended to update your imports to use the new
    name.

    Added a VerticalAlignment enum to make the API more consistent. We don't
    have a specific use case for it yet, but it's better to add it now and
    be able to use it in the future.

    BREAKING-CHANGE:The Alignment enum has been renamed to
    HorizontalAlignment to better reflect its purpose. A type alias has
    been added to maintain backwards compatibility, however there are some
    cases where type aliases are not enough to maintain backwards
    compatibility. E.g. when using glob imports to import all the enum
    variants. This should not affect most users, but it is recommended to
    update your imports to use the new name.

    - use ratatui::layout::Alignment;
    + use ratatui::layout::HorizontalAlignment;
    
    - use Alignment::*;
    + use HorizontalAlignment::*;
  • 2714d6b (uncategorized) Add array and tuple RGB color conversion methods by @​joshka in #​1703

    Other crates (e.g. colorgrad) that deal with colors can convert colors
    to a tuple of 3 or 4 u8 values. This commit adds conversion methods from
    these types to a Color::Rgb instance. Any alpha value is ignored.

    Color::from([255, 0, 0]);
    Color::from((255, 0, 0));
    Color::from([255, 0, 0, 255]);
    Color::from((255, 0, 0, 255));
  • 50ba965 (uncategorized) Add a new RatatuiMascot widget by @​Its-Just-Nans in #​1584

    Move the Mascot from Demo2 into a new widget.
    Make the Rat grey and adjust the other colors.

    frame.render_widget(RatatuiMascot::default(), frame.area());
  • 1d28c89 (uncategorized) Add conversions for anstyle by @​joshka in #​1581

    https://crates.io/crates/anstyle makes it possible to define colors in
    an interoperable way. This makes it possible for applications to easily
    load colors from a variety of formats.

    This is gated by the anstyle feature flag which is disabled by default.


Bug Fixes
  • a89d3d6 (buffer) Clear behavior with VS16 wide emojis by @​nornagon in #​2063

    This fixes a bug where certain emojis like ⌨️ would sometimes be
    "overlaid" onto existing content from the buffer, instead of properly
    clearing.

    example demonstrating
    bug

    This PR was generated by Codex, and validated by me:

    1. Behavior of the above example code was buggy before this fix (showed
      overlaying "b" on top of the keyboard emoji), and fixed after.
    2. The U+FE0F check is not strictly required, but I did note that emoji
      without this char don't exhibit the buggy behavior, even without the
      fix.

  • ec30390 (canvas) Round coordinates to nearest grid cell by @​joshka in #​1507

    Previously the canvas coordinates were rounded towards zero, which
    causes the rendering to be off by one pixel in some cases. It also meant
    that pixels at the extreme edges of the canvas can only be drawn if the
    point was exactly on the edge of the canvas. This commit rounds the
    coordinates to the nearest integer instead. This may change the output
    for some apps using Canvas / Charts.

  • afd1ce1 (canvas) Lines that start outside the visible grid are now drawn by @​renesat in #​1501

    Previously lines with points that were outside the canvas bounds were
    not drawn at all. Now they are clipped to the bounds of the canvas so
    that the portion of the line within the canvas is draw.

    To facilitate this, a new Painter::bounds() method which returns the
    bounds of the canvas is added.

    Fixes:#​1489

  • 2b0a044 (ci) Add contents write permission to release-plz PR by @​marcoieni in #​2119

    https://release-plz.dev/docs/github/quickstart#3-setup-the-workflow

    Fixes release-plz/release-plz#2439

  • 18e70d3 (crossterm) Terminal should keep Bold when removing Dim by @​MarSik in #​1541

    The Dim removal should behave the same as the logic for Bold removal
    that sends NormalIntensity sequence and then restores Dim when needed.

  • 16b76e3 (demo) Update the width of demo2 tape by @​orhun in #​2164

    fixes #​1721

  • dca331c (demo) Support tab key in demo2 example by @​orhun in #​1726

    see #​1721

    Not sure what caused this - it's been there for a while probably and we
    didn't realize it since we used demo2-destroy mostly.

  • 0fd4753 (examples) Run the correct example for chart by @​orhun in #​1679

    fixes #​1678

  • 39479e2 (examples) Ensure that example projects are not published by @​orhun in #​1672

  • 9314312 (layout) Feature flag cache related types by @​joshka in #​1842

  • 2dd1977 (layout-cache) Import NonZeroUsize only when layout-cache is enabled by @​j-g00da in #​1839

    This silences unused import warning, when layout-cache is disabled.

  • 564a9d7 (line-gauge) Pad default label to display 3 numbers by @​martinetd in #​2053

    Display the default label of the LineGauge widget padded to fill 3 cells.
    This makes it so that the label doesn't shift around when going from a
    single digit to double / triple digits.

    To maintain the existing behavior, use a custom label by calling .label()
    on the LineGauge.

  • a692a6e (lint) Apply rust 1.84 clippy suggestions by @​joshka in #​1612

    The canvas map constants are now statics instead.
    Fixes
    https://rust-lang.github.io/rust-clippy/master/index.html\\#large_const_arrays

  • 2e54d5e (macros) Use $crate re-export in text macro by @​airblast-dev in #​1832

  • 79d5165 (no_std) Propagate std feature flag to dependencies by @​j-g00da in #​1838

    Disables std feature flags in dependencies and only enables them with
    ratatui and ratatui-core's std feature flag. This partially fixes the
    issue of still depending on std, when std feature flag is disabled.

  • 00da8c6 (no_std) Provide f64 polyfills for no_std compatibility by @​j-g00da in #​1840

    Related:rust-lang/rust#137578

  • 3b13240 (scrollbar) Check for area.is_empty() before rendering by @​farmeroy in #​1529

    This adds the area.is_empty() back into the scrollbar render method.
    Without it, the widget panics if the height is 0.

  • f57b696 (span) Dont render control characters by @​EdJoPaTo in #​1312

  • 2ce958e (table) Allow display of additional table row, if row height > 1 by @​Lunderberg in #​1452

  • 0a25bc1 (tests) Update the stderr snapshot for ratatui-macros by @​orhun in #​2161

    New 🦀 broke the CI

  • 5fa342c (widgets) Fix centered block title truncation by @​ognis1205 in #​1973

    Previously block titles that were aligned center were
    truncated poorly (aligned to the left, and the last
    non-fitting title would be truncated on the left and right.
    This now truncates the titles more obviously centered.

  • f919b25 (uncategorized) String_to_string lint is now part of implicit_clone by @​joshka in #​2173

  • 1fe64de (uncategorized) Include underline color in anstyle conversion by @​aschey in #​2004

    Underline color wasn't included in the style conversion logic.

  • c1b8528 (uncategorized) Panic when rendering widgets on too small buffer by @​j-g00da in #​1996

    Fixes panic on overflow on horizontal Barchart and RatatuiMascot and adds proper tests to all widgets.


  • 08b21fa (uncategorized) Fix panic when rendering a Paragraph out of bounds by @​jwodder in #​1670

    Fixes #​1667.

  • 80bc818 (uncategorized) Fix truncation of left aligned block titles by @​joshka in #​1931

    truncate the right side of left aligned titles rather than the left side
    of right aligned titles. This is more obvious as the left side of text
    often contains more important information. And we generally read
    left to right.

    This change makes centered titles overwrite left aligned titles and
    right aligned titles overwrite centered or left aligned titles.

    Fixes:#​358

  • 21e3b59 (uncategorized) Fix handling of multi-byte chars in bar chart by @​joshka in #​1934

    The split_at method requires that the split point is at a valid utf8
    character boundary.

    Fixes:#​1928

  • e1e4004 (uncategorized) Derive copy for list state by @​janTatesa in #​1921

  • 12cb5a2 (uncategorized) Allow canvas area to exceed u16::MAX by @​Daksh14 in #​1891

    This allows Canvas grids where the width * height exceeds u16::MAX by
    converting values to usize earlier in several methods.

    Fixes:#​1449

  • 09cc9ef (uncategorized) Typo in changelog by @​joshka in #​1857

  • c238aca (uncategorized) padding_right() should set right padding instead of left by @​sxyazi in #​1837

    Fixes #​1836

  • c90ba97 (uncategorized) Avoid unnecessary imports in minimal build by @​cgzones in #​1787

    core::ops::Range is only used with the feature scrolling-regions.
    Ensure a minimal cargo check reports no warnings.

  • 416ebdf (uncategorized) Correct clippy errors introduced by rust 1.86.0 update by @​j-g00da in #​1755

    New version of rust (1.86.0) caused CI to fail.

  • 4eac5b2 (uncategorized) Make deprecation notes more helpful by @​joshka in #​1702

    AI coding assistants use the deprecation notes to automatically suggest
    fixes. This commit updates the deprecation notes to push those tools to
    suggest the correct replacement methods and types.

    Specifically, AI tools often suggest using Buffer::get(x, y), because
    of their training data where this was prevalent. When fixing these
    deprecations, they often incorrectly suggest using Buffer::get(x, y)
    instead of Buffer[(x, y)].

  • 35a8642 (uncategorized) Rect::positions() should be empty when width is 0 and height is nonzero by @​jwodder in #​1669

    Fixes #​1666.

  • f5fc819 (uncategorized) Avoid extra line break on whitespace only lines when wrapping paragraphs by @​dotdash in #​1636

    Currently whitespace only lines produces an extra line break when
    trimming is disabled, because both the trimmed as well as the
    non-trimmed line get inserted. Fix this by only inserting the
    non-trimmed one.

  • 2892bdd (uncategorized) Rust 1.83 clippy lints by @​joshka in #​1527

    https://rust-lang.github.io/rust-clippy/master/index.html#needless_lifetimes

  • 36e2d1b (uncategorized) Add feature(doc_cfg) when generating docs by @​joshka in #​1506

  • 4d7704f (uncategorized) Make StatefulWidget and Ref work with unsized State by @​thscharler in #​1505

    StatefulWidget::State and StatefulWidgetRef::State are now ?Sized.

    This allows implementations of the traits to use unsized types for the
    State associated type. This is turn is useful when doing things like
    boxing different stateful widget types with State which implements
    Any, are slices or any other dynamically sized type.

  • 7b87509 (uncategorized) Typo by @​marcoieni in #​1480

Refactor
  • 8d60e96 (examples) Use crossterm event methods by @​joshka in #​1792

    Crossterm 0.29 introduced methods to easily check / extract the event
    type. E.g. as_key_press_event() and is_key_press(). This commit
    updates the examples to use these methods instead of matching on
    the event type. This makes the code cleaner and easier to read.

    Also does a general cleanup of the event handling code in the examples.

  • 07bec55 (no_std) Make usages of std explicit in ratatui-core. by @​ed-2100 in #​1782

    This commit does the following:

    • Adds #[no_std] to lib.rs.
    • Adds extern crate std; to lib.rs.
    • Updates ratatui-core to explicitly use items from std and alloc.
    • Prefers use-ing alloc over std when possible.

    Explanation:

    This allows usages of std in ratatui-core to be clearly pointed out
    and dealt with individually.

    Eventually, when std is to be feature gated, the associated commit
    will be much cleaner.

  • f132fa1 (table) Small readability improvements by @​joshka in #​1510

  • c7c3498 (uncategorized) Use saturating_add in Rect::new by @​pharrison31415 in #​2216

  • 02e53de (uncategorized) Make use of iter::repeat_n() by @​cgzones in #​1788

    Applied via clippy --fix.
    Available since 1.82.0.

  • a195d59 (uncategorized) Move xtask commands to small modules by @​joshka in #​1620

  • 904b0aa (uncategorized) Move symbols to modules by @​joshka in #​1594

  • 7c8573f (uncategorized) Rearrange selection_spacing code by @​raylu in #​1540

  • 217c57c (uncategorized) Modularize backends by @​orhun in #​1508

    Backend code is now moved to ratatui-crossterm, ratatui-termion and
    ratatui-termwiz. This should be backwards compatible with existing code.

  • e461b72 (uncategorized) Move {Stateful,}Widget{,Ref} types into individual files by @​joshka in #​1479

    This is a preparatory refactoring for modularization. No user visible
    changes.

Documentation
  • [40e96a2](https:/

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant