Overnight test v2 — PR #24615 CORE MIGRATION RENDERS

refactor(mobile/staking): adopt money-mover UI on amount screens · github.com/phantom/wallet/pull/24615
Branch lisherwin/staking-money-mover-v2 onto main · head a6dea2e5
iPhone 16e simulator (612F8686) · bundle app.phantom.debug
Run started 2026-05-22 19:47:02 UTC
Surfaces
3
Rendering
3
States captured
9
UI source
@phantom/money-mover-ui

What this PR does

Replaces the three staking amount pages with MoneyMoverProvider + MoneyMoverScreen from @phantom/money-mover-ui — the same primitives Kristen used in SendPage.tsx. New StakeMoneyMoverChrome wires the nav-bar back/title and hides the persistent bottom bar; new useStakeAmountAdapter is a shared factory for the MoneyMoverAdapter snapshot. useMoneyInput owns numpad + percent presets; existing @phantom/staking hooks keep validation + balance + submit. Plus US/UK FCA disclaimer plumbed through review.legal on the mint adapter via useShowUKDisclaimer().

Findings

✓ Money-mover testIDs present on all 3 surfaces

money-mover-key-1..9 .decimal .delete, money-mover-chip-Percentage-0.25 / 0.5 / 1, money-mover-next all reachable via GhostEye — confirms the package's MoneyMoverScreen is the renderer, not the legacy PrimaryAmountInput+KeyboardAmount combo.

✓ US/UK disclaimer logic works

Simulator's locale → US → review screen shows the single APY-decay paragraph (mintStakeReviewDisclaimer2_US). UK path adds stakingUKDisclaimerPart1 + stakingUKDisclaimerTake2Mins + stakingUKDisclaimerApproval. Gated by the existing useShowUKDisclaimer hook (feature flag × isUKCountry).

Known gaps vs Figma frames Sherwin shared

Figma shows USD as the entered denomination ($1,230) with the SOL/PSOL amount as the review-row value. This PR uses native SOL/PSOL denomination. Adding fiat needs a price feed + conversion plumbing — follow-up. Figma also shows an X close in the Empty/Filled header (Empty step is the root of the modal stack) and a back chevron in Review; my chrome currently shows back chevron in both because React Navigation's canGoBack is true once StakeAmount is pushed onto StakeStack. Will fix once the existing close/back routing is settled.

StakeAmountPage (native SOL stake) DONE

apps/mobile/src/pages/staking/native/StakeAmountPage.tsx

Home → Solana → Start Earning → StakeAccountsList → + → Native Staking → Phantom Validator
Empty — "0 SOL", rent-exemption error, validator payment row, 25/50/100% chips, money-mover keypad
Filled (25%) — "0.053049972 SOL", "0.212199891 SOL available" secondary line, Review CTA
Review — Validator + Amount review rows, Confirm CTA

MintLiquidStakeAmountPage (mint PSOL) DONE

apps/mobile/src/pages/staking/liquid/mint/MintLiquidStakeAmountPage.tsx

… → StakingMethodSelection → Liquid Staking
Empty — "Stake SOL" title, "Phantom Staked SOL 6.16% APY" payment with info chevron
Filled (50%) — "0.106… SOL", Review CTA enabled
Review — Phantom Staked SOL row + Stake SOL row + US APY disclaimer at bottom

UnstakeLiquidStakeAmountPage (unstake PSOL) DONE

apps/mobile/src/pages/staking/liquid/unstake/UnstakeLiquidStakeAmountPage.tsx

Deep link exp+phantom:///UnstakeLiquidStake
Empty / zero-balance — "0 PSOL", "0.000000001 PSOL required to unstake" error, PSOL payment row
After typing "1" with 0 PSOL — same error retained (insufficient balance)

Method selection (unchanged but adjacent)

Entry point — unchanged by this PR