Skip to content

🧰 style: Hover-Revealed Tool Output Copy, Full Output, and a Virtualized My Files Table - #16640

Merged
berry-13 merged 8 commits into
devfrom
berry-13/chat-output-polish
Oct 2, 2026
Merged

berry-13 merged 8 commits into
devfrom
berry-13/chat-output-polish

Conversation

@berry-13

@berry-13 berry-13 commented Oct 1, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Part 1 of the ui-refinments stack (#16640 onto dev, then #16641, #16642, #16643; merge from the bottom up).

Tool output cards reserved a right gutter for their copy buttons and cut long output behind a "Show more" toggle, so the scrollbar sat inset and the output jumped when expanded. The copy buttons now overlay the content in the bottom right and appear only on hover or keyboard focus, and the full output renders inside the existing fixed max-height box, so the scrollbar stays at the edge. Pressing and holding a tool row header no longer flashes a background, and the sticky tool header stacks above the grouped tool icons instead of being overlapped by them.

The My Files table rendered every row through client pagination; it now virtualizes rows with @tanstack/react-virtual and drops the pager. The compact context button gets the same inset on its bottom, left and right.

Type of change

  • Bug fix
  • Performance improvement

Testing

Tested environments/configuration:

  • Browser: Chromium (Playwright) against a local dev server, light and dark mode
  • Data: a seeded conversation with nested tool calls, subagents and long bash output

Automated tests:

  • npx jest --findRelatedTests on the changed files (OutputRenderer, BashCall and Button specs updated)
  • npx tsc --noEmit -p client/tsconfig.json, ESLint, Prettier, npm run static-checks

Screenshots / recordings

Pending; to be added as before/after pairs from dev and this branch.

Risk / compatibility

None. Client-only presentation changes.

Checklist

  • I reviewed my own changes
  • Relevant tests have been added or updated
  • Existing relevant tests pass
  • The change does not introduce new warnings or errors

Copilot AI balanced review requested due to automatic review settings October 1, 2026 22:17

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 1, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-02T16:10:29.919079Z 6f6c230 Manual request
🔒 Security Review ✅ Completed 2026-10-01T22:22:10.490082Z f3e7d98 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f3e7d98edb

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

</div>
<div className="relative grid h-full max-h-[calc(100vh-20rem)] min-h-[calc(100vh-20rem)] w-full flex-1 overflow-hidden overflow-x-auto overflow-y-auto rounded-md">
<div
ref={scrollRef}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Point virtualization at the actual table scroller

When the file list exceeds the viewport, the shared <Table> still creates its default overflow-auto wrapper (packages/client/src/components/Table.tsx), and as the sole child of this fixed-height grid that inner wrapper receives the scrolling. The virtualizer instead observes this outer scrollRef, whose scrollTop remains zero, so it never advances beyond the initially rendered rows; users scroll into the bottom spacer and cannot access later files. Render the table with unwrapped or attach the virtualizer to the inner scrolling element.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2c3f1f0: the table renders unwrapped, so the virtualizer's own div is the scroller. Verified by scenario my-files-scroll-reaches-last-file (200 files, last row reached) on desktop light, dark and mobile.

Comment on lines +204 to +207
<TableRow
key={virtualRow.key}
ref={rowVirtualizer.measureElement}
data-index={virtualRow.index}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Expose virtual row positions to assistive technology

For file lists longer than the rendered virtual window, the table now removes most rows from the accessibility tree but provides neither the total filtered row count nor each mounted row's logical index. Screen readers therefore announce only the small mounted subset and report later windows as though they were the first rows, making selection state and position misleading. Add aria-rowcount to the table and the corresponding aria-rowindex metadata to each virtual row.

AGENTS.md reference: AGENTS.md:L199-L200

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 2c3f1f0: aria-rowcount on the table, aria-rowindex on the header and each mounted row, spacer rows aria-hidden. Verified by scenario my-files-rows-report-position.

@codegraph-librechat codegraph-librechat Bot added the 🗺️ Agent Chat UI codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9) label Oct 1, 2026
@berry-13
berry-13 force-pushed the berry-13/chat-output-polish branch from f3e7d98 to 6f6c230 Compare October 2, 2026 14:27
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, add credits to your account and enable them for code reviews in your settings.

@berry-13

berry-13 commented Oct 2, 2026

Copy link
Copy Markdown
Collaborator Author

@codex review

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review: Didn't find any major issues. Breezy!

Reviewed commit: 6f6c230dbc

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

@berry-13
berry-13 merged commit 448ab4a into dev Oct 2, 2026
43 checks passed
@berry-13
berry-13 deleted the berry-13/chat-output-polish branch October 2, 2026 16:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🗺️ Agent Chat UI codegraph: the taxonomy area this belongs to (classifier, confidence ≥ 0.9)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants