Overnight test — PR #24613 PARTIAL

refactor(mobile/staking): adopt money-mover amount UI · github.com/phantom/wallet/pull/24613
Branch lisherwin/staking-money-mover-ui onto main · head 00ad645b
iPhone 16e simulator (612F8686) · bundle app.phantom.debug
Run started 2026-05-22 19:19:54 UTC
Screens
3
Done
1
Partial
2
Screenshots
7

Findings

⚠ Layout regression — info card hidden behind iOS keyboard

Both StakeAmountPage (ValidatorCard) and MintLiquidStakeAmountPage (LiquidStakingTokenInfoCard) render the info card below an <Frame flex={1}> that vertically centers the amount input. Dropping keyboardAvoiding in favor of stickyFooter means the body no longer shrinks when the keyboard appears, so the card sits in the lower half of the body and is occluded by the keyboard. Compare with SendFungibleAmountPage, which has no centered flex={1} region — its body content flows top-down, keeping the TopBar visible above the keyboard. Fix candidates: (a) move the card above the amount (TopBar pattern), or (b) drop flex={1} and let the amount sit at the natural top, or (c) reintroduce keyboardAvoiding while keeping the sticky footer.

UnstakeLiquidStakeAmountPage error state renders correctly

Typing any amount with zero PSOL balance correctly surfaces “Insufficient balance” in red beneath the amount input, Next remains disabled, and the KeyboardAmount footer stays anchored. No card slot on this screen → no layout regression.

StakeAmountPage (native SOL stake) PARTIAL

StakeAmountPage

apps/mobile/src/pages/staking/native/StakeAmountPage.tsx · StakeStack
Reachability + mocks

Home → tap Solana highlight row → scroll to "Start Earning" → tap row → StakeAccountsList → tap nav-bar Add icon → "Native Staking" → tap first validator. No mocks needed.

Empty state — $0, Next disabled in nav bar accessory
After Max — 0.20986201 SOL (balance minus rent), Next enabled
Notes

Validator card not visible in either screenshot — see Findings.

MintLiquidStakeAmountPage (mint PSOL) PARTIAL

MintLiquidStakeAmountPage

apps/mobile/src/pages/staking/liquid/mint/MintLiquidStakeAmountPage.tsx · MintLiquidStake stack
Reachability + mocks

Home → Solana → "Start Earning" → StakeAccountsList → Add → "Liquid Staking". No mocks needed.

Stake SOL — "0.20 SOL", Next visible in nav bar accessory, X close (root of stack)
After Max
Notes

LST info card not visible in either screenshot — same regression class as StakeAmountPage.

UnstakeLiquidStakeAmountPage (unstake PSOL) DONE

UnstakeLiquidStakeAmountPage

apps/mobile/src/pages/staking/liquid/unstake/UnstakeLiquidStakeAmountPage.tsx · UnstakeLiquidStake stack
Reachability + mocks

Opened via xcrun simctl openurl ... exp+phantom:///UnstakeLiquidStake. The user has 0 PSOL — perfect for testing the over-balance error state. No code mocks needed.

Empty — "0 PSOL", Next disabled, X close in nav bar
After Max — still 0 (zero-balance case): "0.000000001 PSOL required to unstake"
Insufficient balance error — amount in red, error text under input

Coverage check

ScreenStatusEmptyMaxErrorNotes
StakeAmountPagePARTIALcard behind kbd
MintLiquidStakeAmountPagePARTIALcard behind kbd
UnstakeLiquidStakeAmountPageDONE✓ (zero-bal)

What this PR changes (refresher)

4 files. Each amount page (a) hoists Next out of the bottom bar into a local NavBarNextButton registered on the nav bar's accessory1 slot, (b) hides the persistent bottom bar via useBottomBar(HIDDEN_BOTTOM_BAR_CONFIG), and (c) moves the KeyboardAmount footer out of the body into the Screen's stickyFooter + footerChildren with a measured spacer below the body content. StakeAmountView is slimmed to drop the inline KeyboardAmount (callers own it). Pattern source: SendFungibleAmountPage after PR #24602 (Kristen).