Skip to content

[pull] main from MetaMask:main#568

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

[pull] main from MetaMask:main#568
pull[bot] merged 6 commits into
Reality2byte:mainfrom
MetaMask:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Mar 3, 2026

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 : )

brianacnguyen and others added 6 commits March 3, 2026 00:52
<!--
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 migrates usages of **HeaderStackedStandard** to
**HeaderCompactStandard** and **TitleStandard**, then removes the
**HeaderStackedStandard** component from
`app/component-library/components-temp/`.

**Reason for change:** Preparing to deprecate HeaderStackedStandard.
Replacing it with HeaderCompactStandard (button row) + TitleStandard
(title block) preserves the same layout and spacings (`px-2` on the
header row, `px-4 pt-1 pb-3` on the title section) while using the
preferred components.

**What changed:**

1. **View migrations (3 files)**
- **ImportNewSecretRecoveryPhrase** – Replaced `HeaderStackedStandard`
with `HeaderCompactStandard` (back + QR button) and `TitleStandard`
(title + bottomAccessory), props inlined.
- **ConnectHardware/SelectHardware** – Same pattern:
`HeaderCompactStandard` (onBack) + `TitleStandard` (title,
bottomAccessory), props inlined.
- **ImportPrivateKey** – Same pattern: `HeaderCompactStandard`
(backButtonProps) + `TitleStandard` (title, bottomAccessory), props
inlined.
- No Box wrappers; header and title are direct siblings of their parent.
Spacing applied via `twClassName="px-4 pt-1 pb-3"` on `TitleStandard`.

2. **Removed HeaderStackedStandard**
- Deleted `app/component-library/components-temp/HeaderStackedStandard/`
(index, types, component, stories, test).
- Removed its story `require()` from `.storybook/storybook.requires.js`.

No other app code used HeaderStackedStandard; removal is limited to the
three views above and the component folder.

## **Changelog**

This PR is not end-user-facing; it refactors internal header usage and
removes one header component.

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/DSYS-496

## **Manual testing steps**

```gherkin
Feature: HeaderStackedStandard replaced with HeaderCompactStandard + TitleStandard

  Scenario: Lint and type check pass
    Given the branch is checked out
    When the author runs yarn lint and yarn lint:tsc
    Then both complete without errors

  Scenario: No references to HeaderStackedStandard
    Given the codebase is searched for HeaderStackedStandard
    Then no imports or usages remain

  Scenario: Migrated screens render correctly
    Given the app is running
    When the user opens Import Secret Recovery Phrase, Connect Hardware (Select Hardware), or Import Private Key
    Then the header shows the same back/close/actions and title section layout and spacing as before
```

## **Screenshots/Recordings**

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

### **Before**

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

N/A – layout unchanged; only implementation (component swap) changed.

### **After**


https://github.com/user-attachments/assets/994e59e1-fe6d-4f16-a7df-ca1f85e5bf23

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

N/A – same header appearance and spacing on the three screens.

## **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**
> Low risk refactor that swaps a composite header component for two
existing components; main risk is minor layout/spacing or header action
wiring regressions on the three migrated screens.
> 
> **Overview**
> Removes the temporary `HeaderStackedStandard` component entirely
(component, types, tests, Storybook story) and drops its Storybook
registration.
> 
> Migrates three screens (`ConnectHardware/SelectHardware`,
`ImportNewSecretRecoveryPhrase`, `ImportPrivateKey`) from
`HeaderStackedStandard` to the equivalent `HeaderCompactStandard` +
`TitleStandard` composition, preserving back/close/scan actions and
moving title/subtitle content into `TitleStandard` with
`twClassName="px-4 pt-1 pb-3"`. Updates the `ImportPrivateKey` snapshot
to match the new header/title render structure.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
70ce3a5. 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 adds a new **HeaderRoot** component in
`app/component-library/components-temp/`.

