This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 40e970ad1f8e fix: add missing .borders(Borders.ALL) to restore TUI 
pane borders (#24280)
40e970ad1f8e is described below

commit 40e970ad1f8ed15430f5c90e7147d613a81ba36d
Author: Guillaume Nodet <[email protected]>
AuthorDate: Mon Jun 29 14:58:09 2026 +0200

    fix: add missing .borders(Borders.ALL) to restore TUI pane borders (#24280)
    
    - Add .borders(Borders.ALL) after every .borderType(BorderType.ROUNDED) 
call across 36 TUI source files
    - Remove empty spacer rows above/below tab bar (borders provide sufficient 
separation)
    - Move chart y-axis/x-axis labels inside the chart border so panel aligns 
with adjacent panes
---
 .../dsl/jbang/core/commands/tui/ActionsPopup.java  |  15 +-
 .../dsl/jbang/core/commands/tui/BeansTab.java      |  12 +-
 .../dsl/jbang/core/commands/tui/BrowseTab.java     |  15 +-
 .../jbang/core/commands/tui/CamelCatalogTui.java   |  10 +-
 .../dsl/jbang/core/commands/tui/CamelMonitor.java  |  24 +-
 .../jbang/core/commands/tui/CircuitBreakerTab.java |  11 +-
 .../dsl/jbang/core/commands/tui/ClasspathTab.java  |   7 +-
 .../jbang/core/commands/tui/ConfigurationTab.java  |   5 +-
 .../dsl/jbang/core/commands/tui/ConsumersTab.java  |   3 +-
 .../jbang/core/commands/tui/DiagramSupport.java    |  13 +-
 .../dsl/jbang/core/commands/tui/DiagramTab.java    |   7 +-
 .../dsl/jbang/core/commands/tui/DoctorPopup.java   |   3 +-
 .../dsl/jbang/core/commands/tui/EndpointsTab.java  |  13 +-
 .../dsl/jbang/core/commands/tui/ErrorsTab.java     |   7 +-
 .../dsl/jbang/core/commands/tui/FilesBrowser.java  |   3 +-
 .../dsl/jbang/core/commands/tui/HealthTab.java     |   3 +-
 .../dsl/jbang/core/commands/tui/HelpOverlay.java   |   3 +-
 .../dsl/jbang/core/commands/tui/HistoryTab.java    |  21 +-
 .../camel/dsl/jbang/core/commands/tui/HttpTab.java |  19 +-
 .../dsl/jbang/core/commands/tui/InflightTab.java   |   5 +-
 .../camel/dsl/jbang/core/commands/tui/LogTab.java  |   7 +-
 .../dsl/jbang/core/commands/tui/McpLogPopup.java   |   7 +-
 .../dsl/jbang/core/commands/tui/MemoryTab.java     |   7 +-
 .../dsl/jbang/core/commands/tui/MetricsTab.java    |   9 +-
 .../jbang/core/commands/tui/MonitorContext.java    |   3 +-
 .../dsl/jbang/core/commands/tui/OverviewTab.java   |  32 +-
 .../dsl/jbang/core/commands/tui/ProcessTab.java    |   3 +-
 .../dsl/jbang/core/commands/tui/RoutesTab.java     |  18 +-
 .../jbang/core/commands/tui/RunOptionsForm.java    |   5 +-
 .../jbang/core/commands/tui/SendMessagePopup.java  |  11 +-
 .../dsl/jbang/core/commands/tui/ShellPanel.java    |   3 +-
 .../dsl/jbang/core/commands/tui/SourceViewer.java  |   3 +-
 .../dsl/jbang/core/commands/tui/SpansTab.java      |   9 +-
 .../dsl/jbang/core/commands/tui/StartupTab.java    |   9 +-
 .../dsl/jbang/core/commands/tui/StopAllPopup.java  |   3 +-
 .../dsl/jbang/core/commands/tui/ThreadsTab.java    |  13 +-
 .../jbang/core/commands/tui/BorderRenderTest.java  | 517 +++++++++++++++++++++
 37 files changed, 705 insertions(+), 153 deletions(-)

diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
index e5cf39f49ce5..6f57ad1ec389 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ActionsPopup.java
@@ -46,6 +46,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.input.TextInput;
 import dev.tamboui.widgets.input.TextInputState;
@@ -818,7 +819,7 @@ class ActionsPopup {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.NONE)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Actions ")
                         .build())
                 .build();
@@ -844,7 +845,7 @@ class ActionsPopup {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.AUTO_SCROLL)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Run an Example (" + exampleCatalog.size() + 
") ")
                         .build())
                 .build();
@@ -910,7 +911,7 @@ class ActionsPopup {
             title = Title.from(" " + docTitle + " ");
         }
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         if (docLines != null) {
@@ -960,7 +961,7 @@ class ActionsPopup {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.AUTO_SCROLL)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Show Integration Doc ")
                         .build())
                 .build();
@@ -1331,7 +1332,7 @@ class ActionsPopup {
         frame.renderWidget(Clear.INSTANCE, popup);
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Run from folder ")
                 .build();
         frame.renderWidget(block, popup);
@@ -1782,7 +1783,7 @@ class ActionsPopup {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.AUTO_SCROLL)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Run Dev/Infra Service (" + available + "/" + 
infraCatalog.size() + ") ")
                         .build())
                 .build();
@@ -1805,7 +1806,7 @@ class ActionsPopup {
         frame.renderWidget(Clear.INSTANCE, popup);
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Run " + selectedInfraService.alias + " ")
                 .build();
         frame.renderWidget(block, popup);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BeansTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BeansTab.java
index b5d4cd0ef979..7f9625bd28c6 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BeansTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BeansTab.java
@@ -35,6 +35,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
@@ -185,7 +186,7 @@ class BeansTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Loading 
beans...", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Beans ").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Beans ").build())
                             .build(),
                     area);
             return;
@@ -240,7 +241,7 @@ class BeansTab implements MonitorTab {
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, tableState);
@@ -252,7 +253,8 @@ class BeansTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Select a 
bean", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Properties 
").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Properties ")
+                                    .build())
                             .build(),
                     area);
             return;
@@ -265,7 +267,7 @@ class BeansTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" No 
properties", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -297,7 +299,7 @@ class BeansTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BrowseTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BrowseTab.java
index 7c92dd1e1b23..520f1d394712 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BrowseTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/BrowseTab.java
@@ -41,6 +41,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
@@ -248,7 +249,8 @@ class BrowseTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Loading 
browse endpoints...", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Browse ").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Browse ")
+                                    .build())
                             .build(),
                     area);
             return;
@@ -296,7 +298,7 @@ class BrowseTab implements MonitorTab {
                         Constraint.length(10))
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, endpointTableState);
@@ -308,7 +310,7 @@ class BrowseTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Loading 
messages...", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -349,7 +351,7 @@ class BrowseTab implements MonitorTab {
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, messageTableState);
@@ -361,7 +363,8 @@ class BrowseTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Select a 
message", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Message 
").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Message ")
+                                    .build())
                             .build(),
                     area);
             return;
@@ -432,7 +435,7 @@ class BrowseTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(visible))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 chunks.get(1));
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelCatalogTui.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelCatalogTui.java
index 9710a6506445..2c9ad16ff74b 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelCatalogTui.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelCatalogTui.java
@@ -417,7 +417,7 @@ public class CamelCatalogTui extends CamelCommand {
                         Style.EMPTY.fg(Color.CYAN)));
 
         Block headerBlock = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Apache Camel ")
                 .build();
 
@@ -468,7 +468,7 @@ public class CamelCatalogTui extends CamelCommand {
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .borderStyle(borderStyle)
                         .title(listTitle)
                         .build())
