Skip to content

refactor: Merge perps home to tab#40610

Merged
aganglada merged 37 commits intomainfrom
feat/tat-2582-merge-perps-home-to-tab
Mar 6, 2026
Merged

refactor: Merge perps home to tab#40610
aganglada merged 37 commits intomainfrom
feat/tat-2582-merge-perps-home-to-tab

Conversation

@gambinish
Copy link
Copy Markdown
Member

@gambinish gambinish commented Mar 4, 2026

Description

Eliminates the standalone Perps Home page and consolidates all its content into the Perps tab on the main account overview. Users no longer navigate to a separate /perps/home route — everything lives in one place.

Also adds modals for managing positions/closing a position, as well as other design adjustments from figma.

Open in GitHub Codespaces

Changelog

CHANGELOG entry: Merge Perps Home UI into Perps Tab

Related issues

Fixes:

Manual testing steps

  1. Go to this page...

Screenshots/Recordings

Screen.Recording.2026-03-04.at.9.16.09.PM.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.

Note

Medium Risk
Moderate UI refactor that changes primary navigation and state wiring for Perps, plus new close/reverse position flows that call the Perps controller and could impact trading actions if miswired.

Overview
Consolidates the former standalone Perps Home experience into the wallet’s Perps tab (PerpsTabView), replacing the old control bar with a new PerpsBalanceDropdown, restructuring positions/orders rendering, and adding new sections like Explore markets, Watchlist (stubbed), Support & Learn, and always-on Recent Activity + tutorial modal.

Adds new position-management modals (ClosePositionModal, ReversePositionModal) and refactors margin editing into reusable modal content (EditMarginModalContent) with a dedicated EditMarginModal; introduces a fixed market-order fee constant for fee estimates.

Updates order entry UI to include an inline Add funds affordance, hardens TP/SL input parsing, and fixes a candlestick chart crosshair update loop. E2E navigation and selectors are updated for the tab-based flow (tests currently skipped), i18n strings are refreshed (new Perps labels in en/en_GB, old explore/order/positions keys removed across locales), and Jest baselines are adjusted for new component tests.

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

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 4, 2026

✨ Files requiring CODEOWNER review ✨

👨‍🔧 @MetaMask/perps (13 files, +964 -402)
  • 📁 test/
    • 📁 e2e/
      • 📁 page-objects/
        • 📁 pages/
          • 📁 perps/
            • 📄 perps-home-page.ts +34 -28
      • 📁 tests/
        • 📁 perps/
          • 📄 helpers.ts +0 -1
          • 📄 perps-home.spec.ts +14 -7
  • 📁 ui/
    • 📁 components/
      • 📁 app/
        • 📁 perps/
          • 📁 close-position/
            • 📄 close-position-modal.tsx +309 -0
            • 📄 index.ts +2 -0
          • 📁 edit-margin/
            • 📄 edit-margin-expandable.tsx +41 -360
            • 📄 edit-margin-modal-content.tsx +388 -0
            • 📄 edit-margin-modal.tsx +98 -0
            • 📄 index.ts +4 -0
          • 📁 order-entry/
            • 📁 components/
              • 📁 amount-input/
                • 📄 amount-input.tsx +27 -3
            • 📄 constants.ts +7 -0
            • 📄 index.ts +34 -3
            • 📄 mocks.ts +6 -0

🧪 @MetaMask/qa (1 files, +34 -28)
  • 📁 test/
    • 📁 e2e/
      • 📁 page-objects/
        • 📁 pages/
          • 📁 perps/
            • 📄 perps-home-page.ts +34 -28

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 4, 2026

Builds ready [9cf1eb8]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2712592829277282
total2712592829277282
Confirm Txconfirm_tx6025600860441360346044
total6025600860441360346044
Bridge User Actionsbridge_load_page22919725320241253
bridge_load_asset_picker17913224844204248
bridge_search_token72369676128753761
total1131106912247112101224
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup13651137167410914111561
load1148928141010311821335
domContentLoaded1141923140510011761320
domInteractive2716104202379
firstPaint185611365167202328
backgroundConnect20118124214206230
firstReactRender19124352028
initialActions109113
loadScripts9577511220989911135
setupStore1374351421
numNetworkReqs3122100212290
Power User HomeuiStartup17371407248615817842022
load11801050193516011681582
domContentLoaded11651044188915211551532
domInteractive3719175243697
firstPaint1697940675231292
backgroundConnect30627038422316351
firstReactRender24155582639
initialActions108113
loadScripts94182416601479291293
setupStore1674371833
numNetworkReqs57351462454112
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202182222222222
srpButtonToSrpForm9791104498104
confirmSrpToPwForm22212302323
pwFormToMetricsScreen16151601616
metricsToWalletReadyScreen16151711617
doneButtonToHomeScreen63159468939643689
openAccountMenuToAccountListLoaded291429122918329182918
total3935388339954439683995
Onboarding New WalletcreateWalletToSocialScreen23121925113242251
srpButtonToPwForm1101051185110118
createPwToRecoveryScreen999099
skipBackupToMetricsScreen38354124041
agreeButtonToOnboardingSuccess16161701717
doneButtonToAssetList54949260751591607
total9689091006399991006
Asset DetailsassetClickToPriceChart46435454454
total46435454454
Solana Asset DetailsassetClickToPriceChart86681001294100
total86681001294100
Import Srp HomeloginToHomeScreen1997189521097720142109
openAccountMenuAfterLogin554367106367
homeAfterImportWithNewWallet29122707326320930413263
total48754718506913449245069
Send TransactionsopenSendPageFromHome28262922929
selectTokenToSendFormLoaded23173362733
reviewTransactionToConfirmationPage8468458470846847
total8968899015900901
SwapopenSwapPageFromHome35353503535
fetchAndDisplaySwapQuotes289428922895128952895
total292829272930129302930
🌐 Dapp Page Load Benchmarks

Current Commit: 9cf1eb8 | Date: 3/4/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.05s (±44ms) 🟡 | historical mean value: 1.05s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 745ms (±63ms) 🟢 | historical mean value: 740ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 95ms (±130ms) 🟢 | historical mean value: 82ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.05s 44ms 1.02s 1.39s 1.09s 1.39s
domContentLoaded 745ms 63ms 711ms 1.31s 771ms 1.31s
firstPaint 95ms 130ms 68ms 1.38s 96ms 1.38s
firstContentfulPaint 95ms 130ms 68ms 1.38s 96ms 1.38s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: -24.77 KiB (-0.46%)
  • ui: -19.84 KiB (-0.24%)
  • common: -1.06 KiB (-0.01%)

@gambinish gambinish changed the title Feat/tat 2582 merge perps home to tab refactor: Merge perps home to tab Mar 4, 2026
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 4, 2026

Builds ready [6c75538]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account29227131318306313
total29227131318306313
Confirm Txconfirm_tx6083603161253761226125
total6083603161253761226125
Bridge User Actionsbridge_load_page24722029628257296
bridge_load_asset_picker21617925428236254
bridge_search_token74970379738771797
total1212110412826212451282
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14121179175911214691610
load1187987147410112361378
domContentLoaded1181984146710112321364
domInteractive2817103182476
firstPaint153711147118203269
backgroundConnect21219025712217231
firstReactRender19124352029
initialActions106124
loadScripts98478812639810351167
setupStore1262441420
numNetworkReqs322289192581
Power User HomeuiStartup2775141010269187633297444
load12321070214116212731513
domContentLoaded12161058213016012511478
domInteractive3621155233593
firstPaint197861226144262339
backgroundConnect10642668459166111284186
firstReactRender25166682744
initialActions1010113
loadScripts998853183315010271253
setupStore197177191740
numNetworkReqs76411512387118
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2192172232220223
srpButtonToSrpForm95959609696
confirmSrpToPwForm22212202222
pwFormToMetricsScreen16151601616
metricsToWalletReadyScreen17161911819
doneButtonToHomeScreen64359673051672730
openAccountMenuToAccountListLoaded2945293229641329642964
total3961381240959940434095
Onboarding New WalletcreateWalletToSocialScreen2202182221220222
srpButtonToPwForm1121111131113113
createPwToRecoveryScreen989099
skipBackupToMetricsScreen37353913839
agreeButtonToOnboardingSuccess17161711717
doneButtonToAssetList56550861147604611
total96189310125210031012
Asset DetailsassetClickToPriceChart13310616119142161
total13310616119142161
Solana Asset DetailsassetClickToPriceChart986811718111117
total986811718111117
Import Srp HomeloginToHomeScreen2111203021986421562198
openAccountMenuAfterLogin34303833438
homeAfterImportWithNewWallet26272420288217627782882
total47754550513020748585130
Send TransactionsopenSendPageFromHome24212622526
selectTokenToSendFormLoaded20192212022
reviewTransactionToConfirmationPage86584789419871894
total90988993920916939
SwapopenSwapPageFromHome40384114141
fetchAndDisplaySwapQuotes269226882698426932698
total273327242738527362738
🌐 Dapp Page Load Benchmarks

