Skip to content

Conversation

@georgewrmarshall
Copy link
Contributor

@georgewrmarshall georgewrmarshall commented Aug 29, 2025

Description

This PR adds functional entry points for the Add Wallet modal component from the main account list page. The modal was previously created but not integrated into the user interface. This change provides users with a centralized way to access wallet and account import functionality.

What is the reason for the change?

The Add Wallet modal component existed but was not accessible from the main account list UI, preventing users from easily discovering and using wallet/account import features.

What is the improvement/solution?

  • Integrated the Add Wallet modal into the account list page with a prominent footer button
  • Connected modal options to existing MetaMask routes for wallet import, account import, and hardware wallet connection
  • Added proper state management and user interaction handling
  • Enhanced the modal with routing functionality to navigate to appropriate pages

Changelog

CHANGELOG entry: Added Add Wallet button to account list page that opens modal with import options

Related issues

Fixes: N/A - This is a feature enhancement for existing modal component

Manual testing steps

  1. Go to the account list page (/account-list)
  2. Scroll to the bottom of the page
  3. Click the "Add Wallet" button in the footer
  4. Verify the modal opens with three options:
    • Import a wallet (should navigate to /import-srp)
    • Import an account (should navigate to /add-wallet-page)
    • Add a hardware wallet (should navigate to /new-account/connect)
  5. Test that clicking each option closes the modal and navigates to the correct page
  6. Test that clicking outside the modal or the X button closes it without navigation
  7. Verify keyboard navigation works (Enter/Space on options)

Screenshots/Recordings

Before

  • Add Wallet modal existed but was not accessible from any UI
  • Account list page had no way to access wallet/account import features

After

  • Account list page now has "Add Wallet" button in footer
  • Modal opens with three categorized import options
  • Each option navigates to existing MetaMask import flows
after720.mov

Pre-merge author checklist

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.

@georgewrmarshall georgewrmarshall added the team-accounts-framework Accounts Framework team label Aug 29, 2025
@github-actions
Copy link
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot metamaskbot added the team-design-system All issues relating to design system in Extension label Aug 29, 2025
@georgewrmarshall georgewrmarshall self-assigned this Aug 29, 2025
Comment on lines +3 to +17
// Scroll bar styles
// Firefox
scrollbar-width: thin;
scrollbar-color: var(--color-icon-muted) transparent;

// Webkit: Chrome, Brave
::-webkit-scrollbar {
width: 8px;
}

::-webkit-scrollbar-thumb {
-webkit-border-radius: 8px;
border-radius: 8px;
background: var(--color-icon-muted);
}
Copy link
Contributor Author

@georgewrmarshall georgewrmarshall Aug 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add styles for the scroll bar for the <Content /> component

Before / After

Screenshot 2025-08-29 at 12 23 11 PMScreenshot 2025-08-29 at 12 22 41 PM

Copy link
Contributor

@n3ps n3ps Sep 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@georgewrmarshall thoughts on using only scrollbar-width: none? (it's baseline supported in browsers now)

The home screen (Tokens, NFTs, Activity, etc) don't show a scrollbar anyway already

@metamaskbot
Copy link
Collaborator

metamaskbot commented Aug 29, 2025

✨ Files requiring CODEOWNER review ✨

🔑 @MetaMask/accounts-engineers (4 files, +130 -20)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain-accounts/
        • 📁 add-wallet-modal/
          • 📄 add-wallet-modal.test.tsx +50 -1
          • 📄 add-wallet-modal.tsx +29 -4
    • 📁 pages/
      • 📁 multichain-accounts/
        • 📁 account-list/
          • 📄 account-list.test.tsx +17 -7
          • 📄 account-list.tsx +34 -8

🖥️ @MetaMask/wallet-ux (1 files, +15 -0)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain/
        • 📁 pages/
          • 📁 page/
            • 📁 components/
              • 📁 content/
                • 📄 index.scss +15 -0

</Box>
<Box paddingLeft={4} paddingRight={4} paddingBottom={4}></Box>
</Content>
<Footer className="shadow-sm">
Copy link
Contributor Author

@georgewrmarshall georgewrmarshall Aug 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using Footer component to fix the Add Wallet button as per Figma design. Disregard button style it's incorrect in Figma.

Screenshot 2025-08-29 at 12 34 48 PMScreenshot 2025-08-29 at 12 35 53 PM

IconName,
} from '../../../components/component-library';
Text,
} from '@metamask/design-system-react';
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updating account list to use latest design system components

