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.
Files changed (369) hide show
  1. package/.flowconfig +5 -1
  2. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  3. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  4. package/Libraries/Animated/AnimatedEvent.js +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  6. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  7. package/Libraries/Animated/NativeAnimatedAllowlist.windows.js +122 -0
  8. package/Libraries/Animated/animations/Animation.js +60 -25
  9. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  10. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  11. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  12. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  13. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  14. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  15. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  16. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  17. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  18. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  19. package/Libraries/Animated/nodes/AnimatedProps.js +96 -46
  20. package/Libraries/Animated/nodes/AnimatedProps.windows.js +281 -0
  21. package/Libraries/Animated/nodes/AnimatedStyle.js +108 -39
  22. package/Libraries/Animated/nodes/AnimatedStyle.windows.js +251 -0
  23. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  24. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  25. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  26. package/Libraries/Animated/useAnimatedProps.js +41 -35
  27. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  28. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  29. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.windows.js +82 -5
  30. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  31. package/Libraries/Components/Button.js +9 -4
  32. package/Libraries/Components/Button.windows.js +19 -5
  33. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  34. package/Libraries/Components/Glyph/Glyph.js +2 -1
  35. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  36. package/Libraries/Components/Popup/PopupNativeComponent.js +0 -1
  37. package/Libraries/Components/Pressable/Pressable.js +4 -4
  38. package/Libraries/Components/Pressable/Pressable.windows.js +10 -4
  39. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  40. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  41. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  42. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  43. package/Libraries/Components/ScrollView/ScrollView.js +49 -88
  44. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  45. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  46. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  47. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.windows.js +0 -5
  48. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  49. package/Libraries/Components/Switch/Switch.js +8 -6
  50. package/Libraries/Components/Switch/Switch.windows.js +8 -6
  51. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  52. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  53. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  54. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  55. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  56. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  57. package/Libraries/Components/TextInput/TextInput.js +37 -13
  58. package/Libraries/Components/TextInput/TextInput.windows.js +47 -16
  59. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  60. package/Libraries/Components/TextInput/TextInputState.windows.js +11 -13
  61. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  62. package/Libraries/Components/Touchable/Position.js +7 -2
  63. package/Libraries/Components/Touchable/Touchable.js +4 -0
  64. package/Libraries/Components/Touchable/Touchable.windows.js +4 -0
  65. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  66. package/Libraries/Components/Touchable/TouchableBounce.windows.js +227 -0
  67. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  68. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +5 -5
  69. package/Libraries/Components/Touchable/TouchableNativeFeedback.windows.js +371 -0
  70. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -5
  71. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +11 -5
  72. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  73. package/Libraries/Components/Touchable/TouchableWithoutFeedback.windows.js +9 -3
  74. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  75. package/Libraries/Components/View/View.js +4 -4
  76. package/Libraries/Components/View/View.windows.js +12 -5
  77. package/Libraries/Components/View/ViewAccessibility.d.ts +10 -0
  78. package/Libraries/Components/View/ViewAccessibility.windows.js +2 -0
  79. package/Libraries/Components/View/ViewNativeComponent.js +6 -98
  80. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  81. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  82. package/Libraries/Components/View/ViewPropTypes.windows.js +2 -3
  83. package/Libraries/Core/ExceptionsManager.js +50 -29
  84. package/Libraries/Core/ReactNativeVersion.js +3 -3
  85. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  86. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  87. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  88. package/Libraries/Core/setUpErrorHandling.js +20 -18
  89. package/Libraries/Core/setUpReactDevTools.js +107 -8
  90. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  91. package/Libraries/Core/setUpTimers.js +21 -18
  92. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  93. package/Libraries/Image/AssetSourceResolver.js +12 -1
  94. package/Libraries/Image/AssetSourceResolver.windows.js +12 -1
  95. package/Libraries/Image/Image.android.js +1 -5
  96. package/Libraries/Image/Image.d.ts +20 -29
  97. package/Libraries/Image/Image.ios.js +0 -2
  98. package/Libraries/Image/Image.windows.js +5 -1
  99. package/Libraries/Image/ImageBackground.js +2 -5
  100. package/Libraries/Image/ImageProps.js +7 -6
  101. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  102. package/Libraries/Image/ImageResizeMode.js +4 -1
  103. package/Libraries/Image/ImageSource.d.ts +0 -2
  104. package/Libraries/Image/ImageSource.js +0 -2
  105. package/Libraries/Image/ImageTypes.flow.js +11 -9
  106. package/Libraries/Image/ImageUtils.js +6 -3
  107. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  108. package/Libraries/Inspector/Inspector.js +1 -0
  109. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  110. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  111. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  112. package/Libraries/Interaction/InteractionManager.js +6 -1
  113. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  114. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  115. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  116. package/Libraries/Lists/FlatList.d.ts +1 -2
  117. package/Libraries/Lists/FlatList.js +2 -2
  118. package/Libraries/Lists/SectionListModern.js +7 -7
  119. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  120. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  121. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  122. package/Libraries/LogBox/LogBox.js +18 -5
  123. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  124. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  125. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  126. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.windows.js +6 -1
  128. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  129. package/Libraries/LogBox/UI/LogBoxInspectorHeader.windows.js +1 -1
  130. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  131. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  132. package/Libraries/Modal/Modal.d.ts +12 -0
  133. package/Libraries/Modal/Modal.js +31 -4
  134. package/Libraries/Modal/Modal.windows.js +18 -0
  135. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  136. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  137. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -11
  138. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  139. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  140. package/Libraries/Network/XHRInterceptor.js +63 -14
  141. package/Libraries/Network/XMLHttpRequest.js +26 -1
  142. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  143. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  144. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  145. package/Libraries/Pressability/HoverState.js +2 -0
  146. package/Libraries/Pressability/Pressability.js +2 -3
  147. package/Libraries/Pressability/Pressability.windows.js +2 -3
  148. package/Libraries/Pressability/usePressability.js +4 -1
  149. package/Libraries/ReactNative/AppContainer.js +1 -1
  150. package/Libraries/ReactNative/AppRegistry.js +1 -11
  151. package/Libraries/ReactNative/DisplayMode.js +1 -1
  152. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  153. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  154. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  155. package/Libraries/ReactNative/renderApplication.js +9 -8
  156. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  157. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  158. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  159. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  160. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  161. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  162. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  163. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  164. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  165. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  166. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  167. package/Libraries/StyleSheet/processTransform.js +3 -34
  168. package/Libraries/Text/Text.js +248 -249
  169. package/Libraries/Text/Text.windows.js +298 -292
  170. package/Libraries/Text/TextNativeComponent.js +0 -1
  171. package/Libraries/Text/TextProps.windows.js +2 -0
  172. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  173. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  174. package/Libraries/Types/CoreEventTypes.js +4 -6
  175. package/Libraries/Types/CoreEventTypes.windows.js +4 -6
  176. package/Libraries/Utilities/Appearance.js +3 -1
  177. package/Libraries/Utilities/BackHandler.android.js +6 -18
  178. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  179. package/Libraries/Utilities/BackHandler.ios.js +0 -7
  180. package/Libraries/Utilities/BackHandler.windows.js +6 -18
  181. package/Libraries/Utilities/HMRClient.js +3 -4
  182. package/Libraries/Utilities/Platform.flow.js +2 -2
  183. package/Libraries/Utilities/Platform.flow.windows.js +3 -2
  184. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  185. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  186. package/Libraries/Utilities/useMergeRefs.js +26 -7
  187. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  188. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  189. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  190. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  191. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +9 -8
  192. package/Microsoft.ReactNative/AsynchronousEventBeat.h +5 -5
  193. package/Microsoft.ReactNative/FBReactNativeSpec/FBReactNativeSpecJSI.h +5 -0
  194. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +2 -2
  195. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +197 -18
  196. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +19 -1
  197. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +13 -0
  198. package/Microsoft.ReactNative/Fabric/Composition/ReactNativeIsland.cpp +1 -1
  199. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +6 -8
  200. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +2 -2
  201. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +3 -2
  202. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +1 -1
  203. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +24 -0
  204. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +5 -0
  205. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +12 -12
  206. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +4 -4
  207. package/Microsoft.ReactNative/Fabric/ImageRequest.cpp +4 -8
  208. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewProps.cpp +16 -15
  209. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.cpp +15 -0
  210. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +9 -0
  211. package/Microsoft.ReactNative/ReactHost/ReactHost.cpp +20 -1
  212. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +11 -6
  213. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +1 -1
  214. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +14 -4
  215. package/Microsoft.ReactNative/SynchronousEventBeat.h +4 -2
  216. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.cpp +78 -0
  217. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.h +51 -0
  218. package/Microsoft.ReactNative.Cxx/ApiLoaders/JSRuntimeApi.inc +48 -0
  219. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.cpp +41 -0
  220. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.h +127 -0
  221. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi.inc +125 -0
  222. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_posix.cpp +16 -0
  223. package/Microsoft.ReactNative.Cxx/ApiLoaders/NodeApi_win.cpp +23 -0
  224. package/Microsoft.ReactNative.Cxx/JSI/decorator.h +834 -0
  225. package/Microsoft.ReactNative.Cxx/JSI/instrumentation.h +117 -0
  226. package/Microsoft.ReactNative.Cxx/JSI/jsi-inl.h +366 -0
  227. package/Microsoft.ReactNative.Cxx/JSI/jsi.cpp +560 -0
  228. package/Microsoft.ReactNative.Cxx/JSI/jsi.h +1611 -0
  229. package/Microsoft.ReactNative.Cxx/JSI/threadsafe.h +79 -0
  230. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +7 -11
  231. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +1 -1
  232. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.cpp +2878 -0
  233. package/Microsoft.ReactNative.Cxx/NodeApiJsiRuntime.h +36 -0
  234. package/Microsoft.ReactNative.Cxx/ReactCommon/CallInvoker.h +64 -0
  235. package/Microsoft.ReactNative.Cxx/ReactCommon/SchedulerPriority.h +22 -0
  236. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModule.cpp +63 -63
  237. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModule.h +165 -0
  238. package/Microsoft.ReactNative.Cxx/ReactCommon/TurboModuleUtils.cpp +105 -0
  239. package/{ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core → Microsoft.ReactNative.Cxx}/ReactCommon/TurboModuleUtils.h +57 -58
  240. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/AString.h +42 -0
  241. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Array.h +151 -0
  242. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Base.h +177 -154
  243. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bool.h +25 -0
  244. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Bridging.h +21 -0
  245. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/CallbackWrapper.h +67 -0
  246. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Class.h +90 -0
  247. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Convert.h +170 -172
  248. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Error.h +51 -0
  249. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/EventEmitter.h +134 -136
  250. package/{ReactCommon/TEMP_UntilReactCommonUpdate → Microsoft.ReactNative.Cxx/ReactCommon}/react/bridging/Function.h +283 -283
  251. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.cpp +63 -0
  252. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/LongLivedObject.h +61 -0
  253. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Object.h +93 -0
  254. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Promise.h +104 -0
  255. package/Microsoft.ReactNative.Cxx/ReactCommon/react/bridging/Value.h +107 -0
  256. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/flags.h +22 -0
  257. package/Microsoft.ReactNative.Cxx/ReactCommon/react/debug/react_native_assert.h +72 -0
  258. package/Microsoft.ReactNative.Cxx/node-api/js_native_api.h +553 -0
  259. package/Microsoft.ReactNative.Cxx/node-api/js_native_api_types.h +167 -0
  260. package/Microsoft.ReactNative.Cxx/node-api/js_runtime_api.h +186 -0
  261. package/Microsoft.ReactNative.Cxx/stubs/glog/logging.h +82 -0
  262. package/PropertySheets/Bundle.Common.targets +1 -1
  263. package/PropertySheets/Bundle.props +3 -0
  264. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  265. package/PropertySheets/ManagedCodeGen/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  266. package/PropertySheets/OutputMSBuildProperties.targets +3 -1
  267. package/ReactCommon/ReactCommon.vcxproj +5 -0
  268. package/ReactCommon/TEMP_UntilReactCommonUpdate/cxxreact/JSExecutor.cpp +2 -3
  269. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +61 -0
  270. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.h +26 -23
  271. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +150 -0
  272. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/AccessibilityPrimitives.h +252 -0
  273. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/accessibilityPropsConversions.h +795 -0
  274. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/runtimescheduler/SchedulerPriorityUtils.h +59 -0
  275. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +188 -39
  276. package/Scripts/Microsoft.ReactNative.Managed.CodeGen.targets +1 -1
  277. package/Scripts/Tfs/Layout-MSRN-Headers.ps1 +97 -62
  278. package/Shared/InspectorPackagerConnection.cpp +3 -6
  279. package/Shared/InspectorPackagerConnection.h +2 -2
  280. package/Shared/InstanceManager.h +1 -1
  281. package/Shared/OInstance.h +1 -1
  282. package/Shared/Shared.vcxitems +17 -2
  283. package/Shared/Shared.vcxitems.filters +3 -1
  284. package/Shared/TurboModuleManager.cpp +29 -4
  285. package/codegen/NativeAccessibilityInfoSpec.g.h +27 -9
  286. package/codegen/NativeAccessibilityManagerSpec.g.h +19 -13
  287. package/codegen/NativeActionSheetManagerSpec.g.h +4 -0
  288. package/codegen/NativeExceptionsManagerSpec.g.h +1 -7
  289. package/codegen/NativeIntersectionObserverSpec.g.h +2 -0
  290. package/codegen/NativePerformanceSpec.g.h +127 -3
  291. package/codegen/NativeReactDevToolsRuntimeSettingsModuleSpec.g.h +67 -0
  292. package/codegen/NativeReactDevToolsSettingsManagerSpec.g.h +41 -0
  293. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +125 -137
  294. package/codegen/react/components/rnwcore/ComponentDescriptors.h +0 -1
  295. package/codegen/react/components/rnwcore/Props.cpp +1 -0
  296. package/codegen/react/components/rnwcore/Props.h +1 -0
  297. package/codegen/react/components/rnwcore/ShadowNodes.cpp +0 -1
  298. package/codegen/react/components/rnwcore/ShadowNodes.h +0 -11
  299. package/codegen/react/components/rnwcore/States.h +0 -12
  300. package/codegen/rnwcoreJSI-generated.cpp +219 -186
  301. package/codegen/rnwcoreJSI.h +942 -511
  302. package/index.js +10 -3
  303. package/index.windows.js +10 -3
  304. package/jest/setup.js +36 -1
  305. package/just-task.js +15 -0
  306. package/package.json +22 -22
  307. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  308. package/src/private/animated/useAnimatedPropsMemo.js +348 -0
  309. package/src/private/animated/useAnimatedPropsMemo.windows.js +356 -0
  310. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  311. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  312. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  313. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  314. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  315. package/src/private/debugging/ReactDevToolsSettingsManager.windows.js +20 -0
  316. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  317. package/src/private/devmenu/DevMenu.d.ts +20 -0
  318. package/src/private/devmenu/DevMenu.js +31 -0
  319. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  320. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  321. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  322. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  323. package/src/private/setup/setUpDOM.js +14 -6
  324. package/src/private/setup/setUpMutationObserver.js +5 -0
  325. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  326. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  327. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  328. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  329. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  330. package/src/private/specs/modules/NativeAppearance.js +4 -10
  331. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  332. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  333. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  334. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  335. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  336. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  337. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  338. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  339. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  340. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  341. package/src/private/webapis/performance/EventTiming.js +13 -8
  342. package/src/private/webapis/performance/Performance.js +66 -73
  343. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  344. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  345. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  346. package/src/private/webapis/performance/UserTiming.js +11 -7
  347. package/src/private/webapis/performance/Utilities.js +18 -0
  348. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  349. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  350. package/templates/cpp-lib/template.config.js +13 -7
  351. package/templates/templateUtils.js +10 -0
  352. package/types/index.d.ts +1 -1
  353. package/types/public/ReactNativeTypes.d.ts +4 -8
  354. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  355. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  356. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  357. package/Libraries/DevToolsSettings/DevToolsSettingsManager.windows.js +0 -35
  358. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  359. package/Libraries/ReactNative/ReactFabricInternals.js +0 -17
  360. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/CallbackWrapper.h +0 -101
  361. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +0 -569
  362. package/codegen/NativeDevToolsSettingsManagerSpec.g.h +0 -53
  363. package/codegen/NativePerformanceObserverSpec.g.h +0 -131
  364. package/src/private/components/useSyncOnScroll.js +0 -48
  365. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  366. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  367. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  368. package/types/experimental.d.ts +0 -59
  369. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -4,25 +4,22 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @flow
