Skip to content

fix(web): opening a panel no longer makes the chat jump sideways - #18064

Closed
flamboh wants to merge 1 commit into
pingdotgg:mainfrom
flamboh:t3/workspace-card-fits
Closed

flamboh wants to merge 1 commit into
pingdotgg:mainfrom
flamboh:t3/workspace-card-fits

Conversation

@flamboh

@flamboh flamboh commented Oct 11, 2026

Copy link
Copy Markdown
Contributor

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Problem

When the workspace card is docked, it pushes the centered chat left (about 126px at a 1280px window). Opening or closing the right panel or the left sidebar moves the canvas width across the docking threshold partway through the animation. The card switches between docked and popover, and the chat jumps sideways.

Fix

The card now docks only when it fits beside the full-width centered chat. Otherwise it opens as a popover, the same one narrow windows already use. Docking never moves the chat, so there's no jump to animate. The code that pushed the chat left is removed.

The trade-off: the card stays docked down to about a 1384px canvas, where it used to stay docked down to about 1012px. Between those widths it's now a popover.

This replaces #18058, which kept the old threshold and needed about 800 lines of JavaScript to animate the jump.

Evidence

Videos were recorded at the slowest panel speed (400ms).

Right panel, before: the chat jumps when the card undocks.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/b473e2cdc3bcba02/before-right-panel.mp4

Right panel, after: the chat stays centered.
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/0887082032453091/after-right-panel.mp4

Left sidebar, before
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/f9f2134f6bec1530/before-left-sidebar.mp4

Left sidebar, after
https://gh-file-drop-api-prod-galwoqjslzlnws6s.oliver-boorstein.workers.dev/f/12aca28d6ad1e594/after-left-sidebar.mp4

The sidebar clips also stutter in both versions. That comes from re-rendering ChatView, which #18057 addresses separately.

At 1280px, before: the card is docked and the chat is pushed left and narrowed.
Before at 1280px: docked card pushes chat left

At 1280px, after: the chat is centered and the card opens as a popover.
After at 1280px: centered chat, card as a popover

Validation

  • vp test run on chatCanvasLayout.test.ts and threadDetailsCardLayout.test.ts. A new check runs at every width from 1000 to 1800px and confirms that the chat is in the same place with or without the card, and that a docked card stays clear of the chat. It fails on main.
  • Lint and the web typecheck pass on the touched files.
  • Checked in the browser against the dev server: the right panel, the sidebar, the find bar, and maximize/restore. I didn't try the floating mini-player in the browser, but its layout tests pass.

Scope and approval

There is no triaged issue for this. I'm sharing it with maintainers directly. It changes when the card docks, which is a product decision, so it's a draft until a maintainer agrees with the new threshold.

Made with Claude Opus 5.5 and GPT-6.1 Sol in Claude Code, orchestrated from T3 Code.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Oct 11, 2026
@flamboh

flamboh commented Oct 11, 2026

Copy link
Copy Markdown
Contributor Author

Note

🤖 Claude Opus 5.5 on behalf of Oliver

Closing. This removes the intended behavior where the card docks wherever it fits, with the chat moving aside to make room. That behavior should stay. I'm trying a smaller approach that keeps it.

@flamboh flamboh closed this Oct 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant