Skip to content

fix: Make Learn more link clickable in cancel/speedup modal tooltip#39964

Merged
georgewrmarshall merged 7 commits intomainfrom
fix-39878-cancel-speedup-learn-more-link
Feb 11, 2026
Merged

fix: Make Learn more link clickable in cancel/speedup modal tooltip#39964
georgewrmarshall merged 7 commits intomainfrom
fix-39878-cancel-speedup-learn-more-link

Conversation

@georgewrmarshall
Copy link
Copy Markdown
Contributor

@georgewrmarshall georgewrmarshall commented Feb 10, 2026

Description

Fixed the non-functional "Learn more" link in the InfoTooltip on the cancel/speedup transaction modal. The link was not clickable due to a TextButton asChild wrapper preventing interaction within the tooltip context.

Reason for change: The "Learn more" link in the tooltip was completely non-functional - clicking it had no effect.

Solution: Removed the TextButton asChild wrapper and moved the link directly inside the Text component with proper Tailwind styling classes.

Changelog

CHANGELOG entry: Fixed broken "Learn more" link in cancel/speedup transaction modal tooltip

Related issues

Fixes: #39878

Manual testing steps

  1. Create a transaction with low gas fee
  2. Wait for transaction to be pending
  3. Click "Cancel" or "Speed up" button on the transaction
  4. In the modal that opens, hover over the info icon (ℹ️) next to "This gas fee will replace the original"
  5. Click the "LEARN MORE" link in the tooltip
  6. Verify that the support article opens in a new tab: https://community.metamask.io/t/how-to-speed-up-or-cancel-transactions-on-metamask/3296

Screenshots/Recordings

Before

The "Learn more" link was not clickable - clicking had no effect.

Screen.Recording.2026-02-06.at.13.26.19.mov

After

The "Learn more" link now properly opens the support article in a new tab.

Screen.Recording.2026-02-10.at.2.23.40.PM.mov

Pre-merge author checklist

Code Review Notes

This fix adheres to all UI Development Guidelines:

  • ✅ Uses Text component from @metamask/design-system-react with TextVariant.BodySm
  • ✅ Uses semantic Tailwind color tokens (text-primary-default, text-primary-alternative)
  • ✅ No SASS files created or modified
  • ✅ No arbitrary color values
  • ✅ Proper use of className for interactive states (hover:)
  • ✅ Follows component hierarchy (design system first)

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
Small UI-only change to modal behavior and a tooltip hyperlink; low likelihood of regressions beyond this specific flow.

Overview
Updates the cancel/speed-up transaction modal to not close on outside click by setting isClosedOnOutsideClick={false}.

Also updates the tooltip "Learn more" URL to point to the current MetaMask support article for speeding up/canceling pending transactions.

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

The Learn more link in the InfoTooltip on the cancel/speedup transaction
modal was not clickable. The issue was caused by TextButton asChild wrapper
which prevented the link from being interactive within the tooltip context.

Changes:
- Removed TextButton asChild wrapper from the Learn more link
- Moved the link directly inside the Text component
- Added Tailwind classes for styling (text-primary-default hover:text-primary-alternative cursor-pointer)
- Added proper spacing with {' '} before the link

Fixes #39878

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@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-design-system All issues relating to design system in Extension label Feb 10, 2026
Improved adherence to UI Development Guidelines by:
- Using Text component with as="a" prop for the link
- Using color={TextColor.Primary} prop for static color
- Reserving className only for interactive state (hover) and utilities

This follows the component prop priority order:
Component Props → className for extras (hover/utilities)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
- Added TextColor to imports for color={TextColor.Primary}
- Removed unused TextButton import

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Text component uses asChild (not as) to merge props onto child element.
The asChild pattern works with react-tippy's html prop, unlike TextButton
asChild which has issues with event delegation in the tooltip context.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Changed URL from deprecated community forum link to the official
support article:
https://support.metamask.io/manage-crypto/transactions/how-to-speed-up-or-cancel-a-pending-transaction

Reverted to original TextButton asChild pattern as it works correctly
in Storybook (verified via testing). The component pattern was never
the issue - only the outdated URL needed updating.

Fixes #39878

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
TextButton is part of the design system package, not the local
component-library exports. This fixes the import error where TextButton
was not found in ../../component-library.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
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.

@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 10, 2026

Builds ready [97c3b28]
UI Startup Metrics (1366 ± 101 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup13661168180710114121547
load1172100514718312171316
domContentLoaded1166100214598212121306
domInteractive261598192381
firstPaint1506532561206227
backgroundConnect23721837218239263
firstReactRender1611106101722
initialActions106112
loadScripts9427901229819841088
setupStore1369291521
numNetworkReqs231589201579
BrowserifyPower User HomeuiStartup3004148610786191238778044
load12661084223217413031620
domContentLoaded12471069222317012841593
domInteractive37202543035105
firstPaint205831198135266318
backgroundConnect9782928093122810833739
firstReactRender24165262637
initialActions105113
loadScripts1002834191416010291312
setupStore1676391731
numNetworkReqs1035423632126157
WebpackStandard HomeuiStartup8446871339103922995
load7356151263103812884
domContentLoaded7296101256102804877
domInteractive2715102192478
firstPaint1136430953135217
backgroundConnect25165272838
firstReactRender14102841722
initialActions103112
loadScripts7266081254101801875
setupStore1263051321
numNetworkReqs231599211585
WebpackPower User HomeuiStartup1230867244026812841795
load71764413861206951003
domContentLoaded7066351378121685991
domInteractive39192323834122
firstPaint1406747978149312
backgroundConnect1901301178170159371
firstReactRender21164242228
initialActions102111
loadScripts7046331368119682984
setupStore1254161519
numNetworkReqs1446426738164202
FirefoxBrowserifyStandard HomeuiStartup16011327235117716351975
load13881157214115214341630
domContentLoaded13861156213515214341630
domInteractive873532150111176
firstPaint------
backgroundConnect5631164185888
firstReactRender12102021315
initialActions102012
loadScripts13611139211414814031602
setupStore166128191349
numNetworkReqs241295211784
BrowserifyPower User HomeuiStartup28692178791374429823607
load16001218617363915792048
domContentLoaded16001218617363915792048
domInteractive173521374181162434
firstPaint------
backgroundConnect43510914423076041071
firstReactRender17142631922
initialActions203122
loadScripts15601191613563715491967
setupStore14214805184157610
numNetworkReqs903821632106151
WebpackStandard HomeuiStartup16311408193612716971891
load14021230165510114671589
domContentLoaded14021230165510114671589
domInteractive843119343126151
firstPaint------
backgroundConnect57281813058129
firstReactRender15115761419
initialActions103122
loadScripts1374121216369714311553
setupStore146116151138
numNetworkReqs241295201879
WebpackPower User HomeuiStartup27841913828169229683540
load15781214672658715682100
domContentLoaded15781214672658715682099
domInteractive180471348202167659
firstPaint------
backgroundConnect41612714753065721100
firstReactRender22156182434
initialActions205122
loadScripts15371196670258415362080
setupStore1648796191186604
numNetworkReqs85392153692154
📊 Page Load Benchmark Results

Current Commit: 97c3b28 | Date: 2/10/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.04s (±37ms) 🟡 | historical mean value: 1.04s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 710ms (±35ms) 🟢 | historical mean value: 723ms ⬇️ (historical data)
  • firstContentfulPaint-> current mean value: 78ms (±12ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.04s 37ms 1.02s 1.33s 1.05s 1.33s
domContentLoaded 710ms 35ms 690ms 979ms 723ms 979ms
firstPaint 78ms 12ms 64ms 188ms 84ms 188ms
firstContentfulPaint 78ms 12ms 64ms 188ms 84ms 188ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚨 Warning! Bundle size has increased!]
  • background: 58 Bytes (0%)
  • ui: 102 Bytes (0%)
  • common: 1.94 KiB (0.02%)

The "Learn more" link inside the InfoTooltip was not clickable because
the Modal's click-outside handler was triggered when clicking on the
tooltip (which is portaled outside the modal DOM).

Changes:
- Set isClosedOnOutsideClick={false} on the Modal component
- Removed unused TextColor import

This allows users to click the "Learn more" link in the tooltip while
keeping all other modal functionality intact. Users can still close the
modal using the X button or pressing Escape.

Related to #39878

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@metamaskbotv2
Copy link
Copy Markdown
Contributor

metamaskbotv2 bot commented Feb 11, 2026

Builds ready [d36b152]
UI Startup Metrics (1351 ± 91 ms)
PlatformBuildTypePageMetricMean (ms)Min (ms)Max (ms)Std Dev (ms)P 75 (ms)P 95 (ms)
ChromeBrowserifyStandard HomeuiStartup1351117416189113931509
load117099814298512061320
domContentLoaded116499314258611991312
domInteractive2615101192376
firstPaint145651209124189223
backgroundConnect23721528113240266
firstReactRender1583241623
initialActions104113
loadScripts9427721188859801089
setupStore1263651321
numNetworkReqs231591211586
BrowserifyPower User HomeuiStartup19601385455559319713579
load11841049169714212421550
domContentLoaded11661025168914112041537
domInteractive3519156233685
firstPaint1887133875256294
backgroundConnect43228724033223551076
firstReactRender23153852434
initialActions103111
loadScripts92777714521369621300
setupStore1655281932
numNetworkReqs1154526445138199
WebpackStandard HomeuiStartup82668411461028781038
load711606104091760869
domContentLoaded706602102290754863
domInteractive251599172272
firstPaint1146341060143219
backgroundConnect25185472738
firstReactRender1493041722
initialActions103112
loadScripts704600101989752861
setupStore1163851220
numNetworkReqs231594211584
WebpackPower User HomeuiStartup1226861217925312781799
load70059214881426841048
domContentLoaded69158614821426721039
domInteractive36171402836104
firstPaint157621110131178324
backgroundConnect18114572783164332
firstReactRender21163232227
initialActions103111
loadScripts68858414731406701029
setupStore1143141215
numNetworkReqs1294628752150240
FirefoxBrowserifyStandard HomeuiStartup15451324249018115791878
load13331128209214713791612
domContentLoaded13311128208714713781611
domInteractive75312964794137
firstPaint------
backgroundConnect5329136155683
firstReactRender12101711213
initialActions102012
loadScripts13071104200214113541579
setupStore165163231249
numNetworkReqs241290201886
BrowserifyPower User HomeuiStartup27682029743259828933514
load15841265610351816222095
domContentLoaded15841265610351816222095
domInteractive15035639145143466
firstPaint------
backgroundConnect315118945248361864
firstReactRender18146361922
initialActions106122
loadScripts15471245606451415962033
setupStore1099745163100534
numNetworkReqs743616637104137
WebpackStandard HomeuiStartup15361284188313316021799
load13381125168910413971512
domContentLoaded13371125168810513961512
domInteractive792816939107144
firstPaint------
backgroundConnect50231432653108
firstReactRender14115461418
initialActions102012
loadScripts1311111116609913721485
setupStore136168181238
numNetworkReqs231290191877
WebpackPower User HomeuiStartup27662104909175128203633
load15911279754165216502210
domContentLoaded15901279754165216502209
domInteractive12833874143122324
firstPaint------
backgroundConnect3171161521258346864
firstReactRender22167782330
initialActions213122
loadScripts15431256750464615592138
setupStore15010769193147570
numNetworkReqs70351463097120
📊 Page Load Benchmark Results

Current Commit: d36b152 | Date: 2/10/2026

📄 Localhost MetaMask Test Dapp

Samples: 100

Summary

  • pageLoadTime-> current mean value: 1.06s (±44ms) 🟡 | historical mean value: 1.03s ⬆️ (historical data)
  • domContentLoaded-> current mean value: 739ms (±39ms) 🟢 | historical mean value: 720ms ⬆️ (historical data)
  • firstContentfulPaint-> current mean value: 80ms (±10ms) 🟢 | historical mean value: 77ms ⬆️ (historical data)

📈 Detailed Results

Metric Mean Std Dev Min Max P95 P99
pageLoadTime 1.06s 44ms 1.03s 1.37s 1.08s 1.37s
domContentLoaded 739ms 39ms 713ms 1.01s 760ms 1.01s
firstPaint 80ms 10ms 64ms 168ms 88ms 168ms
firstContentfulPaint 80ms 10ms 64ms 168ms 88ms 168ms
largestContentfulPaint 0ms 0ms 0ms 0ms 0ms 0ms
Bundle size diffs [🚀 Bundle size reduced!]
  • background: 58 Bytes (0%)
  • ui: 3.12 KiB (0.04%)
  • common: -2.93 KiB (-0.03%)

isOpen
onClose={() => closeModal(['cancelSpeedUpTransaction'])}
className="cancel-speedup-popover"
isClosedOnOutsideClick={false}
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.

The tooltip renders outside of the main body, so clicking on it is registered as an outside click. This prevents the modal from closing when clicking on the overlay, but still allows the link inside the tooltip within the modal to be clicked.

<TextButton asChild className="inline">
<a
href="https://community.metamask.io/t/how-to-speed-up-or-cancel-transactions-on-metamask/3296"
href="https://support.metamask.io/manage-crypto/transactions/how-to-speed-up-or-cancel-a-pending-transaction"
Copy link
Copy Markdown
Contributor Author

@georgewrmarshall georgewrmarshall Feb 11, 2026

Choose a reason for hiding this comment

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

Original link was broken

Before

Image

After

Image

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.

Should this use ZENDESK_URLS.SPEEDUP_CANCEL?

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.

Ahh didn't know this existed will create a fix

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.

PR here #40001

@georgewrmarshall georgewrmarshall marked this pull request as ready for review February 11, 2026 01:53
@georgewrmarshall georgewrmarshall requested review from a team and Unik0rnMaggie February 11, 2026 01:53
Copy link
Copy Markdown
Contributor

@davidmurdoch davidmurdoch left a comment

Choose a reason for hiding this comment

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

approved, but with a comment.

@georgewrmarshall georgewrmarshall added this pull request to the merge queue Feb 11, 2026
Merged via the queue into main with commit beacb30 Feb 11, 2026
185 checks passed
@georgewrmarshall georgewrmarshall deleted the fix-39878-cancel-speedup-learn-more-link branch February 11, 2026 21:56
@github-actions github-actions bot locked and limited conversation to collaborators Feb 11, 2026
@metamaskbot metamaskbot added the release-13.19.0 Issue or pull request that will be included in release 13.19.0 label Feb 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-13.19.0 Issue or pull request that will be included in release 13.19.0 size-XS team-design-system All issues relating to design system in Extension

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Clicking "Learn more" link in InfoTooltip on cancel/speedup transaction modal has no effect

4 participants