Skip to content

chore: update experimental settings to new design#40369

Merged
ameliejyc merged 10 commits intomainfrom
CEUX-914-update-experimental-page
Feb 24, 2026
Merged

chore: update experimental settings to new design#40369
ameliejyc merged 10 commits intomainfrom
CEUX-914-update-experimental-page

Conversation

@ameliejyc
Copy link
Copy Markdown
Contributor

@ameliejyc ameliejyc commented Feb 24, 2026

Description

Updates Settings > Experimental page to bring it inline with Figma redesign (note this doesn't include the header and search bar). React component and js files have been brought up to date. No functional changes.

NOTE: the new SettingsToggleItem component has been extracted out and should be reusable across other Settings pages now.

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Updated Experimental Settings styles and Snaps settings content

Related issues

Fixes: https://consensyssoftware.atlassian.net/browse/CEUX-914

Manual testing steps

  1. Go to Settings > Experimental and verify that content and styles match the figma

Screenshots/Recordings

Before

image

After

image image

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.

Note

Low Risk
Primarily a UI refactor of the Experimental settings page plus minor action signature changes; risk is limited to settings toggle wiring/regressions and snapshot/test updates.

Overview
Updates Settings � Experimental to the new design-system layout by replacing the legacy class-based + Redux connect implementation with a functional component split into reusable toggle rows via a new SettingsToggleItem.

Makes ToggleButton only render on/off labels when both labels are provided (updating snapshots accordingly), converts setWatchEthereumAccountEnabled and setAddSnapAccountEnabled to thunk action creators (with new action tests), adjusts the Experimental tab test to mock actions, and removes unused i18n strings (snapAccounts*) across locales.

Written by Cursor Bugbot for commit 7da4b01. This will update automatically on new commits. Configure here.

@github-actions
Copy link
Copy Markdown
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-core-extension-ux Core Extension UX team label Feb 24, 2026
Comment on lines -76 to -85
<div
class="toggle-button__status"
>
<span
class="toggle-button__label-off"
/>
<span
class="toggle-button__label-on"
/>
</div>
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed redundant toggle labels when they are not provided to ToggleButton

Comment on lines +113 to +118
{showLabels && (
<div className="toggle-button__status">
<span className="toggle-button__label-off">{offLabel}</span>
<span className="toggle-button__label-on">{onLabel}</span>
</div>
)}
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

ToggleButton labels are used optionally. This ensures these empty spans and div don't render when labels are not passed in.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Renamed to experimental-tab.tsx

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

No longer needed, hooks used inside component

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Renamed from experimental-tab.component.ts and brought up to date

@ameliejyc ameliejyc marked this pull request as ready for review February 24, 2026 13:27
@ameliejyc ameliejyc requested review from a team as code owners February 24, 2026 13:27
@MetaMask MetaMask deleted a comment from sonarqubecloud bot Feb 24, 2026
@MetaMask MetaMask deleted a comment from sonarqubecloud bot Feb 24, 2026
@MetaMask MetaMask deleted a comment from metamaskbotv2 bot Feb 24, 2026
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 24, 2026

✨ Files requiring CODEOWNER review ✨

🔑 @MetaMask/accounts-engineers (2 files, +0 -70)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain-accounts/
        • 📁 smart-contract-account-toggle/
          • 📁 __snapshots__/
            • 📄 smart-contract-account-toggle.test.tsx.snap +0 -30
        • 📁 smart-contract-account-toggle-section/
          • 📁 __snapshots__/
            • 📄 smart-contract-account-toggle-section.test.tsx.snap +0 -40

👨‍🔧 @MetaMask/core-extension-ux (1 files, +0 -20)
  • 📁 ui/
    • 📁 components/
      • 📁 multichain/
        • 📁 network-list-menu/
          • 📁 __snapshots__/
            • 📄 network-list-menu.test.tsx.snap +0 -20

<Text variant={TextVariant.BodyMd} fontWeight={FontWeight.Medium}>
{title}
</Text>
<div data-testid={toggleContainerDataTestId}>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Q: why 2 test ids?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

It's for the e2e tests because the checkbox in the togglebutton is inaccessible. The ToggleButton will need a refactor at some point but not this PR.

title: string;
description: React.ReactNode;
toggleValue: boolean;
toggleCallback: (value: boolean) => void;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Thoughts on common prop names like?

  • onToggle
  • value

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Updated

Copy link
Copy Markdown

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

@sonarqubecloud
Copy link
Copy Markdown

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 24, 2026

Builds ready [7da4b01]
⚡ Performance Benchmarks (1450 ± 103 ms)
👆 Interaction Benchmarks
ActionMetricMean (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account28127311317
total28127311317
Confirm Txconfirm_tx6019860236030
total6019860236030
Bridge User Actionsbridge_load_page19310197208
bridge_load_asset_picker15826178182
bridge_search_token71121726744
total10702210581109
🔌 Startup Benchmarks
BuildMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
Chrome Browserify Startup Standard HomeuiStartup14501207172510314981654
load1215101114458912551382
domContentLoaded1207100714288812481373
domInteractive3017145222682
firstPaint203761322196228284
backgroundConnect21318927016217245
firstReactRender19134762132
initialActions104113
loadScripts101380912258710541168
setupStore1363451424
numNetworkReqs312294202284
Chrome Browserify Startup Power User HomeuiStartup2275137310701137521594718
load11961042168213012211537
domContentLoaded11781034165312312021495
domInteractive3522132193681
firstPaint1907744382259324
backgroundConnect60026179039763392551
firstReactRender2516122112735
initialActions105113
loadScripts96583314491239881293
setupStore1654271829
numNetworkReqs68381442479121
Chrome Webpack Startup Standard HomeuiStartup90771911691139911112
load7776361078109876942
domContentLoaded7706321054107867933
domInteractive3016116232596
firstPaint1196540473138241
backgroundConnect291984113352
firstReactRender20138992333
initialActions104112
loadScripts7676301045106864930
setupStore1367071421
numNetworkReqs3122101212592
Chrome Webpack Startup Power User HomeuiStartup1248847311527913251685
load7286231142104740973
domContentLoaded7196171136103725959
domInteractive36181542735115
firstPaint15266967117172356
backgroundConnect1871291034120170328
firstReactRender22173332429
initialActions102011
loadScripts7166151128101723949
setupStore1355171419
numNetworkReqs70381743387144
Firefox Browserify Startup Standard HomeuiStartup15861330246918616351934
load13371126214815713851518
domContentLoaded13361125214715713851518
domInteractive793323641105144
firstPaint------
backgroundConnect5524227275487
firstReactRender13112221315
initialActions102012
loadScripts13111102211115013421466
setupStore187171251557
numNetworkReqs312097202589
Firefox Browserify Startup Power User HomeuiStartup27451948478349629073568
load15571245334235916182241
domContentLoaded15561245334135916172240
domInteractive166341724248142345
firstPaint------
backgroundConnect3531131430302474931
firstReactRender17136251722
initialActions2042622
loadScripts15171215332134515662136
setupStore1577806216143704
numNetworkReqs69291983789148
Firefox Webpack Startup Standard HomeuiStartup16921413324320417321941
load1404118416659914641574
domContentLoaded1404118416659914641573
domInteractive942923254130214
firstPaint------
backgroundConnect8028168916763139
firstReactRender16122931524
initialActions102122
loadScripts1379116116089414441535
setupStore19881161660
numNetworkReqs302095162772
Firefox Webpack Startup Power User HomeuiStartup26561918527554726973708
load15271245429237216572019
domContentLoaded15271245429137216562018
domInteractive12932746131115416
firstPaint------
backgroundConnect3551051561305456898
firstReactRender21147182228
initialActions103122
loadScripts14861224423035916121896
setupStore15410779214125691
numNetworkReqs68271883987150
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2171217218
srpButtonToSrpForm9029092
confirmSrpToPwForm2002020
pwFormToMetricsScreen1401414
metricsToWalletReadyScreen1501515
doneButtonToHomeScreen62171600742
openAccountMenuToAccountListLoaded69368069957019
total79341779547954
Onboarding New WalletcreateWalletToSocialScreen2171218218
srpButtonToPwForm1031103105
createPwToRecoveryScreen8088
skipBackupToMetricsScreen3413535
agreeButtonToOnboardingSuccess1501515
doneButtonToAssetList83331811551281
total121431615351655
Asset DetailsassetClickToPriceChart55238284
total55238284
Solana Asset DetailsassetClickToPriceChart5705858
total5705858
Import Srp HomeloginToHomeScreen194511020002137
openAccountMenuAfterLogin4314345
homeAfterImportWithNewWallet249714226062701
total4499945094509
Send TransactionsopenSendPageFromHome31124348
selectTokenToSendFormLoaded2402424
reviewTransactionToConfirmationPage86410870876
total9367944944
SwapopenSwapPageFromHome1013104104
fetchAndDisplaySwapQuotes561483762666412
total571384063646514
🌐 Dapp Page Load Benchmarks

Current Commit: 7da4b01 | Date: 2/24/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.02s (±35ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 713ms (±34ms) 🟢 | historical mean value: 724ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 75ms (±12ms) 🟢 | historical mean value: 79ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.02s 35ms 1.01s 1.29s 1.03s 1.29s
domContentLoaded 713ms 34ms 693ms 967ms 723ms 967ms
firstPaint 75ms 12ms 60ms 184ms 84ms 184ms
firstContentfulPaint 75ms 12ms 60ms 184ms 84ms 184ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -3.58 KiB (-0.08%)
  • ui: 4.79 KiB (0.06%)
  • common: -42.65 KiB (-0.38%)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Let's use this component moving forwards for any setting item with a toggle @NidhiKJha ?

@ameliejyc ameliejyc enabled auto-merge February 24, 2026 16:28
<Text variant={TextVariant.BodyMd} fontWeight={FontWeight.Medium}>
{title}
</Text>
<div data-testid={containerDataTestId}>
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Let's use Box here?

Copy link
Copy Markdown
Member

@NidhiKJha NidhiKJha left a comment

Choose a reason for hiding this comment

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

Left a small comment. Looks good otherwise

Copy link
Copy Markdown
Contributor

@owencraston owencraston left a comment

Choose a reason for hiding this comment

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

Approving the design/content changes but did not review the code.

@ameliejyc ameliejyc added this pull request to the merge queue Feb 24, 2026
Merged via the queue into main with commit 516e003 Feb 24, 2026
179 checks passed
@ameliejyc ameliejyc deleted the CEUX-914-update-experimental-page branch February 24, 2026 17:23
@github-actions github-actions bot locked and limited conversation to collaborators Feb 24, 2026
@metamaskbot metamaskbot added the release-13.21.0 Issue or pull request that will be included in release 13.21.0 label Feb 24, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

claude-code-assisted release-13.21.0 Issue or pull request that will be included in release 13.21.0 size-L team-core-extension-ux Core Extension UX team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants