Skip to content

[pull] main from MetaMask:main#502

Merged
pull[bot] merged 33 commits into
Reality2byte:mainfrom
MetaMask:main
Feb 6, 2026
Merged

[pull] main from MetaMask:main#502
pull[bot] merged 33 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull

@pull pull Bot commented Feb 6, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Battambang and others added 30 commits February 5, 2026 12:31
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Bumps snap Bitcoin 1.10.0.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Dependency-only change, but it upgrades the Bitcoin Snap used by the
app, which can affect Bitcoin balance/transaction event behavior at
runtime. Risk is mainly from upstream snap changes rather than local
code modifications.
> 
> **Overview**
> Upgrades `@metamask/bitcoin-wallet-snap` from `^1.9.0` to `^1.10.0`
and updates `yarn.lock` accordingly, pulling in the new snap release
(notably including upstream changes around balance/transaction event
emission).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
f6a98ea. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Adding missing permissions to the workflow
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-1360

Follow up PR of #25694

## **Manual testing steps**

Trigger workflow Performance E2E Tests for Experimental Builds and
builds are correctly created.

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk workflow-only change; it broadens GitHub Actions permissions
(notably `actions: write` and `id-token: write`), which could impact
security if misused.
> 
> **Overview**
> Adds an explicit `permissions` block to
`run-performance-e2e-experimental.yml` to allow the workflow to invoke
other workflows and use OIDC as needed.
> 
> No test logic or triggers change; this is solely an update to GitHub
Actions permission scopes (`contents: read`, `id-token: write`,
`actions: write`).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6c863a4. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

This PR migrates analytics tracking in the Predict feature from the
legacy `MetaMetrics` singleton pattern to the new standardized
`analytics` API as part of Batch 1-4 analytics migration.

**Changes:**
- Updated `PredictController` to use `analytics.trackEvent()` with
`AnalyticsEventBuilder` instead of
`MetaMetrics.getInstance().trackEvent()` with `MetricsEventBuilder`
- Migrated `PolymarketProvider` user trait tracking from
`addTraitsToUser()` to `analytics.identify()`

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:
[MCWP-297](https://consensyssoftware.atlassian.net/browse/MCWP-297)

## **Manual testing steps**

```gherkin
Feature: Predict feature analytics tracking

  Scenario: user interacts with Predict feature
    Given the app is running with analytics enabled
    And the user opted-in for analytics
    
    When user navigates to Predict feed, views markets, positions, and performs trades
    Then analytics events are tracked:
      - "Predict Trade Transaction"
      - "Predict Market Details Opened"
      - "Predict Position Viewed"
      - "Predict Activity Viewed"
      - "Geo Blocked Triggered"
      - "Predict Feed Viewed"
      - "Share Action"
    And user trait "created_polymarket_account_via_mm" "true" is identified in Mixpanel when creating Polymarket account
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

NA

### **After**

NA

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


[MCWP-297]:
https://consensyssoftware.atlassian.net/browse/MCWP-297?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes swap out the analytics implementation for Predict events and
user identification, which could silently affect event/trait delivery or
schema if the new builder/API differs; functional business logic is
otherwise unchanged.
> 
> **Overview**
> Migrates Predict analytics from the legacy `MetaMetrics` singleton to
the new `analytics` API, replacing `MetricsEventBuilder` usage with
`AnalyticsEventBuilder` across Predict event tracking (trade
transaction, market details opened, position/activity viewed, geoblock
triggered, feed viewed, share action).
> 
> Updates Polymarket trait capture to use `analytics.identify()` for the
"created Polymarket account via MetaMask" user property, and
adds/updates unit tests to mock `analytics` and assert `trackEvent` is
(or isn’t) invoked for the controller’s tracking methods.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
c753df1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Clear transaction confirmation when user leaves the perps order screen

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes: #25439
 
## **Manual testing steps**

- Go to Perps
- Start a new order
- Go back to home page
- Start Send flow
- Select any token from any EVM network (on non-EVM networks the error
does not trigger, but the flow is broken)
- Input amount
- Select recipient
- NO error should be shown

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->
no visible change

### **After**

<!-- [screenshots/recordings] -->
no visible change

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches shared confirmation state by force-rejecting on unmount; a
mistake here could prematurely dismiss legitimate confirmations or
change navigation/UX around confirmations.
> 
> **Overview**
> Clears any active confirmations when the Perps order screen is left by
replacing `useClearConfirmationOnBackSwipe()` with an explicit unmount
cleanup that calls `useConfirmActions().onReject(undefined, true)`.
> 
> This prevents stale confirmation state from leaking into other flows
(e.g., Send) after backing out of Perps.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
616455e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
This PR makes the "Earn a 3% bonus" text in the mUSD conversion CTA
clickable.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: updates the "Earn a 3% bonus" text in the mUSD
conversion CTA to be clickable.

## **Related issues**

Fixes: [MUSD-280: mUSD Conversion Primary CTA isn't
clickable](https://consensyssoftware.atlassian.net/browse/MUSD-280)

## **Manual testing steps**

```gherkin
Feature: mUSD conversion CTA link text

  Scenario: user taps the bonus text CTA
    Given user is viewing the mUSD conversion CTA on the token list

    When user taps the "Earn a <percentage>% bonus" text
    Then the conversion CTA action is initiated
    And an analytics event is tracked with cta_text set to the bonus text
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->
N/A - Text isn't clickable

### **After**

<!-- [screenshots/recordings] -->


https://github.com/user-attachments/assets/dc1246c9-0659-4562-93bd-f5854c50395a

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> UI interaction and analytics payload changes scoped to the mUSD
conversion CTA; no auth/security or persistent data changes, but
tracking fields and click targets could regress if event expectations
are wrong.
> 
> **Overview**
> Makes the mUSD conversion promo line ("Earn a X% bonus") tappable by
wrapping it in a `TouchableOpacity` and routing it through the same CTA
handler as the button.
> 
> Updates MetaMetrics tracking to distinguish *button vs text* clicks
(`cta_text` now reflects the actual pressed element), and changes
network analytics fields to use `selectedChainId`/`useNetworkName` when
available with a fallback to `wallet.popular_networks`.
> 
> Expands/rewrites unit tests to cover clicking the bonus text, the new
event properties (`cta_text`, `redirects_to`, `network_name` fallback),
and `useNetworkName` behavior when no chain is selected.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1ddd5fd. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

<!-- BUGBOT_STATUS --><sup><a
href="https://cursor.com/dashboard?tab=bugbot">Cursor Bugbot</a>
reviewed your changes and found no issues for commit
<u>1ddd5fd</u></sup><!-- /BUGBOT_STATUS -->
…detailed modal summary (#25635)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Fixes transaction activity display for mUSD conversion transactions.
Previously, mUSD conversion related/duplicated transactions were not
being properly hidden and displayed in the main activity list, token
details activity list, and the transaction detail modal summary.

Added support for finding and displaying the mUSD receive transaction
hash in the activity summary. On mainnet, the send and receive
operations can be in separate transactions, so we need to find and link
to the correct receive transaction for the block explorer.

Changes:

Transaction Activity Lists:
- Added TransactionType.musdConversion to
POSITIVE_TRANSFER_TRANSACTION_TYPES for proper balance display
- Added decoding support for musdConversion transaction type in
decodeTransaction
- Added navigation route for TRANSACTION_DETAILS in AssetStackFlow to
enable tapping on transactions from token details
Transaction Detail Modal Summary:
- Created new MusdConversionSummary component with dedicated logic for
mUSD conversion transactions
- Added findMusdSendTransaction utility to find the relay deposit
transaction
- Added findMusdReceiveTransaction utility to find the mUSD receive
transaction by matching transferInformation.contractAddress against the
mUSD token address
- Handles fallback to transactionMeta.hash when send/receive are bundled
in the same transaction
- Handles edge case where hash is 0x0 (shows no block explorer link)

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: n/a

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-267
Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-277
Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-287

## **Manual testing steps**

```gherkin
Feature: mUSD conversion transaction activity

Scenario: View mUSD conversion in main activity list
  Given the user has completed an mUSD conversion
  When viewing the main wallet activity tab
  Then the mUSD conversion transaction appears with correct title and amount

Scenario: View mUSD conversion in token details
  Given the user has completed an mUSD conversion
  When viewing the mUSD token details activity list
  Then the mUSD conversion transaction appears
  And tapping it opens the transaction details modal

Scenario: View mUSD conversion transaction details
  Given the user has completed an mUSD conversion on mainnet
  When viewing the transaction details modal
  Then the Summary section shows two lines:
    - "Sent {stablecoin} from {chain}" with block explorer link
    - "Receive mUSD on {chain}" with block explorer link
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**
<img width="424" height="645" alt="Screenshot 2026-02-05 at 6 28 26 AM"
src="https://github.com/user-attachments/assets/440966f1-2349-4b8e-a51a-7e6cbeadca5f"
/>
<img width="416" height="715" alt="Screenshot 2026-02-05 at 6 28 39 AM"
src="https://github.com/user-attachments/assets/c9df6b46-23d8-404f-ad2d-9a303a93ac38"
/>


https://consensys.slack.com/files/U06EZC2Q81X/F0AD6AH8552/simulator_screen_recording_-_iphone_17_pro_-_2026-02-04_at_17.52.37.mp4

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.




<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches transaction rendering/decoding and navigation for transaction
details; mistakes could cause missing/duplicated activity rows or
incorrect block-explorer links for related transaction types.
> 
> **Overview**
> Fixes how `mUSD conversion` transactions appear across activity lists
and the transaction details summary.
> 
> `decodeTransaction` now treats `TransactionType.musdConversion` as a
positive transfer and decodes it via the transfer path (keyed off
`transactions.tx_review_musd_conversion`) so amounts/titles render
consistently. The transaction details summary logic is adjusted to
render *exactly two lines* for mUSD conversion: a send line sourced from
the `relayDeposit` tx, and a receive line sourced from the
`musdConversion` tx (using its hash when present, suppressing the link
when hash is `0x0`), while skipping any other required mUSD-related
transactions to avoid duplicates.
> 
> Adds `Routes.TRANSACTION_DETAILS` to the asset/token details stack so
tapping a token’s activity item can open the transaction details screen.
Updates/expands unit tests accordingly, and bumps
`@metamask/transaction-controller`/`@metamask/transaction-pay-controller`
(and related lockfile resolutions).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d4e98fe. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

No manual testing steps

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [x] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Dependency-only change, but it upgrades profile syncing’s transitive
`keyring`/`snaps`/`utils` packages which can subtly affect account,
snap, or sync behavior at runtime.
> 
> **Overview**
> Updates dependencies to use
`@metamask/profile-sync-controller@^27.1.0` and
`@metamask/address-book-controller@^7.0.1`.
> 
> The lockfile is refreshed to reflect new transitive requirements for
the updated profile sync controller (notably newer
`@metamask/keyring-controller`, `@MetaMask/snaps-*`, and
`@metamask/utils` versions).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
95b0fa8. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR stops allowing the hiding of mUSD if the user has the token in
their token list. It blocks it in the three places that a user can hide
their token

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Updates to disable hiding of mUSD token similar to
network tokens but does not display by default

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-276

## **Manual testing steps**

```gherkin
Feature: Disallow hiding mUSD token

  Scenario: User cannot hide mUSD from token list via long press
    Given user has mUSD token in their wallet
    
    When user long-presses on mUSD token in the token list
    Then no hide/remove menu appears

  Scenario: User cannot hide mUSD from asset options menu
    Given user is viewing mUSD token details
    
    When user opens the asset options menu (3-dot menu)
    Then "Remove Token" option is not displayed

  Scenario: User cannot hide mUSD from asset details page
    Given user is viewing mUSD asset details page
    
    When user scrolls to the bottom of the page
    Then "Hide Token" button is not displayed

  Scenario: User can still hide other ERC-20 tokens
    Given user has a non-native, non-mUSD token in their wallet
    
    When user long-presses on that token
    Then hide/remove menu appears as expected
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/1301055c-7b0c-439f-aab6-1377c6488b8a

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Small UI/UX guardrail change gated by a simple address check; low risk
aside from potentially mis-identifying mUSD if the address list changes
or differs by chain in the future.
> 
> **Overview**
> Prevents users from hiding/removing the `mUSD` token by disabling the
removal affordances across the UI.
> 
> Adds a shared `isMusdToken` helper (case-insensitive address match)
and uses it to: (1) suppress the long-press remove menu in
`TokenListItem`, (2) hide the **Hide token** CTA in `AssetDetails`, and
(3) omit the **Remove token** option in `AssetOptions`. Updates and adds
tests to cover the new `mUSD` detection and the blocked removal flows.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
50fddef. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Fixes an intermittent bug where the Perps tab in Activity screen
sometimes shows as empty when accessed from perps home or perps market
detail screens via the "See all" button.

### Root Cause
Race condition in `usePerpsTransactionHistory` hook:
1. User taps "See all" → navigates to Activity screen → Perps tab
becomes active
2. `PerpsTransactionsView` mounts with `skipInitialFetch: true` (because
WebSocket connection isn't established yet)
3. When connection becomes available, the hook didn't trigger a fetch
because the `initialFetchDone` guard prevented it

### Solution
Modified the effect in `usePerpsTransactionHistory` to detect when
`skipInitialFetch` transitions from `true` to `false` (i.e., when
connection is established) and trigger a fetch regardless of the
`initialFetchDone` guard.

## **Changelog**

CHANGELOG entry: Fixed Perps activity tab sometimes showing empty when
accessed from perps home or market detail screens

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TAT-2335

## **Manual testing steps**

```gherkin
Feature: Perps Activity View

  Scenario: user views perps activity from perps home
    Given user is on the perps home screen
    And user has perps transaction history

    When user taps "See all" in the recent activity section
    Then user should see the Activity screen with Perps tab selected
    And perps transactions should be displayed (not empty)

  Scenario: user views perps activity from market detail
    Given user is on a perps market detail screen
    And user has perps transaction history

    When user taps "See all" in the trades section
    Then user should see the Activity screen with Perps tab selected
    And perps transactions should be displayed (not empty)
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

Activity tab sometimes shows empty on first load when navigating from
perps screens

### **After**

Activity tab reliably shows transaction history when connection is
established

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Small hook logic change gated on `skipInitialFetch` with added unit
tests; main risk is triggering extra network fetches on connection
flaps.
> 
> **Overview**
> Fixes an intermittent empty Perps Activity history by making
`usePerpsTransactionHistory` trigger its initial `refetch()` when
`skipInitialFetch` transitions from `true` to `false` (i.e., connection
becomes available), rather than being blocked by the `initialFetchDone`
guard.
> 
> Adds focused tests covering connection state transitions to ensure a
fetch occurs on true→false changes, does not duplicate on initial
`false`, and only re-fetches once per reconnection.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
89d67fd. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…25637)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Prevents infinite quote loading on some chains like tron

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: exclude gas fees from swap quotes insufficientBal
calculation

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/SWAPS-3933

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes balance/insufficient-funds logic used in quote requests; while
scoped and guarded by a flag, it can affect when quotes are
requested/filtered and should be validated across native-token and
gasless/sponsored scenarios.
> 
> **Overview**
> Prevents infinite bridge/swap quote loading by decoupling the
quote-request `insufficientBal` computation from gas-fee data.
> 
> `useIsInsufficientBalance` now accepts `ignoreGasFees`; when enabled
(used by `useBridgeQuoteRequest`), it skips reading gas-related fields
from the recommended quote and performs a token-only balance check,
while leaving the UI path to continue using full gas-aware validation.
Tests were updated to assert the new `ignoreGasFees: true` behavior.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
3c15084. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…25626)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR adds **Pay with any token / Perps balance** support in the Perps
order flow and related UX.


## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Added Perps “Pay with” option (Perps balance or other
tokens) and info tooltip on the order view.

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TAT-1030

## **Manual testing steps**

```gherkin
Feature: Perps pay with any token and pay-with info tooltip

  Scenario: User selects Perps balance or another token to pay for a Perps order
    Given user is on Perps order view for a market (e.g. BTC)
    When user taps "Pay with" row
    Then pay-with modal opens with Perps balance and other tokens; Perps balance shows custom icon
    When user selects a token and confirms
    Then selection is reflected on the pay-with row and used for the order

```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->
<img width="1206" height="2622"
alt="simulator_screenshot_A119DE05-A515-4BF7-A95D-D44C13DCAAEB"
src="https://github.com/user-attachments/assets/c9f32960-4eec-473f-8a14-74c0da350a68"
/>


## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches Perps order placement UX and fee/balance calculations and adds
new controller state for selected payment token; regressions could
miscompute max order size/fees or block/allow orders incorrectly when
paying with non-Perps balances.
> 
> **Overview**
> Adds a **Perps “Pay with”** capability to the order flow, letting
users choose between *Perps balance* (default) and a wallet token via
the existing `PayWithModal`, with a new tooltip (`pay_with`) and updated
`PerpsPayRow` UI.
> 
> Updates order sizing/validation to respect the selected token’s USD
balance (new `effectiveAvailableBalance`/`balanceForValidation`
plumbing), clamps amounts when the pay balance drops, and shows an
insufficient-funds warning when the chosen pay token can’t cover
required margin.
> 
> Reworks fee display to include bridge/deposit fees from
transaction-pay when using a custom token (with loading skeleton +
button disabled while fee quotes load), extends the fees tooltip to show
bridge fees, and refactors deposit tracking/toasts (adds “taking longer”
+ cancel flow, removes stream-manager deposit-handler coordination, and
skips notifications for `perpsDepositAndOrder`).
> 
> Introduces `selectedPaymentToken` state in `PerpsController` with new
`setSelectedPaymentToken`/`resetSelectedPaymentToken` actions, updates
account subscriptions to accept `null` and to persist account updates
into controller state so pay-token lists can display live Perps balance
outside the stream provider, and adjusts tests/snapshots accordingly.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
edb793f. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
## **Description**

This PR fixes the issue in the end of season summary where users
couldn't scroll down properly if they had a small resolution and/or a
more reward rows rendered.

## **Changelog**

CHANGELOG entry: fix rewards end of season scroll issue

## **Screenshots/Recordings**

### **After**


![scroll-eos-rewards](https://github.com/user-attachments/assets/325a19e3-b3a4-41a3-b050-16b665027845)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk UI/layout change confined to end-of-season rewards rendering;
main risk is unintended spacing/scroll behavior differences on some
devices.
> 
> **Overview**
> Fixes end-of-season (previous season) rewards overflow/scroll issues
by **constraining the container height** and rendering rewards via a
`FlatList` (with nested scrolling and extra bottom padding) instead of
mapping inline.
> 
> Updates tests to cover OTHERSIDE rewards without a claim URL (locked
state + navigation payload) and to assert the correct “no rewards
earned” message when `currentTier.pointsNeeded` is `0` and unlocked
rewards are empty.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e8731b8. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: sophieqgu <sophieqgu@gmail.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR improves the mUSD claiming experience by adding an educational
bottom sheet modal and auto-scrolling to the claimed token.

**What changed:**

1. **New ClaimOnLineaBottomSheet:** When users tap "Claim" on mUSD
rewards, a bottom sheet now appears explaining that bonuses will be
issued on Linea, separate from their Ethereum mUSD balance. This helps
set proper expectations before the claim transaction.
2. **Auto-scroll to Linea mUSD:** After a successful claim, the app
navigates to the home page and automatically scrolls the token list to
highlight the Linea mUSD token where the bonus was received.
3. **Consistent reward formatting:** Fixed display of claimable rewards
to always show 2 decimal places (e.g., "0.9" → "0.90", "1" → "1.00") for
currency consistency.
4. **ConditionalScrollView ref forwarding:** Added forwardRef support to
enable parent components to programmatically scroll.

**Why:**
Users were confused about where their mUSD bonuses would appear after
claiming. This educational modal and auto-scroll feature provides
clarity and improves the post-claim experience.

**Designs:**
https://www.figma.com/design/VoEucFy6VdE4dCcmzE6Kw8/mUSD?node-id=7046-23577&t=JZw5lFoq0ZcYbdRi-0

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
5. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Added educational bottom sheet explaining that mUSD
bonuses are claimed on Linea, and auto-scroll to the resulting token
after successful claim

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-269

## **Manual testing steps**

```gherkin
Feature: mUSD Claim on Linea Educational Flow

  Scenario: User sees educational bottom sheet before claiming mUSD bonus
    Given user has mUSD with claimable Merkl rewards
    And user is viewing the mUSD asset overview

    When user taps the "Claim" button
    Then a bottom sheet appears with title "Claim bonuses on Linea"
    And shows mUSD icon and explanation that bonus will be issued on Linea
    And displays a "Terms apply" link and "Continue" button

  Scenario: User proceeds with claim after reading educational content
    Given user is viewing the ClaimOnLineaBottomSheet

    When user taps "Continue"
    Then the bottom sheet closes
    And the claim transaction is submitted
    And the Claim button shows loading state

  Scenario: User is navigated to Linea mUSD token after successful claim
    Given user has tapped "Continue" on the educational bottom sheet
    And the claim transaction was submitted successfully

    When the transaction is submitted
    Then user is navigated to the wallet home page
    And the token list scrolls to the Linea mUSD token

  Scenario: User can access terms of use
    Given user is viewing the ClaimOnLineaBottomSheet

    When user taps "Terms apply" link
    Then the mUSD conversion bonus terms URL opens in browser

  Scenario: User can dismiss the bottom sheet without claiming
    Given user is viewing the ClaimOnLineaBottomSheet

    When user taps the close button or swipes down
    Then the bottom sheet closes
    And no claim transaction is initiated
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**


https://github.com/user-attachments/assets/f432842d-2c1c-4519-a602-f4a0109102d9


<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Introduces new modal navigation and cross-component scrolling via
`DeviceEventEmitter`, which can be timing- and
listener-lifecycle-sensitive. Also changes claim error handling and
displayed messaging, which may affect user feedback paths.
> 
> **Overview**
> Adds a new `ClaimOnLineaBottomSheet` modal to educate users that mUSD
bonuses are issued on Linea, with a Terms link and a Continue action
that triggers the claim and immediately closes the sheet.
> 
> Updates `ClaimMerklRewards` to open this modal on Claim, navigate back
to Wallet on successful submission, and emit a `scrollToToken` event to
focus the Linea mUSD token; token list and wallet home now listen for
these events to scroll appropriately in both FlashList and homepage
redesign (.map/ScrollView) modes. Also forwards refs through
`ConditionalScrollView`, standardizes Merkl reward display to always
show 2 decimals, and avoids surfacing errors for user-rejected
transactions (EIP-1193 `code: 4001`) while showing a generic claim error
message.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a6da007. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**
Fixes background color for Perps deposit. It was set to white, now it's
set back to gray.

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Fixes background color for Perps deposit

## **Related issues**

Fixes: 

## **Manual testing steps**
1. Go to Perps deposit, background is gray now, as it was before


## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**



### **After**



<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Small, localized UI change limited to Perps confirmation screen
styling; minimal behavioral risk beyond potential visual regressions.
> 
> **Overview**
> Perps confirmations no longer pass a theme-derived `fullscreenStyle`
background override into `Confirm`; they now rely on `Confirm`’s default
container styling.
> 
> The Perps route wrapper still conditionally disables safe-area insets
based on `showPerpsHeader`, but drops the `useTheme` dependency that was
forcing a white/incorrect background.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
239fb4b. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Signed-off-by: dan437 <80175477+dan437@users.noreply.github.com>
…ck button (#25642)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Fixed the navigation header on the transaction details page (used by
musdConversion, perpsDeposit, predictDeposit) to show a back arrow on
the top left instead of a close ("X") button on the right.

The issue was that getNavigationOptionsTitle was being called with
isFullScreenModal=true, which shows a close button on the right. Changed
to false to display the standard back arrow navigation pattern.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: n/a

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MUSD-274

## **Manual testing steps**

```gherkin
Feature: Transaction details navigation

  Scenario: user views transaction details page
    Given user has a completed musdConversion, perpsDeposit, or predictDeposit transaction

    When user navigates to the transaction details page
    Then a back arrow appears on the top left of the header
    And no close button ("X") appears on the right side of the header
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<img width="500"
alt="simulator_screenshot_5866955C-CB6A-470E-9842-FA582CADCFFC"
src="https://github.com/user-attachments/assets/0c405c54-1d8a-4343-88a5-abfaacb9c814"
/>

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Small, isolated UI/navigation-option change with a targeted regression
test; no changes to transaction logic or data handling.
> 
> **Overview**
> Updates `TransactionDetails` header configuration to use standard
stack navigation (left back arrow) rather than fullscreen-modal behavior
(right-side close button) by changing the `isFullScreenModal` flag
passed to `getNavigationOptionsTitle`.
> 
> Adds a unit test asserting the navigation options now render
`headerLeft` and omit `headerRight`, preventing regressions in the
transaction details header UI.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7f777ba. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…clicking on the cta does nothing (#25613)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

This PR separates the conditional rendering state of the "Buy mUSD" and
"Get mUSD" CTAs within `useMusdCtaVisibility`. The "Get mUSD" wins a
tiebreaker if both should be displayed. Also adds a `variant` property
to the `shouldShowBuyGetMusdCta` so consumers know which will be
rendered.

## **Changelog**
<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: refactored 

## **Related issues**

Fixes: 
- [MUSD-285: Get mUSD CTA  is displayed on an imported account with no
stable coin balance on Ethereum Mainnet. Clicking on the CTA does
nothing. The account holds stable coin on Linea
network](https://consensyssoftware.atlassian.net/browse/MUSD-285)
- [MUSD-284: After switching from a non-EVM network to all networks, the
get mUSD CTA is displayed, even if the account holds mUSD on both
Ethereum Mainnet and
Linea](https://consensyssoftware.atlassian.net/browse/MUSD-284)

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches CTA decision logic and balance/token selection paths that
affect navigation into buy/convert flows; behavior changes are
well-covered by tests but could alter CTA visibility across
network/account combinations.
> 
> **Overview**
> Fixes the primary mUSD CTA so it resolves to a single **explicit
variant** (`BUY` vs `GET`) returned by `useMusdCtaVisibility`, favoring
**Get** when both could apply and preventing cases where a CTA is shown
but clicking it does nothing.
> 
> Improves chain-awareness across the flow: `useMusdConversionTokens`
now exposes `hasConvertibleTokensByChainId` and compares tokens using
`safeFormatChainIdToHex`, `useMusdConversionFlowData` selects/returns
the payment token chainId safely in hex, and `useMusdBalance` now reads
balances from `selectTokensBalances` keyed by the currently selected EVM
account. The asset list CTA now uses the new `variant` for label/action
and adds `cta_click_target` to MetaMetrics events; tests are updated
accordingly.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
08294e7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
)

## **Description**

Renames the `HeaderCenter` component to `HeaderCompactStandard` to align
with the design system naming conventions and improve consistency across
the codebase.

**Changes include:**
- Renamed folder `HeaderCenter/` → `HeaderCompactStandard/`
- Renamed all 7 component files to match new naming
- Updated internal component, type, and function names:
  - `HeaderCenter` → `HeaderCompactStandard`
  - `HeaderCenterProps` → `HeaderCompactStandardProps`
- `getHeaderCenterNavbarOptions` →
`getHeaderCompactStandardNavbarOptions`
- Updated ~60 import statements and usages across the codebase
- Updated test mocks and assertions to use new names

This is a pure rename refactor with no functional changes.

https://www.figma.com/design/1D6tnzXqWgnUC3spaAOELN/%F0%9F%A6%8A-MMDS-Components?m=auto&node-id=9975-899&t=od7vzlrIk0EL83dH-1

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MDP-698

## **Manual testing steps**

```gherkin
Feature: HeaderCompactStandard component

  Scenario: Component renders correctly after rename
    Given the app is launched and user is logged in

    When user navigates to any screen using HeaderCompactStandard (e.g., Settings, Bridge Token Selector, Earn Input View)
    Then the header should display correctly with title, back button, and any action buttons
    And no visual or functional regressions should occur

  Scenario: Navigation options work correctly
    Given user is on a screen using getHeaderCompactStandardNavbarOptions

    When user taps the back button
    Then user should be navigated to the previous screen
```

## **Screenshots/Recordings**

_No visual changes - this is a pure rename refactor. The component
appearance and behavior remain identical._

### **Before**

N/A - No visual changes

### **After**

N/A - No visual changes

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Primarily a mechanical rename/refactor with updated tests/stories;
main risk is missed import paths or stale mocks causing runtime/module
resolution failures.
> 
> **Overview**
> Renames the temp header component `HeaderCenter` to
`HeaderCompactStandard`, including its prop type
(`HeaderCompactStandardProps`) and the React Navigation helper
(`getHeaderCompactStandardNavbarOptions`).
> 
> Updates Storybook registration, component stories/tests, and replaces
imports/usages across many screens and modals (Bridge, Ramp/Deposit,
Earn, Perps, Predict, Settings, confirmations, etc.) to reference the
new component and helper names; removes the old `HeaderCenter`
exports/helpers.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
b35a80a. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Following #24313 we're
looking to centralize all tools and test resources in one place.
This PR also:
- moves the quarantined specs to `/tests`. These quarantine files are
now in their respective folder (smoke and regression) instead of using a
dedicated quarantine folder.
- updates BUGBOT.md to review the proper location for e2e tests
- jest configs for both E2E and unit tests 
- updates documentation to reflect the complete migration of all spec
files to `/tests`
- reverts back the search of e2e specs in CI. It is now scoped to
`tests` since all specs have been migrated.

Previous related PRs:
- #24988
- #24313
- #25031
- #25095
- #25167
- #25198
- #25219
- #25263
- #25279
- #25520
- #25533
- #25598
- #25636
- #25638
- #25698



<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/MMQA-1235

## **Manual testing steps**
N/A

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**
N/A
<!-- [screenshots/recordings] -->

### **After**
N/A
<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches CI/Jest test discovery and sharding logic, so misconfigured
paths could cause E2E suites to be skipped or incorrectly partitioned;
changes are largely mechanical path updates.
> 
> **Overview**
> Shifts Detox E2E spec discovery to `tests/` (smoke/regression) and
deprecates `e2e/specs`, updating Jest configs, unit-test ignore
patterns, CI sharding/tag selection scripts, and result parsing
assumptions accordingly.
> 
> Updates documentation and AI review guidance to reference the new
`tests/(smoke|regression)` layout, and rewrites quarantined
smoke/regression spec files’ imports to point at shared `e2e/` page
objects/helpers while using `tests/framework` + `tests/resources` from
their new locations.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
76eeb92. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Remove extra padding in the Add Chain bottom sheet to ensure consistent
16px horizontal padding throughout the component.

**Issue Details:**
- The `AddChainApproval` component included an unnecessary `View`
wrapper with an `actionsContainer` style that contributed to the layout
inconsistency
- This resulted in misaligned horizontal padding across the content

**Solution:**
- Removed the unnecessary `View` wrapper in `AddChainApproval` to allow
`NetworkVerificationInfo` to render directly inside the `BottomSheet`

## **Changelog**

CHANGELOG entry: Fixes padding in add chain approval bottom sheet

## **Related issues**

Fixes: [Slack
Thread](https://consensys.slack.com/archives/C07RYUXAR8B/p1770134529127739?thread_ts=1770134529.127739&cid=C07RYUXAR8B)

## **Manual testing steps**

```gherkin
Feature: Add Chain bottom sheet padding alignment

  Scenario: user views Add Chain bottom sheet
    Given the app is running
    And the user is on the network selection screen

    When user taps "Add a custom network"
    Then the Add Chain bottom sheet should display
```

## **Screenshots/Recordings**

### **Before**

Add chain bottom sheet had wrong padding

<img width="300" height="837" alt="Screenshot 2026-02-04 at 1 49 11 PM"
src="https://github.com/user-attachments/assets/fed594bc-d25e-418f-9268-f1de5eaaa750"
/>

### **After**

Padding is now fixed 

<img width="300" height="842" alt="Screenshot 2026-02-04 at 2 00 00 PM"
src="https://github.com/user-attachments/assets/3ea543da-3bc6-4e07-bee9-1ffc1f0ad72f"
/>


## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> UI-only layout/styling changes with snapshot updates; no changes to
approval logic, data handling, or security-sensitive code.
> 
> **Overview**
> Fixes Add Chain approval bottom-sheet layout by removing the extra
styled `View` wrapper in `AddChainApproval`, letting
`NetworkVerificationInfo` render directly inside `BottomSheet`.
> 
> Adjusts `NetworkVerificationInfo` footer styling by adding
`footerPadding` and applying it to `BottomSheetFooter`, updating
snapshots to reflect consistent 16px horizontal padding (was 8px).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
209a436. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: George Marshall <georgewrmarshall@users.noreply.github.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Updates the look of the "Earn %" CTA displayed for ETH and Tron staking
products.
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: update the look of the "Earn %" CTA displayed for ETH
and Tron staking products to tag style

## **Related issues**

Fixes: [MUSD-289: Update the ETH and Tron Earn CTAs
Style](https://consensyssoftware.atlassian.net/browse/MUSD-289)

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->
<img width="464" height="79" alt="image"
src="https://github.com/user-attachments/assets/a5b89b18-a175-4d51-8df7-82f0d57eb05f"
/>

### **After**

<!-- [screenshots/recordings] -->
<img width="464" height="79" alt="Screenshot 2026-02-05 at 12 41 18 PM"
src="https://github.com/user-attachments/assets/3531f1a4-7b2e-4085-8b46-f946b6bfd37d"
/>

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> UI-only styling/typography changes to the staking CTA with minimal
logic impact; primary risk is minor visual/layout regressions across
themes or screen sizes.
> 
> **Overview**
> Updates the wallet staking "Earn %" CTA to a tag-style
`TouchableOpacity` by moving styling into a new themed
`StakeButton.styles.ts` and wiring it through `useStyles`.
> 
> Removes the leading dot separator and tweaks text typography
(switching to `BodyXSMedium`) while keeping the existing
navigation/analytics behavior unchanged.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
3ab5394. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

This PR adds two new title components to the component library
(`components-temp`) for use in various UI layouts:

1. **TitleStandard** - A vertically stacked title component that
displays a main title (DisplayMd variant) with optional top/bottom
labels and accessories. Ideal for displaying amounts with context (e.g.,
"Send" label above "$4.42" with "0.002 ETH" below).

2. **TitleSubpage** - A horizontally-oriented title component with an
optional start accessory (e.g., for avatars), main title (HeadingMd
variant), and bottom content. Designed for subpages like token/asset
details where an avatar appears to the left of the title.

Both components:
- Use `@metamask/design-system-react-native` primitives (Box, Text)
- Support flexible customization via accessory slots and label props
- Include comprehensive unit tests and Storybook stories

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes:
https://consensyssoftware.atlassian.net/jira/software/c/projects/MDP/boards/2972?assignee=62afb43d33a882e2be47c36f&quickFilter=3325&selectedIssue=MDP-699

## **Manual testing steps**

```gherkin
Feature: TitleStandard and TitleSubpage components

  Scenario: View TitleStandard in Storybook
    Given the app is running in Storybook mode

    When user navigates to Components Temp > TitleStandard
    Then user should see various title configurations with top labels, bottom labels, and accessories

  Scenario: View TitleSubpage in Storybook
    Given the app is running in Storybook mode

    When user navigates to Components Temp > TitleSubpage
    Then user should see title layouts with start accessories (avatars), bottom labels, and title accessories
```

## **Screenshots/Recordings**

### **Before**

N/A - New components

### **After**


https://github.com/user-attachments/assets/2f39031f-91c8-483a-a4f9-0237be3631a2

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> New isolated UI components plus stories/tests; no changes to app
flows, state, or security-sensitive logic.
> 
> **Overview**
> Adds two new `components-temp` title components: `TitleStandard`
(stacked title with optional top/bottom labels or accessories, plus
inline `titleAccessory`) and `TitleSubpage` (row layout with optional
`startAccessory`, inline `titleAccessory`, and bottom label/accessory).
> 
> Registers both in Storybook and adds comprehensive unit tests covering
rendering, `testID` passthrough via `*Props`, and label-vs-accessory
precedence rules.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
0e6c3f8. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
This PR moves selectors from `tests` to `app` to prevent imports from
`e2e`.
The E2E BUGBOT was also updated to reflect this in order to prevent this
issue from happening in the future.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes:

## **Manual testing steps**
N/A

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [x] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Primarily updates selector imports and adds local `*.testIds.ts`
files; minimal behavioral impact outside of potential broken testID
references if names drift.
> 
> **Overview**
> Moves Card UI `testID`/selector constants out of `e2e/selectors` and
into co-located `*.testIds.ts` files within the relevant Card
views/components, updating both production components and their unit
tests to import locally (e.g., `ChooseYourCard`, `ReviewOrder`,
`OrderCompleted`, `DaimoPayModal`, `RecurringFeeModal`).
> 
> Updates the E2E testing guidelines to require colocating new testIDs
next to the component and provides an example to avoid importing from
`e2e` in app code.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
028ff81. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
…sed markets (#25680)

## **Description**

Enhances the `PredictMarketHighlightsFlag` feature with version gating
and closed market filtering:

1. **Version Gating**: `PredictMarketHighlightsFlag` now extends
`VersionGatedFeatureFlag`, adding `minimumVersion` support. Highlights
are only fetched when the user's app version meets the minimum
requirement (7.64.0).

2. **Closed Market Filtering**: Highlighted markets that are closed or
resolved are now filtered out, ensuring only open markets are displayed
at the top of category lists.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

N/A - Internal improvement

## **Manual testing steps**

```gherkin
Feature: Predict Market Highlights

  Scenario: User views category with highlighted markets
    Given the user is on the Predict tab
    And the remote feature flag has highlights configured for a category
    And the user's app version meets the minimum version requirement

    When user navigates to that category
    Then highlighted markets appear at the top of the list
    And only open markets are shown in the highlights

  Scenario: Highlights filtered when version requirement not met
    Given the user is on the Predict tab
    And the remote feature flag has minimumVersion set to a higher version

    When user navigates to a category with highlights
    Then no highlighted markets are prepended
    And only regular market list is shown

  Scenario: Closed markets are not highlighted
    Given a highlighted market has been closed or resolved

    When user navigates to that category
    Then that market is not shown in the highlights section
```

## **Screenshots/Recordings**

N/A - Backend logic change, no UI changes

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
## **Description**

This PR aligns the `TextField` and `TextFieldSearch` components with the
MetaMask Design System specifications.

**Key changes:**
- **Removed the `size` prop** from `TextField` - the component now uses
a consistent fixed height of 48px, simplifying the API and ensuring
design consistency across the app
- **Updated `TextField` styling**: increased border radius (8px → 12px),
updated colors to use semantic tokens (`background.muted`,
`border.muted`), and increased accessory margins (8px → 12px)
- **Updated `TextFieldSearch` styling**: uses a pill-shaped border
radius (24px), larger icons (`IconSize.Md`), and updated close icon to
`CircleX`
- **Improved single-line behavior**: `TextField` now explicitly sets
`numberOfLines={1}` and `multiline={false}` by default
- **Updated all consumers** that previously used
`size={TextFieldSize.Lg}` to use the new simplified API
- **Enhanced Storybook stories** with more comprehensive examples and
better organization
- **Simplified constants files** by removing unused sample props

## **Changelog**

CHANGELOG entry: Updated TextField and TextFieldSearch components to
align with the MetaMask Design System

## **Related issues**

Fixes:
https://consensyssoftware.atlassian.net/jira/software/c/projects/MDP/boards/2972?assignee=62afb43d33a882e2be47c36f&quickFilter=3325&selectedIssue=MDP-700

## **Manual testing steps**

```gherkin
Feature: TextField component alignment

  Scenario: User sees updated TextField styling
    Given the app is running
    
    When user navigates to any screen with a TextField (e.g., Login, Import Wallet, Search)
    Then the TextField should display with:
      - Height of 48px
      - Border radius of 12px
      - Muted background color
      - Muted border color (default) that becomes darker on focus

  Scenario: User sees updated TextFieldSearch styling
    Given the app is running
    
    When user navigates to a screen with TextFieldSearch (e.g., token search, address book)
    Then the TextFieldSearch should display with:
      - Pill-shaped border radius (24px)
      - Search icon on the left
      - CircleX clear button when text is present

  Scenario: User interacts with TextField
    Given the user is on a screen with a TextField
    
    When user taps on the TextField
    Then the border color should change to indicate focus
    And the TextField should accept text input as a single line
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**
TextField


https://github.com/user-attachments/assets/b7fbdb24-a957-4fba-b134-d319759a04ce

TextFieldSearch


https://github.com/user-attachments/assets/7249cdb3-1119-477b-8652-ab2f8ff1abb7

Others


https://github.com/user-attachments/assets/fb425820-d231-436f-a35f-ba75cf64e0e3

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches a widely used form primitive and updates default styling/props
(including fixed height and focus colors), which could cause subtle
visual regressions across many screens; behavior changes are otherwise
straightforward and covered by snapshot/test updates.
> 
> **Overview**
> Aligns `TextField` with updated design-system tokens by **removing the
`size` API** and standardizing the component to a fixed 48px height,
updated border/background colors, larger corner radius, and increased
accessory spacing; it also forces single-line input via
`numberOfLines={1}`/`multiline={false}`.
> 
> Updates `TextFieldSearch` to match the new look (pill radius, updated
search/clear icons and sizing, and rounded styling via a new
`TextFieldSearch.styles`) and refactors Storybook stories, constants,
and unit/snapshot tests accordingly. All consumers that passed
`size={TextFieldSize.Lg}` are migrated to the simplified API.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d7ab35c. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->
Change CardHome button colors

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry:

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

<img width="200" height="900" alt="image"
src="https://github.com/user-attachments/assets/31e5700c-2387-4c73-a71a-6576036e2f95"
/>


### **After**

<!-- [screenshots/recordings] -->

<img width="200" height="900" alt="image"
src="https://github.com/user-attachments/assets/64bb8951-f334-406e-a916-d0070723bc28"
/>


## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> UI-only styling change limited to button variants and snapshot
updates, with no impact to card flows, navigation, or data handling.
> 
> **Overview**
> Updates `CardHome` to render its main call-to-action buttons (`Add
funds`, `Enable card`, `Change asset`, and the error `Try again`) using
`ButtonVariants.Primary` instead of `Secondary`, changing their visual
styling.
> 
> Regenerates `CardHome` Jest snapshots to reflect the new button colors
(e.g., dark background and white label text).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
4e6f91e. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Ale Machado <alejandro@macha.do>
## Version Bump After Release

This PR bumps the main branch version from 7.65.0 to 7.66.0 after
cutting the release branch.

### Why this is needed:
- **Nightly builds**: Each nightly build needs to be one minor version
ahead of the current release candidate
- **Version conflicts**: Prevents conflicts between nightlies and
release candidates
- **Platform alignment**: Maintains version alignment between MetaMask
mobile and extension
- **Update systems**: Ensures nightlies are accepted by app stores and
browser update systems

### What changed:
- Version bumped from `7.65.0` to `7.66.0`
- Platform: `mobile`
- Files updated by `set-semvar-version.sh` script

### Next steps:
This PR should be **manually reviewed and merged by the release
manager** to maintain proper version flow.

### Related:
- Release version: 7.65.0
- Release branch: release/7.65.0
- Platform: mobile
- Test mode: false

---
*This PR was automatically created by the
`create-platform-release-pr.sh` script.*

Co-authored-by: metamaskbot <metamaskbot@users.noreply.github.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

Add the shared infrastructure for push provisioning cards to mobile
wallets. This base branch contains:

- Core hook (usePushProvisioning) and service (PushProvisioningService)
- Card provider adapters (GalileoCardAdapter for US users)
- Base wallet adapter interfaces and utilities
- Feature flag selectors for both platforms
- CardHome and ReviewOrder UI integration
- Localization strings and analytics events

Platform-specific implementations (GoogleWalletAdapter,
AppleWalletAdapter) are added in separate branches:
- feat/google-in-app-provisioning
- feat/apple-in-app-provisioning

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Base setup for in-app provisioning

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches core card UX and adds new network endpoints plus a new
adapter/service stack that coordinates with native wallet SDKs, so
regressions could block card flows even though logic is
feature-flag/eligibility gated.
> 
> **Overview**
> Introduces a new `pushProvisioning` module (types, constants, provider
factories, adapters, service, and `usePushProvisioning`) to support
adding a card to Apple/Google wallets via provider-encrypted payloads,
with eligibility checks, activation event handling, and standardized
error/logging utilities.
> 
> `CardHome` now derives a provisioning-ready user address/card details,
calls `usePushProvisioning`, and conditionally renders an
`AddToWalletButton` (with spinner) plus success/error toasts;
shipping-address construction is extracted to shared `buildUserAddress`
utilities and `ReviewOrder` reuses the shared `ShippingAddress` type.
The card SDK gains `createGoogleWalletProvisioningRequest` and
`createApplePayProvisioningRequest` endpoints to fetch encrypted
provisioning payloads, with extensive new unit tests across the new
infrastructure and UI integration.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6974063. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Add analytics event tracking when deposit is triggered from different
entry points (homepage balance, buy preview). The deposit function now
accepts optional analytics parameters including entryPoint and
amountUsd.
- Add trackPredictOrderEvent call in usePredictDeposit when analytics
  properties are provided
- Pass HOMEPAGE_BALANCE entry point from PredictBalance component
- Pass BUY_PREVIEW entry point with market context from
usePredictPlaceOrder
  when balance is insufficient
- Add new event values: BUY_PREVIEW entry point and transaction types
  for deposit, withdraw, and claim
- Update tests to verify analytics properties are passed correctly

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches the deposit initiation path and changes the `deposit` hook API
to accept parameters, which could break callers or alter deposit
triggering behavior if mis-wired; analytics additions are otherwise low
impact.
> 
> **Overview**
> Adds analytics instrumentation to the Predict deposit flow by
extending `usePredictDeposit.deposit` to accept optional `{ amountUsd,
analyticsProperties }` and emitting
`PredictController.trackPredictOrderEvent` with `status: initiated` and
`transactionType: mm_predict_deposit` when provided.
> 
> Threads the new analytics context through key entry points:
`PredictBalance` passes `entryPoint: homepage_balance` for the Add Funds
button, and `usePredictPlaceOrder` triggers a deposit on insufficient
BUY balance while passing `amountUsd`, `entryPoint: buy_preview`, and
market context (merging any existing `orderParams.analyticsProperties`).
Event constants are expanded with `BUY_PREVIEW` and new transaction type
values, and tests are updated/added to assert the new analytics payloads
and tracking behavior.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d00ac49. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

PR to fix navigation to buy crypto with cash on the sticky buy button by
passing the assetId

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Pass assetID to the on ramp buy screen.

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Small navigation change limited to the token-details Buy fallback
path; risk is mainly incorrect `assetId` formatting causing the on-ramp
screen to open without preselecting the intended asset.
> 
> **Overview**
> Fixes the token-details sticky **Buy** flow so that when no eligible
swap/bridge source token exists, the app navigates to on-ramp via
`goToBuy({ assetId })` instead of calling `goToBuy()` with no context.
> 
> `assetId` is derived by using the token’s CAIP address directly for
non-EVM assets, or generating an EVM CAIP asset id via
`formatAddressToAssetId(address, chainId)` (with a safe fallback to
`undefined` on errors). Tests are expanded to cover EVM vs
non-EVM/trending tokens and error cases for `assetId` generation.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ce98ac3. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Curtis David <Curtis.David7@gmail.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

The `onBuy` handler drilled down to those components already handles all
the logic to navigate correctly, so fallbacks and modals are removed
from both the new button layout and the "More" menu.

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: Fixed flow for "Cash buy X" button on the new token
details layout

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [X] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [X] I've completed the PR template to the best of my ability
- [X] I've included tests if applicable
- [X] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [X] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches buy-call-to-action wiring and removes embedded ramp
routing/analytics, which could change purchase entrypoints and event
reporting if callers don’t supply `onBuy` correctly.
> 
> **Overview**
> Fixes the token details **“Cash buy”** flow by making `onBuy` a
required callback and invoking it directly from both the main
`TokenDetailsActions` button and the `MoreTokenActionsMenu`, removing
internal fallback navigation to fund/ramp flows.
> 
> Cleans up related ramp-specific logic and metrics/tracing in the
more-actions menu, and adjusts the token-hide metric to use
`asset.chainId` for `chain_id` instead of the selected network chain id.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
1646360. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
amitabh94 and others added 3 commits February 5, 2026 23:43
…led events (#25618)

<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

This PR adds the `provider_onramp` property to the "Ramps Transaction
Completed" and "Ramps Transaction Failed" analytics events for
deposit/native orders.

**Problem:**
The Ramps Transaction Completed event does not have the
`provider_onramp` property, while the On-ramp Purchase Completed event
does have this field. When creating a custom Mixpanel event that
combines both events for analysis, `(not set)` dominates the results
because of the larger volume of native orders without this property.

**Solution:**
- Added `provider_onramp: string` field to `RampsTransactionCompleted`
and `RampsTransactionFailed` analytics interfaces
- Updated `getDepositAnalyticsPayload` function to include
`provider_onramp` from `order.provider` (defaults to empty string if not
present)
- Updated mock data to include provider field
- Updated all test expectations to include `provider_onramp` property

This aligns the deposit/native orders analytics with the aggregator
orders which already have `provider_onramp`, allowing for better
analysis in Mixpanel custom events.

**Files Changed:**
- `app/components/UI/Ramp/Deposit/types/analytics.ts` - Added
`provider_onramp` to interfaces
- `app/components/UI/Ramp/Deposit/utils/getDepositAnalyticsPayload.ts` -
Added property extraction from `order.provider`
- `app/components/UI/Ramp/Deposit/testUtils/constants.ts` - Updated mock
data
-
`app/components/UI/Ramp/Deposit/utils/getDepositAnalyticsPayload.test.ts`
- Updated all test expectations

## **Changelog**

CHANGELOG entry: null

<!-- This is an internal analytics change, not user-facing -->

## **Related issues**

Refs: Issue created in Slack from a message
Related PR: Consensys/segment-schema#447 (adds `provider_onramp` to
Segment tracking plan)

## **Manual testing steps**

```gherkin
Feature: Analytics event tracking for deposit orders

  Scenario: Deposit order completion includes provider_onramp property
    Given a deposit order is completed successfully
    When the Ramps Transaction Completed event is tracked
    Then the event should include the provider_onramp property with the provider name (e.g., "TRANSAK", "MOONPAY")
    
  Scenario: Deposit order failure includes provider_onramp property
    Given a deposit order fails
    When the Ramps Transaction Failed event is tracked
    Then the event should include the provider_onramp property with the provider name
```

**Note:** Manual testing requires completing a real deposit order
(requires funds). Unit tests verify the property is correctly included
in analytics payloads (11/11 tests pass).

## **Screenshots/Recordings**

<!-- Not applicable - this is an analytics/internal change with no UI
impact -->

### **Before**

N/A - Analytics change only

### **After**

N/A - Analytics change only

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable (all 11 unit tests pass,
verifying `provider_onramp` property inclusion)
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: analytics-only payload/type changes for deposit
completion/failure events; main risk is downstream consumers expecting
the previous schema.
> 
> **Overview**
> Adds `provider_onramp` to deposit analytics for
`RAMPS_TRANSACTION_COMPLETED` and `RAMPS_TRANSACTION_FAILED`, populating
it from `order.provider` (defaulting to an empty string when missing).
> 
> Updates the corresponding TypeScript analytics event interfaces plus
deposit test fixtures and unit test expectations to validate the new
field is emitted.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
5031b78. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Cursor <cursoragent@cursor.com>
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Updated coloring of Earn CTA
<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: updated coloring of Earn CTA

## **Related issues**

Fixes: 

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->
<img width="928" height="158" alt="image"
src="https://github.com/user-attachments/assets/470dc2d4-9c8a-4f5a-8a42-623cf3a93e50"
/>

### **After**

<!-- [screenshots/recordings] -->
<img width="456" height="82" alt="image"
src="https://github.com/user-attachments/assets/2f9a4386-fde8-43fc-89c0-40ce8b1e60cb"
/>

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [x] I've completed the PR template to the best of my ability
- [x] I've included tests if applicable
- [x] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [x] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Pure UI styling tweak limited to a single text color change with no
logic or data-flow impact.
> 
> **Overview**
> Updates the Stake screen Earn CTA by changing the `StakeButton` label
from `TextColor.Primary` to `TextColor.Alternative` (no behavior,
routing, or analytics changes).
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
e3888b7. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**

Introduces the payment selection modal and payment selection flow. Users
can choose a payment method (e.g. debit/credit card). Quotes and an
option to change provider coming soon.

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: adds functionality for selecting a payment method

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

Loom video of the feature working:
https://www.loom.com/share/bfcf206254ff46b48107f8efb55875e5

<img width="504" height="1033" alt="Screenshot 2026-02-04 at 7 19 45 PM"
src="https://github.com/user-attachments/assets/8bfd1d41-6752-4f2f-aec6-4dd7d2b002be"
/>

Loading state:
<img width="248" height="148" alt="Screenshot 2026-02-04 at 7 19 09 PM"
src="https://github.com/user-attachments/assets/43596952-5e8d-48e7-92c3-4dbdc82463cd"
/>

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Touches Ramp navigation and selection state (payment method/provider)
and upgrades `@metamask/ramps-controller`, which could affect runtime
behavior across the ramps flow despite being mostly additive and
UI-focused.
> 
> **Overview**
> Adds a new **payment selection bottom sheet modal** to the Ramp buy
flow, letting users pick a `paymentMethod` (and a stubbed
provider-selection view) and persisting the choice via
`useRampsController.setSelectedPaymentMethod`.
> 
> Updates `BuildQuote` to use controller-managed
`selectedToken`/`selectedPaymentMethod` (instead of route param lookup),
display a “Select payment method” placeholder, show a loading
spinner/disable interaction while payment methods load, and navigate to
the new modal. Also centralizes payment-delay string formatting into
shared `Aggregator/utils` helpers and bumps `@metamask/ramps-controller`
to `^7.0.0`, with new/updated tests and snapshots covering the modal,
pill loading state, and navigation.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
4c37973. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@pull pull Bot locked and limited conversation to collaborators Feb 6, 2026
@pull pull Bot added the ⤵️ pull label Feb 6, 2026
@pull pull Bot merged commit fa38c18 into Reality2byte:main Feb 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.