Comment on lines 39 to 42
const [isAddWalletModalOpen, setIsAddWalletModalOpen] = useState(false);

const handleOpenAddWalletModal = () => {
setIsAddWalletModalOpen(true);
};

const handleCloseAddWalletModal = () => {
setIsAddWalletModalOpen(false);
};
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding open and close add wallet modal logic

@metamaskbot
Copy link
Collaborator

📊 Page Load Benchmark Results

Current Commit: f0ad052 | Date: 8/29/2025

📄 https://metamask.github.io/test-dapp/

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.28s (±74ms) 🟡 | historical mean value: 1.30s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 969ms (±67ms) 🟢 | historical mean value: 982ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 87ms (±21ms) 🟢 | historical mean value: 91ms ⬇️ (historical data)
📈 Detailed Results
Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.28s 74ms 1.24s 1.96s 1.35s 1.96s
domContentLoaded 969ms 67ms 935ms 1.59s 1.02s 1.59s
firstPaint 87ms 21ms 68ms 216ms 132ms 216ms
firstContentfulPaint 87ms 21ms 68ms 216ms 132ms 216ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms

Results generated automatically by MetaMask CI

@github-actions github-actions bot added size-M and removed size-S labels Aug 29, 2025
@metamaskbot
Copy link
Collaborator

📊 Page Load Benchmark Results

Current Commit: f881775 | Date: 8/29/2025

📄 https://metamask.github.io/test-dapp/

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.30s (±48ms) 🟡 | historical mean value: 1.30s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 985ms (±46ms) 🟢 | historical mean value: 982ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 86ms (±13ms) 🟢 | historical mean value: 91ms ⬇️ (historical data)
📈 Detailed Results
Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.30s 48ms 1.27s 1.74s 1.35s 1.74s
domContentLoaded 985ms 46ms 954ms 1.40s 1.03s 1.40s
firstPaint 86ms 13ms 72ms 160ms 116ms 160ms
firstContentfulPaint 86ms 13ms 72ms 160ms 116ms 160ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms

Results generated automatically by MetaMask CI

@metamaskbot
Copy link
Collaborator

Builds ready [00a5bbf]
UI Startup Metrics (1227 ± 131 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup12271090233513112511320
load1068944218312910961161
domContentLoaded1061939217712910901154
domInteractive17134261734
firstPaint65274219245810641138
backgroundConnect2392232839242258
firstReactRender24164962640
getState1354271628
initialActions61456716
loadScripts8297071945128858917
setupStore953141017
WebpackHomeuiStartup20311475258123321712424
load16361193197517017251870
domContentLoaded16271183196717017161860
domInteractive1711116161455
firstPaint1695948371192281
backgroundConnect281775102952
firstReactRender83363305983280
getState3543107713274
initialActions8227427715
loadScripts16241180195616917141849
setupStore1263151323
FirefoxBrowserifyHomeuiStartup14491221193213015141770
load1253106615638913171429
domContentLoaded1253106615638913161428
domInteractive1143538652127238
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect41202933638111
firstReactRender28246063137
getState63376614
initialActions5119119311
loadScripts1223104714357912841377
setupStore13518022853
WebpackHomeuiStartup15901377194213816891851
load13561165165511914501559
domContentLoaded13561164165511914501558
domInteractive1093530256106289
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect31207083645
firstReactRender43326954652
getState63173713
initialActions319135
loadScripts13341146162911914321538
setupStore12612918919
Benchmark value 240 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender
Benchmark value 6 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 258 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 16 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 35 exceeds gate value 29 for chrome webpack home mean getState
Benchmark value 9 exceeds gate value 7 for chrome webpack home mean initialActions
Benchmark value 274 exceeds gate value 195 for chrome webpack home p95 getState
Benchmark value 15 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 1450 exceeds gate value 1405 for firefox browserify home mean uiStartup
Benchmark value 1254 exceeds gate value 1245 for firefox browserify home mean load
Benchmark value 1253 exceeds gate value 1239 for firefox browserify home mean domContentLoaded
Benchmark value 114 exceeds gate value 110 for firefox browserify home mean domInteractive
Benchmark value 42 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 29 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 13 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 1770 exceeds gate value 1660 for firefox browserify home p95 uiStartup
Benchmark value 238 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 111 exceeds gate value 70 for firefox browserify home p95 backgroundConnect
Benchmark value 11 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 53 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 110 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 31 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 44 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 3 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 289 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 52 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 5 exceeds gate value 2 for firefox webpack home p95 initialActions
Sum of mean exceeds: 370ms | Sum of p95 exceeds: 708.8ms
Sum of all benchmark exceeds: 1078.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 43 Bytes (0%)
  • ui: 16 KiB (0.21%)
  • common: 137 Bytes (0%)

github-merge-queue bot pushed a commit that referenced this pull request Sep 2, 2025
…35543)

