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
|
@@ -8,8 +8,6 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
|
-
'use strict';
|
|
12
|
-
|
|
13
11
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
14
12
|
|
|
15
13
|
import {validateStyles} from '../../../src/private/animated/NativeAnimatedValidation';
|
|
@@ -21,24 +19,34 @@ import AnimatedObject from './AnimatedObject';
|
|
|
21
19
|
import AnimatedTransform from './AnimatedTransform';
|
|
22
20
|
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
23
21
|
|
|
22
|
+
export type AnimatedStyleAllowlist = $ReadOnly<{[string]: true}>;
|
|
23
|
+
|
|
24
24
|
function createAnimatedStyle(
|
|
25
25
|
inputStyle: {[string]: mixed},
|
|
26
|
+
allowlist: ?AnimatedStyleAllowlist,
|
|
26
27
|
keepUnanimatedValues: boolean,
|
|
27
|
-
): [$ReadOnlyArray<string>, $ReadOnlyArray<AnimatedNode>,
|
|
28
|
+
): [$ReadOnlyArray<string>, $ReadOnlyArray<AnimatedNode>, {[string]: mixed}] {
|
|
28
29
|
const nodeKeys: Array<string> = [];
|
|
29
30
|
const nodes: Array<AnimatedNode> = [];
|
|
30
|
-
const style: {[string]:
|
|
31
|
+
const style: {[string]: mixed} = {};
|
|
31
32
|
|
|
32
33
|
const keys = Object.keys(inputStyle);
|
|
33
34
|
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
34
35
|
const key = keys[ii];
|
|
35
36
|
const value = inputStyle[key];
|
|
36
37
|
|
|
37
|
-
if (
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
if (allowlist == null || Object.hasOwn(allowlist, key)) {
|
|
39
|
+
let node;
|
|
40
|
+
if (value != null && key === 'transform') {
|
|
41
|
+
node = ReactNativeFeatureFlags.shouldUseAnimatedObjectForTransform()
|
|
42
|
+
? AnimatedObject.from(value)
|
|
43
|
+
: // $FlowFixMe[incompatible-call] - `value` is mixed.
|
|
44
|
+
AnimatedTransform.from(value);
|
|
45
|
+
} else if (value instanceof AnimatedNode) {
|
|
46
|
+
node = value;
|
|
47
|
+
} else {
|
|
48
|
+
node = AnimatedObject.from(value);
|
|
49
|
+
}
|
|
42
50
|
if (node == null) {
|
|
43
51
|
if (keepUnanimatedValues) {
|
|
44
52
|
style[key] = value;
|
|
@@ -48,21 +56,21 @@ function createAnimatedStyle(
|
|
|
48
56
|
nodes.push(node);
|
|
49
57
|
style[key] = node;
|
|
50
58
|
}
|
|
51
|
-
} else if (value instanceof AnimatedNode) {
|
|
52
|
-
const node = value;
|
|
53
|
-
nodeKeys.push(key);
|
|
54
|
-
nodes.push(node);
|
|
55
|
-
style[key] = value;
|
|
56
59
|
} else {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
60
|
+
if (__DEV__) {
|
|
61
|
+
// WARNING: This is a potentially expensive check that we should only
|
|
62
|
+
// do in development. Without this check in development, it might be
|
|
63
|
+
// difficult to identify which styles need to be allowlisted.
|
|
64
|
+
if (AnimatedObject.from(inputStyle[key]) != null) {
|
|
65
|
+
console.error(
|
|
66
|
+
`AnimatedStyle: ${key} is not allowlisted for animation, but it ` +
|
|
67
|
+
'contains AnimatedNode values; styles allowing animation: ',
|
|
68
|
+
allowlist,
|
|
69
|
+
);
|
|
61
70
|
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
style[key] = node;
|
|
71
|
+
}
|
|
72
|
+
if (keepUnanimatedValues) {
|
|
73
|
+
style[key] = value;
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
}
|
|
@@ -71,34 +79,54 @@ function createAnimatedStyle(
|
|
|
71
79
|
}
|
|
72
80
|
|
|
73
81
|
export default class AnimatedStyle extends AnimatedWithChildren {
|
|
82
|
+
#inputStyle: any;
|
|
74
83
|
#nodeKeys: $ReadOnlyArray<string>;
|
|
75
84
|
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
85
|
+
#style: {[string]: mixed};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Creates an `AnimatedStyle` if `value` contains `AnimatedNode` instances.
|
|
89
|
+
* Otherwise, returns `null`.
|
|
90
|
+
*/
|
|
91
|
+
static from(
|
|
92
|
+
inputStyle: any,
|
|
93
|
+
allowlist: ?AnimatedStyleAllowlist,
|
|
94
|
+
): ?AnimatedStyle {
|
|
95
|
+
const flatStyle = flattenStyle(inputStyle);
|
|
96
|
+
if (flatStyle == null) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
83
99
|
const [nodeKeys, nodes, style] = createAnimatedStyle(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
// to instantiation sites.
|
|
87
|
-
flattenStyle(inputStyle) ?? {},
|
|
100
|
+
flatStyle,
|
|
101
|
+
allowlist,
|
|
88
102
|
Platform.OS !== 'web',
|
|
89
103
|
);
|
|
104
|
+
if (nodes.length === 0) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return new AnimatedStyle(nodeKeys, nodes, style, inputStyle);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
constructor(
|
|
111
|
+
nodeKeys: $ReadOnlyArray<string>,
|
|
112
|
+
nodes: $ReadOnlyArray<AnimatedNode>,
|
|
113
|
+
style: {[string]: mixed},
|
|
114
|
+
inputStyle: any,
|
|
115
|
+
) {
|
|
116
|
+
super();
|
|
90
117
|
this.#nodeKeys = nodeKeys;
|
|
91
118
|
this.#nodes = nodes;
|
|
92
|
-
this
|
|
119
|
+
this.#style = style;
|
|
120
|
+
this.#inputStyle = inputStyle;
|
|
93
121
|
}
|
|
94
122
|
|
|
95
123
|
__getValue(): Object | Array<Object> {
|
|
96
|
-
const style: {[string]:
|
|
124
|
+
const style: {[string]: mixed} = {};
|
|
97
125
|
|
|
98
|
-
const keys = Object.keys(this
|
|
126
|
+
const keys = Object.keys(this.#style);
|
|
99
127
|
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
100
128
|
const key = keys[ii];
|
|
101
|
-
const value = this
|
|
129
|
+
const value = this.#style[key];
|
|
102
130
|
|
|
103
131
|
if (value instanceof AnimatedNode) {
|
|
104
132
|
style[key] = value.__getValue();
|
|
@@ -107,11 +135,52 @@ export default class AnimatedStyle extends AnimatedWithChildren {
|
|
|
107
135
|
}
|
|
108
136
|
}
|
|
109
137
|
|
|
110
|
-
|
|
138
|
+
/* $FlowFixMe[incompatible-type] Error found due to incomplete typing of
|
|
139
|
+
* Platform.flow.js */
|
|
140
|
+
return Platform.OS === 'web' ? [this.#inputStyle, style] : style;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Creates a new `style` object that contains the same style properties as
|
|
145
|
+
* the supplied `staticStyle` object, except with animated nodes for any
|
|
146
|
+
* style properties that were created by this `AnimatedStyle` instance.
|
|
147
|
+
*/
|
|
148
|
+
__getValueWithStaticStyle(staticStyle: Object): Object | Array<Object> {
|
|
149
|
+
const flatStaticStyle = flattenStyle(staticStyle);
|
|
150
|
+
const style: {[string]: mixed} =
|
|
151
|
+
flatStaticStyle == null
|
|
152
|
+
? {}
|
|
153
|
+
: flatStaticStyle === staticStyle
|
|
154
|
+
? // Copy the input style, since we'll mutate it below.
|
|
155
|
+
{...flatStaticStyle}
|
|
156
|
+
: // Reuse `flatStaticStyle` if it is a newly created object.
|
|
157
|
+
flatStaticStyle;
|
|
158
|
+
|
|
159
|
+
const keys = Object.keys(style);
|
|
160
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
161
|
+
const key = keys[ii];
|
|
162
|
+
const maybeNode = this.#style[key];
|
|
163
|
+
|
|
164
|
+
if (key === 'transform' && maybeNode instanceof AnimatedTransform) {
|
|
165
|
+
style[key] = maybeNode.__getValueWithStaticTransforms(
|
|
166
|
+
// NOTE: This check should not be necessary, but the types are not
|
|
167
|
+
// enforced as of this writing.
|
|
168
|
+
Array.isArray(style[key]) ? style[key] : [],
|
|
169
|
+
);
|
|
170
|
+
} else if (maybeNode instanceof AnimatedObject) {
|
|
171
|
+
style[key] = maybeNode.__getValueWithStaticObject(style[key]);
|
|
172
|
+
} else if (maybeNode instanceof AnimatedNode) {
|
|
173
|
+
style[key] = maybeNode.__getValue();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* $FlowFixMe[incompatible-type] Error found due to incomplete typing of
|
|
178
|
+
* Platform.flow.js */
|
|
179
|
+
return Platform.OS === 'web' ? [this.#inputStyle, style] : style;
|
|
111
180
|
}
|
|
112
181
|
|
|
113
182
|
__getAnimatedValue(): Object {
|
|
114
|
-
const style: {[string]:
|
|
183
|
+
const style: {[string]: mixed} = {};
|
|
115
184
|
|
|
116
185
|
const nodeKeys = this.#nodeKeys;
|
|
117
186
|
const nodes = this.#nodes;
|
|
@@ -0,0 +1,251 @@
|
|
|
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
|
+
|
|
13
|
+
import {validateStyles} from '../../../src/private/animated/NativeAnimatedValidation';
|
|
14
|
+
import * as ReactNativeFeatureFlags from '../../../src/private/featureflags/ReactNativeFeatureFlags';
|
|
15
|
+
import flattenStyle from '../../StyleSheet/flattenStyle';
|
|
16
|
+
import Platform from '../../Utilities/Platform';
|
|
17
|
+
import AnimatedNode from './AnimatedNode';
|
|
18
|
+
import AnimatedObject from './AnimatedObject';
|
|
19
|
+
import AnimatedTransform from './AnimatedTransform';
|
|
20
|
+
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
21
|
+
|
|
22
|
+
export type AnimatedStyleAllowlist = $ReadOnly<{[string]: true}>;
|
|
23
|
+
|
|
24
|
+
function createAnimatedStyle(
|
|
25
|
+
inputStyle: {[string]: mixed},
|
|
26
|
+
allowlist: ?AnimatedStyleAllowlist,
|
|
27
|
+
keepUnanimatedValues: boolean,
|
|
28
|
+
): [$ReadOnlyArray<string>, $ReadOnlyArray<AnimatedNode>, {[string]: mixed}] {
|
|
29
|
+
const nodeKeys: Array<string> = [];
|
|
30
|
+
const nodes: Array<AnimatedNode> = [];
|
|
31
|
+
const style: {[string]: mixed} = {};
|
|
32
|
+
|
|
33
|
+
const keys = Object.keys(inputStyle);
|
|
34
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
35
|
+
const key = keys[ii];
|
|
36
|
+
const value = inputStyle[key];
|
|
37
|
+
|
|
38
|
+
if (allowlist == null || hasOwn(allowlist, key)) {
|
|
39
|
+
let node;
|
|
40
|
+
if (value != null && key === 'transform') {
|
|
41
|
+
node = ReactNativeFeatureFlags.shouldUseAnimatedObjectForTransform()
|
|
42
|
+
? AnimatedObject.from(value)
|
|
43
|
+
: // $FlowFixMe[incompatible-call] - `value` is mixed.
|
|
44
|
+
AnimatedTransform.from(value);
|
|
45
|
+
} else if (value instanceof AnimatedNode) {
|
|
46
|
+
node = value;
|
|
47
|
+
} else {
|
|
48
|
+
node = AnimatedObject.from(value);
|
|
49
|
+
}
|
|
50
|
+
if (node == null) {
|
|
51
|
+
if (keepUnanimatedValues) {
|
|
52
|
+
style[key] = value;
|
|
53
|
+
}
|
|
54
|
+
} else {
|
|
55
|
+
nodeKeys.push(key);
|
|
56
|
+
nodes.push(node);
|
|
57
|
+
style[key] = node;
|
|
58
|
+
}
|
|
59
|
+
} else {
|
|
60
|
+
if (__DEV__) {
|
|
61
|
+
// WARNING: This is a potentially expensive check that we should only
|
|
62
|
+
// do in development. Without this check in development, it might be
|
|
63
|
+
// difficult to identify which styles need to be allowlisted.
|
|
64
|
+
if (AnimatedObject.from(inputStyle[key]) != null) {
|
|
65
|
+
console.error(
|
|
66
|
+
`AnimatedStyle: ${key} is not allowlisted for animation, but it ` +
|
|
67
|
+
'contains AnimatedNode values; styles allowing animation: ',
|
|
68
|
+
allowlist,
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
if (keepUnanimatedValues) {
|
|
73
|
+
style[key] = value;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return [nodeKeys, nodes, style];
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default class AnimatedStyle extends AnimatedWithChildren {
|
|
82
|
+
#inputStyle: any;
|
|
83
|
+
#nodeKeys: $ReadOnlyArray<string>;
|
|
84
|
+
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
85
|
+
#style: {[string]: mixed};
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Creates an `AnimatedStyle` if `value` contains `AnimatedNode` instances.
|
|
89
|
+
* Otherwise, returns `null`.
|
|
90
|
+
*/
|
|
91
|
+
static from(
|
|
92
|
+
inputStyle: any,
|
|
93
|
+
allowlist: ?AnimatedStyleAllowlist,
|
|
94
|
+
): ?AnimatedStyle {
|
|
95
|
+
const flatStyle = flattenStyle(inputStyle);
|
|
96
|
+
if (flatStyle == null) {
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const [nodeKeys, nodes, style] = createAnimatedStyle(
|
|
100
|
+
flatStyle,
|
|
101
|
+
allowlist,
|
|
102
|
+
Platform.OS !== 'web',
|
|
103
|
+
);
|
|
104
|
+
if (nodes.length === 0) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
return new AnimatedStyle(nodeKeys, nodes, style, inputStyle);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
constructor(
|
|
111
|
+
nodeKeys: $ReadOnlyArray<string>,
|
|
112
|
+
nodes: $ReadOnlyArray<AnimatedNode>,
|
|
113
|
+
style: {[string]: mixed},
|
|
114
|
+
inputStyle: any,
|
|
115
|
+
) {
|
|
116
|
+
super();
|
|
117
|
+
this.#nodeKeys = nodeKeys;
|
|
118
|
+
this.#nodes = nodes;
|
|
119
|
+
this.#style = style;
|
|
120
|
+
this.#inputStyle = inputStyle;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
__getValue(): Object | Array<Object> {
|
|
124
|
+
const style: {[string]: mixed} = {};
|
|
125
|
+
|
|
126
|
+
const keys = Object.keys(this.#style);
|
|
127
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
128
|
+
const key = keys[ii];
|
|
129
|
+
const value = this.#style[key];
|
|
130
|
+
|
|
131
|
+
if (value instanceof AnimatedNode) {
|
|
132
|
+
style[key] = value.__getValue();
|
|
133
|
+
} else {
|
|
134
|
+
style[key] = value;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/* $FlowFixMe[incompatible-type] Error found due to incomplete typing of
|
|
139
|
+
* Platform.flow.js */
|
|
140
|
+
return Platform.OS === 'web' ? [this.#inputStyle, style] : style;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Creates a new `style` object that contains the same style properties as
|
|
145
|
+
* the supplied `staticStyle` object, except with animated nodes for any
|
|
146
|
+
* style properties that were created by this `AnimatedStyle` instance.
|
|
147
|
+
*/
|
|
148
|
+
__getValueWithStaticStyle(staticStyle: Object): Object | Array<Object> {
|
|
149
|
+
const flatStaticStyle = flattenStyle(staticStyle);
|
|
150
|
+
const style: {[string]: mixed} =
|
|
151
|
+
flatStaticStyle == null
|
|
152
|
+
? {}
|
|
153
|
+
: flatStaticStyle === staticStyle
|
|
154
|
+
? // Copy the input style, since we'll mutate it below.
|
|
155
|
+
{...flatStaticStyle}
|
|
156
|
+
: // Reuse `flatStaticStyle` if it is a newly created object.
|
|
157
|
+
flatStaticStyle;
|
|
158
|
+
|
|
159
|
+
const keys = Object.keys(style);
|
|
160
|
+
for (let ii = 0, length = keys.length; ii < length; ii++) {
|
|
161
|
+
const key = keys[ii];
|
|
162
|
+
const maybeNode = this.#style[key];
|
|
163
|
+
|
|
164
|
+
if (key === 'transform' && maybeNode instanceof AnimatedTransform) {
|
|
165
|
+
style[key] = maybeNode.__getValueWithStaticTransforms(
|
|
166
|
+
// NOTE: This check should not be necessary, but the types are not
|
|
167
|
+
// enforced as of this writing.
|
|
168
|
+
Array.isArray(style[key]) ? style[key] : [],
|
|
169
|
+
);
|
|
170
|
+
} else if (maybeNode instanceof AnimatedObject) {
|
|
171
|
+
style[key] = maybeNode.__getValueWithStaticObject(style[key]);
|
|
172
|
+
} else if (maybeNode instanceof AnimatedNode) {
|
|
173
|
+
style[key] = maybeNode.__getValue();
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/* $FlowFixMe[incompatible-type] Error found due to incomplete typing of
|
|
178
|
+
* Platform.flow.js */
|
|
179
|
+
return Platform.OS === 'web' ? [this.#inputStyle, style] : style;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
__getAnimatedValue(): Object {
|
|
183
|
+
const style: {[string]: mixed} = {};
|
|
184
|
+
|
|
185
|
+
const nodeKeys = this.#nodeKeys;
|
|
186
|
+
const nodes = this.#nodes;
|
|
187
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
188
|
+
const key = nodeKeys[ii];
|
|
189
|
+
const node = nodes[ii];
|
|
190
|
+
style[key] = node.__getAnimatedValue();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return style;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
__attach(): void {
|
|
197
|
+
const nodes = this.#nodes;
|
|
198
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
199
|
+
const node = nodes[ii];
|
|
200
|
+
node.__addChild(this);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
__detach(): void {
|
|
205
|
+
const nodes = this.#nodes;
|
|
206
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
207
|
+
const node = nodes[ii];
|
|
208
|
+
node.__removeChild(this);
|
|
209
|
+
}
|
|
210
|
+
super.__detach();
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
__makeNative(platformConfig: ?PlatformConfig) {
|
|
214
|
+
const nodes = this.#nodes;
|
|
215
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
216
|
+
const node = nodes[ii];
|
|
217
|
+
node.__makeNative(platformConfig);
|
|
218
|
+
}
|
|
219
|
+
super.__makeNative(platformConfig);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
__getNativeConfig(): Object {
|
|
223
|
+
const platformConfig = this.__getPlatformConfig();
|
|
224
|
+
const styleConfig: {[string]: ?number} = {};
|
|
225
|
+
|
|
226
|
+
const nodeKeys = this.#nodeKeys;
|
|
227
|
+
const nodes = this.#nodes;
|
|
228
|
+
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
229
|
+
const key = nodeKeys[ii];
|
|
230
|
+
const node = nodes[ii];
|
|
231
|
+
node.__makeNative(platformConfig);
|
|
232
|
+
styleConfig[key] = node.__getNativeTag();
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
if (__DEV__) {
|
|
236
|
+
validateStyles(styleConfig);
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
type: 'style',
|
|
240
|
+
style: styleConfig,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// Supported versions of JSC do not implement the newer Object.hasOwn. Remove
|
|
246
|
+
// this shim when they do.
|
|
247
|
+
// $FlowIgnore[method-unbinding]
|
|
248
|
+
const _hasOwnProp = Object.prototype.hasOwnProperty;
|
|
249
|
+
const hasOwn: (obj: $ReadOnly<{...}>, prop: string) => boolean =
|
|
250
|
+
// $FlowIgnore[method-unbinding]
|
|
251
|
+
Object.hasOwn ?? ((obj, prop) => _hasOwnProp.call(obj, prop));
|
|
@@ -12,8 +12,8 @@
|
|
|
12
12
|
|
|
13
13
|
import type {PlatformConfig} from '../AnimatedPlatformConfig';
|
|
14
14
|
|
|
15
|
-
import {validateTransform} from '../../../src/private/animated/NativeAnimatedValidation';
|
|
16
15
|
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
|
16
|
+
import {validateTransform} from '../../../src/private/animated/NativeAnimatedValidation';
|
|
17
17
|
import AnimatedNode from './AnimatedNode';
|
|
18
18
|
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
19
19
|
|
|
@@ -26,37 +26,58 @@ type Transform<T = AnimatedNode> = {
|
|
|
26
26
|
| {[string]: number | string | T},
|
|
27
27
|
};
|
|
28
28
|
|
|
29
|
+
function flatAnimatedNodes(
|
|
30
|
+
transforms: $ReadOnlyArray<Transform<>>,
|
|
31
|
+
): Array<AnimatedNode> {
|
|
32
|
+
const nodes = [];
|
|
33
|
+
for (let ii = 0, length = transforms.length; ii < length; ii++) {
|
|
34
|
+
const transform = transforms[ii];
|
|
35
|
+
// There should be exactly one property in `transform`.
|
|
36
|
+
for (const key in transform) {
|
|
37
|
+
const value = transform[key];
|
|
38
|
+
if (value instanceof AnimatedNode) {
|
|
39
|
+
nodes.push(value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return nodes;
|
|
44
|
+
}
|
|
45
|
+
|
|
29
46
|
export default class AnimatedTransform extends AnimatedWithChildren {
|
|
30
47
|
// NOTE: For potentially historical reasons, some operations only operate on
|
|
31
48
|
// the first level of AnimatedNode instances. This optimizes that bevavior.
|
|
32
|
-
#
|
|
49
|
+
#nodes: $ReadOnlyArray<AnimatedNode>;
|
|
33
50
|
|
|
34
51
|
_transforms: $ReadOnlyArray<Transform<>>;
|
|
35
52
|
|
|
36
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Creates an `AnimatedTransform` if `transforms` contains `AnimatedNode`
|
|
55
|
+
* instances. Otherwise, returns `null`.
|
|
56
|
+
*/
|
|
57
|
+
static from(transforms: $ReadOnlyArray<Transform<>>): ?AnimatedTransform {
|
|
58
|
+
const nodes = flatAnimatedNodes(
|
|
59
|
+
// NOTE: This check should not be necessary, but the types are not
|
|
60
|
+
// enforced as of this writing. This check should be hoisted to
|
|
61
|
+
// instantiation sites.
|
|
62
|
+
Array.isArray(transforms) ? transforms : [],
|
|
63
|
+
);
|
|
64
|
+
if (nodes.length === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
return new AnimatedTransform(nodes, transforms);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
constructor(
|
|
71
|
+
nodes: $ReadOnlyArray<AnimatedNode>,
|
|
72
|
+
transforms: $ReadOnlyArray<Transform<>>,
|
|
73
|
+
) {
|
|
37
74
|
super();
|
|
75
|
+
this.#nodes = nodes;
|
|
38
76
|
this._transforms = transforms;
|
|
39
|
-
|
|
40
|
-
const shallowNodes = [];
|
|
41
|
-
// NOTE: This check should not be necessary, but the types are not enforced
|
|
42
|
-
// as of this writing. This check should be hoisted to instantiation sites.
|
|
43
|
-
if (Array.isArray(transforms)) {
|
|
44
|
-
for (let ii = 0, length = transforms.length; ii < length; ii++) {
|
|
45
|
-
const transform = transforms[ii];
|
|
46
|
-
// There should be exactly one property in `transform`.
|
|
47
|
-
for (const key in transform) {
|
|
48
|
-
const value = transform[key];
|
|
49
|
-
if (value instanceof AnimatedNode) {
|
|
50
|
-
shallowNodes.push(value);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
this.#shallowNodes = shallowNodes;
|
|
56
77
|
}
|
|
57
78
|
|
|
58
79
|
__makeNative(platformConfig: ?PlatformConfig) {
|
|
59
|
-
const nodes = this.#
|
|
80
|
+
const nodes = this.#nodes;
|
|
60
81
|
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
61
82
|
const node = nodes[ii];
|
|
62
83
|
node.__makeNative(platformConfig);
|
|
@@ -70,6 +91,18 @@ export default class AnimatedTransform extends AnimatedWithChildren {
|
|
|
70
91
|
);
|
|
71
92
|
}
|
|
72
93
|
|
|
94
|
+
__getValueWithStaticTransforms(
|
|
95
|
+
staticTransforms: $ReadOnlyArray<Object>,
|
|
96
|
+
): $ReadOnlyArray<Object> {
|
|
97
|
+
const values = [];
|
|
98
|
+
mapTransforms(this._transforms, node => {
|
|
99
|
+
values.push(node.__getValue());
|
|
100
|
+
});
|
|
101
|
+
// NOTE: We can depend on `this._transforms` and `staticTransforms` sharing
|
|
102
|
+
// a structure because of `useAnimatedPropsMemo`.
|
|
103
|
+
return mapTransforms(staticTransforms, () => values.shift());
|
|
104
|
+
}
|
|
105
|
+
|
|
73
106
|
__getAnimatedValue(): $ReadOnlyArray<Transform<any>> {
|
|
74
107
|
return mapTransforms(this._transforms, animatedNode =>
|
|
75
108
|
animatedNode.__getAnimatedValue(),
|
|
@@ -77,7 +110,7 @@ export default class AnimatedTransform extends AnimatedWithChildren {
|
|
|
77
110
|
}
|
|
78
111
|
|
|
79
112
|
__attach(): void {
|
|
80
|
-
const nodes = this.#
|
|
113
|
+
const nodes = this.#nodes;
|
|
81
114
|
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
82
115
|
const node = nodes[ii];
|
|
83
116
|
node.__addChild(this);
|
|
@@ -85,7 +118,7 @@ export default class AnimatedTransform extends AnimatedWithChildren {
|
|
|
85
118
|
}
|
|
86
119
|
|
|
87
120
|
__detach(): void {
|
|
88
|
-
const nodes = this.#
|
|
121
|
+
const nodes = this.#nodes;
|
|
89
122
|
for (let ii = 0, length = nodes.length; ii < length; ii++) {
|
|
90
123
|
const node = nodes[ii];
|
|
91
124
|
node.__removeChild(this);
|
|
@@ -15,8 +15,8 @@ import type {InterpolationConfigType} from './AnimatedInterpolation';
|
|
|
15
15
|
import type AnimatedNode from './AnimatedNode';
|
|
16
16
|
import type AnimatedTracking from './AnimatedTracking';
|
|
17
17
|
|
|
18
|
-
import InteractionManager from '../../Interaction/InteractionManager';
|
|
19
18
|
import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
|
|
19
|
+
import InteractionManager from '../../Interaction/InteractionManager';
|
|
20
20
|
import AnimatedInterpolation from './AnimatedInterpolation';
|
|
21
21
|
import AnimatedWithChildren from './AnimatedWithChildren';
|
|
22
22
|
|
|
@@ -28,12 +28,10 @@ export default class AnimatedWithChildren extends AnimatedNode {
|
|
|
28
28
|
const children = this._children;
|
|
29
29
|
let length = children.length;
|
|
30
30
|
if (length > 0) {
|
|
31
|
-
const nativeTag = this.__getNativeTag();
|
|
32
|
-
|
|
33
31
|
for (let ii = 0; ii < length; ii++) {
|
|
34
32
|
const child = children[ii];
|
|
35
33
|
child.__makeNative(platformConfig);
|
|
36
|
-
connectAnimatedNodes(
|
|
34
|
+
connectAnimatedNodes(this.__getNativeTag(), child.__getNativeTag());
|
|
37
35
|
}
|
|
38
36
|
}
|
|
39
37
|
}
|