Release 21.0.0#938
Conversation
Updated changelogs for @metamask/design-system-react v0.9.0, @metamask/design-system-react-native v0.8.0, and @metamask/design-system-shared v0.2.0 to provide clear, human-readable descriptions of changes. Key updates: - Properly categorized BadgeStatus migration as BREAKING change - Added detailed migration notes for enum to string union migration - Documented ADR-0003 and ADR-0004 implementation - Moved RadioButton feature to Added section with description - Categorized BottomSheetFooter refactor in Changed section - Added BadgeStatus types to design-system-shared Added section All changes validated with yarn changelog:validate. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
📖 Storybook Preview |
…rsions Updated peer dependency versions to match the current package versions in the monorepo: - @metamask/design-system-tailwind-preset: ^0.6.0 → ^0.6.1 - @metamask/design-tokens: ^8.1.0 → ^8.2.0 This ensures consumers get the correct peer dependency warnings and install compatible versions. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
📖 Storybook Preview |
| - ⚠️ **Still works** but deprecated: Importing from component package will re-export from shared | ||
| - The const object values remain the same (e.g., `BadgeStatusStatus.Active` still works) | ||
| - String literals now work directly thanks to structural typing (e.g., `'active'` accepted where `BadgeStatusStatus.Active` is expected) | ||
| - This migration implements ADR-0003 (enum to string union migration) and ADR-0004 (centralized types architecture) |
There was a problem hiding this comment.
Breaking change is clearly documented with user-friendly guidance. Users can continue importing from their current packages with no migration required. The const object syntax remains the same (BadgeStatusStatus.Active) and string literals are now also accepted ('active'). ADR links provide architectural context for those interested in the technical decisions.
| "@metamask/design-system-tailwind-preset": "^0.6.0", | ||
| "@metamask/design-tokens": "^8.1.0", | ||
| "@metamask/design-system-tailwind-preset": "^0.6.1", | ||
| "@metamask/design-tokens": "^8.2.0", |
There was a problem hiding this comment.
Peer dependencies updated to match current package versions in the monorepo. This ensures consumers receive correct dependency warnings and install compatible versions of design-system-tailwind-preset (0.6.1) and design-tokens (8.2.0).
|
|
||
| ### Added | ||
|
|
||
| - Added `RadioButton` component for radio button form controls ([#926](https://github.com/MetaMask/metamask-design-system/pull/926)) |
There was a problem hiding this comment.
RadioButton component is the primary new feature in this release. Includes comprehensive accessibility support (role and accessibilityState) and flexible state handling (checked, disabled, read-only, danger) for React Native form controls.
| - Refactored `BottomSheetFooter` component location for better organization ([#933](https://github.com/MetaMask/metamask-design-system/pull/933)) | ||
| - Moved from `BottomSheets/BottomSheetFooter/` to `BottomSheetFooter/` | ||
| - Updated import paths and Storybook title | ||
| - No breaking changes - all imports from package entry point continue to work |
There was a problem hiding this comment.
BottomSheetFooter refactor is non-breaking despite file location changes. Package entry point exports remain stable, so all consumer imports continue to work without modification. Probably not that valuable in the changelog but oh well
| - `BadgeStatusSize` const object with derived string union type for size variants (`sm`, `md`, `lg`) | ||
| - `BadgeStatusPropsShared` type interface for shared component props | ||
| - Implements ADR-0003 (enum to string union migration) and ADR-0004 (centralized types architecture) | ||
| - Enables structural typing - both const object values (`BadgeStatusStatus.Active`) and string literals (`'active'`) are now accepted |
There was a problem hiding this comment.
Centralized types package establishes a shared foundation for BadgeStatus types consumed by both React and React Native packages. Users continue importing from their platform-specific packages, but the underlying types are now unified. This pattern will be applied to future component migrations, reducing duplication and ensuring consistency.
| { | ||
| "name": "@metamask/design-system-shared", | ||
| "version": "0.1.3", | ||
| "version": "0.2.0", |
There was a problem hiding this comment.
Version bump to 0.2.0 follows semantic versioning for minor release. The new BadgeStatus types are additive features that maintain backward compatibility with the centralized architecture.
Updated changelogs to be more user-focused and less confusing: - Removed internal architecture details about design-system-shared - Clarified that users should continue importing from their current packages (design-system-react or design-system-react-native) - Simplified migration guidance to focus on "no migration required" - Added note that we're still evaluating best practices for const objects vs string literals Users don't need to know about internal package structure - they should just continue using the packages as usual. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
Added links to ADR-0003 and ADR-0004 in changelogs to provide architectural context for the enum to string union migration. Maintains user-friendly migration guidance while linking to deeper technical documentation for those interested. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
📖 Storybook Preview |
📖 Storybook Preview |
This reverts commit adee3a9 to redo the release without peer dependency updates that caused the release workflow to fail. The release will be resubmitted with: - Version bumps - Changelog updates - No peer dependency changes to avoid yarn.lock modifications 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
## Summary Reverts Release 21.0.0 (#938) to redo the release without peer dependency updates that caused the release workflow to fail. ## Issue The release workflow failed with: ``` YN0028: The lockfile would have been modified by this install, which is explicitly forbidden. ``` This was caused by peer dependency updates in `@metamask/design-system-react`: - `@metamask/design-system-tailwind-preset`: ^0.6.0 → ^0.6.1 - `@metamask/design-tokens`: ^8.1.0 → ^8.2.0 ## Resolution This PR reverts the release merge to allow resubmission without the peer dependency changes. The new release will include: - ✅ Version bumps - ✅ Changelog updates - ❌ No peer dependency changes (to avoid yarn.lock modifications in CI) ## Next Steps After this revert is merged, a new Release 21.0.0 PR will be created with only the necessary version and changelog updates. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com>
## Release 21.0.0 This release includes breaking changes, new features, and refactoring improvements across the design system packages. **Note:** This is a corrected resubmission of #938 without peer dependency updates that caused yarn.lock modifications in CI. ### 📦 Package Versions - `@metamask/design-system-react`: **0.9.0** - `@metamask/design-system-react-native`: **0.8.0** - `@metamask/design-system-shared`: **0.2.0** ###⚠️ Breaking Changes #### BadgeStatus Migration to String Union Types (#912) The `BadgeStatus` component has been migrated from TypeScript enums to string union types with const objects: **What Changed:** - `BadgeStatusStatus` and `BadgeStatusSize` enums replaced with const objects - **No migration required** - continue importing from your current package - Const object values remain the same: `BadgeStatusStatus.Active` still works - String literals now also accepted: `'active'` works where `BadgeStatusStatus.Active` is expected - We are still evaluating best practices for const objects vs string literals **Affected Packages:** - `@metamask/design-system-react@0.9.0` - `@metamask/design-system-react-native@0.8.0` - `@metamask/design-system-shared@0.2.0` **Learn More:** - [ADR-0003: Enum to String Union Migration](https://github.com/MetaMask/decisions/blob/main/decisions/design-system/0003-enum-to-string-union-migration.md) - [ADR-0004: Centralized Types Architecture](https://github.com/MetaMask/decisions/blob/main/decisions/design-system/0004-centralized-types-architecture.md) ### ✨ New Features #### RadioButton Component (#926) - Added `RadioButton` component to React Native - Supports checked, disabled, read-only, and danger states - Full accessibility support with `role="radio"` and `accessibilityState` - Optional label rendering ### 🔨 Refactoring #### BottomSheetFooter Reorganization (#933) - Moved `BottomSheetFooter` from `BottomSheets/BottomSheetFooter/` to `BottomSheetFooter/` - Updated import paths and Storybook title - No breaking changes - all package imports continue to work ### ✅ Checklist - [x] All changelogs updated with human-readable descriptions - [x] Breaking changes clearly documented - [x] Changelog validation passed (`yarn changelog:validate`) - [x] All packages built successfully - [x] Migration paths provided for breaking changes - [x] No peer dependency changes to avoid yarn.lock modifications 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > This PR only changes package versions and changelog entries; no runtime code is modified. > > **Overview** > Bumps the monorepo release to `21.0.0` and updates package versions for `@metamask/design-system-react` to `0.9.0`, `@metamask/design-system-react-native` to `0.8.0`, and `@metamask/design-system-shared` to `0.2.0`. > > Updates the React and React Native changelogs to document a **breaking** `BadgeStatus` type migration (enums → const objects + derived string unions), plus RN-only release notes for adding `RadioButton` and a `BottomSheetFooter` location refactor; also updates changelog compare links to start from the new versions. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 35569fb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude <noreply@anthropic.com>
## Release 21.0.0 This release includes breaking changes, new features, and refactoring improvements across the design system packages. ### 📦 Package Versions - `@metamask/design-system-react`: **0.9.0** - `@metamask/design-system-react-native`: **0.8.0** - `@metamask/design-system-shared`: **0.2.0** ###⚠️ Breaking Changes #### BadgeStatus Migration to String Union Types (#912) The `BadgeStatus` component has been migrated from TypeScript enums to string union types with const objects, implementing ADR-0003 and ADR-0004: **What Changed:** - `BadgeStatusStatus` and `BadgeStatusSize` enums replaced with const objects - Types now centralized in `@metamask/design-system-shared` package - Enables structural typing - both const values and string literals now accepted **Migration Required:** - ✅ **Recommended**: Import from shared package ```typescript import { BadgeStatusStatus } from '@metamask/design-system-shared' ``` -⚠️ **Still works** but deprecated: Importing from component packages will re-export from shared - Const object values remain the same: `BadgeStatusStatus.Active` still works - String literals now supported: `'active'` accepted where `BadgeStatusStatus.Active` is expected **Affected Packages:** - `@metamask/design-system-react@0.9.0` - `@metamask/design-system-react-native@0.8.0` - `@metamask/design-system-shared@0.2.0` ### ✨ New Features #### RadioButton Component (#926) - Added `RadioButton` component to React Native - Supports checked, disabled, read-only, and danger states - Full accessibility support with `role="radio"` and `accessibilityState` - Optional label rendering ### 🔨 Refactoring #### BottomSheetFooter Reorganization (#933) - Moved `BottomSheetFooter` from `BottomSheets/BottomSheetFooter/` to `BottomSheetFooter/` - Updated import paths and Storybook title - No breaking changes - all package imports continue to work ### 📚 References - ADR-0003: Enum to String Union Migration - ADR-0004: Centralized Types Architecture - [MetaMask Decisions Repository](https://github.com/MetaMask/decisions) ### ✅ Checklist - [x] All changelogs updated with human-readable descriptions - [x] Breaking changes clearly documented - [x] Changelog validation passed (`yarn changelog:validate`) - [x] All packages built successfully - [x] Migration paths provided for breaking changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > Release/version bumps are low risk, but the documented **breaking** `BadgeStatus` type export change and updated peer dependency ranges can cause downstream TypeScript/build breakages for consumers. > > **Overview** > Bumps the monorepo release to `21.0.0` and publishes new package versions: `@metamask/design-system-react@0.9.0`, `@metamask/design-system-react-native@0.8.0`, and `@metamask/design-system-shared@0.2.0`. > > Updates changelogs to document a **breaking** `BadgeStatus` type migration (enums → const objects + derived string unions, centralized in `design-system-shared`), plus a React Native `RadioButton` addition and a `BottomSheetFooter` re-org. Also bumps `design-system-react` peer dependency ranges for `@metamask/design-system-tailwind-preset` and `@metamask/design-tokens`. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 6a887c7. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude <noreply@anthropic.com>
## Summary Reverts Release 21.0.0 (#938) to redo the release without peer dependency updates that caused the release workflow to fail. ## Issue The release workflow failed with: ``` YN0028: The lockfile would have been modified by this install, which is explicitly forbidden. ``` This was caused by peer dependency updates in `@metamask/design-system-react`: - `@metamask/design-system-tailwind-preset`: ^0.6.0 → ^0.6.1 - `@metamask/design-tokens`: ^8.1.0 → ^8.2.0 ## Resolution This PR reverts the release merge to allow resubmission without the peer dependency changes. The new release will include: - ✅ Version bumps - ✅ Changelog updates - ❌ No peer dependency changes (to avoid yarn.lock modifications in CI) ## Next Steps After this revert is merged, a new Release 21.0.0 PR will be created with only the necessary version and changelog updates. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Claude <noreply@anthropic.com>
## Release 21.0.0 This release includes breaking changes, new features, and refactoring improvements across the design system packages. **Note:** This is a corrected resubmission of #938 without peer dependency updates that caused yarn.lock modifications in CI. ### 📦 Package Versions - `@metamask/design-system-react`: **0.9.0** - `@metamask/design-system-react-native`: **0.8.0** - `@metamask/design-system-shared`: **0.2.0** ###⚠️ Breaking Changes #### BadgeStatus Migration to String Union Types (#912) The `BadgeStatus` component has been migrated from TypeScript enums to string union types with const objects: **What Changed:** - `BadgeStatusStatus` and `BadgeStatusSize` enums replaced with const objects - **No migration required** - continue importing from your current package - Const object values remain the same: `BadgeStatusStatus.Active` still works - String literals now also accepted: `'active'` works where `BadgeStatusStatus.Active` is expected - We are still evaluating best practices for const objects vs string literals **Affected Packages:** - `@metamask/design-system-react@0.9.0` - `@metamask/design-system-react-native@0.8.0` - `@metamask/design-system-shared@0.2.0` **Learn More:** - [ADR-0003: Enum to String Union Migration](https://github.com/MetaMask/decisions/blob/main/decisions/design-system/0003-enum-to-string-union-migration.md) - [ADR-0004: Centralized Types Architecture](https://github.com/MetaMask/decisions/blob/main/decisions/design-system/0004-centralized-types-architecture.md) ### ✨ New Features #### RadioButton Component (#926) - Added `RadioButton` component to React Native - Supports checked, disabled, read-only, and danger states - Full accessibility support with `role="radio"` and `accessibilityState` - Optional label rendering ### 🔨 Refactoring #### BottomSheetFooter Reorganization (#933) - Moved `BottomSheetFooter` from `BottomSheets/BottomSheetFooter/` to `BottomSheetFooter/` - Updated import paths and Storybook title - No breaking changes - all package imports continue to work ### ✅ Checklist - [x] All changelogs updated with human-readable descriptions - [x] Breaking changes clearly documented - [x] Changelog validation passed (`yarn changelog:validate`) - [x] All packages built successfully - [x] Migration paths provided for breaking changes - [x] No peer dependency changes to avoid yarn.lock modifications 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > This PR only changes package versions and changelog entries; no runtime code is modified. > > **Overview** > Bumps the monorepo release to `21.0.0` and updates package versions for `@metamask/design-system-react` to `0.9.0`, `@metamask/design-system-react-native` to `0.8.0`, and `@metamask/design-system-shared` to `0.2.0`. > > Updates the React and React Native changelogs to document a **breaking** `BadgeStatus` type migration (enums → const objects + derived string unions), plus RN-only release notes for adding `RadioButton` and a `BottomSheetFooter` location refactor; also updates changelog compare links to start from the new versions. > > <sup>Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 35569fb. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude <noreply@anthropic.com>
Release 21.0.0
This release includes breaking changes, new features, and refactoring improvements across the design system packages.
📦 Package Versions
@metamask/design-system-react: 0.9.0@metamask/design-system-react-native: 0.8.0@metamask/design-system-shared: 0.2.0BadgeStatus Migration to String Union Types (#912)
The
BadgeStatuscomponent has been migrated from TypeScript enums to string union types with const objects, implementing ADR-0003 and ADR-0004:What Changed:
BadgeStatusStatusandBadgeStatusSizeenums replaced with const objects@metamask/design-system-sharedpackageMigration Required:
BadgeStatusStatus.Activestill works'active'accepted whereBadgeStatusStatus.Activeis expectedAffected Packages:
@metamask/design-system-react@0.9.0@metamask/design-system-react-native@0.8.0@metamask/design-system-shared@0.2.0✨ New Features
RadioButton Component (#926)
RadioButtoncomponent to React Nativerole="radio"andaccessibilityState🔨 Refactoring
BottomSheetFooter Reorganization (#933)
BottomSheetFooterfromBottomSheets/BottomSheetFooter/toBottomSheetFooter/📚 References
✅ Checklist
yarn changelog:validate)🤖 Generated with Claude Code
Co-Authored-By: Claude noreply@anthropic.com
Note
Medium Risk
Release/version bumps are low risk, but the documented breaking
BadgeStatustype export change and updated peer dependency ranges can cause downstream TypeScript/build breakages for consumers.Overview
Bumps the monorepo release to
21.0.0and publishes new package versions:@metamask/design-system-react@0.9.0,@metamask/design-system-react-native@0.8.0, and@metamask/design-system-shared@0.2.0.Updates changelogs to document a breaking
BadgeStatustype migration (enums → const objects + derived string unions, centralized indesign-system-shared), plus a React NativeRadioButtonaddition and aBottomSheetFooterre-org. Also bumpsdesign-system-reactpeer dependency ranges for@metamask/design-system-tailwind-presetand@metamask/design-tokens.Written by Cursor Bugbot for commit 6a887c7. This will update automatically on new commits. Configure here.