Skip to content

Release 27.0.0#1018

Merged
georgewrmarshall merged 5 commits into
mainfrom
release/27.0.0
Mar 30, 2026
Merged

Release 27.0.0#1018
georgewrmarshall merged 5 commits into
mainfrom
release/27.0.0

Conversation

@georgewrmarshall

@georgewrmarshall georgewrmarshall commented Mar 30, 2026

Copy link
Copy Markdown
Contributor

Release 27.0.0

Release 27.0.0 updates the semibold typography tokens, ensures BadgeWrapper enumerations now reuse const-object + union typings, and syncs the Button migration guidance across changelogs and MIGRATION docs so every surface tells the same story.

📦 Package Versions

  • @metamask/design-system-shared: 0.6.0
  • @metamask/design-system-react: 0.13.0
  • @metamask/design-system-react-native: 0.13.0

🔄 Shared Type Updates (0.6.0)

Component Type Additions (#1014)

  • BadgeWrapperPosition, BadgeWrapperPositionAnchorShape, BadgeWrapperCustomPosition, and BadgeWrapperPropsShared now derive from const-object + string-union definitions per ADR-0003/ADR-0004; React and React Native continue to re-export the same names, so import paths stay rooted at the platform entry points while the shared package hosts the canonical typings.
  • This keeps the type surface aligned between platforms and makes future shared-type updates easier to ship without duplicating runtime enums.

🌐 React Web Updates (0.13.0)

Added

  • None.

Changed

Fixed

  • None.

📱 React Native Updates (0.13.0)

Added

  • None.

Changed

Fixed

  • None.

⚠️ Breaking Changes

Typography semantics (Both Platforms)

What Changed:

  • FontWeight.Bold and Text now resolve to weight 600, and the tokens/storybook assets switched to Geist-SemiBold so the bold slot emits semibold at runtime.

Migration:

// Before (v0.12.x)
<Text weight={FontWeight.Bold}>...</Text>
// After (v0.13.0)
import {
  Text,
  FontWeight,
} from '@metamask/design-system-react';

<Text weight={FontWeight.Bold}>...</Text>

(Consumers only need to update any font-weight: 700 references or bundled Geist-Bold assets; the API surface stays the same.)

Impact:

  • Affects any code that assumes FontWeight.Bold resolves to 700 or bundles the retired Geist-Bold files. See MIGRATION.md#from-version-0120-to-0130.

BadgeWrapper typings (Both Platforms)

What Changed:

  • BadgeWrapperPosition, BadgeWrapperPositionAnchorShape, BadgeWrapperCustomPosition, and BadgeWrapperPropsShared now come from const objects + string unions defined in @metamask/design-system-shared. The platform bundles re-export the same names so existing imports keep working, but the type shape is now string-literal friendly per ADR-0003/ADR-0004.

Migration:

// Before (enum)
import { BadgeWrapperPosition } from '@metamask/design-system-react';

const position: BadgeWrapperPosition = BadgeWrapperPosition.TopRight;
// After (const-object + union)
import {
  BadgeWrapperPosition,
} from '@metamask/design-system-react';

const position: (typeof BadgeWrapperPosition)[keyof typeof BadgeWrapperPosition] = 'top-right';

Impact:

  • Ensures React and React Native share the same canonical definitions while preserving the original import paths; no import-path changes are required.

✅ Checklist

  • Changelogs updated with human-readable descriptions
  • Changelog validation passed (yarn changelog:validate)
  • Version bumps follow semantic versioning
    • design-system-shared: patch (0.5.0 → 0.6.0) – shared type alignment for BadgeWrapper values
    • design-system-react: minor (0.12.0 → 0.13.0) – semibold typography semantics and linked Button migration docs
    • design-system-react-native: minor (0.12.0 → 0.13.0) – mirrors React’s semibold/type migration guidance
  • Breaking changes documented with migration guidance
  • Migration guides updated with before/after examples (if breaking changes)
  • PR references included in changelog entries

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've reviewed the Reviewing Release PRs guide
  • Package versions follow semantic versioning
  • Changelog entries are consumer-facing (not commit message regurgitation)
  • Breaking changes are documented in MIGRATION.md with examples
  • All unreleased changes are accounted for in changelogs

Note

Low Risk
Primarily version bumps and documentation/changelog updates; functional code behavior is not changed in this diff beyond dependency version alignment.

Overview
Bumps the monorepo release to 27.0.0 and increments package versions for @metamask/design-system-react/react-native to 0.13.0, @metamask/design-system-shared to 0.6.0, @metamask/design-system-twrnc-preset to 0.4.0, and @metamask/design-tokens to 8.3.0.

Updates changelogs and migration guides to document the release’s consumer-facing changes, including the semantic bold weight shift to 600/Geist-SemiBold, the BadgeWrapper type move to const-object + string-union definitions, and synchronized Button migration guidance. Also aligns React Native’s peer dependency on @metamask/design-system-twrnc-preset to ^0.4.0 (and yarn.lock accordingly).

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

@georgewrmarshall georgewrmarshall requested a review from a team as a code owner March 30, 2026 21:57
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview


### Typography: semantic bold is now semibold (600)

- `FontWeight.Bold` and the `Text` component now treat bold as weight 600 across both CSS and Tailwind enums; the Storybook font loader swapped the retired `Geist-Bold` assets for the new `Geist-SemiBold` files, and the design tokens now export `--font-weight-bold: 600`.

@georgewrmarshall georgewrmarshall Mar 30, 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.

This migration note is intentionally explicit about keeping the font-bold enum utility name unchanged while redefining the semantic weight to 600, so consumers can update font assets without a broad API rename. That separation limits breakage to font configuration and token expectations.

## From version 0.12.0 to 0.13.0

### Typography: semantic bold is now semibold (600)

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.

Documenting FontWeight.Bold at 600 clarifies that semantic bold now maps to the Geist-SemiBold assets, so teams know to update hardcoded font-weight: 700 references instead of relying on the old bold files. This ties back to the 0.13.0 changelog and the tokens migration steps, keeping the release note and migration guide in sync.


### Changed

- Added shared `BadgeWrapper` const objects and props (`BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`, `BadgeWrapperCustomPosition`, `BadgeWrapperPropsShared`) so React and React Native now consume a single source of truth for the ADR-0003/ADR-0004 types; both platform packages re-export the shared definitions so existing imports keep working even as the shared package remains the canonical source. See the [design-system-react migration guide](../design-system-react/MIGRATION.md#from-version-0120-to-0130) for additional guidance ([#1014](https://github.com/MetaMask/metamask-design-system/pull/1014)).

@georgewrmarshall georgewrmarshall Mar 30, 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.

This changelog entry explains why BadgeWrapper definitions moved to @metamask/design-system-shared: it establishes one canonical const-object source for both web and native packages. Keeping re-exports in platform packages avoids import-path churn while still completing the ADR-0003/0004 type migration.

@georgewrmarshall georgewrmarshall marked this pull request as draft March 30, 2026 22:15
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview

@georgewrmarshall georgewrmarshall marked this pull request as ready for review March 30, 2026 22:29

### Fixed

- Restored a visible keyboard focus outline for `Checkbox` keyboard users by making the hidden input a Tailwind `peer` and mirroring its `peer-focus-visible` state onto the visible container so Tab navigation shows a clear indicator ([#1008](https://github.com/MetaMask/metamask-design-system/pull/1008)).

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.

Including this in the release changelog makes the focus-visible restoration discoverable for teams tracking accessibility regressions between versions. The note explains why the fix used peer-focus-visible wiring instead of visual-only style tweaks.

### Migration steps

- Replace `@font-face` declarations, font imports, and any asset references from `Geist-Bold`/`Geist-BoldItalic` to `Geist-SemiBold`/`Geist-SemiBoldItalic`, and set `font-weight: 600`.
- Update code or styles that assumed `fontWeights.bold === '700'` to read from `fontWeights.bold` directly so they automatically pick up the new value.

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.

We explicitly tell consumers to read fontWeights.bold instead of hardcoding 700 so future token adjustments do not trigger another migration across product code. This keeps typography behavior driven by token contracts rather than literal values.


### BadgeWrapper types now use const-object + union definitions

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`, `BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now come from const objects annotated `as const`, which produce string union types rather than TypeScript enums (ADR-0003/ADR-0004). The shared package defines the canonical values and the platform entry points keep re-exporting those names so React Native consumers use the same import paths they already rely on.

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.

This section calls out the ADR-0003/0004 move so consumers understand the enum-to-string-union change is intentional for cross-platform type parity, not a refactor side effect. Re-exporting from platform packages keeps existing imports stable while shared becomes the canonical definition.

},
"peerDependencies": {
"@metamask/design-system-twrnc-preset": "^0.3.0",
"@metamask/design-system-twrnc-preset": "^0.4.0",

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 peer dependency bump is intentional because React Native consumers need the 0.4.0 preset mapping where default-bold resolves to Geist-SemiBold assets. Keeping the older range would allow installs that still point at retired bold font names.

@georgewrmarshall georgewrmarshall enabled auto-merge (squash) March 30, 2026 22:30
@github-actions

Copy link
Copy Markdown
Contributor

📖 Storybook Preview

@georgewrmarshall georgewrmarshall merged commit cb044b1 into main Mar 30, 2026
44 checks passed
@georgewrmarshall georgewrmarshall deleted the release/27.0.0 branch March 30, 2026 22:38
georgewrmarshall added a commit that referenced this pull request Apr 1, 2026
## Release 27.0.0

Release 27.0.0 updates the semibold typography tokens, ensures
BadgeWrapper enumerations now reuse const-object + union typings, and
syncs the Button migration guidance across changelogs and MIGRATION docs
so every surface tells the same story.

### 📦 Package Versions

- `@metamask/design-system-shared`: **0.6.0**
- `@metamask/design-system-react`: **0.13.0**
- `@metamask/design-system-react-native`: **0.13.0**

### 🔄 Shared Type Updates (0.6.0)

#### Component Type Additions (#1014)

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now derive
from const-object + string-union definitions per ADR-0003/ADR-0004;
React and React Native continue to re-export the same names, so import
paths stay rooted at the platform entry points while the shared package
hosts the canonical typings.
- This keeps the type surface aligned between platforms and makes future
shared-type updates easier to ship without duplicating runtime enums.

### 🌐 React Web Updates (0.13.0)

#### Added

- None.

#### Changed

- **BREAKING:** `FontWeight.Bold` and the `Text` component now map bold
to weight 600; the Storybook font loader switched to the
`Geist-SemiBold` assets and the tokens emit `--font-weight-bold: 600`,
so update any hardcoded `font-weight: 700` references as documented in
`MIGRATION.md#from-version-0120-to-0130` (#1017).
- The Button migration guide now spells out the prop, variant, and size
mappings for both web and mobile so the before/after story is easy to
follow (`MIGRATION.md#button-component`, #999).

#### Fixed

- None.

### 📱 React Native Updates (0.13.0)

#### Added

- None.

#### Changed

- Shared Button migration guidance now lives in
`MIGRATION.md#button-component` so React Native can mirror the same
prop/variant/size story (#999).

#### Fixed

- None.

### ⚠️ Breaking Changes

#### Typography semantics (Both Platforms)

**What Changed:**

- `FontWeight.Bold` and `Text` now resolve to weight 600, and the
tokens/storybook assets switched to `Geist-SemiBold` so the bold slot
emits semibold at runtime.

**Migration:**

```tsx
// Before (v0.12.x)
<Text weight={FontWeight.Bold}>...</Text>
```
```tsx
// After (v0.13.0)
import {
  Text,
  FontWeight,
} from '@metamask/design-system-react';

<Text weight={FontWeight.Bold}>...</Text>
```

(Consumers only need to update any `font-weight: 700` references or
bundled `Geist-Bold` assets; the API surface stays the same.)

**Impact:**

- Affects any code that assumes `FontWeight.Bold` resolves to 700 or
bundles the retired `Geist-Bold` files. See
`MIGRATION.md#from-version-0120-to-0130`.

#### BadgeWrapper typings (Both Platforms)

**What Changed:**

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now come
from const objects + string unions defined in
`@metamask/design-system-shared`. The platform bundles re-export the
same names so existing imports keep working, but the type shape is now
string-literal friendly per ADR-0003/ADR-0004.

**Migration:**

```ts
// Before (enum)
import { BadgeWrapperPosition } from '@metamask/design-system-react';

const position: BadgeWrapperPosition = BadgeWrapperPosition.TopRight;
```
```ts
// After (const-object + union)
import {
  BadgeWrapperPosition,
} from '@metamask/design-system-react';

const position: (typeof BadgeWrapperPosition)[keyof typeof BadgeWrapperPosition] = 'top-right';
```

**Impact:**

- Ensures React and React Native share the same canonical definitions
while preserving the original import paths; no import-path changes are
required.

### ✅ Checklist

- [x] Changelogs updated with human-readable descriptions
- [ ] Changelog validation passed (`yarn changelog:validate`)
- [x] Version bumps follow semantic versioning
- [x] design-system-shared: patch (0.5.0 → 0.6.0) – shared type
alignment for BadgeWrapper values
- [x] design-system-react: minor (0.12.0 → 0.13.0) – semibold typography
semantics and linked Button migration docs
- [x] design-system-react-native: minor (0.12.0 → 0.13.0) – mirrors
React’s semibold/type migration guidance
- [x] Breaking changes documented with migration guidance
- [x] Migration guides updated with before/after examples (if breaking
changes)
- [x] PR references included in changelog entries

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs)
- [ ] I've reviewed the [Release
Workflow](./.cursor/rules/release-workflow.md) cursor rule
- [ ] All tests pass (`yarn build && yarn test && yarn lint`)
- [ ] Changelog validation passes (`yarn changelog:validate`)

## **Pre-merge reviewer checklist**

- [ ] I've reviewed the [Reviewing Release
PRs](./docs/reviewing-release-prs.md) guide
- [ ] Package versions follow semantic versioning
- [ ] Changelog entries are consumer-facing (not commit message
regurgitation)
- [ ] Breaking changes are documented in MIGRATION.md with examples
- [ ] All unreleased changes are accounted for in changelogs

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Medium risk because this is a release/version bump that ships breaking
typography weight changes and type-shape updates that can affect
consumers’ styling and TypeScript usage. Repo changes are mostly
metadata/docs, but downstream upgrades may require font asset and
`font-weight` updates.
> 
> **Overview**
> **Release bump to `27.0.0`** with package version updates
(`design-system-react`/`react-native` → `0.13.0`, `design-system-shared`
→ `0.6.0`, `design-tokens` → `8.3.0`, `design-system-twrnc-preset` →
`0.4.0`).
> 
> Documents and publishes the **typography semantic change** where
`FontWeight.Bold`/`--font-weight-bold` now map to `600` and font
mappings move from `Geist-Bold*` to `Geist-SemiBold*`, plus the
**`BadgeWrapper` type migration** to `as const` + string-union
definitions centralized in `design-system-shared`. Migration
guides/changelogs are updated accordingly, and React Native peer deps
are updated to require `@metamask/design-system-twrnc-preset@^0.4.0`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7ad09f1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
georgewrmarshall added a commit that referenced this pull request Apr 6, 2026
## Release 27.0.0

Release 27.0.0 updates the semibold typography tokens, ensures
BadgeWrapper enumerations now reuse const-object + union typings, and
syncs the Button migration guidance across changelogs and MIGRATION docs
so every surface tells the same story.

### 📦 Package Versions

- `@metamask/design-system-shared`: **0.6.0**
- `@metamask/design-system-react`: **0.13.0**
- `@metamask/design-system-react-native`: **0.13.0**

### 🔄 Shared Type Updates (0.6.0)

#### Component Type Additions (#1014)

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now derive
from const-object + string-union definitions per ADR-0003/ADR-0004;
React and React Native continue to re-export the same names, so import
paths stay rooted at the platform entry points while the shared package
hosts the canonical typings.
- This keeps the type surface aligned between platforms and makes future
shared-type updates easier to ship without duplicating runtime enums.

### 🌐 React Web Updates (0.13.0)

#### Added

- None.

#### Changed

- **BREAKING:** `FontWeight.Bold` and the `Text` component now map bold
to weight 600; the Storybook font loader switched to the
`Geist-SemiBold` assets and the tokens emit `--font-weight-bold: 600`,
so update any hardcoded `font-weight: 700` references as documented in
`MIGRATION.md#from-version-0120-to-0130` (#1017).
- The Button migration guide now spells out the prop, variant, and size
mappings for both web and mobile so the before/after story is easy to
follow (`MIGRATION.md#button-component`, #999).

#### Fixed

- None.

### 📱 React Native Updates (0.13.0)

#### Added

- None.

#### Changed

- Shared Button migration guidance now lives in
`MIGRATION.md#button-component` so React Native can mirror the same
prop/variant/size story (#999).

#### Fixed

- None.

### ⚠️ Breaking Changes

#### Typography semantics (Both Platforms)

**What Changed:**

- `FontWeight.Bold` and `Text` now resolve to weight 600, and the
tokens/storybook assets switched to `Geist-SemiBold` so the bold slot
emits semibold at runtime.

**Migration:**

```tsx
// Before (v0.12.x)
<Text weight={FontWeight.Bold}>...</Text>
```
```tsx
// After (v0.13.0)
import {
  Text,
  FontWeight,
} from '@metamask/design-system-react';

<Text weight={FontWeight.Bold}>...</Text>
```

(Consumers only need to update any `font-weight: 700` references or
bundled `Geist-Bold` assets; the API surface stays the same.)

**Impact:**

- Affects any code that assumes `FontWeight.Bold` resolves to 700 or
bundles the retired `Geist-Bold` files. See
`MIGRATION.md#from-version-0120-to-0130`.

#### BadgeWrapper typings (Both Platforms)

**What Changed:**

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now come
from const objects + string unions defined in
`@metamask/design-system-shared`. The platform bundles re-export the
same names so existing imports keep working, but the type shape is now
string-literal friendly per ADR-0003/ADR-0004.

**Migration:**

```ts
// Before (enum)
import { BadgeWrapperPosition } from '@metamask/design-system-react';

const position: BadgeWrapperPosition = BadgeWrapperPosition.TopRight;
```
```ts
// After (const-object + union)
import {
  BadgeWrapperPosition,
} from '@metamask/design-system-react';

const position: (typeof BadgeWrapperPosition)[keyof typeof BadgeWrapperPosition] = 'top-right';
```

**Impact:**

- Ensures React and React Native share the same canonical definitions
while preserving the original import paths; no import-path changes are
required.

### ✅ Checklist

- [x] Changelogs updated with human-readable descriptions
- [ ] Changelog validation passed (`yarn changelog:validate`)
- [x] Version bumps follow semantic versioning
- [x] design-system-shared: patch (0.5.0 → 0.6.0) – shared type
alignment for BadgeWrapper values
- [x] design-system-react: minor (0.12.0 → 0.13.0) – semibold typography
semantics and linked Button migration docs
- [x] design-system-react-native: minor (0.12.0 → 0.13.0) – mirrors
React’s semibold/type migration guidance
- [x] Breaking changes documented with migration guidance
- [x] Migration guides updated with before/after examples (if breaking
changes)
- [x] PR references included in changelog entries

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs)
- [ ] I've reviewed the [Release
Workflow](./.cursor/rules/release-workflow.md) cursor rule
- [ ] All tests pass (`yarn build && yarn test && yarn lint`)
- [ ] Changelog validation passes (`yarn changelog:validate`)

## **Pre-merge reviewer checklist**

- [ ] I've reviewed the [Reviewing Release
PRs](./docs/reviewing-release-prs.md) guide
- [ ] Package versions follow semantic versioning
- [ ] Changelog entries are consumer-facing (not commit message
regurgitation)
- [ ] Breaking changes are documented in MIGRATION.md with examples
- [ ] All unreleased changes are accounted for in changelogs

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Medium risk because this is a release/version bump that ships breaking
typography weight changes and type-shape updates that can affect
consumers’ styling and TypeScript usage. Repo changes are mostly
metadata/docs, but downstream upgrades may require font asset and
`font-weight` updates.
> 
> **Overview**
> **Release bump to `27.0.0`** with package version updates
(`design-system-react`/`react-native` → `0.13.0`, `design-system-shared`
→ `0.6.0`, `design-tokens` → `8.3.0`, `design-system-twrnc-preset` →
`0.4.0`).
> 
> Documents and publishes the **typography semantic change** where
`FontWeight.Bold`/`--font-weight-bold` now map to `600` and font
mappings move from `Geist-Bold*` to `Geist-SemiBold*`, plus the
**`BadgeWrapper` type migration** to `as const` + string-union
definitions centralized in `design-system-shared`. Migration
guides/changelogs are updated accordingly, and React Native peer deps
are updated to require `@metamask/design-system-twrnc-preset@^0.4.0`.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7ad09f1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
georgewrmarshall added a commit that referenced this pull request Apr 27, 2026
Release 27.0.0 updates the semibold typography tokens, ensures
BadgeWrapper enumerations now reuse const-object + union typings, and
syncs the Button migration guidance across changelogs and MIGRATION docs
so every surface tells the same story.

- `@metamask/design-system-shared`: **0.6.0**
- `@metamask/design-system-react`: **0.13.0**
- `@metamask/design-system-react-native`: **0.13.0**

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now derive
from const-object + string-union definitions per ADR-0003/ADR-0004;
React and React Native continue to re-export the same names, so import
paths stay rooted at the platform entry points while the shared package
hosts the canonical typings.
- This keeps the type surface aligned between platforms and makes future
shared-type updates easier to ship without duplicating runtime enums.

- None.

- **BREAKING:** `FontWeight.Bold` and the `Text` component now map bold
to weight 600; the Storybook font loader switched to the
`Geist-SemiBold` assets and the tokens emit `--font-weight-bold: 600`,
so update any hardcoded `font-weight: 700` references as documented in
`MIGRATION.md#from-version-0120-to-0130` (#1017).
- The Button migration guide now spells out the prop, variant, and size
mappings for both web and mobile so the before/after story is easy to
follow (`MIGRATION.md#button-component`, #999).

- None.

- None.

- Shared Button migration guidance now lives in
`MIGRATION.md#button-component` so React Native can mirror the same
prop/variant/size story (#999).

- None.

**What Changed:**

- `FontWeight.Bold` and `Text` now resolve to weight 600, and the
tokens/storybook assets switched to `Geist-SemiBold` so the bold slot
emits semibold at runtime.

**Migration:**

```tsx
// Before (v0.12.x)
<Text weight={FontWeight.Bold}>...</Text>
```
```tsx
// After (v0.13.0)
import {
  Text,
  FontWeight,
} from '@metamask/design-system-react';

<Text weight={FontWeight.Bold}>...</Text>
```

(Consumers only need to update any `font-weight: 700` references or
bundled `Geist-Bold` assets; the API surface stays the same.)

**Impact:**

- Affects any code that assumes `FontWeight.Bold` resolves to 700 or
bundles the retired `Geist-Bold` files. See
`MIGRATION.md#from-version-0120-to-0130`.

**What Changed:**

- `BadgeWrapperPosition`, `BadgeWrapperPositionAnchorShape`,
`BadgeWrapperCustomPosition`, and `BadgeWrapperPropsShared` now come
from const objects + string unions defined in
`@metamask/design-system-shared`. The platform bundles re-export the
same names so existing imports keep working, but the type shape is now
string-literal friendly per ADR-0003/ADR-0004.

**Migration:**

```ts
// Before (enum)
import { BadgeWrapperPosition } from '@metamask/design-system-react';

const position: BadgeWrapperPosition = BadgeWrapperPosition.TopRight;
```
```ts
// After (const-object + union)
import {
  BadgeWrapperPosition,
} from '@metamask/design-system-react';

const position: (typeof BadgeWrapperPosition)[keyof typeof BadgeWrapperPosition] = 'top-right';
```

**Impact:**

- Ensures React and React Native share the same canonical definitions
while preserving the original import paths; no import-path changes are
required.

- [x] Changelogs updated with human-readable descriptions
- [ ] Changelog validation passed (`yarn changelog:validate`)
- [x] Version bumps follow semantic versioning
- [x] design-system-shared: patch (0.5.0 → 0.6.0) – shared type
alignment for BadgeWrapper values
- [x] design-system-react: minor (0.12.0 → 0.13.0) – semibold typography
semantics and linked Button migration docs
- [x] design-system-react-native: minor (0.12.0 → 0.13.0) – mirrors
React’s semibold/type migration guidance
- [x] Breaking changes documented with migration guidance
- [x] Migration guides updated with before/after examples (if breaking
changes)
- [x] PR references included in changelog entries

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs)
- [ ] I've reviewed the [Release
Workflow](./.cursor/rules/release-workflow.md) cursor rule
- [ ] All tests pass (`yarn build && yarn test && yarn lint`)
- [ ] Changelog validation passes (`yarn changelog:validate`)

- [ ] I've reviewed the [Reviewing Release
PRs](./docs/reviewing-release-prs.md) guide
- [ ] Package versions follow semantic versioning
- [ ] Changelog entries are consumer-facing (not commit message
regurgitation)
- [ ] Breaking changes are documented in MIGRATION.md with examples
- [ ] All unreleased changes are accounted for in changelogs

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Medium risk because this is a release/version bump that ships breaking
typography weight changes and type-shape updates that can affect
consumers’ styling and TypeScript usage. Repo changes are mostly
metadata/docs, but downstream upgrades may require font asset and
`font-weight` updates.
>
> **Overview**
> **Release bump to `27.0.0`** with package version updates
(`design-system-react`/`react-native` → `0.13.0`, `design-system-shared`
→ `0.6.0`, `design-tokens` → `8.3.0`, `design-system-twrnc-preset` →
`0.4.0`).
>
> Documents and publishes the **typography semantic change** where
`FontWeight.Bold`/`--font-weight-bold` now map to `600` and font
mappings move from `Geist-Bold*` to `Geist-SemiBold*`, plus the
**`BadgeWrapper` type migration** to `as const` + string-union
definitions centralized in `design-system-shared`. Migration
guides/changelogs are updated accordingly, and React Native peer deps
are updated to require `@metamask/design-system-twrnc-preset@^0.4.0`.
>
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
7ad09f1. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants