Skip to content

chore: upgrade design-system-react-native to 0.11.0 and deprecate replaced components#27652

Merged
georgewrmarshall merged 5 commits into
mainfrom
chore/upgrade-design-system-react-native-0.11.0
Mar 26, 2026
Merged

chore: upgrade design-system-react-native to 0.11.0 and deprecate replaced components#27652
georgewrmarshall merged 5 commits into
mainfrom
chore/upgrade-design-system-react-native-0.11.0

Conversation

@georgewrmarshall

@georgewrmarshall georgewrmarshall commented Mar 18, 2026

Copy link
Copy Markdown
Contributor

Description

Upgrades @metamask/design-system-react-native from ^0.10.0 to ^0.11.0 and deprecates local component-library components that now have design system replacements.

https://github.com/MetaMask/metamask-design-system/releases/tag/v25.0.0

Why: The design system monorepo v25.0.0 release (@metamask/design-system-react-native@0.11.0) shipped several new components that duplicate functionality currently in app/component-library/. Upgrading and marking local equivalents as @deprecated guides developers toward the canonical design system implementations and prevents further adoption of the local versions.

What changed:

  1. Package upgrade@metamask/design-system-react-native bumped from ^0.10.0 to ^0.11.0
  2. Breaking change migrationButtonIcon isFloating boolean prop replaced by variant enum in 0.11.0; migrated InputStepper to use ButtonIconVariant.Floating
  3. 10 components deprecated with @deprecated JSDoc following the existing codebase pattern, linking to component READMEs and migration docs:
    • MainActionButton (components-temp)
    • TabEmptyState (components-temp)
    • ButtonFilter (components-temp)
    • BannerBase (foundation)
    • Banner (union — use BannerAlert from DS directly)
    • BannerAlert (variant)
    • BannerTip (variant — unused, will be removed)
    • BottomSheet
    • BottomSheetDialog (foundation)
    • ListItem

Changelog

CHANGELOG entry: null

Related issues

Fixes:

Manual testing steps

N/A — deprecation annotations are documentation-only changes. The ButtonIcon prop migration in InputStepper can be verified by navigating to the Bridge input stepper UI.

Screenshots/Recordings

Before

N/A

After

N/A

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
Upgrades a shared UI dependency and migrates to a changed ButtonIcon API, which could cause subtle UI/regression issues if other call sites rely on previous props or styles. Password handling was also adjusted to be controlled in a couple of sensitive SRP/password-entry screens, so review for unintended behavior changes.

Overview
Upgrades @metamask/design-system-react-native to 0.11.0 (and @metamask/design-system-shared to 0.4.0 via lockfile), and updates the Bridge InputStepper to the new ButtonIcon API by replacing isFloating with variant={ButtonIconVariant.Floating}.

Marks multiple in-repo component-library equivalents as deprecated via JSDoc (e.g. Banner, BannerBase, BottomSheet, ListItem, and several components-temp components), pointing developers to the design-system replacements and noting BannerVariant.Tip/BannerTip as unused and slated for removal.

Tightens password input control by initializing ManualBackupStep1 password state to '' and wiring RevealPrivateCredential’s PasswordEntry to a new required password prop, with corresponding snapshot updates.

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

@georgewrmarshall georgewrmarshall self-assigned this Mar 18, 2026
@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 Mobile label Mar 18, 2026
@github-actions github-actions Bot added size-S risk-high Extensive testing required · High bug introduction risk labels Mar 18, 2026
@socket-security

socket-security Bot commented Mar 18, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatednpm/​@​metamask/​design-system-react-native@​0.10.0 ⏵ 0.11.09810084 +197 +1100

View full report

@georgewrmarshall georgewrmarshall force-pushed the chore/upgrade-design-system-react-native-0.11.0 branch from 7a6ae88 to 036af7a Compare March 18, 2026 21:18
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Mar 18, 2026

@georgewrmarshall georgewrmarshall left a comment

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.

Check that we have migration docs for each component that links to them

@georgewrmarshall georgewrmarshall force-pushed the chore/upgrade-design-system-react-native-0.11.0 branch from 036af7a to 9a6cc8a Compare March 18, 2026 22:15
@github-actions github-actions Bot added risk-medium Moderate testing recommended · Possible bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Mar 18, 2026
Comment thread app/component-library/components/Banners/Banner/Banner.tsx Outdated
@georgewrmarshall georgewrmarshall marked this pull request as ready for review March 18, 2026 22:46
@georgewrmarshall georgewrmarshall requested review from a team as code owners March 18, 2026 22:46
@georgewrmarshall georgewrmarshall marked this pull request as draft March 18, 2026 22:46
@github-actions github-actions Bot added risk-medium Moderate testing recommended · Possible bug introduction risk and removed risk-medium Moderate testing recommended · Possible bug introduction risk labels Mar 18, 2026
@georgewrmarshall georgewrmarshall marked this pull request as ready for review March 19, 2026 05:17
kirillzyusko
kirillzyusko previously approved these changes Mar 20, 2026
infiniteflower
infiniteflower previously approved these changes Mar 20, 2026
@georgewrmarshall georgewrmarshall added this pull request to the merge queue Mar 20, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Mar 20, 2026
@georgewrmarshall georgewrmarshall added this pull request to the merge queue Mar 20, 2026
@github-merge-queue github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Mar 20, 2026