@@ -494,7 +494,7 @@ public class CamelCatalogTui extends CamelCommand {
                             .text(Text.from(Line.from(
                                     Span.styled(emptyMsg, Style.EMPTY.dim()))))
                             .block(Block.builder()
-                                    .borderType(BorderType.ROUNDED)
+                                    
.borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .borderStyle(borderStyle)
                                     .title(optTitle)
                                     .build())
@@ -527,7 +527,7 @@ public class CamelCatalogTui extends CamelCommand {
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .borderStyle(borderStyle)
                         .title(optTitle)
                         .build())
@@ -617,7 +617,7 @@ public class CamelCatalogTui extends CamelCommand {
                         .overflow(Overflow.WRAP_WORD)
                         .scroll(descriptionScroll)
                         .block(Block.builder()
-                                .borderType(BorderType.ROUNDED)
+                                
.borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                 .title(title)
                                 .build())
                         .build(),
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
index 23a61d45d60e..2fac10ed617a 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CamelMonitor.java
@@ -65,6 +65,7 @@ import dev.tamboui.tui.event.TickEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.list.ListItem;
 import dev.tamboui.widgets.list.ListState;
@@ -989,27 +990,18 @@ public class CamelMonitor extends CamelCommand {
             return;
         }
 
-        if (area.width() < MIN_WIDTH || area.height() < MIN_HEIGHT) {
-            renderTooSmall(frame, area);
-            return;
-        }
-
-        // Layout: header (1 row) + spacer (1 row) + tabs (2 rows) + spacer (1 
row) + content (fill) + footer (1 row)
+        // Layout: header (1 row) + tabs (2 rows) + content (fill) + footer (1 
row)
         List<Rect> mainChunks = Layout.vertical()
                 .constraints(
-                        Constraint.length(1),
                         Constraint.length(1),
                         Constraint.length(2),
-                        Constraint.length(1),
                         Constraint.fill(),
                         Constraint.length(1))
                 .split(area);
 
         renderHeader(frame, mainChunks.get(0));
-        // mainChunks.get(1) is the empty spacer row
-        renderTabs(frame, mainChunks.get(2));
-        // mainChunks.get(3) is the empty spacer row between tabs and content
-        Rect contentArea = mainChunks.get(4);
+        renderTabs(frame, mainChunks.get(1));
+        Rect contentArea = mainChunks.get(2);
         ctx.shellPercent = shellPanel.isOpen() ? shellPanel.panelPercent() : 0;
         if (shellPanel.isOpen()) {
             List<Rect> splitChunks = Layout.vertical()
@@ -1035,7 +1027,7 @@ public class CamelMonitor extends CamelCommand {
         if (helpOverlay.isVisible()) {
             helpOverlay.render(frame, contentArea);
         }
-        renderFooter(frame, mainChunks.get(5));
+        renderFooter(frame, mainChunks.get(3));
 
         lastBuffer = frame.buffer();
         renderGeneration++;
@@ -1374,7 +1366,7 @@ public class CamelMonitor extends CamelCommand {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.NONE)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(Line.from(Span.styled(" More Tabs ", 
Style.EMPTY.fg(Color.YELLOW).bold()))))
                         .build())
                 .build();
@@ -1422,7 +1414,7 @@ public class CamelMonitor extends CamelCommand {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.NONE)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(Line.from(Span.styled(" Switch 
Integration ", Style.EMPTY.fg(Color.YELLOW).bold()))))
                         .build())
                 .build();
@@ -1711,7 +1703,7 @@ public class CamelMonitor extends CamelCommand {
 
         frame.renderWidget(Clear.INSTANCE, popup);
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .borderStyle(Style.EMPTY.fg(Color.LIGHT_RED))
                 .title(" Confirm Kill ")
                 .build();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java
index af0da28d17a2..762cac0d0d73 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/CircuitBreakerTab.java
@@ -33,6 +33,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.sparkline.DualSparkline;
@@ -193,7 +194,7 @@ class CircuitBreakerTab implements MonitorTab {
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Circuit Breaker ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Circuit Breaker ").build())
                 .build();
 
         frame.renderStatefulWidget(table, chunks.get(0), tableState);
@@ -314,7 +315,7 @@ class CircuitBreakerTab implements MonitorTab {
 
         frame.renderWidget(Paragraph.builder()
                 .text(Text.from(lines))
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build(), area);
     }
 
@@ -346,7 +347,7 @@ class CircuitBreakerTab implements MonitorTab {
                 Span.styled("░".repeat(empty), Style.EMPTY.dim()));
         frame.renderWidget(Paragraph.builder()
                 .text(Text.from(barLine))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Failure Rate ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Failure Rate ").build())
                 .build(), vSplit.get(0));
 
         LinkedList<Long> successHist = cbSuccessHistory.get(key);
@@ -384,7 +385,7 @@ class CircuitBreakerTab implements MonitorTab {
                 .bottomStyle(Style.EMPTY.fg(Color.LIGHT_RED))
                 .showYAxis(true)
                 .xLabels("-60s", "-45s", "-30s", "-15s", "now")
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(chartTitle)).build())
                 .build(), vSplit.get(1));
 
@@ -408,7 +409,7 @@ class CircuitBreakerTab implements MonitorTab {
                 Span.styled("fail:", dim), Span.raw(" " + lastFail));
         frame.renderWidget(Paragraph.builder()
                 .text(Text.from(Line.from(Span.raw("")), metricsLine1, 
metricsLine2))
-                .block(Block.builder().borderType(BorderType.ROUNDED).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).build())
                 .build(), vSplit.get(2));
     }
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ClasspathTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ClasspathTab.java
index d9525c6ffbed..ebb2c2deec63 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ClasspathTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ClasspathTab.java
@@ -33,6 +33,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.list.ListItem;
 import dev.tamboui.widgets.list.ListState;
 import dev.tamboui.widgets.list.ListWidget;
@@ -148,7 +149,7 @@ class ClasspathTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled("  Loading 
classpath...", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Classpath ").build())
                             .build(),
                     area);
@@ -160,7 +161,7 @@ class ClasspathTab implements MonitorTab {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled("  " + errorMessage, 
Style.EMPTY.fg(Color.LIGHT_RED)))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Classpath ").build())
                             .build(),
                     area);
@@ -197,7 +198,7 @@ class ClasspathTab implements MonitorTab {
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.AUTO_SCROLL)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
         frame.renderStatefulWidget(list, area, listState);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java
index b57eb2c068f7..487a039e7464 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConfigurationTab.java
@@ -32,6 +32,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
 import dev.tamboui.widgets.scrollbar.ScrollbarState;
@@ -114,7 +115,7 @@ class ConfigurationTab implements MonitorTab {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled("  No configuration properties 
available.", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Configuration ").build())
                             .build(),
                     area);
