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
@@ -8,21 +8,22 @@
8
8
  * @format
9
9
  */
10
10
 
11
- 'use strict';
12
-
13
11
  import type {EventSubscription} from '../EventEmitter/NativeEventEmitter';
12
+ import type {AnimatedPropsAllowlist} from './nodes/AnimatedProps';
14
13
 
14
+ import NativeAnimatedHelper from '../../src/private/animated/NativeAnimatedHelper';
15
+ import {useAnimatedPropsMemo} from '../../src/private/animated/useAnimatedPropsMemo';
15
16
  import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNativeFeatureFlags';
16
17
  import {isPublicInstance as isFabricPublicInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils';
17
18
  import useRefEffect from '../Utilities/useRefEffect';
18
19
  import {AnimatedEvent} from './AnimatedEvent';
19
- import NativeAnimatedHelper from '../../src/private/animated/NativeAnimatedHelper';
20
20
  import AnimatedNode from './nodes/AnimatedNode';
21
21
  import AnimatedProps from './nodes/AnimatedProps';
22
22
  import AnimatedValue from './nodes/AnimatedValue';
23
23
  import {
24
24
  useCallback,
25
25
  useEffect,
26
+ useInsertionEffect,
26
27
  useLayoutEffect,
27
28
  useMemo,
28
29
  useReducer,
@@ -36,34 +37,46 @@ type ReducedProps<TProps> = {
36
37
  };
37
38
  type CallbackRef<T> = T => mixed;
38
39
 
40
+ type UpdateCallback = () => void;
41
+
39
42
  type AnimatedValueListeners = Array<{
40
43
  propValue: AnimatedValue,
41
44
  listenerId: string,
42
45
  }>;
43
46
 
47
+ const useMemoOrAnimatedPropsMemo =
48
+ ReactNativeFeatureFlags.enableAnimatedPropsMemo()
49
+ ? useAnimatedPropsMemo
50
+ : useMemo;
51
+
44
52
  export default function useAnimatedProps<TProps: {...}, TInstance>(
45
53
  props: TProps,
54
+ allowlist?: ?AnimatedPropsAllowlist,
46
55
  ): [ReducedProps<TProps>, CallbackRef<TInstance | null>] {
47
56
  const [, scheduleUpdate] = useReducer<number, void>(count => count + 1, 0);
48
- const onUpdateRef = useRef<?() => void>(null);
57
+ const onUpdateRef = useRef<UpdateCallback | null>(null);
49
58
  const timerRef = useRef<TimeoutID | null>(null);
50
59
 
51
- // TODO: Only invalidate `node` if animated props or `style` change. In the
52
- // previous implementation, we permitted `style` to override props with the
53
- // same name property name as styles, so we can probably continue doing that.
54
- // The ordering of other props *should* not matter.
55
- const node = useMemo(
56
- () => new AnimatedProps(props, () => onUpdateRef.current?.()),
57
- [props],
60
+ const allowlistIfEnabled = ReactNativeFeatureFlags.enableAnimatedAllowlist()
61
+ ? allowlist
62
+ : null;
63
+
64
+ const node = useMemoOrAnimatedPropsMemo(
65
+ () =>
66
+ new AnimatedProps(
67
+ props,
68
+ () => onUpdateRef.current?.(),
69
+ allowlistIfEnabled,
70
+ ),
71
+ [allowlistIfEnabled, props],
58
72
  );
73
+
59
74
  const useNativePropsInFabric =
60
75
  ReactNativeFeatureFlags.shouldUseSetNativePropsInFabric();
61
- const useSetNativePropsInNativeAnimationsInFabric =
62
- ReactNativeFeatureFlags.shouldUseSetNativePropsInNativeAnimationsInFabric();
63
76
 
64
77
  const useAnimatedPropsLifecycle =
65
- ReactNativeFeatureFlags.usePassiveEffectsForAnimations()
66
- ? useAnimatedPropsLifecycle_passiveEffects
78
+ ReactNativeFeatureFlags.useInsertionEffectsForAnimations()
79
+ ? useAnimatedPropsLifecycle_insertionEffects
67
80
  : useAnimatedPropsLifecycle_layoutEffects;
68
81
 
69
82
  useAnimatedPropsLifecycle(node);
@@ -104,12 +117,7 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
104
117
  if (isFabricNode) {
105
118
  // Call `scheduleUpdate` to synchronise Fiber and Shadow tree.
106
119
  // Must not be called in Paper.
107
- if (useSetNativePropsInNativeAnimationsInFabric) {
108
- // $FlowFixMe[incompatible-use]
109
- instance.setNativeProps(node.__getAnimatedValue());
110
- } else {
111
- scheduleUpdate();
112
- }
120
+ scheduleUpdate();
113
121
  }
114
122
  return;
115
123
  }
@@ -186,23 +194,23 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
186
194
  }
187
195
  };
188
196
  },
