diff --git a/agentydragon/tasks/18-chat-ui-textarea-overlay-border-fix.md b/agentydragon/tasks/18-chat-ui-textarea-overlay-border-fix.md index 02ad4a3208..3cf7af25fe 100644 --- a/agentydragon/tasks/18-chat-ui-textarea-overlay-border-fix.md +++ b/agentydragon/tasks/18-chat-ui-textarea-overlay-border-fix.md @@ -1,8 +1,8 @@ +++ id = "18" title = "Chat UI Textarea Overlay and Border Styling Fix" -status = "Not started" -dependencies = "" # No prerequisites +status = "Done" +dependencies = "02,07,09,11,14,29" last_updated = "2025-06-25T01:40:09.514379" +++ @@ -32,10 +32,12 @@ goal: | ## Implementation **How it was implemented** -*(Not implemented yet)* +* Merged the bottom border of the history pane and the top border of the input textarea into a single shared line by removing the textarea's top border and keeping only a bottom border on the textarea and both top/bottom borders on the history pane.* +* Removed left/right borders on both panes (history and textarea) and removed the textarea's bottom border from the overall UI to reclaim horizontal space.* +* Updated the status-indicator overlay to render in its own floating box immediately above the textarea instead of covering the first input line.* **How it works** -*(Not implemented yet)* +At runtime the conversation history widget now draws only its top and bottom borders. The input textarea draws only its bottom border, carrying the help title there. These changes yield a single continuous border line separating history from input and eliminate the outer left, right, and bottom borders. Status messages ("Thinking...", etc.) render in a separate floating box positioned just above the textarea, leaving the user's draft text visible at all times. ## Notes diff --git a/codex-rs/tui/src/bottom_pane/chat_composer.rs b/codex-rs/tui/src/bottom_pane/chat_composer.rs index 79d80a05bd..8e9e4390fe 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer.rs +++ b/codex-rs/tui/src/bottom_pane/chat_composer.rs @@ -347,7 +347,7 @@ impl ChatComposer<'_> { self.textarea.set_block( ratatui::widgets::Block::default() .title_bottom(bs.right_title) - .borders(Borders::ALL) + .borders(Borders::BOTTOM) .border_type(BorderType::Rounded) .border_style(bs.border_style), ); diff --git a/codex-rs/tui/src/bottom_pane/status_indicator_view.rs b/codex-rs/tui/src/bottom_pane/status_indicator_view.rs index d9ac57d7b9..9698925532 100644 --- a/codex-rs/tui/src/bottom_pane/status_indicator_view.rs +++ b/codex-rs/tui/src/bottom_pane/status_indicator_view.rs @@ -39,6 +39,10 @@ impl<'a> BottomPaneView<'a> for StatusIndicatorView { } fn render(&self, area: Rect, buf: &mut Buffer) { - self.view.render_ref(area, buf); + // Render the status overlay in a floating box immediately above the textarea + let h = self.view.get_height(); + let y = area.y.saturating_sub(h); + let rect = Rect { x: area.x, y, width: area.width, height: h }; + self.view.render_ref(rect, buf); } } diff --git a/codex-rs/tui/src/conversation_history_widget.rs b/codex-rs/tui/src/conversation_history_widget.rs index 714ac074a7..c137487154 100644 --- a/codex-rs/tui/src/conversation_history_widget.rs +++ b/codex-rs/tui/src/conversation_history_widget.rs @@ -332,7 +332,7 @@ impl WidgetRef for ConversationHistoryWidget { let block = Block::default() .title(title) - .borders(Borders::ALL) + .borders(Borders::TOP | Borders::BOTTOM) .border_type(BorderType::Rounded) .border_style(border_style);