@@ -134,7 +135,7 @@ class ConfigurationTab implements MonitorTab {
 
         String title = String.format(" Configuration — %d properties ", 
props.size());
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java
index b4a147a883a4..9aebea790b1b 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ConsumersTab.java
@@ -30,6 +30,7 @@ import dev.tamboui.text.Span;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
 import dev.tamboui.widgets.table.Table;
@@ -148,7 +149,7 @@ class ConsumersTab implements MonitorTab {
                         Constraint.length(22),
                         Constraint.length(22),
                         Constraint.fill())
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Consumers sort:" + sort + " ").build())
                 .build();
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java
index ef5ddfea2941..7cf0e0be06c4 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramSupport.java
@@ -42,6 +42,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
@@ -736,7 +737,7 @@ class DiagramSupport {
 
     void renderNativeDiagram(Frame frame, Rect area, Line title, boolean 
metrics) {
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(title))
                 .build();
         frame.renderWidget(block, area);
@@ -830,7 +831,7 @@ class DiagramSupport {
         frame.renderWidget(Clear.INSTANCE, previewRect);
 
         Block previewBlock = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(Line.from(Span.styled(" Route ", 
Style.EMPTY.dim()))))
                 .build();
         frame.renderWidget(previewBlock, previewRect);
@@ -1209,7 +1210,7 @@ class DiagramSupport {
             Frame frame, Rect area, Line title, boolean metrics,
             String currentRouteId, RouteDiagramLayoutEngine.LayoutRoute 
routeLayout) {
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(title))
                 .build();
         frame.renderWidget(block, area);
@@ -1294,7 +1295,7 @@ class DiagramSupport {
         frame.renderWidget(Clear.INSTANCE, mapRect);
 
         Block mapBlock = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(Line.from(Span.styled(" Map ", 
Style.EMPTY.dim()))))
                 .build();
         frame.renderWidget(mapBlock, mapRect);
@@ -1652,7 +1653,7 @@ class DiagramSupport {
         }
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(title))
                 .build();
         frame.renderWidget(block, area);
@@ -1725,7 +1726,7 @@ class DiagramSupport {
         }
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(title))
                 .build();
         frame.renderWidget(block, area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
index 00265881eea2..65e33a2f488f 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DiagramTab.java
@@ -33,6 +33,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import org.apache.camel.util.TimeUtils;
 import org.apache.camel.util.json.JsonArray;
@@ -376,7 +377,7 @@ class DiagramTab implements MonitorTab {
                         .text(Text.from(Line.from(Span.styled(
                                 "Loading diagram...",
                                 Style.EMPTY.dim()))))
-                        .block(Block.builder().borderType(BorderType.ROUNDED)
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                 .title(" Diagram ").build())
                         .build(),
                 area);
@@ -511,7 +512,7 @@ class DiagramTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Info ").build())
                 .build();
         frame.renderWidget(paragraph, area);
@@ -615,7 +616,7 @@ class DiagramTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Info ").build())
                 .build();
         frame.renderWidget(paragraph, area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DoctorPopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DoctorPopup.java
index f6ea47fb18a9..9382ce867ee4 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DoctorPopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/DoctorPopup.java
@@ -33,6 +33,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import org.apache.camel.catalog.CamelCatalog;
 import org.apache.camel.catalog.DefaultCamelCatalog;
@@ -91,7 +92,7 @@ class DoctorPopup {
         Paragraph para = Paragraph.builder()
                 .text(Text.from(lines.toArray(Line[]::new)))
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" 🩺 Doctor ")
                         .build())
                 .build();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/EndpointsTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/EndpointsTab.java
index 0ea398ccaf6e..68813cbb9ee0 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/EndpointsTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/EndpointsTab.java
@@ -35,6 +35,7 @@ import dev.tamboui.text.Span;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.sparkline.DualSparkline;
@@ -225,7 +226,7 @@ class EndpointsTab implements MonitorTab {
                 .widths(widths.toArray(Constraint[]::new))
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Endpoints sort:" + sort
                                + (filter == 1 ? " filter:remote" : filter == 2 
? " filter:remote+stub" : "")
                                + " ")
@@ -409,7 +410,7 @@ class EndpointsTab implements MonitorTab {
 
         frame.renderWidget(Paragraph.builder()
                 .text(dev.tamboui.text.Text.from(flowLines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Flow ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Flow ").build())
                 .build(), hSplit.get(0));
 
         Map<String, LinkedList<Long>> inHistMap = switch (filter) {
@@ -456,7 +457,7 @@ class EndpointsTab implements MonitorTab {
                 .showYAxis(true)
                 .xLabels("-" + renderPoints + "s", "-" + (renderPoints * 3 / 
4) + "s",
                         "-" + (renderPoints / 2) + "s", "-" + (renderPoints / 
4) + "s", "now")
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(chartTitle)).build())
                 .build(), rightArea);
     }
@@ -520,7 +521,7 @@ class EndpointsTab implements MonitorTab {
 
         frame.renderWidget(Paragraph.builder()
                 .text(dev.tamboui.text.Text.from(flowLines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Flow ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Flow ").build())
                 .build(), hSplit.get(0));
 
         // Per-endpoint sparkline
@@ -566,7 +567,7 @@ class EndpointsTab implements MonitorTab {
                 .showYAxis(true)
                 .xLabels("-" + renderPoints + "s", "-" + (renderPoints * 3 / 
4) + "s",
                         "-" + (renderPoints / 2) + "s", "-" + (renderPoints / 
4) + "s", "now")
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(chartTitle)).build())
                 .build(), hSplit.get(1));
     }
@@ -605,7 +606,7 @@ class EndpointsTab implements MonitorTab {
                 .showYAxis(true)
                 .xLabels("-" + renderPoints + "s", "-" + (renderPoints * 3 / 
4) + "s",
                         "-" + (renderPoints / 2) + "s", "-" + (renderPoints / 
4) + "s", "now")
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(chartTitle)).build())
                 .build(), area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
index 806f071128ab..c8d142196c91 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ErrorsTab.java
@@ -33,6 +33,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.ScrollbarState;
 import dev.tamboui.widgets.table.Cell;
@@ -363,7 +364,7 @@ class ErrorsTab implements MonitorTab {
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Errors (" + sorted.size() + ") sort:" + sort 
+ " ").build())
                 .build();
 
@@ -584,7 +585,7 @@ class ErrorsTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled("No error 
selected", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Info ").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Info ").build())
                             .build(),
                     area);
             return;
@@ -653,7 +654,7 @@ class ErrorsTab implements MonitorTab {
 
         Paragraph.Builder pb = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Info ").build());
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Info ").build());
         if (wordWrap) {
             pb.overflow(Overflow.WRAP_WORD);
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/FilesBrowser.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/FilesBrowser.java
index 57605a020d9f..b6089cf01d64 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/FilesBrowser.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/FilesBrowser.java
@@ -36,6 +36,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.list.ListItem;
 import dev.tamboui.widgets.list.ListState;
@@ -192,7 +193,7 @@ class FilesBrowser {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.NONE)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(Title.from(Line
                                 .from(Span.styled(" Files: " + title + " ", 
Style.EMPTY.fg(Color.YELLOW).bold()))))
                         .build())
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java
index 3be1eaa89f68..12b48885ef9d 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HealthTab.java
@@ -28,6 +28,7 @@ import dev.tamboui.text.Span;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
 import dev.tamboui.widgets.table.Table;
@@ -154,7 +155,7 @@ class HealthTab implements MonitorTab {
                         Constraint.length(12),
                         Constraint.length(6),
                         Constraint.fill())
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, tableState);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HelpOverlay.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HelpOverlay.java
index d242b30b0ae9..6b616ea7e7ee 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HelpOverlay.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HelpOverlay.java
@@ -28,6 +28,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 
 import static org.apache.camel.dsl.jbang.core.commands.tui.MonitorContext.hint;
