react-native-tvos 0.85.3-0 → 0.86.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Animated/AnimatedImplementation.js +6 -6
- package/Libraries/Animated/NativeAnimatedAllowlist.js +21 -0
- package/Libraries/Animated/components/AnimatedImage.js +3 -3
- package/Libraries/Animated/components/AnimatedText.js +3 -3
- package/Libraries/Animated/createAnimatedComponent.js +7 -7
- package/Libraries/Animated/nodes/AnimatedAddition.js +1 -1
- package/Libraries/Animated/nodes/AnimatedColor.js +7 -7
- package/Libraries/Animated/nodes/AnimatedDiffClamp.js +1 -1
- package/Libraries/Animated/nodes/AnimatedDivision.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +22 -24
- package/Libraries/Animated/nodes/AnimatedModulo.js +1 -1
- package/Libraries/Animated/nodes/AnimatedMultiplication.js +1 -1
- package/Libraries/Animated/nodes/AnimatedStyle.js +2 -2
- package/Libraries/Animated/nodes/AnimatedSubtraction.js +1 -1
- package/Libraries/Animated/nodes/AnimatedTracking.js +1 -1
- package/Libraries/Animated/nodes/AnimatedValue.js +2 -2
- package/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm +4 -0
- package/Libraries/AppDelegate/RCTRootViewFactory.h +5 -5
- package/Libraries/AppDelegate/RCTRootViewFactory.mm +2 -2
- package/Libraries/AppState/AppState.js +1 -1
- package/Libraries/BatchedBridge/NativeModules.js +1 -1
- package/Libraries/Blob/RCTBlobCollector.h +1 -1
- package/Libraries/Blob/RCTBlobCollector.mm +14 -26
- package/Libraries/Blob/RCTBlobManager.mm +11 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +29 -23
- package/Libraries/Components/Keyboard/Keyboard.js +4 -2
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +1 -1
- package/Libraries/Components/LayoutConformance/LayoutConformance.js +1 -27
- package/Libraries/Components/Pressable/Pressable.d.ts +1 -0
- package/Libraries/Components/Pressable/Pressable.js +2 -2
- package/Libraries/Components/Pressable/useAndroidRippleForView.js +7 -8
- package/Libraries/Components/ScrollView/ScrollView.d.ts +1 -1
- package/Libraries/Components/ScrollView/ScrollView.js +4 -4
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +2 -2
- package/Libraries/Components/Switch/Switch.js +1 -1
- package/Libraries/Components/TV/TVViewPropTypes.js +9 -0
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +25 -1
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +1 -1
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +2 -2
- package/Libraries/Components/TextInput/TextInput.d.ts +24 -0
- package/Libraries/Components/TextInput/TextInput.flow.js +24 -0
- package/Libraries/Components/TextInput/TextInput.js +5 -5
- package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +5 -5
- package/Libraries/Components/ToastAndroid/ToastAndroidFallback.js +5 -5
- package/Libraries/Components/Touchable/PooledClass.js +4 -4
- package/Libraries/Components/Touchable/Touchable.js +1 -1
- package/Libraries/Components/Touchable/TouchableNativeFeedback.js +6 -10
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +10 -2
- package/Libraries/Components/View/View.js +100 -91
- package/Libraries/Components/View/ViewPropTypes.js +3 -1
- package/Libraries/Core/Devtools/loadBundleFromServer.js +8 -0
- package/Libraries/Core/ExceptionsManager.js +2 -8
- package/Libraries/Core/InitializeCore.js +0 -13
- package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Core/ReactNativeVersionCheck.js +1 -1
- package/Libraries/Core/Timers/JSTimers.js +2 -2
- package/Libraries/Core/Timers/immediateShim.js +1 -1
- package/Libraries/Core/setUpBatchedBridge.js +1 -1
- package/Libraries/Core/setUpSegmentFetcher.js +1 -1
- package/Libraries/Debugging/DebuggingOverlayRegistry.js +1 -1
- package/Libraries/EventEmitter/NativeEventEmitter.js +9 -5
- package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -2
- package/Libraries/Image/Image.android.js +15 -35
- package/Libraries/Image/RCTImageLoader.mm +4 -2
- package/Libraries/Image/RelativeImageStub.js +2 -2
- package/Libraries/LayoutAnimation/LayoutAnimation.js +12 -12
- package/Libraries/Linking/Linking.js +1 -1
- package/Libraries/Lists/FlatList.js +1 -1
- package/Libraries/LogBox/LogBox.js +2 -2
- package/Libraries/LogBox/LogBoxInspectorContainer.js +24 -2
- package/Libraries/LogBox/LogBoxNotificationContainer.js +27 -4
- package/Libraries/LogBox/UI/LogBoxButton.js +47 -33
- package/Libraries/LogBox/UI/LogBoxInspector.js +61 -1
- package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +6 -0
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +3 -1
- package/Libraries/LogBox/UI/LogBoxNotification.js +2 -0
- package/Libraries/Modal/Modal.js +12 -7
- package/Libraries/NativeAnimation/Nodes/RCTInterpolationAnimatedNode.mm +0 -2
- package/Libraries/NativeComponent/BaseViewConfig.android.js +15 -0
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +17 -0
- package/Libraries/NativeComponent/NativeComponentRegistry.js +2 -2
- package/Libraries/NativeComponent/TVViewConfig.js +1 -0
- package/Libraries/NativeComponent/ViewConfigIgnore.js +4 -2
- package/Libraries/Network/RCTNetworking.android.js +1 -1
- package/Libraries/Network/RCTNetworking.ios.js +1 -1
- package/Libraries/Network/RCTNetworking.js.flow +1 -1
- package/Libraries/Network/RCTNetworking.mm +1 -2
- package/Libraries/Network/XMLHttpRequest.js +29 -12
- package/Libraries/Pressability/Pressability.js +2 -2
- package/Libraries/ReactNative/AppContainer-dev.js +2 -3
- package/Libraries/ReactNative/AppContainer-prod.js +1 -2
- package/Libraries/ReactNative/AppContainer.js +0 -1
- package/Libraries/ReactNative/AppRegistry.d.ts +1 -1
- package/Libraries/ReactNative/AppRegistry.flow.js +1 -2
- package/Libraries/ReactNative/AppRegistryImpl.js +16 -16
- package/Libraries/ReactNative/DeprecatedPerformanceLoggerStub.js +83 -0
- package/Libraries/ReactNative/FabricUIManager.js +6 -0
- package/Libraries/{Utilities → ReactNative}/IPerformanceLogger.d.ts +8 -5
- package/Libraries/{Utilities/IPerformanceLogger.js → ReactNative/IPerformanceLogger.flow.js} +12 -9
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +14 -14
- package/Libraries/ReactNative/RendererImplementation.js +26 -143
- package/Libraries/ReactNative/RendererProxy.js +4 -15
- package/Libraries/ReactNative/renderApplication.js +33 -59
- package/Libraries/ReactNative/requireNativeComponent.js +3 -3
- package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +5 -0
- package/Libraries/Renderer/shims/ReactNativeTypes.js +2 -32
- package/Libraries/Settings/Settings.ios.js +1 -1
- package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +2 -2
- package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +3 -3
- package/Libraries/StyleSheet/StyleSheet.js +1 -1
- package/Libraries/StyleSheet/StyleSheet.js.flow +2 -2
- package/Libraries/StyleSheet/StyleSheetExports.js +1 -1
- package/Libraries/StyleSheet/StyleSheetExports.js.flow +1 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +6 -8
- package/Libraries/StyleSheet/StyleSheetTypes.js +11 -11
- package/Libraries/StyleSheet/flattenStyle.js +1 -1
- package/Libraries/StyleSheet/private/_TransformStyle.js +1 -1
- package/Libraries/StyleSheet/processBackgroundImage.js +19 -9
- package/Libraries/StyleSheet/processBackgroundSize.js +7 -12
- package/Libraries/StyleSheet/processBoxShadow.js +9 -47
- package/Libraries/StyleSheet/processFilter.js +16 -8
- package/Libraries/StyleSheet/processTransformOrigin.js +10 -3
- package/Libraries/Text/Text.js +4 -4
- package/Libraries/Text/TextInput/RCTBackedTextInputDelegateAdapter.mm +16 -2
- package/Libraries/Text/TextNativeComponent.js +4 -4
- package/Libraries/TurboModule/RCTExport.js +1 -1
- package/Libraries/TurboModule/TurboModuleRegistry.js +3 -3
- package/Libraries/Types/CodegenTypes.js +7 -4
- package/Libraries/Types/ReactDevToolsTypes.js +1 -1
- package/Libraries/Utilities/BackHandler.android.js +11 -3
- package/Libraries/Utilities/BackHandler.d.ts +11 -1
- package/Libraries/Utilities/BackHandler.ios.js +3 -1
- package/Libraries/Utilities/BackHandler.js.flow +6 -1
- package/Libraries/Utilities/HardwareBackPressEvent.js +22 -0
- package/Libraries/Utilities/ReactNativeTestTools.js +4 -4
- package/Libraries/Utilities/binaryToBase64.js +1 -1
- package/Libraries/Utilities/codegenNativeCommands.js +2 -2
- package/Libraries/Utilities/codegenNativeComponent.js +4 -4
- package/Libraries/Utilities/deepFreezeAndThrowOnMutationInDev.js +2 -2
- package/Libraries/Utilities/stringifySafe.js +1 -1
- package/Libraries/promiseRejectionTrackingOptions.js +1 -1
- package/Libraries/vendor/core/ErrorUtils.js +4 -4
- package/Libraries/vendor/emitter/EventEmitter.js +27 -13
- package/README.md +13 -1
- package/React/Base/RCTBundleURLProvider.h +19 -1
- package/React/Base/RCTBundleURLProvider.mm +82 -0
- package/React/Base/RCTDefines.h +1 -1
- package/React/Base/RCTMultipartDataTask.h +1 -1
- package/React/Base/RCTMultipartDataTask.m +0 -3
- package/React/Base/RCTRootView.h +4 -0
- package/React/Base/RCTRootViewDelegate.h +5 -2
- package/React/Base/RCTVersion.m +2 -2
- package/React/Base/Surface/RCTSurface.h +3 -0
- package/React/Base/Surface/RCTSurfaceDelegate.h +7 -3
- package/React/Base/Surface/RCTSurfaceRootView.mm +1 -1
- package/React/Base/Surface/RCTSurfaceView.mm +2 -1
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +2 -0
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +0 -3
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.mm +3 -1
- package/React/CoreModules/RCTDevMenuConfigurationDecorator.h +2 -2
- package/React/CoreModules/RCTRedBox2AnsiParser.mm +1 -1
- package/React/CoreModules/RCTWebSocketModule.mm +45 -6
- package/React/CxxLogUtils/RCTDefaultCxxLogFunction.mm +0 -1
- package/React/DevSupport/RCTInspectorDevServerHelper.mm +4 -0
- package/React/DevSupport/RCTPackagerConnection.mm +13 -11
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +108 -43
- package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +1 -0
- package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +1 -0
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.h +1 -1
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +35 -15
- package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +2 -2
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +70 -8
- package/React/Fabric/RCTConversions.h +14 -0
- package/React/Fabric/RCTScheduler.mm +18 -0
- package/React/Fabric/RCTSurfacePointerHandler.mm +8 -2
- package/React/Fabric/RCTSurfaceTouchHandler.mm +1 -0
- package/React/Fabric/Surface/RCTFabricSurface.mm +3 -0
- package/React/I18n/strings/pt.lproj/fbt_language_pack.bin +0 -0
- package/React/Modules/RCTUIManager.mm +1 -1
- package/React/Profiler/RCTProfile.h +5 -0
- package/React/Profiler/RCTProfile.m +2 -1
- package/React/Profiler/RCTProfileTrampoline-arm.S +1 -1
- package/React/Profiler/RCTProfileTrampoline-arm64.S +1 -1
- package/React/Profiler/RCTProfileTrampoline-i386.S +1 -1
- package/React/Profiler/RCTProfileTrampoline-x86_64.S +1 -1
- package/React/Tests/Mounting/RCTViewComponentViewTests.mm +186 -0
- package/React/Tests/Text/RCTAttributedTextUtilsTest.mm +5 -5
- package/React/Views/RCTLayout.m +4 -3
- package/React/Views/ScrollView/RCTScrollView.h +6 -2
- package/ReactAndroid/api/ReactAndroid.api +37 -27
- package/ReactAndroid/build.gradle.kts +28 -21
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/hermes/instrumentation/HermesSamplingProfiler.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +1 -3
- package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +40 -110
- package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +32 -87
- package/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedModule.kt +9 -99
- package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.kt +7 -28
- package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +2 -19
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaModuleWrapper.kt +15 -23
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +36 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJNISoLoader.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNativeJniCommonSoLoader.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultSoLoader.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/FpsView.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt +15 -2
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/DevSupportHttpClient.kt +9 -34
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +9 -10
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/InspectorNetworkRequestListener.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/perfmonitor/PerfMonitorOverlayView.kt +10 -10
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/AnimationBackendChoreographer.kt +15 -13
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/DevToolsReactPerfLogger.kt +4 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +139 -43
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/ViewTransitionSnapshotManager.kt +223 -0
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.kt +25 -8
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt +34 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt +104 -65
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +9 -1
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.kt +172 -36
- package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/interfaces/ExtraWindowEventListener.kt +29 -0
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +41 -29
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +71 -51
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +15 -11
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +16 -12
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +79 -57
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +3 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt +1 -4
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +15 -11
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +5 -9
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/rewrite_feature_flag_defaults.py +76 -0
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/tests/test_rewrite_feature_flag_defaults.py +63 -0
- package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +3 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobModule.kt +10 -5
- package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobProvider.kt +1 -2
- package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.kt +3 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/DeviceEventManagerModule.kt +2 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactChoreographer.kt +21 -20
- package/ReactAndroid/src/main/java/com/facebook/react/modules/deviceinfo/DeviceInfoModule.kt +63 -3
- package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.kt +59 -62
- package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +8 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.kt +45 -36
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +5 -2
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/CoreReactPackage.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +18 -5
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +8 -1
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceView.kt +21 -19
- package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/soloader/OpenSourceMergedSoMapping.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +77 -72
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +7 -16
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +3 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +3 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +3 -1
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +25 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactRootViewTagGenerator.kt +3 -2
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/RootViewUtil.kt +17 -7
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +18 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.kt +20 -12
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt +18 -24
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIConstantsProviderBinding.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerHelper.kt +11 -71
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +10 -17
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/common/ViewUtil.kt +29 -30
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BackgroundImageDrawable.kt +5 -3
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt +12 -13
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.kt +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEvent.kt +1 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/RCTModernEventEmitter.kt +30 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/SynchronousEventReceiver.kt +28 -0
- package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchesHelper.kt +9 -9
- package/ReactAndroid/src/main/java/com/facebook/react/util/AndroidVersion.kt +27 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/MaintainVisibleScrollPositionHelper.kt +1 -14
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerViewManager.kt +1 -22
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +32 -24
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java +20 -21
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +33 -24
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +60 -11
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/FontMetricsUtil.kt +2 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +5 -162
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +71 -97
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt +1 -4
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/DrawCommandSpan.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +7 -13
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +40 -2
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.kt +59 -20
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +85 -20
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +46 -65
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/WindowUtil.kt +85 -13
- package/ReactAndroid/src/main/java/com/facebook/soloader/annotation/SoLoaderLibrary.kt +17 -0
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java +5 -1
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIFinalizer.kt +30 -0
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.java +3 -1
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.java +3 -1
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.java +39 -0
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.java +20 -12
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +101 -0
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +33 -0
- package/ReactAndroid/src/main/jni/CMakeLists.txt +10 -1
- package/ReactAndroid/src/main/jni/react/fabric/ComponentFactory.cpp +0 -1
- package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +0 -2
- package/ReactAndroid/src/main/jni/react/fabric/EventEmitterWrapper.cpp +26 -6
- package/ReactAndroid/src/main/jni/react/fabric/EventEmitterWrapper.h +3 -3
- package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +47 -0
- package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +20 -6
- package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +24 -1
- package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +6 -0
- package/ReactAndroid/src/main/jni/react/fabric/FocusOrderingHelper.cpp +0 -1
- package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.cpp +1 -0
- package/ReactAndroid/src/main/jni/react/fabric/test_helper/FabricMountingManagerTestHelper.cpp +85 -0
- package/ReactAndroid/src/main/jni/react/fabric/test_helper/FabricMountingManagerTestHelper.h +46 -0
- package/ReactAndroid/src/main/jni/react/fabric/test_helper/OnLoad.cpp +16 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +97 -69
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +21 -15
- package/ReactAndroid/src/main/jni/react/hermes/instrumentation/HermesSamplingProfiler.cpp +1 -1
- package/ReactAndroid/src/main/jni/react/jni/OnLoad-common.cpp +0 -2
- package/ReactAndroid/src/main/jni/react/jni/OnLoad.cpp +2 -1
- package/ReactAndroid/src/main/jni/react/reactnativeblob/BlobCollector.cpp +37 -30
- package/ReactAndroid/src/main/jni/react/reactnativeblob/BlobCollector.h +11 -8
- package/ReactAndroid/src/main/jni/react/reactnativeblob/CMakeLists.txt +2 -1
- package/ReactAndroid/src/main/jni/react/reactnativeblob/OnLoad.cpp +1 -1
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +10 -0
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +7 -0
- package/ReactAndroid/src/main/jni/react/tracing/CMakeLists.txt +28 -0
- package/ReactCommon/React-Fabric.podspec +7 -0
- package/ReactCommon/React-FabricComponents.podspec +1 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +4 -4
- package/ReactCommon/jsc/JSCRuntime.cpp +9 -0
- package/ReactCommon/jserrorhandler/JsErrorHandler.cpp +1 -0
- package/ReactCommon/jserrorhandler/JsErrorHandler.h +1 -1
- package/ReactCommon/jsi/jsi/JSIDynamic.cpp +1 -0
- package/ReactCommon/jsi/jsi/decorator.h +93 -0
- package/ReactCommon/jsi/jsi/jsi-inl.h +97 -68
- package/ReactCommon/jsi/jsi/jsi.cpp +208 -27
- package/ReactCommon/jsi/jsi/jsi.h +553 -224
- package/ReactCommon/jsi/jsi/test/testlib.cpp +453 -0
- package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +1 -1
- package/ReactCommon/jsinspector-modern/EmulationAgent.cpp +108 -0
- package/ReactCommon/jsinspector-modern/EmulationAgent.h +47 -0
- package/ReactCommon/jsinspector-modern/HostAgent.cpp +10 -1
- package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
- package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +6 -2
- package/ReactCommon/jsinspector-modern/InspectorFlags.h +5 -2
- package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +19 -2
- package/ReactCommon/jsinspector-modern/InspectorPackagerConnectionImpl.h +3 -0
- package/ReactCommon/jsinspector-modern/TracingAgent.cpp +10 -0
- package/ReactCommon/jsinspector-modern/tracing/TracingCategory.h +0 -1
- package/ReactCommon/logger/react_native_log.cpp +0 -1
- package/ReactCommon/react/bridging/Array.h +1 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +29 -21
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +35 -25
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +168 -132
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +18 -14
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +28 -20
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +61 -43
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +3 -3
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +9 -7
- package/ReactCommon/react/featureflags/rewrite_feature_flag_defaults.py +111 -0
- package/ReactCommon/react/featureflags/tests/test_rewrite_feature_flag_defaults.py +60 -0
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.h +3 -9
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +0 -1
- package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
- package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
- package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
- package/ReactCommon/react/nativemodule/fantomtestspecificmethods/NativeFantomTestSpecificMethods.cpp +2 -2
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +35 -25
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +15 -11
- package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +3 -2
- package/ReactCommon/react/nativemodule/viewtransition/CMakeLists.txt +24 -0
- package/ReactCommon/react/nativemodule/viewtransition/NativeViewTransition.cpp +92 -0
- package/ReactCommon/react/nativemodule/viewtransition/NativeViewTransition.h +37 -0
- package/ReactCommon/react/nativemodule/viewtransition/React-viewtransitionnativemodule.podspec +58 -0
- package/ReactCommon/react/nativemodule/webperformance/NativePerformance.cpp +10 -1
- package/ReactCommon/react/networking/NetworkReporter.h +0 -1
- package/ReactCommon/react/performance/cdpmetrics/CdpPerfIssuesReporter.h +0 -1
- package/ReactCommon/react/performance/timeline/PerformanceEntry.h +1 -1
- package/ReactCommon/react/performance/timeline/tests/PerformanceEntryTest.cpp +62 -0
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +24 -12
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +1 -1
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +3 -0
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +10 -3
- package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +1 -0
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +4 -0
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +1 -1
- package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h +0 -1
- package/ReactCommon/react/renderer/animations/LayoutAnimationDriver.cpp +8 -3
- package/ReactCommon/react/renderer/animations/tests/MutationComparatorTest.cpp +273 -0
- package/ReactCommon/react/renderer/animations/utils.h +12 -1
- package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +1 -1
- package/ReactCommon/react/renderer/attributedstring/conversions.h +104 -3
- package/ReactCommon/react/renderer/components/image/conversions.h +2 -3
- package/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h +0 -1
- package/ReactCommon/react/renderer/components/scrollview/conversions.h +0 -1
- package/ReactCommon/react/renderer/components/text/stateConversions.h +0 -1
- package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +531 -21
- package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +9 -0
- package/ReactCommon/react/renderer/components/view/BaseTouch.cpp +3 -2
- package/ReactCommon/react/renderer/components/view/BaseTouch.h +7 -0
- package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +15 -0
- package/ReactCommon/react/renderer/components/view/BaseViewProps.h +1 -0
- package/ReactCommon/react/renderer/components/view/PointerEvent.cpp +2 -0
- package/ReactCommon/react/renderer/components/view/PointerEvent.h +5 -0
- package/ReactCommon/react/renderer/components/view/TouchEvent.h +0 -2
- package/ReactCommon/react/renderer/components/view/TouchEventEmitter.cpp +23 -5
- package/ReactCommon/react/renderer/components/view/TouchEventEmitter.h +1 -0
- package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +5 -0
- package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +33 -28
- package/ReactCommon/react/renderer/components/view/accessibilityPropsConversions.h +0 -1
- package/ReactCommon/react/renderer/components/view/conversions.h +44 -28
- package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +71 -5
- package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.h +1 -0
- package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/NativeDrawable.h +47 -16
- package/ReactCommon/react/renderer/components/view/platform/cxx/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +2 -2
- package/ReactCommon/react/renderer/{graphics/DoubleConversions.h → components/view/platform/tvos/react/renderer/components/view/HostPlatformTouch.h} +2 -4
- package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewEventEmitter.h +14 -0
- package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewProps.cpp +38 -0
- package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewProps.h +29 -0
- package/ReactCommon/react/renderer/components/view/platform/tvos/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +30 -0
- package/ReactCommon/react/renderer/components/view/propsConversions.h +8 -2
- package/ReactCommon/react/renderer/components/view/tests/ConversionsTest.cpp +86 -0
- package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +34 -0
- package/ReactCommon/react/renderer/core/EventEmitter.cpp +67 -2
- package/ReactCommon/react/renderer/core/EventEmitter.h +25 -0
- package/ReactCommon/react/renderer/core/EventPipe.h +3 -1
- package/ReactCommon/react/renderer/core/EventQueueProcessor.cpp +18 -10
- package/ReactCommon/react/renderer/core/EventTarget.cpp +8 -5
- package/ReactCommon/react/renderer/core/LayoutContext.h +9 -2
- package/ReactCommon/react/renderer/core/LayoutMetrics.cpp +5 -3
- package/ReactCommon/react/renderer/core/LayoutPrimitives.h +1 -0
- package/ReactCommon/react/renderer/core/Props.cpp +20 -0
- package/ReactCommon/react/renderer/core/RawEvent.cpp +4 -2
- package/ReactCommon/react/renderer/core/RawEvent.h +6 -6
- package/ReactCommon/react/renderer/core/ShadowNode.h +2 -2
- package/ReactCommon/react/renderer/core/conversions.h +4 -0
- package/ReactCommon/react/renderer/core/graphicsConversions.h +4 -4
- package/ReactCommon/react/renderer/core/propsConversions.h +1 -1
- package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +52 -3
- package/ReactCommon/react/renderer/core/tests/EventTargetTests.cpp +26 -0
- package/ReactCommon/react/renderer/css/tests/CSSValueParserTest.cpp +1 -1
- package/ReactCommon/react/renderer/debug/DebugStringConvertible.cpp +42 -26
- package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +4 -2
- package/ReactCommon/react/renderer/debug/tests/DebugStringConvertibleTest.cpp +34 -3
- package/ReactCommon/react/renderer/graphics/BlendMode.h +5 -0
- package/ReactCommon/react/renderer/graphics/CMakeLists.txt +1 -0
- package/ReactCommon/react/renderer/graphics/ColorStop.h +3 -0
- package/ReactCommon/react/renderer/graphics/LinearGradient.h +3 -0
- package/ReactCommon/react/renderer/graphics/RadialGradient.h +4 -0
- package/ReactCommon/react/renderer/graphics/React-graphics.podspec +1 -0
- package/ReactCommon/react/renderer/graphics/ValueUnit.cpp +1 -1
- package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageFetcher.cpp +0 -5
- package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/ImageManager.cpp +2 -2
- package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h +0 -4
- package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +5 -1
- package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.cpp +12 -4
- package/ReactCommon/react/renderer/mounting/CMakeLists.txt +1 -0
- package/ReactCommon/react/renderer/mounting/Differentiator.cpp +307 -4
- package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +27 -2
- package/ReactCommon/react/renderer/mounting/internal/LongestIncreasingSubsequence.h +95 -0
- package/ReactCommon/react/renderer/mounting/tests/DifferentiatorUnflattenTest.cpp +212 -0
- package/ReactCommon/react/renderer/mounting/tests/LongestIncreasingSubsequenceTest.cpp +154 -0
- package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +314 -18
- package/ReactCommon/react/renderer/mounting/updateMountedFlag.cpp +38 -20
- package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +20 -22
- package/ReactCommon/react/renderer/scheduler/CMakeLists.txt +1 -0
- package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +76 -3
- package/ReactCommon/react/renderer/scheduler/Scheduler.h +12 -0
- package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +5 -0
- package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +0 -7
- package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +2 -1
- package/ReactCommon/react/renderer/uimanager/UIManager.cpp +16 -1
- package/ReactCommon/react/renderer/uimanager/UIManager.h +8 -0
- package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +1 -0
- package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +347 -5
- package/ReactCommon/react/renderer/uimanager/UIManagerBinding.h +5 -3
- package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +5 -0
- package/ReactCommon/react/renderer/uimanager/UIManagerViewTransitionDelegate.h +82 -0
- package/ReactCommon/react/renderer/viewtransition/CMakeLists.txt +22 -0
- package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.cpp +520 -0
- package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.h +161 -0
- package/ReactCommon/react/runtime/TimerManager.cpp +4 -2
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +37 -0
- package/ReactCommon/react/timing/PrivacyInfo.xcprivacy +21 -0
- package/ReactCommon/react/timing/React-timing.podspec +2 -0
- package/ReactCommon/react/timing/primitives.h +33 -1
- package/ReactCommon/yoga/yoga/YGEnums.cpp +32 -0
- package/ReactCommon/yoga/yoga/YGEnums.h +20 -4
- package/ReactCommon/yoga/yoga/YGMacros.h +2 -0
- package/ReactCommon/yoga/yoga/YGNode.h +1 -1
- package/ReactCommon/yoga/yoga/YGNodeStyle.cpp +269 -0
- package/ReactCommon/yoga/yoga/YGNodeStyle.h +93 -1
- package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +40 -9
- package/ReactCommon/yoga/yoga/algorithm/Align.h +12 -1
- package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +106 -14
- package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +22 -0
- package/ReactCommon/yoga/yoga/enums/Align.h +3 -1
- package/ReactCommon/yoga/yoga/enums/Display.h +2 -1
- package/ReactCommon/yoga/yoga/enums/ExperimentalFeature.h +2 -1
- package/ReactCommon/yoga/yoga/enums/GridTrackType.h +43 -0
- package/ReactCommon/yoga/yoga/enums/Justify.h +5 -1
- package/ReactCommon/yoga/yoga/event/event.cpp +2 -0
- package/ReactCommon/yoga/yoga/event/event.h +1 -0
- package/ReactCommon/yoga/yoga/node/Node.cpp +6 -1
- package/ReactCommon/yoga/yoga/node/Node.h +4 -4
- package/ReactCommon/yoga/yoga/style/GridLine.h +53 -0
- package/ReactCommon/yoga/yoga/style/GridTrack.h +63 -0
- package/ReactCommon/yoga/yoga/style/Style.h +261 -71
- package/ReactCommon/yoga/yoga/style/StyleSizeLength.h +7 -1
- package/ReactCommon/yoga/yoga/style/StyleValueHandle.h +8 -0
- package/ReactCommon/yoga/yoga/style/StyleValuePool.h +10 -0
- package/cli.js +1 -1
- package/flow/HermesInternalType.js +1 -1
- package/flow/bom.js.flow +95 -3
- package/flow/dom.js.flow +89 -89
- package/gradle/libs.versions.toml +3 -1
- package/index.js +30 -3
- package/index.js.flow +23 -1
- package/package.json +11 -11
- package/react-native.config.js +3 -3
- package/scripts/cocoapods/rncore.rb +65 -11
- package/scripts/cocoapods/rndependencies.rb +65 -11
- package/scripts/cocoapods/utils.rb +52 -0
- package/scripts/codegen/generate-artifacts-executor/generateCustomURLHandlers.js +1 -1
- package/scripts/codegen/generate-artifacts-executor/generateNativeCode.js +13 -4
- package/scripts/codegen/generate-artifacts-executor/generateRCTModuleProviders.js +1 -1
- package/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +1 -1
- package/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +17 -6
- package/scripts/codegen/generate-artifacts-executor/generateSchemaInfos.js +1 -1
- package/scripts/codegen/generate-artifacts-executor/generateUnstableModulesRequiringMainQueueSetupProvider.js +1 -1
- package/scripts/codegen/generate-artifacts-executor/index.js +2 -0
- package/scripts/codegen/generate-artifacts-executor/utils.js +1 -1
- package/scripts/codegen/generate-specs-cli-executor.js +1 -1
- package/scripts/generate-codegen-artifacts.js +20 -2
- package/scripts/generate-provider-cli.js +1 -1
- package/scripts/react_native_pods.rb +25 -2
- package/scripts/react_native_pods_utils/script_phases.rb +9 -3
- package/scripts/replace-rncore-version.js +20 -0
- package/scripts/xcode/with-environment.sh +7 -1
- package/sdks/.hermesv1version +1 -1
- package/sdks/.hermesversion +1 -1
- package/sdks/hermes-engine/hermes-utils.rb +92 -5
- package/sdks/hermes-engine/version.properties +2 -2
- package/src/private/animated/NativeAnimatedValidation.js +1 -1
- package/src/private/animated/createAnimatedPropsHook.js +2 -2
- package/src/private/components/virtualcollection/FlingConstants.js +21 -0
- package/src/private/components/virtualcollection/Virtual.js +62 -0
- package/src/private/components/virtualcollection/VirtualCollectionView.js +238 -0
- package/src/private/components/virtualcollection/column/VirtualColumn.js +43 -0
- package/src/private/components/virtualcollection/column/VirtualColumnGenerator.js +72 -0
- package/src/private/components/virtualcollection/debug/FlingItemOverlay.js +13 -0
- package/src/private/components/virtualcollection/dom/getScrollParent.js +43 -0
- package/src/private/components/virtualcollection/dom/isScrollableNode.js +22 -0
- package/src/private/components/virtualcollection/row/VirtualRow.js +43 -0
- package/src/private/components/virtualcollection/row/VirtualRowGenerator.js +72 -0
- package/src/private/devsupport/devmenu/elementinspector/getInspectorDataForViewAtPoint.js +2 -2
- package/src/private/devsupport/devmenu/elementinspector/useExternalInspection.js +1 -1
- package/src/private/devsupport/devmenu/specs/NativeDevMenu.js +1 -1
- package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +2 -2
- package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsSettingsManager.js +2 -2
- package/src/private/featureflags/ReactNativeFeatureFlags.js +41 -37
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +3 -3
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +9 -7
- package/src/private/renderer/errorhandling/ErrorHandlers.js +3 -3
- package/src/private/renderer/events/LegacySyntheticEvent.js +90 -0
- package/src/private/renderer/events/ReactNativeEventTypeMapping.js +103 -0
- package/src/private/renderer/events/ReactNativeResponder.js +687 -0
- package/src/private/renderer/events/ResponderEvent.js +40 -0
- package/src/private/renderer/events/ResponderTouchHistoryStore.js +258 -0
- package/src/private/renderer/events/dispatchNativeEvent.js +83 -0
- package/src/private/setup/setUpDOM.js +20 -0
- package/src/private/specs_DEPRECATED/components/ActivityIndicatorViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidDrawerLayoutNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/AndroidSwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/DebuggingOverlayNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/ProgressBarAndroidNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/PullToRefreshViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/RCTInputAccessoryViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/RCTModalHostViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/RCTSafeAreaViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/SwitchNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/components/UnimplementedNativeViewNativeComponent.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeAccessibilityInfo.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAccessibilityManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeActionSheetManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAlertManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAppState.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeAppearance.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeBlobModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeClipboard.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeDevLoadingView.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeDevSettings.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeDeviceEventManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeDialogManagerAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeFileReaderModule.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeFrameRateLogger.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeHeadlessJsTaskSupport.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeI18nManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeImageEditor.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeImageLoaderAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeImageStoreAndroid.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeImageStoreIOS.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeIntentAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeJSCHeapCapture.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeKeyboardObserver.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeLinkingManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeLogBox.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeModalManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeNetworkingAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativePermissionsAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsAndroid.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsIOS.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativePushNotificationManagerIOS.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeRedBox.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeSegmentFetcher.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeSettingsManager.js +2 -2
- package/src/private/specs_DEPRECATED/modules/NativeShareModule.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeSoundManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeTiming.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeToastAndroid.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeUIManager.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeVibration.js +1 -1
- package/src/private/specs_DEPRECATED/modules/NativeWebSocketModule.js +2 -2
- package/src/private/styles/composeStyles.js +1 -1
- package/src/private/types/HostComponent.js +1 -1
- package/src/private/utilities/toExtendedError.js +1 -1
- package/src/private/viewtransition/specs/NativeViewTransition.js +33 -0
- package/src/private/webapis/dom/events/Event.js +10 -1
- package/src/private/webapis/dom/events/EventTarget.js +60 -18
- package/src/private/webapis/dom/events/internals/EventInternals.js +18 -1
- package/src/private/webapis/dom/events/internals/EventTargetInternals.js +12 -0
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +24 -0
- package/src/private/webapis/dom/nodes/ReadOnlyElement.js +4 -6
- package/src/private/webapis/dom/nodes/ReadOnlyNode.js +70 -1
- package/src/private/webapis/dom/nodes/internals/NodeInternals.js +10 -0
- package/src/private/webapis/dom/nodes/specs/NativeDOM.js +1 -1
- package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +2 -2
- package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +5 -9
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +2 -2
- package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +2 -2
- package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +2 -2
- package/src/private/webapis/performance/internals/RawPerformanceEntry.js +1 -1
- package/src/private/webapis/performance/specs/NativePerformance.js +1 -1
- package/src/private/webapis/structuredClone/structuredClone.js +1 -1
- package/src/private/webapis/webidl/PlatformObjects.js +4 -4
- package/types/public/ReactNativeTVTypes.d.ts +9 -0
- package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +0 -19669
- package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +0 -11129
- package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +0 -12930
- package/Libraries/Renderer/shims/ReactNative.js +0 -27
- package/Libraries/Utilities/GlobalPerformanceLogger.js +0 -24
- package/Libraries/Utilities/PerformanceLoggerContext.js +0 -33
- package/Libraries/Utilities/createPerformanceLogger.js +0 -329
- package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaMethodWrapper.kt +0 -442
- package/ReactAndroid/src/main/java/com/facebook/react/modules/blob/BlobCollector.kt +0 -31
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerLegacyView.kt +0 -47
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIFinalizer.java +0 -31
- package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.java +0 -35
- package/ReactCommon/react/renderer/graphics/DoubleConversions.cpp +0 -38
|
@@ -0,0 +1,520 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "ViewTransitionModule.h"
|
|
9
|
+
|
|
10
|
+
#include <glog/logging.h>
|
|
11
|
+
#include <react/renderer/components/root/RootShadowNode.h>
|
|
12
|
+
#include <react/renderer/core/LayoutableShadowNode.h>
|
|
13
|
+
#include <react/renderer/core/RawProps.h>
|
|
14
|
+
#include <react/renderer/mounting/MountingTransaction.h>
|
|
15
|
+
#include <react/renderer/mounting/ShadowTree.h>
|
|
16
|
+
#include <react/renderer/uimanager/UIManager.h>
|
|
17
|
+
|
|
18
|
+
namespace facebook::react {
|
|
19
|
+
|
|
20
|
+
ViewTransitionModule::~ViewTransitionModule() {
|
|
21
|
+
if (uiManager_ != nullptr) {
|
|
22
|
+
if (uiManager_->getViewTransitionDelegate() == this) {
|
|
23
|
+
uiManager_->setViewTransitionDelegate(nullptr);
|
|
24
|
+
}
|
|
25
|
+
uiManager_->unregisterCommitHook(*this);
|
|
26
|
+
uiManager_ = nullptr;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
void ViewTransitionModule::initialize(
|
|
31
|
+
UIManager* uiManager,
|
|
32
|
+
std::weak_ptr<ViewTransitionModule> weakThis) {
|
|
33
|
+
if (uiManager_ != nullptr) {
|
|
34
|
+
uiManager_->unregisterCommitHook(*this);
|
|
35
|
+
}
|
|
36
|
+
uiManager_ = uiManager;
|
|
37
|
+
if (uiManager_ != nullptr) {
|
|
38
|
+
uiManager_->registerCommitHook(*this);
|
|
39
|
+
|
|
40
|
+
// Register as MountingOverrideDelegate on existing surfaces
|
|
41
|
+
uiManager_->getShadowTreeRegistry().enumerate(
|
|
42
|
+
[weakThis](const ShadowTree& shadowTree, bool& /*stop*/) {
|
|
43
|
+
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
|
|
44
|
+
weakThis);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Register on surfaces started in the future
|
|
48
|
+
uiManager_->setOnSurfaceStartCallback(
|
|
49
|
+
[weakThis](const ShadowTree& shadowTree) {
|
|
50
|
+
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
|
|
51
|
+
weakThis);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
uiManager_->setViewTransitionDelegate(this);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void ViewTransitionModule::applyViewTransitionName(
|
|
59
|
+
const ShadowNode& shadowNode,
|
|
60
|
+
const std::string& name,
|
|
61
|
+
const std::string& /*className*/) {
|
|
62
|
+
auto tag = shadowNode.getTag();
|
|
63
|
+
auto surfaceId = shadowNode.getSurfaceId();
|
|
64
|
+
|
|
65
|
+
auto layoutMetrics = captureLayoutMetricsFromRoot(shadowNode);
|
|
66
|
+
if (layoutMetrics == EmptyLayoutMetrics) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Convert LayoutMetrics to AnimationKeyFrameViewLayoutMetrics
|
|
71
|
+
AnimationKeyFrameViewLayoutMetrics keyframeMetrics{
|
|
72
|
+
.originFromRoot = layoutMetrics.frame.origin,
|
|
73
|
+
.size = layoutMetrics.frame.size,
|
|
74
|
+
.pointScaleFactor = layoutMetrics.pointScaleFactor};
|
|
75
|
+
|
|
76
|
+
nameRegistry_[tag].insert(name);
|
|
77
|
+
|
|
78
|
+
// If applyViewTransitionName is called after transition started, this is the
|
|
79
|
+
// "new" state (end snapshot). Otherwise, this is the "old" state (start
|
|
80
|
+
// snapshot)
|
|
81
|
+
if (!transitionStarted_) {
|
|
82
|
+
AnimationKeyFrameView oldView{
|
|
83
|
+
.layoutMetrics = keyframeMetrics, .tag = tag, .surfaceId = surfaceId};
|
|
84
|
+
oldLayout_[name] = oldView;
|
|
85
|
+
|
|
86
|
+
// Request the platform to capture a bitmap snapshot of the old view
|
|
87
|
+
// while it's still mounted. The platform stores the bitmap keyed by tag.
|
|
88
|
+
if (uiManager_ != nullptr) {
|
|
89
|
+
auto* delegate = uiManager_->getDelegate();
|
|
90
|
+
if (delegate != nullptr) {
|
|
91
|
+
delegate->uiManagerDidCaptureViewSnapshot(tag, surfaceId);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (auto it = oldPseudoElementNodesRepository_.find(name);
|
|
96
|
+
it != oldPseudoElementNodesRepository_.end()) {
|
|
97
|
+
// Find the pseudo element created from this specific source tag
|
|
98
|
+
auto& pseudoElementsBySourceTag = it->second;
|
|
99
|
+
auto innerIt = pseudoElementsBySourceTag.find(tag);
|
|
100
|
+
|
|
101
|
+
if (innerIt != pseudoElementsBySourceTag.end()) {
|
|
102
|
+
// Only clone the pseudo-element if the layout metrics changed
|
|
103
|
+
// since it was last created/refreshed (e.g. due to scrolling or
|
|
104
|
+
// React updates).
|
|
105
|
+
auto& cachedMetrics = innerIt->second.lastAppliedLayoutMetrics;
|
|
106
|
+
if (cachedMetrics.originFromRoot.x !=
|
|
107
|
+
keyframeMetrics.originFromRoot.x ||
|
|
108
|
+
cachedMetrics.originFromRoot.y !=
|
|
109
|
+
keyframeMetrics.originFromRoot.y ||
|
|
110
|
+
cachedMetrics.size.width != keyframeMetrics.size.width ||
|
|
111
|
+
cachedMetrics.size.height != keyframeMetrics.size.height) {
|
|
112
|
+
auto updatedRawProps = RawProps(
|
|
113
|
+
folly::dynamic::object("left", keyframeMetrics.originFromRoot.x)(
|
|
114
|
+
"top", keyframeMetrics.originFromRoot.y)(
|
|
115
|
+
"width", keyframeMetrics.size.width)(
|
|
116
|
+
"height", keyframeMetrics.size.height)(
|
|
117
|
+
"pointerEvents", "none")("opacity", 0)("collapsable", false)(
|
|
118
|
+
"position", "absolute"));
|
|
119
|
+
|
|
120
|
+
auto updatedNode = uiManager_->cloneNode(
|
|
121
|
+
*innerIt->second.node,
|
|
122
|
+
nullptr /* children */,
|
|
123
|
+
std::move(updatedRawProps));
|
|
124
|
+
if (updatedNode != nullptr) {
|
|
125
|
+
innerIt->second.node = updatedNode;
|
|
126
|
+
cachedMetrics = keyframeMetrics;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
oldPseudoElementNodes_[name] = innerIt->second.node;
|
|
130
|
+
} else {
|
|
131
|
+
LOG(WARNING)
|
|
132
|
+
<< "applyViewTransitionName: old pseudo element shadow node doesn't exist for source tag "
|
|
133
|
+
<< tag << " with name " << name;
|
|
134
|
+
}
|
|
135
|
+
} else {
|
|
136
|
+
LOG(WARNING)
|
|
137
|
+
<< "applyViewTransitionName: old pseudo element shadow node doesn't exist for name "
|
|
138
|
+
<< name;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
} else {
|
|
142
|
+
AnimationKeyFrameView newView{
|
|
143
|
+
.layoutMetrics = keyframeMetrics, .tag = tag, .surfaceId = surfaceId};
|
|
144
|
+
newLayout_[name] = newView;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
void ViewTransitionModule::createViewTransitionInstance(
|
|
149
|
+
const std::string& name,
|
|
150
|
+
Tag pseudoElementTag) {
|
|
151
|
+
if (uiManager_ == nullptr) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// if createViewTransitionInstance is called before transition started, it
|
|
156
|
+
// creates the old pseudo elements for exiting nodes that potentially
|
|
157
|
+
// participate in current transition that's about to happen; if called after
|
|
158
|
+
// transition started, it creates old pseudo elements for entering nodes, and
|
|
159
|
+
// will be used in next transition when these node are exiting
|
|
160
|
+
bool forNextTransition = false;
|
|
161
|
+
AnimationKeyFrameView view = {};
|
|
162
|
+
auto it = oldLayout_.find(name);
|
|
163
|
+
if (it == oldLayout_.end()) {
|
|
164
|
+
forNextTransition = true;
|
|
165
|
+
if (auto newIt = newLayout_.find(name); newIt != newLayout_.end()) {
|
|
166
|
+
view = newIt->second;
|
|
167
|
+
}
|
|
168
|
+
} else {
|
|
169
|
+
view = it->second;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Build props: absolute position matching old element, non-interactive
|
|
173
|
+
if (pseudoElementTag > 0 && view.tag > 0) {
|
|
174
|
+
// Create a base node with layout props via createNode
|
|
175
|
+
// TODO: T262559684 created dedicated shadow node type for old pseudo
|
|
176
|
+
// element
|
|
177
|
+
auto rawProps = RawProps(
|
|
178
|
+
folly::dynamic::object("position", "absolute")(
|
|
179
|
+
"left", view.layoutMetrics.originFromRoot.x)(
|
|
180
|
+
"top", view.layoutMetrics.originFromRoot.y)(
|
|
181
|
+
"width", view.layoutMetrics.size.width)(
|
|
182
|
+
"height", view.layoutMetrics.size.height)("pointerEvents", "none")(
|
|
183
|
+
"opacity", 0)("collapsable", false));
|
|
184
|
+
|
|
185
|
+
auto baseNode = uiManager_->createNode(
|
|
186
|
+
pseudoElementTag,
|
|
187
|
+
"View",
|
|
188
|
+
view.surfaceId,
|
|
189
|
+
std::move(rawProps),
|
|
190
|
+
nullptr /* instanceHandle */);
|
|
191
|
+
|
|
192
|
+
if (baseNode == nullptr) {
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// Clone the shadow node — bitmap will be set by platform
|
|
197
|
+
auto pseudoElementNode = baseNode->clone({});
|
|
198
|
+
|
|
199
|
+
if (pseudoElementNode != nullptr) {
|
|
200
|
+
if (!forNextTransition) {
|
|
201
|
+
oldPseudoElementNodes_[name] = pseudoElementNode;
|
|
202
|
+
}
|
|
203
|
+
oldPseudoElementNodesRepository_[name][view.tag] = InactivePseudoElement{
|
|
204
|
+
.node = pseudoElementNode,
|
|
205
|
+
.sourceTag = view.tag,
|
|
206
|
+
.lastAppliedLayoutMetrics = view.layoutMetrics};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
RootShadowNode::Unshared ViewTransitionModule::shadowTreeWillCommit(
|
|
212
|
+
const ShadowTree& shadowTree,
|
|
213
|
+
const RootShadowNode::Shared& /*oldRootShadowNode*/,
|
|
214
|
+
const RootShadowNode::Unshared& newRootShadowNode,
|
|
215
|
+
const ShadowTreeCommitOptions& /*commitOptions*/) noexcept {
|
|
216
|
+
if (oldPseudoElementNodes_.empty()) {
|
|
217
|
+
return newRootShadowNode;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
auto surfaceId = shadowTree.getSurfaceId();
|
|
221
|
+
|
|
222
|
+
// Collect pseudo-element nodes for this surface, skipping any that are
|
|
223
|
+
// already present in the children list (from a previous commit hook run).
|
|
224
|
+
const auto& existingChildren = newRootShadowNode->getChildren();
|
|
225
|
+
std::unordered_set<Tag> existingTags;
|
|
226
|
+
existingTags.reserve(existingChildren.size());
|
|
227
|
+
for (const auto& child : existingChildren) {
|
|
228
|
+
existingTags.insert(child->getTag());
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
auto newChildren =
|
|
232
|
+
std::make_shared<std::vector<std::shared_ptr<const ShadowNode>>>(
|
|
233
|
+
existingChildren);
|
|
234
|
+
bool appended = false;
|
|
235
|
+
for (const auto& [name, node] : oldPseudoElementNodes_) {
|
|
236
|
+
if (node->getSurfaceId() == surfaceId &&
|
|
237
|
+
existingTags.find(node->getTag()) == existingTags.end()) {
|
|
238
|
+
newChildren->push_back(node);
|
|
239
|
+
appended = true;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
if (!appended) {
|
|
244
|
+
return newRootShadowNode;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return std::make_shared<RootShadowNode>(
|
|
248
|
+
*newRootShadowNode,
|
|
249
|
+
ShadowNodeFragment{
|
|
250
|
+
.props = ShadowNodeFragment::propsPlaceholder(),
|
|
251
|
+
.children = newChildren,
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
bool ViewTransitionModule::shouldOverridePullTransaction() const {
|
|
256
|
+
return !oldPseudoElementNodesRepository_.empty();
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
std::optional<MountingTransaction> ViewTransitionModule::pullTransaction(
|
|
260
|
+
SurfaceId surfaceId,
|
|
261
|
+
MountingTransaction::Number number,
|
|
262
|
+
const TransactionTelemetry& telemetry,
|
|
263
|
+
ShadowViewMutationList mutations) const {
|
|
264
|
+
for (const auto& mutation : mutations) {
|
|
265
|
+
if (mutation.type == ShadowViewMutation::Delete) {
|
|
266
|
+
auto tag = mutation.oldChildShadowView.tag;
|
|
267
|
+
for (auto it = oldPseudoElementNodesRepository_.begin();
|
|
268
|
+
it != oldPseudoElementNodesRepository_.end();) {
|
|
269
|
+
auto& pseudoElementsBySourceTag = it->second;
|
|
270
|
+
if (auto innerIt = pseudoElementsBySourceTag.find(tag);
|
|
271
|
+
innerIt != pseudoElementsBySourceTag.end()) {
|
|
272
|
+
pseudoElementsBySourceTag.erase(innerIt);
|
|
273
|
+
}
|
|
274
|
+
if (pseudoElementsBySourceTag.empty()) {
|
|
275
|
+
it = oldPseudoElementNodesRepository_.erase(it);
|
|
276
|
+
} else {
|
|
277
|
+
++it;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return MountingTransaction{
|
|
283
|
+
surfaceId, number, std::move(mutations), telemetry};
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
std::shared_ptr<const ShadowNode>
|
|
287
|
+
ViewTransitionModule::findPseudoElementShadowNodeByTag(Tag tag) const {
|
|
288
|
+
if (uiManager_ == nullptr) {
|
|
289
|
+
return nullptr;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
auto shadowNode = std::shared_ptr<const ShadowNode>{};
|
|
293
|
+
|
|
294
|
+
uiManager_->getShadowTreeRegistry().enumerate(
|
|
295
|
+
[&](const ShadowTree& shadowTree, bool& stop) {
|
|
296
|
+
const auto rootShadowNode =
|
|
297
|
+
shadowTree.getCurrentRevision().rootShadowNode;
|
|
298
|
+
|
|
299
|
+
if (rootShadowNode != nullptr) {
|
|
300
|
+
const auto& children = rootShadowNode->getChildren();
|
|
301
|
+
// Pseudo element nodes are appended after the first child (the main
|
|
302
|
+
// React tree), so iterate from index 1 onwards.
|
|
303
|
+
for (size_t i = 1; i < children.size(); ++i) {
|
|
304
|
+
if (children[i]->getTag() == tag) {
|
|
305
|
+
shadowNode = children[i];
|
|
306
|
+
stop = true;
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
return shadowNode;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
void ViewTransitionModule::cancelViewTransitionName(
|
|
317
|
+
const ShadowNode& shadowNode,
|
|
318
|
+
const std::string& name) {
|
|
319
|
+
oldLayout_.erase(name);
|
|
320
|
+
newLayout_.erase(name);
|
|
321
|
+
cancelledNameRegistry_[shadowNode.getTag()].insert(name);
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
void ViewTransitionModule::restoreViewTransitionName(
|
|
325
|
+
const ShadowNode& shadowNode) {
|
|
326
|
+
nameRegistry_[shadowNode.getTag()].merge(
|
|
327
|
+
cancelledNameRegistry_[shadowNode.getTag()]);
|
|
328
|
+
cancelledNameRegistry_.erase(shadowNode.getTag());
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
void ViewTransitionModule::applySnapshotsOnPseudoElementShadowNodes() {
|
|
332
|
+
if (oldPseudoElementNodes_.empty() || uiManager_ == nullptr) {
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// Set view snapshots — the pseudo-element nodes themselves will be committed
|
|
337
|
+
// through the normal completeRoot flow via getPseudoElementNodes().
|
|
338
|
+
auto* delegate = uiManager_->getDelegate();
|
|
339
|
+
if (delegate != nullptr) {
|
|
340
|
+
for (const auto& [name, node] : oldPseudoElementNodes_) {
|
|
341
|
+
auto layoutIt = oldLayout_.find(name);
|
|
342
|
+
if (layoutIt != oldLayout_.end()) {
|
|
343
|
+
delegate->uiManagerDidSetViewSnapshot(
|
|
344
|
+
layoutIt->second.tag, node->getTag(), node->getSurfaceId());
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
LayoutMetrics ViewTransitionModule::captureLayoutMetricsFromRoot(
|
|
351
|
+
const ShadowNode& shadowNode) {
|
|
352
|
+
if (uiManager_ == nullptr) {
|
|
353
|
+
return EmptyLayoutMetrics;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Get the current revision (root node) for this surface
|
|
357
|
+
auto currentRevision =
|
|
358
|
+
uiManager_->getShadowTreeRevisionProvider()->getCurrentRevision(
|
|
359
|
+
shadowNode.getSurfaceId());
|
|
360
|
+
|
|
361
|
+
if (currentRevision == nullptr) {
|
|
362
|
+
return EmptyLayoutMetrics;
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
// Cast root to LayoutableShadowNode
|
|
366
|
+
auto layoutableRoot =
|
|
367
|
+
dynamic_cast<const LayoutableShadowNode*>(currentRevision.get());
|
|
368
|
+
if (layoutableRoot == nullptr) {
|
|
369
|
+
return EmptyLayoutMetrics;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
return LayoutableShadowNode::computeLayoutMetricsFromRoot(
|
|
373
|
+
shadowNode.getFamily(), *layoutableRoot, {});
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
void ViewTransitionModule::startViewTransition(
|
|
377
|
+
std::function<void()> mutationCallback,
|
|
378
|
+
std::function<void()> onReadyCallback,
|
|
379
|
+
std::function<void()> onCompleteCallback) {
|
|
380
|
+
// If the reconciler signalled suspension and a transition is still active,
|
|
381
|
+
// queue this transition to run after the current one finishes.
|
|
382
|
+
// Only queue if the previous transition is still running; if it already
|
|
383
|
+
// finished, the flag is stale and we should run normally.
|
|
384
|
+
if (suspendNextTransition_ && transitionStarted_) {
|
|
385
|
+
suspendNextTransition_ = false;
|
|
386
|
+
pendingTransitions_.push(
|
|
387
|
+
PendingTransition{
|
|
388
|
+
std::move(mutationCallback),
|
|
389
|
+
std::move(onReadyCallback),
|
|
390
|
+
std::move(onCompleteCallback)});
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
suspendNextTransition_ = false;
|
|
394
|
+
|
|
395
|
+
// Mark transition as started
|
|
396
|
+
transitionStarted_ = true;
|
|
397
|
+
pendingAnimationIds_.clear();
|
|
398
|
+
onCompleteCallback_ = onCompleteCallback;
|
|
399
|
+
|
|
400
|
+
// Call mutation callback (including commitRoot, measureInstance,
|
|
401
|
+
// applyViewTransitionName, createViewTransitionInstance for old & new)
|
|
402
|
+
if (mutationCallback) {
|
|
403
|
+
mutationCallback();
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
applySnapshotsOnPseudoElementShadowNodes();
|
|
407
|
+
|
|
408
|
+
transitionReadyFinished_ = false;
|
|
409
|
+
// onReadyCallback starts the animations. Any animation registered via
|
|
410
|
+
// waitForTransitionAnimation during this callback is part of this transition.
|
|
411
|
+
if (onReadyCallback) {
|
|
412
|
+
onReadyCallback();
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
void ViewTransitionModule::waitForTransitionAnimation(int animationId) {
|
|
417
|
+
if (!transitionReadyFinished_) {
|
|
418
|
+
pendingAnimationIds_.insert(animationId);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
void ViewTransitionModule::transitionAnimationFinished(int animationId) {
|
|
423
|
+
pendingAnimationIds_.erase(animationId);
|
|
424
|
+
if (transitionReadyFinished_ && pendingAnimationIds_.empty() &&
|
|
425
|
+
onCompleteCallback_) {
|
|
426
|
+
auto callback = std::move(onCompleteCallback_);
|
|
427
|
+
onCompleteCallback_ = nullptr;
|
|
428
|
+
callback();
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
void ViewTransitionModule::startViewTransitionReadyFinished() {
|
|
433
|
+
transitionReadyFinished_ = true;
|
|
434
|
+
|
|
435
|
+
if (pendingAnimationIds_.empty() && onCompleteCallback_) {
|
|
436
|
+
auto callback = std::move(onCompleteCallback_);
|
|
437
|
+
onCompleteCallback_ = nullptr;
|
|
438
|
+
callback();
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
void ViewTransitionModule::suspendOnActiveViewTransition() {
|
|
443
|
+
// Signal that the next transition should be suspended until the current
|
|
444
|
+
// one finishes. The actual queueing happens in startViewTransition.
|
|
445
|
+
if (transitionStarted_) {
|
|
446
|
+
// if there's no active transition, suspendOnActiveViewTransition is no-op
|
|
447
|
+
suspendNextTransition_ = true;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
|
|
451
|
+
void ViewTransitionModule::startViewTransitionEnd() {
|
|
452
|
+
for (const auto& [tag, names] : nameRegistry_) {
|
|
453
|
+
for (const auto& name : names) {
|
|
454
|
+
oldLayout_.erase(name);
|
|
455
|
+
newLayout_.erase(name);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
nameRegistry_.clear();
|
|
459
|
+
oldPseudoElementNodes_.clear();
|
|
460
|
+
|
|
461
|
+
// Clear any pending bitmap snapshots that were captured but never consumed.
|
|
462
|
+
if (uiManager_ != nullptr) {
|
|
463
|
+
auto* delegate = uiManager_->getDelegate();
|
|
464
|
+
if (delegate != nullptr) {
|
|
465
|
+
delegate->uiManagerDidClearPendingSnapshots();
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
transitionStarted_ = false;
|
|
470
|
+
|
|
471
|
+
if (!pendingTransitions_.empty()) {
|
|
472
|
+
auto pendingTransition = pendingTransitions_.front();
|
|
473
|
+
pendingTransitions_.pop();
|
|
474
|
+
startViewTransition(
|
|
475
|
+
std::move(pendingTransition.mutationCallback),
|
|
476
|
+
std::move(pendingTransition.onReadyCallback),
|
|
477
|
+
std::move(pendingTransition.onCompleteCallback));
|
|
478
|
+
// when this transition finishes, it'll call startViewTransitionEnd
|
|
479
|
+
// during its complete callback and pendingTransitions_ will be processed
|
|
480
|
+
// again
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
std::optional<UIManagerViewTransitionDelegate::ViewTransitionInstance>
|
|
485
|
+
ViewTransitionModule::getViewTransitionInstance(
|
|
486
|
+
const std::string& name,
|
|
487
|
+
const std::string& pseudo) {
|
|
488
|
+
// Look up layout based on pseudo type ("old" or "new")
|
|
489
|
+
if (pseudo == "new") {
|
|
490
|
+
auto it = newLayout_.find(name);
|
|
491
|
+
if (it != newLayout_.end()) {
|
|
492
|
+
const auto& view = it->second;
|
|
493
|
+
return ViewTransitionInstance{
|
|
494
|
+
.x = view.layoutMetrics.originFromRoot.x,
|
|
495
|
+
.y = view.layoutMetrics.originFromRoot.y,
|
|
496
|
+
.width = view.layoutMetrics.size.width,
|
|
497
|
+
.height = view.layoutMetrics.size.height,
|
|
498
|
+
.nativeTag = view.tag};
|
|
499
|
+
}
|
|
500
|
+
} else if (pseudo == "old") {
|
|
501
|
+
auto it = oldLayout_.find(name);
|
|
502
|
+
if (it != oldLayout_.end()) {
|
|
503
|
+
const auto& view = it->second;
|
|
504
|
+
auto pseudoElementIt = oldPseudoElementNodes_.find(name);
|
|
505
|
+
auto nativeTag = pseudoElementIt != oldPseudoElementNodes_.end()
|
|
506
|
+
? pseudoElementIt->second->getTag()
|
|
507
|
+
: -1;
|
|
508
|
+
return ViewTransitionInstance{
|
|
509
|
+
.x = view.layoutMetrics.originFromRoot.x,
|
|
510
|
+
.y = view.layoutMetrics.originFromRoot.y,
|
|
511
|
+
.width = view.layoutMetrics.size.width,
|
|
512
|
+
.height = view.layoutMetrics.size.height,
|
|
513
|
+
.nativeTag = nativeTag};
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
return std::nullopt;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
} // namespace facebook::react
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#pragma once
|
|
9
|
+
|
|
10
|
+
#include <queue>
|
|
11
|
+
#include <unordered_set>
|
|
12
|
+
|
|
13
|
+
#include <react/renderer/core/LayoutMetrics.h>
|
|
14
|
+
#include <react/renderer/core/ShadowNode.h>
|
|
15
|
+
#include <react/renderer/mounting/MountingOverrideDelegate.h>
|
|
16
|
+
#include <react/renderer/mounting/ShadowViewMutation.h>
|
|
17
|
+
#include <react/renderer/uimanager/UIManagerCommitHook.h>
|
|
18
|
+
#include <react/renderer/uimanager/UIManagerViewTransitionDelegate.h>
|
|
19
|
+
|
|
20
|
+
namespace facebook::react {
|
|
21
|
+
|
|
22
|
+
class ShadowTree;
|
|
23
|
+
class UIManager;
|
|
24
|
+
|
|
25
|
+
class ViewTransitionModule : public UIManagerViewTransitionDelegate,
|
|
26
|
+
public UIManagerCommitHook,
|
|
27
|
+
public MountingOverrideDelegate {
|
|
28
|
+
public:
|
|
29
|
+
~ViewTransitionModule() override;
|
|
30
|
+
|
|
31
|
+
void initialize(UIManager *uiManager, std::weak_ptr<ViewTransitionModule> weakThis);
|
|
32
|
+
|
|
33
|
+
#pragma mark - UIManagerViewTransitionDelegate
|
|
34
|
+
|
|
35
|
+
// will be called when a view will transition. if a view already has a view-transition-name, it may not be called
|
|
36
|
+
// again until it's removed
|
|
37
|
+
void applyViewTransitionName(const ShadowNode &shadowNode, const std::string &name, const std::string &className)
|
|
38
|
+
override;
|
|
39
|
+
|
|
40
|
+
// creates a pseudo-element shadow node for a given transition name using the
|
|
41
|
+
// captured old layout metrics
|
|
42
|
+
void createViewTransitionInstance(const std::string &name, Tag pseudoElementTag) override;
|
|
43
|
+
|
|
44
|
+
// if a viewTransitionName is cancelled, the element doesn't have view-transition-name and browser won't be taking
|
|
45
|
+
// snapshot
|
|
46
|
+
void cancelViewTransitionName(const ShadowNode &shadowNode, const std::string &name) override;
|
|
47
|
+
|
|
48
|
+
// restore cancellation
|
|
49
|
+
void restoreViewTransitionName(const ShadowNode &shadowNode) override;
|
|
50
|
+
|
|
51
|
+
void startViewTransition(
|
|
52
|
+
std::function<void()> mutationCallback,
|
|
53
|
+
std::function<void()> onReadyCallback,
|
|
54
|
+
std::function<void()> onCompleteCallback) override;
|
|
55
|
+
|
|
56
|
+
void startViewTransitionReadyFinished() override;
|
|
57
|
+
|
|
58
|
+
void startViewTransitionEnd() override;
|
|
59
|
+
|
|
60
|
+
std::optional<ViewTransitionInstance> getViewTransitionInstance(const std::string &name, const std::string &pseudo)
|
|
61
|
+
override;
|
|
62
|
+
|
|
63
|
+
#pragma mark - UIManagerCommitHook
|
|
64
|
+
|
|
65
|
+
void commitHookWasRegistered(const UIManager & /*uiManager*/) noexcept override {}
|
|
66
|
+
void commitHookWasUnregistered(const UIManager & /*uiManager*/) noexcept override {}
|
|
67
|
+
RootShadowNode::Unshared shadowTreeWillCommit(
|
|
68
|
+
const ShadowTree &shadowTree,
|
|
69
|
+
const RootShadowNode::Shared &oldRootShadowNode,
|
|
70
|
+
const RootShadowNode::Unshared &newRootShadowNode,
|
|
71
|
+
const ShadowTreeCommitOptions &commitOptions) noexcept override;
|
|
72
|
+
|
|
73
|
+
#pragma mark - MountingOverrideDelegate
|
|
74
|
+
|
|
75
|
+
bool shouldOverridePullTransaction() const override;
|
|
76
|
+
std::optional<MountingTransaction> pullTransaction(
|
|
77
|
+
SurfaceId surfaceId,
|
|
78
|
+
MountingTransaction::Number number,
|
|
79
|
+
const TransactionTelemetry &telemetry,
|
|
80
|
+
ShadowViewMutationList mutations) const override;
|
|
81
|
+
|
|
82
|
+
std::shared_ptr<const ShadowNode> findPseudoElementShadowNodeByTag(Tag tag) const override;
|
|
83
|
+
|
|
84
|
+
void suspendOnActiveViewTransition() override;
|
|
85
|
+
|
|
86
|
+
void waitForTransitionAnimation(int animationId) override;
|
|
87
|
+
|
|
88
|
+
void transitionAnimationFinished(int animationId) override;
|
|
89
|
+
|
|
90
|
+
// Animation state structure for storing minimal view data
|
|
91
|
+
struct AnimationKeyFrameViewLayoutMetrics {
|
|
92
|
+
Point originFromRoot;
|
|
93
|
+
Size size;
|
|
94
|
+
Float pointScaleFactor{};
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
struct AnimationKeyFrameView {
|
|
98
|
+
AnimationKeyFrameViewLayoutMetrics layoutMetrics;
|
|
99
|
+
Tag tag{0};
|
|
100
|
+
SurfaceId surfaceId{0};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
private:
|
|
104
|
+
// registry of layout of old/new views
|
|
105
|
+
std::unordered_map<std::string, AnimationKeyFrameView> oldLayout_{};
|
|
106
|
+
std::unordered_map<std::string, AnimationKeyFrameView> newLayout_{};
|
|
107
|
+
// tag -> names registry, populated during applyViewTransitionName
|
|
108
|
+
// Note that tag and name are not 1:1 mapping
|
|
109
|
+
// - In some nested composition 2 names are mappped to the same tag
|
|
110
|
+
// - tags of old and new views are mapped to the same name(s)
|
|
111
|
+
std::unordered_map<Tag, std::unordered_set<std::string>> nameRegistry_{};
|
|
112
|
+
|
|
113
|
+
// used for cancel/restore viewTransitionName
|
|
114
|
+
std::unordered_map<Tag, std::unordered_set<std::string>> cancelledNameRegistry_{};
|
|
115
|
+
|
|
116
|
+
// pseudo-element nodes keyed by transition name, appended to root children via UIManagerCommitHook
|
|
117
|
+
// TODO: T262559264 pseudo elements should be cleaned up as soon as transition animation ends
|
|
118
|
+
std::unordered_map<std::string, std::shared_ptr<const ShadowNode>> oldPseudoElementNodes_{};
|
|
119
|
+
|
|
120
|
+
struct InactivePseudoElement {
|
|
121
|
+
std::shared_ptr<const ShadowNode> node;
|
|
122
|
+
// tag of the original view this was created from
|
|
123
|
+
Tag sourceTag{0};
|
|
124
|
+
// Layout metrics last applied to the pseudo-element node's props.
|
|
125
|
+
AnimationKeyFrameViewLayoutMetrics lastAppliedLayoutMetrics{};
|
|
126
|
+
};
|
|
127
|
+
// pseudo-element nodes created for entering nodes, to be copied into
|
|
128
|
+
// oldPseudoElementNodes_ during the next applyViewTransitionName call.
|
|
129
|
+
// Mutable because pullTransaction (const) needs to erase unmounted entries.
|
|
130
|
+
mutable std::unordered_map<std::string, std::unordered_map<Tag /* sourceTag */, InactivePseudoElement>>
|
|
131
|
+
oldPseudoElementNodesRepository_{};
|
|
132
|
+
|
|
133
|
+
LayoutMetrics captureLayoutMetricsFromRoot(const ShadowNode &shadowNode);
|
|
134
|
+
|
|
135
|
+
void applySnapshotsOnPseudoElementShadowNodes();
|
|
136
|
+
|
|
137
|
+
UIManager *uiManager_{nullptr};
|
|
138
|
+
|
|
139
|
+
bool transitionStarted_{false};
|
|
140
|
+
|
|
141
|
+
bool transitionReadyFinished_{false};
|
|
142
|
+
|
|
143
|
+
// When suspendNextTransition_ is true and a transition is active, the next
|
|
144
|
+
// startViewTransition calls are queued instead of running immediately.
|
|
145
|
+
bool suspendNextTransition_{false};
|
|
146
|
+
|
|
147
|
+
struct PendingTransition {
|
|
148
|
+
std::function<void()> mutationCallback;
|
|
149
|
+
std::function<void()> onReadyCallback;
|
|
150
|
+
std::function<void()> onCompleteCallback;
|
|
151
|
+
};
|
|
152
|
+
std::queue<PendingTransition> pendingTransitions_{};
|
|
153
|
+
|
|
154
|
+
// Tracks animation IDs that must complete before onCompleteCallback_ fires.
|
|
155
|
+
// Animations are registered via waitForTransitionAnimation (called from JS
|
|
156
|
+
// after connectAnimatedNodeToView) and removed via transitionAnimationFinished.
|
|
157
|
+
std::unordered_set<int> pendingAnimationIds_{};
|
|
158
|
+
std::function<void()> onCompleteCallback_{nullptr};
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
} // namespace facebook::react
|
|
@@ -132,7 +132,9 @@ TimerHandle TimerManager::createRecurringTimer(
|
|
|
132
132
|
return timerID;
|
|
133
133
|
}
|
|
134
134
|
|
|
135
|
-
void TimerManager::deleteTimer(
|
|
135
|
+
void TimerManager::deleteTimer(
|
|
136
|
+
jsi::Runtime& /* runtime */,
|
|
137
|
+
TimerHandle timerHandle) {
|
|
136
138
|
if (timerHandle < 0) {
|
|
137
139
|
/**
|
|
138
140
|
* Do nothing for negative values to match web spec.
|
|
@@ -150,7 +152,7 @@ void TimerManager::deleteTimer(jsi::Runtime& runtime, TimerHandle timerHandle) {
|
|
|
150
152
|
}
|
|
151
153
|
|
|
152
154
|
void TimerManager::deleteRecurringTimer(
|
|
153
|
-
jsi::Runtime& runtime
|
|
155
|
+
jsi::Runtime& /* runtime */,
|
|
154
156
|
TimerHandle timerHandle) {
|
|
155
157
|
if (timerHandle < 0) {
|
|
156
158
|
/**
|