);
},
+ table({ children, ...props }) {
+ // Wrap wide markdown tables in a horizontal-scroll container (the
+ // pattern used by DeepSeek/others) so a 6+ column table scrolls inside
+ // the conversation column instead of forcing the page wider than 100vw.
+ // min-w-max keeps natural column widths; w-full stretches narrow tables.
+ return (
+
+ );
+ },
li({ children: markdownChildren, className: itemClassName }) {
const link = inlineLinkPreviewFromChildren(markdownChildren);
if (link) {
diff --git a/webui/src/components/MessageBubble.tsx b/webui/src/components/MessageBubble.tsx
index 7cb9cf97..51e8fb0b 100644
--- a/webui/src/components/MessageBubble.tsx
+++ b/webui/src/components/MessageBubble.tsx
@@ -147,8 +147,8 @@ export function MessageBubble({
{hasText ? (
by the markdown renderer's
+ custom `table` component (see MarkdownTextRenderer); min-w-max on the
+ keeps natural column widths so it scrolls instead of shrinking. */
/* Clip any residual horizontal bleed at the thread column edge. Vertical
scrolling and internal code-block scroll are unaffected. */