@@ -91,7 +92,7 @@ class HelpOverlay {
         Rect popup = new Rect(area.left() + 2, area.top() + 1, area.width() - 
4, area.height() - 2);
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Help ")
                 .titleBottom(Title.from(Line.from(
                         Span.styled(" F1/?", MonitorContext.HINT_KEY_STYLE), 
Span.raw(" close "),
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java
index ab15cb065f48..737449f5d37f 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HistoryTab.java
@@ -45,6 +45,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
@@ -739,7 +740,7 @@ class HistoryTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled("No step 
selected", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Info ").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Info ").build())
                             .build(),
                     area);
             return;
@@ -855,7 +856,7 @@ class HistoryTab implements MonitorTab {
         boolean wordWrap = !diagramTraceSteps.isEmpty() ? traceWordWrap : 
historyWordWrap;
         Paragraph.Builder pb = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Info ").build());
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Info ").build());
         if (wordWrap) {
             pb.overflow(Overflow.WRAP_WORD);
         }
@@ -1067,7 +1068,7 @@ class HistoryTab implements MonitorTab {
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(traceTitle).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(traceTitle).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, traceTableState);
@@ -1114,7 +1115,7 @@ class HistoryTab implements MonitorTab {
                             .text(Text.from(Line.from(
                                     Span.styled(" Select a trace step to view 
details",
                                             Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).build())
                             .build(),
                     area);
             return;
@@ -1219,7 +1220,7 @@ class HistoryTab implements MonitorTab {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled("  No steps to display.", 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Waterfall ").build())
                             .build(),
                     area);
@@ -1242,7 +1243,7 @@ class HistoryTab implements MonitorTab {
 
         String title = String.format(" Waterfall — %d steps ", forward.size());
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         Rect inner = block.inner(area);
@@ -1384,7 +1385,7 @@ class HistoryTab implements MonitorTab {
                             .text(Text.from(Line.from(
                                     Span.styled(" Select a history entry to 
view details",
                                             Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Detail ").build())
                             .build(),
                     area);
@@ -1789,8 +1790,8 @@ class HistoryTab implements MonitorTab {
                 Cell.from(Span.styled("BHPV", Style.EMPTY.bold())),
                 rightCell("ELAPSED", 10, Style.EMPTY.bold()));
         Block block = title instanceof Title t
-                ? 
Block.builder().borderType(BorderType.ROUNDED).title(t).build()
-                : 
Block.builder().borderType(BorderType.ROUNDED).title(title.toString()).build();
+                ? 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(t).build()
+                : 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title.toString()).build();
         return Table.builder()
                 .rows(rows)
                 .header(header)
@@ -1977,7 +1978,7 @@ class HistoryTab implements MonitorTab {
     static void renderDetailPanel(
             Frame frame, Rect area, List<Line> lines,
             boolean wordWrap, int[] hScroll, int[] scroll, ScrollbarState 
scrollState) {
-        Block block = Block.builder().borderType(BorderType.ROUNDED).build();
+        Block block = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).build();
         frame.renderWidget(block, area);
 
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HttpTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HttpTab.java
index e39f75cab22c..01f17ef5afce 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HttpTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/HttpTab.java
@@ -46,6 +46,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.input.TextInput;
 import dev.tamboui.widgets.input.TextInputState;
@@ -883,7 +884,7 @@ class HttpTab implements MonitorTab {
                 Span.styled(method, methodStyle(method).bold()),
                 Span.raw(" " + probePathState.text() + " ")));
 
-        Block block = 
Block.builder().borderType(BorderType.ROUNDED).title(title).build();
+        Block block = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build();
         frame.renderWidget(block, area);
 
         int innerX = area.left() + 2;
@@ -1018,7 +1019,7 @@ class HttpTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(placeholder, 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -1052,7 +1053,7 @@ class HttpTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
@@ -1065,7 +1066,7 @@ class HttpTab implements MonitorTab {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled(" No requests yet", 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -1108,7 +1109,7 @@ class HttpTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
@@ -1277,7 +1278,7 @@ class HttpTab implements MonitorTab {
                         Constraint.length(8))
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, tableState);
@@ -1291,7 +1292,7 @@ class HttpTab implements MonitorTab {
                             .text(Text.from(Line.from(
                                     Span.styled(" Select an endpoint to view 
details",
                                             Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Detail ").build())
                             .build(),
                     area);
@@ -1350,7 +1351,7 @@ class HttpTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(detailTitle).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(detailTitle).build())
                         .build(),
                 area);
     }
@@ -1523,7 +1524,7 @@ class HttpTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(visible))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java
index 474aede450f3..e1927a9a8a91 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/InflightTab.java
@@ -30,6 +30,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
@@ -159,7 +160,7 @@ class InflightTab implements MonitorTab {
                         Constraint.fill(),
                         Constraint.length(14),
                         Constraint.length(22))
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, tableState);
@@ -179,7 +180,7 @@ class InflightTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(text)
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Inflight 
").build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Inflight ").build())
                         .build(),
                 area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/LogTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/LogTab.java
index fd28125ec246..40d4f056e112 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/LogTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/LogTab.java
@@ -42,6 +42,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.list.ListItem;
 import dev.tamboui.widgets.list.ListState;
@@ -256,7 +257,7 @@ class LogTab implements MonitorTab {
 
         if (logLoading && filteredLogEntries.isEmpty()) {
             Block loadingBlock = Block.builder()
-                    .borderType(BorderType.ROUNDED)
+                    .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                     .title(" Log ")
                     .build();
             frame.renderWidget(loadingBlock, area);
@@ -290,7 +291,7 @@ class LogTab implements MonitorTab {
             titleLine = Line.from(Span.raw(logLabel + " "));
         }
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(titleLine))
                 .build();
         frame.renderWidget(block, area);
@@ -424,7 +425,7 @@ class LogTab implements MonitorTab {
                 .highlightSymbol("")
                 .scrollMode(ScrollMode.NONE)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Set Log Level ")
                         .build())
                 .build();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/McpLogPopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/McpLogPopup.java
index 87a4db9ed9d7..94b69f55cd37 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/McpLogPopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/McpLogPopup.java
@@ -32,6 +32,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.list.ListItem;
 import dev.tamboui.widgets.list.ListState;
@@ -100,7 +101,7 @@ class McpLogPopup {
 
         if (entries == null || entries.isEmpty()) {
             Block block = Block.builder()
-                    .borderType(BorderType.ROUNDED)
+                    .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                     .title(" MCP Log ")
                     .titleBottom(Title.from(Line.from(
                             Span.styled(" Esc", 
MonitorContext.HINT_KEY_STYLE), Span.raw(" back "))))
@@ -155,7 +156,7 @@ class McpLogPopup {
                 .highlightSymbol("▸ ")
                 .scrollMode(ScrollMode.AUTO_SCROLL)
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" MCP Log ")
                         .build())
                 .build();
@@ -179,7 +180,7 @@ class McpLogPopup {
         }
 
         Block detailBlock = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Detail ")
                 .build();
         frame.renderWidget(detailBlock, area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MemoryTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MemoryTab.java
index 8b6c72923883..987254f72212 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MemoryTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MemoryTab.java
@@ -35,6 +35,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import org.apache.camel.dsl.jbang.core.common.PathUtils;
 import org.apache.camel.util.TimeUtils;
@@ -218,7 +219,7 @@ class MemoryTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Memory ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Memory ").build())
                 .build();
 
         frame.renderWidget(paragraph, area);
@@ -233,7 +234,7 @@ class MemoryTab implements MonitorTab {
         if (hist == null || hist.isEmpty()) {
             Paragraph p = Paragraph.builder()
                     .text(Text.from(Line.from(Span.styled("  Collecting heap 
data...", Style.EMPTY.dim()))))
-                    
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Heap Usage 
").build())
+                    
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Heap Usage ").build())
                     .build();
             frame.renderWidget(p, area);
             return;
@@ -252,7 +253,7 @@ class MemoryTab implements MonitorTab {
         String title = String.format(" Heap Usage (%s / %s committed) ", 
formatBytes(info.heapMemUsed), formatBytes(ceiling));
 
         // Render the block border first
-        Block block = 
Block.builder().borderType(BorderType.ROUNDED).title(title).build();
+        Block block = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build();
         frame.renderWidget(block, area);
         Rect inner = block.inner(area);
 
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MetricsTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MetricsTab.java
index e960b7dd4be8..441f38b5c08e 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MetricsTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MetricsTab.java
@@ -40,6 +40,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
 import dev.tamboui.widgets.scrollbar.ScrollbarState;
@@ -327,7 +328,7 @@ class MetricsTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Camel ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Camel ").build())
                 .build();
         frame.renderWidget(paragraph, area);
     }
@@ -425,7 +426,7 @@ class MetricsTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
JVM ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 JVM ").build())
                 .build();
         frame.renderWidget(paragraph, area);
     }
@@ -488,7 +489,7 @@ class MetricsTab implements MonitorTab {
                         Constraint.percentage(30),
                         Constraint.fill())
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(title).build())
                 .build();
 
@@ -512,7 +513,7 @@ class MetricsTab implements MonitorTab {
         String title = " Raw Metrics (" + rawLines.size() + " lines)" + ct + " 
[" + (rawTitle != null ? rawTitle : "") + "] ";
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java
index 8626cdcdd8e0..18b2ae68d9c9 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/MonitorContext.java
@@ -31,6 +31,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.TuiRunner;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
@@ -142,7 +143,7 @@ class MonitorContext {
                         .text(Text.from(Line.from(
                                 Span.styled(" Select an integration from the 
Overview tab (press 1)",
                                         Style.EMPTY.dim()))))
-                        .block(Block.builder().borderType(BorderType.ROUNDED)
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                 .title(" No integration selected ").build())
                         .build(),
                 area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
index 70e454488d9c..f10de9aac7de 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/OverviewTab.java
@@ -38,6 +38,7 @@ import dev.tamboui.widgets.barchart.BarChart;
 import dev.tamboui.widgets.barchart.BarGroup;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
@@ -326,7 +327,7 @@ class OverviewTab implements MonitorTab {
                         Constraint.length(12))
                 .highlightStyle(overviewHighlight)
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                .block(Block.builder().borderType(BorderType.ROUNDED).title(" 
Overview ").build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Overview ").build())
                 .build();
 
         frame.renderStatefulWidget(table, chunks.get(0), tableState);
@@ -340,9 +341,11 @@ class OverviewTab implements MonitorTab {
             Rect chartArea = chartHSplit.get(0);
             Rect infoArea = chartHSplit.get(1);
 
+            Rect chartInner = 
Block.builder().borders(Borders.ALL).build().inner(chartArea);
+
             List<Rect> vChunks = Layout.vertical()
                     .constraints(Constraint.fill(), Constraint.length(1))
-                    .split(chartArea);
+                    .split(chartInner);
 
             List<Rect> hChunks = Layout.horizontal()
                     .constraints(Constraint.length(4), Constraint.fill())
@@ -350,7 +353,7 @@ class OverviewTab implements MonitorTab {
 
             Rect barChartArea = hChunks.get(1);
 
-            int innerBarCols = Math.max(2, barChartArea.width() - 2);
+            int innerBarCols = Math.max(2, barChartArea.width());
             int renderPoints = Math.min(MAX_SPARKLINE_POINTS, innerBarCols / 
2);
 
             long[] mergedTotal = new long[renderPoints];
@@ -405,6 +408,10 @@ class OverviewTab implements MonitorTab {
                         Span.raw(String.format(" fail:%d ", curFailed)));
             }
 
+            Block chartBlock = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
+                    .title(Title.from(titleLine)).build();
+            frame.renderWidget(chartBlock, chartArea);
+
             List<BarGroup> groups = new ArrayList<>();
             for (int i = 0; i < renderPoints; i++) {
                 long failed = Math.min(mergedFailed[i], mergedTotal[i]);
@@ -421,22 +428,19 @@ class OverviewTab implements MonitorTab {
                     .barWidth(1)
                     .barGap(0)
                     .groupGap(0)
-                    .block(Block.builder().borderType(BorderType.ROUNDED)
-                            .title(Title.from(titleLine)).build())
                     .build();
 
             frame.renderWidget(barChart, barChartArea);
 
-            int barRows = vChunks.get(0).height() - 2;
+            int barRows = vChunks.get(0).height();
             List<Line> yLines = new ArrayList<>();
             Style dimStyle = Style.EMPTY.dim();
-            for (int row = 0; row < vChunks.get(0).height(); row++) {
-                int barRow = row - 1;
-                if (barRow == 0) {
+            for (int row = 0; row < barRows; row++) {
+                if (row == 0) {
                     yLines.add(Line.from(Span.styled(String.format("%3d", 
maxTp), dimStyle)));
-                } else if (barRows > 4 && barRow == barRows / 2) {
+                } else if (barRows > 4 && row == barRows / 2) {
                     yLines.add(Line.from(Span.styled(String.format("%3d", 
maxTp / 2), dimStyle)));
-                } else if (barRow == barRows - 1) {
+                } else if (row == barRows - 1) {
                     yLines.add(Line.from(Span.styled("  0", dimStyle)));
                 } else {
                     yLines.add(Line.from(""));
@@ -445,7 +449,7 @@ class OverviewTab implements MonitorTab {
             
frame.renderWidget(Paragraph.builder().text(Text.from(yLines)).build(), 
hChunks.get(0));
 
             if (!vChunks.get(1).isEmpty()) {
-                int barInnerStartX = barChartArea.x() + 1;
+                int barInnerStartX = barChartArea.x();
                 int xAxisY = vChunks.get(1).y();
                 int[][] markerIndices = {
                         { 0, renderPoints },
@@ -485,7 +489,7 @@ class OverviewTab implements MonitorTab {
                 sel = active.get(0);
             }
         }
-        Block infoBlock = 
Block.builder().borderType(BorderType.ROUNDED).build();
+        Block infoBlock = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).build();
         frame.renderWidget(infoBlock, area);
         Rect inner = infoBlock.inner(area);
         List<Line> lines = new ArrayList<>();
@@ -590,7 +594,7 @@ class OverviewTab implements MonitorTab {
     }
 
     private void renderInfraInfoPanel(Frame frame, Rect area, InfraInfo infra) 
{
-        Block infoBlock = 
Block.builder().borderType(BorderType.ROUNDED).build();
+        Block infoBlock = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).build();
         frame.renderWidget(infoBlock, area);
         Rect inner = infoBlock.inner(area);
         List<Line> lines = new ArrayList<>();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ProcessTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ProcessTab.java
index a9366549b413..72bcdb36f1f3 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ProcessTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ProcessTab.java
@@ -32,6 +32,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
 import dev.tamboui.widgets.scrollbar.ScrollbarState;
@@ -136,7 +137,7 @@ class ProcessTab implements MonitorTab {
             }
         }
 
-        Block block = Block.builder().borderType(BorderType.ROUNDED).title(" 
Process ").build();
+        Block block = 
Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(" 
Process ").build();
         frame.renderWidget(block, area);
 
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
index 88ab80b9d2c7..cdec4c7d15e8 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RoutesTab.java
@@ -34,6 +34,7 @@ import dev.tamboui.text.Text;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
@@ -484,7 +485,7 @@ class RoutesTab implements MonitorTab {
                             .text(Text.from(Line.from(Span.styled(
                                     "Loading diagram...",
                                     Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Diagram ").build())
                             .build(),
                     area);
@@ -556,7 +557,7 @@ class RoutesTab implements MonitorTab {
                             Constraint.length(12))
                     
.highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                     .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                    .block(Block.builder().borderType(BorderType.ROUNDED)
+                    
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                             .title(" Top Routes sort:" + routeTopSort + " 
").build())
                     .build();
         } else {
@@ -616,7 +617,7 @@ class RoutesTab implements MonitorTab {
                             Constraint.length(12))
                     
.highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                     .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                    .block(Block.builder().borderType(BorderType.ROUNDED)
+                    
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                             .title(" Routes sort:" + routeSort + " ").build())
                     .build();
         }
@@ -634,7 +635,8 @@ class RoutesTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled("No routes", 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Processors 
").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Processors ")
+                                    .build())
                             .build(),
                     chunks.get(1));
         }
@@ -886,7 +888,7 @@ class RoutesTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Info ").build())
                 .build();
         frame.renderWidget(paragraph, area);
@@ -990,7 +992,7 @@ class RoutesTab implements MonitorTab {
 
         Paragraph paragraph = Paragraph.builder()
                 .text(Text.from(lines))
-                .block(Block.builder().borderType(BorderType.ROUNDED)
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" Info ").build())
                 .build();
         frame.renderWidget(paragraph, area);
@@ -1087,7 +1089,7 @@ class RoutesTab implements MonitorTab {
                             Constraint.length(8),
                             Constraint.length(6),
                             Constraint.length(8))
-                    .block(Block.builder().borderType(BorderType.ROUNDED)
+                    
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                             .title(" Top Processors [" + route.routeId + "] 
sort:" + routeTopSort + " ").build())
                     .build();
         } else {
@@ -1149,7 +1151,7 @@ class RoutesTab implements MonitorTab {
                             Constraint.length(8),
                             Constraint.length(14),
                             Constraint.length(12))
-                    .block(Block.builder().borderType(BorderType.ROUNDED)
+                    
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                             .title(" Processors [" + route.routeId + "] 
").build())
                     .build();
         }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RunOptionsForm.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RunOptionsForm.java
index 64017b6a336f..64c776b53636 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RunOptionsForm.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/RunOptionsForm.java
@@ -29,6 +29,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.input.TextInput;
 import dev.tamboui.widgets.input.TextInputState;
 import dev.tamboui.widgets.paragraph.Paragraph;
@@ -422,7 +423,7 @@ class RunOptionsForm {
         }
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         frame.renderWidget(block, popup);
@@ -487,7 +488,7 @@ class RunOptionsForm {
         frame.renderWidget(Clear.INSTANCE, popup);
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(" Run: " + exampleTitle + " — Properties (2/2) ")
                 .build();
         frame.renderWidget(block, popup);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SendMessagePopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SendMessagePopup.java
index 4c31ff7a5ce3..82a3fba80f48 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SendMessagePopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SendMessagePopup.java
@@ -37,6 +37,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.input.TextInput;
 import dev.tamboui.widgets.input.TextInputState;
@@ -692,7 +693,7 @@ class SendMessagePopup {
         title += " ";
 
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(Line.from(Span.styled(title, 
Style.EMPTY.fg(Color.YELLOW).bold()))))
                 .build();
         frame.renderWidget(block, area);
@@ -843,7 +844,7 @@ class SendMessagePopup {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(placeholder, 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -876,7 +877,7 @@ class SendMessagePopup {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
@@ -889,7 +890,7 @@ class SendMessagePopup {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled(" No messages sent yet", 
Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -937,7 +938,7 @@ class SendMessagePopup {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanel.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanel.java
index 135548fc2eda..fbdee894f0e0 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanel.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ShellPanel.java
@@ -40,6 +40,7 @@ import dev.tamboui.tui.event.MouseEvent;
 import dev.tamboui.tui.event.MouseEventKind;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import org.apache.camel.dsl.jbang.core.commands.CamelJBangMain;
@@ -201,7 +202,7 @@ class ShellPanel {
 
         // Render border matching other tabs
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(Title.from(Line.from(Span.styled(" Shell ", 
Style.EMPTY.bold()))))
                 .build();
         frame.renderWidget(block, area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceViewer.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceViewer.java
index 19c4108b3d5c..6350d1adb036 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceViewer.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SourceViewer.java
@@ -39,6 +39,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.block.Title;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
@@ -223,7 +224,7 @@ class SourceViewer {
 
     void render(Frame frame, Rect area) {
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(buildTitle())
                 .build();
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SpansTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SpansTab.java
index 24731224b944..8f4a934ef965 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SpansTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/SpansTab.java
@@ -40,6 +40,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.input.TextInputState;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
@@ -276,7 +277,7 @@ class SpansTab implements MonitorTab {
                             .text(Text.from(Line.from(
                                     Span.styled("  No OTel spans captured. Use 
--observe flag when running.",
                                             Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" OTel Spans ").build())
                             .build(),
                     area);
@@ -382,7 +383,7 @@ class SpansTab implements MonitorTab {
                         Constraint.length(12),
                         Constraint.length(7))
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
         frame.renderStatefulWidget(table, area, traceListState);
     }
@@ -427,7 +428,7 @@ class SpansTab implements MonitorTab {
         String title = String.format(" Trace %s — %d spans, %dms ",
                 shortId(selectedTraceId), nodes.size(), traceDuration);
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         Rect inner = block.inner(area);
@@ -598,7 +599,7 @@ class SpansTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        .block(Block.builder().borderType(BorderType.ROUNDED)
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                 .title(dev.tamboui.widgets.block.Title.from(
                                         Line.from(Span.styled(" " + 
spanLabel(span) + " ", titleStyle))))
                                 .build())
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StartupTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StartupTab.java
index d990906d7901..a4d46531d5d5 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StartupTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StartupTab.java
@@ -35,6 +35,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.scrollbar.Scrollbar;
 import dev.tamboui.widgets.scrollbar.ScrollbarState;
@@ -143,7 +144,7 @@ class StartupTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled("  Loading 
startup data...", LABEL))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Startup Timeline ").build())
                             .build(),
                     area);
@@ -155,7 +156,7 @@ class StartupTab implements MonitorTab {
                     Paragraph.builder()
                             .text(Text.from(Line.from(
                                     Span.styled("  " + errorMessage, 
Style.EMPTY.fg(Color.LIGHT_RED)))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Startup Timeline ").build())
                             .build(),
                     area);
@@ -169,7 +170,7 @@ class StartupTab implements MonitorTab {
                                     Span.styled(
                                             "  No startup data available. The 
integration may not have a startup recorder enabled.",
                                             LABEL))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED)
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL)
                                     .title(" Startup Timeline ").build())
                             .build(),
                     area);
@@ -178,7 +179,7 @@ class StartupTab implements MonitorTab {
 
         String title = String.format(" Startup Timeline — Total: %dms, Steps: 
%d ", totalDuration, steps.size());
         Block block = Block.builder()
-                .borderType(BorderType.ROUNDED)
+                .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                 .title(title)
                 .build();
         Rect inner = block.inner(area);
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StopAllPopup.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StopAllPopup.java
index 5c71344557b0..267d71406b3e 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StopAllPopup.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/StopAllPopup.java
@@ -31,6 +31,7 @@ import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.Clear;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import org.apache.camel.dsl.jbang.core.common.CommandLineHelper;
 import org.apache.camel.dsl.jbang.core.common.PathUtils;
@@ -156,7 +157,7 @@ class StopAllPopup {
         Paragraph para = Paragraph.builder()
                 .text(Text.from(Line.from(""), intLine, infraLine))
                 .block(Block.builder()
-                        .borderType(BorderType.ROUNDED)
+                        .borderType(BorderType.ROUNDED).borders(Borders.ALL)
                         .title(" 🛑 Stop All ")
                         .build())
                 .build();
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ThreadsTab.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ThreadsTab.java
index e2c3b73da672..e3120079fbc7 100644
--- 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ThreadsTab.java
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/main/java/org/apache/camel/dsl/jbang/core/commands/tui/ThreadsTab.java
@@ -35,6 +35,7 @@ import dev.tamboui.tui.event.KeyCode;
 import dev.tamboui.tui.event.KeyEvent;
 import dev.tamboui.widgets.block.Block;
 import dev.tamboui.widgets.block.BorderType;
+import dev.tamboui.widgets.block.Borders;
 import dev.tamboui.widgets.paragraph.Paragraph;
 import dev.tamboui.widgets.table.Cell;
 import dev.tamboui.widgets.table.Row;
@@ -189,7 +190,8 @@ class ThreadsTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Loading 
threads...", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Threads 
").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Threads ")
+                                    .build())
                             .build(),
                     area);
             return;
@@ -269,7 +271,7 @@ class ThreadsTab implements MonitorTab {
                         Constraint.length(14))
                 .highlightStyle(Style.EMPTY.fg(Color.WHITE).bold().onBlue())
                 .highlightSpacing(Table.HighlightSpacing.ALWAYS)
-                
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                 .build();
 
         frame.renderStatefulWidget(table, area, tableState);
@@ -281,7 +283,8 @@ class ThreadsTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" Select a 
thread", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(" Stack Trace 
").build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title("
 Stack Trace ")
+                                    .build())
                             .build(),
                     area);
             return;
@@ -295,7 +298,7 @@ class ThreadsTab implements MonitorTab {
             frame.renderWidget(
                     Paragraph.builder()
                             .text(Text.from(Line.from(Span.styled(" No stack 
trace available", Style.EMPTY.dim()))))
-                            
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                            
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                             .build(),
                     area);
             return;
@@ -322,7 +325,7 @@ class ThreadsTab implements MonitorTab {
         frame.renderWidget(
                 Paragraph.builder()
                         .text(Text.from(lines))
-                        
.block(Block.builder().borderType(BorderType.ROUNDED).title(title).build())
+                        
.block(Block.builder().borderType(BorderType.ROUNDED).borders(Borders.ALL).title(title).build())
                         .build(),
                 area);
     }
diff --git 
a/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/BorderRenderTest.java
 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/BorderRenderTest.java
new file mode 100644
index 000000000000..c38bd0573d5d
--- /dev/null
+++ 
b/dsl/camel-jbang/camel-jbang-plugin-tui/src/test/java/org/apache/camel/dsl/jbang/core/commands/tui/BorderRenderTest.java
@@ -0,0 +1,517 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.dsl.jbang.core.commands.tui;
+
+import java.util.List;
+import java.util.concurrent.atomic.AtomicReference;
+
+import dev.tamboui.buffer.Buffer;
+import dev.tamboui.layout.Rect;
+import dev.tamboui.terminal.Frame;
+import dev.tamboui.widgets.block.BorderType;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+/**
+ * Validates that TUI tabs render with proper rounded borders separating 
panes. These tests render each tab into a
+ * virtual terminal buffer and verify that the expected border box-drawing 
characters (╭ ╮ ╰ ╯ │ ─) appear in the
+ * correct positions.
+ */
+class BorderRenderTest {
+
+    // Rounded border characters used by BorderType.ROUNDED
+    private static final String TOP_LEFT = "╭";
+    private static final String TOP_RIGHT = "╮";
+    private static final String BOTTOM_LEFT = "╰";
+    private static final String BOTTOM_RIGHT = "╯";
+    private static final String VERTICAL = "│";
+    private static final String HORIZONTAL = "─";
+
+    private MonitorContext ctx;
+    private IntegrationInfo info;
+
+    @BeforeEach
+    void setUp() {
+        info = new IntegrationInfo();
+        info.pid = "1234";
+        info.name = "test-app";
+
+        AtomicReference<List<IntegrationInfo>> data = new 
AtomicReference<>(List.of(info));
+        AtomicReference<List<InfraInfo>> infraData = new 
AtomicReference<>(List.of());
+        ctx = new MonitorContext(data, infraData);
+        ctx.selectedPid = "1234";
+    }
+
+    // ---- Border character verification for HealthTab ----
+
+    @Test
+    void healthTabRendersTopBorderCorners() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        assertTrue(containsSymbol(buffer, TOP_LEFT),
+                "HealthTab should render top-left rounded border corner ╭");
+        assertTrue(containsSymbol(buffer, TOP_RIGHT),
+                "HealthTab should render top-right rounded border corner ╮");
+    }
+
+    @Test
+    void healthTabRendersBottomBorderCorners() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        assertTrue(containsSymbol(buffer, BOTTOM_LEFT),
+                "HealthTab should render bottom-left rounded border corner ╰");
+        assertTrue(containsSymbol(buffer, BOTTOM_RIGHT),
+                "HealthTab should render bottom-right rounded border corner 
╯");
+    }
+
+    @Test
+    void healthTabRendersVerticalBorders() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        assertTrue(containsSymbol(buffer, VERTICAL),
+                "HealthTab should render vertical border │");
+    }
+
+    @Test
+    void healthTabRendersHorizontalBorders() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        assertTrue(containsSymbol(buffer, HORIZONTAL),
+                "HealthTab should render horizontal border ─");
+    }
+
+    @Test
+    void healthTabBorderFormsCompleteBox() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        // Top row should have ╭ on the left and ╮ on the right
+        assertTrue(rowContainsSymbol(buffer, 0, TOP_LEFT),
+                "Top row should contain ╭");
+        assertTrue(rowContainsSymbol(buffer, 0, TOP_RIGHT),
+                "Top row should contain ╮");
+
+        // Bottom row should have ╰ and ╯
+        int lastRow = buffer.height() - 1;
+        assertTrue(rowContainsSymbol(buffer, lastRow, BOTTOM_LEFT),
+                "Bottom row should contain ╰");
+        assertTrue(rowContainsSymbol(buffer, lastRow, BOTTOM_RIGHT),
+                "Bottom row should contain ╯");
+
+        // Middle rows should have │ on both sides
+        assertTrue(rowContainsSymbol(buffer, 1, VERTICAL),
+                "Content rows should have vertical borders │");
+    }
+
+    @Test
+    void healthTabLeftAndRightBordersAligned() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        // Find the x-coordinates of the top-left corner
+        int leftX = findSymbolX(buffer, 0, TOP_LEFT);
+        int rightX = findSymbolX(buffer, 0, TOP_RIGHT);
+        assertTrue(leftX >= 0, "Should find top-left corner");
+        assertTrue(rightX >= 0, "Should find top-right corner");
+
+        // The left vertical border should be at the same X as top-left corner
+        for (int y = 1; y < buffer.height() - 1; y++) {
+            String sym = buffer.get(leftX, y).symbol();
+            assertTrue(VERTICAL.equals(sym),
+                    "Left border at row " + y + " should be │ but was '" + sym 
+ "'");
+        }
+
+        // The right vertical border should be at the same X as top-right 
corner
+        for (int y = 1; y < buffer.height() - 1; y++) {
+            String sym = buffer.get(rightX, y).symbol();
+            assertTrue(VERTICAL.equals(sym),
+                    "Right border at row " + y + " should be │ but was '" + 
sym + "'");
+        }
+    }
+
+    // ---- Border character verification for RoutesTab ----
+
+    @Test
+    void routesTabRendersRoundedBorderBox() {
+        addRoute("route1", "timer://tick", "Started");
+        RoutesTab tab = new RoutesTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 140, 30);
+
+        assertTrue(containsSymbol(buffer, TOP_LEFT), "RoutesTab should render 
╭");
+        assertTrue(containsSymbol(buffer, TOP_RIGHT), "RoutesTab should render 
╮");
+        assertTrue(containsSymbol(buffer, BOTTOM_LEFT), "RoutesTab should 
render ╰");
+        assertTrue(containsSymbol(buffer, BOTTOM_RIGHT), "RoutesTab should 
render ╯");
+        assertTrue(containsSymbol(buffer, VERTICAL), "RoutesTab should render 
│");
+        assertTrue(containsSymbol(buffer, HORIZONTAL), "RoutesTab should 
render ─");
+    }
+
+    @Test
+    void routesTabWithProcessorsHasTwoBorderBoxes() {
+        RouteInfo route = addRoute("route1", "timer://tick", "Started");
+        ProcessorInfo proc = new ProcessorInfo();
+        proc.id = "log1";
+        proc.processor = "log";
+        proc.level = 1;
+        proc.total = 50;
+        route.processors.add(proc);
+
+        RoutesTab tab = new RoutesTab(ctx);
+        Buffer buffer = renderToBuffer(tab, 140, 30);
+
+        // Count the number of ╭ corners — should be at least 2 (Routes block 
+ Processors block)
+        int topLeftCount = countSymbol(buffer, TOP_LEFT);
+        assertTrue(topLeftCount >= 2,
+                "RoutesTab with processors should have at least 2 border 
boxes, found " + topLeftCount + " ╭ corners");
+    }
+
+    @Test
+    void routesTabProcessorsSectionHasSeparateBorder() {
+        RouteInfo route = addRoute("route1", "timer://tick", "Started");
+        ProcessorInfo proc = new ProcessorInfo();
+        proc.id = "log1";
+        proc.processor = "log";
+        proc.level = 1;
+        route.processors.add(proc);
+
+        RoutesTab tab = new RoutesTab(ctx);
+        String rendered = renderToString(tab, 140, 30);
+
+        // The Processors section should have its own bordered block with title
+        assertTrue(rendered.contains("Processors"),
+                "Should render Processors section with border title");
+
+        // Count ╰ (bottom-left corners) — at least 2 blocks
+        Buffer buffer = renderToBuffer(tab, 140, 30);
+        int bottomLeftCount = countSymbol(buffer, BOTTOM_LEFT);
+        assertTrue(bottomLeftCount >= 2,
+                "Should have at least 2 bottom-left corners (Routes + 
Processors), found " + bottomLeftCount);
+    }
+
+    // ---- Border character verification for ErrorsTab ----
+
+    @Test
+    void errorsTabRendersRoundedBorderBox() {
+        addError("ID-001", "route1", "to1", "IOException", "Connection 
refused", false);
+        ErrorsTab tab = new ErrorsTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 160, 30);
+
+        assertTrue(containsSymbol(buffer, TOP_LEFT), "ErrorsTab should render 
╭");
+        assertTrue(containsSymbol(buffer, TOP_RIGHT), "ErrorsTab should render 
╮");
+        assertTrue(containsSymbol(buffer, BOTTOM_LEFT), "ErrorsTab should 
render ╰");
+        assertTrue(containsSymbol(buffer, BOTTOM_RIGHT), "ErrorsTab should 
render ╯");
+    }
+
+    @Test
+    void errorsTabEmptyStateHasBorder() {
+        // No errors added
+        ErrorsTab tab = new ErrorsTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 160, 20);
+
+        assertTrue(containsSymbol(buffer, TOP_LEFT),
+                "ErrorsTab empty state should still have border ╭");
+        assertTrue(containsSymbol(buffer, VERTICAL),
+                "ErrorsTab empty state should still have vertical border │");
+    }
+
+    // ---- Border character verification for no-selection state ----
+
+    @Test
+    void noSelectionRendersRoundedBorder() {
+        ctx.selectedPid = null;
+
+        HealthTab tab = new HealthTab(ctx);
+        Buffer buffer = renderToBuffer(tab, 100, 10);
+
+        // The "No integration selected" block should have rounded borders
+        assertTrue(containsSymbol(buffer, VERTICAL),
+                "No-selection block should have vertical borders │");
+        assertTrue(containsSymbol(buffer, HORIZONTAL),
+                "No-selection block should have horizontal borders ─");
+    }
+
+    // ---- Border type validation ----
+
+    @Test
+    void roundedBorderTypeUsesCorrectCharacters() {
+        // Verify the border characters match what ROUNDED type produces
+        var borderSet = BorderType.ROUNDED.set();
+
+        assertTrue(borderSet.topLeft().equals(TOP_LEFT),
+                "ROUNDED topLeft should be ╭, got: " + borderSet.topLeft());
+        assertTrue(borderSet.topRight().equals(TOP_RIGHT),
+                "ROUNDED topRight should be ╮, got: " + borderSet.topRight());
+        assertTrue(borderSet.bottomLeft().equals(BOTTOM_LEFT),
+                "ROUNDED bottomLeft should be ╰, got: " + 
borderSet.bottomLeft());
+        assertTrue(borderSet.bottomRight().equals(BOTTOM_RIGHT),
+                "ROUNDED bottomRight should be ╯, got: " + 
borderSet.bottomRight());
+        assertTrue(borderSet.leftVertical().equals(VERTICAL),
+                "ROUNDED leftVertical should be │, got: " + 
borderSet.leftVertical());
+        assertTrue(borderSet.topHorizontal().equals(HORIZONTAL),
+                "ROUNDED topHorizontal should be ─, got: " + 
borderSet.topHorizontal());
+    }
+
+    // ---- ShellPanel border test ----
+
+    @Test
+    void shellPanelRendersWithBorder() {
+        ShellPanel panel = new ShellPanel();
+        panel.setContext(ctx);
+        panel.open(); // Must open before render — render returns early if 
!visible
+
+        Rect area = new Rect(0, 0, 80, 10);
+        Buffer buffer = Buffer.empty(area);
+        Frame frame = Frame.forTesting(buffer);
+        panel.render(frame, area);
+        panel.destroy(); // Cleanup shell process
+
+        assertTrue(containsSymbol(buffer, TOP_LEFT),
+                "ShellPanel should render with rounded border ╭");
+        assertTrue(containsSymbol(buffer, VERTICAL),
+                "ShellPanel should render with vertical border │");
+
+        String rendered = HealthTabRenderTest.bufferToString(buffer);
+        assertTrue(rendered.contains("Shell"),
+                "ShellPanel should show 'Shell' in border title");
+    }
+
+    // ---- Multiple adjacent panes maintain borders ----
+
+    @Test
+    void routesTabSplitPanesEachHaveOwnBorder() {
+        RouteInfo route = addRoute("route1", "timer://tick", "Started");
+        ProcessorInfo proc = new ProcessorInfo();
+        proc.id = "log1";
+        proc.processor = "log";
+        proc.level = 1;
+        route.processors.add(proc);
+
+        RoutesTab tab = new RoutesTab(ctx);
+        Buffer buffer = renderToBuffer(tab, 140, 30);
+
+        // Find all rows that have ╭ (top border of a pane)
+        int topBorderRowCount = 0;
+        for (int y = 0; y < buffer.height(); y++) {
+            if (rowContainsSymbol(buffer, y, TOP_LEFT)) {
+                topBorderRowCount++;
+            }
+        }
+        assertTrue(topBorderRowCount >= 2,
+                "Adjacent panes should each start with their own top border 
row, found " + topBorderRowCount);
+
+        // Find all rows that have ╰ (bottom border of a pane)
+        int bottomBorderRowCount = 0;
+        for (int y = 0; y < buffer.height(); y++) {
+            if (rowContainsSymbol(buffer, y, BOTTOM_LEFT)) {
+                bottomBorderRowCount++;
+            }
+        }
+        assertTrue(bottomBorderRowCount >= 2,
+                "Adjacent panes should each end with their own bottom border 
row, found " + bottomBorderRowCount);
+    }
+
+    @Test
+    void routesTabPaneBordersDoNotOverlap() {
+        RouteInfo route = addRoute("route1", "timer://tick", "Started");
+        ProcessorInfo proc = new ProcessorInfo();
+        proc.id = "log1";
+        proc.processor = "log";
+        proc.level = 1;
+        route.processors.add(proc);
+
+        RoutesTab tab = new RoutesTab(ctx);
+        Buffer buffer = renderToBuffer(tab, 140, 30);
+
+        // Find rows of the first ╰ (end of first pane) and second ╭ (start of 
second pane)
+        int firstBottomRow = -1;
+        int secondTopRow = -1;
+        int topCount = 0;
+        for (int y = 0; y < buffer.height(); y++) {
+            if (rowContainsSymbol(buffer, y, TOP_LEFT)) {
+                topCount++;
+                if (topCount == 2) {
+                    secondTopRow = y;
+                }
+            }
+            if (firstBottomRow < 0 && rowContainsSymbol(buffer, y, 
BOTTOM_LEFT)) {
+                firstBottomRow = y;
+            }
+        }
+
+        if (firstBottomRow >= 0 && secondTopRow >= 0) {
+            assertTrue(secondTopRow >= firstBottomRow,
+                    "Second pane's top border (row " + secondTopRow
+                                                       + ") should not start 
before first pane's bottom border (row "
+                                                       + firstBottomRow + ")");
+        }
+    }
+
+    @Test
+    void allBorderCornersAppearOnBoundaryRows() {
+        addHealthCheck("camel", "context", "UP");
+        HealthTab tab = new HealthTab(ctx);
+
+        Buffer buffer = renderToBuffer(tab, 120, 20);
+
+        // ╭ and ╮ should be on the same row (top border)
+        int topLeftRow = findSymbolRow(buffer, TOP_LEFT);
+        int topRightRow = findSymbolRow(buffer, TOP_RIGHT);
+        assertTrue(topLeftRow == topRightRow,
+                "╭ (row " + topLeftRow + ") and ╮ (row " + topRightRow + ") 
should be on the same row");
+
+        // ╰ and ╯ should be on the same row (bottom border)
+        int bottomLeftRow = findSymbolRow(buffer, BOTTOM_LEFT);
+        int bottomRightRow = findSymbolRow(buffer, BOTTOM_RIGHT);
+        assertTrue(bottomLeftRow == bottomRightRow,
+                "╰ (row " + bottomLeftRow + ") and ╯ (row " + bottomRightRow + 
") should be on the same row");
+    }
+
+    // ---- Helper methods ----
+
+    private void addHealthCheck(String group, String name, String state) {
+        HealthCheckInfo hc = new HealthCheckInfo();
+        hc.group = group;
+        hc.name = name;
+        hc.state = state;
+        hc.readiness = true;
+        info.healthChecks.add(hc);
+    }
+
+    private RouteInfo addRoute(String routeId, String from, String state) {
+        RouteInfo route = new RouteInfo();
+        route.routeId = routeId;
+        route.from = from;
+        route.state = state;
+        route.uptime = "10s";
+        info.routes.add(route);
+        return route;
+    }
+
+    private void addError(
+            String exchangeId, String routeId, String nodeId,
+            String exceptionType, String message, boolean handled) {
+        ErrorInfo ei = new ErrorInfo();
+        ei.exchangeId = exchangeId;
+        ei.routeId = routeId;
+        ei.nodeId = nodeId;
+        ei.exceptionType = exceptionType;
+        ei.exceptionMessage = message;
+        ei.handled = handled;
+        ei.timestamp = System.currentTimeMillis();
+        info.errors.add(ei);
+    }
+
+    private static Buffer renderToBuffer(MonitorTab tab, int width, int 
height) {
+        Rect area = new Rect(0, 0, width, height);
+        Buffer buffer = Buffer.empty(area);
+        Frame frame = Frame.forTesting(buffer);
+        tab.render(frame, area);
+        return buffer;
+    }
+
+    private static String renderToString(MonitorTab tab, int width, int 
height) {
+        Buffer buffer = renderToBuffer(tab, width, height);
+        return HealthTabRenderTest.bufferToString(buffer);
+    }
+
+    /**
+     * Check if the buffer contains a cell with the given symbol anywhere.
+     */
+    private static boolean containsSymbol(Buffer buffer, String symbol) {
+        for (int y = 0; y < buffer.height(); y++) {
+            for (int x = 0; x < buffer.width(); x++) {
+                if (symbol.equals(buffer.get(x, y).symbol())) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Count occurrences of a symbol in the buffer.
+     */
+    private static int countSymbol(Buffer buffer, String symbol) {
+        int count = 0;
+        for (int y = 0; y < buffer.height(); y++) {
+            for (int x = 0; x < buffer.width(); x++) {
+                if (symbol.equals(buffer.get(x, y).symbol())) {
+                    count++;
+                }
+            }
+        }
+        return count;
+    }
+
+    /**
+     * Check if a specific row contains the given symbol.
+     */
+    private static boolean rowContainsSymbol(Buffer buffer, int row, String 
symbol) {
+        for (int x = 0; x < buffer.width(); x++) {
+            if (symbol.equals(buffer.get(x, row).symbol())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Find the X coordinate of the first occurrence of a symbol in a row. 
Returns -1 if not found.
+     */
+    private static int findSymbolX(Buffer buffer, int row, String symbol) {
+        for (int x = 0; x < buffer.width(); x++) {
+            if (symbol.equals(buffer.get(x, row).symbol())) {
+                return x;
+            }
+        }
+        return -1;
+    }
+
+    /**
+     * Find the first row containing the given symbol. Returns -1 if not found.
+     */
+    private static int findSymbolRow(Buffer buffer, String symbol) {
+        for (int y = 0; y < buffer.height(); y++) {
+            for (int x = 0; x < buffer.width(); x++) {
+                if (symbol.equals(buffer.get(x, y).symbol())) {
+                    return y;
+                }
+            }
+        }
+        return -1;
+    }
+}

Reply via email to