189
- [
190
- node,
191
- useNativePropsInFabric,
192
- useSetNativePropsInNativeAnimationsInFabric,
193
- props,
194
- ],
197
+ [node, useNativePropsInFabric, props],
195
198
  );
196
199
  const callbackRef = useRefEffect<TInstance>(refEffect);
197
200
 
198
- return [reduceAnimatedProps<TProps>(node), callbackRef];
201
+ return [reduceAnimatedProps<TProps>(node, props), callbackRef];
199
202
  }
200
203
 
201
- function reduceAnimatedProps<TProps>(node: AnimatedNode): ReducedProps<TProps> {
204
+ function reduceAnimatedProps<TProps>(
205
+ node: AnimatedProps,
206
+ props: TProps,
207
+ ): ReducedProps<TProps> {
202
208
  // Force `collapsable` to be false so that the native view is not flattened.
203
209
  // Flattened views cannot be accurately referenced by the native driver.
204
210
  return {
205
- ...node.__getValue(),
211
+ ...(ReactNativeFeatureFlags.enableAnimatedPropsMemo()
212
+ ? node.__getValueWithStaticProps(props)
213
+ : node.__getValue()),
206
214
  collapsable: false,
207
215
  };
208
216
  }
@@ -301,10 +309,8 @@ function useAnimatedPropsLifecycle_layoutEffects(node: AnimatedProps): void {
301
309
  * uses reference counting to determine when to recursively detach its children
302
310
  * nodes. So in order to optimize this, we avoid detaching until the next attach
303
311
  * unless we are unmounting.
304
- *
305
- * NOTE: unlike `useAnimatedPropsLifecycle_layoutEffects`, this version uses passive effects to setup animation graph.
306
312
  */
307
- function useAnimatedPropsLifecycle_passiveEffects(node: AnimatedProps): void {
313
+ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
308
314
  const prevNodeRef = useRef<?AnimatedProps>(null);
309
315
  const isUnmountingRef = useRef<boolean>(false);
310
316
 
@@ -315,14 +321,14 @@ function useAnimatedPropsLifecycle_passiveEffects(node: AnimatedProps): void {
315
321
  NativeAnimatedHelper.API.flushQueue();
316
322
  });
317
323
 
318
- useEffect(() => {
324
+ useInsertionEffect(() => {
319
325
  isUnmountingRef.current = false;
320
326
  return () => {
321
327
  isUnmountingRef.current = true;
322
328
  };
323
329
  }, []);
324
330
 
325
- useEffect(() => {
331
+ useInsertionEffect(() => {
326
332
  node.__attach();
327
333
  let drivenAnimationEndedListener: ?EventSubscription = null;
328
334
 
@@ -7,8 +7,7 @@
7
7
  * @format
8
8
  */
9
9
 
10
- import type * as React from 'react';
11
- import {HostComponent} from '../../../types/public/ReactNativeTypes';
10
+ import {HostInstance} from '../../../types/public/ReactNativeTypes';
12
11
  import {EmitterSubscription} from '../../vendor/emitter/EventEmitter';
13
12
 
14
13
  type AccessibilityChangeEventName =
@@ -17,6 +16,8 @@ type AccessibilityChangeEventName =
17
16
  | 'grayscaleChanged' // iOS-only Event
18
17
  | 'invertColorsChanged' // iOS-only Event
19
18
  | 'reduceMotionChanged'
19
+ | 'highTextContrastChanged' // Android-only Event
20
+ | 'darkerSystemColorsChanged' // iOS-only Event
20
21
  | 'screenReaderChanged'
21
22
  | 'reduceTransparencyChanged'; // iOS-only Event
22
23
 
@@ -69,6 +70,21 @@ export interface AccessibilityInfoStatic {
69
70
  */
70
71
  isReduceMotionEnabled: () => Promise<boolean>;
71
72
 
73
+ /**
74
+ *
75
+ * Query whether high text contrast is currently enabled.
76
+ *
77
+ * @platform android
78
+ */
79
+ isHighTextContrastEnabled: () => Promise<boolean>;
80
+
81
+ /**
82
+ * Query whether darker system colors is currently enabled.
83
+ *
84
+ * @platform ios
85
+ */
86
+ isDarkerSystemColorsEnabled: () => Promise<boolean>;
87
+
72
88
  /**
73
89
  * Query whether reduce motion and prefer cross-fade transitions settings are currently enabled.
74
90
  *
@@ -148,7 +164,7 @@ export interface AccessibilityInfoStatic {
148
164
  */
149
165
  getRecommendedTimeoutMillis: (originalTimeout: number) => Promise<number>;
150
166
  sendAccessibilityEvent: (
151
- handle: React.ElementRef<HostComponent<unknown>>,
167
+ handle: HostInstance,
152
168
  eventType: AccessibilityEventTypes,
153
169
  ) => void;
154
170
  }
@@ -8,9 +8,8 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';
11
+ import type {HostInstance} from '../../Renderer/shims/ReactNativeTypes';
12
12
  import type {EventSubscription} from '../../vendor/emitter/EventEmitter';
13
- import type {ElementRef} from 'react';
14
13
 
15
14
  import RCTDeviceEventEmitter from '../../EventEmitter/RCTDeviceEventEmitter';
16
15
  import {sendAccessibilityEvent} from '../../ReactNative/RendererProxy';
@@ -22,6 +21,7 @@ import NativeAccessibilityManagerIOS from './NativeAccessibilityManager';
22
21
  // Events that are only supported on Android.
23
22
  type AccessibilityEventDefinitionsAndroid = {
24
23
  accessibilityServiceChanged: [boolean],
24
+ highTextContrastChanged: [boolean],
25
25
  };
26
26
 
27
27
  // Events that are only supported on iOS.
@@ -31,6 +31,7 @@ type AccessibilityEventDefinitionsIOS = {
31
31
  grayscaleChanged: [boolean],
32
32
  invertColorsChanged: [boolean],
33
33
  reduceTransparencyChanged: [boolean],
34
+ darkerSystemColorsChanged: [boolean],
34
35
  };
35
36
 
36
37
  type AccessibilityEventDefinitions = {
@@ -51,8 +52,11 @@ const EventNames: Map<
51
52
  ? new Map([
52
53
  ['change', 'touchExplorationDidChange'],
53
54
  ['reduceMotionChanged', 'reduceMotionDidChange'],
55
+ ['highTextContrastChanged', 'highTextContrastDidChange'],
54
56
  ['screenReaderChanged', 'touchExplorationDidChange'],
55
57
  ['accessibilityServiceChanged', 'accessibilityServiceDidChange'],
58
+ ['invertColorsChanged', 'invertColorDidChange'],
59
+ ['grayscaleChanged', 'grayscaleModeDidChange'],
56
60
  ])
57
61
  : new Map([
58
62
  ['announcementFinished', 'announcementFinished'],
@@ -63,6 +67,7 @@ const EventNames: Map<
63
67
  ['reduceMotionChanged', 'reduceMotionChanged'],
64
68
  ['reduceTransparencyChanged', 'reduceTransparencyChanged'],
65
69
  ['screenReaderChanged', 'screenReaderChanged'],
70
+ ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'],
66
71
  ]);
67
72
 
68
73
  /**
@@ -110,7 +115,13 @@ const AccessibilityInfo = {
110
115
  */
111
116
  isGrayscaleEnabled(): Promise<boolean> {
112
117
  if (Platform.OS === 'android') {
113
- return Promise.resolve(false);
118
+ return new Promise((resolve, reject) => {
119
+ if (NativeAccessibilityInfoAndroid?.isGrayscaleEnabled != null) {
120
+ NativeAccessibilityInfoAndroid.isGrayscaleEnabled(resolve);
121
+ } else {
122
+ reject(null);
123
+ }
124
+ });
114
125
  } else {
115
126
  return new Promise((resolve, reject) => {
116
127
  if (NativeAccessibilityManagerIOS != null) {
@@ -135,7 +146,13 @@ const AccessibilityInfo = {
135
146
  */
136
147
  isInvertColorsEnabled(): Promise<boolean> {
137
148
  if (Platform.OS === 'android') {
138
- return Promise.resolve(false);
149
+ return new Promise((resolve, reject) => {
150
+ if (NativeAccessibilityInfoAndroid?.isInvertColorsEnabled != null) {
151
+ NativeAccessibilityInfoAndroid.isInvertColorsEnabled(resolve);
152
+ } else {
153
+ reject(null);
154
+ }
155
+ });
139
156
  } else {
140
157
  return new Promise((resolve, reject) => {
141
158
  if (NativeAccessibilityManagerIOS != null) {
@@ -179,6 +196,52 @@ const AccessibilityInfo = {
179
196
  });
180
197
  },
181
198
 
199
+ /**
200
+ * Query whether high text contrast is currently enabled. Android only.
201
+ *
202
+ * Returns a promise which resolves to a boolean.
203
+ * The result is `true` when high text contrast is enabled and `false` otherwise.
204
+ */
205
+ isHighTextContrastEnabled(): Promise<boolean> {
206
+ return new Promise((resolve, reject) => {
207
+ if (Platform.OS === 'android') {
208
+ if (NativeAccessibilityInfoAndroid?.isHighTextContrastEnabled != null) {
209
+ NativeAccessibilityInfoAndroid.isHighTextContrastEnabled(resolve);
210
+ } else {
211
+ reject(null);
212
+ }
213
+ } else {
214
+ return Promise.resolve(false);
215
+ }
216
+ });
217
+ },
218
+
219
+ /**
220
+ * Query whether dark system colors is currently enabled. iOS only.
221
+ *
222
+ * Returns a promise which resolves to a boolean.
223
+ * The result is `true` when dark system colors is enabled and `false` otherwise.
224
+ */
225
+ isDarkerSystemColorsEnabled(): Promise<boolean> {
226
+ return new Promise((resolve, reject) => {
227
+ if (Platform.OS === 'android') {
228
+ return Promise.resolve(false);
229
+ } else {
230
+ if (
231
+ NativeAccessibilityManagerIOS?.getCurrentDarkerSystemColorsState !=
232
+ null
233
+ ) {
234
+ NativeAccessibilityManagerIOS.getCurrentDarkerSystemColorsState(
235
+ resolve,
236
+ reject,
237
+ );
238
+ } else {
239
+ reject(null);
240
+ }
241
+ }
242
+ });
243
+ },
244
+
182
245
  /**
183
246
  * Query whether reduce motion and prefer cross-fade transitions settings are currently enabled.
184
247
  *
@@ -319,6 +382,15 @@ const AccessibilityInfo = {
319
382
  * - `announcement`: The string announced by the screen reader.
320
383
  * - `success`: A boolean indicating whether the announcement was
321
384
  * successfully made.
385
+ * - `darkerSystemColorsChanged`: iOS-only event. Fires when the state of the dark system colors
386
+ * toggle changes. The argument to the event handler is a boolean. The boolean is `true` when
387
+ * dark system colors is enabled and `false` otherwise.
388
+ *
389
+ * These events are only supported on Android:
390
+ *
391
+ * - `highTextContrastChanged`: Android-only event. Fires when the state of the high text contrast
392
+ * toggle changes. The argument to the event handler is a boolean. The boolean is `true` when
393
+ * high text contrast is enabled and `false` otherwise.
322
394
  *
323
395
  * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener
324
396
  */
@@ -347,7 +419,7 @@ const AccessibilityInfo = {
347
419
  * Send a named accessibility event to a HostComponent.
348
420
  */
349
421
  sendAccessibilityEvent(
350
- handle: ElementRef<HostComponent<mixed>>,
422
+ handle: HostInstance,
351
423
  eventType: AccessibilityEventTypes,
352
424
  ) {
353
425
  // iOS only supports 'focus' event types
@@ -8,20 +8,21 @@
8
8
  * @format
9
9
  */
10
10
 
11
- import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes';
11
+ import type {HostInstance} from '../../Renderer/shims/ReactNativeTypes';
12
12
  import type {EventSubscription} from '../../vendor/emitter/EventEmitter';
13
- import type {ElementRef} from 'react';
14
13
 
15
14
  import RCTDeviceEventEmitter from '../../EventEmitter/RCTDeviceEventEmitter';
16
15
  import {sendAccessibilityEvent} from '../../ReactNative/RendererProxy';
17
16
  import Platform from '../../Utilities/Platform';
18
17
  import legacySendAccessibilityEvent from './legacySendAccessibilityEvent';
18
+ import NativeAccessibilityInfoAndroid from './NativeAccessibilityInfo';
19
19
  import NativeAccessibilityInfo from './NativeAccessibilityInfo';
20
20
  import NativeAccessibilityManagerIOS from './NativeAccessibilityManager';
21
21
 
22
22
  // Events that are only supported on Android.
23
23
  type AccessibilityEventDefinitionsAndroid = {
24
24
  accessibilityServiceChanged: [boolean],
25
+ highTextContrastChanged: [boolean],
25
26
  };
26
27
 
27
28
  // Events that are only supported on iOS.
@@ -31,6 +32,7 @@ type AccessibilityEventDefinitionsIOS = {
31
32
  grayscaleChanged: [boolean],
32
33
  invertColorsChanged: [boolean],
33
34
  reduceTransparencyChanged: [boolean],
35
+ darkerSystemColorsChanged: [boolean],
34
36
  };
35
37
 
36
38
  type AccessibilityEventDefinitions = {
@@ -51,8 +53,11 @@ const EventNames: Map<
51
53
  ? new Map([
52
54
  ['change', 'touchExplorationDidChange'],
53
55
  ['reduceMotionChanged', 'reduceMotionDidChange'],
56
+ ['highTextContrastChanged', 'highTextContrastDidChange'],
54
57
  ['screenReaderChanged', 'touchExplorationDidChange'],
55
58
  ['accessibilityServiceChanged', 'accessibilityServiceDidChange'],
59
+ ['invertColorsChanged', 'invertColorDidChange'],
60
+ ['grayscaleChanged', 'grayscaleModeDidChange'],
56
61
  ])
57
62
  : Platform.OS === 'windows'
58
63
  ? new Map([
@@ -69,6 +74,7 @@ const EventNames: Map<
69
74
  ['reduceMotionChanged', 'reduceMotionChanged'],
70
75
  ['reduceTransparencyChanged', 'reduceTransparencyChanged'],
71
76
  ['screenReaderChanged', 'screenReaderChanged'],
77
+ ['darkerSystemColorsChanged', 'darkerSystemColorsChanged'],
72
78
  ]);
73
79
 
74
80
  /**
@@ -115,7 +121,15 @@ const AccessibilityInfo = {
115
121
  * See https://reactnative.dev/docs/accessibilityinfo#isGrayscaleEnabled
116
122
  */
117
123
  isGrayscaleEnabled(): Promise<boolean> {
118
- if (Platform.OS === 'android' || Platform.OS === 'windows') {
124
+ if (Platform.OS === 'android') {
125
+ return new Promise((resolve, reject) => {
126
+ if (NativeAccessibilityInfoAndroid?.isGrayscaleEnabled != null) {
127
+ NativeAccessibilityInfoAndroid.isGrayscaleEnabled(resolve);
128
+ } else {
129
+ reject(null);
130
+ }
131
+ });
132
+ } else if (Platform.OS === 'windows') {
119
133
  return Promise.resolve(false);
120
134
  } else {
121
135
  return new Promise((resolve, reject) => {
@@ -140,7 +154,15 @@ const AccessibilityInfo = {
140
154
  * See https://reactnative.dev/docs/accessibilityinfo#isInvertColorsEnabled
141
155
  */
142
156
  isInvertColorsEnabled(): Promise<boolean> {
143
- if (Platform.OS === 'android' || Platform.OS === 'windows') {
157
+ if (Platform.OS === 'android') {
158
+ return new Promise((resolve, reject) => {
159
+ if (NativeAccessibilityInfoAndroid?.isInvertColorsEnabled != null) {
160
+ NativeAccessibilityInfoAndroid.isInvertColorsEnabled(resolve);
161
+ } else {
162
+ reject(null);
163
+ }
164
+ });
165
+ } else if (Platform.OS === 'windows') {
144
166
  return Promise.resolve(false);
145
167
  } else {
146
168
  return new Promise((resolve, reject) => {
@@ -185,6 +207,52 @@ const AccessibilityInfo = {
185
207
  });
186
208
  },
187
209
 
210
+ /**
211
+ * Query whether high text contrast is currently enabled. Android only.
212
+ *
213
+ * Returns a promise which resolves to a boolean.
214
+ * The result is `true` when high text contrast is enabled and `false` otherwise.
215
+ */
216
+ isHighTextContrastEnabled(): Promise<boolean> {
217
+ return new Promise((resolve, reject) => {
218
+ if (Platform.OS === 'android') {
219
+ if (NativeAccessibilityInfo?.isHighTextContrastEnabled != null) {
220
+ NativeAccessibilityInfo.isHighTextContrastEnabled(resolve);
221
+ } else {
222
+ reject(null);
223
+ }
224
+ } else {
225
+ return Promise.resolve(false);
226
+ }
227
+ });
228
+ },
229
+
230
+ /**
231
+ * Query whether dark system colors is currently enabled. iOS only.
232
+ *
233
+ * Returns a promise which resolves to a boolean.
234
+ * The result is `true` when dark system colors is enabled and `false` otherwise.
235
+ */
236
+ isDarkerSystemColorsEnabled(): Promise<boolean> {
237
+ return new Promise((resolve, reject) => {
238
+ if (Platform.OS === 'android') {
239
+ return Promise.resolve(false);
240
+ } else {
241
+ if (
242
+ NativeAccessibilityManagerIOS?.getCurrentDarkerSystemColorsState !=
243
+ null
244
+ ) {
245
+ NativeAccessibilityManagerIOS.getCurrentDarkerSystemColorsState(
246
+ resolve,
247
+ reject,
248
+ );
249
+ } else {
250
+ reject(null);
251
+ }
252
+ }
253
+ });
254
+ },
255
+
188
256
  /**
189
257
  * Query whether reduce motion and prefer cross-fade transitions settings are currently enabled.
190
258
  *
@@ -325,6 +393,15 @@ const AccessibilityInfo = {
325
393
  * - `announcement`: The string announced by the screen reader.
326
394
  * - `success`: A boolean indicating whether the announcement was
327
395
  * successfully made.
396
+ * - `darkerSystemColorsChanged`: iOS-only event. Fires when the state of the dark system colors
397
+ * toggle changes. The argument to the event handler is a boolean. The boolean is `true` when
398
+ * dark system colors is enabled and `false` otherwise.
399
+ *
400
+ * These events are only supported on Android:
401
+ *
402
+ * - `highTextContrastChanged`: Android-only event. Fires when the state of the high text contrast
403
+ * toggle changes. The argument to the event handler is a boolean. The boolean is `true` when
404
+ * high text contrast is enabled and `false` otherwise.
328
405
  *
329
406
  * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener
330
407
  */
@@ -353,7 +430,7 @@ const AccessibilityInfo = {
353
430
  * Send a named accessibility event to a HostComponent.
354
431
  */
355
432
  sendAccessibilityEvent(
356
- handle: ElementRef<HostComponent<mixed>>,
433
+ handle: HostInstance,
357
434
  eventType: AccessibilityEventTypes,
358
435
  ) {
359
436
  // iOS only supports 'focus' event types
@@ -153,10 +153,10 @@ const ActivityIndicator = (
153
153
  ```
154
154
  */
155
155
 
156
- const ActivityIndicatorWithRef: React.AbstractComponent<
157
- Props,
158
- HostComponent<mixed>,
159
- > = React.forwardRef(ActivityIndicator);
156
+ const ActivityIndicatorWithRef: component(
157
+ ref: React.RefSetter<HostComponent<empty>>,
158
+ ...props: Props
159
+ ) = React.forwardRef(ActivityIndicator);
160
160
  ActivityIndicatorWithRef.displayName = 'ActivityIndicator';
161
161
 
162
162
  const styles = StyleSheet.create({
@@ -283,10 +283,12 @@ type ButtonProps = $ReadOnly<{|
283
283
  const Touchable: typeof TouchableNativeFeedback | typeof TouchableOpacity =
284
284
  Platform.OS === 'android' ? TouchableNativeFeedback : TouchableOpacity;
285
285
 
286
- const Button: React.AbstractComponent<
287
- ButtonProps,
288
- React.ElementRef<typeof Touchable>,
289
- > = React.forwardRef((props: ButtonProps, ref) => {
286
+ type ButtonRef = React.ElementRef<typeof Touchable>;
287
+
288
+ const Button: component(
289
+ ref: React.RefSetter<ButtonRef>,
290
+ ...props: ButtonProps
291
+ ) = React.forwardRef((props: ButtonProps, ref: React.RefSetter<ButtonRef>) => {
290
292
  const {
291
293
  accessibilityLabel,
292
294
  accessibilityState,
@@ -379,6 +381,9 @@ const Button: React.AbstractComponent<
379
381
  disabled={disabled}
380
382
  onPress={onPress}
381
383
  touchSoundDisabled={touchSoundDisabled}
384
+ // $FlowFixMe[incompatible-exact]
385
+ // $FlowFixMe[prop-missing]
386
+ // $FlowFixMe[incompatible-type-arg]
382
387
  ref={ref}>
383
388
  <View style={buttonStyles}>
384
389
  <Text style={textStyles} disabled={disabled}>
@@ -23,9 +23,9 @@ import Text from '../Text/Text';
23
23
  // [Windows
24
24
  // import TouchableNativeFeedback from './Touchable/TouchableNativeFeedback';
25
25
  // import TouchableOpacity from './Touchable/TouchableOpacity';
26
+ // Windows]
26
27
  import TouchableHighlight from './Touchable/TouchableHighlight';
27
28
  import {PlatformColor} from '../StyleSheet/PlatformColorValueTypes';
28
- // Windows]
29
29
  import Platform from '../Utilities/Platform';
30
30
  import View from './View/View';
31
31
  import invariant from 'invariant';
@@ -164,6 +164,8 @@ type ButtonProps = $ReadOnly<{|
164
164
  'aria-disabled'?: ?boolean,
165
165
  'aria-expanded'?: ?boolean,
166
166
  'aria-selected'?: ?boolean,
167
+ 'aria-multiselectable'?: ?boolean, // Windows
168
+ 'aria-required'?: ?boolean, // Windows
167
169
 
168
170
  /**
169
171
  * [Android] Controlling if a view fires accessibility events and if it is reported to accessibility services.
@@ -290,10 +292,12 @@ type ButtonProps = $ReadOnly<{|
290
292
  ```
291
293
  */
292
294
 
293
- const Button: React.AbstractComponent<
294
- ButtonProps,
295
- React.ElementRef<typeof TouchableHighlight>,
296
- > = React.forwardRef((props: ButtonProps, ref) => {
295
+ type ButtonRef = React.ElementRef<typeof TouchableHighlight>;
296
+
297
+ const Button: component(
298
+ ref: React.RefSetter<ButtonRef>,
299
+ ...props: ButtonProps
300
+ ) = React.forwardRef((props: ButtonProps, ref: React.RefSetter<ButtonRef>) => {
297
301
  // Windows
298
302
  // [Windows
299
303
  const [hover, setHover] = React.useState(false);
@@ -308,6 +312,8 @@ const Button: React.AbstractComponent<
308
312
  'aria-expanded': ariaExpanded,
309
313
  'aria-label': ariaLabel,
310
314
  'aria-selected': ariaSelected,
315
+ 'aria-multiselectable': ariaMultiselectable, // Windows
316
+ 'aria-required': ariaRequired, // Windows
311
317
  importantForAccessibility,
312
318
  color,
313
319
  onPress,
@@ -343,6 +349,8 @@ const Button: React.AbstractComponent<
343
349
  disabled: ariaDisabled ?? accessibilityState?.disabled,
344
350
  expanded: ariaExpanded ?? accessibilityState?.expanded,
345
351
  selected: ariaSelected ?? accessibilityState?.selected,
352
+ multiselectable: ariaMultiselectable ?? accessibilityState?.multiselectable, // Windows
353
+ required: ariaRequired ?? accessibilityState?.required, // Windows
346
354
  };
347
355
 
348
356
  const disabled =
@@ -418,6 +426,9 @@ const Button: React.AbstractComponent<
418
426
  onMouseLeave={() => {
419
427
  if (!disabled) setHover(false);
420
428
  }}
429
+ // $FlowFixMe[incompatible-exact]
430
+ // $FlowFixMe[prop-missing]
431
+ // $FlowFixMe[incompatible-type-arg]
421
432
  ref={ref}>
422
433
  <View
423
434
  style={
@@ -489,6 +500,9 @@ const Button: React.AbstractComponent<
489
500
  disabled={disabled}
490
501
  onPress={onPress}
491
502
  touchSoundDisabled={touchSoundDisabled}
503
+ // $FlowFixMe[incompatible-exact]
504
+ // $FlowFixMe[prop-missing]
505
+ // $FlowFixMe[incompatible-type-arg]
492
506
  ref={ref}>
493
507
  <View style={buttonStyles}>
494
508
  <Text style={textStyles} disabled={disabled}>
@@ -5,8 +5,10 @@
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
7
  * @format
8
+ * @flow strict-local
8
9
  */
9
10
 
10
11
  'use strict';
11
12
 
12
- module.exports = require('../UnimplementedViews/UnimplementedView');
13
+ module.exports =
14
+ require('../UnimplementedViews/UnimplementedView') as $FlowFixMe;
@@ -29,10 +29,11 @@ export type Props = $ReadOnly<{|
29
29
  * ability to be rendered with a specific color
30
30
  */
31
31
 
32
+ // $FlowFixMe[prop-missing]
32
33
  export const Glyph: React.AbstractComponent<
33
34
  Props,
34
35
  React.ElementRef<typeof GlyphNativeComponent>,
35
- > = React.forwardRef(function Glyph(props, forwardedRef): React.Node {
36
+ > = React.forwardRef(function Glyph(props: Props, forwardedRef): React.Node {
36
37
  const nativeSwitchRef = React.useRef<React.ElementRef<
37
38
  typeof GlyphNativeComponent,
38
39
  > | null>(null);