7
+ * @flow strict-local
8
8
  * @format
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
11
  import type {PlatformConfig} from '../AnimatedPlatformConfig';
14
12
  import type AnimatedInterpolation from '../nodes/AnimatedInterpolation';
15
13
  import type AnimatedValue from '../nodes/AnimatedValue';
16
14
  import type AnimatedValueXY from '../nodes/AnimatedValueXY';
17
15
  import type {AnimationConfig, EndCallback} from './Animation';
18
16
 
19
- import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
20
17
  import AnimatedColor from '../nodes/AnimatedColor';
21
18
  import * as SpringConfig from '../SpringConfig';
22
19
  import Animation from './Animation';
23
20
  import invariant from 'invariant';
24
21
 
25
- export type SpringAnimationConfig = {
22
+ export type SpringAnimationConfig = $ReadOnly<{
26
23
  ...AnimationConfig,
27
24
  toValue:
28
25
  | number
@@ -47,11 +44,11 @@ export type SpringAnimationConfig = {
47
44
  restSpeedThreshold?: number,
48
45
  velocity?:
49
46
  | number
50
- | {
47
+ | $ReadOnly<{
51
48
  x: number,
52
49
  y: number,
53
50
  ...
54
- },
51
+ }>,
55
52
  bounciness?: number,
56
53
  speed?: number,
57
54
  tension?: number,
@@ -60,9 +57,10 @@ export type SpringAnimationConfig = {
60
57
  damping?: number,
61
58
  mass?: number,
62
59
  delay?: number,
63
- };
60
+ ...
61
+ }>;
64
62
 
65
- export type SpringAnimationConfigSingle = {
63
+ export type SpringAnimationConfigSingle = $ReadOnly<{
66
64
  ...AnimationConfig,
67
65
  toValue: number,
68
66
  overshootClamping?: boolean,
@@ -77,7 +75,14 @@ export type SpringAnimationConfigSingle = {
77
75
  damping?: number,
78
76
  mass?: number,
79
77
  delay?: number,
80
- };
78
+ ...
79
+ }>;
80
+
81
+ opaque type SpringAnimationInternalState = $ReadOnly<{
82
+ lastPosition: number,
83
+ lastVelocity: number,
84
+ lastTime: number,
85
+ }>;
81
86
 
82
87
  export default class SpringAnimation extends Animation {
83
88
  _overshootClamping: boolean;
@@ -93,17 +98,16 @@ export default class SpringAnimation extends Animation {
93
98
  _mass: number;
94
99
  _initialVelocity: number;
95
100
  _delay: number;
96
- _timeout: any;
101
+ _timeout: ?TimeoutID;
97
102
  _startTime: number;
98
103
  _lastTime: number;
99
104
  _frameTime: number;
100
105
  _onUpdate: (value: number) => void;
101
- _animationFrame: any;
102
- _useNativeDriver: boolean;
106
+ _animationFrame: ?AnimationFrameID;
103
107
  _platformConfig: ?PlatformConfig;
104
108
 
105
109
  constructor(config: SpringAnimationConfigSingle) {
106
- super();
110
+ super(config);
107
111
 
108
112
  this._overshootClamping = config.overshootClamping ?? false;
109
113
  this._restDisplacementThreshold = config.restDisplacementThreshold ?? 0.001;
@@ -112,10 +116,7 @@ export default class SpringAnimation extends Animation {
112
116
  this._lastVelocity = config.velocity ?? 0;
113
117
  this._toValue = config.toValue;
114
118
  this._delay = config.delay ?? 0;
115
- this._useNativeDriver = NativeAnimatedHelper.shouldUseNativeDriver(config);
116
119
  this._platformConfig = config.platformConfig;
117
- this.__isInteraction = config.isInteraction ?? !this._useNativeDriver;
118
- this.__iterations = config.iterations ?? 1;
119
120
 
120
121
  if (
121
122
  config.stiffness !== undefined ||
@@ -167,7 +168,7 @@ export default class SpringAnimation extends Animation {
167
168
  invariant(this._mass > 0, 'Mass value must be greater than 0');
168
169
  }
169
170
 
170
- __getNativeAnimationConfig(): {|
171
+ __getNativeAnimationConfig(): $ReadOnly<{
171
172
  damping: number,
172
173
  initialVelocity: number,
173
174
  iterations: number,
@@ -177,9 +178,10 @@ export default class SpringAnimation extends Animation {
177
178
  restDisplacementThreshold: number,
178
179
  restSpeedThreshold: number,
179
180
  stiffness: number,
180
- toValue: any,
181
- type: $TEMPORARY$string<'spring'>,
182
- |} {
181
+ toValue: number,
182
+ type: 'spring',
183
+ ...
184
+ }> {
183
185
  return {
184
186
  type: 'spring',
185
187
  overshootClamping: this._overshootClamping,
@@ -202,12 +204,12 @@ export default class SpringAnimation extends Animation {
202
204
  previousAnimation: ?Animation,
203
205
  animatedValue: AnimatedValue,
204
206
  ): void {
205
- this.__active = true;
207
+ super.start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue);
208
+
206
209
  this._startPosition = fromValue;
207
210
  this._lastPosition = this._startPosition;
208
211
 
209
212
  this._onUpdate = onUpdate;
210
- this.__onEnd = onEnd;
211
213
  this._lastTime = Date.now();
212
214
  this._frameTime = 0.0;
213
215
 
@@ -221,17 +223,8 @@ export default class SpringAnimation extends Animation {
221
223
  }
222
224
 
223
225
  const start = () => {
224
- if (!this._useNativeDriver && animatedValue.__isNative === true) {
225
- throw new Error(
226
- 'Attempting to run JS driven animation on animated node ' +
227
- 'that has been moved to "native" earlier by starting an ' +
228
- 'animation with `useNativeDriver: true`',
229
- );
230
- }
231
-
232
- if (this._useNativeDriver) {
233
- this.__startNativeAnimation(animatedValue);
234
- } else {
226
+ const useNativeDriver = this.__startAnimationIfNative(animatedValue);
227
+ if (!useNativeDriver) {
235
228
  this.onUpdate();
236
229
  }
237
230
  };
@@ -244,7 +237,7 @@ export default class SpringAnimation extends Animation {
244
237
  }
245
238
  }
246
239
 
247
- getInternalState(): Object {
240
+ getInternalState(): SpringAnimationInternalState {
248
241
  return {
249
242
  lastPosition: this._lastPosition,
250
243
  lastVelocity: this._lastVelocity,
@@ -361,7 +354,7 @@ export default class SpringAnimation extends Animation {
361
354
  this._onUpdate(this._toValue);
362
355
  }
363
356
 
364
- this.__debouncedOnEnd({finished: true});
357
+ this.__notifyAnimationEnd({finished: true});
365
358
  return;
366
359
  }
367
360
  // $FlowFixMe[method-unbinding] added when improving typing for this parameters
@@ -370,9 +363,10 @@ export default class SpringAnimation extends Animation {
370
363
 
371
364
  stop(): void {
372
365
  super.stop();
373
- this.__active = false;
374
366
  clearTimeout(this._timeout);
375
- global.cancelAnimationFrame(this._animationFrame);
376
- this.__debouncedOnEnd({finished: false});
367
+ if (this._animationFrame != null) {
368
+ global.cancelAnimationFrame(this._animationFrame);
369
+ }
370
+ this.__notifyAnimationEnd({finished: false});
377
371
  }
378
372
  }
@@ -4,12 +4,10 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @flow
7
+ * @flow strict-local
8
8
  * @format
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
11
  import type {PlatformConfig} from '../AnimatedPlatformConfig';
14
12
  import type {RgbaValue} from '../nodes/AnimatedColor';
15
13
  import type AnimatedInterpolation from '../nodes/AnimatedInterpolation';
@@ -17,7 +15,6 @@ import type AnimatedValue from '../nodes/AnimatedValue';
17
15
  import type AnimatedValueXY from '../nodes/AnimatedValueXY';
18
16
  import type {AnimationConfig, EndCallback} from './Animation';
19
17
 
20
- import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
21
18
  import AnimatedColor from '../nodes/AnimatedColor';
22
19
  import Animation from './Animation';
23
20
 
@@ -26,11 +23,11 @@ export type TimingAnimationConfig = $ReadOnly<{
26
23
  toValue:
27
24
  | number
28
25
  | AnimatedValue
29
- | {
26
+ | $ReadOnly<{
30
27
  x: number,
31
28
  y: number,
32
29
  ...
33
- }
30
+ }>
34
31
  | AnimatedValueXY
35
32
  | RgbaValue
36
33
  | AnimatedColor
@@ -38,6 +35,7 @@ export type TimingAnimationConfig = $ReadOnly<{
38
35
  easing?: (value: number) => number,
39
36
  duration?: number,
40
37
  delay?: number,
38
+ ...
41
39
  }>;
42
40
 
43
41
  export type TimingAnimationConfigSingle = $ReadOnly<{
@@ -46,6 +44,7 @@ export type TimingAnimationConfigSingle = $ReadOnly<{
46
44
  easing?: (value: number) => number,
47
45
  duration?: number,
48
46
  delay?: number,
47
+ ...
49
48
  }>;
50
49
 
51
50
  let _easeInOut;
@@ -65,25 +64,28 @@ export default class TimingAnimation extends Animation {
65
64
  _delay: number;
66
65
  _easing: (value: number) => number;
67
66
  _onUpdate: (value: number) => void;
68
- _animationFrame: any;
69
- _timeout: any;
70
- _useNativeDriver: boolean;
67
+ _animationFrame: ?AnimationFrameID;
68
+ _timeout: ?TimeoutID;
71
69
  _platformConfig: ?PlatformConfig;
72
70
 
73
71
  constructor(config: TimingAnimationConfigSingle) {
74
- super();
72
+ super(config);
73
+
75
74
  this._toValue = config.toValue;
76
75
  this._easing = config.easing ?? easeInOut();
77
76
  this._duration = config.duration ?? 500;
78
77
  this._delay = config.delay ?? 0;
79
- this.__iterations = config.iterations ?? 1;
80
- this._useNativeDriver = NativeAnimatedHelper.shouldUseNativeDriver(config);
81
78
  this._platformConfig = config.platformConfig;
82
- this.__isInteraction = config.isInteraction ?? !this._useNativeDriver;
83
- this.__isLooping = config.isLooping;
84
79
  }
85
80
 
86
- __getNativeAnimationConfig(): any {
81
+ __getNativeAnimationConfig(): $ReadOnly<{
82
+ type: 'frames',
83
+ frames: $ReadOnlyArray<number>,
84
+ toValue: number,
85
+ iterations: number,
86
+ platformConfig: ?PlatformConfig,
87
+ ...
88
+ }> {
87
89
  const frameDuration = 1000.0 / 60.0;
88
90
  const frames = [];
89
91
  const numFrames = Math.round(this._duration / frameDuration);
@@ -107,35 +109,24 @@ export default class TimingAnimation extends Animation {
107
109
  previousAnimation: ?Animation,
108
110
  animatedValue: AnimatedValue,
109
111
  ): void {
110
- this.__active = true;
112
+ super.start(fromValue, onUpdate, onEnd, previousAnimation, animatedValue);
113
+
111
114
  this._fromValue = fromValue;
112
115
  this._onUpdate = onUpdate;
113
- this.__onEnd = onEnd;
114
116
 
115
117
  const start = () => {
116
- if (!this._useNativeDriver && animatedValue.__isNative === true) {
117
- throw new Error(
118
- 'Attempting to run JS driven animation on animated node ' +
119
- 'that has been moved to "native" earlier by starting an ' +
120
- 'animation with `useNativeDriver: true`',
121
- );
122
- }
118
+ this._startTime = Date.now();
123
119
 
124
- // Animations that sometimes have 0 duration and sometimes do not
125
- // still need to use the native driver when duration is 0 so as to
126
- // not cause intermixed JS and native animations.
127
- if (this._duration === 0 && !this._useNativeDriver) {
128
- this._onUpdate(this._toValue);
129
- this.__debouncedOnEnd({finished: true});
130
- } else {
131
- this._startTime = Date.now();
132
- if (this._useNativeDriver) {
133
- this.__startNativeAnimation(animatedValue);
120
+ const useNativeDriver = this.__startAnimationIfNative(animatedValue);
121
+ if (!useNativeDriver) {
122
+ // Animations that sometimes have 0 duration and sometimes do not
123
+ // still need to use the native driver when duration is 0 so as to
124
+ // not cause intermixed JS and native animations.
125
+ if (this._duration === 0) {
126
+ this._onUpdate(this._toValue);
127
+ this.__notifyAnimationEnd({finished: true});
134
128
  } else {
135
- this._animationFrame = requestAnimationFrame(
136
- // $FlowFixMe[method-unbinding] added when improving typing for this parameters
137
- this.onUpdate.bind(this),
138
- );
129
+ this._animationFrame = requestAnimationFrame(() => this.onUpdate());
139
130
  }
140
131
  }
141
132
  };
@@ -156,7 +147,7 @@ export default class TimingAnimation extends Animation {
156
147
  this._fromValue + this._easing(1) * (this._toValue - this._fromValue),
157
148
  );
158
149
  }
159
- this.__debouncedOnEnd({finished: true});
150
+ this.__notifyAnimationEnd({finished: true});
160
151
  return;
161
152
  }
162
153
 
@@ -173,9 +164,10 @@ export default class TimingAnimation extends Animation {
173
164
 
174
165
  stop(): void {
175
166
  super.stop();
176
- this.__active = false;
177
167
  clearTimeout(this._timeout);
178
- global.cancelAnimationFrame(this._animationFrame);
179
- this.__debouncedOnEnd({finished: false});
168
+ if (this._animationFrame != null) {
169
+ global.cancelAnimationFrame(this._animationFrame);
170
+ }
171
+ this.__notifyAnimationEnd({finished: false});
180
172
  }
181
173
  }
@@ -16,5 +16,5 @@ import * as React from 'react';
16
16
 
17
17
  export default (createAnimatedComponent(FlatList): AnimatedComponentType<
18
18
  React.ElementConfig<typeof FlatList>,
19
- React.ElementRef<typeof FlatList>,
19
+ FlatList<mixed>,
20
20
  >);
@@ -8,6 +8,7 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import type {SectionBase} from '../../Lists/SectionList';
11
12
  import type {AnimatedComponentType} from '../createAnimatedComponent';
12
13
 
13
14
  import SectionList from '../../Lists/SectionList';
@@ -16,5 +17,6 @@ import * as React from 'react';
16
17
 
17
18
  export default (createAnimatedComponent(SectionList): AnimatedComponentType<
18
19
  React.ElementConfig<typeof SectionList>,
19
- React.ElementRef<typeof SectionList>,
20
+ // $FlowExpectedError[unclear-type]
21
+ SectionList<SectionBase<any>>,
20
22
  >);
@@ -8,6 +8,8 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import type {AnimatedPropsAllowlist} from './nodes/AnimatedProps';
12
+
11
13
  import composeStyles from '../../src/private/styles/composeStyles';
12
14
  import View from '../Components/View/View';
13
15
  import useMergeRefs from '../Utilities/useMergeRefs';
@@ -25,46 +27,71 @@ export type AnimatedProps<Props: {...}> = {
25
27
  }>)]: any,
26
28
  };
27
29
 
28
- export type AnimatedComponentType<
30
+ // We could use a mapped type here to introduce acceptable Animated variants
31
+ // of properties, instead of doing so in the core StyleSheetTypes
32
+ // Inexact Props are not supported, they'll be made exact here.
33
+ export type StrictAnimatedProps<Props: {...}> = $ReadOnly<{
34
+ ...$Exact<Props>,
35
+ passthroughAnimatedPropExplicitValues?: ?Props,
36
+ }>;
37
+
38
+ export type AnimatedComponentType<Props: {...}, +Instance = mixed> = component(
39
+ ref: React.RefSetter<Instance>,
40
+ ...AnimatedProps<Props>
41
+ );
42
+
43
+ export type StrictAnimatedComponentType<
29
44
  Props: {...},
30
45
  +Instance = mixed,
31
- > = React.AbstractComponent<AnimatedProps<Props>, Instance>;
46
+ > = component(ref: React.RefSetter<Instance>, ...StrictAnimatedProps<Props>);
32
47
 
33
48
  export default function createAnimatedComponent<TProps: {...}, TInstance>(
34
- Component: React.AbstractComponent<TProps, TInstance>,
49
+ Component: component(ref: React.RefSetter<TInstance>, ...TProps),
35
50
  ): AnimatedComponentType<TProps, TInstance> {
36
- const AnimatedComponent = React.forwardRef<AnimatedProps<TProps>, TInstance>(
37
- (props, forwardedRef) => {
38
- const [reducedProps, callbackRef] = useAnimatedProps<TProps, TInstance>(
39
- // $FlowFixMe[incompatible-call]
40
- props,
41
- );
42
- const ref = useMergeRefs<TInstance>(callbackRef, forwardedRef);
51
+ return unstable_createAnimatedComponentWithAllowlist(Component, null);
52
+ }
53
+
54
+ export function unstable_createAnimatedComponentWithAllowlist<
55
+ TProps: {...},
56
+ TInstance,
57
+ >(
58
+ Component: component(ref: React.RefSetter<TInstance>, ...TProps),
59
+ allowlist: ?AnimatedPropsAllowlist,
60
+ ): StrictAnimatedComponentType<TProps, TInstance> {
61
+ const AnimatedComponent = React.forwardRef<
62
+ StrictAnimatedProps<TProps>,
63
+ TInstance,
64
+ >((props, forwardedRef) => {
65
+ const [reducedProps, callbackRef] = useAnimatedProps<TProps, TInstance>(
66
+ // $FlowFixMe[incompatible-call]
67
+ props,
68
+ allowlist,
69
+ );
70
+ const ref = useMergeRefs<TInstance>(callbackRef, forwardedRef);
43
71
 
44
- // Some components require explicit passthrough values for animation
45
- // to work properly. For example, if an animated component is
46
- // transformed and Pressable, onPress will not work after transform
47
- // without these passthrough values.
48
- // $FlowFixMe[prop-missing]
49
- const {passthroughAnimatedPropExplicitValues, style} = reducedProps;
50
- const passthroughStyle = passthroughAnimatedPropExplicitValues?.style;
51
- const mergedStyle = useMemo(
52
- () => composeStyles(style, passthroughStyle),
53
- [passthroughStyle, style],
54
- );
72
+ // Some components require explicit passthrough values for animation
73
+ // to work properly. For example, if an animated component is
74
+ // transformed and Pressable, onPress will not work after transform
75
+ // without these passthrough values.
76
+ // $FlowFixMe[prop-missing]
77
+ const {passthroughAnimatedPropExplicitValues, style} = reducedProps;
78
+ const passthroughStyle = passthroughAnimatedPropExplicitValues?.style;
79
+ const mergedStyle = useMemo(
80
+ () => composeStyles(style, passthroughStyle),
81
+ [passthroughStyle, style],
82
+ );
55
83
 
56
- // NOTE: It is important that `passthroughAnimatedPropExplicitValues` is
57
- // spread after `reducedProps` but before `style`.
58
- return (
59
- <Component
60
- {...reducedProps}
61
- {...passthroughAnimatedPropExplicitValues}
62
- style={mergedStyle}
63
- ref={ref}
64
- />
65
- );
66
- },
67
- );
84
+ // NOTE: It is important that `passthroughAnimatedPropExplicitValues` is
85
+ // spread after `reducedProps` but before `style`.
86
+ return (
87
+ <Component
88
+ {...reducedProps}
89
+ {...passthroughAnimatedPropExplicitValues}
90
+ style={mergedStyle}
91
+ ref={ref}
92
+ />
93
+ );
94
+ });
68
95
 
69
96
  AnimatedComponent.displayName = `Animated(${
70
97
  Component.displayName || 'Anonymous'
@@ -15,9 +15,9 @@ import type {ColorValue} from '../../StyleSheet/StyleSheet';
15
15
  import type {NativeColorValue} from '../../StyleSheet/StyleSheetTypes';
16
16
  import type {PlatformConfig} from '../AnimatedPlatformConfig';
17
17
 
18
+ import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
18
19
  import normalizeColor from '../../StyleSheet/normalizeColor';
19
20
  import {processColorObject} from '../../StyleSheet/PlatformColorValueTypes';
20
- import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
21
21
  import AnimatedValue, {flushValue} from './AnimatedValue';
22
22
  import AnimatedWithChildren from './AnimatedWithChildren';
23
23
 
@@ -15,11 +15,11 @@
15
15
  import type {PlatformConfig} from '../AnimatedPlatformConfig';
16
16
  import type AnimatedNode from './AnimatedNode';
17
17
 
18
+ import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
18
19
  import {validateInterpolation} from '../../../src/private/animated/NativeAnimatedValidation';
19
20
  import normalizeColor from '../../StyleSheet/normalizeColor';
20
21
  import processColor from '../../StyleSheet/processColor';
21
22
  import Easing from '../Easing';
22
- import NativeAnimatedHelper from '../../../src/private/animated/NativeAnimatedHelper';
23
23
  import AnimatedWithChildren from './AnimatedWithChildren';
24
24
  import invariant from 'invariant';
25
25
 
@@ -8,8 +8,6 @@
8
8
  * @format
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
11
  import type {EventSubscription} from '../../vendor/emitter/EventEmitter';
14
12
  import type {PlatformConfig} from '../AnimatedPlatformConfig';
15
13
 
@@ -29,12 +27,11 @@ let _assertNativeAnimatedModule: ?() => void = () => {
29
27
  _assertNativeAnimatedModule = null;
30
28
  };
31
29
 
32
- // Note(vjeux): this would be better as an interface but flow doesn't
33
- // support them yet
34
30
  export default class AnimatedNode {
35
31
  #listeners: Map<string, ValueListenerCallback> = new Map();
32
+ #updateSubscription: ?EventSubscription = null;
33
+
36
34
  _platformConfig: ?PlatformConfig = undefined;
37
- __nativeAnimatedValueListener: ?EventSubscription = null;
38
35
  __attach(): void {}
39
36
  __detach(): void {
40
37
  this.removeAllListeners();
@@ -56,16 +53,17 @@ export default class AnimatedNode {
56
53
  /* Methods and props used by native Animated impl */
57
54
  __isNative: boolean = false;
58
55
  __nativeTag: ?number = undefined;
59
- __shouldUpdateListenersForNewNativeTag: boolean = false;
60
56
 
61
57
  __makeNative(platformConfig: ?PlatformConfig): void {
62
- if (!this.__isNative) {
63
- throw new Error('This node cannot be made a "native" animated node');
64
- }
58
+ // Subclasses are expected to set `__isNative` to true before this.
59
+ invariant(
60
+ this.__isNative,
61
+ 'This node cannot be made a "native" animated node',
62
+ );
65
63
 
66
64
  this._platformConfig = platformConfig;
67
65
  if (this.#listeners.size > 0) {
68
- this._startListeningToNativeValueUpdates();
66
+ this.#ensureUpdateSubscriptionExists();
69
67
  }
70
68
  }
71
69
 
@@ -80,7 +78,7 @@ export default class AnimatedNode {
80
78
  const id = String(_uniqueId++);
81
79
  this.#listeners.set(id, callback);
82
80
  if (this.__isNative) {
83
- this._startListeningToNativeValueUpdates();
81
+ this.#ensureUpdateSubscriptionExists();
84
82
  }
85
83
  return id;
86
84
  }
@@ -94,7 +92,7 @@ export default class AnimatedNode {
94
92
  removeListener(id: string): void {
95
93
  this.#listeners.delete(id);
96
94
  if (this.__isNative && this.#listeners.size === 0) {
97
- this._stopListeningForNativeValueUpdates();
95
+ this.#updateSubscription?.remove();
98
96
  }
99
97
  }
100
98
 
@@ -106,7 +104,7 @@ export default class AnimatedNode {
106
104
  removeAllListeners(): void {
107
105
  this.#listeners.clear();
108
106
  if (this.__isNative) {
109
- this._stopListeningForNativeValueUpdates();
107
+ this.#updateSubscription?.remove();
110
108
  }
111
109
  }
112
110
 
@@ -114,33 +112,36 @@ export default class AnimatedNode {
114
112
  return this.#listeners.size > 0;
115
113
  }
116
114
 
117
- _startListeningToNativeValueUpdates() {
118
- if (
119
- this.__nativeAnimatedValueListener &&
120
- !this.__shouldUpdateListenersForNewNativeTag
121
- ) {
115
+ #ensureUpdateSubscriptionExists(): void {
116
+ if (this.#updateSubscription != null) {
122
117
  return;
123
118
  }
124
-
125
- if (this.__shouldUpdateListenersForNewNativeTag) {
126
- this.__shouldUpdateListenersForNewNativeTag = false;
127
- this._stopListeningForNativeValueUpdates();
128
- }
129
-
130
- startListeningToAnimatedNodeValue(this.__getNativeTag());
131
- this.__nativeAnimatedValueListener =
119
+ const nativeTag = this.__getNativeTag();
120
+ startListeningToAnimatedNodeValue(nativeTag);
121
+ const subscription: EventSubscription =
132
122
  NativeAnimatedHelper.nativeEventEmitter.addListener(
133
123
  'onAnimatedValueUpdate',
134
124
  data => {
135
- if (data.tag !== this.__getNativeTag()) {
136
- return;
125
+ if (data.tag === nativeTag) {
126
+ this.__onAnimatedValueUpdateReceived(data.value);
137
127
  }
138
- this.__onAnimatedValueUpdateReceived(data.value);
139
128
  },
140
129
  );
130
+
131
+ this.#updateSubscription = {
132
+ remove: () => {
133
+ // Only this function assigns to `this.#updateSubscription`.
134
+ if (this.#updateSubscription == null) {
135
+ return;
136
+ }
137
+ this.#updateSubscription = null;
138
+ subscription.remove();
139
+ stopListeningToAnimatedNodeValue(nativeTag);
140
+ },
141
+ };
141
142
  }
142
143
 
143
- __onAnimatedValueUpdateReceived(value: number) {
144
+ __onAnimatedValueUpdateReceived(value: number): void {
144
145
  this.__callListeners(value);
145
146
  }
146
147
 
@@ -151,16 +152,6 @@ export default class AnimatedNode {
151
152
  });
152
153
  }
153
154
 
154
- _stopListeningForNativeValueUpdates() {
155
- if (!this.__nativeAnimatedValueListener) {
156
- return;
157
- }
158
-
159
- this.__nativeAnimatedValueListener.remove();
160
- this.__nativeAnimatedValueListener = null;
161
- stopListeningToAnimatedNodeValue(this.__getNativeTag());
162
- }
163
-
164
155
  __getNativeTag(): number {
165
156
  let nativeTag = this.__nativeTag;
166
157
  if (nativeTag == null) {
@@ -181,7 +172,6 @@ export default class AnimatedNode {
181
172
  config.platformConfig = this._platformConfig;
182
173
  }
183
174
  NativeAnimatedHelper.API.createAnimatedNode(nativeTag, config);
184
- this.__shouldUpdateListenersForNewNativeTag = true;
185
175
  }
186
176
  return nativeTag;
187
177
  }
@@ -192,10 +182,6 @@ export default class AnimatedNode {
192
182
  );
193
183
  }
194
184
 
195
- toJSON(): any {
196
- return this.__getValue();
197
- }
198
-
199
185
  __getPlatformConfig(): ?PlatformConfig {
200
186
  return this._platformConfig;
201
187
  }
@@ -203,4 +189,12 @@ export default class AnimatedNode {
203
189
  __setPlatformConfig(platformConfig: ?PlatformConfig) {
204
190
  this._platformConfig = platformConfig;
205
191
  }
192
+
193
+ /**
194
+ * NOTE: This is intended to prevent `JSON.stringify` from throwing "cyclic
195
+ * structure" errors in React DevTools. Avoid depending on this!
196
+ */
197
+ toJSON(): mixed {
198
+ return this.__getValue();
199
+ }
206
200
  }