Skip to content

fix(chat): Sent Back footer divider and padding; received returns read "to You" - #1227

Merged
bmc08gt merged 4 commits into
mainfrom
fix/chat-send-back-footer
Nov 4, 2026
Merged

bmc08gt merged 4 commits into
mainfrom
fix/chat-send-back-footer

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Nov 4, 2026 •

Copy link
Copy Markdown
Collaborator

Follow-up to #1220, which merged before these changes landed. Spec: orchestrator #115 (docs/specs/send-back.md at 169b449).

Sent Back footer divider. The footer now draws a full-width 1px hairline along its top edge, in Color.rowSeparator, the color Row uses for its separator. The Send Back action row (Available, Sending) still has no divider.

Padding above the footer. In #1220 the footer took the place of the card's 16pt bottom padding, so the counterpart line sat directly on the divider. The footer now sits below that padding, as the Send Back row does. The gap above the divider now matches the gap above the row in S1 (node 13296:477). The footer adds 36 to the card's height, where it used to add 20.

"to You". A received return's counterpart reads "to You". Other received DM cash keeps "from " from the cash-bubbles layout; nothing else in the app reads "to you".

A late row animates in. #1220 added the Send Back row or Sent Back footer with animation off, so a card that was already on screen snapped to its new height when the status check resolved or a return landed. That row now fades in while the transcript's ChatMotion.reflow spring grows the card. A row known when the card is first drawn, or on a reused cell, still appears with no animation. This removes ChatViewController.sendBackStage and its no-animation pass; the reconfigure rides the batch spring like any other height change.

Width. The row and footer can't widen a card: the card's width is a fixed constraint at maxWidth (0.64 of the transcript row), and the row is pinned to the card's leading and trailing edges.

Tests: ChatCashCardCellTests.sendBackRow_sizes expects +44 for the row and +36 for the footer. sendBackRow_dividerOnFooterOnly checks that only the footer draws the divider. SendBackCaptionTests.ordinaryReceived_unchanged checks that ordinary received cash still reads "from ". sendBackRow_keepsCardWidth lays the card out at 189.44 and 250 wide and checks it keeps that width with no row, the row, the spinner and the footer. sendBackRow_animatesOnlyLateArrivals and sendBackArrivesLate_rules check which configures fade the row in.

…ived return "to You"

The Sent Back footer gets a full-width one-pixel divider along its top edge, in
Color.rowSeparator, the color Row draws its separator in. The Send Back action
row stays without one. A received return now reads "to You"; the original
sender sees it as "<Name> sent back" / "to You".
The Sent Back footer dropped the card's 16pt bottom padding, so the
counterpart line sat directly on the new divider. It now sits under the
padding, as the Send Back row does, so the gap above the divider matches
the gap above the row. The footer adds 36 to the card's height, not 20.
@bmc08gt bmc08gt self-assigned this Nov 4, 2026
The status check resolving, or a return landing, used to add the Send
Back row or Sent Back footer with animation off, so the card snapped to
its new height. A row that arrives on a card already on screen now
fades in while the reflow spring grows the card. A row known when the
card is first drawn, or on a reused cell, still appears with no
animation.

This drops ChatViewController's no-animation staging pass and its
tests: the reconfigure now rides the batch spring like any other
height change.

Adds a test that the row and footer never widen the card: the card's
width is a fixed constraint at maxWidth, and the row spans it edge to
edge.
@bmc08gt
bmc08gt merged commit 8586fd5 into main Nov 4, 2026
4 checks passed
bmc08gt added a commit that referenced this pull request Nov 4, 2026
… arrive late (#1228)

A cash card's counterpart line and token icon can land after the card is
drawn (the peer's name resolves, the icon's URL arrives). The transcript's
reflow spring already grows the card to fit them, but the lines themselves
popped in at full opacity. They now fade in over ChatMotion.reflow's
duration, as the Send Back row and footer do since #1227. A line known at
first draw, a redraw with nothing new, and a recycled cell draw without
animating.

The fade is a CABasicAnimation on opacity: a CATransition is filed under
Core Animation's own `transition` key, so it could not be told apart.

Spec: orchestrator #117.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant