Repository navigation
chore(rnative): support react-native 0.86 (LIVE-39312) - #938
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
🟡 Changes recommended
Expo Haptics is installed only within the sandbox, leaving library tooling unable to resolve it after a clean install.
1 open issue
What changed in this PR
Updates Lumen’s React Native support for Ledger Wallet Mobile’s move to RN 0.86 and Expo SDK 57, while retaining the existing RN 0.81 peer range.
Changes:
- Widens native peer dependencies and upgrades workspace and sandbox tooling.
- Replaces removed
StyleSheet.absoluteFillObjectusage withStyleSheet.absoluteFill. - Migrates Jest presets, adjusts test typing, and adds a patch release plan.
| File | Description |
|---|---|
package.json |
Upgrades React, native dependencies, and development tooling. |
libs/ui-rnative/src/lib/Components/visualization/DonutChart/DonutChartAnimatedCenter.tsx |
Updates absolute overlay styling. |
libs/ui-rnative/src/lib/Components/primitives/Gradient/RadialGradient/RadialGradient.tsx |
Updates absolute gradient styling. |
libs/ui-rnative/src/lib/Components/primitives/Gradient/LinearGradient/LinearGradient.tsx |
Updates absolute gradient styling. |
libs/ui-rnative/src/lib/Components/core/TabBar/TabBar.tsx |
Updates blur and fallback background positioning. |
libs/ui-rnative/src/lib/Components/core/Card/Card.tsx |
Updates absolute outline styling. |
libs/ui-rnative/src/lib/Components/core/AvatarButton/AvatarButton.tsx |
Updates absolute overlay styling. |
libs/ui-rnative/src/lib/Components/core/Avatar/Avatar.test.tsx |
Adds explicit renderer JSON types. |
libs/ui-rnative/package.json |
Widens RN, Worklets, and Haptics peer ranges. |
libs/ui-rnative/jest.config.ts |
Uses the standalone React Native Jest preset. |
apps/app-sandbox-rnative/package.json |
Upgrades the sandbox to RN 0.86 and Expo 57. |
apps/app-sandbox-rnative/metro.config.js |
Removes the custom React resolution override. |
apps/app-sandbox-rnative/jest.config.js |
Uses the standalone React Native Jest preset. |
.nx/version-plans/version-plan-1793030941000-ui-rnative.md |
Schedules a native library patch release. |
Review effort: Balanced
📦 Dev packages publishedTarballs are hosted as assets on a per-PR GitHub pre-release and are deleted automatically when this PR is closed.
|
Wiz Scan Summary
To detect these findings earlier in the dev lifecycle, try the Wiz Code extension for VS Code, JetBrains, or Visual Studio. |
LIVE-39312. Ledger Wallet Mobile is moving to RN 0.86.3 / Expo SDK 57 / React 19.2.3. - Widen ui-rnative peers: react-native >=0.81.6 <0.87, expo-haptics ~15.0.8 || ^55 || ^56 || ^57, react-native-worklets >=0.8.0 <0.11 (Expo 57 pins worklets 0.10.1, which ^0.8.0 rejected). - Replace StyleSheet.absoluteFillObject (removed in RN 0.85) with StyleSheet.absoluteFill. - Move the workspace and the RN sandbox to RN 0.86.3, React 19.2.3, Expo SDK 57 and the matching native libs. - Use @react-native/jest-preset (the preset left react-native in 0.85). - Drop the sandbox Metro React pin now that one React version is used.
With Expo SDK 57, npm nests expo and expo-haptics under the RN sandbox instead of hoisting them, so the ui-rnative bob typescript build (and Jest) could not resolve expo-haptics in CI. Declare it at the root like the other ui-rnative peers.
The workspace now develops against RN 0.86, but Ledger Wallet Mobile still ships RN 0.81.6 / React 19.1.4 / reanimated 4.3.4 / worklets 0.8.1. Add a temporary rn-081-compat job that installs that stack on top of the lockfile and re-runs ui-rnative typecheck and tests, so code relying on newer APIs can't land unnoticed. Jest falls back to the preset bundled in react-native when it is older than 0.85. Declare @types/react-test-renderer explicitly: the Avatar test imports its types, which only arrived through react-native-gesture-handler 2.32. Remove the job and the preset fallback once LWM is on RN 0.86.
….absoluteFill RN 0.81's types declare StyleSheet.absoluteFill as a RegisteredStyle, so spreading it fails typecheck there (TS2698), even though at runtime it is the same object as absoluteFillObject. Write the five properties out, as ChartEmptyLabel, SegmentedControl and Avatar already do, so the code type-checks on both RN 0.81 and 0.86.
Rebuilt from this branch's lockfile with main's manifest changes applied, so the RN 0.86 resolution verified before the rebase is kept. @types/react stays on the 19.2 line to match React 19.2.3 under main's ^19.0.0 range.
26a7d44 to
175a43e
Compare
Since Expo SDK 57, prebuild recreates the native folders by default (--no-clean opts out), so --clean is accepted but does nothing.
|




Context
LWM is moving to React Native 0.86.3, Expo SDK 57 and React 19.2.3 (LIVE-39331). This lets
@ledgerhq/lumen-ui-rnativesupport it while still working on RN 0.81.Closes LIVE-39312
What changes for consumers
react-native~0.81.6>=0.81.6 <0.87expo-haptics~15.0.8~15.0.8 || ^55 || ^56 || ^57react-native-worklets^0.8.0>=0.8.0 <0.11RN 0.85 removed
StyleSheet.absoluteFillObject. Card, AvatarButton, TabBar, Linear/RadialGradient and DonutChart now write outposition: 'absolute', top/left/right/bottom: 0, which looks the same and works on both 0.81 and 0.86.Repo only (not shipped)
@react-native/*versions.@react-native/jest-preset, the package the preset moved to in RN 0.85.RN 0.81 compatibility (ui-rnative): it re-runs ui-rnative typecheck and tests on LWM's current stack (RN 0.81.6, React 19.1.4, reanimated 4.3.4, worklets 0.8.1, Expo 54), so nothing that only works on 0.86 reaches LWM. Remove it,internals/repo-tools/src/ci/rn-081-compat/and the Jest preset fallback once LWM is on 0.86.How to test
cd apps/app-sandbox-rnative && npx expo prebuild && npx expo run:ios): Card with an image, AvatarButton, the TabBar active pill, the gradients and the DonutChart center still fill their container, and haptics fire on TabBar press and chart scrub.Verified on a clean install, on both RN 0.86 and 0.81: typecheck and all 1,479 tests. Not yet tested on a device.
🤖 Generated with Claude Code