**Reason for change:** HeaderRoot provides a header layout with base
styles similar to HeaderBase, a left section that renders either custom
`children` or a title row (TitleStandard-style), and an end section with
the same end content behavior as HeaderBase (endAccessory or
endButtonIconProps).

**What changed:**

1. **New component: HeaderRoot**
   - **Location:** `app/component-library/components-temp/HeaderRoot/`
   - **Files:**
- `HeaderRoot.tsx` – main component (View root with base styles; left
section flex-1 items-start with either children or title row; end
section with endAccessory or reversed endButtonIconProps)
- `HeaderRoot.types.ts` – `HeaderRootProps` (children, title,
titleProps, titleAccessory, endAccessory, endButtonIconProps,
includesTopInset, style, testID, twClassName; extends ViewProps)
- `HeaderRoot.stories.tsx` – Storybook entry "Components Temp /
HeaderRoot" (Default, WithTitleAccessory, WithChildren,
WithEndAccessory, WithEndButtonIconProps, MultipleEndButtons,
IncludesTopInset)
- `HeaderRoot.test.tsx` – unit test suite with full coverage (rendering,
left section children vs title row, end section, includesTopInset,
style/twClassName, titleProps)
     - `index.ts` – exports default and `HeaderRootProps`
- **Behavior:** Left section renders **either** `children` **or** a
title row (title + titleAccessory, like TitleStandard). End section
matches HeaderBase (endAccessory or multiple ButtonIcons from
endButtonIconProps in reverse order). No test ID constants; optional
`testID` prop is passed through to the root.

2. **Storybook**
- Updated `.storybook/storybook.requires.js` to require
`HeaderRoot.stories.tsx`.

No existing app code is updated; this is an additive change in the
component-library.

## **Changelog**

This PR is not end-user-facing; it adds an internal header component for
use by other screens.

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/DSYS-498

## **Manual testing steps**

```gherkin
Feature: HeaderRoot component

  Scenario: Lint and type check pass
    Given the branch is checked out
    When the author runs yarn lint and yarn lint:tsc
    Then both complete without errors

  Scenario: HeaderRoot unit tests pass
    Given the branch is checked out
    When the author runs yarn jest app/component-library/components-temp/HeaderRoot/HeaderRoot.test.tsx
    Then all tests pass

  Scenario: HeaderRoot story renders
    Given Storybook is running
    When the user opens "Components Temp / HeaderRoot"
    Then Default and other stories render (title, children, end accessories, multiple end buttons, top inset)
```

## **Screenshots/Recordings**

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

### **Before**

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

N/A – new component; no before state.

### **After**

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


https://github.com/user-attachments/assets/771c8c17-cb8a-4ab0-8132-cb56ae0be269

Root pages after replacements


https://github.com/user-attachments/assets/333c82d3-cbec-4b5b-a02e-a53ef956a7c7

## **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**
> Additive UI-only change introducing a new temporary header component
plus Storybook and unit tests; no existing runtime flows are modified.
> 
> **Overview**
> Adds a new `HeaderRoot` component under `components-temp` that
provides a standardized header layout with a left area that renders
*either* `children` or a title row (optional `titleAccessory`), and a
right area that renders `endAccessory` or a reversed list of
`endButtonIconProps`.
> 
> Includes a comprehensive `HeaderRoot.test.tsx`, a new Storybook entry
with multiple usage variants, and registers the story in
`.storybook/storybook.requires.js`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
d4dd26d. 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**
We changed node-version-file from 20 to '.nvmrc' in
setup-node-modules.yml
([here](https://github.com/MetaMask/metamask-mobile/pull/26369/changes#diff-5abcb2b2e4ab167cca56638259b62f136b88a75db4c8b0791116a2e9e9e3678bR92))
so we need to do the same in push-eas-update.yml.

testing workflow:
https://github.com/MetaMask/metamask-mobile/actions/runs/22603948995

## **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**

- [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: CI-only change that just aligns Node setup with `.nvmrc`,
though it could affect workflow runs if the file is missing or
incompatible.
> 
> **Overview**
> Updates the `push-eas-update.yml` GitHub Actions workflow to source
the Node.js version from `node-version-file: '.nvmrc'` instead of
hardcoding Node `20`.
> 
> This is applied to both the fingerprint comparison job and the EAS
update publish job, keeping CI Node version consistent with the repo’s
configured version.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
348449d. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

Upgraded `@metamask/design-tokens` from `^8.2.1` to `^8.2.2` to pull in
the latest typography token updates from the design system.

References:
- Design tokens update PR:
MetaMask/metamask-design-system#936
- Design system releases:
https://github.com/MetaMask/metamask-design-system/releases

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: design tokens dependency upgrade

  Scenario: app builds and design tokens resolve successfully
    Given the project dependencies are installed
    When I run the app and navigate through screens that use typography tokens
    Then the app should render without token resolution errors
```

## **Screenshots/Recordings**

Screens showing `HeadingMd` or `SectionHeading`

### **Before / After**

<img width="350" height="2556" alt="headingmd-home-before"
src="https://github.com/user-attachments/assets/d33f92df-98ad-496f-8e60-e12790640ee3"
/><img width="350" height="2556" alt="headingmd-home-before"
src="https://github.com/user-attachments/assets/681f88a1-0ece-4fcb-95ac-97e6408bdf60"
/>

<img width="350" height="2556" alt="headingmd-explore-before"
src="https://github.com/user-attachments/assets/50ca9055-c168-4cbc-a147-69f25a43045f"
/><img width="350" height="2556" alt="headingmd-explore-before"
src="https://github.com/user-attachments/assets/536ea8ce-be40-4fc7-9070-10a17cda361d"
/>

<img width="350" height="2556" alt="headingmd-rewards-before"
src="https://github.com/user-attachments/assets/2808af62-914a-4062-93df-c677970608de"
/><img width="350" height="2556" alt="headingmd-rewards-before"
src="https://github.com/user-attachments/assets/fb9ab145-318a-4144-88e4-da86807045cc"
/>

## **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
- [ ] 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: changes are limited to typography token updates reflected in
Jest snapshots (font size changes), with no functional logic changes.
> 
> **Overview**
> Updates typography styling to align with the latest
`@metamask/design-tokens` release, primarily increasing heading/label
`fontSize` values from `18` to `20`.
> 
> Regenerates a large set of Jest snapshots across banners and multiple
UI flows (e.g., Ramp, Earn, permissions) to match the new rendered text
styles.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
a68e696. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
## **Description**

**Context:** Design refinements for the Unified Buy (Build Quote) header
were specified for RC Build v7.68 and documented in [Figma (BUY · node
4982-8859)](https://www.figma.com/design/ItZzm9CzSAjOWQTUKsOdSk/BUY?node-id=4982-8859).
This PR updates the navbar implementation to match the spec.

**Changes:**

1. **Icon sizing** — Back and Settings header buttons now use
`ButtonIconSize.Md` instead of `ButtonIconSize.Lg`, per "Button Icon Md"
in the design.
2. **Title typography** — The main title ("Buy {ticker}") now uses
`TextVariant.HeadingMD` instead of `TextVariant.HeadingSM`, per
"Heading/Md" in the spec.
3. **Subtitle typography** — The subtitle ("On {networkName}") now uses
`TextVariant.BodySMMedium` instead of `TextVariant.BodySM`, per
"Body/Sm/Medium" in the spec.

**File changed:**

| File | Change |
|------|--------|
| `app/components/UI/Navbar/index.js` |
`getRampsBuildQuoteNavbarOptions`: icon size Lg → Md; title HeadingSM →
HeadingMD; subtitle BodySM → BodySMMedium |

**Risk:** Low — 4 prop-value changes in a single navbar config function.
No logic, navigation, or business behavior changed.

## **Changelog**

CHANGELOG entry: Updated Unified Buy Build Quote header to use correct
typography and icon sizing per design spec.

## **Related issues**

Fixes:
[TRAM-3305](https://consensyssoftware.atlassian.net/browse/TRAM-3305)

## **Manual testing steps**

```gherkin
Feature: Unified Buy Build Quote header design

  Scenario: Build Quote header matches design spec
    Given the user is on the Build Quote screen (Buy flow) with a selected token and network
    When the header is visible
    Then the back and settings icons use medium size (Button Icon Md)
    And the title uses Heading/Md typography
    And the subtitle uses Body/Sm/Medium typography

  Scenario: Header loading state renders correctly
    Given the user navigates to Build Quote before token/network data is ready
    When the header is visible
    Then skeleton placeholders are shown for avatar and labels
    And after data loads the correct typography and icon sizes apply
```

## **Screenshots/Recordings**

### **Before**

- Back/Settings: `ButtonIconSize.Lg`
- Title: `TextVariant.HeadingSM`
- Subtitle: `TextVariant.BodySM`

<img width="416" height="864" alt="image"
src="https://github.com/user-attachments/assets/f5f034a4-6a0c-4774-a5dd-1173e529318d"
/>



### **After**

- Back/Settings: `ButtonIconSize.Md`
- Title: `TextVariant.HeadingMD`
- Subtitle: `TextVariant.BodySMMedium`

<img width="416" height="864" alt="image"
src="https://github.com/user-attachments/assets/6c8eaabe-e515-42b8-a66b-bba922854f9b"
/>


## **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.

[TRAM-3305]:
https://consensyssoftware.atlassian.net/browse/TRAM-3305?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk visual-only tweaks to the Build Quote header (icon sizes and
text variants) with no navigation or data-flow changes.
> 
> **Overview**
> Updates the Unified Buy (Build Quote) navbar styling in
`getRampsBuildQuoteNavbarOptions` to match the latest design spec.
> 
> Back and settings buttons now use `ButtonIconSize.Md` (down from
`Lg`), and the title/subtitle typography is adjusted to
`TextVariant.HeadingMD` and `TextVariant.BodySMMedium` respectively.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8b9c54a. 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: Amitabh Aggarwal <amitabh94@users.noreply.github.com>
## **Description**

The homepage token empty state (`PopularTokenRow`) was navigating to the
Asset screen without a `source` prop, causing the analytics event in
`TokenDetails` to fall back to `TokenDetailsSource.Unknown`. The filled
state (`TokenListItem`) correctly passed `source:
TokenDetailsSource.MobileTokenList`.

Fix adds the missing `source` prop to the `navigation.navigate('Asset',
...)` call in `PopularTokenRow`, matching the filled state behaviour.

## **Changelog**

CHANGELOG entry: null

## **Related issues**

Fixes: https://consensyssoftware.atlassian.net/browse/TMCU-497

## **Manual testing steps**

```gherkin
Feature: Homepage token empty state analytics source

  Scenario: user taps a token row in the zero balance (empty) state
    Given the user has a zero balance account
    And the homepage displays the popular tokens list

    When user taps on a token row
    Then the Asset screen opens
    And the analytics event "Token Details Opened" includes source = "mobile-token-list"
```

## **Screenshots/Recordings**

`~`

### **Before**

`~`

### **After**

`~`

## **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: adds a single `source` navigation param used for analytics
attribution, with no changes to parsing, balances, or transaction logic.
> 
> **Overview**
> Fixes missing analytics attribution when opening `Asset` from the
homepage popular tokens (zero-balance) row by adding `source:
TokenDetailsSource.MobileTokenList` to the `navigation.navigate('Asset',
...)` params.
> 
> Updates `PopularTokenRow` tests to assert the new `source` param
across EVM, native, and non-EVM navigation cases, and adds a dedicated
test to ensure `source` is passed for tracking.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
8a5de4a. 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 Mar 3, 2026
@pull pull Bot added the ⤵️ pull label Mar 3, 2026
@pull pull Bot merged commit 6e4e35c into Reality2byte:main Mar 3, 2026
3 of 12 checks passed
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.

5 participants