chore: Update address popover styling
Description
This PR refines the hover states and styling of the address popover so the visuals are polished. Designs have been approved by @jakehaugen
Changelog
CHANGELOG entry: fix: update styling of accounts address popover
Related issues
Fixes:
Manual testing steps
Ensure that hover state works as expected
Screenshots/Recordings
Before
https://github.com/user-attachments/assets/7ce13eb5-69b3-4462-9984-ca753c6c013d
After
https://github.com/user-attachments/assets/37564cdd-e1b9-4c0b-85c3-3296f5f87f14
Pre-merge author checklist
- [ ] I've followed MetaMask Contributor Docs and MetaMask Extension Coding Standards.
- [ ] I've completed the PR template to the best of my ability
- [ ] I’ve included tests if applicable
- [ ] I’ve documented my code using JSDoc format if applicable
- [ ] I’ve applied the right labels on the PR (see labeling guidelines). 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.
[!NOTE] Polishes the multichain address hover popover: adjusts spacing/typography, increases popover padding/width, adds a divider and small full-width tertiary “View All” button; updates tests to match UI changes.
- UI/Styling (multichain address popover)
- Adjust row spacing and typography in
multichain-aggregated-list-row.tsx(smaller gaps, Medium weight, larger copy icon,minWidthfor address text).- Update popover layout in
multichain-hovered-address-rows-hovered-list.tsx(addedpaddingInline/top/bottom,minWidth340px, header text size tweak, new top border divider, small full-width tertiaryView Allbutton; removed arrow icon).- Refine SCSS in
index.scss(reduced paddings, addborder-radius, new.multichain-address-rows-border, hover radius for...-view-all-button).- Tests
- Update selectors and expectations in
multichain-hovered-address-rows-hovered-list.test.tsxto avoid class-based queries, align with new typography and button changes.Written by Cursor Bugbot for commit a833cee3571cee3aab0d67df66284524a7ed977f. This will update automatically on new commits. Configure here.
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.
✨ Files requiring CODEOWNER review ✨
🔑 @MetaMask/accounts-engineers (4 files, +59 -37)
- 📁 ui/
- 📁 components/
- 📁 multichain-accounts/
- 📁 multichain-address-rows-hovered-list/
- 📄
index.scss+14 -4 - 📄
multichain-aggregated-list-row.tsx+6 -6 - 📄
multichain-hovered-address-rows-hovered-list.test.tsx+17 -10 - 📄
multichain-hovered-address-rows-hovered-list.tsx+22 -17
- 📄
- 📁 multichain-address-rows-hovered-list/
- 📁 multichain-accounts/
- 📁 components/
Builds ready [df7283a]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1285 ± 117 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Standard Home | uiStartup | 1285 | 1017 | 1598 | 117 | 1357 | 1491 |
| load | 1058 | 863 | 1308 | 100 | 1144 | 1210 | |||
| domContentLoaded | 1050 | 858 | 1295 | 99 | 1136 | 1204 | |||
| domInteractive | 27 | 16 | 104 | 21 | 22 | 90 | |||
| firstPaint | 512 | 96 | 1307 | 413 | 1032 | 1197 | |||
| backgroundConnect | 215 | 196 | 249 | 11 | 221 | 235 | |||
| firstReactRender | 47 | 33 | 101 | 14 | 59 | 72 | |||
| getState | 39 | 19 | 149 | 22 | 43 | 80 | |||
| initialActions | 1 | 0 | 6 | 1 | 1 | 2 | |||
| loadScripts | 843 | 655 | 1062 | 96 | 927 | 987 | |||
| setupStore | 12 | 6 | 32 | 5 | 13 | 23 | |||
| numNetworkReqs | 13 | 6 | 84 | 20 | 6 | 70 | |||
| Browserify | Power User Home | uiStartup | 1876 | 1546 | 2255 | 153 | 1979 | 2169 | |
| load | 1032 | 860 | 1370 | 119 | 1104 | 1259 | |||
| domContentLoaded | 1021 | 855 | 1358 | 117 | 1098 | 1251 | |||
| domInteractive | 31 | 17 | 226 | 28 | 26 | 89 | |||
| firstPaint | 688 | 93 | 1329 | 418 | 1072 | 1272 | |||
| backgroundConnect | 258 | 186 | 718 | 117 | 230 | 551 | |||
| firstReactRender | 49 | 38 | 70 | 6 | 52 | 63 | |||
| getState | 197 | 148 | 652 | 53 | 213 | 247 | |||
| initialActions | 1 | 0 | 3 | 1 | 1 | 2 | |||
| loadScripts | 817 | 665 | 1126 | 113 | 896 | 1046 | |||
| setupStore | 14 | 9 | 48 | 8 | 13 | 35 | |||
| numNetworkReqs | 70 | 58 | 145 | 20 | 67 | 134 | |||
| Webpack | Standard Home | uiStartup | 824 | 672 | 1262 | 88 | 878 | 956 | |
| load | 659 | 574 | 1039 | 76 | 702 | 794 | |||
| domContentLoaded | 653 | 570 | 1030 | 75 | 694 | 788 | |||
| domInteractive | 26 | 16 | 105 | 20 | 23 | 81 | |||
| firstPaint | 249 | 82 | 1042 | 184 | 224 | 685 | |||
| backgroundConnect | 11 | 6 | 87 | 9 | 12 | 29 | |||
| firstReactRender | 58 | 33 | 204 | 38 | 63 | 156 | |||
| getState | 29 | 14 | 101 | 13 | 36 | 49 | |||
| initialActions | 1 | 0 | 3 | 1 | 1 | 2 | |||
| loadScripts | 650 | 568 | 1027 | 74 | 691 | 779 | |||
| setupStore | 11 | 6 | 28 | 5 | 14 | 22 | |||
| numNetworkReqs | 13 | 6 | 79 | 19 | 6 | 71 | |||
| Webpack | Power User Home | uiStartup | 1410 | 1061 | 1866 | 184 | 1566 | 1723 | |
| load | 744 | 596 | 1054 | 110 | 835 | 935 | |||
| domContentLoaded | 736 | 589 | 1045 | 109 | 825 | 928 | |||
| domInteractive | 30 | 16 | 139 | 26 | 24 | 102 | |||
| firstPaint | 282 | 95 | 1050 | 222 | 247 | 834 | |||
| backgroundConnect | 88 | 8 | 636 | 166 | 70 | 568 | |||
| firstReactRender | 49 | 39 | 73 | 5 | 50 | 59 | |||
| getState | 184 | 142 | 367 | 38 | 191 | 266 | |||
| initialActions | 1 | 0 | 2 | 1 | 1 | 1 | |||
| loadScripts | 733 | 586 | 1043 | 108 | 823 | 921 | |||
| setupStore | 15 | 7 | 52 | 9 | 13 | 37 | |||
| numNetworkReqs | 70 | 55 | 207 | 24 | 65 | 131 | |||
| Firefox | Browserify | Standard Home | uiStartup | 1352 | 1107 | 1876 | 177 | 1435 | 1747 |
| load | 1081 | 939 | 1400 | 96 | 1133 | 1252 | |||
| domContentLoaded | 1080 | 933 | 1400 | 96 | 1133 | 1252 | |||
| domInteractive | 70 | 30 | 255 | 40 | 87 | 145 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 58 | 22 | 294 | 52 | 69 | 174 | |||
| firstReactRender | 39 | 31 | 76 | 8 | 39 | 61 | |||
| getState | 15 | 7 | 182 | 25 | 11 | 29 | |||
| initialActions | 1 | 0 | 3 | 1 | 1 | 2 | |||
| loadScripts | 1048 | 923 | 1363 | 85 | 1094 | 1213 | |||
| setupStore | 18 | 5 | 179 | 28 | 11 | 91 | |||
| numNetworkReqs | 15 | 6 | 81 | 21 | 8 | 78 | |||
| Browserify | Power User Home | uiStartup | 2653 | 1673 | 3862 | 544 | 3106 | 3355 | |
| load | 1648 | 981 | 2895 | 506 | 2090 | 2374 | |||
| domContentLoaded | 1648 | 981 | 2895 | 506 | 2090 | 2373 | |||
| domInteractive | 163 | 32 | 1694 | 295 | 87 | 956 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 206 | 22 | 1092 | 240 | 205 | 983 | |||
| firstReactRender | 54 | 34 | 99 | 12 | 59 | 77 | |||
| getState | 150 | 68 | 975 | 96 | 169 | 248 | |||
| initialActions | 2 | 1 | 8 | 1 | 2 | 3 | |||
| loadScripts | 1553 | 926 | 2874 | 475 | 2001 | 2272 | |||
| setupStore | 51 | 5 | 467 | 88 | 45 | 269 | |||
| numNetworkReqs | 73 | 49 | 133 | 21 | 67 | 124 | |||
| Webpack | Standard Home | uiStartup | 1581 | 1290 | 2166 | 172 | 1657 | 1934 | |
| load | 1298 | 1102 | 1699 | 116 | 1366 | 1519 | |||
| domContentLoaded | 1298 | 1102 | 1699 | 116 | 1366 | 1518 | |||
| domInteractive | 80 | 28 | 145 | 37 | 111 | 140 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 61 | 21 | 246 | 43 | 75 | 145 | |||
| firstReactRender | 42 | 32 | 97 | 10 | 47 | 56 | |||
| getState | 17 | 7 | 184 | 20 | 16 | 47 | |||
| initialActions | 1 | 0 | 8 | 1 | 2 | 2 | |||
| loadScripts | 1265 | 1080 | 1677 | 103 | 1339 | 1448 | |||
| setupStore | 21 | 6 | 224 | 34 | 15 | 88 | |||
| numNetworkReqs | 15 | 6 | 77 | 20 | 8 | 73 | |||
| Webpack | Power User Home | uiStartup | 2735 | 1777 | 3755 | 463 | 3089 | 3417 | |
| load | 1870 | 1141 | 2900 | 445 | 2238 | 2525 | |||
| domContentLoaded | 1870 | 1141 | 2900 | 445 | 2237 | 2524 | |||
| domInteractive | 169 | 32 | 937 | 258 | 149 | 898 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 163 | 29 | 1052 | 202 | 179 | 918 | |||
| firstReactRender | 57 | 39 | 123 | 13 | 61 | 84 | |||
| getState | 136 | 71 | 1246 | 123 | 152 | 251 | |||
| initialActions | 2 | 1 | 40 | 4 | 2 | 3 | |||
| loadScripts | 1790 | 1125 | 2872 | 430 | 2145 | 2421 | |||
| setupStore | 36 | 5 | 344 | 62 | 32 | 203 | |||
| numNetworkReqs | 72 | 45 | 129 | 22 | 69 | 125 |
📊 Page Load Benchmark Results
Current Commit: df7283a | Date: 12/9/2025
📄 Localhost MetaMask Test Dapp
Samples: 100
Summary
- pageLoadTime-> current mean value: 1.05s (±41ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
- domContentLoaded-> current mean value: 734ms (±38ms) 🟢 | historical mean value: 727ms ⬆️ (historical data)
- firstContentfulPaint-> current mean value: 79ms (±12ms) 🟢 | historical mean value: 83ms ⬇️ (historical data)
📈 Detailed Results
| Metric | Mean | Std Dev | Min | Max | P95 | P99 |
|---|---|---|---|---|---|---|
| pageLoadTime | 1.05s | 41ms | 1.02s | 1.34s | 1.09s | 1.34s |
| domContentLoaded | 734ms | 38ms | 708ms | 1.00s | 769ms | 1.00s |
| firstPaint | 79ms | 12ms | 60ms | 188ms | 84ms | 188ms |
| firstContentfulPaint | 79ms | 12ms | 60ms | 188ms | 84ms | 188ms |
| largestContentfulPaint | 0ms | 0ms | 0ms | 0ms | 0ms | 0ms |
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 3.06 KiB (0.06%)
- ui: -24.79 KiB (-0.32%)
- common: 8.46 KiB (0.09%)
Builds ready [a833cee]
- builds: chrome, firefox
- builds (beta): chrome, firefox
- builds (flask): chrome, firefox
- builds (test): chrome, firefox
- builds (test-flask): chrome, firefox
- bundle size: Bundle Size Stats
- user-actions-benchmark: User Actions Stats
- storybook: Storybook
- typescript migration: Dashboard
- all artifacts
UI Startup Metrics (1335 ± 100 ms)
| Platform | BuildType | Page | Metric | Mean (ms) | Min (ms) | Max (ms) | Std Dev (ms) | P 75 (ms) | P 95 (ms) |
|---|---|---|---|---|---|---|---|---|---|
| Chrome | Browserify | Standard Home | uiStartup | 1335 | 1113 | 1587 | 100 | 1408 | 1485 |
| load | 1085 | 910 | 1339 | 90 | 1155 | 1242 | |||
| domContentLoaded | 1078 | 907 | 1330 | 89 | 1139 | 1234 | |||
| domInteractive | 28 | 15 | 108 | 20 | 24 | 89 | |||
| firstPaint | 467 | 80 | 1265 | 379 | 952 | 1171 | |||
| backgroundConnect | 234 | 203 | 285 | 16 | 244 | 264 | |||
| firstReactRender | 51 | 34 | 133 | 17 | 61 | 83 | |||
| getState | 44 | 18 | 161 | 27 | 49 | 118 | |||
| initialActions | 1 | 0 | 6 | 1 | 1 | 4 | |||
| loadScripts | 851 | 686 | 1081 | 84 | 906 | 1007 | |||
| setupStore | 13 | 7 | 34 | 5 | 15 | 24 | |||
| numNetworkReqs | 13 | 6 | 81 | 19 | 6 | 69 | |||
| Browserify | Power User Home | uiStartup | 1891 | 1541 | 2274 | 156 | 1991 | 2191 | |
| load | 1083 | 898 | 1420 | 120 | 1153 | 1334 | |||
| domContentLoaded | 1073 | 893 | 1393 | 119 | 1144 | 1322 | |||
| domInteractive | 31 | 17 | 142 | 23 | 26 | 97 | |||
| firstPaint | 572 | 106 | 1424 | 440 | 1063 | 1317 | |||
| backgroundConnect | 254 | 204 | 665 | 93 | 241 | 538 | |||
| firstReactRender | 47 | 39 | 67 | 4 | 49 | 56 | |||
| getState | 199 | 147 | 678 | 72 | 210 | 245 | |||
| initialActions | 1 | 0 | 2 | 1 | 1 | 2 | |||
| loadScripts | 855 | 687 | 1186 | 116 | 927 | 1104 | |||
| setupStore | 14 | 9 | 39 | 5 | 14 | 25 | |||
| numNetworkReqs | 70 | 56 | 144 | 17 | 68 | 122 | |||
| Webpack | Standard Home | uiStartup | 830 | 679 | 1062 | 82 | 903 | 971 | |
| load | 676 | 574 | 849 | 77 | 744 | 814 | |||
| domContentLoaded | 670 | 569 | 844 | 76 | 738 | 799 | |||
| domInteractive | 26 | 16 | 109 | 20 | 23 | 82 | |||
| firstPaint | 229 | 88 | 762 | 146 | 225 | 638 | |||
| backgroundConnect | 14 | 6 | 169 | 18 | 13 | 33 | |||
| firstReactRender | 50 | 33 | 199 | 33 | 46 | 158 | |||
| getState | 28 | 14 | 76 | 12 | 38 | 53 | |||
| initialActions | 1 | 0 | 4 | 1 | 1 | 2 | |||
| loadScripts | 667 | 567 | 836 | 75 | 729 | 797 | |||
| setupStore | 10 | 6 | 31 | 4 | 11 | 19 | |||
| numNetworkReqs | 13 | 6 | 81 | 20 | 6 | 74 | |||
| Webpack | Power User Home | uiStartup | 1431 | 1107 | 1868 | 185 | 1590 | 1726 | |
| load | 746 | 595 | 974 | 109 | 859 | 929 | |||
| domContentLoaded | 738 | 589 | 964 | 108 | 853 | 922 | |||
| domInteractive | 33 | 17 | 128 | 27 | 27 | 113 | |||
| firstPaint | 286 | 89 | 894 | 206 | 316 | 723 | |||
| backgroundConnect | 68 | 7 | 660 | 143 | 29 | 547 | |||
| firstReactRender | 50 | 42 | 72 | 5 | 52 | 63 | |||
| getState | 195 | 138 | 685 | 78 | 195 | 288 | |||
| initialActions | 1 | 0 | 3 | 0 | 1 | 1 | |||
| loadScripts | 735 | 587 | 962 | 107 | 850 | 913 | |||
| setupStore | 16 | 6 | 42 | 9 | 14 | 37 | |||
| numNetworkReqs | 72 | 59 | 228 | 26 | 68 | 139 | |||
| Firefox | Browserify | Standard Home | uiStartup | 1372 | 1079 | 2364 | 188 | 1448 | 1667 |
| load | 1097 | 918 | 1416 | 98 | 1157 | 1287 | |||
| domContentLoaded | 1096 | 917 | 1416 | 98 | 1157 | 1287 | |||
| domInteractive | 72 | 31 | 162 | 39 | 94 | 140 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 68 | 20 | 1001 | 104 | 73 | 192 | |||
| firstReactRender | 38 | 31 | 72 | 8 | 39 | 55 | |||
| getState | 12 | 6 | 96 | 10 | 13 | 25 | |||
| initialActions | 1 | 0 | 2 | 1 | 2 | 2 | |||
| loadScripts | 1063 | 903 | 1303 | 83 | 1112 | 1202 | |||
| setupStore | 13 | 6 | 89 | 12 | 11 | 39 | |||
| numNetworkReqs | 15 | 6 | 78 | 20 | 9 | 76 | |||
| Browserify | Power User Home | uiStartup | 2579 | 1545 | 3664 | 558 | 3013 | 3337 | |
| load | 1642 | 947 | 2605 | 490 | 2038 | 2382 | |||
| domContentLoaded | 1641 | 947 | 2605 | 490 | 2038 | 2382 | |||
| domInteractive | 138 | 31 | 1053 | 238 | 93 | 948 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 171 | 23 | 1149 | 189 | 201 | 459 | |||
| firstReactRender | 54 | 36 | 96 | 11 | 61 | 77 | |||
| getState | 145 | 55 | 1179 | 113 | 160 | 237 | |||
| initialActions | 4 | 0 | 64 | 8 | 2 | 8 | |||
| loadScripts | 1548 | 930 | 2422 | 451 | 1898 | 2257 | |||
| setupStore | 39 | 4 | 334 | 63 | 44 | 230 | |||
| numNetworkReqs | 74 | 55 | 137 | 23 | 68 | 127 | |||
| Webpack | Standard Home | uiStartup | 1546 | 1221 | 2140 | 168 | 1646 | 1849 | |
| load | 1273 | 1081 | 1604 | 100 | 1339 | 1488 | |||
| domContentLoaded | 1272 | 1081 | 1604 | 100 | 1339 | 1488 | |||
| domInteractive | 68 | 28 | 151 | 35 | 92 | 132 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 57 | 19 | 205 | 40 | 58 | 163 | |||
| firstReactRender | 43 | 33 | 89 | 11 | 45 | 71 | |||
| getState | 16 | 6 | 116 | 17 | 14 | 46 | |||
| initialActions | 1 | 0 | 5 | 1 | 2 | 2 | |||
| loadScripts | 1244 | 1067 | 1506 | 92 | 1313 | 1426 | |||
| setupStore | 19 | 6 | 221 | 35 | 13 | 57 | |||
| numNetworkReqs | 15 | 6 | 83 | 20 | 8 | 74 | |||
| Webpack | Power User Home | uiStartup | 2764 | 1832 | 5197 | 601 | 3134 | 3688 | |
| load | 1787 | 1234 | 4682 | 548 | 2263 | 2690 | |||
| domContentLoaded | 1787 | 1234 | 4682 | 548 | 2263 | 2690 | |||
| domInteractive | 144 | 31 | 3047 | 333 | 104 | 440 | |||
| firstPaint | - | - | - | - | - | - | |||
| backgroundConnect | 186 | 31 | 1174 | 228 | 232 | 947 | |||
| firstReactRender | 60 | 41 | 121 | 14 | 63 | 93 | |||
| getState | 164 | 66 | 1118 | 162 | 175 | 257 | |||
| initialActions | 2 | 1 | 8 | 1 | 2 | 3 | |||
| loadScripts | 1683 | 1141 | 4656 | 512 | 2110 | 2507 | |||
| setupStore | 62 | 5 | 1103 | 157 | 41 | 244 | |||
| numNetworkReqs | 108 | 48 | 251 | 48 | 133 | 232 |
📊 Page Load Benchmark Results
Current Commit: a833cee | Date: 12/10/2025
📄 Localhost MetaMask Test Dapp
Samples: 100
Summary
- pageLoadTime-> current mean value: 1.04s (±121ms) 🟡 | historical mean value: 1.04s ⬇️ (historical data)
- domContentLoaded-> current mean value: 729ms (±131ms) 🟢 | historical mean value: 727ms ⬆️ (historical data)
- firstContentfulPaint-> current mean value: 95ms (±200ms) 🟢 | historical mean value: 83ms ⬆️ (historical data)
📈 Detailed Results
| Metric | Mean | Std Dev | Min | Max | P95 | P99 |
|---|---|---|---|---|---|---|
| pageLoadTime | 1.04s | 121ms | 1.01s | 2.20s | 1.05s | 2.20s |
| domContentLoaded | 729ms | 131ms | 700ms | 2.00s | 732ms | 2.00s |
| firstPaint | 95ms | 200ms | 60ms | 2.09s | 84ms | 2.09s |
| firstContentfulPaint | 95ms | 200ms | 60ms | 2.09s | 84ms | 2.09s |
| largestContentfulPaint | 0ms | 0ms | 0ms | 0ms | 0ms | 0ms |
Bundle size diffs [🚨 Warning! Bundle size has increased!]
- background: 58 Bytes (0%)
- ui: 214 Bytes (0%)
- common: 20 Bytes (0%)