# fix\(mobile\): undo toasts keep their action on one row · PR \#23910 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/pull/23910)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: merged

Source repository: Unavailable fork

Source branch: fix/mobile-toast-inline-action

Target branch: main

Head commit: 1484c6eb96febb475d2be500d081d68a8ca64678

[Discussion and reviews](https://git.cafe/pingdotgg/t3code/pull/23910)

[Commits](https://git.cafe/pingdotgg/t3code/pull/23910/commits?format=markdown)

[Files changed](https://git.cafe/pingdotgg/t3code/pull/23910/diffs?format=markdown)

## Description

---

## Problem

On mobile, the undo toast that appears after settling, pinning, snoozing or archiving a thread from Home is a tall card. `Toast` always puts its action on a second row under the message, so "Settled thread" sits next to empty space while **Undo** sits alone below it. The card is roughly twice the needed height and hides about one and a half thread rows at the top of the list.

## Change

`Toast` now shows a short message, its action, and the dismiss button on one row. A toast with a description, such as the Git progress toast with **Open PR**, keeps the action on its own row, as it does at accessibility text sizes (`fontScale >= 1.5`). At those sizes an inline button would leave the message too narrow to read on small phones.

The change is only in `apps/mobile/src/components/ui/Toast.tsx`. Its callers (the Home and sidebar undo notice, Git action progress, and the development component catalog) are unchanged.

## Scope and approval

Very small visual fix for an obvious layout bug in an existing mobile component. It adds no new behavior, setting or workflow. React Native mobile only; web and desktop have their own toasts and are unaffected.

## Verification

iPhone 16 Pro Simulator on iOS 26.5, T3 Code Dev client against an isolated local dev server, same thread and default text size for both runs. Flow: long-press a thread on Home, choose **Settle**, then tap **Undo**.

**Before (base [`8d3b061`](https://github.com/pingdotgg/t3code/commit/8d3b061121fe65669d5d43d011b48cd3027a4108)):** the undo toast is two rows tall and Undo sits alone on the second row.

![Before: Settled thread toast with Undo on a separate second row](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-base-toast.png)

![Before: settle from the Home menu shows a tall toast; Undo restores the thread](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-base.gif)

**After (candidate [`1484c6e`](https://github.com/saphid/t3code/commit/1484c6eb96febb475d2be500d081d68a8ca64678)):** the message, Undo and dismiss button share one row, and Undo still restores the thread.

![After: Settled thread toast with Undo inline beside the dismiss button](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-candidate-toast.png)

![After: settle from the Home menu shows a one-row toast; Undo restores the thread](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-candidate.gif)

<details>
<summary>Accessibility text size keeps the stacked layout</summary>

Simulator content size set to Accessibility Large. The action moves to its own row so the message keeps the full width.

![After at Accessibility Large text: Undo on its own row below the message](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-candidate-large-text.png)

</details>

[Before recording (MP4)](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-base.mp4) · [After recording (MP4)](https://github.com/saphid/t3code/releases/download/pr-evidence-mobile-toast-inline-action-20261023/pr-candidate.mp4)

GIFs are sampled at 10 fps from the simulator recordings, with about 1.5 s of idle lead-in trimmed. Their timing is not evidence of performance.

- `vp lint apps/mobile/src/components/ui/Toast.tsx` and the mobile `tsc --noEmit` typecheck both passed.
- No unit test was added. The change is pure layout, and the repo's guidance is not to assert rendered structure.
- Not exercised natively: Android, the Git progress toast (it keeps its description layout through the stacked path) and iPad widths.
- An independent review with Codex / GPT-6.1 Sol (high) found an accessibility-size squeeze in the first version. The description and `fontScale` fallback fix it, and a second review of the final head found no actionable issues.

Implementation: Claude Opus 5.5 in Claude Code, running in T3 Code. Review: GPT-6.1 Sol through Codex in T3 Code.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

