Repository navigation
refactor(ui): stop animating messages, tab switches, and keyboard search - #329
Merged
Merged
Conversation
This was referenced Oct 31, 2026
Motion had built up on the surfaces people use most. Every message faded and rose as it mounted, so switching conversations replayed the entrance across the whole transcript. Tabs and settings sections slid on each switch, and search opened with an animation on Ctrl+K. At that frequency, motion reads as delay. Remove the animations that have no purpose or run too often to keep one, and reduce those that still help to their smallest useful form: menus, popovers, selects, tooltips, and the details panel now only fade. Buttons and tabs list the properties they transition instead of using transition-all. Long-running states, the connection flow, the message highlight after a search jump, and the Wisp's own movement stay. They explain state or place, and they are rare or end when the work does.
gustmrg
force-pushed
the
refactor/remove-excess-motion
branch
from
November 1, 2026 03:13
831b124 to
36675ca
Compare
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.
Motion had built up on the surfaces people use most, and at that frequency it reads as delay. Switching conversations replayed an entrance on every visible message, tabs and settings sections slid on each switch, and search animated open on Ctrl+K. Those now change instantly. Menus and the details panel still fade, so they don't pop in, but they no longer move or scale.
Every animation went through one test: an animation stays only if it has a purpose and runs rarely enough to keep it. The reason for each change is below.
Removed
message-view.tsx,.message-stepsinaura.csswisp-details.tsx,circle-details.tsxui/tabs.tsx,ui/segmented-control.tsxsearch-dialog.tsxchat-composer.tsxusage-settings-section.tsxconnections-panel.tsxReduced
panel-in)scale-[1.08])ButtonandTabsTabtransition-colors(wastransition-all)Cleanup
--animate-working-pulsetoken andworking-pulsekeyframes.placedref inSegmentedControl, which only skipped the first slide.slideDirectionandslidestate, and thekey={report.period}that existed only to replay the slide. The report's children hold no state.origin-(--transform-origin)from surfaces that no longer scale, the Radix-onlydata-[state=delayed-open]classes onTooltip, and a staletransition: noneon the phone's.workspace-sidebar.Kept on purpose
connection-gate.tsx,connection-screen.tsx,ssh-prompt-dialog.tsx): rare, and they show direction.message-highlight: it shows where a search jump landed.docs/design/.Testing
npm run typecheck,npm run lint,npm run format:check, andnpm run buildpass. Lint reports 2 warnings that are already onmain, in the storage settings components.npm teston Node 22: 2443 tests pass. No new tests, since this only removes motion and jsdom can't observe it.tscoutput was rebuilt from a cleandist-electron.message-inanimations.animation-name: none, and search unmounts straight away on Escape.animation-name: none.--tw-enter-scale: 1, so it only fades.panel-inanimates onlyopacityfor 150ms.To check by hand before merging:
Not in this PR
Tracked in SWE-268:
Refs SWE-268