chore: migrate tui-textarea to ratatui-textarea

Replace the tui-textarea dependency (via madsmao fork) with
ratatui-textarea from the official ratatui org's fork.

The upstream ratatui/ratatui-textarea main branch only supports
ratatui 0.29, which conflicts with bat's unicode-width ^0.2.1
requirement. Using dotdash's PR #3 branch (pinned to commit sha)
which adds ratatui 0.30 support via the split ratatui sub-crates.

Changes:
- Remove workspace [patch.crates-io] for tui-textarea
- Switch goose-tui dep from tui-textarea to ratatui-textarea
- Update all imports from tui_textarea to ratatui_textarea

Ref: https://github.com/ratatui/ratatui-textarea/pull/3
This commit is contained in:
Tyler Longwell
2026-02-20 09:35:01 -05:00
parent 68ab6e6e46
commit ac201efadf
7 changed files with 22 additions and 23 deletions
Generated
+13 -12
View File
@@ -4751,6 +4751,7 @@ dependencies = [
"goose-server",
"http 1.4.0",
"ratatui",
"ratatui-textarea",
"rmcp 0.16.0",
"rustyline",
"serde",
@@ -4765,7 +4766,6 @@ dependencies = [
"tracing",
"tracing-appender",
"tracing-subscriber",
"tui-textarea",
"unicode-width 0.2.2",
"uuid",
]
@@ -8158,6 +8158,18 @@ dependencies = [
"termwiz",
]
[[package]]
name = "ratatui-textarea"
version = "0.7.0"
source = "git+https://github.com/dotdash/ratatui-textarea?rev=a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e#a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e"
dependencies = [
"ratatui-core",
"ratatui-crossterm",
"ratatui-widgets",
"regex",
"unicode-width 0.2.2",
]
[[package]]
name = "ratatui-widgets"
version = "0.3.0"
@@ -11556,17 +11568,6 @@ version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "tui-textarea"
version = "0.7.0"
source = "git+https://github.com/madsmao/tui-textarea?rev=48792febd9d454fefdd869de0e75849cad6e6007#48792febd9d454fefdd869de0e75849cad6e6007"
dependencies = [
"crossterm",
"ratatui",
"regex",
"unicode-width 0.2.2",
]
[[package]]
name = "tungstenite"
version = "0.28.0"
-4
View File
@@ -74,7 +74,3 @@ tracing-opentelemetry = "0.32"
codegen-units = 1
lto = true
[patch.crates-io]
# Use PR #122 which updates to ratatui 0.30 (fixes unicode-width conflict with pctx)
# https://github.com/rhysd/tui-textarea/pull/122
tui-textarea = { git = "https://github.com/madsmao/tui-textarea", rev = "48792febd9d454fefdd869de0e75849cad6e6007" }
+2 -1
View File
@@ -15,7 +15,8 @@ rmcp = { workspace = true }
anyhow = "1.0"
ratatui = { version = "0.30.0", features = ["unstable-rendered-line-info"] }
crossterm = { version = "0.29", features = ["event-stream"] }
tui-textarea = { version = "0.7.0", features = ["search"] }
# TODO: Move to ratatui/ratatui-textarea once https://github.com/ratatui/ratatui-textarea/pull/3 merges
ratatui-textarea = { git = "https://github.com/dotdash/ratatui-textarea", rev = "a31abb7b0b999f4e35fed65b76f8d1cb41d6e85e", features = ["search"] }
tokio = { version = "1.43", features = ["full"] }
tokio-util = { version = "0.7.10", features = ["full"] }
axum = { version = "0.8.1", features = ["ws", "macros"] }
+4 -3
View File
@@ -13,7 +13,7 @@ use ratatui::style::Style;
use ratatui::text::Span;
use ratatui::widgets::{Block, BorderType, Borders, Clear, List, ListItem};
use ratatui::Frame;
use tui_textarea::TextArea;
use ratatui_textarea::TextArea;
pub const MAX_HISTORY_ENTRIES: usize = 100;
pub const MAX_HISTORY_ENTRY_SIZE: usize = 10_000;
@@ -127,8 +127,9 @@ impl<'a> InputComponent<'a> {
self.textarea = TextArea::new(lines);
self.textarea.set_placeholder_text("Type a message...");
self.textarea.set_cursor_line_style(Style::default());
self.textarea.move_cursor(tui_textarea::CursorMove::Bottom);
self.textarea.move_cursor(tui_textarea::CursorMove::End);
self.textarea
.move_cursor(ratatui_textarea::CursorMove::Bottom);
self.textarea.move_cursor(ratatui_textarea::CursorMove::End);
}
pub fn seed_history(&mut self, messages: &[goose::conversation::message::Message]) {
@@ -15,7 +15,7 @@ use goose_client::ToolInfo;
use ratatui::layout::Rect;
use ratatui::widgets::{Clear, ListState, ScrollbarState};
use ratatui::Frame;
use tui_textarea::TextArea;
use ratatui_textarea::TextArea;
use widgets::new_text_input;
#[derive(Clone, Copy, PartialEq, Default)]
@@ -4,7 +4,7 @@ use crate::utils::styles::Theme;
use ratatui::style::{Modifier, Style};
use ratatui::text::{Line, Span};
use ratatui::widgets::{Block, BorderType, Borders, ListItem};
use tui_textarea::TextArea;
use ratatui_textarea::TextArea;
pub fn input_block(title: &str, focused: bool, theme: &Theme) -> Block<'static> {
let border_color = if focused {
@@ -15,7 +15,7 @@ use ratatui::widgets::{
Block, BorderType, Borders, Clear, List, ListItem, ListState, Paragraph, ScrollbarState,
};
use ratatui::Frame;
use tui_textarea::TextArea;
use ratatui_textarea::TextArea;
const CRON_PRESETS: [(&str, &str, &str); 5] = [
("1", "0 * * * *", "Every hour"),