fix(client): snap session rows on auto-resort instead of animating - #170
Merged
Conversation
Framer-motion layout animations slid rows through each other during status/activity-driven resorts, transiently rendering two sessions' text overlapped in one row — and stuck that way on browsers where the layout animation stalls. Remove the per-row layout animation so auto-resorts snap; drag previews still animate via dnd-kit transforms, and enter/exit animations are unchanged. AnimatePresence switches from popLayout to sync so an exiting row collapses in flow instead of overlapping the sibling that takes its place. Fixes #159
Merged
gbasin
added a commit
that referenced
this pull request
Jul 24, 2026
Bumps version to 0.4.5. Included since 0.4.4: - fix(terminal): read pty client identity via list-clients instead of display-message -c (#165) — fixes #161 and the tmux 3.2a failure in #156 - fix(terminal): paste into the session the pty client is attached to (#166) - feat(settings): runtime toggle for prefer-window-name (#167) - fix(client): persist manual session order across refreshes (#169) — fixes #157 - fix(client): snap session rows on auto-resort instead of animating (#170) — fixes #159 Merging triggers the tag + release workflow.
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.
Fixes #159.
What
The reporter's screenshot shows two sessions' names character-interleaved in a single row. Replicated: with status-based sorting, a status flip (e.g. a session going working↔waiting as you click around) triggers a framer-motion layout animation that slides rows through each other — a frame capture caught two rows' text overlapped mid-flight, matching the screenshot. Transient on Chromium; on a browser where the layout animation stalls (the component already carries a Safari fallback for exactly that), the overlap sticks.
Per the maintainer's call: auto-resorts now snap instead of animating.
layoutprop and thelayoutAnimationsDisabledplumbing that existed only to fence it off during drags.AnimatePresenceswitchespopLayout→sync: without sibling layout animations, popLayout would overlap an exiting row with the row snapping into its place; sync collapses the exiting row in flow (exit already animatesheight: 0).Verification
Frame-capture harness (60ms interval) against an isolated instance, status sort, forced status flip while clicking another session:
bun run lint && bun run typecheck && bun run testgreen.