diff --git a/app/containers/AudioPlayer/Seek.tsx b/app/containers/AudioPlayer/Seek.tsx index 6b70602df0f..56f54e83b87 100644 --- a/app/containers/AudioPlayer/Seek.tsx +++ b/app/containers/AudioPlayer/Seek.tsx @@ -1,21 +1,20 @@ import React from 'react'; import { type LayoutChangeEvent, View, TextInput, type TextInputProps, TouchableNativeFeedback } from 'react-native'; -import { PanGestureHandler, type PanGestureHandlerGestureEvent } from 'react-native-gesture-handler'; +import { Gesture, GestureDetector } from 'react-native-gesture-handler'; import Animated, { type SharedValue, - runOnJS, - useAnimatedGestureHandler, useAnimatedProps, useAnimatedStyle, useDerivedValue, - useSharedValue + useSharedValue, + withTiming } from 'react-native-reanimated'; +import { scheduleOnRN } from 'react-native-worklets'; import styles from './styles'; import { useTheme } from '../../theme'; import { SEEK_HIT_SLOP, THUMB_SEEK_SIZE, ACTIVE_OFFSET_X, DEFAULT_TIME_LABEL } from './constants'; -Animated.addWhitelistedNativeProps({ text: true }); const AnimatedTextInput = Animated.createAnimatedComponent(TextInput); interface ISeek { @@ -50,6 +49,7 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => const timeLabel = useSharedValue(DEFAULT_TIME_LABEL); const scale = useSharedValue(1); const isPanning = useSharedValue(false); + const contextX = useSharedValue(0); const styleLine = useAnimatedStyle(() => ({ width: translateX.value @@ -64,21 +64,25 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => maxWidth.value = width; }; - const onGestureEvent = useAnimatedGestureHandler({ - onStart: (_event, ctx) => { + const panGesture = Gesture.Pan() + .enabled(loaded) + .activeOffsetX([-ACTIVE_OFFSET_X, ACTIVE_OFFSET_X]) + .onStart(() => { isPanning.value = true; - ctx.offsetX = translateX.value; - }, - onActive: ({ translationX }, ctx) => { - translateX.value = clamp(ctx.offsetX + translationX, 0, maxWidth.value); - scale.value = 1.3; - }, - onFinish() { - scale.value = 1; + contextX.value = translateX.value; + scale.value = withTiming(1.3, { duration: 150 }); + }) + .onUpdate(event => { + const newX = contextX.value + event.translationX; + translateX.value = clamp(newX, 0, maxWidth.value); + }) + .onEnd(() => { + scheduleOnRN(onChangeTime, Math.round(currentTime.value * 1000)); + }) + .onFinalize(() => { isPanning.value = false; - runOnJS(onChangeTime)(Math.round(currentTime.value * 1000)); - } - }); + scale.value = withTiming(1, { duration: 150 }); + }); useDerivedValue(() => { if (isPanning.value) { @@ -118,9 +122,9 @@ const Seek = ({ currentTime, duration, loaded = false, onChangeTime }: ISeek) => - + - + diff --git a/app/containers/MessageComposer/hooks/useEmojiKeyboard.tsx b/app/containers/MessageComposer/hooks/useEmojiKeyboard.tsx index 671649f2295..4042462add7 100644 --- a/app/containers/MessageComposer/hooks/useEmojiKeyboard.tsx +++ b/app/containers/MessageComposer/hooks/useEmojiKeyboard.tsx @@ -1,8 +1,9 @@ import React, { createContext, type ReactElement, useContext, useState } from 'react'; import { Platform } from 'react-native'; import { useKeyboardHandler } from 'react-native-keyboard-controller'; -import { runOnJS, type SharedValue, useAnimatedReaction, useSharedValue } from 'react-native-reanimated'; +import { type SharedValue, useAnimatedReaction, useSharedValue } from 'react-native-reanimated'; import { useSafeAreaInsets } from 'react-native-safe-area-context'; +import { scheduleOnRN } from 'react-native-worklets'; import { MessageInnerContext } from '../context'; @@ -155,7 +156,7 @@ export const useEmojiKeyboard = () => { } else if (previousHeight.value === EMOJI_KEYBOARD_FIXED_HEIGHT) { updateHeight(); } - runOnJS(setShowEmojiKeyboard)(currentValue); + scheduleOnRN(setShowEmojiKeyboard, currentValue); }, [showEmojiPickerSharedValue] ); @@ -171,7 +172,7 @@ export const useEmojiKeyboard = () => { } else if (currentValue === false && showEmojiPickerSharedValue.value === true) { openEmojiPicker(); } - runOnJS(setShowEmojiSearchbar)(currentValue); + scheduleOnRN(setShowEmojiSearchbar, currentValue); }, [showEmojiSearchbarSharedValue] ); diff --git a/app/containers/RoomItem/Actions.tsx b/app/containers/RoomItem/Actions.tsx index 770fa5655ba..11c799dd372 100644 --- a/app/containers/RoomItem/Actions.tsx +++ b/app/containers/RoomItem/Actions.tsx @@ -4,12 +4,12 @@ import Animated, { useAnimatedStyle, interpolate, withSpring, - runOnJS, useAnimatedReaction, useSharedValue } from 'react-native-reanimated'; import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; +import { scheduleOnRN } from 'react-native-worklets'; import { CustomIcon } from '../CustomIcon'; import { DisplayMode } from '../../lib/constants/constantDisplayMode'; @@ -81,14 +81,14 @@ export const RightActions = React.memo(({ transX, favorite, width, toggleFav, on // Triggers the animation and hapticFeedback if swipe reaches/unreaches the threshold. if (I18n.isRTL) { if (previousTransX && currentTransX > LONG_SWIPE && previousTransX <= LONG_SWIPE) { - runOnJS(triggerHideAnimation)(ACTION_WIDTH); + scheduleOnRN(triggerHideAnimation, ACTION_WIDTH); } else if (previousTransX && currentTransX <= LONG_SWIPE && previousTransX > LONG_SWIPE) { - runOnJS(triggerHideAnimation)(0); + scheduleOnRN(triggerHideAnimation, 0); } } else if (previousTransX && currentTransX < -LONG_SWIPE && previousTransX >= -LONG_SWIPE) { - runOnJS(triggerHideAnimation)(-ACTION_WIDTH); + scheduleOnRN(triggerHideAnimation, -ACTION_WIDTH); } else if (previousTransX && currentTransX >= -LONG_SWIPE && previousTransX < -LONG_SWIPE) { - runOnJS(triggerHideAnimation)(0); + scheduleOnRN(triggerHideAnimation, 0); } } ); diff --git a/app/containers/RoomItem/Touchable.tsx b/app/containers/RoomItem/Touchable.tsx index 5b3257f14f0..6f88ede833d 100644 --- a/app/containers/RoomItem/Touchable.tsx +++ b/app/containers/RoomItem/Touchable.tsx @@ -1,11 +1,12 @@ import React, { useRef, memo } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, withSpring, runOnJS } from 'react-native-reanimated'; +import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; import { Gesture, GestureDetector, type GestureUpdateEvent, type PanGestureHandlerEventPayload } from 'react-native-gesture-handler'; +import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../Touch'; import { ACTION_WIDTH, LONG_SWIPE, SMALL_SWIPE } from './styles'; @@ -172,7 +173,7 @@ const Touchable = ({ const longPressGesture = Gesture.LongPress() .minDuration(500) .onStart(() => { - runOnJS(handleLongPress)(); + scheduleOnRN(handleLongPress); }); const panGesture = Gesture.Pan() @@ -184,7 +185,7 @@ const Touchable = ({ if (transX.value > 2 * width) transX.value = 2 * width; }) .onEnd(event => { - runOnJS(handleRelease)(event); + scheduleOnRN(handleRelease, event); }); // Use Race instead of Simultaneous to prevent conflicts diff --git a/app/containers/RoomItem/interfaces.ts b/app/containers/RoomItem/interfaces.ts index 07b48bc7cd5..9a5842df131 100644 --- a/app/containers/RoomItem/interfaces.ts +++ b/app/containers/RoomItem/interfaces.ts @@ -1,5 +1,5 @@ import type React from 'react'; -import type Animated from 'react-native-reanimated'; +import { type SharedValue } from 'react-native-reanimated'; import { type TSupportedThemes } from '../../theme'; import { @@ -11,7 +11,7 @@ import { } from '../../definitions'; export interface ILeftActionsProps { - transX: Animated.SharedValue; + transX: SharedValue; isRead: boolean; width: number; onToggleReadPress(): void; @@ -19,7 +19,7 @@ export interface ILeftActionsProps { } export interface IRightActionsProps { - transX: Animated.SharedValue; + transX: SharedValue; favorite: boolean; width: number; toggleFav(): void; diff --git a/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx b/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx index d011e6fb5e8..69efa9cd1dd 100644 --- a/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx +++ b/app/containers/ServerItem/SwipeableDeleteItem/Actions.tsx @@ -4,13 +4,13 @@ import Animated, { useAnimatedStyle, interpolate, withSpring, - runOnJS, useAnimatedReaction, useSharedValue, type SharedValue } from 'react-native-reanimated'; import { RectButton } from 'react-native-gesture-handler'; import * as Haptics from 'expo-haptics'; +import { scheduleOnRN } from 'react-native-worklets'; import { CustomIcon } from '../../CustomIcon'; import { useTheme } from '../../../theme'; @@ -44,14 +44,14 @@ export const DeleteAction = React.memo( (currentTransX, previousTransX) => { if (I18n.isRTL) { if (previousTransX && currentTransX > longSwipe && previousTransX <= longSwipe) { - runOnJS(triggerDeleteAnimation)(actionWidth); + scheduleOnRN(triggerDeleteAnimation, actionWidth); } else if (previousTransX && currentTransX <= longSwipe && previousTransX > longSwipe) { - runOnJS(triggerDeleteAnimation)(0); + scheduleOnRN(triggerDeleteAnimation, 0); } } else if (previousTransX && currentTransX < -longSwipe && previousTransX >= -longSwipe) { - runOnJS(triggerDeleteAnimation)(-actionWidth); + scheduleOnRN(triggerDeleteAnimation, -actionWidth); } else if (previousTransX && currentTransX >= -longSwipe && previousTransX < -longSwipe) { - runOnJS(triggerDeleteAnimation)(0); + scheduleOnRN(triggerDeleteAnimation, 0); } } ); diff --git a/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx b/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx index 898187f1129..a9f7b0b7f7f 100644 --- a/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx +++ b/app/containers/ServerItem/SwipeableDeleteItem/Touchable.tsx @@ -1,5 +1,5 @@ import React, { useRef, memo } from 'react'; -import Animated, { useSharedValue, useAnimatedStyle, withSpring, runOnJS } from 'react-native-reanimated'; +import Animated, { useSharedValue, useAnimatedStyle, withSpring } from 'react-native-reanimated'; import { Gesture, GestureDetector, @@ -7,6 +7,7 @@ import { type PanGestureHandlerEventPayload } from 'react-native-gesture-handler'; import { View, type AccessibilityActionEvent } from 'react-native'; +import { scheduleOnRN } from 'react-native-worklets'; import Touch from '../../Touch'; import { DeleteAction } from './Actions'; @@ -174,7 +175,7 @@ const SwipeableDeleteTouchable = ({ } }) .onEnd(event => { - runOnJS(handleRelease)(event); + scheduleOnRN(handleRelease, event); }); const animatedStyles = useAnimatedStyle(() => ({ diff --git a/app/containers/message/__snapshots__/Message.test.tsx.snap b/app/containers/message/__snapshots__/Message.test.tsx.snap index eb164c03554..72cd045229a 100644 --- a/app/containers/message/__snapshots__/Message.test.tsx.snap +++ b/app/containers/message/__snapshots__/Message.test.tsx.snap @@ -136849,9 +136849,6 @@ exports[`Story Snapshots: WithAudio should match snapshot 1`] = ` { const scrollHandler = useAnimatedScrollHandler({ onScroll: event => { if (event.contentOffset.y > SCROLL_LIMIT) { - runOnJS(setVisible)(true); + scheduleOnRN(setVisible, true); } else { - runOnJS(setVisible)(false); + scheduleOnRN(setVisible, false); } } }); diff --git a/babel.config.js b/babel.config.js index 7a7259adf01..b00c79cb300 100644 --- a/babel.config.js +++ b/babel.config.js @@ -8,9 +8,9 @@ module.exports = { } ], ['@babel/plugin-proposal-decorators', { legacy: true }], - 'react-native-reanimated/plugin', '@babel/plugin-transform-named-capturing-groups-regex', - ['module:react-native-dotenv'] + ['module:react-native-dotenv'], + 'react-native-worklets/plugin' ], env: { production: { diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 8122f18684a..ab8fc22e9f4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -2382,7 +2382,7 @@ PODS: - Yoga - RNLocalize (2.1.1): - React-Core - - RNReanimated (3.17.1): + - RNReanimated (4.1.3): - DoubleConversion - glog - hermes-engine @@ -2405,10 +2405,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated (= 3.17.1) - - RNReanimated/worklets (= 3.17.1) + - RNReanimated/reanimated (= 4.1.3) + - RNWorklets - Yoga - - RNReanimated/reanimated (3.17.1): + - RNReanimated/reanimated (4.1.3): - DoubleConversion - glog - hermes-engine @@ -2431,9 +2431,10 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/reanimated/apple (= 3.17.1) + - RNReanimated/reanimated/apple (= 4.1.3) + - RNWorklets - Yoga - - RNReanimated/reanimated/apple (3.17.1): + - RNReanimated/reanimated/apple (4.1.3): - DoubleConversion - glog - hermes-engine @@ -2456,8 +2457,9 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNWorklets - Yoga - - RNReanimated/worklets (3.17.1): + - RNScreens (4.13.1): - DoubleConversion - glog - hermes-engine @@ -2474,15 +2476,16 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNReanimated/worklets/apple (= 3.17.1) + - RNScreens/common (= 4.13.1) - Yoga - - RNReanimated/worklets/apple (3.17.1): + - RNScreens/common (4.13.1): - DoubleConversion - glog - hermes-engine @@ -2499,6 +2502,7 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric + - React-RCTImage - React-renderercss - React-rendererdebug - React-utils @@ -2506,7 +2510,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNScreens (4.13.1): + - RNSVG (15.12.1): - DoubleConversion - glog - hermes-engine @@ -2523,16 +2527,15 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNScreens/common (= 4.13.1) + - RNSVG/common (= 15.12.1) - Yoga - - RNScreens/common (4.13.1): + - RNSVG/common (15.12.1): - DoubleConversion - glog - hermes-engine @@ -2549,7 +2552,6 @@ PODS: - React-jsi - React-NativeModulesApple - React-RCTFabric - - React-RCTImage - React-renderercss - React-rendererdebug - React-utils @@ -2557,7 +2559,7 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - RNSVG (15.12.1): + - RNTrueSheet (3.7.3): - DoubleConversion - glog - hermes-engine @@ -2580,9 +2582,8 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - - RNSVG/common (= 15.12.1) - Yoga - - RNSVG/common (15.12.1): + - RNWorklets (0.6.1): - DoubleConversion - glog - hermes-engine @@ -2605,8 +2606,34 @@ PODS: - ReactCodegen - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core + - RNWorklets/worklets (= 0.6.1) - Yoga - - RNTrueSheet (3.7.3): + - RNWorklets/worklets (0.6.1): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2024.11.18.00) + - RCTRequired + - RCTTypeSafety + - React-Core + - React-debug + - React-Fabric + - React-featureflags + - React-graphics + - React-hermes + - React-ImageManager + - React-jsi + - React-NativeModulesApple + - React-RCTFabric + - React-renderercss + - React-rendererdebug + - React-utils + - ReactCodegen + - ReactCommon/turbomodule/bridging + - ReactCommon/turbomodule/core + - RNWorklets/worklets/apple (= 0.6.1) + - Yoga + - RNWorklets/worklets/apple (0.6.1): - DoubleConversion - glog - hermes-engine @@ -2630,10 +2657,10 @@ PODS: - ReactCommon/turbomodule/bridging - ReactCommon/turbomodule/core - Yoga - - SDWebImage (5.21.0): - - SDWebImage/Core (= 5.21.0) - - SDWebImage/Core (5.21.0) - - SDWebImageAVIFCoder (0.11.0): + - SDWebImage (5.21.7): + - SDWebImage/Core (= 5.21.7) + - SDWebImage/Core (5.21.7) + - SDWebImageAVIFCoder (0.11.1): - libavif/core (>= 0.11.0) - SDWebImage (~> 5.10) - SDWebImageSVGCoder (1.7.0): @@ -2779,6 +2806,7 @@ DEPENDENCIES: - RNScreens (from `../node_modules/react-native-screens`) - RNSVG (from `../node_modules/react-native-svg`) - "RNTrueSheet (from `../node_modules/@lodev09/react-native-true-sheet`)" + - RNWorklets (from `../node_modules/react-native-worklets`) - "simdjson (from `../node_modules/@nozbe/simdjson`)" - "WatermelonDB (from `../node_modules/@nozbe/watermelondb`)" - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) @@ -3057,6 +3085,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-svg" RNTrueSheet: :path: "../node_modules/@lodev09/react-native-true-sheet" + RNWorklets: + :path: "../node_modules/react-native-worklets" simdjson: :path: "../node_modules/@nozbe/simdjson" WatermelonDB: @@ -3201,12 +3231,13 @@ SPEC CHECKSUMS: RNGestureHandler: 8ff2b1434b0ff8bab28c8242a656fb842990bbc8 RNImageCropPicker: c78ee80ea778f90cb850f4d26696fd9c1a7bcfbb RNLocalize: ca86348d88b9a89da0e700af58d428ab3f343c4e - RNReanimated: f52ccd5ceea2bae48d7421eec89b3f0c10d7b642 + RNReanimated: 3f2bab215585dc163bfcc97660466db62db411b5 RNScreens: b13e4c45f0406f33986a39c0d8da0324bff94435 RNSVG: 680e961f640e381aab730a04b2371969686ed9f7 RNTrueSheet: e9ee7ff82a7854295eac6fc225e54f1539e6cd7b - SDWebImage: f84b0feeb08d2d11e6a9b843cb06d75ebf5b8868 - SDWebImageAVIFCoder: 00310d246aab3232ce77f1d8f0076f8c4b021d90 + RNWorklets: b1faafefb82d9f29c4018404a0fb33974b494a7b + SDWebImage: e9fc87c1aab89a8ab1bbd74eba378c6f53be8abf + SDWebImageAVIFCoder: afe194a084e851f70228e4be35ef651df0fc5c57 SDWebImageSVGCoder: 15a300a97ec1c8ac958f009c02220ac0402e936c SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 simdjson: 7bb9e33d87737cec966e7b427773c67baa4458fe diff --git a/jest.setup.js b/jest.setup.js index 8be69b13b05..67953a926b1 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -27,7 +27,6 @@ jest.mock('react-native-reanimated', () => { ...actual, useSharedValue: jest.fn(init => ({ value: init })), useAnimatedReaction: jest.fn(), - runOnJS: jest.fn(fn => fn), withTiming: jest.fn(value => value) }; }); diff --git a/package.json b/package.json index 4b3e53b0dd1..2b1ed6cf71b 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "react-native-notifier": "1.6.1", "react-native-picker-select": "9.0.1", "react-native-popover-view": "5.1.7", - "react-native-reanimated": "^3.17.1", + "react-native-reanimated": "^4.1.3", "react-native-restart": "0.0.22", "react-native-safe-area-context": "^5.4.0", "react-native-screens": "^4.13.1", @@ -116,6 +116,7 @@ "react-native-svg": "^15.12.1", "react-native-url-polyfill": "2.0.0", "react-native-webview": "^13.15.0", + "react-native-worklets": "^0.6.1", "react-redux": "8.0.5", "reanimated-tab-view": "^0.3.0", "redux": "4.2.0", diff --git a/yarn.lock b/yarn.lock index 6d8d740fa76..9d76be749e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12080,11 +12080,6 @@ react-native-image-crop-picker@RocketChat/react-native-image-crop-picker#f028aac version "0.51.0" resolved "https://codeload.github.com/RocketChat/react-native-image-crop-picker/tar.gz/f028aac24373d05166747ef6d9e59bb037fe3224" -react-native-is-edge-to-edge@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.6.tgz#69ec13f70d76e9245e275eed4140d0873a78f902" - integrity sha512-1pHnFTlBahins6UAajXUqeCOHew9l9C2C8tErnpGC3IyLJzvxD+TpYAixnCbrVS52f7+NvMttbiSI290XfwN0w== - react-native-is-edge-to-edge@^1.1.6, react-native-is-edge-to-edge@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/react-native-is-edge-to-edge/-/react-native-is-edge-to-edge-1.1.7.tgz#28947688f9fafd584e73a4f935ea9603bd9b1939" @@ -12166,23 +12161,13 @@ react-native-popover-view@5.1.7: deprecated-react-native-prop-types "^2.3.0" prop-types "^15.8.1" -react-native-reanimated@^3.17.1: - version "3.17.1" - resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-3.17.1.tgz#42bed044ad046f09efcc00a80fabcc6eb18c7073" - integrity sha512-ECzLhLxMKLifv34a8799/MHqIazQZV9fLMNSMdixXQlzX71RyL3/ah3cz/h3ERoyhJAYRC2ySLLZho6pXSqMFQ== +react-native-reanimated@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/react-native-reanimated/-/react-native-reanimated-4.1.3.tgz#de29587b8ff7febada32497793803215faeac636" + integrity sha512-GP8wsi1u3nqvC1fMab/m8gfFwFyldawElCcUSBJQgfrXeLmsPPUOpDw44lbLeCpcwUuLa05WTVePdTEwCLTUZg== dependencies: - "@babel/plugin-transform-arrow-functions" "^7.0.0-0" - "@babel/plugin-transform-class-properties" "^7.0.0-0" - "@babel/plugin-transform-classes" "^7.0.0-0" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" - "@babel/plugin-transform-optional-chaining" "^7.0.0-0" - "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" - "@babel/plugin-transform-template-literals" "^7.0.0-0" - "@babel/plugin-transform-unicode-regex" "^7.0.0-0" - "@babel/preset-typescript" "^7.16.7" - convert-source-map "^2.0.0" - invariant "^2.2.4" - react-native-is-edge-to-edge "1.1.6" + react-native-is-edge-to-edge "^1.2.1" + semver "7.7.2" react-native-restart@0.0.22: version "0.0.22" @@ -12232,6 +12217,23 @@ react-native-webview@^13.15.0: escape-string-regexp "^4.0.0" invariant "2.2.4" +react-native-worklets@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/react-native-worklets/-/react-native-worklets-0.6.1.tgz#daa56dea896c7bdcead064b675ef341ac1f41029" + integrity sha512-URca8l7c7Uog7gv4mcg9KILdJlnbvwdS5yfXQYf5TDkD2W1VY1sduEKrD+sA3lUPXH/TG1vmXAvNxCNwPMYgGg== + dependencies: + "@babel/plugin-transform-arrow-functions" "^7.0.0-0" + "@babel/plugin-transform-class-properties" "^7.0.0-0" + "@babel/plugin-transform-classes" "^7.0.0-0" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.0.0-0" + "@babel/plugin-transform-optional-chaining" "^7.0.0-0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0-0" + "@babel/plugin-transform-template-literals" "^7.0.0-0" + "@babel/plugin-transform-unicode-regex" "^7.0.0-0" + "@babel/preset-typescript" "^7.16.7" + convert-source-map "^2.0.0" + semver "7.7.2" + react-native@0.79.4: version "0.79.4" resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.79.4.tgz#66aa4918fbb2778956b2a93a885d26acf8ce614c" @@ -12809,6 +12811,11 @@ semver@7.5.2: dependencies: lru-cache "^6.0.0" +semver@7.7.2, semver@^7.6.2, semver@^7.7.1: + version "7.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" + integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== + semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" @@ -12826,11 +12833,6 @@ semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" -semver@^7.6.2, semver@^7.7.1: - version "7.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" - integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== - semver@^7.7.3: version "7.7.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"