Repository navigation
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
|
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
arcalinea
temporarily deployed
to
samuel/dm-send-animation - social-app PR #12302
November 1, 2026 18:29 — with
Render
Destroyed
mozzius
force-pushed
the
samuel/dm-send-animation
branch
from
November 1, 2026 18:33
888623d to
832012a
Compare
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mozzius
force-pushed
the
samuel/dm-send-animation
branch
from
November 3, 2026 10:06
832012a to
402b92a
Compare
arcalinea
temporarily deployed
to
samuel/dm-send-animation - social-app PR #12302
November 3, 2026 10:06 — with
Render
Destroyed
This branch had an error being deployed
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.
Sending a DM now plays out in clear steps. The composer clears, the list follows it down, and then the message rises in while the list makes room for it. This replaces the per-frame scroll burst. Each step has a single owner, so no two systems fight over the scroll position.
Before (multi-line send):
s2-before.mp4
After:
trim.E0437553-9254-4688-AE15-60B8A727B1EA.MOV
What was wrong
I measured the old behaviour frame by frame on an iOS 27 simulator, using temporary logging that isn't part of this PR.
scrollToOffsetevery frame for 200ms, and each call restarts the UIKit animation. The list crept about 1px per frame while the new bubble sat behind the composer. It only really scrolled at about +300ms.onContentSizeChangedoesn't fire for the send (APP-2223) is wrong; it fires on both iOS and Android.Changes
agent.ts): a confirmed message keeps its pending key (optimisticKeys.get(id) ?? id), so the row never remounts.MessageItem): rows sent in the last 3s mount withFadeInDown.duration(220). Existing rows and loaded history don't animate.MessageItem): a pending bubble is now the sent bubble at 60% opacity, instead ofprimary_300. It eases to full opacity with a Reanimated CSS transition once confirmed. The old token was lighter than sent in light mode but darker in dark and dim, because those themes invert the palette. Fading toward the background reads the same way in every theme, and pending emoji-only messages fade too, where before they had no pending state.MessageComposer,MessagesList):onWillSendMessage(composerShrink).onLayout. The composer only predicts text-only shrinks. A reply or embed preview is removed by a re-render that lands later, so in that case, and for pre-filled drafts, the list follows the measured layout.disableVirtualization, rows appended at the end only render when you're near the end, so the message would otherwise never mount.onContentSizeChangeandonScrollare now plain functions. With the manual memoization, these edits made the React Compiler skip the whole component (PreserveManualMemo).Testing
I ran Argent QA against a test chat, comparing against a baseline of the old code:
pnpm typecheck,pnpm lintand the DM-related Jest tests pass.Not checked:
onLayoutandscrollToOffset; there's no KeyboardChatScrollView there.backgroundColorwith the same kind of CSS transition and ran smoothly in most sends (2 of 4 iOS sends snapped or stalled under host load). The opacity version is only typechecked and linted so far.🤖 Generated with Claude Code