feat(web-ui): polish interaction motion and view transitions - #2257
Merged
Conversation
…olish # Conflicts: # src/web-ui/src/flow_chat/components/modern/VirtualMessageList.tsx # src/web-ui/src/flow_chat/components/modern/useFlowChatFollowOutput.ts
bobleer
commented
Aug 13, 2026
CollaboratorAuthor
CI follow-up pushed in
Local verification with the same Node 22 major as CI: 456 test files / 3221 tests passed. Type-check, ESLint, motion audit, and appearance contract audit also passed. |
Uh oh!
There was an error while loading. Please reload this page.
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 freeto 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.
Summary
Type and Areas
Type: UI/UX feature and regression fix
Areas: Web UI app shell, component library, FlowChat, settings, notifications, tools, shared infrastructure
Motivation / Impact
Interactive state changes previously hard-cut when React immediately unmounted the outgoing view, most visibly when opening Settings or switching settings sections. This change preserves spatial continuity for occasional pointer actions while keeping keyboard navigation, direct manipulation, streaming, and virtualized transcript mounts immediate.
Reduced-motion users receive short opacity-only transitions or immediate scrolling. No user-facing strings, persisted data, protocol shapes, or remote capability contracts change.
Verification
pnpm --dir src/web-ui run test:run src/flow_chat/components/modern/flowChatTailFollow.test.ts src/flow_chat/components/modern/useFlowChatFollowOutput.test.tsx src/flow_chat/components/modern/VirtualMessageList.session-boundary.test.tsx src/component-library/components/ViewTransitionBoundary/ViewTransitionBoundary.test.tsx src/component-library/components/Tabs/Tabs.test.tsx src/app/scenes/settings/SettingsScene.test.tsx src/app/stores/sceneStore.test.ts src/shared/utils/motionPreference.test.ts— 8 files / 133 tests passed before the reduced-motion merge regression was addedpnpm --dir src/web-ui run test:run src/flow_chat/components/modern/useFlowChatFollowOutput.test.tsx— 51 tests passed after the upstream merge resolutionpnpm run type-check:web— passedpnpm --dir src/web-ui run lint— passedpnpm run motion:audit— passed inventory: zerotransition: all,scale(0), JavaScript smooth-scroll debt, unguarded infinite animation, or duplicate global keyframespnpm run appearance:contract-audit— passed with 16 existing shared-style ownership warningspnpm run check:repo-hygiene— passedpnpm run build:web— passed, including generated protocol tests, production Vite build, Monaco asset verification, and WebKit compatibility verificationgit diff --check— passedRemote scenarios: exercised in the local Web/desktop presentation path only. Remote workspace, remote control, Peer Device Mode, and Detached Dispatch were not separately exercised because this PR does not alter transport, persistence, commands, or cross-version contracts.
AI-assisted: yes. Testing level: fully automated for the changed contracts, with the FlowChat manual matrix explicitly pending.
Reviewer Notes
The branch was synchronized with the latest upstream
main. The two FlowChat merge conflicts preserve upstream's distance-bounded jump-to-latest behavior and layer the existing reduced-motion preference on the final behavior. Turn navigation remains instant as required by the viewport contract.Checklist