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
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.
Notes
Validator card not visible in either screenshot — see Findings.
MintLiquidStakeAmountPage (mint PSOL) PARTIAL
MintLiquidStakeAmountPage
Reachability + mocks
Home → Solana → "Start Earning" → StakeAccountsList → Add → "Liquid Staking". No mocks needed.
Notes
LST info card not visible in either screenshot — same regression class as StakeAmountPage.
UnstakeLiquidStakeAmountPage (unstake PSOL) DONE
UnstakeLiquidStakeAmountPage
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.
Coverage check
| Screen | Status | Empty | Max | Error | Notes |
|---|---|---|---|---|---|
| StakeAmountPage | PARTIAL | ✓ | ✓ | — | card behind kbd |
| MintLiquidStakeAmountPage | PARTIAL | ✓ | ✓ | — | card behind kbd |
| UnstakeLiquidStakeAmountPage | DONE | ✓ | ✓ (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).