Skip to content

feat(web): cohesive interface animations - #9

Merged
Kaloyanes merged 12 commits into
mainfrom
feature/cohesive-interface-animations
Oct 11, 2026
Merged

Kaloyanes merged 12 commits into
mainfrom
feature/cohesive-interface-animations

Conversation

@Kaloyanes

Copy link
Copy Markdown
Owner

Interface state changes (labels, icons, overlays, the composer, counts) used to snap from one value to the next. This branch adds small, consistent motion to them, all following the existing UI animation duration setting, and turning off completely at 0 ms or with reduced motion.

What changed

  • Overlays: Base UI popovers, menus, selects and tooltips fade in and out with a slight blur.
  • Composer: expanding and collapsing, the notice stack, and the picker icons transition with Motion.
  • Labels and icons: changing labels animate letter by letter (AnimatedText), and swapped icons cross-fade (AnimatedIcon). Upstream's MorphIcon still handles the copy/check icon swaps.
  • Numbers: the sidebar Usage %, the pooled "% left" rows and the details panel's Changes +/− counts roll in place with @kitlangton/rolling-number (AnimatedNumber).
  • Details card: the inline thread details card scales and fades in when you open it. It doesn't animate when you switch to a thread that already has it open.
  • Messages: new messages fade and rise once as they arrive. History loads, thread switches, and remounts from scrolling the virtualized list never replay it (createTimelineRowEntrance).
  • Settings: Appearance gets a UI animation duration setting.

The animation setting is published from the root into a small store in uiAnimations.ts. The animation primitives used to read useSettings directly, which pulls in connection/session state. After rebasing on main, that created an import cycle (connection/platform → … → TraitsPicker → changing-state → useSettings → state/session) that crashed the app at startup.

Evidence

Details panel with rolling Changes counts and the animated "Open in" label:

Opening and closing the inline details card:

Testing

  • vp test run on the touched tests (MessagesTimeline.logic, usage, ThreadDetailsPanel, ProjectScriptsControl, changing-state, ComposerPrimaryActions, uiAnimations, settingsSearch): passing.
  • Web typecheck is clean.
  • MessagesTimeline.test.tsx and 3 tests in ChatCanvas.details.test.tsx fail on main too; this branch doesn't touch those failures.
  • Loaded the app in a dev build against a copy of real data and toggled the details card.

Made with Claude Opus 5.5 in Claude Code (via T3 Code).

Copilot AI balanced review requested due to automatic review settings October 11, 2026 13:07
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Oct 11, 2026
@Kaloyanes
Kaloyanes merged commit ad7d673 into main Oct 11, 2026
7 of 22 checks passed
@Kaloyanes
Kaloyanes deleted the feature/cohesive-interface-animations branch October 28, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 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.

2 participants