Current Commit: 6c75538 | Date: 3/4/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.07s (±136ms) 🟡 | historical mean value: 1.06s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 756ms (±159ms) 🟢 | historical mean value: 745ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 105ms (±230ms) 🟢 | historical mean value: 83ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.07s 136ms 1.03s 2.39s 1.08s 2.39s
domContentLoaded 756ms 159ms 717ms 2.32s 761ms 2.32s
firstPaint 105ms 230ms 60ms 2.39s 92ms 2.39s
firstContentfulPaint 105ms 230ms 60ms 2.39s 92ms 2.39s
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: -97.29 KiB (-1.81%)
  • ui: -36.65 KiB (-0.44%)
  • common: 90.49 KiB (0.81%)

@github-project-automation github-project-automation bot moved this to Needs dev review in PR review queue Mar 5, 2026
…taMask/metamask-extension into feat/tat-2582-merge-perps-home-to-tab
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.

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

const estimatedFees = useMemo(
() => closeSize * currentPrice * PERPS_MARKET_ORDER_FEE_RATE,
[closeSize, currentPrice],
);
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Close position modal missing getPerpsController in useCallback deps

Low Severity

The estimatedFees useMemo depends on closeSize and currentPrice but the dependency array omits PERPS_MARKET_ORDER_FEE_RATE. While this is a constant and won't change at runtime, more importantly the handleClose callback's dependency array (lines 134–141) is missing getPerpsController — though since it's a module-level import this is safe. However, the callback is also missing getPerpsStreamManager if it were used, and doesn't guard against unmount during the async operation (no cleanup/cancelled flag pattern).

Fix in Cursor Fix in Web

Triggered by project rule: Front-End Performance Rules: Hooks & Effects


const result = await controller.closePosition(params);
if (!result.success) {
throw new Error(result.error || 'Failed to close position');
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.

i18n?

onClose();
} catch (err) {
setError(
err instanceof Error ? err.message : 'An unknown error occurred',
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.

i18n

<Modal
isOpen={isOpen}
onClose={onClose}
data-testid="perps-close-position-modal"
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.

do we cnetralize test-ids in extension?


// Track created price line objects for cleanup
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const activePriceLinesRef = useRef<any[]>([]);
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.

any chance we can avoid the any?

* Used to estimate fees in close/reverse position flows.
* TODO: Replace with dynamic fee from the API when available.
*/
export const PERPS_MARKET_ORDER_FEE_RATE = 0.0001;
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.

this might be a blocker...

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

I think this comes directly from the controller right? So we should be able to add this in the integration branch (this is still mocekd UI)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

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

But, good call out

Copy link
Copy Markdown
Contributor

@abretonc7s abretonc7s left a comment

Choose a reason for hiding this comment

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

approving but with a few comments we will need to address

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Mar 6, 2026

Builds ready [0461897]
⚡ Performance Benchmarks
👆 Interaction Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Load New Accountload_new_account2672602736272273
total2672602736272273
Confirm Txconfirm_tx6050600860893160816089
total6050600860893160816089
Bridge User Actionsbridge_load_page23419428737270287
bridge_load_asset_picker19415525135215251
bridge_search_token72470575322749753
total1152107712917911811291
🔌 Startup Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Standard HomeuiStartup14561207182912315111681
load1221997158310912641407
domContentLoaded1213992152710612601395
domInteractive291891182678
firstPaint1476945275201249
backgroundConnect22119933620225252
firstReactRender2113109112137
initialActions1011123
loadScripts1010797132210310511190
setupStore147111121626
numNetworkReqs322287193180
Power User HomeuiStartup19281619226312419922160
load1133995171114811281545
domContentLoaded1116985168514611071530
domInteractive3318115173472
firstPaint207711696189234303
backgroundConnect30225244628316346
firstReactRender24155782543
initialActions106113
loadScripts90478014491398951296
setupStore1473961624
numNetworkReqs69361884655171
🧭 User Journey Benchmarks
BenchmarkMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P75 (ms)P95 (ms)
Onboarding Import WalletimportWalletToSocialScreen2202172232221223
srpButtonToSrpForm96969709697
confirmSrpToPwForm22222312223
pwFormToMetricsScreen16151601616
metricsToWalletReadyScreen18171911919
doneButtonToHomeScreen67059379075725790
openAccountMenuToAccountListLoaded292129102932929322932
total3954391740174440174017
Onboarding New WalletcreateWalletToSocialScreen2202172232221223
srpButtonToPwForm1101091111110111
createPwToRecoveryScreen989099
skipBackupToMetricsScreen37363813838
agreeButtonToOnboardingSuccess17171701717
doneButtonToAssetList5965846079607607
total9919889964996996
Asset DetailsassetClickToPriceChart1259914517135145
total1259914517135145
Solana Asset DetailsassetClickToPriceChart86799679196
total86799679196
Import Srp HomeloginToHomeScreen2052197921326120922132
openAccountMenuAfterLogin45444824848
homeAfterImportWithNewWallet25532427268510726512685
total4676463847122646784712
Send TransactionsopenSendPageFromHome26203453134
selectTokenToSendFormLoaded22183261932
reviewTransactionToConfirmationPage8518468679847867
total91189295325905953
SwapopenSwapPageFromHome44405044450
fetchAndDisplaySwapQuotes268626842692326862692
total2743272427741927522774
🌐 Dapp Page Load Benchmarks

Current Commit: 0461897 | Date: 3/6/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±41ms) 🟡 | historical mean value: 1.05s ⬇️ (historical data)
  • domContentLoaded-> current mean value: 734ms (±38ms) 🟢 | historical mean value: 734ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 81ms (±13ms) 🟢 | historical mean value: 83ms ⬇️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 41ms 1.02s 1.35s 1.08s 1.35s
domContentLoaded 734ms 38ms 712ms 1.01s 771ms 1.01s
firstPaint 81ms 13ms 64ms 196ms 88ms 196ms
firstContentfulPaint 81ms 13ms 64ms 196ms 88ms 196ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 10 KiB (0.12%)
  • common: 896 Bytes (0.01%)

Copy link
Copy Markdown
Contributor

@geositta geositta left a comment

Choose a reason for hiding this comment

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

I want to call out two functional regressions that I think we should fix if not here then in separate tasks:

I believe this is a functional mismatch, but I may be missing product intent. "Add exposure" is currently described as increasing position size, yet it routes to mode=modify, and submit in that mode only calls updatePositionTPSL (no placeOrder). If the intent is truly TP/SL only here, we should rename/recopy the action so it does not promise a size increase. Otherwise, I would ask we route Add Exposure to an order-placing flow that calls placeOrder in the current direction.

The second is in ui/hooks/perps/usePerpsDeposit.ts: findNetworkClientIdByChainId is async, but the current code passes it into addTransaction without awaiting it. That means networkClientId is a promise instead of a string at runtime, which can fail before confirmation opens. We should await the network client lookup before building transaction options.

@geositta geositta self-requested a review March 6, 2026 04:16
Copy link
Copy Markdown
Contributor

@geositta geositta left a comment

Choose a reason for hiding this comment

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

This refactor is a textbook composition win! Nice work on the child components with their own UI logic.

Submitting this second review with some code quality improvements.

const [marginModalMode, setMarginModalMode] = useState<
'add' | 'remove' | null
>(null);
const [isReverseModalOpen, setIsReverseModalOpen] = useState(false);
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.

These can never be open simultaneously, so a single discriminated union is safer and simpler:

  type ModalState =
    | { type: 'closed' }
    | { type: 'modify' }
    | { type: 'margin'; mode: 'add' | 'remove' }
    | { type: 'reverse' }
    | { type: 'tpsl' }
    | { type: 'close' };

  const [activeModal, setActiveModal] = useState<ModalState>({ type:
  'closed' });

This eliminates impossible states (two modals open at once) and reduces 12 state variables to 1.

: p,
);
streamManager.positions.pushData(optimisticallyUpdatedPositions);
setTimeout(async () => {
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.

Medium term can we make this delayed refetch cancellable and context safe? If account/context changes during this 2.5s window, it can push stale positions into the shared stream manager.

The practical fix is to hold the timeout id in a ref, clear it on unmount/close, and guard before push by checking we are still on the same selected address/current stream context.

const handleTpPercentInputChange = useCallback(
(event: React.ChangeEvent<HTMLInputElement>) => {
const { value } = event.target;
if (value === '' || /^-?\d*(?:\.\d*)?$/u.test(value)) {
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.

/^-?\d*(?:.\d*)?$/u // percent inputs
/^[\d,](?:.\d)?$/u // price inputs

Extract to a const:

const NUMERIC_INPUT_PATTERN = /^-?\d*(?:.\d*)?$/u;
const PRICE_INPUT_PATTERN = /^[\d,](?:.\d)?$/u;


let leverageValue = 1;
if (typeof position.leverage === 'object' && position.leverage !== null) {
leverageValue = (position.leverage as { value?: number }).value ?? 1;
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.

This as cast defeats TypeScript's narrowing. The typeof check above is a runtime guard but the as cast tells TS to stop checking. For code quality:

Fix the Position type's leverage field to be a proper discriminated union: number | { value: number }.

Then use a type guard or just 'value' in position.leverage for narrowing, no cast needed.

async waitForBalanceSection(timeout?: number): Promise<void> {
await this.driver.waitForSelector(
'[data-testid="perps-balance-actions"], [data-testid="perps-balance-actions-empty"]',
'[data-testid="perps-balance-dropdown"]',
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.

ℹ️ not blocking, as this is a pre-existing issue, but selectors should be moved on the top section

( cc @racitores --> ticket here and original review here )

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.

I have a PR for this topic here

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud bot commented Mar 6, 2026

Copy link
Copy Markdown
Contributor

@ccharly ccharly left a comment

Choose a reason for hiding this comment

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

LGTM for accounts

ui/components/multichain/account-overview/account-overview-tabs.tsx

@aganglada aganglada enabled auto-merge March 6, 2026 10:30
Copy link
Copy Markdown
Contributor

@racitores racitores left a comment

Choose a reason for hiding this comment

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

LGTM

@aganglada aganglada added this pull request to the merge queue Mar 6, 2026
@github-project-automation github-project-automation bot moved this from Needs dev review to Review finalised - Ready to be merged in PR review queue Mar 6, 2026
Merged via the queue into main with commit 53462cd Mar 6, 2026
501 of 506 checks passed
@aganglada aganglada deleted the feat/tat-2582-merge-perps-home-to-tab branch March 6, 2026 12:28
@github-project-automation github-project-automation bot moved this from Review finalised - Ready to be merged to Merged, Closed or Archived in PR review queue Mar 6, 2026
@github-actions github-actions bot locked and limited conversation to collaborators Mar 6, 2026
@metamaskbot metamaskbot added the release-13.23.0 Issue or pull request that will be included in release 13.23.0 label Mar 6, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.23.0 Issue or pull request that will be included in release 13.23.0 size-XL team-perps Perps team

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

8 participants