@cursor cursor Bot left a comment

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.

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

Fix All in Cursor

Bugbot Autofix prepared a fix for the issue found in the latest run.

  • ✅ Fixed: InputStepper still uses removed isFloating prop after upgrade
    • Replaced deprecated isFloating with variant={ButtonIconVariant.Floating} and added the required import.

Create PR

Or push these changes by commenting:

@cursor push 8091493730
Preview (8091493730)
diff --git a/app/components/UI/Bridge/components/InputStepper/index.tsx b/app/components/UI/Bridge/components/InputStepper/index.tsx
--- a/app/components/UI/Bridge/components/InputStepper/index.tsx
+++ b/app/components/UI/Bridge/components/InputStepper/index.tsx
@@ -4,6 +4,7 @@
 import {
   ButtonIcon,
   ButtonIconSize,
+  ButtonIconVariant,
   IconColor,
   IconName,
   Text,
@@ -42,7 +43,7 @@
         <ButtonIcon
           size={ButtonIconSize.Lg}
           iconName={IconName.Minus}
-          isFloating
+          variant={ButtonIconVariant.Floating}
           style={tw.style(minusPressed ? 'bg-muted-pressed' : 'bg-muted')}
           iconProps={{ color: IconColor.IconDefault }}
           onPressIn={() => setMinusPressed(true)}
@@ -72,7 +73,7 @@
         <ButtonIcon
           size={ButtonIconSize.Lg}
           iconName={IconName.Add}
-          isFloating
+          variant={ButtonIconVariant.Floating}
           style={tw.style(plusPressed ? 'bg-muted-pressed' : 'bg-muted')}
           iconProps={{ color: IconColor.IconDefault }}
           onPressIn={() => setPlusPressed(true)}

You can send follow-ups to this agent here.

Comment thread package.json
…laced components

Upgrade @metamask/design-system-react-native from ^0.10.0 to ^0.11.0 and
mark local component-library components that now have design system
replacements as @deprecated with migration links.

Breaking change fix: ButtonIcon isFloating prop replaced by variant enum
in 0.11.0 — migrated InputStepper to use ButtonIconVariant.Floating.

Newly deprecated components (available in DS since 0.11.0):
- MainActionButton
- TabEmptyState
- ButtonFilter
- BannerBase
- Banner (union — use BannerAlert from DS directly)
- BannerAlert
- BannerTip (unused, will be removed)
- BottomSheet
- BottomSheetDialog
- ListItem
- Pass controlled password value into RevealPrivateCredential TextField
- Use ButtonIcon isFloating instead of removed ButtonIconVariant in InputStepper

Made-with: Cursor
}

export interface PasswordEntryProps {
password: string;

@georgewrmarshall georgewrmarshall Mar 25, 2026

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.

Updating PasswordEntry from an uncontrolled component to a controlled component due to controlled only support from design system component

) : (
<Box twClassName="p-5 pb-0">
<PasswordEntry
password={password}

@georgewrmarshall georgewrmarshall Mar 25, 2026

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.

Update due to controlled input only change from design system library update

@github-actions

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

⏭️ Smart E2E selection skipped - draft PR

All E2E tests pre-selected.

View GitHub Actions results

size={ButtonIconSize.Lg}
iconName={IconName.Minus}
isFloating
variant={ButtonIconVariant.Floating}

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.

Updating breaking change isFloating has changed to variant={ButtonIconVariant.Floating}

@github-actions

Copy link
Copy Markdown
Contributor

E2E Fixture Validation — Schema is up to date
17 value mismatches detected (expected — fixture represents an existing user).
View details

@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
B Maintainability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

@georgewrmarshall

georgewrmarshall commented Mar 26, 2026

Copy link
Copy Markdown
Contributor Author

Quality Gate Failed Quality Gate failed

Failed conditions B Maintainability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

Catch issues before they fail your Quality Gate with our IDE extension SonarQube for IDE

SonarCloud is failing because of the added @deprecated JS doc tags and not because of code quality

Screenshot 2026-03-25 at 8 57 06 PM

@ieow ieow left a comment

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.

lgtm

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-7.72.0 Issue or pull request that will be included in release 7.72.0 risk-medium Moderate testing recommended · Possible bug introduction risk size-S skip-sonar-cloud Only used for bypassing sonar cloud when failures are not relevant to the changes. team-design-system All issues relating to design system in Mobile

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants