react-native-windows 0.73.11 → 0.74.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 (771) hide show
  1. package/.flowconfig +12 -7
  2. package/Chakra/ChakraUtils.cpp +5 -10
  3. package/Chakra/ChakraUtils.h +2 -2
  4. package/Common/packages.lock.json +3 -3
  5. package/Directory.Build.props +5 -5
  6. package/Folly/Folly.vcxproj +2 -2
  7. package/Folly/Folly.vcxproj.filters +7 -0
  8. package/Folly/TEMP_UntilFollyUpdate/dynamic-inl.h +22 -1
  9. package/Folly/TEMP_UntilFollyUpdate/lang/SafeAssert.h +4 -1
  10. package/Folly/cgmanifest.json +1 -1
  11. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +6 -0
  12. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +6 -0
  13. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +4 -45
  14. package/Libraries/Alert/Alert.windows.js +2 -3
  15. package/Libraries/Alert/NativeAlertManager.js +4 -26
  16. package/Libraries/Animated/Animated.js +2 -2
  17. package/Libraries/Animated/AnimatedPlatformConfig.js +1 -1
  18. package/Libraries/Animated/NativeAnimatedHelper.js +14 -11
  19. package/Libraries/Animated/NativeAnimatedModule.js +4 -68
  20. package/Libraries/Animated/NativeAnimatedTurboModule.js +4 -69
  21. package/Libraries/Animated/animations/Animation.js +6 -22
  22. package/Libraries/Animated/components/AnimatedFlatList.js +1 -16
  23. package/Libraries/Animated/components/AnimatedScrollView.js +36 -31
  24. package/Libraries/Animated/components/AnimatedSectionList.js +1 -20
  25. package/Libraries/Animated/createAnimatedComponent.js +45 -40
  26. package/Libraries/Animated/nodes/AnimatedStyle.js +1 -1
  27. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +1 -1
  28. package/Libraries/Animated/useAnimatedProps.js +21 -1
  29. package/Libraries/AppState/NativeAppState.js +4 -24
  30. package/Libraries/AppTheme/NativeAppTheme.js +4 -25
  31. package/Libraries/BatchedBridge/NativeModules.js +1 -1
  32. package/Libraries/Blob/Blob.js +1 -4
  33. package/Libraries/Blob/BlobManager.js +6 -8
  34. package/Libraries/Blob/File.js +1 -1
  35. package/Libraries/Blob/NativeBlobModule.js +4 -50
  36. package/Libraries/Blob/NativeFileReaderModule.js +4 -13
  37. package/Libraries/BugReporting/NativeBugReporting.js +4 -12
  38. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +3 -23
  39. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +4 -57
  40. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +3 -2
  41. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.windows.js +3 -2
  42. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +9 -40
  43. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +3 -43
  44. package/Libraries/Components/Button.js +103 -107
  45. package/Libraries/Components/Button.windows.js +199 -206
  46. package/Libraries/Components/Clipboard/NativeClipboard.js +3 -11
  47. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +3 -114
  48. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +1 -5
  49. package/Libraries/Components/Keyboard/KeyboardExt.d.ts +8 -8
  50. package/Libraries/Components/Keyboard/KeyboardExt.js +27 -27
  51. package/Libraries/Components/Keyboard/KeyboardExt.js.map +1 -1
  52. package/Libraries/Components/Keyboard/KeyboardExtProps.d.ts +17 -17
  53. package/Libraries/Components/Keyboard/KeyboardExtProps.js +7 -7
  54. package/Libraries/Components/Keyboard/KeyboardExtProps.js.map +1 -1
  55. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +3 -10
  56. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.android.js +69 -0
  57. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.d.ts +24 -0
  58. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroid.js +33 -0
  59. package/Libraries/Components/PopupMenuAndroid/PopupMenuAndroidNativeComponent.js +13 -0
  60. package/Libraries/Components/Pressable/Pressable.js +1 -1
  61. package/Libraries/Components/Pressable/Pressable.windows.js +1 -2
  62. package/Libraries/Components/Pressable/useAndroidRippleForView.js +5 -4
  63. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +4 -24
  64. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +3 -64
  65. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +3 -61
  66. package/Libraries/Components/RefreshControl/RefreshControl.js +1 -1
  67. package/Libraries/Components/RefreshControl/RefreshControl.windows.js +1 -1
  68. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +3 -15
  69. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +3 -16
  70. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +1 -1
  71. package/Libraries/Components/ScrollView/ScrollView.d.ts +5 -6
  72. package/Libraries/Components/ScrollView/ScrollView.js +12 -38
  73. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -2
  74. package/Libraries/Components/Sound/NativeSoundManager.js +3 -12
  75. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +3 -58
  76. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +3 -79
  77. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +4 -53
  78. package/Libraries/Components/Switch/Switch.js +0 -2
  79. package/Libraries/Components/Switch/Switch.windows.js +0 -2
  80. package/Libraries/Components/Switch/SwitchNativeComponent.js +4 -52
  81. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +8 -0
  82. package/Libraries/Components/TextInput/InputAccessoryView.js +18 -20
  83. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +4 -17
  84. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -6
  85. package/Libraries/Components/TextInput/TextInput.d.ts +16 -0
  86. package/Libraries/Components/TextInput/TextInput.flow.js +16 -0
  87. package/Libraries/Components/TextInput/TextInput.js +65 -32
  88. package/Libraries/Components/TextInput/TextInput.windows.js +87 -38
  89. package/Libraries/Components/TextInput/WindowsTextInputNativeComponent.js +773 -9
  90. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +3 -28
  91. package/Libraries/Components/Touchable/PooledClass.js +1 -1
  92. package/Libraries/Components/Touchable/Touchable.js +2 -3
  93. package/Libraries/Components/Touchable/Touchable.windows.js +2 -3
  94. package/Libraries/Components/Touchable/TouchableHighlight.js +4 -4
  95. package/Libraries/Components/Touchable/TouchableHighlight.windows.js +4 -4
  96. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +2 -1
  97. package/Libraries/Components/Touchable/TouchableOpacity.js +5 -2
  98. package/Libraries/Components/Touchable/TouchableOpacity.windows.js +5 -2
  99. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +3 -16
  100. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -1
  101. package/Libraries/Components/View/View.js +0 -11
  102. package/Libraries/Components/View/View.windows.js +19 -18
  103. package/Libraries/Components/View/ViewAccessibility.d.ts +33 -17
  104. package/Libraries/Components/View/ViewPropTypes.d.ts +28 -17
  105. package/Libraries/Components/View/ViewPropTypes.js +36 -36
  106. package/Libraries/Components/View/ViewPropTypes.windows.js +36 -36
  107. package/Libraries/Core/InitializeCore.js +1 -1
  108. package/Libraries/Core/NativeExceptionsManager.js +3 -93
  109. package/Libraries/Core/ReactNativeVersion.js +12 -6
  110. package/Libraries/Core/ReactNativeVersionCheck.js +6 -6
  111. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +3 -18
  112. package/Libraries/Core/Timers/NativeTiming.js +3 -16
  113. package/Libraries/Core/registerCallableModule.js +42 -0
  114. package/Libraries/Core/setUpPerformance.js +2 -2
  115. package/Libraries/Core/setUpPerformanceObserver.js +3 -1
  116. package/Libraries/Debugging/DebuggingOverlay.js +111 -0
  117. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +13 -0
  118. package/Libraries/Debugging/DebuggingOverlayRegistry.js +513 -0
  119. package/Libraries/Debugging/useSubscribeToDebuggingOverlayRegistry.js +32 -0
  120. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +3 -14
  121. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +3 -9
  122. package/Libraries/Image/AssetSourceResolver.js +5 -5
  123. package/Libraries/Image/AssetUtils.js +4 -5
  124. package/Libraries/Image/Image.android.js +146 -174
  125. package/Libraries/Image/Image.d.ts +1 -1
  126. package/Libraries/Image/Image.ios.js +53 -79
  127. package/Libraries/Image/Image.windows.js +53 -79
  128. package/Libraries/Image/ImageBackground.js +2 -2
  129. package/Libraries/Image/ImageInjection.js +76 -18
  130. package/Libraries/Image/ImageTypes.flow.js +71 -0
  131. package/Libraries/Image/ImageUtils.js +1 -1
  132. package/Libraries/Image/ImageViewNativeComponent.js +18 -0
  133. package/Libraries/Image/NativeImageEditor.js +3 -42
  134. package/Libraries/Image/NativeImageLoaderAndroid.js +4 -28
  135. package/Libraries/Image/NativeImageLoaderIOS.js +4 -28
  136. package/Libraries/Image/NativeImageStoreAndroid.js +3 -16
  137. package/Libraries/Image/NativeImageStoreIOS.js +3 -23
  138. package/Libraries/Image/resolveAssetSource.js +59 -26
  139. package/Libraries/Image/resolveAssetSource.windows.js +148 -0
  140. package/Libraries/Inspector/ElementProperties.js +26 -52
  141. package/Libraries/Inspector/Inspector.js +122 -186
  142. package/Libraries/Inspector/InspectorOverlay.js +21 -33
  143. package/Libraries/Inspector/InspectorPanel.js +3 -17
  144. package/Libraries/Inspector/ReactDevToolsOverlay.js +171 -0
  145. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +20 -8
  146. package/Libraries/Interaction/FrameRateLogger.js +8 -18
  147. package/Libraries/Interaction/NativeFrameRateLogger.js +4 -16
  148. package/Libraries/IntersectionObserver/IntersectionObserver.js +1 -1
  149. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +20 -19
  150. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +84 -6
  151. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +3 -31
  152. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +12 -2
  153. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -2
  154. package/Libraries/Linking/NativeIntentAndroid.js +3 -20
  155. package/Libraries/Linking/NativeLinkingManager.js +3 -17
  156. package/Libraries/Lists/FillRateHelper.js +1 -1
  157. package/Libraries/Lists/FlatList.d.ts +2 -2
  158. package/Libraries/Lists/FlatList.js +6 -1
  159. package/Libraries/Lists/FlatList.windows.js +717 -0
  160. package/Libraries/Lists/SectionList.d.ts +6 -1
  161. package/Libraries/Lists/ViewabilityHelper.js +1 -1
  162. package/Libraries/Lists/VirtualizeUtils.js +1 -1
  163. package/Libraries/Lists/VirtualizedList.js +1 -1
  164. package/Libraries/Lists/VirtualizedListContext.js +1 -1
  165. package/Libraries/Lists/VirtualizedSectionList.js +1 -1
  166. package/Libraries/LogBox/Data/parseLogBoxLog.js +1 -1
  167. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  168. package/Libraries/Modal/Modal.js +43 -11
  169. package/Libraries/Modal/NativeModalManager.js +3 -11
  170. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -129
  171. package/Libraries/MutationObserver/MutationObserver.js +1 -1
  172. package/Libraries/MutationObserver/MutationObserverManager.js +2 -2
  173. package/Libraries/MutationObserver/MutationRecord.js +12 -10
  174. package/Libraries/MutationObserver/NativeMutationObserver.js +3 -48
  175. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +1 -1
  176. package/Libraries/NativeComponent/BaseViewConfig.android.js +1 -0
  177. package/Libraries/NativeComponent/BaseViewConfig.windows.js +3 -0
  178. package/Libraries/NativeComponent/NativeComponentRegistry.js +1 -1
  179. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +3 -10
  180. package/Libraries/NativeModules/specs/NativeDevMenu.js +3 -13
  181. package/Libraries/NativeModules/specs/NativeDevSettings.js +3 -23
  182. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +3 -9
  183. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +3 -38
  184. package/Libraries/NativeModules/specs/NativeDialogManagerWindows.js +11 -0
  185. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -10
  186. package/Libraries/NativeModules/specs/NativeRedBox.js +4 -11
  187. package/Libraries/NativeModules/specs/NativeSourceCode.js +2 -25
  188. package/Libraries/Network/FormData.js +3 -1
  189. package/Libraries/Network/NativeNetworkingAndroid.js +4 -28
  190. package/Libraries/Network/NativeNetworkingIOS.js +4 -28
  191. package/Libraries/NewAppScreen/components/DebugInstructions.windows.js +4 -2
  192. package/Libraries/NewAppScreen/components/ReloadInstructions.windows.js +3 -1
  193. package/Libraries/Performance/NativeJSCSamplingProfiler.js +3 -9
  194. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +4 -68
  195. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -3
  196. package/Libraries/Pressability/Pressability.js +12 -2
  197. package/Libraries/Pressability/Pressability.windows.js +13 -3
  198. package/Libraries/Pressability/usePressability.js +7 -0
  199. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +4 -70
  200. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +45 -39
  201. package/Libraries/ReactNative/AppContainer-dev.js +192 -0
  202. package/Libraries/ReactNative/AppContainer-prod.js +53 -0
  203. package/Libraries/ReactNative/AppContainer.js +6 -149
  204. package/Libraries/ReactNative/AppRegistry.js +3 -1
  205. package/Libraries/ReactNative/BridgelessUIManager.js +375 -128
  206. package/Libraries/ReactNative/FabricUIManager.js +6 -0
  207. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +3 -10
  208. package/Libraries/ReactNative/NativeI18nManager.js +3 -18
  209. package/Libraries/ReactNative/NativeUIManager.js +4 -112
  210. package/Libraries/ReactNative/PaperUIManager.js +8 -7
  211. package/Libraries/ReactNative/PaperUIManager.windows.js +29 -8
  212. package/Libraries/ReactNative/ReactFabricInternals.js +1 -1
  213. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +24 -5
  214. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -45
  215. package/Libraries/ReactNative/RendererImplementation.js +11 -0
  216. package/Libraries/ReactNative/UIManager.d.ts +11 -34
  217. package/Libraries/ReactNative/UIManager.js +2 -23
  218. package/Libraries/ReactNative/UIManagerProperties.js +0 -2
  219. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +23 -1
  220. package/Libraries/ReactNative/getNativeComponentAttributes.js +5 -1
  221. package/Libraries/ReactNative/renderApplication.js +9 -6
  222. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +6 -1
  223. package/Libraries/Renderer/implementations/ReactFabric-dev.js +24771 -21123
  224. package/Libraries/Renderer/implementations/ReactFabric-prod.js +4160 -3109
  225. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4384 -3322
  226. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +25194 -21398
  227. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3763 -2636
  228. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4027 -2867
  229. package/Libraries/Renderer/shims/ReactNativeTypes.js +8 -9
  230. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +7 -12
  231. package/Libraries/Settings/NativeSettingsManager.js +4 -16
  232. package/Libraries/Share/NativeShareModule.js +3 -13
  233. package/Libraries/StyleSheet/PlatformColorValueTypes.windows.js +1 -1
  234. package/Libraries/StyleSheet/StyleSheet.d.ts +1 -20
  235. package/Libraries/StyleSheet/StyleSheet.js +5 -28
  236. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +47 -7
  237. package/Libraries/StyleSheet/StyleSheetTypes.js +16 -11
  238. package/Libraries/StyleSheet/flattenStyle.js +2 -2
  239. package/Libraries/StyleSheet/normalizeColor.js +1 -1
  240. package/Libraries/StyleSheet/processAspectRatio.js +1 -1
  241. package/Libraries/StyleSheet/processFontVariant.js +1 -1
  242. package/Libraries/Text/Text.js +0 -6
  243. package/Libraries/Text/Text.windows.js +0 -6
  244. package/Libraries/Text/TextAncestor.js +2 -3
  245. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +4 -41
  246. package/Libraries/Types/ReactDevToolsTypes.js +58 -0
  247. package/Libraries/Types/UIManagerJSInterface.js +16 -0
  248. package/Libraries/Utilities/DebugEnvironment.js +1 -4
  249. package/Libraries/Utilities/Dimensions.js +8 -16
  250. package/Libraries/Utilities/GlobalPerformanceLogger.js +1 -2
  251. package/Libraries/Utilities/NativeAppearance.js +3 -26
  252. package/Libraries/Utilities/NativeDevLoadingView.js +3 -14
  253. package/Libraries/Utilities/NativeDeviceInfo.js +2 -47
  254. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +3 -34
  255. package/Libraries/Utilities/NativePlatformConstantsIOS.js +3 -26
  256. package/Libraries/Utilities/NativePlatformConstantsWin.js +3 -23
  257. package/Libraries/Utilities/PixelRatio.d.ts +4 -4
  258. package/Libraries/Utilities/Platform.android.js +4 -0
  259. package/Libraries/Utilities/Platform.d.ts +3 -0
  260. package/Libraries/Utilities/Platform.flow.js +7 -0
  261. package/Libraries/Utilities/Platform.flow.windows.js +9 -0
  262. package/Libraries/Utilities/Platform.ios.js +11 -0
  263. package/Libraries/Utilities/Platform.windows.js +6 -0
  264. package/Libraries/Utilities/binaryToBase64.js +1 -1
  265. package/Libraries/Utilities/codegenNativeComponent.js +4 -6
  266. package/Libraries/Utilities/createPerformanceLogger.js +2 -74
  267. package/Libraries/Utilities/useMergeRefs.js +5 -9
  268. package/Libraries/Vibration/NativeVibration.js +3 -14
  269. package/Libraries/WebSocket/NativeWebSocketModule.js +4 -25
  270. package/Libraries/YellowBox/YellowBoxDeprecated.js +1 -1
  271. package/Libraries/vendor/emitter/EventEmitter.js +1 -0
  272. package/Microsoft.ReactNative/AsynchronousEventBeat.cpp +50 -0
  273. package/Microsoft.ReactNative/AsynchronousEventBeat.h +23 -0
  274. package/Microsoft.ReactNative/Base/CoreUIManagers.cpp +4 -0
  275. package/Microsoft.ReactNative/Base/CxxReactIncludes.h +1 -1
  276. package/Microsoft.ReactNative/Base/FollyIncludes.h +2 -2
  277. package/Microsoft.ReactNative/ComponentView.idl +106 -0
  278. package/Microsoft.ReactNative/Composition.Input.idl +16 -2
  279. package/Microsoft.ReactNative/CompositionComponentView.idl +117 -0
  280. package/Microsoft.ReactNative/CompositionContext.idl +1 -1
  281. package/Microsoft.ReactNative/CompositionRootView.idl +8 -0
  282. package/Microsoft.ReactNative/CompositionSwitcher.idl +25 -14
  283. package/Microsoft.ReactNative/DevMenuControl.idl +0 -3
  284. package/Microsoft.ReactNative/DevMenuControl.xaml +0 -15
  285. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.cpp +189 -0
  286. package/Microsoft.ReactNative/Fabric/AbiComponentDescriptor.h +80 -0
  287. package/Microsoft.ReactNative/Fabric/AbiShadowNode.cpp +83 -0
  288. package/Microsoft.ReactNative/Fabric/AbiShadowNode.h +83 -0
  289. package/Microsoft.ReactNative/Fabric/AbiState.cpp +71 -0
  290. package/Microsoft.ReactNative/Fabric/AbiState.h +38 -0
  291. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.cpp +48 -19
  292. package/Microsoft.ReactNative/Fabric/AbiViewComponentDescriptor.h +8 -16
  293. package/Microsoft.ReactNative/Fabric/AbiViewProps.cpp +97 -0
  294. package/Microsoft.ReactNative/Fabric/AbiViewProps.h +39 -0
  295. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.cpp +90 -0
  296. package/Microsoft.ReactNative/Fabric/AbiViewShadowNode.h +87 -0
  297. package/Microsoft.ReactNative/Fabric/ComponentView.cpp +340 -0
  298. package/Microsoft.ReactNative/Fabric/ComponentView.h +130 -64
  299. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.cpp +48 -24
  300. package/Microsoft.ReactNative/Fabric/Composition/ActivityIndicatorComponentView.h +18 -14
  301. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.cpp +42 -27
  302. package/Microsoft.ReactNative/Fabric/Composition/ComponentViewRegistry.h +3 -1
  303. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.cpp +123 -28
  304. package/Microsoft.ReactNative/Fabric/Composition/Composition.Input.h +69 -13
  305. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.cpp +651 -284
  306. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper.h +7 -7
  307. package/Microsoft.ReactNative/Fabric/Composition/CompositionContextHelper_emptyimpl.cpp +9 -9
  308. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +120 -31
  309. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.h +12 -2
  310. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +308 -129
  311. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +34 -6
  312. package/Microsoft.ReactNative/Fabric/Composition/CompositionHelpers.h +2 -1
  313. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.cpp +61 -54
  314. package/Microsoft.ReactNative/Fabric/Composition/CompositionHwndHost.h +0 -9
  315. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.cpp +99 -30
  316. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootAutomationProvider.h +4 -3
  317. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.cpp +273 -28
  318. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView.h +28 -3
  319. package/Microsoft.ReactNative/Fabric/Composition/CompositionRootView_emptyimpl.cpp +7 -3
  320. package/Microsoft.ReactNative/Fabric/Composition/CompositionUIService.cpp +4 -0
  321. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.cpp +479 -280
  322. package/Microsoft.ReactNative/Fabric/Composition/CompositionViewComponentView.h +133 -79
  323. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.cpp +113 -0
  324. package/Microsoft.ReactNative/Fabric/Composition/DebuggingOverlayComponentView.h +39 -0
  325. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.cpp +61 -41
  326. package/Microsoft.ReactNative/Fabric/Composition/ImageComponentView.h +19 -14
  327. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentDescriptor.h +39 -0
  328. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.cpp +343 -0
  329. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewComponentView.h +67 -0
  330. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.cpp +18 -0
  331. package/Microsoft.ReactNative/Fabric/Composition/Modal/WindowsModalHostViewShadowNode.h +39 -0
  332. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +53 -186
  333. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.h +20 -12
  334. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.cpp +59 -150
  335. package/Microsoft.ReactNative/Fabric/Composition/ReactCompositionViewComponentBuilder.h +27 -76
  336. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.cpp +81 -32
  337. package/Microsoft.ReactNative/Fabric/Composition/RootComponentView.h +27 -14
  338. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +707 -64
  339. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.h +47 -26
  340. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.cpp +225 -125
  341. package/Microsoft.ReactNative/Fabric/Composition/SwitchComponentView.h +34 -21
  342. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +179 -0
  343. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.h +25 -0
  344. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentDescriptor.h +110 -115
  345. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +228 -79
  346. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.h +43 -22
  347. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.cpp +18 -0
  348. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputEventEmitter.h +12 -0
  349. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputProps.h +5 -5
  350. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.cpp +5 -1
  351. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputShadowNode.h +1 -2
  352. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.cpp +4 -44
  353. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputState.h +11 -9
  354. package/Microsoft.ReactNative/Fabric/Composition/Theme.cpp +550 -0
  355. package/Microsoft.ReactNative/Fabric/Composition/Theme.h +73 -0
  356. package/Microsoft.ReactNative/Fabric/Composition/Theme_emptyimpl.cpp +85 -0
  357. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.cpp +48 -26
  358. package/Microsoft.ReactNative/Fabric/Composition/UiaHelpers.h +6 -2
  359. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.cpp +30 -65
  360. package/Microsoft.ReactNative/Fabric/Composition/UnimplementedNativeViewComponentView.h +16 -25
  361. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.cpp +72 -88
  362. package/Microsoft.ReactNative/Fabric/FabricUIManagerModule.h +5 -2
  363. package/Microsoft.ReactNative/Fabric/IComponentViewRegistry.h +3 -2
  364. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.cpp +6 -6
  365. package/Microsoft.ReactNative/Fabric/ReactNativeConfigProperties.h +2 -2
  366. package/Microsoft.ReactNative/Fabric/ReactTaggedView.h +12 -7
  367. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.cpp +28 -19
  368. package/Microsoft.ReactNative/Fabric/WindowsComponentDescriptorRegistry.h +5 -0
  369. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewEventEmitter.cpp +0 -2
  370. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/HostPlatformViewTraitsInitializer.h +5 -1
  371. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/view/WindowsViewEvents.h +2 -4
  372. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Float.h +20 -0
  373. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/HostPlatformColor.h +86 -0
  374. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorParser.h +38 -0
  375. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/{Color.cpp → PlatformColorUtils.cpp} +7 -77
  376. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/PlatformColorUtils.h +12 -0
  377. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.cpp +1 -0
  378. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/TextLayoutManager.h +2 -0
  379. package/Microsoft.ReactNative/IReactCompositionViewComponentBuilder.idl +6 -87
  380. package/Microsoft.ReactNative/IReactContext.idl +3 -0
  381. package/Microsoft.ReactNative/IReactViewComponentBuilder.idl +71 -1
  382. package/Microsoft.ReactNative/JsiApi.cpp +17 -7
  383. package/Microsoft.ReactNative/JsiApi.h +2 -2
  384. package/Microsoft.ReactNative/JsiApi.idl +5 -4
  385. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +13 -22
  386. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +6 -2
  387. package/Microsoft.ReactNative/Modules/AccessibilityInfoModule.h +1 -1
  388. package/Microsoft.ReactNative/Modules/AlertModule.h +2 -2
  389. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.cpp +12 -8
  390. package/Microsoft.ReactNative/Modules/Animated/PropsAnimatedNode.h +1 -1
  391. package/Microsoft.ReactNative/Modules/AppStateModule.h +2 -2
  392. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.cpp +5 -3
  393. package/Microsoft.ReactNative/Modules/AppThemeModuleUwp.h +4 -4
  394. package/Microsoft.ReactNative/Modules/AppearanceModule.cpp +10 -1
  395. package/Microsoft.ReactNative/Modules/ClipboardModule.h +1 -1
  396. package/Microsoft.ReactNative/Modules/DeviceInfoModule.cpp +71 -38
  397. package/Microsoft.ReactNative/Modules/DeviceInfoModule.h +5 -5
  398. package/Microsoft.ReactNative/Modules/ExceptionsManager.cpp +110 -0
  399. package/Microsoft.ReactNative/Modules/ExceptionsManager.h +54 -0
  400. package/Microsoft.ReactNative/Modules/ImageViewManagerModule.h +11 -10
  401. package/Microsoft.ReactNative/Modules/LinkingManagerModule.h +8 -6
  402. package/Microsoft.ReactNative/Modules/LogBoxModule.h +3 -3
  403. package/Microsoft.ReactNative/Modules/NativeUIManager.cpp +5 -28
  404. package/Microsoft.ReactNative/Modules/NativeUIManager.h +1 -1
  405. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.cpp +8 -5
  406. package/Microsoft.ReactNative/Modules/PaperUIManagerModule.h +3 -3
  407. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.cpp +49 -0
  408. package/Microsoft.ReactNative/Modules/PlatformConstantsWinModule.h +18 -0
  409. package/Microsoft.ReactNative/Modules/SourceCode.cpp +31 -0
  410. package/Microsoft.ReactNative/Modules/SourceCode.h +28 -0
  411. package/Microsoft.ReactNative/Modules/StatusBarManager.h +12 -0
  412. package/Microsoft.ReactNative/Modules/Timing.cpp +325 -0
  413. package/Microsoft.ReactNative/Modules/Timing.h +121 -0
  414. package/Microsoft.ReactNative/QuirkSettings.cpp +32 -0
  415. package/Microsoft.ReactNative/QuirkSettings.h +9 -0
  416. package/Microsoft.ReactNative/QuirkSettings.idl +6 -0
  417. package/Microsoft.ReactNative/ReactCoreInjection.cpp +15 -0
  418. package/Microsoft.ReactNative/ReactCoreInjection.h +4 -0
  419. package/Microsoft.ReactNative/ReactCoreInjection.idl +8 -0
  420. package/Microsoft.ReactNative/ReactHost/IReactInstance.h +1 -1
  421. package/Microsoft.ReactNative/ReactHost/MsoReactContext.cpp +1 -1
  422. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.cpp +556 -234
  423. package/Microsoft.ReactNative/ReactHost/ReactInstanceWin.h +36 -9
  424. package/Microsoft.ReactNative/ReactInstanceSettings.idl +3 -0
  425. package/Microsoft.ReactNative/ReactPointerEventArgs.cpp +8 -0
  426. package/Microsoft.ReactNative/ReactPointerEventArgs.h +4 -0
  427. package/Microsoft.ReactNative/ReactPointerEventArgs.idl +12 -0
  428. package/Microsoft.ReactNative/SchedulerSettings.cpp +23 -0
  429. package/Microsoft.ReactNative/SchedulerSettings.h +9 -1
  430. package/Microsoft.ReactNative/SynchronousEventBeat.cpp +41 -0
  431. package/Microsoft.ReactNative/SynchronousEventBeat.h +29 -0
  432. package/Microsoft.ReactNative/Theme.idl +57 -0
  433. package/Microsoft.ReactNative/Timer.cpp +63 -0
  434. package/Microsoft.ReactNative/{CoreAppPage.h → Timer.h} +12 -5
  435. package/Microsoft.ReactNative/Timer.idl +34 -0
  436. package/Microsoft.ReactNative/TurboModulesProvider.cpp +4 -0
  437. package/Microsoft.ReactNative/Utils/ImageUtils.cpp +37 -3
  438. package/Microsoft.ReactNative/Utils/ImageUtils.h +0 -1
  439. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +11 -12
  440. package/Microsoft.ReactNative/Utils/LocalBundleReader.h +3 -3
  441. package/Microsoft.ReactNative/Utils/ThemeUtils.cpp +33 -0
  442. package/Microsoft.ReactNative/Utils/ThemeUtils.h +13 -0
  443. package/Microsoft.ReactNative/Utils/ValueUtils.cpp +0 -5
  444. package/Microsoft.ReactNative/Utils/ValueUtils.h +0 -3
  445. package/Microsoft.ReactNative/ViewProps.idl +17 -0
  446. package/Microsoft.ReactNative/Views/ActivityIndicatorViewManager.cpp +1 -0
  447. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.cpp +54 -0
  448. package/Microsoft.ReactNative/Views/DebuggingOverlayViewManager.h +30 -0
  449. package/Microsoft.ReactNative/Views/DevMenu.cpp +1 -20
  450. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.cpp +157 -0
  451. package/Microsoft.ReactNative/Views/DynamicAutomationPeer.h +5 -0
  452. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.cpp +20 -0
  453. package/Microsoft.ReactNative/Views/DynamicAutomationProperties.h +4 -0
  454. package/Microsoft.ReactNative/Views/FlyoutViewManager.cpp +1 -5
  455. package/Microsoft.ReactNative/Views/FrameworkElementViewManager.cpp +137 -0
  456. package/Microsoft.ReactNative/Views/ICompositionRootView.h +0 -1
  457. package/Microsoft.ReactNative/Views/Image/ImageViewManager.cpp +0 -5
  458. package/Microsoft.ReactNative/Views/PopupViewManager.cpp +1 -5
  459. package/Microsoft.ReactNative/Views/ShadowNodeBase.cpp +11 -0
  460. package/Microsoft.ReactNative/Views/ShadowNodeBase.h +3 -4
  461. package/Microsoft.ReactNative/Views/TextInputViewManager.cpp +0 -6
  462. package/Microsoft.ReactNative/Views/TextViewManager.cpp +0 -11
  463. package/Microsoft.ReactNative/Views/TouchEventHandler.cpp +1 -1
  464. package/Microsoft.ReactNative/Views/UnimplementedViewManager.cpp +79 -0
  465. package/Microsoft.ReactNative/Views/UnimplementedViewManager.h +27 -0
  466. package/Microsoft.ReactNative/Views/ViewManagerBase.cpp +46 -0
  467. package/Microsoft.ReactNative/Views/ViewManagerBase.h +1 -1
  468. package/Microsoft.ReactNative/Views/cppwinrt/DynamicAutomationPeer.idl +77 -2
  469. package/Microsoft.ReactNative/microsoft.reactnative.def +0 -3
  470. package/Microsoft.ReactNative/packages.lock.json +9 -6
  471. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/AutoDraw.h +2 -0
  472. package/{Shared/Composition → Microsoft.ReactNative.Cxx}/CompositionSwitcher.interop.h +4 -10
  473. package/Microsoft.ReactNative.Cxx/CppWinRTIncludes.h +0 -5
  474. package/Microsoft.ReactNative.Cxx/DesktopWindowBridge.h +5 -0
  475. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.cpp +19 -10
  476. package/Microsoft.ReactNative.Cxx/JSI/JsiAbiApi.h +2 -0
  477. package/Microsoft.ReactNative.Cxx/JSValueComposition.h +22 -0
  478. package/Microsoft.ReactNative.Cxx/JSValueReader.h +19 -0
  479. package/Microsoft.ReactNative.Cxx/JSValueXaml.h +1 -1
  480. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +6 -4
  481. package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems.filters +0 -1
  482. package/Microsoft.ReactNative.Cxx/NativeModules.h +15 -15
  483. package/Microsoft.ReactNative.Cxx/TurboModuleProvider.cpp +1 -1
  484. package/Microsoft.ReactNative.Managed/ReactSettingsSnapshot.cs +2 -0
  485. package/Microsoft.ReactNative.Managed/packages.lock.json +6 -3
  486. package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +0 -1
  487. package/Mso/future/details/executor.h +1 -1
  488. package/Mso/src/debugAssertApi/debugAssertApi.cpp +1 -1
  489. package/PropertySheets/External/Microsoft.ReactNative.Composition.Common.props +8 -0
  490. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.props +24 -0
  491. package/PropertySheets/External/Microsoft.ReactNative.Composition.CppLib.targets +20 -0
  492. package/PropertySheets/External/Microsoft.ReactNative.Cpp.Dependencies.props +1 -1
  493. package/PropertySheets/External/Microsoft.ReactNative.WindowsSdk.Default.props +2 -0
  494. package/PropertySheets/Generated/PackageVersion.g.props +4 -4
  495. package/PropertySheets/JSEngine.props +0 -8
  496. package/PropertySheets/React.Cpp.props +14 -3
  497. package/PropertySheets/ReactCommunity.cpp.props +2 -2
  498. package/PropertySheets/Release.props +0 -1
  499. package/PropertySheets/WinUI.props +21 -1
  500. package/PropertySheets/x64.props +3 -0
  501. package/PropertySheets/x86.props +3 -0
  502. package/ReactCommon/ReactCommon.vcxproj +13 -8
  503. package/ReactCommon/ReactCommon.vcxproj.filters +12 -1
  504. package/ReactCommon/TEMP_UntilReactCommonUpdate/jsi/jsi/test/testlib.cpp +114 -19
  505. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModule.cpp +66 -0
  506. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +114 -52
  507. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleUtils.h +13 -15
  508. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/scrollview/ScrollViewProps.cpp +535 -0
  509. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/runtime/ReactInstance.cpp +437 -0
  510. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.cpp +39 -0
  511. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/utils/jsi-utils.h +31 -0
  512. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/YGEnums.h +19 -24
  513. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/algorithm/CalculateLayout.cpp +600 -980
  514. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/enums/ExperimentalFeature.h +5 -11
  515. package/ReactCommon/cgmanifest.json +1 -1
  516. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +21 -0
  517. package/Scripts/IntegrationTests.ps1 +26 -15
  518. package/Scripts/Microsoft.ReactNative.targets +0 -6
  519. package/Scripts/OfficeReact.Win32.nuspec +1 -2
  520. package/Scripts/TestServers.ps1 +2 -28
  521. package/Scripts/Tfs/Start-TestServers.ps1 +1 -21
  522. package/Scripts/Tfs/Stop-TestServers.ps1 +0 -5
  523. package/Scripts/rnw-dependencies.ps1 +38 -67
  524. package/Shared/CreateInstance.h +25 -0
  525. package/Shared/DevServerHelper.h +0 -3
  526. package/Shared/DevSettings.h +9 -0
  527. package/Shared/HermesRuntimeHolder.cpp +17 -0
  528. package/Shared/HermesRuntimeHolder.h +17 -0
  529. package/Shared/HermesSamplingProfiler.cpp +12 -10
  530. package/Shared/HermesSamplingProfiler.h +5 -4
  531. package/Shared/IDevSupportManager.h +4 -2
  532. package/Shared/InstanceManager.cpp +13 -11
  533. package/Shared/InstanceManager.h +8 -18
  534. package/Shared/JSI/ChakraRuntime.cpp +66 -9
  535. package/Shared/JSI/ChakraRuntime.h +8 -0
  536. package/Shared/JSI/JSExecutorFactoryDelegate.h +12 -0
  537. package/Shared/JSI/JSExecutorFactorySettings.cpp +30 -0
  538. package/Shared/JSI/JSExecutorFactorySettings.h +21 -0
  539. package/Shared/Modules/BlobModule.h +1 -1
  540. package/Shared/Modules/FileReaderModule.h +1 -1
  541. package/Shared/Modules/HttpModule.h +1 -1
  542. package/Shared/Modules/WebSocketTurboModule.h +1 -1
  543. package/Shared/OInstance.cpp +212 -165
  544. package/Shared/OInstance.h +19 -0
  545. package/Shared/Shared.vcxitems +134 -50
  546. package/Shared/Shared.vcxitems.filters +81 -24
  547. package/Shared/Utils.cpp +12 -10
  548. package/Shared/Utils.h +2 -2
  549. package/Shared/WebSocketJSExecutorFactory.h +1 -0
  550. package/codegen/NativeBugReportingSpec.g.h +0 -6
  551. package/codegen/NativeFrameRateLoggerSpec.g.h +0 -2
  552. package/codegen/NativeImageLoaderAndroidSpec.g.h +10 -23
  553. package/codegen/NativePerformanceObserverSpec.g.h +6 -0
  554. package/codegen/NativePlatformConstantsIOSSpec.g.h +2 -0
  555. package/codegen/NativePlatformConstantsWinSpec.g.h +17 -0
  556. package/codegen/NativePushNotificationManagerIOSSpec.g.h +8 -6
  557. package/codegen/NativeReactNativeFeatureFlagsSpec.g.h +88 -0
  558. package/codegen/NativeUIManagerSpec.g.h +83 -95
  559. package/codegen/react/components/rnwcore/ComponentDescriptors.h +10 -7
  560. package/codegen/react/components/rnwcore/EventEmitters.cpp +40 -52
  561. package/codegen/react/components/rnwcore/EventEmitters.h +66 -84
  562. package/codegen/react/components/rnwcore/Props.cpp +60 -95
  563. package/codegen/react/components/rnwcore/Props.h +198 -239
  564. package/codegen/react/components/rnwcore/ShadowNodes.cpp +6 -7
  565. package/codegen/react/components/rnwcore/ShadowNodes.h +38 -29
  566. package/codegen/react/components/rnwcore/States.cpp +3 -5
  567. package/codegen/react/components/rnwcore/States.h +29 -16
  568. package/codegen/rnwcoreJSI-generated.cpp +1442 -1398
  569. package/codegen/rnwcoreJSI.h +6066 -3593
  570. package/index.js +66 -99
  571. package/index.windows.js +60 -102
  572. package/jest/assetFileTransformer.js +1 -1
  573. package/jest/local-setup.js +0 -5
  574. package/jest/mockModal.js +2 -1
  575. package/jest/mockScrollView.js +1 -2
  576. package/jest/renderer.js +1 -1
  577. package/jest/setup.js +6 -3
  578. package/just-task.js +1 -1
  579. package/package.json +30 -29
  580. package/{Libraries/Core → src/private/core}/setUpDOM.js +2 -2
  581. package/src/private/featureflags/NativeReactNativeFeatureFlags.js +42 -0
  582. package/src/private/featureflags/ReactNativeFeatureFlags.js +140 -0
  583. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +84 -0
  584. package/src/private/featureflags/__tests__/ReactNativeFeatureFlags-test.js +92 -0
  585. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +53 -0
  586. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +124 -0
  587. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +26 -0
  588. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +74 -0
  589. package/src/private/specs/components/AndroidSwitchNativeComponent.js +62 -0
  590. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +61 -0
  591. package/src/private/specs/components/PopupMenuAndroidNativeComponent.js +47 -0
  592. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +36 -0
  593. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +71 -0
  594. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +26 -0
  595. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +139 -0
  596. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +25 -0
  597. package/src/private/specs/components/SwitchNativeComponent.js +61 -0
  598. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +26 -0
  599. package/src/private/specs/modules/NativeAccessibilityInfo.js +33 -0
  600. package/src/private/specs/modules/NativeAccessibilityManager.js +66 -0
  601. package/src/private/specs/modules/NativeActionSheetManager.js +54 -0
  602. package/src/private/specs/modules/NativeAlertManager.js +35 -0
  603. package/src/private/specs/modules/NativeAnimatedModule.js +77 -0
  604. package/src/private/specs/modules/NativeAnimatedTurboModule.js +78 -0
  605. package/src/private/specs/modules/NativeAnimationsDebugModule.js +20 -0
  606. package/src/private/specs/modules/NativeAppState.js +33 -0
  607. package/src/private/specs/modules/NativeAppTheme.js +33 -0
  608. package/src/private/specs/modules/NativeAppearance.js +36 -0
  609. package/src/private/specs/modules/NativeBlobModule.js +59 -0
  610. package/src/private/specs/modules/NativeBugReporting.js +20 -0
  611. package/src/private/specs/modules/NativeClipboard.js +21 -0
  612. package/src/private/specs/modules/NativeDevLoadingView.js +24 -0
  613. package/src/private/specs/modules/NativeDevMenu.js +23 -0
  614. package/src/private/specs/modules/NativeDevSettings.js +33 -0
  615. package/src/private/specs/modules/NativeDevToolsSettingsManager.js +24 -0
  616. package/src/private/specs/modules/NativeDeviceEventManager.js +19 -0
  617. package/src/private/specs/modules/NativeDeviceInfo.js +58 -0
  618. package/src/private/specs/modules/NativeDialogManagerAndroid.js +48 -0
  619. package/{Libraries/Alert → src/private/specs/modules}/NativeDialogManagerWindows.js +5 -4
  620. package/src/private/specs/modules/NativeExceptionsManager.js +103 -0
  621. package/src/private/specs/modules/NativeFileReaderModule.js +22 -0
  622. package/src/private/specs/modules/NativeFrameRateLogger.js +22 -0
  623. package/src/private/specs/modules/NativeHeadlessJsTaskSupport.js +20 -0
  624. package/src/private/specs/modules/NativeI18nManager.js +28 -0
  625. package/src/private/specs/modules/NativeImageEditor.js +52 -0
  626. package/src/private/specs/modules/NativeImageLoaderAndroid.js +30 -0
  627. package/src/private/specs/modules/NativeImageLoaderIOS.js +37 -0
  628. package/src/private/specs/modules/NativeImageStoreAndroid.js +26 -0
  629. package/src/private/specs/modules/NativeImageStoreIOS.js +33 -0
  630. package/src/private/specs/modules/NativeIntentAndroid.js +30 -0
  631. package/src/private/specs/modules/NativeIntersectionObserver.js +41 -0
  632. package/src/private/specs/modules/NativeJSCHeapCapture.js +19 -0
  633. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +19 -0
  634. package/src/private/specs/modules/NativeKeyboardObserver.js +20 -0
  635. package/src/private/specs/modules/NativeLinkingManager.js +27 -0
  636. package/src/private/specs/modules/NativeLogBox.js +20 -0
  637. package/src/private/specs/modules/NativeModalManager.js +21 -0
  638. package/src/private/specs/modules/NativeMutationObserver.js +58 -0
  639. package/src/private/specs/modules/NativeNetworkingAndroid.js +37 -0
  640. package/src/private/specs/modules/NativeNetworkingIOS.js +37 -0
  641. package/src/private/specs/modules/NativePermissionsAndroid.js +77 -0
  642. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +44 -0
  643. package/src/private/specs/modules/NativePlatformConstantsIOS.js +37 -0
  644. package/src/private/specs/modules/NativePlatformConstantsWin.js +38 -0
  645. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +107 -0
  646. package/src/private/specs/modules/NativeRedBox.js +20 -0
  647. package/src/private/specs/modules/NativeSampleTurboModule.js +53 -0
  648. package/src/private/specs/modules/NativeSegmentFetcher.js +28 -0
  649. package/src/private/specs/modules/NativeSettingsManager.js +25 -0
  650. package/src/private/specs/modules/NativeShareModule.js +23 -0
  651. package/src/private/specs/modules/NativeSoundManager.js +22 -0
  652. package/src/private/specs/modules/NativeSourceCode.js +36 -0
  653. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +68 -0
  654. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +89 -0
  655. package/src/private/specs/modules/NativeTiming.js +26 -0
  656. package/src/private/specs/modules/NativeToastAndroid.js +38 -0
  657. package/src/private/specs/modules/NativeUIManager.js +118 -0
  658. package/src/private/specs/modules/NativeVibration.js +24 -0
  659. package/src/private/specs/modules/NativeWebSocketModule.js +34 -0
  660. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReactNativeElement.js +6 -6
  661. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyCharacterData.js +2 -2
  662. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyElement.js +5 -5
  663. package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyNode.js +19 -10
  664. package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/DOMRectList.js +1 -1
  665. package/src/private/webapis/dom/oldstylecollections/__tests__/DOMRectList-test.js +85 -0
  666. package/src/private/webapis/dom/oldstylecollections/__tests__/HTMLCollection-test.js +80 -0
  667. package/src/private/webapis/dom/oldstylecollections/__tests__/NodeList-test.js +161 -0
  668. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformance.js +2 -2
  669. package/{Libraries/WebPerformance → src/private/webapis/performance}/NativePerformanceObserver.js +3 -2
  670. package/{Libraries/WebPerformance → src/private/webapis/performance}/Performance.js +2 -2
  671. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEventTiming.js +1 -1
  672. package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceObserver.js +21 -2
  673. package/{Libraries/WebPerformance → src/private/webapis/performance}/RawPerformanceEntry.js +1 -1
  674. package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformanceObserver.js +9 -0
  675. package/src/private/webapis/performance/__tests__/EventCounts-test.js +116 -0
  676. package/src/private/webapis/performance/__tests__/NativePerformanceMock-test.js +82 -0
  677. package/src/private/webapis/performance/__tests__/NativePerformanceObserverMock-test.js +108 -0
  678. package/src/private/webapis/performance/__tests__/Performance-test.js +117 -0
  679. package/src/private/webapis/performance/__tests__/PerformanceObserver-test.js +208 -0
  680. package/template/cpp-app/src/App.cpp +2 -2
  681. package/template/cs-app/src/App.xaml.cs +2 -2
  682. package/templates/cpp-app/jest.config.windows.js +3 -0
  683. package/templates/cpp-app/metro.config.js +0 -2
  684. package/templates/cpp-app/template.config.js +24 -9
  685. package/templates/cpp-app/windows/ExperimentalFeatures.props +1 -1
  686. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.cpp +13 -0
  687. package/templates/cpp-app/windows/MyApp/AutolinkedNativeModules.g.h +10 -0
  688. package/templates/cpp-app/windows/MyApp/MyApp.cpp +134 -249
  689. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +12 -11
  690. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj.filters +6 -3
  691. package/templates/cpp-app/windows/MyApp/pch.h +12 -9
  692. package/templates/cpp-app/windows/MyApp/resource.h +0 -1
  693. package/templates/cpp-app/windows/MyApp.sln +26 -26
  694. package/templates/cpp-lib/example/metro.config.js +74 -0
  695. package/templates/cpp-lib/template.config.js +235 -0
  696. package/templates/cpp-lib/windows/ExperimentalFeatures.props +11 -0
  697. package/templates/cpp-lib/windows/MyLib/MyLib.cpp +18 -0
  698. package/templates/cpp-lib/windows/MyLib/MyLib.def +3 -0
  699. package/templates/cpp-lib/windows/MyLib/MyLib.h +31 -0
  700. package/templates/cpp-lib/windows/MyLib/MyLib.rc +0 -0
  701. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +148 -0
  702. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj.filters +44 -0
  703. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.cpp +20 -0
  704. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.h +24 -0
  705. package/templates/cpp-lib/windows/MyLib/ReactPackageProvider.idl +9 -0
  706. package/templates/cpp-lib/windows/MyLib/pch.cpp +1 -0
  707. package/templates/cpp-lib/windows/MyLib/pch.h +30 -0
  708. package/templates/cpp-lib/windows/MyLib/resource.h +5 -0
  709. package/templates/cpp-lib/windows/MyLib/targetver.h +8 -0
  710. package/templates/cpp-lib/windows/MyLib.sln +156 -0
  711. package/templates/cpp-lib/windows/_gitignore +41 -0
  712. package/templates/templateUtils.js +137 -0
  713. package/types/modules/globals.d.ts +1 -0
  714. package/Folly/TEMP_UntilFollyUpdate/hash/Hash.h +0 -1016
  715. package/Libraries/Components/Button.flow.js +0 -265
  716. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.windows.js +0 -8
  717. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.windows.js +0 -14
  718. package/Libraries/Components/SafeAreaView/SafeAreaView.windows.js +0 -34
  719. package/Libraries/Components/ScrollView/ScrollView.windows.js +0 -1941
  720. package/Libraries/Components/ScrollView/ScrollViewViewConfig.js +0 -85
  721. package/Libraries/Components/ToastAndroid/ToastAndroid.windows.js +0 -45
  722. package/Libraries/Components/Touchable/Touchable.flow.js +0 -284
  723. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +0 -189
  724. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlayNativeComponent.js +0 -43
  725. package/Libraries/Image/Image.flow.js +0 -64
  726. package/Libraries/Inspector/DevtoolsOverlay.js +0 -223
  727. package/Libraries/Performance/QuickPerformanceLogger.js +0 -142
  728. package/Libraries/Settings/Settings.windows.js +0 -28
  729. package/Microsoft.ReactNative/CoreApp.cpp +0 -303
  730. package/Microsoft.ReactNative/CoreAppPage.cpp +0 -21
  731. package/Microsoft.ReactNative/CoreAppPage.idl +0 -12
  732. package/Microsoft.ReactNative/CoreAppPage.xaml +0 -14
  733. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.cpp +0 -197
  734. package/Microsoft.ReactNative/Fabric/Composition/AbiCompositionViewComponentView.h +0 -84
  735. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/EventEmitters.h +0 -5
  736. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/Props.h +0 -5
  737. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/ShadowNodes.h +0 -5
  738. package/Microsoft.ReactNative/Fabric/platform/react/renderer/components/rnwcore/States.h +0 -5
  739. package/Microsoft.ReactNative/Fabric/platform/react/renderer/core/graphicsConversions.h +0 -245
  740. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/Color.h +0 -134
  741. package/Microsoft.ReactNative/Fabric/platform/react/renderer/graphics/conversions.h +0 -27
  742. package/Microsoft.ReactNative/Modules/TimingModule.cpp +0 -229
  743. package/Microsoft.ReactNative/Modules/TimingModule.h +0 -88
  744. package/Microsoft.ReactNative.Cxx/CoreApp.h +0 -60
  745. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.cpp +0 -60
  746. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/bridging/LongLivedObject.h +0 -60
  747. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/nativemodule/core/ReactCommon/TurboModuleBinding.h +0 -63
  748. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaLayoutableShadowNode.cpp +0 -1038
  749. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/YogaStylableProps.cpp +0 -503
  750. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/components/view/conversions.h +0 -895
  751. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mapbuffer/MapBufferBuilder.cpp +0 -182
  752. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/mounting/ShadowTree.cpp +0 -543
  753. package/ReactCommon/TEMP_UntilReactCommonUpdate/react/renderer/uimanager/UIManagerBinding.cpp +0 -1505
  754. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/bits/NumericBitfield.h +0 -67
  755. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/config/Config.h +0 -93
  756. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/LayoutResults.h +0 -88
  757. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.cpp +0 -606
  758. package/ReactCommon/TEMP_UntilReactCommonUpdate/yoga/yoga/node/Node.h +0 -344
  759. package/ReactCommon/Yoga.cpp +0 -961
  760. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRect.js +0 -0
  761. /package/{Libraries/DOM/Geometry → src/private/webapis/dom/geometry}/DOMRectReadOnly.js +0 -0
  762. /package/{Libraries/DOM/Nodes → src/private/webapis/dom/nodes}/ReadOnlyText.js +0 -0
  763. /package/{Libraries/DOM/Nodes/Utilities → src/private/webapis/dom/nodes/utilities}/Traversal.js +0 -0
  764. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/ArrayLikeUtils.js +0 -0
  765. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/HTMLCollection.js +0 -0
  766. /package/{Libraries/DOM/OldStyleCollections → src/private/webapis/dom/oldstylecollections}/NodeList.js +0 -0
  767. /package/{Libraries/WebPerformance → src/private/webapis/performance}/EventCounts.js +0 -0
  768. /package/{Libraries/WebPerformance → src/private/webapis/performance}/MemoryInfo.js +0 -0
  769. /package/{Libraries/WebPerformance → src/private/webapis/performance}/PerformanceEntry.js +0 -0
  770. /package/{Libraries/WebPerformance → src/private/webapis/performance}/ReactNativeStartupTiming.js +0 -0
  771. /package/{Libraries/WebPerformance → src/private/webapis/performance}/__mocks__/NativePerformance.js +0 -0
@@ -1,1505 +0,0 @@
1
- /*
2
- * Copyright (c) Meta Platforms, Inc. and affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- */
7
-
8
- #include "UIManagerBinding.h"
9
-
10
- #include <glog/logging.h>
11
- #include <jsi/JSIDynamic.h>
12
- #include <react/debug/react_native_assert.h>
13
- #include <react/renderer/components/view/PointerEvent.h>
14
- #include <react/renderer/core/LayoutableShadowNode.h>
15
- #include <react/renderer/core/TraitCast.h>
16
- #include <react/renderer/debug/SystraceSection.h>
17
- #include <react/renderer/runtimescheduler/RuntimeSchedulerBinding.h>
18
- #include <react/renderer/uimanager/primitives.h>
19
-
20
- #include <utility>
21
-
22
- #include "bindingUtils.h"
23
-
24
- namespace facebook::react {
25
-
26
- void UIManagerBinding::createAndInstallIfNeeded(
27
- jsi::Runtime& runtime,
28
- const std::shared_ptr<UIManager>& uiManager) {
29
- auto uiManagerModuleName = "nativeFabricUIManager";
30
-
31
- auto uiManagerValue =
32
- runtime.global().getProperty(runtime, uiManagerModuleName);
33
- if (uiManagerValue.isUndefined()) {
34
- // The global namespace does not have an instance of the binding;
35
- // we need to create, install and return it.
36
- auto uiManagerBinding = std::make_shared<UIManagerBinding>(uiManager);
37
- auto object = jsi::Object::createFromHostObject(runtime, uiManagerBinding);
38
- runtime.global().setProperty(
39
- runtime, uiManagerModuleName, std::move(object));
40
- }
41
- }
42
-
43
- std::shared_ptr<UIManagerBinding> UIManagerBinding::getBinding(
44
- jsi::Runtime& runtime) {
45
- auto uiManagerModuleName = "nativeFabricUIManager";
46
-
47
- auto uiManagerValue =
48
- runtime.global().getProperty(runtime, uiManagerModuleName);
49
- if (uiManagerValue.isUndefined()) {
50
- return nullptr;
51
- }
52
-
53
- auto uiManagerObject = uiManagerValue.asObject(runtime);
54
- return uiManagerObject.getHostObject<UIManagerBinding>(runtime);
55
- }
56
-
57
- UIManagerBinding::UIManagerBinding(std::shared_ptr<UIManager> uiManager)
58
- : uiManager_(std::move(uiManager)) {}
59
-
60
- UIManagerBinding::~UIManagerBinding() {
61
- LOG(WARNING) << "UIManagerBinding::~UIManagerBinding() was called (address: "
62
- << this << ").";
63
- }
64
-
65
- jsi::Value UIManagerBinding::getInspectorDataForInstance(
66
- jsi::Runtime& runtime,
67
- const EventEmitter& eventEmitter) const {
68
- auto eventTarget = eventEmitter.eventTarget_;
69
- EventEmitter::DispatchMutex().lock();
70
-
71
- if (!runtime.global().hasProperty(runtime, "__fbBatchedBridge") ||
72
- !eventTarget) {
73
- return jsi::Value::undefined();
74
- }
75
-
76
- eventTarget->retain(runtime);
77
- auto instanceHandle = eventTarget->getInstanceHandle(runtime);
78
- eventTarget->release(runtime);
79
- EventEmitter::DispatchMutex().unlock();
80
-
81
- if (instanceHandle.isUndefined()) {
82
- return jsi::Value::undefined();
83
- }
84
-
85
- return callMethodOfModule(
86
- runtime,
87
- "ReactFabric",
88
- "getInspectorDataForInstance",
89
- {std::move(instanceHandle)});
90
- }
91
-
92
- void UIManagerBinding::dispatchEvent(
93
- jsi::Runtime& runtime,
94
- const EventTarget* eventTarget,
95
- const std::string& type,
96
- ReactEventPriority priority,
97
- const EventPayload& eventPayload) const {
98
- SystraceSection s("UIManagerBinding::dispatchEvent", "type", type);
99
-
100
- if (eventPayload.getType() == EventPayloadType::PointerEvent) {
101
- auto pointerEvent = static_cast<const PointerEvent&>(eventPayload);
102
- auto dispatchCallback = [this](
103
- jsi::Runtime& runtime,
104
- const EventTarget* eventTarget,
105
- const std::string& type,
106
- ReactEventPriority priority,
107
- const EventPayload& eventPayload) {
108
- this->dispatchEventToJS(
109
- runtime, eventTarget, type, priority, eventPayload);
110
- };
111
- pointerEventsProcessor_.interceptPointerEvent(
112
- runtime,
113
- eventTarget,
114
- type,
115
- priority,
116
- pointerEvent,
117
- dispatchCallback,
118
- *uiManager_);
119
- } else {
120
- dispatchEventToJS(runtime, eventTarget, type, priority, eventPayload);
121
- }
122
- }
123
-
124
- void UIManagerBinding::dispatchEventToJS(
125
- jsi::Runtime& runtime,
126
- const EventTarget* eventTarget,
127
- const std::string& type,
128
- ReactEventPriority priority,
129
- const EventPayload& eventPayload) const {
130
- auto payload = eventPayload.asJSIValue(runtime);
131
-
132
- // If a payload is null, the factory has decided to cancel the event
133
- if (payload.isNull()) {
134
- return;
135
- }
136
-
137
- auto instanceHandle = eventTarget != nullptr
138
- ? [&]() {
139
- auto instanceHandle = eventTarget->getInstanceHandle(runtime);
140
- if (instanceHandle.isUndefined()) {
141
- return jsi::Value::null();
142
- }
143
-
144
- // Mixing `target` into `payload`.
145
- if (!payload.isObject()) {
146
- LOG(ERROR) << "payload for dispatchEvent is not an object: " << eventTarget->getTag();
147
- }
148
- react_native_assert(payload.isObject());
149
- payload.asObject(runtime).setProperty(runtime, "target", eventTarget->getTag());
150
- return instanceHandle;
151
- }()
152
- : jsi::Value::null();
153
-
154
- if (instanceHandle.isNull()) {
155
- LOG(WARNING) << "instanceHandle is null, event will be dropped";
156
- }
157
-
158
- auto& eventHandlerWrapper =
159
- static_cast<const EventHandlerWrapper&>(*eventHandler_);
160
-
161
- currentEventPriority_ = priority;
162
- eventHandlerWrapper.callback.call(
163
- runtime,
164
- {std::move(instanceHandle),
165
- jsi::String::createFromUtf8(runtime, type),
166
- std::move(payload)});
167
- currentEventPriority_ = ReactEventPriority::Default;
168
- }
169
-
170
- void UIManagerBinding::invalidate() const {
171
- uiManager_->setDelegate(nullptr);
172
- }
173
-
174
- static void validateArgumentCount(
175
- jsi::Runtime& runtime,
176
- const std::string& methodName,
177
- size_t expected,
178
- size_t actual) {
179
- if (actual < expected) {
180
- throw jsi::JSError(
181
- runtime,
182
- methodName + " requires " + std::to_string(expected) +
183
- " arguments, but only " + std::to_string(actual) + " were passed");
184
- }
185
- }
186
-
187
- jsi::Value UIManagerBinding::get(
188
- jsi::Runtime& runtime,
189
- const jsi::PropNameID& name) {
190
- auto methodName = name.utf8(runtime);
191
- SystraceSection s("UIManagerBinding::get", "name", methodName);
192
-
193
- // Convert shared_ptr<UIManager> to a raw ptr
194
- // Why? Because:
195
- // 1) UIManagerBinding strongly retains UIManager. The JS VM
196
- // strongly retains UIManagerBinding (through the JSI).
197
- // These functions are JSI functions and are only called via
198
- // the JS VM; if the JS VM is torn down, those functions can't
199
- // execute and these lambdas won't execute.
200
- // 2) The UIManager is only deallocated when all references to it
201
- // are deallocated, including the UIManagerBinding. That only
202
- // happens when the JS VM is deallocated. So, the raw pointer
203
- // is safe.
204
- //
205
- // Even if it's safe, why not just use shared_ptr anyway as
206
- // extra insurance?
207
- // 1) Using shared_ptr or weak_ptr when they're not needed is
208
- // a pessimisation. It's more instructions executed without
209
- // any additional value in this case.
210
- // 2) How and when exactly these lambdas is deallocated is
211
- // complex. Adding shared_ptr to them which causes the UIManager
212
- // to potentially live longer is unnecessary, complicated cognitive
213
- // overhead.
214
- // 3) There is a strong suspicion that retaining UIManager from
215
- // these C++ lambdas, which are retained by an object that is held onto
216
- // by the JSI, caused some crashes upon deallocation of the
217
- // Scheduler and JS VM. This could happen if, for instance, C++
218
- // semantics cause these lambda to not be deallocated until
219
- // a CPU tick (or more) after the JS VM is deallocated.
220
- UIManager* uiManager = uiManager_.get();
221
-
222
- // Semantic: Creates a new node with given pieces.
223
- if (methodName == "createNode") {
224
- auto paramCount = 5;
225
- return jsi::Function::createFromHostFunction(
226
- runtime,
227
- name,
228
- paramCount,
229
- [uiManager, methodName, paramCount](
230
- jsi::Runtime& runtime,
231
- const jsi::Value& /*thisValue*/,
232
- const jsi::Value* arguments,
233
- size_t count) -> jsi::Value {
234
- validateArgumentCount(runtime, methodName, paramCount, count);
235
-
236
- auto instanceHandle =
237
- instanceHandleFromValue(runtime, arguments[4], arguments[0]);
238
- if (!instanceHandle) {
239
- react_native_assert(false);
240
- return jsi::Value::undefined();
241
- }
242
-
243
- return valueFromShadowNode(
244
- runtime,
245
- uiManager->createNode(
246
- tagFromValue(arguments[0]),
247
- stringFromValue(runtime, arguments[1]),
248
- surfaceIdFromValue(runtime, arguments[2]),
249
- RawProps(runtime, arguments[3]),
250
- instanceHandle));
251
- });
252
- }
253
-
254
- // Semantic: Clones the node with *same* props and *same* children.
255
- if (methodName == "cloneNode") {
256
- auto paramCount = 1;
257
- return jsi::Function::createFromHostFunction(
258
- runtime,
259
- name,
260
- paramCount,
261
- [uiManager, methodName, paramCount](
262
- jsi::Runtime& runtime,
263
- const jsi::Value& /*thisValue*/,
264
- const jsi::Value* arguments,
265
- size_t count) -> jsi::Value {
266
- validateArgumentCount(runtime, methodName, paramCount, count);
267
-
268
- return valueFromShadowNode(
269
- runtime,
270
- uiManager->cloneNode(
271
- *shadowNodeFromValue(runtime, arguments[0])));
272
- });
273
- }
274
-
275
- if (methodName == "setIsJSResponder") {
276
- auto paramCount = 3;
277
- return jsi::Function::createFromHostFunction(
278
- runtime,
279
- name,
280
- paramCount,
281
- [uiManager, methodName, paramCount](
282
- jsi::Runtime& runtime,
283
- const jsi::Value& /*thisValue*/,
284
- const jsi::Value* arguments,
285
- size_t count) -> jsi::Value {
286
- validateArgumentCount(runtime, methodName, paramCount, count);
287
-
288
- uiManager->setIsJSResponder(
289
- shadowNodeFromValue(runtime, arguments[0]),
290
- arguments[1].getBool(),
291
- arguments[2].getBool());
292
-
293
- return jsi::Value::undefined();
294
- });
295
- }
296
-
297
- if (methodName == "findNodeAtPoint") {
298
- auto paramCount = 4;
299
- return jsi::Function::createFromHostFunction(
300
- runtime,
301
- name,
302
- paramCount,
303
- [uiManager, methodName, paramCount](
304
- jsi::Runtime& runtime,
305
- const jsi::Value& /*thisValue*/,
306
- const jsi::Value* arguments,
307
- size_t count) {
308
- validateArgumentCount(runtime, methodName, paramCount, count);
309
-
310
- auto node = shadowNodeFromValue(runtime, arguments[0]);
311
- auto locationX = (Float)arguments[1].getNumber();
312
- auto locationY = (Float)arguments[2].getNumber();
313
- auto onSuccessFunction =
314
- arguments[3].getObject(runtime).getFunction(runtime);
315
- auto targetNode =
316
- uiManager->findNodeAtPoint(node, Point{locationX, locationY});
317
- auto& eventTarget = targetNode->getEventEmitter()->eventTarget_;
318
-
319
- EventEmitter::DispatchMutex().lock();
320
- eventTarget->retain(runtime);
321
- auto instanceHandle = eventTarget->getInstanceHandle(runtime);
322
- eventTarget->release(runtime);
323
- EventEmitter::DispatchMutex().unlock();
324
-
325
- onSuccessFunction.call(runtime, std::move(instanceHandle));
326
- return jsi::Value::undefined();
327
- });
328
- }
329
-
330
- // Semantic: Clones the node with *same* props and *empty* children.
331
- if (methodName == "cloneNodeWithNewChildren") {
332
- auto paramCount = 1;
333
- return jsi::Function::createFromHostFunction(
334
- runtime,
335
- name,
336
- paramCount,
337
- [uiManager, methodName, paramCount](
338
- jsi::Runtime& runtime,
339
- const jsi::Value& /*thisValue*/,
340
- const jsi::Value* arguments,
341
- size_t count) -> jsi::Value {
342
- validateArgumentCount(runtime, methodName, paramCount, count);
343
-
344
- return valueFromShadowNode(
345
- runtime,
346
- uiManager->cloneNode(
347
- *shadowNodeFromValue(runtime, arguments[0]),
348
- ShadowNode::emptySharedShadowNodeSharedList()));
349
- });
350
- }
351
-
352
- // Semantic: Clones the node with *given* props and *same* children.
353
- if (methodName == "cloneNodeWithNewProps") {
354
- auto paramCount = 2;
355
- return jsi::Function::createFromHostFunction(
356
- runtime,
357
- name,
358
- paramCount,
359
- [uiManager, methodName, paramCount](
360
- jsi::Runtime& runtime,
361
- const jsi::Value& /*thisValue*/,
362
- const jsi::Value* arguments,
363
- size_t count) -> jsi::Value {
364
- validateArgumentCount(runtime, methodName, paramCount, count);
365
-
366
- const auto& rawProps = RawProps(runtime, arguments[1]);
367
- return valueFromShadowNode(
368
- runtime,
369
- uiManager->cloneNode(
370
- *shadowNodeFromValue(runtime, arguments[0]),
371
- nullptr,
372
- &rawProps));
373
- });
374
- }
375
-
376
- // Semantic: Clones the node with *given* props and *empty* children.
377
- if (methodName == "cloneNodeWithNewChildrenAndProps") {
378
- auto paramCount = 2;
379
- return jsi::Function::createFromHostFunction(
380
- runtime,
381
- name,
382
- paramCount,
383
- [uiManager, methodName, paramCount](
384
- jsi::Runtime& runtime,
385
- const jsi::Value& /*thisValue*/,
386
- const jsi::Value* arguments,
387
- size_t count) -> jsi::Value {
388
- validateArgumentCount(runtime, methodName, paramCount, count);
389
-
390
- const auto& rawProps = RawProps(runtime, arguments[1]);
391
- return valueFromShadowNode(
392
- runtime,
393
- uiManager->cloneNode(
394
- *shadowNodeFromValue(runtime, arguments[0]),
395
- ShadowNode::emptySharedShadowNodeSharedList(),
396
- &rawProps));
397
- });
398
- }
399
-
400
- if (methodName == "appendChild") {
401
- auto paramCount = 2;
402
- return jsi::Function::createFromHostFunction(
403
- runtime,
404
- name,
405
- paramCount,
406
- [uiManager, methodName, paramCount](
407
- jsi::Runtime& runtime,
408
- const jsi::Value& /*thisValue*/,
409
- const jsi::Value* arguments,
410
- size_t count) -> jsi::Value {
411
- validateArgumentCount(runtime, methodName, paramCount, count);
412
-
413
- uiManager->appendChild(
414
- shadowNodeFromValue(runtime, arguments[0]),
415
- shadowNodeFromValue(runtime, arguments[1]));
416
- return jsi::Value::undefined();
417
- });
418
- }
419
-
420
- if (methodName == "createChildSet") {
421
- return jsi::Function::createFromHostFunction(
422
- runtime,
423
- name,
424
- 0,
425
- [](jsi::Runtime& runtime,
426
- const jsi::Value& /*thisValue*/,
427
- const jsi::Value* /*arguments*/,
428
- size_t /*count*/) -> jsi::Value {
429
- auto shadowNodeList = std::make_shared<ShadowNode::ListOfShared>(
430
- ShadowNode::ListOfShared({}));
431
- return valueFromShadowNodeList(runtime, shadowNodeList);
432
- });
433
- }
434
-
435
- if (methodName == "appendChildToSet") {
436
- auto paramCount = 2;
437
- return jsi::Function::createFromHostFunction(
438
- runtime,
439
- name,
440
- paramCount,
441
- [methodName, paramCount](
442
- jsi::Runtime& runtime,
443
- const jsi::Value& /*thisValue*/,
444
- const jsi::Value* arguments,
445
- size_t count) -> jsi::Value {
446
- validateArgumentCount(runtime, methodName, paramCount, count);
447
-
448
- auto shadowNodeList = shadowNodeListFromValue(runtime, arguments[0]);
449
- auto shadowNode = shadowNodeFromValue(runtime, arguments[1]);
450
- shadowNodeList->push_back(shadowNode);
451
- return jsi::Value::undefined();
452
- });
453
- }
454
-
455
- if (methodName == "completeRoot") {
456
- auto paramCount = 2;
457
- std::weak_ptr<UIManager> weakUIManager = uiManager_;
458
- // Enhanced version of the method that uses `backgroundExecutor` and
459
- // captures a shared pointer to `UIManager`.
460
- return jsi::Function::createFromHostFunction(
461
- runtime,
462
- name,
463
- paramCount,
464
- [weakUIManager, uiManager, methodName, paramCount](
465
- jsi::Runtime& runtime,
466
- const jsi::Value& /*thisValue*/,
467
- const jsi::Value* arguments,
468
- size_t count) -> jsi::Value {
469
- validateArgumentCount(runtime, methodName, paramCount, count);
470
-
471
- auto runtimeSchedulerBinding =
472
- RuntimeSchedulerBinding::getBinding(runtime);
473
- auto surfaceId = surfaceIdFromValue(runtime, arguments[0]);
474
- ShadowTree::CommitOptions options = {/* .enableStateReconciliation = */ true, /* .mountSynchronously = */ false};
475
-
476
- if (!uiManager->backgroundExecutor_ ||
477
- (runtimeSchedulerBinding &&
478
- runtimeSchedulerBinding->getIsSynchronous())) {
479
- auto weakShadowNodeList =
480
- weakShadowNodeListFromValue(runtime, arguments[1]);
481
- auto shadowNodeList =
482
- shadowNodeListFromWeakList(weakShadowNodeList);
483
- if (shadowNodeList) {
484
- uiManager->completeSurface(
485
- surfaceId,
486
- shadowNodeList,
487
- options);
488
- }
489
- } else {
490
- auto weakShadowNodeList =
491
- weakShadowNodeListFromValue(runtime, arguments[1]);
492
- static std::atomic_uint_fast8_t completeRootEventCounter{0};
493
- static std::atomic_uint_fast32_t mostRecentSurfaceId{0};
494
- completeRootEventCounter += 1;
495
- mostRecentSurfaceId = surfaceId;
496
- uiManager->backgroundExecutor_(
497
- [weakUIManager,
498
- weakShadowNodeList,
499
- surfaceId,
500
- eventCount = completeRootEventCounter.load()] {
501
- auto shouldYield = [=]() -> bool {
502
- // If `completeRootEventCounter` was incremented, another
503
- // `completeSurface` call has been scheduled and current
504
- // `completeSurface` should yield to it.
505
- return completeRootEventCounter > eventCount &&
506
- mostRecentSurfaceId == surfaceId;
507
- };
508
- auto shadowNodeList =
509
- shadowNodeListFromWeakList(weakShadowNodeList);
510
- auto strongUIManager = weakUIManager.lock();
511
- ShadowTree::CommitOptions options = {/* .enableStateReconciliation = */ true, /* .mountSynchronously = */ false, /* .shouldYield = */ shouldYield};
512
- if (shadowNodeList && strongUIManager) {
513
- strongUIManager->completeSurface(
514
- surfaceId,
515
- shadowNodeList,
516
- options);
517
- }
518
- });
519
- }
520
-
521
- return jsi::Value::undefined();
522
- });
523
- }
524
-
525
- if (methodName == "registerEventHandler") {
526
- auto paramCount = 1;
527
- return jsi::Function::createFromHostFunction(
528
- runtime,
529
- name,
530
- paramCount,
531
- [this, methodName, paramCount](
532
- jsi::Runtime& runtime,
533
- const jsi::Value& /*thisValue*/,
534
- const jsi::Value* arguments,
535
- size_t count) -> jsi::Value {
536
- validateArgumentCount(runtime, methodName, paramCount, count);
537
-
538
- auto eventHandler =
539
- arguments[0].getObject(runtime).getFunction(runtime);
540
- eventHandler_ =
541
- std::make_unique<EventHandlerWrapper>(std::move(eventHandler));
542
- return jsi::Value::undefined();
543
- });
544
- }
545
-
546
- if (methodName == "getRelativeLayoutMetrics") {
547
- auto paramCount = 2;
548
- return jsi::Function::createFromHostFunction(
549
- runtime,
550
- name,
551
- paramCount,
552
- [uiManager, methodName, paramCount](
553
- jsi::Runtime& runtime,
554
- const jsi::Value& /*thisValue*/,
555
- const jsi::Value* arguments,
556
- size_t count) -> jsi::Value {
557
- validateArgumentCount(runtime, methodName, paramCount, count);
558
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ true};
559
-
560
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
561
- *shadowNodeFromValue(runtime, arguments[0]),
562
- shadowNodeFromValue(runtime, arguments[1]).get(),
563
- policy);
564
- auto frame = layoutMetrics.frame;
565
- auto result = jsi::Object(runtime);
566
- result.setProperty(runtime, "left", frame.origin.x);
567
- result.setProperty(runtime, "top", frame.origin.y);
568
- result.setProperty(runtime, "width", frame.size.width);
569
- result.setProperty(runtime, "height", frame.size.height);
570
- return result;
571
- });
572
- }
573
-
574
- if (methodName == "dispatchCommand") {
575
- auto paramCount = 3;
576
- return jsi::Function::createFromHostFunction(
577
- runtime,
578
- name,
579
- paramCount,
580
- [uiManager, methodName, paramCount](
581
- jsi::Runtime& runtime,
582
- const jsi::Value& /*thisValue*/,
583
- const jsi::Value* arguments,
584
- size_t count) -> jsi::Value {
585
- validateArgumentCount(runtime, methodName, paramCount, count);
586
-
587
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
588
- if (shadowNode) {
589
- uiManager->dispatchCommand(
590
- shadowNode,
591
- stringFromValue(runtime, arguments[1]),
592
- commandArgsFromValue(runtime, arguments[2]));
593
- }
594
- return jsi::Value::undefined();
595
- });
596
- }
597
-
598
- if (methodName == "setNativeProps") {
599
- auto paramCount = 2;
600
- return jsi::Function::createFromHostFunction(
601
- runtime,
602
- name,
603
- paramCount,
604
- [uiManager, methodName, paramCount](
605
- jsi::Runtime& runtime,
606
- const jsi::Value&,
607
- const jsi::Value* arguments,
608
- size_t count) -> jsi::Value {
609
- validateArgumentCount(runtime, methodName, paramCount, count);
610
-
611
- uiManager->setNativeProps_DEPRECATED(
612
- shadowNodeFromValue(runtime, arguments[0]),
613
- RawProps(runtime, arguments[1]));
614
-
615
- return jsi::Value::undefined();
616
- });
617
- }
618
-
619
- // Legacy API
620
- if (methodName == "measureLayout") {
621
- auto paramCount = 4;
622
- return jsi::Function::createFromHostFunction(
623
- runtime,
624
- name,
625
- paramCount,
626
- [uiManager, methodName, paramCount](
627
- jsi::Runtime& runtime,
628
- const jsi::Value& /*thisValue*/,
629
- const jsi::Value* arguments,
630
- size_t count) {
631
- validateArgumentCount(runtime, methodName, paramCount, count);
632
-
633
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
634
-
635
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
636
- *shadowNodeFromValue(runtime, arguments[0]),
637
- shadowNodeFromValue(runtime, arguments[1]).get(),
638
- policy);
639
-
640
- if (layoutMetrics == EmptyLayoutMetrics) {
641
- auto onFailFunction =
642
- arguments[2].getObject(runtime).getFunction(runtime);
643
- onFailFunction.call(runtime);
644
- return jsi::Value::undefined();
645
- }
646
-
647
- auto onSuccessFunction =
648
- arguments[3].getObject(runtime).getFunction(runtime);
649
- auto frame = layoutMetrics.frame;
650
-
651
- onSuccessFunction.call(
652
- runtime,
653
- {jsi::Value{(double)frame.origin.x},
654
- jsi::Value{(double)frame.origin.y},
655
- jsi::Value{(double)frame.size.width},
656
- jsi::Value{(double)frame.size.height}});
657
- return jsi::Value::undefined();
658
- });
659
- }
660
-
661
- if (methodName == "measure") {
662
- auto paramCount = 2;
663
- return jsi::Function::createFromHostFunction(
664
- runtime,
665
- name,
666
- paramCount,
667
- [uiManager, methodName, paramCount](
668
- jsi::Runtime& runtime,
669
- const jsi::Value& /*thisValue*/,
670
- const jsi::Value* arguments,
671
- size_t count) {
672
- validateArgumentCount(runtime, methodName, paramCount, count);
673
-
674
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
675
-
676
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
677
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
678
- *shadowNode, nullptr, policy);
679
- auto onSuccessFunction =
680
- arguments[1].getObject(runtime).getFunction(runtime);
681
-
682
- if (layoutMetrics == EmptyLayoutMetrics) {
683
- onSuccessFunction.call(runtime, {0, 0, 0, 0, 0, 0});
684
- return jsi::Value::undefined();
685
- }
686
- auto newestCloneOfShadowNode =
687
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
688
-
689
- auto layoutableShadowNode = traitCast<LayoutableShadowNode const*>(
690
- newestCloneOfShadowNode.get());
691
- Point originRelativeToParent = layoutableShadowNode != nullptr
692
- ? layoutableShadowNode->getLayoutMetrics().frame.origin
693
- : Point();
694
-
695
- auto frame = layoutMetrics.frame;
696
- onSuccessFunction.call(
697
- runtime,
698
- {jsi::Value{(double)originRelativeToParent.x},
699
- jsi::Value{(double)originRelativeToParent.y},
700
- jsi::Value{(double)frame.size.width},
701
- jsi::Value{(double)frame.size.height},
702
- jsi::Value{(double)frame.origin.x},
703
- jsi::Value{(double)frame.origin.y}});
704
- return jsi::Value::undefined();
705
- });
706
- }
707
-
708
- if (methodName == "measureInWindow") {
709
- auto paramCount = 2;
710
- return jsi::Function::createFromHostFunction(
711
- runtime,
712
- name,
713
- paramCount,
714
- [uiManager, methodName, paramCount](
715
- jsi::Runtime& runtime,
716
- const jsi::Value& /*thisValue*/,
717
- const jsi::Value* arguments,
718
- size_t count) {
719
- validateArgumentCount(runtime, methodName, paramCount, count);
720
-
721
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false, /* .includeViewportOffset = */ true};
722
-
723
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
724
- *shadowNodeFromValue(runtime, arguments[0]),
725
- nullptr,
726
- policy);
727
-
728
- auto onSuccessFunction =
729
- arguments[1].getObject(runtime).getFunction(runtime);
730
-
731
- if (layoutMetrics == EmptyLayoutMetrics) {
732
- onSuccessFunction.call(runtime, {0, 0, 0, 0});
733
- return jsi::Value::undefined();
734
- }
735
-
736
- auto frame = layoutMetrics.frame;
737
- onSuccessFunction.call(
738
- runtime,
739
- {jsi::Value{(double)frame.origin.x},
740
- jsi::Value{(double)frame.origin.y},
741
- jsi::Value{(double)frame.size.width},
742
- jsi::Value{(double)frame.size.height}});
743
- return jsi::Value::undefined();
744
- });
745
- }
746
-
747
- if (methodName == "sendAccessibilityEvent") {
748
- auto paramCount = 2;
749
- return jsi::Function::createFromHostFunction(
750
- runtime,
751
- name,
752
- paramCount,
753
- [uiManager, methodName, paramCount](
754
- jsi::Runtime& runtime,
755
- const jsi::Value& /*thisValue*/,
756
- const jsi::Value* arguments,
757
- size_t count) -> jsi::Value {
758
- validateArgumentCount(runtime, methodName, paramCount, count);
759
-
760
- uiManager->sendAccessibilityEvent(
761
- shadowNodeFromValue(runtime, arguments[0]),
762
- stringFromValue(runtime, arguments[1]));
763
-
764
- return jsi::Value::undefined();
765
- });
766
- }
767
-
768
- if (methodName == "configureNextLayoutAnimation") {
769
- auto paramCount = 3;
770
- return jsi::Function::createFromHostFunction(
771
- runtime,
772
- name,
773
- paramCount,
774
- [uiManager, methodName, paramCount](
775
- jsi::Runtime& runtime,
776
- const jsi::Value& /*thisValue*/,
777
- const jsi::Value* arguments,
778
- size_t count) -> jsi::Value {
779
- validateArgumentCount(runtime, methodName, paramCount, count);
780
-
781
- uiManager->configureNextLayoutAnimation(
782
- runtime,
783
- // TODO: pass in JSI value instead of folly::dynamic to RawValue
784
- RawValue(commandArgsFromValue(runtime, arguments[0])),
785
- arguments[1],
786
- arguments[2]);
787
- return jsi::Value::undefined();
788
- });
789
- }
790
-
791
- if (methodName == "unstable_getCurrentEventPriority") {
792
- return jsi::Function::createFromHostFunction(
793
- runtime,
794
- name,
795
- 0,
796
- [this](
797
- jsi::Runtime& /*runtime*/,
798
- const jsi::Value& /*thisValue*/,
799
- const jsi::Value* /*arguments*/,
800
- size_t /*count*/) -> jsi::Value {
801
- return {serialize(currentEventPriority_)};
802
- });
803
- }
804
-
805
- if (methodName == "unstable_DefaultEventPriority") {
806
- return {serialize(ReactEventPriority::Default)};
807
- }
808
-
809
- if (methodName == "unstable_DiscreteEventPriority") {
810
- return {serialize(ReactEventPriority::Discrete)};
811
- }
812
-
813
- if (methodName == "findShadowNodeByTag_DEPRECATED") {
814
- auto paramCount = 1;
815
- return jsi::Function::createFromHostFunction(
816
- runtime,
817
- name,
818
- paramCount,
819
- [uiManager, methodName, paramCount](
820
- jsi::Runtime& runtime,
821
- const jsi::Value&,
822
- const jsi::Value* arguments,
823
- size_t count) -> jsi::Value {
824
- validateArgumentCount(runtime, methodName, paramCount, count);
825
-
826
- auto shadowNode = uiManager->findShadowNodeByTag_DEPRECATED(
827
- tagFromValue(arguments[0]));
828
-
829
- if (!shadowNode) {
830
- return jsi::Value::null();
831
- }
832
-
833
- return valueFromShadowNode(runtime, shadowNode);
834
- });
835
- }
836
-
837
- /**
838
- * DOM traversal and layout APIs
839
- */
840
-
841
- if (methodName == "getBoundingClientRect") {
842
- // This is a React Native implementation of
843
- // `Element.prototype.getBoundingClientRect` (see
844
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect).
845
-
846
- // This is similar to `measureInWindow`, except it's explicitly synchronous
847
- // (returns the result instead of passing it to a callback).
848
-
849
- // It allows indicating whether to include transforms so it can also be used
850
- // to implement methods like
851
- // [`offsetWidth`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth)
852
- // and
853
- // [`offsetHeight`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight).
854
-
855
- // getBoundingClientRect(shadowNode: ShadowNode, includeTransform: boolean):
856
- // [
857
- // /* x: */ number,
858
- // /* y: */ number,
859
- // /* width: */ number,
860
- // /* height: */ number
861
- // ]
862
- auto paramCount = 2;
863
- return jsi::Function::createFromHostFunction(
864
- runtime,
865
- name,
866
- paramCount,
867
- [uiManager, methodName, paramCount](
868
- jsi::Runtime& runtime,
869
- const jsi::Value& /*thisValue*/,
870
- const jsi::Value* arguments,
871
- size_t count) -> jsi::Value {
872
- validateArgumentCount(runtime, methodName, paramCount, count);
873
-
874
- bool includeTransform = arguments[1].getBool();
875
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ includeTransform, /* .includeViewportOffset = */ true};
876
-
877
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
878
- *shadowNodeFromValue(runtime, arguments[0]),
879
- nullptr,
880
- policy);
881
-
882
- if (layoutMetrics == EmptyLayoutMetrics) {
883
- return jsi::Value::undefined();
884
- }
885
-
886
- auto frame = layoutMetrics.frame;
887
- return jsi::Array::createWithElements(
888
- runtime,
889
- jsi::Value{(double)frame.origin.x},
890
- jsi::Value{(double)frame.origin.y},
891
- jsi::Value{(double)frame.size.width},
892
- jsi::Value{(double)frame.size.height});
893
- });
894
- }
895
-
896
- if (methodName == "getParentNode") {
897
- // This is a React Native implementation of `Node.prototype.parentNode`
898
- // (see https://developer.mozilla.org/en-US/docs/Web/API/Node/parentNode).
899
-
900
- // If a version of the given shadow node is present in the current revision
901
- // of an active shadow tree, it returns the instance handle of its parent.
902
- // Otherwise, it returns null.
903
-
904
- // getParent(shadowNode: ShadowNode): ?InstanceHandle
905
- auto paramCount = 1;
906
- return jsi::Function::createFromHostFunction(
907
- runtime,
908
- name,
909
- paramCount,
910
- [uiManager, methodName, paramCount](
911
- jsi::Runtime& runtime,
912
- const jsi::Value& /*thisValue*/,
913
- const jsi::Value* arguments,
914
- size_t count) -> jsi::Value {
915
- validateArgumentCount(runtime, methodName, paramCount, count);
916
-
917
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
918
- auto parentShadowNode =
919
- uiManager->getNewestParentOfShadowNode(*shadowNode);
920
-
921
- // shadowNode is a RootShadowNode
922
- if (!parentShadowNode) {
923
- return jsi::Value::null();
924
- }
925
-
926
- return (*parentShadowNode).getInstanceHandle(runtime);
927
- });
928
- }
929
-
930
- if (methodName == "getChildNodes") {
931
- // This is a React Native implementation of `Node.prototype.childNodes`
932
- // (see https://developer.mozilla.org/en-US/docs/Web/API/Node/childNodes).
933
-
934
- // If a version of the given shadow node is present in the current revision
935
- // of an active shadow tree, it returns an array of instance handles of its
936
- // children. Otherwise, it returns an empty array.
937
-
938
- // getChildren(shadowNode: ShadowNode): Array<InstanceHandle>
939
- auto paramCount = 1;
940
- return jsi::Function::createFromHostFunction(
941
- runtime,
942
- name,
943
- paramCount,
944
- [uiManager, methodName, paramCount](
945
- jsi::Runtime& runtime,
946
- const jsi::Value& /*thisValue*/,
947
- const jsi::Value* arguments,
948
- size_t count) -> jsi::Value {
949
- validateArgumentCount(runtime, methodName, paramCount, count);
950
-
951
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
952
-
953
- auto newestCloneOfShadowNode =
954
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
955
-
956
- // There's no version of this node in the current shadow tree
957
- if (newestCloneOfShadowNode == nullptr) {
958
- return jsi::Array(runtime, 0);
959
- }
960
-
961
- auto childShadowNodes = newestCloneOfShadowNode->getChildren();
962
- return getArrayOfInstanceHandlesFromShadowNodes(
963
- childShadowNodes, runtime);
964
- });
965
- }
966
-
967
- if (methodName == "isConnected") {
968
- // This is a React Native implementation of `Node.prototype.isConnected`
969
- // (see https://developer.mozilla.org/en-US/docs/Web/API/Node/isConnected).
970
-
971
- // Indicates whether a version of the given shadow node is present in
972
- // the current revision of an active shadow tree.
973
-
974
- // isConnected(shadowNode: ShadowNode): boolean
975
- auto paramCount = 1;
976
- return jsi::Function::createFromHostFunction(
977
- runtime,
978
- name,
979
- paramCount,
980
- [uiManager, methodName, paramCount](
981
- jsi::Runtime& runtime,
982
- const jsi::Value& /*thisValue*/,
983
- const jsi::Value* arguments,
984
- size_t count) -> jsi::Value {
985
- validateArgumentCount(runtime, methodName, paramCount, count);
986
-
987
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
988
-
989
- auto newestCloneOfShadowNode =
990
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
991
-
992
- return jsi::Value(newestCloneOfShadowNode != nullptr);
993
- });
994
- }
995
-
996
- if (methodName == "compareDocumentPosition") {
997
- // This is a React Native implementation of
998
- // `Node.prototype.compareDocumentPosition` (see
999
- // https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition).
1000
-
1001
- // It uses the version of the shadow nodes that are present in the current
1002
- // revision of the shadow tree (if any). If any of the nodes is not present,
1003
- // it just indicates they are disconnected.
1004
-
1005
- // compareDocumentPosition(shadowNode: ShadowNode, otherShadowNode:
1006
- // ShadowNode): number
1007
- auto paramCount = 2;
1008
- return jsi::Function::createFromHostFunction(
1009
- runtime,
1010
- name,
1011
- paramCount,
1012
- [uiManager, methodName, paramCount](
1013
- jsi::Runtime& runtime,
1014
- const jsi::Value& /*thisValue*/,
1015
- const jsi::Value* arguments,
1016
- size_t count) -> jsi::Value {
1017
- validateArgumentCount(runtime, methodName, paramCount, count);
1018
-
1019
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1020
- auto otherShadowNode = shadowNodeFromValue(runtime, arguments[1]);
1021
-
1022
- auto documentPosition =
1023
- uiManager->compareDocumentPosition(*shadowNode, *otherShadowNode);
1024
-
1025
- return jsi::Value(documentPosition);
1026
- });
1027
- }
1028
-
1029
- if (methodName == "getTextContent") {
1030
- // This is a React Native implementation of
1031
- // `Element.prototype.textContent` (see
1032
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/textContent).
1033
-
1034
- // It uses the version of the shadow node that is present in the current
1035
- // revision of the shadow tree.
1036
- // If the version is present, is traverses all its children in DFS and
1037
- // concatenates all the text contents. Otherwise, it returns an empty
1038
- // string.
1039
-
1040
- // This is also used to access the text content of text nodes, which does
1041
- // not need any traversal.
1042
-
1043
- // getTextContent(shadowNode: ShadowNode): string
1044
- auto paramCount = 1;
1045
- return jsi::Function::createFromHostFunction(
1046
- runtime,
1047
- name,
1048
- paramCount,
1049
- [uiManager, methodName, paramCount](
1050
- jsi::Runtime& runtime,
1051
- const jsi::Value& /*thisValue*/,
1052
- const jsi::Value* arguments,
1053
- size_t count) -> jsi::Value {
1054
- validateArgumentCount(runtime, methodName, paramCount, count);
1055
-
1056
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1057
-
1058
- auto textContent =
1059
- uiManager->getTextContentInNewestCloneOfShadowNode(*shadowNode);
1060
-
1061
- return jsi::Value(
1062
- runtime, jsi::String::createFromUtf8(runtime, textContent));
1063
- });
1064
- }
1065
-
1066
- if (methodName == "getOffset") {
1067
- // This is a method to access the offset information for a shadow node, to
1068
- // implement these methods:
1069
- // * `HTMLElement.prototype.offsetParent`: see
1070
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetParent.
1071
- // * `HTMLElement.prototype.offsetTop`: see
1072
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetTop.
1073
- // * `HTMLElement.prototype.offsetLeft`: see
1074
- // https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetLeft.
1075
-
1076
- // It uses the version of the shadow node that is present in the current
1077
- // revision of the shadow tree. If the node is not present or is not
1078
- // displayed (because any of its ancestors or itself have 'display: none'),
1079
- // it returns undefined. Otherwise, it returns its parent (as all nodes in
1080
- // React Native are currently "positioned") and its offset relative to its
1081
- // parent.
1082
-
1083
- // getOffset(shadowNode: ShadowNode):
1084
- // ?[
1085
- // /* parent: */ InstanceHandle,
1086
- // /* top: */ number,
1087
- // /* left: */ number,
1088
- // ]
1089
- auto paramCount = 1;
1090
- return jsi::Function::createFromHostFunction(
1091
- runtime,
1092
- name,
1093
- paramCount,
1094
- [uiManager, methodName, paramCount](
1095
- jsi::Runtime& runtime,
1096
- const jsi::Value& /*thisValue*/,
1097
- const jsi::Value* arguments,
1098
- size_t count) -> jsi::Value {
1099
- validateArgumentCount(runtime, methodName, paramCount, count);
1100
-
1101
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1102
-
1103
- auto newestCloneOfShadowNode =
1104
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
1105
- auto newestParentOfShadowNode =
1106
- uiManager->getNewestParentOfShadowNode(*shadowNode);
1107
- // The node is no longer part of an active shadow tree, or it is the
1108
- // root node
1109
- if (newestCloneOfShadowNode == nullptr ||
1110
- newestParentOfShadowNode == nullptr) {
1111
- return jsi::Value::undefined();
1112
- }
1113
-
1114
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
1115
-
1116
- // If the node is not displayed (itself or any of its ancestors has
1117
- // "display: none"), this returns an empty layout metrics object.
1118
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
1119
- *shadowNode, nullptr, policy);
1120
-
1121
- if (layoutMetrics == EmptyLayoutMetrics) {
1122
- return jsi::Value::undefined();
1123
- }
1124
-
1125
- auto layoutableShadowNode = traitCast<LayoutableShadowNode const*>(
1126
- newestCloneOfShadowNode.get());
1127
- // This should never happen
1128
- if (layoutableShadowNode == nullptr) {
1129
- return jsi::Value::undefined();
1130
- }
1131
-
1132
- auto layoutableParentShadowNode =
1133
- traitCast<LayoutableShadowNode const*>(
1134
- newestParentOfShadowNode.get());
1135
- // This should never happen
1136
- if (layoutableParentShadowNode == nullptr) {
1137
- return jsi::Value::undefined();
1138
- }
1139
-
1140
- auto originRelativeToParentOuterBorder =
1141
- layoutableShadowNode->getLayoutMetrics().frame.origin;
1142
-
1143
- // On the Web, offsets are computed from the inner border of the
1144
- // parent.
1145
- auto offsetTop = originRelativeToParentOuterBorder.y -
1146
- layoutableParentShadowNode->getLayoutMetrics().borderWidth.top;
1147
- auto offsetLeft = originRelativeToParentOuterBorder.x -
1148
- layoutableParentShadowNode->getLayoutMetrics().borderWidth.left;
1149
-
1150
- return jsi::Array::createWithElements(
1151
- runtime,
1152
- (*newestParentOfShadowNode).getInstanceHandle(runtime),
1153
- jsi::Value{(double)offsetTop},
1154
- jsi::Value{(double)offsetLeft});
1155
- });
1156
- }
1157
-
1158
- if (methodName == "getScrollPosition") {
1159
- // This is a method to access scroll information for a shadow node, to
1160
- // implement these methods:
1161
- // * `Element.prototype.scrollLeft`: see
1162
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft.
1163
- // * `Element.prototype.scrollTop`: see
1164
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollTop.
1165
-
1166
- // It uses the version of the shadow node that is present in the current
1167
- // revision of the shadow tree. If the node is not present or is not
1168
- // displayed (because any of its ancestors or itself have 'display: none'),
1169
- // it returns undefined. Otherwise, it returns the scroll position.
1170
-
1171
- // getScrollPosition(shadowNode: ShadowNode):
1172
- // ?[
1173
- // /* scrollLeft: */ number,
1174
- // /* scrollTop: */ number,
1175
- // ]
1176
- auto paramCount = 1;
1177
- return jsi::Function::createFromHostFunction(
1178
- runtime,
1179
- name,
1180
- paramCount,
1181
- [uiManager, methodName, paramCount](
1182
- jsi::Runtime& runtime,
1183
- const jsi::Value& /*thisValue*/,
1184
- const jsi::Value* arguments,
1185
- size_t count) -> jsi::Value {
1186
- validateArgumentCount(runtime, methodName, paramCount, count);
1187
-
1188
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1189
-
1190
- auto newestCloneOfShadowNode =
1191
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
1192
- // The node is no longer part of an active shadow tree, or it is the
1193
- // root node
1194
- if (newestCloneOfShadowNode == nullptr) {
1195
- return jsi::Value::undefined();
1196
- }
1197
-
1198
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
1199
-
1200
- // If the node is not displayed (itself or any of its ancestors has
1201
- // "display: none"), this returns an empty layout metrics object.
1202
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
1203
- *shadowNode, nullptr, policy);
1204
-
1205
- if (layoutMetrics == EmptyLayoutMetrics) {
1206
- return jsi::Value::undefined();
1207
- }
1208
-
1209
- auto layoutableShadowNode = traitCast<LayoutableShadowNode const*>(
1210
- newestCloneOfShadowNode.get());
1211
- // This should never happen
1212
- if (layoutableShadowNode == nullptr) {
1213
- return jsi::Value::undefined();
1214
- }
1215
-
1216
- auto scrollPosition = layoutableShadowNode->getContentOriginOffset();
1217
-
1218
- return jsi::Array::createWithElements(
1219
- runtime,
1220
- jsi::Value{scrollPosition.x == 0 ? 0 : (double)-scrollPosition.x},
1221
- jsi::Value{scrollPosition.y == 0 ? 0 : (double)-scrollPosition.y});
1222
- });
1223
- }
1224
-
1225
- if (methodName == "getScrollSize") {
1226
- // This is a method to access the scroll information of a shadow node, to
1227
- // implement these methods:
1228
- // * `Element.prototype.scrollWidth`: see
1229
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollWidth.
1230
- // * `Element.prototype.scrollHeight`: see
1231
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight.
1232
-
1233
- // It uses the version of the shadow node that is present in the current
1234
- // revision of the shadow tree. If the node is not present or is not
1235
- // displayed (because any of its ancestors or itself have 'display: none'),
1236
- // it returns undefined. Otherwise, it returns the scroll size.
1237
-
1238
- // getScrollSize(shadowNode: ShadowNode):
1239
- // ?[
1240
- // /* scrollWidth: */ number,
1241
- // /* scrollHeight: */ number,
1242
- // ]
1243
- auto paramCount = 1;
1244
- return jsi::Function::createFromHostFunction(
1245
- runtime,
1246
- name,
1247
- paramCount,
1248
- [uiManager, methodName, paramCount](
1249
- jsi::Runtime& runtime,
1250
- const jsi::Value& /*thisValue*/,
1251
- const jsi::Value* arguments,
1252
- size_t count) -> jsi::Value {
1253
- validateArgumentCount(runtime, methodName, paramCount, count);
1254
-
1255
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1256
-
1257
- auto newestCloneOfShadowNode =
1258
- uiManager->getNewestCloneOfShadowNode(*shadowNode);
1259
- // The node is no longer part of an active shadow tree, or it is the
1260
- // root node
1261
- if (newestCloneOfShadowNode == nullptr) {
1262
- return jsi::Value::undefined();
1263
- }
1264
-
1265
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
1266
-
1267
- // If the node is not displayed (itself or any of its ancestors has
1268
- // "display: none"), this returns an empty layout metrics object.
1269
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
1270
- *shadowNode, nullptr, policy);
1271
-
1272
- if (layoutMetrics == EmptyLayoutMetrics ||
1273
- layoutMetrics.displayType == DisplayType::Inline) {
1274
- return jsi::Value::undefined();
1275
- }
1276
-
1277
- auto layoutableShadowNode =
1278
- traitCast<YogaLayoutableShadowNode const*>(
1279
- newestCloneOfShadowNode.get());
1280
- // This should never happen
1281
- if (layoutableShadowNode == nullptr) {
1282
- return jsi::Value::undefined();
1283
- }
1284
-
1285
- Size scrollSize = getScrollSize(
1286
- layoutMetrics, layoutableShadowNode->getContentBounds());
1287
-
1288
- return jsi::Array::createWithElements(
1289
- runtime,
1290
- jsi::Value{(double)std::round(scrollSize.width)},
1291
- jsi::Value{(double)std::round(scrollSize.height)});
1292
- });
1293
- }
1294
-
1295
- if (methodName == "getInnerSize") {
1296
- // This is a method to access the inner size of a shadow node, to implement
1297
- // these methods:
1298
- // * `Element.prototype.clientWidth`: see
1299
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/clientWidth.
1300
- // * `Element.prototype.clientHeight`: see
1301
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/clientHeight.
1302
-
1303
- // It uses the version of the shadow node that is present in the current
1304
- // revision of the shadow tree. If the node is not present, it is not
1305
- // displayed (because any of its ancestors or itself have 'display: none'),
1306
- // or it has an inline display, it returns undefined.
1307
- // Otherwise, it returns its inner size.
1308
-
1309
- // getInnerSize(shadowNode: ShadowNode):
1310
- // ?[
1311
- // /* width: */ number,
1312
- // /* height: */ number,
1313
- // ]
1314
- auto paramCount = 1;
1315
- return jsi::Function::createFromHostFunction(
1316
- runtime,
1317
- name,
1318
- paramCount,
1319
- [uiManager, methodName, paramCount](
1320
- jsi::Runtime& runtime,
1321
- const jsi::Value& /*thisValue*/,
1322
- const jsi::Value* arguments,
1323
- size_t count) -> jsi::Value {
1324
- validateArgumentCount(runtime, methodName, paramCount, count);
1325
-
1326
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1327
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
1328
- // If the node is not displayed (itself or any of its ancestors has
1329
- // "display: none"), this returns an empty layout metrics object.
1330
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
1331
- *shadowNode, nullptr, policy);
1332
-
1333
- if (layoutMetrics == EmptyLayoutMetrics ||
1334
- layoutMetrics.displayType == DisplayType::Inline) {
1335
- return jsi::Value::undefined();
1336
- }
1337
-
1338
- auto paddingFrame = layoutMetrics.getPaddingFrame();
1339
-
1340
- return jsi::Array::createWithElements(
1341
- runtime,
1342
- jsi::Value{(double)std::round(paddingFrame.size.width)},
1343
- jsi::Value{(double)std::round(paddingFrame.size.height)});
1344
- });
1345
- }
1346
-
1347
- if (methodName == "getBorderSize") {
1348
- // This is a method to access the border size of a shadow node, to implement
1349
- // these methods:
1350
- // * `Element.prototype.clientLeft`: see
1351
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/clientLeft.
1352
- // * `Element.prototype.clientTop`: see
1353
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/clientTop.
1354
-
1355
- // It uses the version of the shadow node that is present in the current
1356
- // revision of the shadow tree. If the node is not present, it is not
1357
- // displayed (because any of its ancestors or itself have 'display: none'),
1358
- // or it has an inline display, it returns undefined.
1359
- // Otherwise, it returns its border size.
1360
-
1361
- // getBorderSize(shadowNode: ShadowNode):
1362
- // ?[
1363
- // /* topWidth: */ number,
1364
- // /* rightWidth: */ number,
1365
- // /* bottomWidth: */ number,
1366
- // /* leftWidth: */ number,
1367
- // ]
1368
- auto paramCount = 1;
1369
- return jsi::Function::createFromHostFunction(
1370
- runtime,
1371
- name,
1372
- paramCount,
1373
- [uiManager, methodName, paramCount](
1374
- jsi::Runtime& runtime,
1375
- const jsi::Value& /*thisValue*/,
1376
- const jsi::Value* arguments,
1377
- size_t count) -> jsi::Value {
1378
- validateArgumentCount(runtime, methodName, paramCount, count);
1379
-
1380
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1381
- LayoutableShadowNode::LayoutInspectingPolicy policy = {/* .includeTransform = */ false};
1382
- // If the node is not displayed (itself or any of its ancestors has
1383
- // "display: none"), this returns an empty layout metrics object.
1384
- auto layoutMetrics = uiManager->getRelativeLayoutMetrics(
1385
- *shadowNode, nullptr, policy);
1386
-
1387
- if (layoutMetrics == EmptyLayoutMetrics ||
1388
- layoutMetrics.displayType == DisplayType::Inline) {
1389
- return jsi::Value::undefined();
1390
- }
1391
-
1392
- return jsi::Array::createWithElements(
1393
- runtime,
1394
- jsi::Value{(double)std::round(layoutMetrics.borderWidth.top)},
1395
- jsi::Value{(double)std::round(layoutMetrics.borderWidth.right)},
1396
- jsi::Value{(double)std::round(layoutMetrics.borderWidth.bottom)},
1397
- jsi::Value{(double)std::round(layoutMetrics.borderWidth.left)});
1398
- });
1399
- }
1400
-
1401
- if (methodName == "getTagName") {
1402
- // This is a method to access the normalized tag name of a shadow node, to
1403
- // implement `Element.prototype.tagName` (see
1404
- // https://developer.mozilla.org/en-US/docs/Web/API/Element/tagName).
1405
-
1406
- // getTagName(shadowNode: ShadowNode): string
1407
- auto paramCount = 1;
1408
- return jsi::Function::createFromHostFunction(
1409
- runtime,
1410
- name,
1411
- paramCount,
1412
- [methodName, paramCount](
1413
- jsi::Runtime& runtime,
1414
- const jsi::Value& /*thisValue*/,
1415
- const jsi::Value* arguments,
1416
- size_t count) -> jsi::Value {
1417
- validateArgumentCount(runtime, methodName, paramCount, count);
1418
-
1419
- auto shadowNode = shadowNodeFromValue(runtime, arguments[0]);
1420
-
1421
- std::string canonicalComponentName = shadowNode->getComponentName();
1422
-
1423
- // FIXME(T162807327): Remove Android-specific prefixes and unify
1424
- // shadow node implementations
1425
- if (canonicalComponentName == "AndroidTextInput") {
1426
- canonicalComponentName = "TextInput";
1427
- } else if (canonicalComponentName == "AndroidSwitch") {
1428
- canonicalComponentName = "Switch";
1429
- }
1430
-
1431
- // Prefix with RN:
1432
- canonicalComponentName.insert(0, "RN:");
1433
-
1434
- return jsi::String::createFromUtf8(runtime, canonicalComponentName);
1435
- });
1436
- }
1437
-
1438
- /**
1439
- * Pointer Capture APIs
1440
- */
1441
- if (methodName == "hasPointerCapture") {
1442
- auto paramCount = 2;
1443
- return jsi::Function::createFromHostFunction(
1444
- runtime,
1445
- name,
1446
- paramCount,
1447
- [this, methodName, paramCount](
1448
- jsi::Runtime& runtime,
1449
- const jsi::Value& /*thisValue*/,
1450
- const jsi::Value* arguments,
1451
- size_t count) -> jsi::Value {
1452
- validateArgumentCount(runtime, methodName, paramCount, count);
1453
- bool isCapturing = pointerEventsProcessor_.hasPointerCapture(
1454
- static_cast<int>(arguments[1].asNumber()),
1455
- shadowNodeFromValue(runtime, arguments[0]).get());
1456
- return jsi::Value(isCapturing);
1457
- });
1458
- }
1459
-
1460
- if (methodName == "setPointerCapture") {
1461
- auto paramCount = 2;
1462
- return jsi::Function::createFromHostFunction(
1463
- runtime,
1464
- name,
1465
- paramCount,
1466
- [this, methodName, paramCount](
1467
- jsi::Runtime& runtime,
1468
- const jsi::Value& /*thisValue*/,
1469
- const jsi::Value* arguments,
1470
- size_t count) -> jsi::Value {
1471
- validateArgumentCount(runtime, methodName, paramCount, count);
1472
- pointerEventsProcessor_.setPointerCapture(
1473
- static_cast<int>(arguments[1].asNumber()),
1474
- shadowNodeFromValue(runtime, arguments[0]));
1475
- return jsi::Value::undefined();
1476
- });
1477
- }
1478
-
1479
- if (methodName == "releasePointerCapture") {
1480
- auto paramCount = 2;
1481
- return jsi::Function::createFromHostFunction(
1482
- runtime,
1483
- name,
1484
- paramCount,
1485
- [this, methodName, paramCount](
1486
- jsi::Runtime& runtime,
1487
- const jsi::Value& /*thisValue*/,
1488
- const jsi::Value* arguments,
1489
- size_t count) -> jsi::Value {
1490
- validateArgumentCount(runtime, methodName, paramCount, count);
1491
- pointerEventsProcessor_.releasePointerCapture(
1492
- static_cast<int>(arguments[1].asNumber()),
1493
- shadowNodeFromValue(runtime, arguments[0]).get());
1494
- return jsi::Value::undefined();
1495
- });
1496
- }
1497
-
1498
- return jsi::Value::undefined();
1499
- }
1500
-
1501
- UIManager& UIManagerBinding::getUIManager() {
1502
- return *uiManager_;
1503
- }
1504
-
1505
- } // namespace facebook::react