Transcript Incremental Projection

Nucleic-Session: 0FFD007B-0696-4517-9429-129C7B0FD5AC
Co-authored-by: Nucleic <[email protected]>
This commit is contained in:
2026-07-06 19:33:25 -07:00
co-authored by Nucleic
parent 0e942400d5
commit a9e2bbe80e
@@ -707,11 +707,15 @@ struct TranscriptList: View {
// user is already parked there. Scrolling up to read history is never yanked down, // user is already parked there. Scrolling up to read history is never yanked down,
// and a finger actively on the transcript is never fought mid-drag (the drag that // and a finger actively on the transcript is never fought mid-drag (the drag that
// takes them past the unfollow threshold flips the gate; until then the native // takes them past the unfollow threshold flips the gate; until then the native
// bottom anchor alone keeps content pinned, without an animated scroll grabbing the // bottom anchor alone keeps content pinned, without a scroll grabbing the viewport
// viewport back out of their hand). // back out of their hand). Never animated: while pinned, the bottom anchor provides
// the visual continuity and this call only closes the last few points — but a
// session still *opening* keeps receiving history merges (cached transcript,
// reconnect backfill) after the settle window closes, and animating those rode the
// viewport visibly down through the whole transcript instead of landing at the end.
.onChange(of: events.count) { .onChange(of: events.count) {
if isScrolledToBottom, !isUserScrolling { if isScrolledToBottom, !isUserScrolling {
scrollToEnd(proxy, animated: !transcriptSettling) scrollToEnd(proxy, animated: false)
} }
} }
// An explicit jump — the chevron or sending a message — always wins, and it *is* the // An explicit jump — the chevron or sending a message — always wins, and it *is* the