Skip to content

fix(web): a column drag no longer re-renders the app or re-lays out an embedded document per pixel - #937

Merged
agentforce314 merged 1 commit into
mainfrom
fix/web-cheap-column-drag
Sep 14, 2026
Merged

agentforce314 merged 1 commit into
mainfrom
fix/web-cheap-column-drag

Conversation

@agentforce314

Copy link
Copy Markdown
Owner

What

Follow-up to #936, for the resize cursor that lingered after a release. Two things made a right-column drag heavy on a full page:

  • The shell and the conversation root subscribed to the column's width itself, so every pixel of a drag re-rendered the whole app. They now subscribe to whether the column is open, which changes only when it opens or closes.
  • An HTML preview's frame (or a PDF) followed the column pixel by pixel, laying its document out again each time, and a page of wide tables can take longer per pixel than a frame lasts. While a handle is held the frame keeps the width it had; the release lays it out once, at the final width.
  • The width preference is persisted once the writes settle rather than on every frame.

Verification

  • ui-web: npm run typecheck clean; vitest run 50 files, 631 tests passing, with tests for the published drag state, the open/closed store changing only on open and close, and the frame's width freezing and thawing.
  • In the browser, a synthetic twelve-step drag over the HTML preview handled each move in under a millisecond, produced no long frames, and cleared the drag state three milliseconds after the release, with the frame frozen for the gesture.

🤖 Generated with Claude Code

https://claude.ai/code/session_018nGcaynrdG2uR3d2r1EczY

…n embedded document per pixel

Two things made a right-column drag heavy on a full page. The shell and the
conversation root subscribed to the column's width itself, so every pixel of
a drag re-rendered the whole app; they now subscribe to whether the column is
open, which changes only when it opens or closes. And an HTML preview's frame
(or a PDF) followed the column pixel by pixel, laying its document out again
each time — a page of wide tables can take longer per pixel than a frame
lasts. While a handle is held the frame keeps the width it had, and the
release lays it out once, at the final width. The width preference is also
persisted once the writes settle rather than on every frame.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018nGcaynrdG2uR3d2r1EczY
@agentforce314
agentforce314 merged commit 8882079 into main Sep 14, 2026
6 of 7 checks passed
@agentforce314
agentforce314 deleted the fix/web-cheap-column-drag branch September 14, 2026 02:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant