react-native-windows 0.76.3 → 0.77.0-preview.1
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/.flowconfig +5 -1
- package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
- package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
- package/Libraries/Animated/AnimatedEvent.js +1 -1
- package/Libraries/Animated/AnimatedImplementation.js +2 -2
- package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
- package/Libraries/Animated/NativeAnimatedAllowlist.windows.js +122 -0
- package/Libraries/Animated/animations/Animation.js +60 -25
- package/Libraries/Animated/animations/DecayAnimation.js +26 -38
- package/Libraries/Animated/animations/SpringAnimation.js +33 -39
- package/Libraries/Animated/animations/TimingAnimation.js +34 -42
- package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
- package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
- package/Libraries/Animated/createAnimatedComponent.js +60 -33
- package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
- package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
- package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
- package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
- package/Libraries/Animated/nodes/AnimatedProps.js +96 -46
- package/Libraries/Animated/nodes/AnimatedProps.windows.js +281 -0
- package/Libraries/Animated/nodes/AnimatedStyle.js +108 -39
- package/Libraries/Animated/nodes/AnimatedStyle.windows.js +251 -0
- package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
- package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
- package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
- package/Libraries/Animated/useAnimatedProps.js +41 -35
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
- package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +82 -5
- package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
- package/Libraries/Components/Button.js +9 -4
- package/Libraries/Components/Button.windows.js +19 -5
- package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
- package/Libraries/Components/Glyph/Glyph.js +2 -1
- package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
- package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
- package/Libraries/Components/Pressable/Pressable.js +4 -4
- package/Libraries/Components/Pressable/Pressable.windows.js +10 -4
- package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
- package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
- package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
- package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
- package/Libraries/Components/ScrollView/ScrollView.js +49 -88
- package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
- package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +0 -5
- package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
- package/Libraries/Components/Switch/Switch.js +8 -6
- package/Libraries/Components/Switch/Switch.windows.js +8 -6
- package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
- package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
- package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
- package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
- package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
- package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
- package/Libraries/Components/TextInput/TextInput.js +37 -13
- package/Libraries/Components/TextInput/TextInput.windows.js +47 -16
- package/Libraries/Components/TextInput/TextInputState.js +11 -13
- package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
- package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
- package/Libraries/Components/Touchable/Position.js +7 -2
- package/Libraries/Components/Touchable/Touchable.js +4 -0
- package/Libraries/Components/Touchable/Touchable.windows.js +4 -0
- package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
- package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
- package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
- package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
- package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
- package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
- package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
- package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
- package/Libraries/Components/View/View.js +4 -4
- package/Libraries/Components/View/View.windows.js +12 -5
- package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
- package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
- package/Libraries/Components/View/ViewNativeComponent.js +6 -98
- package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
- package/Libraries/Components/View/ViewPropTypes.js +0 -3
- package/Libraries/Components/View/ViewPropTypes.windows.js +2 -3
- package/Libraries/Core/ExceptionsManager.js +50 -29
- package/Libraries/Core/ReactNativeVersion.js +3 -3
- package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
- package/Libraries/Core/setUpBatchedBridge.js +1 -10
- package/Libraries/Core/setUpDeveloperTools.js +1 -5
- package/Libraries/Core/setUpErrorHandling.js +20 -18
- package/Libraries/Core/setUpReactDevTools.js +107 -8
- package/Libraries/Core/setUpSegmentFetcher.js +1 -0
- package/Libraries/Core/setUpTimers.js +21 -18
- package/Libraries/Debugging/DebuggingOverlay.js +4 -5
- package/Libraries/Image/AssetSourceResolver.js +12 -1
- package/Libraries/Image/AssetSourceResolver.windows.js +12 -1
- package/Libraries/Image/Image.android.js +1 -5
- package/Libraries/Image/Image.d.ts +20 -29
- package/Libraries/Image/Image.ios.js +0 -2
- package/Libraries/Image/Image.windows.js +5 -1
- package/Libraries/Image/ImageBackground.js +2 -5
- package/Libraries/Image/ImageProps.js +7 -6
- package/Libraries/Image/ImageResizeMode.d.ts +8 -1
- package/Libraries/Image/ImageResizeMode.js +4 -1
- package/Libraries/Image/ImageSource.d.ts +0 -2
- package/Libraries/Image/ImageSource.js +0 -2
- package/Libraries/Image/ImageTypes.flow.js +11 -9
- package/Libraries/Image/ImageUtils.js +6 -3
- package/Libraries/Image/ImageViewNativeComponent.js +5 -3
- package/Libraries/Inspector/Inspector.js +1 -0
- package/Libraries/Inspector/NetworkOverlay.js +4 -0
- package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
- package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
- package/Libraries/Interaction/InteractionManager.js +6 -1
- package/Libraries/Interaction/InteractionManagerStub.js +176 -0
- package/Libraries/Interaction/TouchHistoryMath.js +22 -19
- package/Libraries/JSInspector/NetworkAgent.js +1 -1
- package/Libraries/Lists/FlatList.d.ts +1 -2
- package/Libraries/Lists/FlatList.js +2 -2
- package/Libraries/Lists/SectionListModern.js +7 -7
- package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
- package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
- package/Libraries/LogBox/Data/LogBoxData.js +3 -3
- package/Libraries/LogBox/LogBox.js +18 -5
- package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
- package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
- package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
- package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
- package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
- package/Libraries/Modal/Modal.d.ts +12 -0
- package/Libraries/Modal/Modal.js +31 -4
- package/Libraries/Modal/Modal.windows.js +18 -0
- package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
- package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
- package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
- package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
- package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
- package/Libraries/Network/XHRInterceptor.js +63 -14
- package/Libraries/Network/XMLHttpRequest.js +26 -1
- package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
- package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
- package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
- package/Libraries/Pressability/HoverState.js +2 -0
- package/Libraries/Pressability/Pressability.js +2 -3
- package/Libraries/Pressability/Pressability.windows.js +2 -3
- package/Libraries/Pressability/usePressability.js +4 -1
- package/Libraries/ReactNative/AppContainer.js +1 -1
- package/Libraries/ReactNative/AppRegistry.js +1 -11
- package/Libraries/ReactNative/DisplayMode.js +1 -1
- package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
- package/Libraries/ReactNative/RendererImplementation.js +18 -17
- package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
- package/Libraries/ReactNative/renderApplication.js +9 -8
- package/Libraries/ReactNative/requireNativeComponent.js +5 -2
- package/Libraries/Renderer/shims/ReactFabric.js +3 -3
- package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
- package/Libraries/Renderer/shims/ReactNative.js +3 -3
- package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
- package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
- package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
- package/Libraries/StyleSheet/StyleSheet.js +7 -1
- package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
- package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
- package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
- package/Libraries/StyleSheet/processTransform.js +3 -34
- package/Libraries/Text/Text.js +248 -249
- package/Libraries/Text/Text.windows.js +298 -292
- package/Libraries/Text/TextNativeComponent.js +0 -1
- package/Libraries/Text/TextProps.windows.js +2 -0
- package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
- package/Libraries/Types/CoreEventTypes.d.ts +3 -10
- package/Libraries/Types/CoreEventTypes.js +4 -6
- package/Libraries/Types/CoreEventTypes.windows.js +4 -6
- package/Libraries/Utilities/Appearance.js +3 -1
- package/Libraries/Utilities/BackHandler.android.js +6 -18
- package/Libraries/Utilities/BackHandler.d.ts +0 -4
- package/Libraries/Utilities/BackHandler.ios.js +0 -7
- package/Libraries/Utilities/BackHandler.windows.js +6 -18
- package/Libraries/Utilities/HMRClient.js +3 -4
- package/Libraries/Utilities/Platform.flow.js +2 -2
- package/Libraries/Utilities/Platform.flow.windows.js +3 -2
- package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
- package/Libraries/Utilities/codegenNativeComponent.js +1 -1
- package/Libraries/Utilities/useMergeRefs.js +26 -7
- package/Libraries/WebSocket/WebSocketEvent.js +4 -1
- package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
- package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
- package/Libraries/promiseRejectionTrackingOptions.js +1 -1
- package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
- package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
- package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
- package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
- package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
- package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
- package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
- package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
- package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
- package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
- package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
- package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
- package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
- package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
- package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
- package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
- package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
- package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
- package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
- package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
- package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
- package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
- package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
- package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
- package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
- package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
- package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
- package/PropertySheets/Bundle.Common.targets +1 -1
- package/PropertySheets/Bundle.props +3 -0
- package/PropertySheets/Generated/PackageVersion.g.props +4 -4
- package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
- package/PropertySheets/OutputMSBuildProperties.targets +3 -1
- package/ReactCommon/ReactCommon.vcxproj +5 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
- package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +188 -39
- package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
- package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
- package/Shared/InspectorPackagerConnection.cpp +3 -6
- package/Shared/InspectorPackagerConnection.h +2 -2
- package/Shared/InstanceManager.h +1 -1
- package/Shared/OInstance.h +1 -1
- package/Shared/Shared.vcxitems +17 -2
- package/Shared/Shared.vcxitems.filters +3 -1
- package/Shared/TurboModuleManager.cpp +29 -4
- package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
- package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
- package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
- package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
- package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
- package/codegen/NativePerformanceSpec.g.h +127 -3
- package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
- package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
- package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
- package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
- package/codegen/react/components/rnwcore/Props.cpp +1 -0
- package/codegen/react/components/rnwcore/Props.h +1 -0
- package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
- package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
- package/codegen/react/components/rnwcore/States.h +0 -12
- package/codegen/rnwcoreJSI-generated.cpp +219 -186
- package/codegen/rnwcoreJSI.h +942 -511
- package/index.js +10 -3
- package/index.windows.js +10 -3
- package/jest/setup.js +36 -1
- package/just-task.js +15 -0
- package/package.json +22 -22
- package/src/private/animated/NativeAnimatedHelper.js +18 -16
- package/src/private/animated/useAnimatedPropsMemo.js +348 -0
- package/src/private/animated/useAnimatedPropsMemo.windows.js +356 -0
- package/src/private/components/HScrollViewNativeComponents.js +1 -27
- package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
- package/src/private/components/VScrollViewNativeComponents.js +2 -25
- package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
- package/src/private/debugging/ReactDevToolsSettingsManager.windows.js +20 -0
- package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
- package/src/private/devmenu/DevMenu.d.ts +20 -0
- package/src/private/devmenu/DevMenu.js +31 -0
- package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
- package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
- package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
- package/src/private/setup/setUpDOM.js +14 -6
- package/src/private/setup/setUpMutationObserver.js +5 -0
- package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
- package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
- package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
- package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
- package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
- package/src/private/specs/modules/NativeAppearance.js +4 -10
- package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
- package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
- package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
- package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
- package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
- package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
- package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
- package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
- package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
- package/src/private/webapis/performance/EventTiming.js +13 -8
- package/src/private/webapis/performance/Performance.js +66 -73
- package/src/private/webapis/performance/PerformanceEntry.js +2 -5
- package/src/private/webapis/performance/PerformanceObserver.js +65 -164
- package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
- package/src/private/webapis/performance/UserTiming.js +11 -7
- package/src/private/webapis/performance/Utilities.js +18 -0
- package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
- package/templates/cpp-lib/template.config.js +13 -7
- package/templates/templateUtils.js +10 -0
- package/types/index.d.ts +1 -1
- package/types/public/ReactNativeTypes.d.ts +4 -8
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
- package/Libraries/DevToolsSettings/DevToolsSettingsManager.windows.js +0 -35
- package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
- package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
- package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
- package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
- package/codegen/NativePerformanceObserverSpec.g.h +0 -131
- package/src/private/components/useSyncOnScroll.js +0 -48
- package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
- package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
- package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
- package/types/experimental.d.ts +0 -59
- /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
|
@@ -19,9 +19,11 @@ import * as React from 'react';
|
|
|
19
19
|
|
|
20
20
|
const MAX_DEPTH = 5;
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
export function isPlainObject(
|
|
23
|
+
value: mixed,
|
|
24
|
+
/* $FlowIssue[incompatible-type-guard] - Flow does not know that the prototype
|
|
25
|
+
and ReactElement checks preserve the type refinement of `value`. */
|
|
26
|
+
): value is $ReadOnly<{[string]: mixed}> {
|
|
25
27
|
return (
|
|
26
28
|
value !== null &&
|
|
27
29
|
typeof value === 'object' &&
|
|
@@ -109,6 +111,14 @@ export default class AnimatedObject extends AnimatedWithChildren {
|
|
|
109
111
|
});
|
|
110
112
|
}
|
|
111
113
|
|
|
114
|
+
__getValueWithStaticObject(staticObject: mixed): any {
|
|
115
|
+
const nodes = this.#nodes;
|
|
116
|
+
let index = 0;
|
|
117
|
+
// NOTE: We can depend on `this._value` and `staticObject` sharing a
|
|
118
|
+
// structure because of `useAnimatedPropsMemo`.
|
|
119
|
+
return mapAnimatedNodes(staticObject, () => nodes[index++].__getValue());
|
|
120
|
+
}
|
|
121
|
+
|
|
112
122
|
__getAnimatedValue(): any {
|
|
113
123
|
return mapAnimatedNodes(this._value, node => {
|
|
114
124
|
return node.__getAnimatedValue();
|
|
@@ -8,42 +8,44 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
'use strict';
|
|
12
|
-
|
|
13
11
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
12
|
+
import type {AnimatedStyleAllowlist} from './AnimatedStyle';
|
|
14
13
|
|
|
14
|
+
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
|
15
15
|
import {findNodeHandle} from '../../ReactNative/RendererProxy';
|
|
16
16
|
import {AnimatedEvent} from '../AnimatedEvent';
|
|
17
|
-
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
|
18
17
|
import AnimatedNode from './AnimatedNode';
|
|
19
18
|
import AnimatedObject from './AnimatedObject';
|
|
20
19
|
import AnimatedStyle from './AnimatedStyle';
|
|
21
20
|
import invariant from 'invariant';
|
|
22
21
|
|
|
22
|
+
export type AnimatedPropsAllowlist = $ReadOnly<{
|
|
23
|
+
style?: ?AnimatedStyleAllowlist,
|
|
24
|
+
[string]: true,
|
|
25
|
+
}>;
|
|
26
|
+
|
|
23
27
|
function createAnimatedProps(
|
|
24
|
-
inputProps:
|
|
25
|
-
|
|
28
|
+
inputProps: {[string]: mixed},
|
|
29
|
+
allowlist: ?AnimatedPropsAllowlist,
|
|
30
|
+
): [$ReadOnlyArray<string>, $ReadOnlyArray<AnimatedNode>, {[string]: mixed}] {
|
|
26
31
|
const nodeKeys: Array<string> = [];
|
|
27
32
|
const nodes: Array<AnimatedNode> = [];
|
|
28
|
-
const props:
|
|
33
|
+
const props: {[string]: mixed} = {};
|
|
29
34
|
|
|
30
35
|
const keys = Object.keys(inputProps);
|
|
31
36
|
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
32
37
|
const key = keys[ii];
|
|
33
38
|
const value = inputProps[key];
|
|
34
39
|
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
props[key] = node;
|
|
45
|
-
} else {
|
|
46
|
-
const node = AnimatedObject.from(value);
|
|
40
|
+
if (allowlist == null || Object.hasOwn(allowlist, key)) {
|
|
41
|
+
let node;
|
|
42
|
+
if (key === 'style') {
|
|
43
|
+
node = AnimatedStyle.from(value, allowlist?.style);
|
|
44
|
+
} else if (value instanceof AnimatedNode) {
|
|
45
|
+
node = value;
|
|
46
|
+
} else {
|
|
47
|
+
node = AnimatedObject.from(value);
|
|
48
|
+
}
|
|
47
49
|
if (node == null) {
|
|
48
50
|
props[key] = value;
|
|
49
51
|
} else {
|
|
@@ -51,6 +53,20 @@ function createAnimatedProps(
|
|
|
51
53
|
nodes.push(node);
|
|
52
54
|
props[key] = node;
|
|
53
55
|
}
|
|
56
|
+
} else {
|
|
57
|
+
if (__DEV__) {
|
|
58
|
+
// WARNING: This is a potentially expensive check that we should only
|
|
59
|
+
// do in development. Without this check in development, it might be
|
|
60
|
+
// difficult to identify which props need to be allowlisted.
|
|
61
|
+
if (AnimatedObject.from(inputProps[key]) != null) {
|
|
62
|
+
console.error(
|
|
63
|
+
`AnimatedProps: ${key} is not allowlisted for animation, but it ` +
|
|
64
|
+
'contains AnimatedNode values; props allowing animation: ',
|
|
65
|
+
allowlist,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
props[key] = value;
|
|
54
70
|
}
|
|
55
71
|
}
|
|
56
72
|
|
|
@@ -58,29 +74,32 @@ function createAnimatedProps(
|
|
|
58
74
|
}
|
|
59
75
|
|
|
60
76
|
export default class AnimatedProps extends AnimatedNode {
|
|
77
|
+
#animatedView: any = null;
|
|
78
|
+
#callback: () => void;
|
|
61
79
|
#nodeKeys: $ReadOnlyArray<string>;
|
|
62
80
|
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
81
|
+
#props: {[string]: mixed};
|
|
63
82
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
83
|
+
constructor(
|
|
84
|
+
inputProps: {[string]: mixed},
|
|
85
|
+
callback: () => void,
|
|
86
|
+
allowlist?: ?AnimatedPropsAllowlist,
|
|
87
|
+
) {
|
|
69
88
|
super();
|
|
70
|
-
const [nodeKeys, nodes, props] = createAnimatedProps(inputProps);
|
|
89
|
+
const [nodeKeys, nodes, props] = createAnimatedProps(inputProps, allowlist);
|
|
71
90
|
this.#nodeKeys = nodeKeys;
|
|
72
91
|
this.#nodes = nodes;
|
|
73
|
-
this
|
|
74
|
-
this
|
|
92
|
+
this.#props = props;
|
|
93
|
+
this.#callback = callback;
|
|
75
94
|
}
|
|
76
95
|
|
|
77
96
|
__getValue(): Object {
|
|
78
|
-
const props: {[string]:
|
|
97
|
+
const props: {[string]: mixed} = {};
|
|
79
98
|
|
|
80
|
-
const keys = Object.keys(this
|
|
99
|
+
const keys = Object.keys(this.#props);
|
|
81
100
|
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
82
101
|
const key = keys[ii];
|
|
83
|
-
const value = this
|
|
102
|
+
const value = this.#props[key];
|
|
84
103
|
|
|
85
104
|
if (value instanceof AnimatedNode) {
|
|
86
105
|
props[key] = value.__getValue();
|
|
@@ -94,8 +113,33 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
94
113
|
return props;
|
|
95
114
|
}
|
|
96
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Creates a new `props` object that contains the same props as the supplied
|
|
118
|
+
* `staticProps` object, except with animated nodes for any props that were
|
|
119
|
+
* created by this `AnimatedProps` instance.
|
|
120
|
+
*/
|
|
121
|
+
__getValueWithStaticProps(staticProps: Object): Object {
|
|
122
|
+
const props: {[string]: mixed} = {...staticProps};
|
|
123
|
+
|
|
124
|
+
const keys = Object.keys(staticProps);
|
|
125
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
126
|
+
const key = keys[ii];
|
|
127
|
+
const maybeNode = this.#props[key];
|
|
128
|
+
|
|
129
|
+
if (key === 'style' && maybeNode instanceof AnimatedStyle) {
|
|
130
|
+
props[key] = maybeNode.__getValueWithStaticStyle(staticProps.style);
|
|
131
|
+
} else if (maybeNode instanceof AnimatedNode) {
|
|
132
|
+
props[key] = maybeNode.__getValue();
|
|
133
|
+
} else if (maybeNode instanceof AnimatedEvent) {
|
|
134
|
+
props[key] = maybeNode.__getHandler();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return props;
|
|
139
|
+
}
|
|
140
|
+
|
|
97
141
|
__getAnimatedValue(): Object {
|
|
98
|
-
const props: {[string]:
|
|
142
|
+
const props: {[string]: mixed} = {};
|
|
99
143
|
|
|
100
144
|
const nodeKeys = this.#nodeKeys;
|
|
101
145
|
const nodes = this.#nodes;
|
|
@@ -117,10 +161,10 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
117
161
|
}
|
|
118
162
|
|
|
119
163
|
__detach(): void {
|
|
120
|
-
if (this.__isNative && this
|
|
164
|
+
if (this.__isNative && this.#animatedView) {
|
|
121
165
|
this.__disconnectAnimatedView();
|
|
122
166
|
}
|
|
123
|
-
this
|
|
167
|
+
this.#animatedView = null;
|
|
124
168
|
|
|
125
169
|
const nodes = this.#nodes;
|
|
126
170
|
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
@@ -132,7 +176,7 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
132
176
|
}
|
|
133
177
|
|
|
134
178
|
update(): void {
|
|
135
|
-
this
|
|
179
|
+
this.#callback();
|
|
136
180
|
}
|
|
137
181
|
|
|
138
182
|
__makeNative(platformConfig: ?PlatformConfig): void {
|
|
@@ -150,17 +194,17 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
150
194
|
// where it will be needed to traverse the graph of attached values.
|
|
151
195
|
super.__setPlatformConfig(platformConfig);
|
|
152
196
|
|
|
153
|
-
if (this
|
|
197
|
+
if (this.#animatedView) {
|
|
154
198
|
this.__connectAnimatedView();
|
|
155
199
|
}
|
|
156
200
|
}
|
|
157
201
|
}
|
|
158
202
|
|
|
159
203
|
setNativeView(animatedView: any): void {
|
|
160
|
-
if (this
|
|
204
|
+
if (this.#animatedView === animatedView) {
|
|
161
205
|
return;
|
|
162
206
|
}
|
|
163
|
-
this
|
|
207
|
+
this.#animatedView = animatedView;
|
|
164
208
|
if (this.__isNative) {
|
|
165
209
|
this.__connectAnimatedView();
|
|
166
210
|
}
|
|
@@ -168,11 +212,14 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
168
212
|
|
|
169
213
|
__connectAnimatedView(): void {
|
|
170
214
|
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
215
|
+
let nativeViewTag: ?number = findNodeHandle(this.#animatedView);
|
|
216
|
+
if (nativeViewTag == null) {
|
|
217
|
+
if (process.env.NODE_ENV === 'test') {
|
|
218
|
+
nativeViewTag = -1;
|
|
219
|
+
} else {
|
|
220
|
+
throw new Error('Unable to locate attached view in the native tree');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
176
223
|
NativeAnimatedHelper.API.connectAnimatedNodeToView(
|
|
177
224
|
this.__getNativeTag(),
|
|
178
225
|
nativeViewTag,
|
|
@@ -181,11 +228,14 @@ export default class AnimatedProps extends AnimatedNode {
|
|
|
181
228
|
|
|
182
229
|
__disconnectAnimatedView(): void {
|
|
183
230
|
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
231
|
+
let nativeViewTag: ?number = findNodeHandle(this.#animatedView);
|
|
232
|
+
if (nativeViewTag == null) {
|
|
233
|
+
if (process.env.NODE_ENV === 'test') {
|
|
234
|
+
nativeViewTag = -1;
|
|
235
|
+
} else {
|
|
236
|
+
throw new Error('Unable to locate attached view in the native tree');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
189
239
|
NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(
|
|
190
240
|
this.__getNativeTag(),
|
|
191
241
|
nativeViewTag,
|
|
@@ -0,0 +1,281 @@
|
|
|
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
|
+
* @flow
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
12
|
+
import type {AnimatedStyleAllowlist} from './AnimatedStyle';
|
|
13
|
+
|
|
14
|
+
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
|
15
|
+
import {findNodeHandle} from '../../ReactNative/RendererProxy';
|
|
16
|
+
import {AnimatedEvent} from '../AnimatedEvent';
|
|
17
|
+
import AnimatedNode from './AnimatedNode';
|
|
18
|
+
import AnimatedObject from './AnimatedObject';
|
|
19
|
+
import AnimatedStyle from './AnimatedStyle';
|
|
20
|
+
import invariant from 'invariant';
|
|
21
|
+
|
|
22
|
+
export type AnimatedPropsAllowlist = $ReadOnly<{
|
|
23
|
+
style?: ?AnimatedStyleAllowlist,
|
|
24
|
+
[string]: true,
|
|
25
|
+
}>;
|
|
26
|
+
|
|
27
|
+
function createAnimatedProps(
|
|
28
|
+
inputProps: {[string]: mixed},
|
|
29
|
+
allowlist: ?AnimatedPropsAllowlist,
|
|
30
|
+
): [$ReadOnlyArray<string>, $ReadOnlyArray<AnimatedNode>, {[string]: mixed}] {
|
|
31
|
+
const nodeKeys: Array<string> = [];
|
|
32
|
+
const nodes: Array<AnimatedNode> = [];
|
|
33
|
+
const props: {[string]: mixed} = {};
|
|
34
|
+
|
|
35
|
+
const keys = Object.keys(inputProps);
|
|
36
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
37
|
+
const key = keys[ii];
|
|
38
|
+
const value = inputProps[key];
|
|
39
|
+
|
|
40
|
+
if (allowlist == null || hasOwn(allowlist, key)) {
|
|
41
|
+
let node;
|
|
42
|
+
if (key === 'style') {
|
|
43
|
+
node = AnimatedStyle.from(value, allowlist?.style);
|
|
44
|
+
} else if (value instanceof AnimatedNode) {
|
|
45
|
+
node = value;
|
|
46
|
+
} else {
|
|
47
|
+
node = AnimatedObject.from(value);
|
|
48
|
+
}
|
|
49
|
+
if (node == null) {
|
|
50
|
+
props[key] = value;
|
|
51
|
+
} else {
|
|
52
|
+
nodeKeys.push(key);
|
|
53
|
+
nodes.push(node);
|
|
54
|
+
props[key] = node;
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
if (__DEV__) {
|
|
58
|
+
// WARNING: This is a potentially expensive check that we should only
|
|
59
|
+
// do in development. Without this check in development, it might be
|
|
60
|
+
// difficult to identify which props need to be allowlisted.
|
|
61
|
+
if (AnimatedObject.from(inputProps[key]) != null) {
|
|
62
|
+
console.error(
|
|
63
|
+
`AnimatedProps: ${key} is not allowlisted for animation, but it ` +
|
|
64
|
+
'contains AnimatedNode values; props allowing animation: ',
|
|
65
|
+
allowlist,
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
props[key] = value;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return [nodeKeys, nodes, props];
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export default class AnimatedProps extends AnimatedNode {
|
|
77
|
+
#animatedView: any = null;
|
|
78
|
+
#callback: () => void;
|
|
79
|
+
#nodeKeys: $ReadOnlyArray<string>;
|
|
80
|
+
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
81
|
+
#props: {[string]: mixed};
|
|
82
|
+
|
|
83
|
+
constructor(
|
|
84
|
+
inputProps: {[string]: mixed},
|
|
85
|
+
callback: () => void,
|
|
86
|
+
allowlist?: ?AnimatedPropsAllowlist,
|
|
87
|
+
) {
|
|
88
|
+
super();
|
|
89
|
+
const [nodeKeys, nodes, props] = createAnimatedProps(inputProps, allowlist);
|
|
90
|
+
this.#nodeKeys = nodeKeys;
|
|
91
|
+
this.#nodes = nodes;
|
|
92
|
+
this.#props = props;
|
|
93
|
+
this.#callback = callback;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
__getValue(): Object {
|
|
97
|
+
const props: {[string]: mixed} = {};
|
|
98
|
+
|
|
99
|
+
const keys = Object.keys(this.#props);
|
|
100
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
101
|
+
const key = keys[ii];
|
|
102
|
+
const value = this.#props[key];
|
|
103
|
+
|
|
104
|
+
if (value instanceof AnimatedNode) {
|
|
105
|
+
props[key] = value.__getValue();
|
|
106
|
+
} else if (value instanceof AnimatedEvent) {
|
|
107
|
+
props[key] = value.__getHandler();
|
|
108
|
+
} else {
|
|
109
|
+
props[key] = value;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return props;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Creates a new `props` object that contains the same props as the supplied
|
|
118
|
+
* `staticProps` object, except with animated nodes for any props that were
|
|
119
|
+
* created by this `AnimatedProps` instance.
|
|
120
|
+
*/
|
|
121
|
+
__getValueWithStaticProps(staticProps: Object): Object {
|
|
122
|
+
const props: {[string]: mixed} = {...staticProps};
|
|
123
|
+
|
|
124
|
+
const keys = Object.keys(staticProps);
|
|
125
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
126
|
+
const key = keys[ii];
|
|
127
|
+
const maybeNode = this.#props[key];
|
|
128
|
+
|
|
129
|
+
if (key === 'style' && maybeNode instanceof AnimatedStyle) {
|
|
130
|
+
props[key] = maybeNode.__getValueWithStaticStyle(staticProps.style);
|
|
131
|
+
} else if (maybeNode instanceof AnimatedNode) {
|
|
132
|
+
props[key] = maybeNode.__getValue();
|
|
133
|
+
} else if (maybeNode instanceof AnimatedEvent) {
|
|
134
|
+
props[key] = maybeNode.__getHandler();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
return props;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
__getAnimatedValue(): Object {
|
|
142
|
+
const props: {[string]: mixed} = {};
|
|
143
|
+
|
|
144
|
+
const nodeKeys = this.#nodeKeys;
|
|
145
|
+
const nodes = this.#nodes;
|
|
146
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
147
|
+
const key = nodeKeys[ii];
|
|
148
|
+
const node = nodes[ii];
|
|
149
|
+
props[key] = node.__getAnimatedValue();
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return props;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
__attach(): void {
|
|
156
|
+
const nodes = this.#nodes;
|
|
157
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
158
|
+
const node = nodes[ii];
|
|
159
|
+
node.__addChild(this);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
__detach(): void {
|
|
164
|
+
if (this.__isNative && this.#animatedView) {
|
|
165
|
+
this.__disconnectAnimatedView();
|
|
166
|
+
}
|
|
167
|
+
this.#animatedView = null;
|
|
168
|
+
|
|
169
|
+
const nodes = this.#nodes;
|
|
170
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
171
|
+
const node = nodes[ii];
|
|
172
|
+
node.__removeChild(this);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
super.__detach();
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
update(): void {
|
|
179
|
+
this.#callback();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
__makeNative(platformConfig: ?PlatformConfig): void {
|
|
183
|
+
const nodes = this.#nodes;
|
|
184
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
185
|
+
const node = nodes[ii];
|
|
186
|
+
node.__makeNative(platformConfig);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (!this.__isNative) {
|
|
190
|
+
this.__isNative = true;
|
|
191
|
+
|
|
192
|
+
// Since this does not call the super.__makeNative, we need to store the
|
|
193
|
+
// supplied platformConfig here, before calling __connectAnimatedView
|
|
194
|
+
// where it will be needed to traverse the graph of attached values.
|
|
195
|
+
super.__setPlatformConfig(platformConfig);
|
|
196
|
+
|
|
197
|
+
if (this.#animatedView) {
|
|
198
|
+
this.__connectAnimatedView();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
setNativeView(animatedView: any): void {
|
|
204
|
+
if (this.#animatedView === animatedView) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
this.#animatedView = animatedView;
|
|
208
|
+
if (this.__isNative) {
|
|
209
|
+
this.__connectAnimatedView();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
__connectAnimatedView(): void {
|
|
214
|
+
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
215
|
+
let nativeViewTag: ?number = findNodeHandle(this.#animatedView);
|
|
216
|
+
if (nativeViewTag == null) {
|
|
217
|
+
if (process.env.NODE_ENV === 'test') {
|
|
218
|
+
nativeViewTag = -1;
|
|
219
|
+
} else {
|
|
220
|
+
throw new Error('Unable to locate attached view in the native tree');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
NativeAnimatedHelper.API.connectAnimatedNodeToView(
|
|
224
|
+
this.__getNativeTag(),
|
|
225
|
+
nativeViewTag,
|
|
226
|
+
);
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
__disconnectAnimatedView(): void {
|
|
230
|
+
invariant(this.__isNative, 'Expected node to be marked as "native"');
|
|
231
|
+
let nativeViewTag: ?number = findNodeHandle(this.#animatedView);
|
|
232
|
+
if (nativeViewTag == null) {
|
|
233
|
+
if (process.env.NODE_ENV === 'test') {
|
|
234
|
+
nativeViewTag = -1;
|
|
235
|
+
} else {
|
|
236
|
+
throw new Error('Unable to locate attached view in the native tree');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
NativeAnimatedHelper.API.disconnectAnimatedNodeFromView(
|
|
240
|
+
this.__getNativeTag(),
|
|
241
|
+
nativeViewTag,
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
__restoreDefaultValues(): void {
|
|
246
|
+
// When using the native driver, view properties need to be restored to
|
|
247
|
+
// their default values manually since react no longer tracks them. This
|
|
248
|
+
// is needed to handle cases where a prop driven by native animated is removed
|
|
249
|
+
// after having been changed natively by an animation.
|
|
250
|
+
if (this.__isNative) {
|
|
251
|
+
NativeAnimatedHelper.API.restoreDefaultValues(this.__getNativeTag());
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
__getNativeConfig(): Object {
|
|
256
|
+
const platformConfig = this.__getPlatformConfig();
|
|
257
|
+
const propsConfig: {[string]: number} = {};
|
|
258
|
+
|
|
259
|
+
const nodeKeys = this.#nodeKeys;
|
|
260
|
+
const nodes = this.#nodes;
|
|
261
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
262
|
+
const key = nodeKeys[ii];
|
|
263
|
+
const node = nodes[ii];
|
|
264
|
+
node.__makeNative(platformConfig);
|
|
265
|
+
propsConfig[key] = node.__getNativeTag();
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
return {
|
|
269
|
+
type: 'props',
|
|
270
|
+
props: propsConfig,
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
// Supported versions of JSC do not implement the newer Object.hasOwn. Remove
|
|
276
|
+
// this shim when they do.
|
|
277
|
+
// $FlowIgnore[method-unbinding]
|
|
278
|
+
const _hasOwnProp = Object.prototype.hasOwnProperty;
|
|
279
|
+
const hasOwn: (obj: $ReadOnly<{...}>, prop: string) => boolean =
|
|
280
|
+
// $FlowIgnore[method-unbinding]
|
|
281
|
+
Object.hasOwn ?? ((obj, prop) => _hasOwnProp.call(obj, prop));
|