Files
74e410bb67 chore(mobile): upgrade Tamagui from v1 to v2 (#7497)
* chore(mobile): upgrade Tamagui from v1 to v2

Upgrade all @tamagui/* packages from v1 (^1.126.3) to v2 (2.0.0-rc.26).
Replace deprecated @tamagui/animations-moti with animations-reanimated.
Rewrite SafeButton to use v2 compound component pattern (Button.Text)
with correct font weight, disabled state, and icon coloring.
Patch @tamagui/image for style override bug (upstream fix merged but
not yet on npm: https://github.com/tamagui/tamagui/pull/3966).

* fix(mobile): resolve Tamagui tokens in Loader before passing to SVG

The Loader component passes color directly to react-native-progress
(CircleSnail), which uses react-native-svg internally. SVG doesn't
understand Tamagui theme tokens like "$color", causing repeated
"not a valid color or brush" console warnings.

* fix(mobile): center nav bar title in scrollable headers

Remove flex: 1 from headerTitle Animated.View so the native stack
header centers the title element itself. Add headerTitleAlign: 'center'
and match right spacer width (40px) to the back button circle.

* fix(mobile): fix Tamagui v2 component API breakages

- SafeButton: rewrite with Button.Text compound pattern, add textColor
  prop for forced light-mode overrides, restore fontWeight 700 default
- SafeInput: replace removed `editable` prop with `readOnly`, use
  GetProps<StyledInput> to fix type conflicts, cast theme tokens
- SafeCard: use `src` instead of `source`, `objectFit` instead of
  `resizeMode` for Tamagui v2 Image
- ParametersButton: migrate from raw Button to SafeButton
- Badge: fix dark mode background token (backgroundMain → borderLight)
- Raw Buttons: move fontWeight to Button.Text in ImportSigner/Ledger
- Onboarding: migrate color prop to textColor for dark mode fix
- Assets errors: use secondary variant + textColor instead of inline bg

* fix(mobile): preserve element children and text-button accent color in SafeButton

- Only wrap string/number children in Button.Text; render element
  children (ActivityIndicator, Loader) directly to avoid invalid
  text-child nesting on native.
- Use theme.primary for the text variant so text-style buttons
  retain their accent color instead of blending with body text.

* fix(mobile): replace raw Tamagui Button with SafeButton in ImportSuccess

The Copy button on the signer import success screen was broken after the
Tamagui v2 upgrade because it used a raw Tamagui Button. Replace it with
SafeButton (secondary, $sm) for consistent styling and v2 compatibility.

* fix(mobile): fix Jest transform config for Tamagui v2 and update snapshots

Add tamagui and @tamagui/* to transformIgnorePatterns so Jest can parse
the ESM exports in Tamagui v2. Update 22 snapshots reflecting the new
style output and remove stale fontFamily assertion in DataRow test.

---------

Co-authored-by: Hanzo Dev <[email protected]>
2026-03-20 16:39:59 +01:00

48 lines
1.2 KiB
JSON

{
"private": true,
"name": "@safe-global/theme",
"version": "1.0.0",
"type": "module",
"main": "./src/index.ts",
"exports": {
".": "./src/index.ts",
"./*": "./src/*"
},
"scripts": {
"test": "jest",
"lint": "eslint src",
"lint:fix": "eslint src --fix",
"type-check": "tsc --noEmit",
"prettier": "prettier --check . --config ../../.prettierrc --ignore-path ../../.prettierignore",
"prettier:fix": "prettier --write . --config ../../.prettierrc --ignore-path ../../.prettierignore"
},
"peerDependencies": {
"@mui/material": "^6.5.0",
"tamagui": "^2.x"
},
"peerDependenciesMeta": {
"@mui/material": {
"optional": true
},
"tamagui": {
"optional": true
}
},
"devDependencies": {
"@eslint/js": "^9.18.0",
"@mui/material": "^6.5.0",
"@safe-global/test": "workspace:^",
"@types/jest": "^29.5.14",
"eslint": "^9.29.0",
"eslint-plugin-react": "^7.37.5",
"eslint-plugin-react-hooks": "^5.2.0",
"jest": "^29.7.0",
"prettier": "^3.6.2",
"typescript": "~5.9.2",
"typescript-eslint": "^8.31.1"
},
"dependencies": {
"jest-fixed-jsdom": "^0.0.10"
}
}