fix(mobile): render markdown tables as a chip that opens a full-screen modal#4379
Merged
Conversation
…the screen PermissionCard rendered patterns/metadata (often a full command) in plain Views with no height limit. As a pinned footer below the message list it could grow past the screen, pushing the Deny/Allow buttons off-screen with no way to scroll — approvals became impossible to act on. Wrap the card body in a ScrollView capped at max-h-96 (same pattern as QuestionCard) and let both cards shrink when the available height is smaller (e.g. keyboard open on small screens), keeping the action buttons pinned and reachable while the content scrolls.
…n modal Tables previously rendered inside a horizontal ScrollView within the message bubble, which caused two Android-reported bugs: - Scrolling the table leftward activated the bubble's swipe-to-reply pan gesture (12px activation offset), making tables with more than 2 columns unusable. - A horizontal ScrollView inside a width-constrained bubble mis-measures its height on RN Fabric (same bug already worked around for code blocks), producing overlapping messages in the FlashList. Tables now render as a compact 'View table' chip inline; tapping it opens a full-screen modal where the table scrolls both ways with roomier columns. No horizontal ScrollView ever renders inside a bubble anymore. Applies to both kiloclaw chat and cloud agents chat via the shared MarkdownText renderer.
jeanduplessis
approved these changes
Jul 3, 2026
Contributor
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryReviewed the current diff (markdown-palette.ts, markdown-table.tsx, markdown-text.tsx) that replaces the in-bubble scrollable markdown table with a chip that opens a full-screen modal; found no high-confidence security, correctness, or breaking-change issues in the changed lines. Files Reviewed (3 files)
Note: the PR's commit history also includes a Reviewed by claude-sonnet-5 · Input: 58 · Output: 25.8K · Cached: 2.2M Review guidance: REVIEW.md from base branch |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
User report (Samsung Galaxy S24, Android 16): markdown tables with more than 2 columns are unusable, and messages overlap each other in kiloclaw chat.
Both symptoms traced to the same root cause — tables rendered inside a horizontal
ScrollViewwithin the message bubble:Gesture.Pan()activates after just 12px of leftward drag — exactly the gesture needed to scroll a wide table — so the pan steals the touch and the table can't scroll.markdown-text.tsx), corrupting FlashList row layout.Fix
Tables now render as a compact "View table" chip inline (icon +
N columns · M rowssummary). Tapping it opens a full-screen modal where the table scrolls both horizontally and vertically with roomier columns sized to the window width.surfaceColortoMarkdownPaletteso user-bubble tables (light ink on primary/lime) stay readable when rendered in the modal outside their bubble.MarkdownTextrenderer.Testing
pnpm format && pnpm typecheck && pnpm lint && pnpm check:unusedall pass.