## **Description**

This PR introduces a new dedicated add wallet page (`/add-wallet-page`)
for importing private keys and JSON wallets. This addresses the issue
where the previous import wallet functionality was not conditionally
rendered and had no proper route structure.

**Key Changes:**
- Creates a new `AddWalletPage` component that wraps the existing
`ImportAccount` component
- Adds proper routing configuration with `ADD_WALLET_PAGE_ROUTE =
'/add-wallet-page'`
- Provides a clean navigation experience with back button functionality
- Includes comprehensive test coverage for the new page

**Future Scope:**
This page will eventually handle both SRP and private key account
imports, but for now it focuses on private key import functionality
only.

[![Open in GitHub
Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/MetaMask/metamask-extension/pull/35543?quickstart=1)

## **Changelog**

CHANGELOG entry: Added dedicated add wallet page for private key import
with proper routing

## **Related issues**

Related to: #35536

## **Manual testing steps**

1. Run storybook `yarn storybook` or view [storybook PR
build](https://diuv6g5fj9pvx.cloudfront.net/metamask-extension/17388655285/storybook-build/index.html?path=/story/pages-multichainaccounts-addwalletpage--default)
2. Navigate to the Add wallet page
3. Ensure UI renders as expected

## **Screenshots/Recordings**

### **Before**
- No add wallet page existed, only the import account modal

### **After**
- New Add wallet page in storybook


https://github.com/user-attachments/assets/244bbce6-e6fc-48fa-962f-e7d017b6bfd6

## **Pre-merge author checklist**

- [x] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask
Extension Coding
Standards](https://github.com/MetaMask/metamask-extension/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-extension/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.
@georgewrmarshall georgewrmarshall force-pushed the multichain-add-wallet-modal-entry branch from 00a5bbf to 4d3be49 Compare September 2, 2025 16:59
@georgewrmarshall georgewrmarshall marked this pull request as ready for review September 2, 2025 17:03
@georgewrmarshall georgewrmarshall requested review from a team as code owners September 2, 2025 17:03
cursor[bot]

This comment was marked as outdated.

id: 'import-wallet',
titleKey: 'importAWallet',
iconName: IconName.Wallet,
route: IMPORT_SRP_ROUTE,
Copy link
Contributor Author

@georgewrmarshall georgewrmarshall Sep 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TODO: currently the import srp page navigates back to the home page which is annoying if the user wanted to go back to the add wallet modal or account menu page. I'm not sure of the implications of changing history.push(DEFAULT_ROUTE); to history.push(); in the ImportSrp page is but it likely should be in a separate PR and should not block this one.

Comment on lines +4 to +8
import {
ADD_WALLET_PAGE_ROUTE,
CONNECT_HARDWARE_ROUTE,
IMPORT_SRP_ROUTE,
} from '../../../helpers/constants/routes';
Copy link
Contributor Author

@georgewrmarshall georgewrmarshall Sep 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

importing routes used in the the add wallet modal

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR integrates the existing Add Wallet modal component into the account list page by adding a footer button that opens the modal with routing functionality. The modal now provides navigation to existing MetaMask import flows for wallets, accounts, and hardware wallets.

Key changes:

  • Added Add Wallet button to account list page footer with modal state management
  • Connected modal options to appropriate MetaMask routes with navigation logic
  • Enhanced modal component with routing functionality and proper hardware wallet handling

Reviewed Changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
account-list.tsx Added Add Wallet button in footer and modal integration with state management
account-list.test.tsx Added test coverage for Add Wallet button functionality and modal opening
index.scss Added custom scrollbar styling for multichain page content
add-wallet-modal.tsx Enhanced modal with routing functionality and hardware wallet navigation logic
add-wallet-modal.test.tsx Added comprehensive test coverage for modal navigation to different routes

Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.

Comment on lines +11 to +19
const mockHistoryPush = jest.fn();
const mockOpenExtensionInBrowser = jest.fn();

jest.mock('react-router-dom', () => ({
...jest.requireActual('react-router-dom'),
useHistory: () => ({
push: mockHistoryPush,
}),
}));
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mocking react router dom useHistory and opening the extension in browser for back button and import hardware wallet which doesn't have a popup view

@metamaskbot
Copy link
Collaborator

Builds ready [b86ab27]
UI Startup Metrics (1205 ± 53 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1205110714985312301294
load104490312805110711125
domContentLoaded103589612725310641118
domInteractive17135561630
firstPaint67388127641610591097
backgroundConnect24422934813248260
firstReactRender2516113132343
getState1454881632
initialActions40183612
loadScripts799662102651827879
setupStore1053751015
WebpackHomeuiStartup19361464250626720872442
load15531178195920416931866
domContentLoaded15451173195020316851857
domInteractive1711108171365
firstPaint1656152868191293
backgroundConnect281792103148
firstReactRender81373315780263
getState3242967114271
initialActions5219369
loadScripts15411171193820216821845
setupStore236298551427
FirefoxBrowserifyHomeuiStartup13971179178511014701574
load1212103314127912741343
domContentLoaded1212103314127912731343
domInteractive1023527847110206
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3320129163574
firstReactRender27224442937
getState73538724
initialActions30122310
loadScripts1187101213847612521311
setupStore1045710830
WebpackHomeuiStartup16021397209214216981874
load13681183171312214671579
domContentLoaded13671182171312214671578
domInteractive1093830948110249
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3121103103544
firstReactRender44356664755
getState8313814712
initialActions5110914311
loadScripts13441164169112214461557
setupStore96405918
Benchmark value 245 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender
Benchmark value 5 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 260 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 12 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 33 exceeds gate value 29 for chrome webpack home mean getState
Benchmark value 65 exceeds gate value 57 for chrome webpack home p95 domInteractive
Benchmark value 271 exceeds gate value 195 for chrome webpack home p95 getState
Benchmark value 9 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 33 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 28 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 4 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 10 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 206 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 74 exceeds gate value 70 for firefox browserify home p95 backgroundConnect
Benchmark value 10 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 30 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 109 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 32 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 45 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 6 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 249 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 55 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 11 exceeds gate value 2 for firefox webpack home p95 initialActions
Sum of mean exceeds: 287ms | Sum of p95 exceeds: 471.8ms
Sum of all benchmark exceeds: 758.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 55 Bytes (0%)
  • ui: 4.36 KiB (0.06%)
  • common: 10 Bytes (0%)

@metamaskbot
Copy link
Collaborator

📊 Page Load Benchmark Results

Current Commit: 353404d | Date: 9/2/2025

📄 https://metamask.github.io/test-dapp/

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.28s (±96ms) 🟡 | historical mean value: 1.30s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 969ms (±86ms) 🟢 | historical mean value: 979ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 86ms (±31ms) 🟢 | historical mean value: 93ms ⬇️ (historical data)
📈 Detailed Results
Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.28s 96ms 1.25s 2.00s 1.34s 2.00s
domContentLoaded 969ms 86ms 936ms 1.57s 1.02s 1.57s
firstPaint 86ms 31ms 68ms 320ms 116ms 320ms
firstContentfulPaint 86ms 31ms 68ms 320ms 116ms 320ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms

Results generated automatically by MetaMask CI

Comment on lines -66 to -72
localeMessages: {
currentLocale: 'en',
current: {
back: 'Back',
accounts: 'Accounts',
},
},
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removing unneeded mocked locales

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🪓

@metamaskbot
Copy link
Collaborator

Builds ready [539d60b]
UI Startup Metrics (1260 ± 57 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1260113614395712971345
load109096712525311241176
domContentLoaded108296412435311181167
domInteractive18143951832
firstPaint678137124744011021167
backgroundConnect2502332809255268
firstReactRender25164672739
getState1458691726
initialActions51455513
loadScripts839733100352871927
setupStore1062131116
WebpackHomeuiStartup20771529261127122542569
load16711228202120817961959
domContentLoaded16621221199920717861949
domInteractive171285131453
firstPaint1756535255215277
backgroundConnect3315300293256
firstReactRender89373255588274
getState3052906814281
initialActions52213610
loadScripts16581218198920517831937
setupStore1362851425
FirefoxBrowserifyHomeuiStartup14041192181311114631598
load1224104515619012771401
domContentLoaded1224104515619012761401
domInteractive1063330152115227
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3120108123446
firstReactRender27235552937
getState63425613
initialActions501311438
loadScripts1200102815418912481383
setupStore84325818
WebpackHomeuiStartup16061383209214817141877
load13691161181413414711614
domContentLoaded13691161181313414711614
domInteractive1064128852103265
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3419110123947
firstReactRender45386744751
getState72223713
initialActions4158647
loadScripts13441141178513414491594
setupStore953341019
Benchmark value 1261 exceeds gate value 1234 for chrome browserify home mean uiStartup
Benchmark value 1090 exceeds gate value 1070 for chrome browserify home mean load
Benchmark value 1082 exceeds gate value 1061 for chrome browserify home mean domContentLoaded
Benchmark value 251 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 26 exceeds gate value 23 for chrome browserify home mean firstReactRender
Benchmark value 5 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 839 exceeds gate value 830 for chrome browserify home mean loadScripts
Benchmark value 268 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 13 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 31 exceeds gate value 29 for chrome webpack home mean getState
Benchmark value 2569 exceeds gate value 2454 for chrome webpack home p95 uiStartup
Benchmark value 281 exceeds gate value 195 for chrome webpack home p95 getState
Benchmark value 10 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 32 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 28 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 5 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 227 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 8 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 107 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 34 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 45 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 4 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 265 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 51 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 7 exceeds gate value 2 for firefox webpack home p95 initialActions
Sum of mean exceeds: 366ms | Sum of p95 exceeds: 618.8ms
Sum of all benchmark exceeds: 984.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 76 Bytes (0%)
  • ui: 4.57 KiB (0.06%)
  • common: 10 Bytes (0%)

@georgewrmarshall georgewrmarshall force-pushed the multichain-add-wallet-modal-entry branch from 539d60b to 1be1132 Compare September 2, 2025 22:16
@metamaskbot
Copy link
Collaborator

📊 Page Load Benchmark Results

Current Commit: 99e4714 | Date: 9/2/2025

📄 https://metamask.github.io/test-dapp/

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.28s (±32ms) 🟡 | historical mean value: 1.30s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 962ms (±21ms) 🟢 | historical mean value: 979ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 88ms (±23ms) 🟢 | historical mean value: 93ms ⬇️ (historical data)
📈 Detailed Results
Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.28s 32ms 1.24s 1.50s 1.33s 1.50s
domContentLoaded 962ms 21ms 936ms 1.05s 1.01s 1.05s
firstPaint 88ms 23ms 68ms 240ms 140ms 240ms
firstContentfulPaint 88ms 23ms 68ms 240ms 140ms 240ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms

Results generated automatically by MetaMask CI

@metamaskbot
Copy link
Collaborator

Builds ready [1be1132]
UI Startup Metrics (1273 ± 67 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyHomeuiStartup1273114314576713301366
load110799912726211641203
domContentLoaded109999312626211571186
domInteractive18145151826
firstPaint80985127543311561191
backgroundConnect2582413189260274
firstReactRender24165372643
getState165107121840
initialActions70569734
loadScripts849733100562907934
setupStore1163861222
WebpackHomeuiStartup19481484259227921172434
load15601190199721017041857
domContentLoaded15511181198320916991842
domInteractive1711102131444
firstPaint1646036364192323
backgroundConnect3114323313051
firstReactRender79373305080265
getState3343057514285
initialActions5216268
loadScripts15481178197220816961831
setupStore1262741322
FirefoxBrowserifyHomeuiStartup13591162171511814221616
load1177102315099112381340
domContentLoaded1177102315099112381340
domInteractive1043129153113227
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect3118125173462
firstReactRender27225652838
getState8311613625
initialActions5015617315
loadScripts1153100414868812121289
setupStore1045710836
WebpackHomeuiStartup15981375203915717101875
load13621158167414014821637
domContentLoaded13621158167314014821636
domInteractive105323065997284
firstPaintNaNNaNNaNNaNNaNNaN
backgroundConnect33227383746
firstReactRender45355654853
getState63454710
initialActions3117249
loadScripts13381133165014114621614
setupStore125124181033
Benchmark value 1274 exceeds gate value 1234 for chrome browserify home mean uiStartup
Benchmark value 1108 exceeds gate value 1070 for chrome browserify home mean load
Benchmark value 1099 exceeds gate value 1061 for chrome browserify home mean domContentLoaded
Benchmark value 809 exceeds gate value 800 for chrome browserify home mean firstPaint
Benchmark value 259 exceeds gate value 10 for chrome browserify home mean backgroundConnect
Benchmark value 25 exceeds gate value 23 for chrome browserify home mean firstReactRender
Benchmark value 16 exceeds gate value 15 for chrome browserify home mean getState
Benchmark value 7 exceeds gate value 1 for chrome browserify home mean initialActions
Benchmark value 850 exceeds gate value 830 for chrome browserify home mean loadScripts
Benchmark value 1367 exceeds gate value 1365 for chrome browserify home p95 uiStartup
Benchmark value 1204 exceeds gate value 1190 for chrome browserify home p95 load
Benchmark value 1187 exceeds gate value 1180 for chrome browserify home p95 domContentLoaded
Benchmark value 1192 exceeds gate value 1180 for chrome browserify home p95 firstPaint
Benchmark value 274 exceeds gate value 18 for chrome browserify home p95 backgroundConnect
Benchmark value 40 exceeds gate value 33 for chrome browserify home p95 getState
Benchmark value 34 exceeds gate value 1.2 for chrome browserify home p95 initialActions
Benchmark value 22 exceeds gate value 17 for chrome browserify home p95 setupStore
Benchmark value 34 exceeds gate value 29 for chrome webpack home mean getState
Benchmark value 285 exceeds gate value 195 for chrome webpack home p95 getState
Benchmark value 8 exceeds gate value 7 for chrome webpack home p95 initialActions
Benchmark value 32 exceeds gate value 25 for firefox browserify home mean backgroundConnect
Benchmark value 27 exceeds gate value 25 for firefox browserify home mean firstReactRender
Benchmark value 6 exceeds gate value 1 for firefox browserify home mean initialActions
Benchmark value 10 exceeds gate value 9 for firefox browserify home mean setupStore
Benchmark value 227 exceeds gate value 195 for firefox browserify home p95 domInteractive
Benchmark value 25 exceeds gate value 24 for firefox browserify home p95 getState
Benchmark value 15 exceeds gate value 2 for firefox browserify home p95 initialActions
Benchmark value 36 exceeds gate value 27 for firefox browserify home p95 setupStore
Benchmark value 105 exceeds gate value 100 for firefox webpack home mean domInteractive
Benchmark value 34 exceeds gate value 26 for firefox webpack home mean backgroundConnect
Benchmark value 45 exceeds gate value 38 for firefox webpack home mean firstReactRender
Benchmark value 4 exceeds gate value 1 for firefox webpack home mean initialActions
Benchmark value 284 exceeds gate value 156 for firefox webpack home p95 domInteractive
Benchmark value 53 exceeds gate value 50 for firefox webpack home p95 firstReactRender
Benchmark value 9 exceeds gate value 2 for firefox webpack home p95 initialActions
Benchmark value 33 exceeds gate value 28 for firefox webpack home p95 setupStore
Sum of mean exceeds: 446ms | Sum of p95 exceeds: 624.8ms
Sum of all benchmark exceeds: 1070.8ms

Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 43 Bytes (0%)
  • ui: 4.36 KiB (0.06%)
  • common: 10 Bytes (0%)

Comment on lines +3 to +17
// Scroll bar styles
// Firefox
scrollbar-width: thin;
scrollbar-color: var(--color-icon-muted) transparent;

// Webkit: Chrome, Brave
::-webkit-scrollbar {
width: 8px;
}

::-webkit-scrollbar-thumb {
-webkit-border-radius: 8px;
border-radius: 8px;
background: var(--color-icon-muted);
}
Copy link
Contributor

@n3ps n3ps Sep 2, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@georgewrmarshall thoughts on using only scrollbar-width: none? (it's baseline supported in browsers now)

The home screen (Tokens, NFTs, Activity, etc) don't show a scrollbar anyway already

Comment on lines -66 to -72
localeMessages: {
currentLocale: 'en',
current: {
back: 'Back',
accounts: 'Accounts',
},
},
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🪓

@georgewrmarshall georgewrmarshall added this pull request to the merge queue Sep 2, 2025
Merged via the queue into main with commit 712e03d Sep 2, 2025
145 checks passed
@georgewrmarshall georgewrmarshall deleted the multichain-add-wallet-modal-entry branch September 2, 2025 23:33
@github-actions github-actions bot locked and limited conversation to collaborators Sep 2, 2025
@metamaskbot metamaskbot added the release-13.4.0 Issue or pull request that will be included in release 13.4.0 label Sep 2, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.4.0 Issue or pull request that will be included in release 13.4.0 size-M team-accounts-framework Accounts Framework team team-design-system All issues relating to design system in Extension

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants