[pull] main from MetaMask:main#512
Merged
Merged
Conversation
<!-- 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 aims to remove speed up and cancel buttons from transaction activity temporarily. We will introduce as part of redesign here: MetaMask/MetaMask-planning#6569 ## **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: #25781 ## **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] > **Low Risk** > UI-only removal of existing controls; minimal logic changes aside from disconnecting action wiring, so risk is limited to missing expected entry points for speed-up/cancel. > > **Overview** > **Temporarily removes transaction action controls** by eliminating the *Speed up* and *Cancel* buttons from the transaction details modal and from each transaction row in the activity list. > > Wiring for these actions is also stripped from `TransactionDetailsSheet`/`TransactionDetails` (props, state, and smart-transactions gating), and the associated UI test that asserted the buttons existed is removed. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c498a45. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Update OTA modal to newest design [here](https://www.figma.com/proto/Ug17BYFqB6WJ9zWPqXb7U9/OTA-Update?page-id=0%3A1&node-id=26-511) - Also fixed an issue where the MetaMask logo wouldn't alternate based on light/dark mode ## **Changelog** CHANGELOG entry: Updated OTA modal user interface ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/TMCU-393 ## **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** ### **Before** <img width="350" alt="Simulator Screenshot - iPhone 17 - 2026-02-09 at 16 52 20" src="https://github.com/user-attachments/assets/8473a6b8-c979-4b53-a1ac-5ef3a35d79e1" /> https://github.com/user-attachments/assets/8e35edbc-b41a-496a-b297-45ee2f3252da ### **After** <img width="350" alt="Simulator Screenshot - iPhone 17 - 2026-02-09 at 16 46 52" src="https://github.com/user-attachments/assets/2a0d645c-28cd-4304-b4cd-7f0564718ee9" /> https://github.com/user-attachments/assets/18210c53-112e-4164-af73-4135799bde88 ## **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** - [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** > Primarily UI/copy changes with a small behavioral addition (explicit close) and minimal impact on the existing reload/metrics flow. > > **Overview** > Updates `OTAUpdatesModal` to the latest design-system layout: replaces the old header/scroll/button components with `HeaderCompactStandard` + design-system `Button`/`Text`, tweaks spacing/sizing, and adds a close affordance that dismisses the bottom sheet. > > Fixes branding to switch the MetaMask wordmark based on light/dark theme via `useAssetFromTheme`, and updates the English modal copy (title + iOS/Android descriptions). Tests are refactored to render with providers, mock new UI/theme dependencies, and add coverage for the new close button behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit e14a256. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** Remove homepage-related functionality from the browser tab that is no longer needed: - Remove `isHomepage` and `injectHomePageScripts` functions from BrowserTab - Remove `metamask_removeFavorite`, `metamask_showAutocomplete`, and `metamask_injectHomepageScripts` RPC methods from RPCMethodMiddleware - Remove `bookmarks` prop from BrowserTab (no longer needed for homepage injection) - Update `RPCMethodsMiddleParameters` interface to remove unused properties - Update stubs in SDK, WalletConnect, and Snaps integration files - Update related test files - Remove RPC methods from unrestricted methods list in specifications.js ### Files Changed | File | Changes | |------|---------| | `app/components/Views/BrowserTab/BrowserTab.tsx` | Remove homepage logic, imports, props, `toggleUrlModal` | | `app/components/Views/BrowserTab/types.ts` | Remove `bookmarks` prop type | | `app/core/RPCMethods/RPCMethodMiddleware.ts` | Remove RPC methods and interface properties | | `app/core/Permissions/specifications.js` | Remove RPC methods from unrestricted list | | `app/core/SDKConnect/handlers/setupBridge.ts` | Remove homepage stubs | | `app/core/SDKConnect/getDefaultBridgeParams.ts` | Remove homepage stubs | | `app/core/SDKConnectV2/adapters/rpc-bridge-adapter.ts` | Remove homepage stubs | | `app/core/WalletConnect/WalletConnect2Session.ts` | Remove homepage stubs | | `app/core/WalletConnect/WalletConnect.js` | Remove homepage stubs | | `app/core/Engine/controllers/snaps/execution-service-init.ts` | Remove homepage stubs | | `app/components/UI/Card/components/DaimoPayModal/DaimoPayModal.tsx` | Remove homepage stubs | | `app/core/RPCMethods/RPCMethodMiddleware.test.ts` | Remove homepage mocks | | `app/components/Views/BrowserTab/components/Options/index.test.tsx` | Remove `isHomepage` mock | | `app/core/Snaps/SnapBridge.test.ts` | Remove homepage mocks | ### What's Preserved - **Bookmarks feature**: Redux state and actions remain for use in the Options menu - **`HOMEPAGE_HOST` constant**: Still needed by `returnHome` function for error recovery - **PhishingModal navigation**: "Go back to safety" still navigates to homepage ## **Changelog** CHANGELOG entry: Removed legacy homepage script injection and related RPC methods ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/MCWP-217 ## **Manual testing steps** ```gherkin Feature: Browser Tab Navigation Scenario: User navigates to a website Given the user is on the browser tab When user enters a URL and submits Then the page loads successfully And no console errors related to homepage scripts appear Scenario: User adds a bookmark Given the user is viewing a website When user taps the bookmark button in Options menu Then the site is added to favorites And the bookmark persists after app restart Scenario: User removes a bookmark Given the user has a bookmarked site When user removes the bookmark via Options menu Then the bookmark is removed successfully Scenario: SDK connection works Given the user has a dApp connected via SDK When the dApp sends a request Then the request is processed successfully Scenario: WalletConnect session works Given the user has a WalletConnect session When the dApp sends a transaction request Then the transaction prompt appears correctly Scenario: Error page return home works Given the user encounters a page load error When user taps "Return Home" button Then user is navigated to the homepage ``` ## **Manual testing checklist** ## Browser Tab Core Functionality - [x] Browser tab can navigate to URLs normally - [x] Browser tab can load web pages without errors - [x] URL bar input and submission works correctly - [x] Page load events fire correctly (no console errors) - [x] Favicon loading still works - [x] Back/forward navigation works - [x] Tab switching works correctly --- ## Bookmarks Feature - [x] Bookmarks can be added via Options menu - [x] Bookmarks can be removed via Options menu - [x] Bookmarked websites can be found and accessed - [x] Bookmarks persist after app restart - [x] Bookmark state syncs correctly in Redux --- ## Homepage & Error Recovery - [x] Error page "Return Home" button navigates to homepage correctly - [x] PhishingModal "Go back to safety" navigates to homepage - [x] `returnHome` function works (uses `HOMEPAGE_HOST` constant) --- ## SDK Connections - [x] SDK connection can be established with a dApp - [x] SDK sends/receives messages without errors - [x] dApp requests are processed correctly - [x] No console errors related to missing bridge params --- ## WalletConnect - [x] WalletConnect v2 session can be established - [x] Transaction requests work correctly - [x] Signature requests work correctly - [x] Session persists and reconnects properly --- ## Snaps Functionality - [ ] Snaps can be installed - [ ] Snap RPC methods work correctly - [ ] SnapBridge initialization succeeds - [x] No errors from snap execution service --- ## DaimoPay Modal - [x] DaimoPay modal opens correctly - [x] DaimoPay bridge communication works --- ## Platform Coverage ### iOS - [x] All browser tab tests pass - [x] All bookmark tests pass - [x] SDK connections work - [x] WalletConnect works ### Android - [x] All browser tab tests pass - [x] All bookmark tests pass - [x] SDK connections work - [x] WalletConnect works --- ## Regression - Removed RPC Methods These RPC methods were removed and should **NOT** be called anywhere: - [ ] Verify no external code calls `metamask_removeFavorite` - [ ] Verify no external code calls `metamask_showAutocomplete` - [ ] Verify no external code calls `metamask_injectHomepageScripts` ## **Screenshots/Recordings** ### **Before** N/A - Internal code cleanup, no UI changes ### **After** N/A - Internal code cleanup, 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** - [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** > Touches `getRpcMethodMiddleware` and browser bridge wiring used by in-app browser, WalletConnect, SDK, and Snaps, so missing/incorrect params could break dapp connectivity. Functional change is primarily removal of legacy homepage/bookmark/autocomplete RPC surface, which is straightforward but broad in reach. > > **Overview** > Removes the in-app browser *legacy homepage* plumbing: drops `isHomepage` detection, homepage script injection, and the URL-bar autocomplete trigger path from `BrowserTab`, along with the `bookmarks` prop previously used for homepage injection. > > Simplifies `getRpcMethodMiddleware` by removing homepage-related parameters and deletes the MetaMask-specific RPC methods `metamask_removeFavorite`, `metamask_showAutocomplete`, and `metamask_injectHomepageScripts`; corresponding unrestricted-method allowlist entries and integration/test stubs across SDK/WalletConnect/Snaps/DaimoPay are updated accordingly. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 1c18b3e. 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**
Fixes `megaEth` naming to `megaETH`.
<!--
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: Fixed MegaETH network name spelling from "MegaEth" to
"MegaETH" for consistency across the app
## **Related issues**
Fixes:
## **Manual testing steps**
```gherkin
Feature: MegaETH Network Name Spelling Correction
Scenario: user sees correct MegaETH spelling after app update
Given the user has MegaETH Mainnet network already added with the old spelling "MegaEth"
When the user updates the app to the latest version
Then the network name should be displayed as "MegaETH" (migration applied successfully)
Scenario: user adds MegaETH network for the first time
Given the user does not have MegaETH Mainnet network added
When the user adds MegaETH Mainnet from the popular networks list
Then the network name should be displayed as "MegaETH" (not "MegaEth")
```
## **Screenshots/Recordings**
<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->
### **Before**
<!-- [screenshots/recordings] -->
<img width="382" height="809" alt="Screenshot 2026-02-09 at 14 18 21"
src="https://github.com/user-attachments/assets/2e9812a2-3bc2-45b7-ac77-d7c6a39feadd"
/>
### **After**
<!-- [screenshots/recordings] -->
<img width="382" height="809" alt="Screenshot 2026-02-09 at 14 19 07"
src="https://github.com/user-attachments/assets/002d676e-24a2-48da-bcde-3087d7fedf8d"
/>
## **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**
> String-only renaming plus a narrowly-scoped state migration for a
single chain ID; low chance of side effects beyond display naming if the
migration logic misses unexpected state shapes.
>
> **Overview**
> Standardizes MegaETH capitalization across the app by renaming the
MegaETH Mainnet label from `MegaEth` to `MegaETH` in the popular
networks list, network-name allowlist, and the NetworkSelector snapshot.
>
> Adds migration `119` to update persisted
`NetworkController.networkConfigurationsByChainId` for
`MEGAETH_MAINNET`, rewriting the network `name` and any
`rpcEndpoints[].name` values from `MegaEth` to `MegaETH`, with
accompanying unit tests and registration in the migrations index.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
6604977. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
---------
Co-authored-by: João Loureiro <175489935+joaoloureirop@users.noreply.github.com>
…#25745) ## **Description** This PR improves the consistency and simplifies the usage of text input and search field components across the app by: 1. **Centralizing placeholder text color**: The `Input` component now sets a default `placeholderTextColor` using the theme's `text.alternative` color token, eliminating the need for consumers to manually pass this prop. 2. **Simplifying TextFieldSearch clear button behavior**: The `showClearButton` prop has been removed. The clear button now automatically appears when the input has a value (`!!value`), which is the expected UX pattern and reduces boilerplate for consumers. 3. **Fixing error state priority over focus state**: The `TextField` component now correctly prioritizes error border color over focus border color. Previously, focusing an errored field would override the error styling. 4. **Cleaning up Input styles**: Removed hardcoded `height` and platform-specific `paddingVertical` fixes from the Input component styles, allowing for more natural sizing. 5. **Updating all consumers**: Removed redundant `placeholderTextColor` and `showClearButton` props from ~30+ component usages across the codebase. ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/jira/software/c/projects/MDP/boards/2972?assignee=62afb43d33a882e2be47c36f&quickFilter=3325&selectedIssue=MDP-701 ## **Manual testing steps** ```gherkin Feature: TextField and TextFieldSearch improvements Scenario: User views placeholder text in text fields Given the user is on any screen with a text input (e.g., Login, ChoosePassword) When user views the empty text field Then the placeholder text should be displayed in the correct alternative text color Scenario: User interacts with search fields Given the user is on a screen with a TextFieldSearch component (e.g., Bridge token selector, Fiat selector) When user types text into the search field Then a clear button should automatically appear When user taps the clear button Then the search text should be cleared And the clear button should disappear ``` ## **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/acf4f991-43fe-4674-8765-326fec39dc32 <!-- [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 shared form components (`Input`, `TextField`, `TextFieldSearch`) used widely across the app, so subtle UI regressions (placeholder contrast, input height, error/focus styling, clear-button visibility) are possible despite mostly presentational changes. > > **Overview** > Standardizes `Input`/`TextField` behavior and simplifies search inputs. > > `Input` now applies a default `placeholderTextColor` from theme (`text.alternative`) and removes hardcoded sizing/padding styles; `TextField` border color logic is adjusted so *error state* wins over *focus*. `TextFieldSearch` drops `showClearButton` and instead auto-displays the clear icon when `value` is truthy, requiring `onPressClearButton` and updating consumers (e.g., bridge/ramp/card/perps/multichain) to remove redundant props/styles and wire clear handlers. > > Docs, stories, unit tests, and many snapshots are updated to reflect the new defaults and clear-button behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit b6dac0e. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
#25855) ## **Description** Updated the HeaderBase component to use `min-h-14` instead of `h-14` for non-left-aligned headers. This allows the header to scale appropriately when users have larger font sizes enabled in their accessibility settings, preventing content from being cut off. The fixed height (`h-14`) was constraining the header to 56px regardless of content size, which could cause text to overflow or be truncated when accessibility settings increased font sizes. By using a minimum height (`min-h-14`), the header can now expand to accommodate larger text while maintaining the minimum visual design requirement. ## **Changelog** CHANGELOG entry: Fixed header height to scale properly with larger accessibility font sizes ## **Related issues** Fixes: ## **Manual testing steps** ```gherkin Feature: Header scales with font size Scenario: user increases system font size Given the app is open with default font size When user increases system font size in accessibility settings Then header should expand to accommodate larger text without clipping ``` ## **Screenshots/Recordings** <!-- Screenshots/recordings will be added after snapshot updates --> ### **Before** <!-- [screenshots/recordings] --> Text gets cut off on larger font sizes https://github.com/user-attachments/assets/b282137a-d2cd-4ccb-926f-b6f3b9a39f42 In activity https://github.com/user-attachments/assets/959f2d62-b3ec-4160-ba25-1ebe8bad6982 ### **After** <!-- [screenshots/recordings] --> https://github.com/user-attachments/assets/e948b55a-1730-41d0-bcea-a28de9a0971f https://github.com/user-attachments/assets/ac58616d-435b-49a8-86fb-8032a9008d06 https://github.com/user-attachments/assets/8fe03739-8014-4b3b-a4f1-20fc41211a16 In activity https://github.com/user-attachments/assets/34066722-f8f3-49da-99fc-a9039a2c6442 ## **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 styling change (height → min-height) plus snapshot updates; low risk but could cause minor layout shifts in screens using `HeaderBase` under accessibility font scaling. > > **Overview** > Updates `HeaderBase` to use `min-h-14` (min-height) instead of a fixed `h-14` for non-left-aligned/Compact headers, allowing the header container to expand when text scales for accessibility. > > Regenerates a large set of Jest snapshots across bottom sheets/modals/views to reflect the style change from `height: 56` to `minHeight: 56` (and adds `minHeight` alongside `height: "auto"` in one case). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 018185f. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
… to ^66.0.0 (#25792) <!-- 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 bumps the `bridge-controller` and `bridge-status-controller` so that we can start emitting the `Unified SwapBridge Polling Status Updated`. ## **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** Related to https://consensyssoftware.atlassian.net/browse/SWAPS-3179 ## **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 - [ ] 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** > Dependency-only change, but it upgrades core bridge controllers that can affect swap/bridge transaction and polling behavior at runtime. > > **Overview** > Updates the bridge dependency versions by bumping `@metamask/bridge-status-controller` from `^64.4.5` to `^66.0.0` (and pulling in newer `@metamask/bridge-controller` via the lockfile), aligning transitive controller versions in `yarn.lock`. > > No app/runtime code changes are included; this PR is purely a dependency/lockfile update intended to enable newer bridge polling status emission behavior from upstream packages. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 36f86a4. 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** Adds a new "Ending soon" tab to the PredictFeed, placed to the right of the "Trending" tab. This tab displays markets sorted by `endDate` ascending (`order=endDate&ascending=true`), allowing users to discover markets that are about to close. The `ascending` query parameter is made dynamic per category via an `ascendingCategories` Set, cleanly supporting `ascending=true` for the ending-soon tab while preserving `ascending=false` for all existing tabs — no duplicate query parameters. ## **Changelog** CHANGELOG entry: Added an "Ending soon" tab to prediction markets feed showing markets sorted by end date ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/browse/PRED-536 ## **Manual testing steps** ```gherkin Feature: Ending soon tab in PredictFeed Scenario: user views ending soon markets Given the user is on the PredictFeed screen When user taps the "Ending soon" tab (second tab, after Trending) Then markets sorted by end date (soonest first) are displayed Scenario: user swipes to ending soon tab Given the user is on the Trending tab When user swipes left once Then the "Ending soon" tab becomes active And markets sorted by end date ascending are displayed Scenario: ending soon tab with hot tab enabled Given the hot tab feature flag is enabled When user views the tab bar Then tabs appear in order: Hot, Trending, Ending soon, New, Sports, Crypto, Politics ``` ## **Screenshots/Recordings** ### **Before** Tabs: Trending | New | Sports | Crypto | Politics ### **After** Tabs: Trending | Ending soon | New | Sports | Crypto | Politics https://www.loom.com/share/87fcc6cc8d3847648e4832f3211e82cd ## **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 adds a new feed category and adjusts query parameters and tab indices; risk is limited to tab ordering/analytics and correctness of the new Polymarket sorting query. > > **Overview** > Adds a new **"Ending soon"** category tab (`ending-soon`) to the Predict feed, positioned after Trending, including a new i18n label. > > Updates Polymarket market-fetch query generation to support category-specific sorting by making `ascending` dynamic; `ending-soon` now requests `order=endDate` with `ascending=true` while existing categories remain `ascending=false`. > > Adjusts `PredictCategory` typing and updates unit/UI tests to reflect the additional tab/page and shifted `activeIndex`/analytics expectations (including with the Hot tab feature flag). > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 5e42dd2. 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** - Add usePredictSearch hook to manage search visibility and query from route params and focus effect - Parse query/q in handlePredictUrl and pass query to PredictMarketList - Lift search state from PredictSearchOverlay into PredictFeed via hook - Extend PredictMarketList params with optional query - Add unit tests for usePredictSearch and handlePredictUrl query param - Add PredictFeed tests for deeplink query (open overlay, pre-fill, cancel) <!-- 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: https://consensyssoftware.atlassian.net/browse/PRED-540 ## **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** https://www.loom.com/share/43980ff3f9114072becb493118124b2c <!-- 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 deeplink parsing and Predict navigation params, which can affect routing behavior across entry points. Changes are localized and covered by targeted tests, but regressions could surface as incorrect navigation or unexpected search overlay state. > > **Overview** > Adds support for Predict deeplinks that include a search term (`?query=` or `?q=`) by parsing and passing `query` through `handlePredictUrl` into `PredictMarketList` route params. > > Refactors `PredictFeed` search overlay state into a new `usePredictSearch` hook that initializes from the route `query` param and updates on focus only when the deeplink query changes, allowing deeplinks to auto-open and prefill search while preserving user edits/close actions. > > Updates navigation types to include `query?: string` and adds unit/UI tests covering parsing precedence (`query` over `q`), interaction with `market`/`tab`, special characters, and PredictFeed overlay open/prefill/cancel behavior. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 2c7eb84. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
…hain enforcement (#25915) <!-- 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** ## Purpose Add mUSD conversion quote + consistency-check context to the `MUSD_CONVERSION_STATUS_UPDATED` tracking event. ## Event properties added - `quote_payment_chain_id`: Quote source chainId (where payment token is sourced) - `quote_output_chain_id`: Quote target chainId (where output token is received) - `quote_is_same_chain`: Whether quote source/target chainIds match - `quote_payment_token_address`: Quote source/payment token address - `quote_output_token_address`: Quote target/output token address - `payment_amount_usd`: Quoted source/payment amount in USD - `output_amount_usd`: Quoted target/output amount in USD - `pay_quote_strategy`: Quote strategy used - `selected_payment_chain_id`: User-selected payment chainId (if present) - `selected_payment_chain_matches_quote_payment_chain`: Whether selected payment chainId matches quote source chainId - `tx_execution_chain_matches_quote_output_chain`: Whether tx execution chainId matches quote target chainId - `payment_token_address`: Resolved “payment/in” token address (selected or quote-derived) - `payment_token_chain_id`: Resolved “payment/in” token chainId (selected or quote-derived) - `output_token_address`: Resolved “output/out” token address (quote-derived) - `output_token_chain_id`: Resolved “output/out” token chainId (quote-derived) <!-- 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: added mUSD conversion event properties for same-chain enforcement ## **Related issues** Fixes: [MUSD-307: Add tracking for bridge conversions](https://consensyssoftware.atlassian.net/browse/MUSD-307) ## **Manual testing steps** ```gherkin Feature: Enriched mUSD conversion status analytics Scenario: user conversion status update includes quote context Given user initiates an mUSD conversion that produces a MetaMask Pay quote When the conversion transaction status updates (approved, confirmed, or failed) Then analytics includes the quote payment/output chain and token addresses And analytics includes whether the quote is same-chain and the quote strategy And analytics includes payment/output USD amounts when available ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** <!-- [screenshots/recordings] --> N/A ### **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 - [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** > Changes are limited to MetaMetrics payload enrichment and more defensive decoding in `useMusdConversionStatus`, with expanded test coverage; no transaction execution logic is altered. > > **Overview** > Enhances `useMusdConversionStatus` MetaMetrics tracking for mUSD conversions by attaching quote-derived fields (payment/output chain IDs, token addresses, same-chain flag, strategy, and USD amounts) plus consistency-check properties comparing selected payment chain and execution chain vs the quote. > > Makes transfer amount decoding resilient to malformed/missing `txParams.data` (amount fields default to empty instead of throwing), and updates/extends unit tests to assert the new properties and cover same-chain vs cross-chain quote scenarios. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit c195242. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
## **Description** This PR adds a comprehensive set of header components to `components-temp` as part of the ongoing header component library development. These components provide flexible, reusable header patterns for various screen layouts including collapsible scroll-linked headers and static stacked headers. **Components added:** 1. **HeaderCollapsible** - Base collapsing header that smoothly transitions between expanded and compact states based on scroll position using Reanimated for performant scroll-linked animations. Includes a custom hook (`useHeaderCollapsible`) for easy ScrollView integration. 2. **HeaderCollapsibleStandard** - Extends HeaderCollapsible with TitleStandard content in the expanded section, suitable for main/top-level screens. 3. **HeaderCollapsibleSubpage** - Extends HeaderCollapsible with TitleSubpage content in the expanded section, suitable for secondary/nested screens. 4. **HeaderCompactSearch** - A compact search header with two variants: - `Screen` variant: Renders a back button (ArrowLeft) on the left side - `Inline` variant: Renders a cancel button on the right side 5. **HeaderStackedStandard** - A static (non-collapsible) header that combines HeaderBase with TitleStandard below, including React Navigation integration helper (`getHeaderStackedStandardNavbarOptions`). 6. **HeaderStackedSubpage** - A static header that combines HeaderBase with TitleSubpage below, suitable for secondary/nested screens. All components include full TypeScript support, comprehensive unit tests, and Storybook stories for documentation and visual testing. ## **Changelog** CHANGELOG entry: null ## **Related issues** Fixes: https://consensyssoftware.atlassian.net/jira/software/c/projects/MDP/boards/2972?assignee=62afb43d33a882e2be47c36f&quickFilter=3325&selectedIssue=MDP-702 ## **Manual testing steps** ```gherkin Feature: Header components in Storybook Scenario: User views HeaderCollapsible in Storybook Given the app is running in Storybook mode When user navigates to HeaderCollapsible stories Then user should see the collapsible header expand and collapse on scroll Scenario: User views HeaderStackedStandard in Storybook Given the app is running in Storybook mode When user navigates to HeaderStackedStandard stories Then user should see a static stacked header with back button and title section Scenario: User views HeaderCompactSearch in Storybook Given the app is running in Storybook mode When user navigates to HeaderCompactSearch stories Then user should see both Screen and Inline search header variants ``` ## **Screenshots/Recordings** <!-- If applicable, add screenshots and/or recordings to visualize the before and after of your change. --> ### **Before** N/A - New components ### **After** HeaderCollapsible https://github.com/user-attachments/assets/e54baf08-d3d7-463d-9f9c-38cfc37f5ad3 HeaderCollapsibleStandard https://github.com/user-attachments/assets/015f7c71-9b41-4671-b016-ca1193761807 HeaderCollapsibleSubpage https://github.com/user-attachments/assets/5bc9dc72-a65d-4cf2-baf1-f8ee50af2f14 HeaderCompactSearch https://github.com/user-attachments/assets/06787417-a2fe-41c3-ac57-520f79ba4003 HeaderStackedStandard https://github.com/user-attachments/assets/0de09449-8be8-41a1-bc0d-47219eecdd54 HeaderStackedSubpage https://github.com/user-attachments/assets/b3446d48-bb02-4ae0-b0df-043e7fddd258 <!-- [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** > Mostly additive UI work, but introduces new scroll-linked Reanimated behavior and dynamic layout measurement that could cause visual/interaction regressions if adopted by screens. > > **Overview** > Introduces a new set of reusable header components under `components-temp`, including `HeaderCollapsible` (scroll-linked collapsing header with dynamic height measurement + safe-area positioning) and a companion `useHeaderCollapsible` hook. > > Adds wrapper variants `HeaderCollapsibleStandard`/`HeaderCollapsibleSubpage` and static `HeaderStackedStandard`/`HeaderStackedSubpage`, plus a `HeaderCompactSearch` header supporting *screen* (back button) and *inline* (cancel button) modes. Each new component is wired into Storybook and covered by dedicated unit tests. > > Also normalizes `twClassName` handling by defaulting it to `''` in `HeaderCompactStandard`, `TitleStandard`, and `TitleSubpage` and simplifying class concatenation. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit ed7c2fd. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY -->
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 : )