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,1038 +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 "YogaLayoutableShadowNode.h"
9
- #include <logger/react_native_log.h>
10
- #include <react/debug/flags.h>
11
- #include <react/debug/react_native_assert.h>
12
- #include <react/renderer/components/view/ViewProps.h>
13
- #include <react/renderer/components/view/ViewShadowNode.h>
14
- #include <react/renderer/components/view/conversions.h>
15
- #include <react/renderer/core/LayoutConstraints.h>
16
- #include <react/renderer/core/LayoutContext.h>
17
- #include <react/renderer/core/TraitCast.h>
18
- #include <react/renderer/debug/DebugStringConvertibleItem.h>
19
- #include <react/renderer/debug/SystraceSection.h>
20
- #include <react/utils/CoreFeatures.h>
21
- #include <yoga/Yoga.h>
22
- #include <algorithm>
23
- #include <limits>
24
- #include <memory>
25
-
26
- namespace facebook::react {
27
-
28
- static int FabricDefaultYogaLog(
29
- const YGConfigConstRef /*unused*/,
30
- const YGNodeConstRef /*unused*/,
31
- YGLogLevel level,
32
- const char* format,
33
- va_list args) {
34
- va_list args_copy;
35
- va_copy(args_copy, args);
36
-
37
- // Adding 1 to add space for terminating null character.
38
- int size_s = vsnprintf(nullptr, 0, format, args);
39
- auto size = static_cast<size_t>(size_s);
40
- std::vector<char> buffer(size);
41
-
42
- vsnprintf(buffer.data(), size, format, args_copy);
43
- switch (level) {
44
- case YGLogLevelError:
45
- react_native_log_error(buffer.data());
46
- break;
47
- case YGLogLevelFatal:
48
- react_native_log_fatal(buffer.data());
49
- break;
50
- case YGLogLevelWarn:
51
- react_native_log_warn(buffer.data());
52
- break;
53
- case YGLogLevelInfo:
54
- case YGLogLevelDebug:
55
- case YGLogLevelVerbose:
56
- default:
57
- react_native_log_info(buffer.data());
58
- }
59
-
60
- return size_s;
61
- }
62
-
63
- thread_local LayoutContext threadLocalLayoutContext;
64
-
65
- ShadowNodeTraits YogaLayoutableShadowNode::BaseTraits() {
66
- auto traits = LayoutableShadowNode::BaseTraits();
67
- traits.set(IdentifierTrait());
68
- return traits;
69
- }
70
-
71
- ShadowNodeTraits::Trait YogaLayoutableShadowNode::IdentifierTrait() {
72
- return ShadowNodeTraits::Trait::YogaLayoutableKind;
73
- }
74
-
75
- YogaLayoutableShadowNode::YogaLayoutableShadowNode(
76
- const ShadowNodeFragment& fragment,
77
- const ShadowNodeFamily::Shared& family,
78
- ShadowNodeTraits traits)
79
- : LayoutableShadowNode(fragment, family, traits),
80
- yogaConfig_(FabricDefaultYogaLog),
81
- yogaNode_(&initializeYogaConfig(yogaConfig_)) {
82
- yogaNode_.setContext(this);
83
-
84
- // Newly created node must be `dirty` just because it is new.
85
- // This is not a default for `yoga::Node`.
86
- yogaNode_.setDirty(true);
87
-
88
- if (getTraits().check(ShadowNodeTraits::Trait::MeasurableYogaNode)) {
89
- react_native_assert(
90
- getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode));
91
-
92
- yogaNode_.setMeasureFunc(
93
- YogaLayoutableShadowNode::yogaNodeMeasureCallbackConnector);
94
- }
95
-
96
- updateYogaProps();
97
- updateYogaChildren();
98
-
99
- ensureConsistency();
100
- }
101
-
102
- YogaLayoutableShadowNode::YogaLayoutableShadowNode(
103
- const ShadowNode& sourceShadowNode,
104
- const ShadowNodeFragment& fragment)
105
- : LayoutableShadowNode(sourceShadowNode, fragment),
106
- yogaConfig_(FabricDefaultYogaLog),
107
- yogaNode_(static_cast<const YogaLayoutableShadowNode&>(sourceShadowNode)
108
- .yogaNode_) {
109
- // Note, cloned `yoga::Node` instance (copied using copy-constructor) inherits
110
- // dirty flag, measure function, and other properties being set originally in
111
- // the `YogaLayoutableShadowNode` constructor above.
112
-
113
- react_native_assert(
114
- static_cast<const YogaLayoutableShadowNode&>(sourceShadowNode)
115
- .yogaNode_.isDirty() == yogaNode_.isDirty() &&
116
- "Yoga node must inherit dirty flag.");
117
-
118
- if (!getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode)) {
119
- for (auto& child : getChildren()) {
120
- if (auto layoutableChild = traitCast<YogaLayoutableShadowNode>(child)) {
121
- yogaLayoutableChildren_.push_back(layoutableChild);
122
- }
123
- }
124
- }
125
-
126
- YGConfigConstRef previousConfig =
127
- &static_cast<const YogaLayoutableShadowNode&>(sourceShadowNode)
128
- .yogaConfig_;
129
-
130
- yogaNode_.setContext(this);
131
- yogaNode_.setOwner(nullptr);
132
- yogaNode_.setConfig(&initializeYogaConfig(yogaConfig_, previousConfig));
133
- updateYogaChildrenOwnersIfNeeded();
134
-
135
- // This is the only legit place where we can dirty cloned Yoga node.
136
- // If we do it later, ancestor nodes will not be able to observe this and
137
- // dirty (and clone) themselves as a result.
138
- if (getTraits().check(ShadowNodeTraits::Trait::DirtyYogaNode) ||
139
- getTraits().check(ShadowNodeTraits::Trait::MeasurableYogaNode)) {
140
- yogaNode_.setDirty(true);
141
- }
142
-
143
- // We do not need to reconfigure this subtree before the next layout pass if
144
- // the previous node with the same props and children has already been
145
- // configured.
146
- if (!fragment.props && !fragment.children) {
147
- yogaTreeHasBeenConfigured_ =
148
- static_cast<const YogaLayoutableShadowNode&>(sourceShadowNode)
149
- .yogaTreeHasBeenConfigured_;
150
- }
151
-
152
- if (fragment.props) {
153
- updateYogaProps();
154
- }
155
-
156
- if (fragment.children) {
157
- updateYogaChildren();
158
- }
159
-
160
- ensureConsistency();
161
- }
162
-
163
- void YogaLayoutableShadowNode::cleanLayout() {
164
- yogaNode_.setDirty(false);
165
- }
166
-
167
- void YogaLayoutableShadowNode::dirtyLayout() {
168
- yogaNode_.setDirty(true);
169
- }
170
-
171
- bool YogaLayoutableShadowNode::getIsLayoutClean() const {
172
- return !yogaNode_.isDirty();
173
- }
174
-
175
- #pragma mark - Mutating Methods
176
-
177
- void YogaLayoutableShadowNode::enableMeasurement() {
178
- ensureUnsealed();
179
-
180
- yogaNode_.setMeasureFunc(
181
- YogaLayoutableShadowNode::yogaNodeMeasureCallbackConnector);
182
- }
183
-
184
- void YogaLayoutableShadowNode::appendYogaChild(
185
- const YogaLayoutableShadowNode::Shared& childNode) {
186
- // The caller must check this before calling this method.
187
- react_native_assert(
188
- !getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode));
189
-
190
- ensureYogaChildrenLookFine();
191
-
192
- yogaLayoutableChildren_.push_back(childNode);
193
- yogaNode_.insertChild(&childNode->yogaNode_, yogaNode_.getChildren().size());
194
-
195
- ensureYogaChildrenLookFine();
196
- }
197
-
198
- void YogaLayoutableShadowNode::adoptYogaChild(size_t index) {
199
- ensureUnsealed();
200
- ensureYogaChildrenLookFine();
201
-
202
- // The caller must check this before calling this method.
203
- react_native_assert(
204
- !getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode));
205
-
206
- auto& childNode =
207
- traitCast<const YogaLayoutableShadowNode&>(*getChildren().at(index));
208
-
209
- if (childNode.yogaNode_.getOwner() == nullptr) {
210
- // The child node is not owned.
211
- childNode.yogaNode_.setOwner(&yogaNode_);
212
- // At this point the child yoga node must be already inserted by the caller.
213
- // react_native_assert(layoutableChildNode.yogaNode_.isDirty());
214
- } else {
215
- // The child is owned by some other node, we need to clone that.
216
- // TODO: At this point, React has wrong reference to the node. (T138668036)
217
- auto clonedChildNode = childNode.clone({});
218
-
219
- // Replace the child node with a newly cloned one in the children list.
220
- replaceChild(childNode, clonedChildNode, static_cast<int32_t>(index));
221
- }
222
-
223
- ensureYogaChildrenLookFine();
224
- }
225
-
226
- void YogaLayoutableShadowNode::appendChild(
227
- const ShadowNode::Shared& childNode) {
228
- ensureUnsealed();
229
- ensureConsistency();
230
-
231
- // Calling the base class (`ShadowNode`) method.
232
- LayoutableShadowNode::appendChild(childNode);
233
-
234
- if (getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode)) {
235
- // This node is a declared leaf.
236
- return;
237
- }
238
-
239
- if (auto yogaLayoutableChild =
240
- traitCast<YogaLayoutableShadowNode>(childNode)) {
241
- // Here we don't have information about the previous structure of the node
242
- // (if it that existed before), so we don't have anything to compare the
243
- // Yoga node with (like a previous version of this node). Therefore we must
244
- // dirty the node.
245
- yogaNode_.setDirty(true);
246
-
247
- // Appending the Yoga node.
248
- appendYogaChild(yogaLayoutableChild);
249
-
250
- ensureYogaChildrenLookFine();
251
- ensureYogaChildrenAlignment();
252
-
253
- // Adopting the Yoga node.
254
- adoptYogaChild(getChildren().size() - 1);
255
-
256
- ensureConsistency();
257
- }
258
- }
259
-
260
- void YogaLayoutableShadowNode::replaceChild(
261
- const ShadowNode& oldChild,
262
- const ShadowNode::Shared& newChild,
263
- int32_t suggestedIndex) {
264
- LayoutableShadowNode::replaceChild(oldChild, newChild, suggestedIndex);
265
-
266
- ensureUnsealed();
267
- ensureYogaChildrenLookFine();
268
-
269
- auto layoutableOldChild =
270
- traitCast<const YogaLayoutableShadowNode*>(&oldChild);
271
- auto layoutableNewChild = traitCast<YogaLayoutableShadowNode>(newChild);
272
-
273
- if (layoutableOldChild == nullptr && layoutableNewChild == nullptr) {
274
- // No need to mutate yogaLayoutableChildren_
275
- return;
276
- }
277
-
278
- bool suggestedIndexAccurate = suggestedIndex >= 0 &&
279
- suggestedIndex < static_cast<int32_t>(yogaLayoutableChildren_.size()) &&
280
- yogaLayoutableChildren_[suggestedIndex].get() == layoutableOldChild;
281
-
282
- auto oldChildIter = suggestedIndexAccurate
283
- ? yogaLayoutableChildren_.begin() + suggestedIndex
284
- : std::find_if(
285
- yogaLayoutableChildren_.begin(),
286
- yogaLayoutableChildren_.end(),
287
- [&](const YogaLayoutableShadowNode::Shared& layoutableChild) {
288
- return layoutableChild.get() == layoutableOldChild;
289
- });
290
- auto oldChildIndex =
291
- static_cast<int32_t>(oldChildIter - yogaLayoutableChildren_.begin());
292
-
293
- if (oldChildIter == yogaLayoutableChildren_.end()) {
294
- // oldChild does not exist as part of our node
295
- return;
296
- }
297
-
298
- if (layoutableNewChild) {
299
- // Both children are layoutable, replace the old one with the new one
300
- react_native_assert(layoutableNewChild->yogaNode_.getOwner() == nullptr);
301
- layoutableNewChild->yogaNode_.setOwner(&yogaNode_);
302
- *oldChildIter = layoutableNewChild;
303
- yogaNode_.replaceChild(&layoutableNewChild->yogaNode_, oldChildIndex);
304
- } else {
305
- // Layoutable child replaced with non layoutable child. Remove the previous
306
- // child from the layoutable children list.
307
- yogaLayoutableChildren_.erase(oldChildIter);
308
- yogaNode_.removeChild(oldChildIndex);
309
- }
310
-
311
- ensureYogaChildrenLookFine();
312
- }
313
-
314
- bool YogaLayoutableShadowNode::doesOwn(
315
- const YogaLayoutableShadowNode& child) const {
316
- return child.yogaNode_.getOwner() == &yogaNode_;
317
- }
318
-
319
- void YogaLayoutableShadowNode::updateYogaChildrenOwnersIfNeeded() {
320
- for (auto& childYogaNode : yogaNode_.getChildren()) {
321
- if (childYogaNode->getOwner() == &yogaNode_) {
322
- childYogaNode->setOwner(
323
- reinterpret_cast<yoga::Node*>(0xBADC0FFEE0DDF00D));
324
- }
325
- }
326
- }
327
-
328
- void YogaLayoutableShadowNode::updateYogaChildren() {
329
- if (getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode)) {
330
- return;
331
- }
332
-
333
- ensureUnsealed();
334
-
335
- bool isClean = !yogaNode_.isDirty() &&
336
- getChildren().size() == yogaNode_.getChildren().size();
337
-
338
- auto oldYogaChildren =
339
- isClean ? yogaNode_.getChildren() : std::vector<yoga::Node*>{};
340
-
341
- yogaNode_.setChildren({});
342
- yogaLayoutableChildren_.clear();
343
-
344
- for (size_t i = 0; i < getChildren().size(); i++) {
345
- if (auto yogaLayoutableChild =
346
- traitCast<YogaLayoutableShadowNode>(getChildren()[i])) {
347
- appendYogaChild(yogaLayoutableChild);
348
- adoptYogaChild(i);
349
-
350
- if (isClean) {
351
- auto yogaChildIndex = yogaLayoutableChildren_.size() - 1;
352
- auto& oldYogaChildNode = *oldYogaChildren.at(yogaChildIndex);
353
- auto& newYogaChildNode =
354
- yogaLayoutableChildren_.at(yogaChildIndex)->yogaNode_;
355
-
356
- isClean = isClean && !newYogaChildNode.isDirty() &&
357
- (newYogaChildNode.getStyle() == oldYogaChildNode.getStyle());
358
- }
359
- }
360
- }
361
-
362
- react_native_assert(
363
- yogaLayoutableChildren_.size() == yogaNode_.getChildren().size());
364
-
365
- yogaNode_.setDirty(!isClean);
366
- }
367
-
368
- void YogaLayoutableShadowNode::updateYogaProps() {
369
- ensureUnsealed();
370
-
371
- auto props = static_cast<const YogaStylableProps&>(*props_);
372
- auto styleResult = applyAliasedProps(props.yogaStyle, props);
373
-
374
- // Resetting `dirty` flag only if `yogaStyle` portion of `Props` was changed.
375
- if (!yogaNode_.isDirty() && (styleResult != yogaNode_.getStyle())) {
376
- yogaNode_.setDirty(true);
377
- }
378
-
379
- yogaNode_.setStyle(styleResult);
380
- }
381
-
382
- /*static*/ yoga::Style YogaLayoutableShadowNode::applyAliasedProps(
383
- const yoga::Style& baseStyle,
384
- const YogaStylableProps& props) {
385
- yoga::Style result{baseStyle};
386
-
387
- // Aliases with precedence
388
- if (!props.inset.isUndefined()) {
389
- result.position()[YGEdgeAll] = props.inset;
390
- }
391
- if (!props.insetBlock.isUndefined()) {
392
- result.position()[YGEdgeVertical] = props.insetBlock;
393
- }
394
- if (!props.insetInline.isUndefined()) {
395
- result.position()[YGEdgeHorizontal] = props.insetInline;
396
- }
397
- if (!props.insetInlineEnd.isUndefined()) {
398
- result.position()[YGEdgeEnd] = props.insetInlineEnd;
399
- }
400
- if (!props.insetInlineStart.isUndefined()) {
401
- result.position()[YGEdgeStart] = props.insetInlineStart;
402
- }
403
- if (!props.marginInline.isUndefined()) {
404
- result.margin()[YGEdgeHorizontal] = props.marginInline;
405
- }
406
- if (!props.marginInlineStart.isUndefined()) {
407
- result.margin()[YGEdgeStart] = props.marginInlineStart;
408
- }
409
- if (!props.marginInlineEnd.isUndefined()) {
410
- result.margin()[YGEdgeEnd] = props.marginInlineEnd;
411
- }
412
- if (!props.marginBlock.isUndefined()) {
413
- result.margin()[YGEdgeVertical] = props.marginBlock;
414
- }
415
- if (!props.paddingInline.isUndefined()) {
416
- result.padding()[YGEdgeHorizontal] = props.paddingInline;
417
- }
418
- if (!props.paddingInlineStart.isUndefined()) {
419
- result.padding()[YGEdgeStart] = props.paddingInlineStart;
420
- }
421
- if (!props.paddingInlineEnd.isUndefined()) {
422
- result.padding()[YGEdgeEnd] = props.paddingInlineEnd;
423
- }
424
- if (!props.paddingBlock.isUndefined()) {
425
- result.padding()[YGEdgeVertical] = props.paddingBlock;
426
- }
427
-
428
- // Aliases without precedence
429
- if (CompactValue(result.position()[YGEdgeBottom]).isUndefined()) {
430
- result.position()[YGEdgeBottom] = props.insetBlockEnd;
431
- }
432
- if (CompactValue(result.position()[YGEdgeTop]).isUndefined()) {
433
- result.position()[YGEdgeTop] = props.insetBlockStart;
434
- }
435
- if (CompactValue(result.margin()[YGEdgeTop]).isUndefined()) {
436
- result.margin()[YGEdgeTop] = props.marginBlockStart;
437
- }
438
- if (CompactValue(result.margin()[YGEdgeBottom]).isUndefined()) {
439
- result.margin()[YGEdgeBottom] = props.marginBlockEnd;
440
- }
441
- if (CompactValue(result.padding()[YGEdgeTop]).isUndefined()) {
442
- result.padding()[YGEdgeTop] = props.paddingBlockStart;
443
- }
444
- if (CompactValue(result.padding()[YGEdgeBottom]).isUndefined()) {
445
- result.padding()[YGEdgeBottom] = props.paddingBlockEnd;
446
- }
447
-
448
- return result;
449
- }
450
-
451
- void YogaLayoutableShadowNode::configureYogaTree(
452
- float pointScaleFactor,
453
- YGErrata defaultErrata,
454
- bool swapLeftAndRight) {
455
- ensureUnsealed();
456
-
457
- // Set state on our own Yoga node
458
- YGErrata errata = resolveErrata(defaultErrata);
459
- YGConfigSetErrata(&yogaConfig_, errata);
460
- YGConfigSetPointScaleFactor(&yogaConfig_, pointScaleFactor);
461
-
462
- // TODO: `swapLeftAndRight` modified backing props and cannot be undone
463
- if (swapLeftAndRight) {
464
- swapStyleLeftAndRight();
465
- }
466
-
467
- yogaTreeHasBeenConfigured_ = true;
468
-
469
- // Recursively propagate the configuration to child nodes. If a child was
470
- // already configured as part of a previous ShadowTree generation, we only
471
- // need to reconfigure it if the context values passed to the Node have
472
- // changed.
473
- for (size_t i = 0; i < yogaLayoutableChildren_.size(); i++) {
474
- const auto& child = *yogaLayoutableChildren_[i];
475
- auto childLayoutMetrics = child.getLayoutMetrics();
476
- auto childErrata =
477
- YGConfigGetErrata(const_cast<yoga::Config*>(&child.yogaConfig_));
478
-
479
- if (child.yogaTreeHasBeenConfigured_ &&
480
- childLayoutMetrics.pointScaleFactor == pointScaleFactor &&
481
- childLayoutMetrics.wasLeftAndRightSwapped == swapLeftAndRight &&
482
- childErrata == child.resolveErrata(errata)) {
483
- continue;
484
- }
485
-
486
- if (doesOwn(child)) {
487
- auto& mutableChild = const_cast<YogaLayoutableShadowNode&>(child);
488
- mutableChild.configureYogaTree(
489
- pointScaleFactor, child.resolveErrata(errata), swapLeftAndRight);
490
- } else {
491
- cloneChildInPlace(i).configureYogaTree(
492
- pointScaleFactor, errata, swapLeftAndRight);
493
- }
494
- }
495
- }
496
-
497
- YGErrata YogaLayoutableShadowNode::resolveErrata(YGErrata defaultErrata) const {
498
- if (auto viewShadowNode = traitCast<const ViewShadowNode*>(this)) {
499
- const auto& props = viewShadowNode->getConcreteProps();
500
- switch (props.experimental_layoutConformance) {
501
- case LayoutConformance::Classic:
502
- return YGErrataAll;
503
- case LayoutConformance::Strict:
504
- return YGErrataNone;
505
- case LayoutConformance::Undefined:
506
- return defaultErrata;
507
- }
508
- }
509
-
510
- return defaultErrata;
511
- }
512
-
513
- YogaLayoutableShadowNode& YogaLayoutableShadowNode::cloneChildInPlace(
514
- size_t layoutableChildIndex) {
515
- ensureUnsealed();
516
-
517
- const auto& childNode = *yogaLayoutableChildren_[layoutableChildIndex];
518
-
519
- // TODO: Why does this not use `ShadowNodeFragment::statePlaceholder()` like
520
- // `adoptYogaChild()`?
521
- auto clonedChildNode = childNode.clone(
522
- {ShadowNodeFragment::propsPlaceholder(),
523
- ShadowNodeFragment::childrenPlaceholder(),
524
- childNode.getState()});
525
-
526
- replaceChild(
527
- childNode, clonedChildNode, static_cast<int32_t>(layoutableChildIndex));
528
- return static_cast<YogaLayoutableShadowNode&>(*clonedChildNode);
529
- }
530
-
531
- void YogaLayoutableShadowNode::setSize(Size size) const {
532
- ensureUnsealed();
533
-
534
- auto style = yogaNode_.getStyle();
535
- style.setDimension(
536
- YGDimensionWidth, yoga::CompactValue::ofMaybe<YGUnitPoint>(size.width));
537
- style.setDimension(
538
- YGDimensionHeight, yoga::CompactValue::ofMaybe<YGUnitPoint>(size.height));
539
- yogaNode_.setStyle(style);
540
- yogaNode_.setDirty(true);
541
- }
542
-
543
- void YogaLayoutableShadowNode::setPadding(RectangleEdges<Float> padding) const {
544
- ensureUnsealed();
545
-
546
- auto style = yogaNode_.getStyle();
547
-
548
- auto leftPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.left);
549
- auto topPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.top);
550
- auto rightPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.right);
551
- auto bottomPadding = yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.bottom);
552
-
553
- if (leftPadding != style.padding()[YGEdgeLeft] ||
554
- topPadding != style.padding()[YGEdgeTop] ||
555
- rightPadding != style.padding()[YGEdgeRight] ||
556
- bottomPadding != style.padding()[YGEdgeBottom]) {
557
- style.padding()[YGEdgeTop] =
558
- yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.top);
559
- style.padding()[YGEdgeLeft] =
560
- yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.left);
561
- style.padding()[YGEdgeRight] =
562
- yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.right);
563
- style.padding()[YGEdgeBottom] =
564
- yoga::CompactValue::ofMaybe<YGUnitPoint>(padding.bottom);
565
- yogaNode_.setStyle(style);
566
- yogaNode_.setDirty(true);
567
- }
568
- }
569
-
570
- void YogaLayoutableShadowNode::setPositionType(
571
- YGPositionType positionType) const {
572
- ensureUnsealed();
573
-
574
- auto style = yogaNode_.getStyle();
575
- style.positionType() = yoga::scopedEnum(positionType);
576
- yogaNode_.setStyle(style);
577
- yogaNode_.setDirty(true);
578
- }
579
-
580
- void YogaLayoutableShadowNode::layoutTree(
581
- LayoutContext layoutContext,
582
- LayoutConstraints layoutConstraints) {
583
- ensureUnsealed();
584
-
585
- SystraceSection s1("YogaLayoutableShadowNode::layoutTree");
586
-
587
- bool swapLeftAndRight = layoutContext.swapLeftAndRightInRTL &&
588
- (layoutConstraints.layoutDirection == LayoutDirection::RightToLeft ||
589
- !CoreFeatures::doNotSwapLeftAndRightOnAndroidInLTR);
590
-
591
- {
592
- SystraceSection s2("YogaLayoutableShadowNode::configureYogaTree");
593
- configureYogaTree(
594
- layoutContext.pointScaleFactor,
595
- YGErrataAll /*defaultErrata*/,
596
- swapLeftAndRight);
597
- }
598
-
599
- auto minimumSize = layoutConstraints.minimumSize;
600
- auto maximumSize = layoutConstraints.maximumSize;
601
-
602
- // The caller must ensure that layout constraints make sense.
603
- // Values cannot be NaN.
604
- react_native_assert(!std::isnan(minimumSize.width));
605
- react_native_assert(!std::isnan(minimumSize.height));
606
- react_native_assert(!std::isnan(maximumSize.width));
607
- react_native_assert(!std::isnan(maximumSize.height));
608
- // Values cannot be negative.
609
- react_native_assert(minimumSize.width >= 0);
610
- react_native_assert(minimumSize.height >= 0);
611
- react_native_assert(maximumSize.width >= 0);
612
- react_native_assert(maximumSize.height >= 0);
613
- // Minimum size cannot be infinity.
614
- react_native_assert(!std::isinf(minimumSize.width));
615
- react_native_assert(!std::isinf(minimumSize.height));
616
-
617
- // Internally Yoga uses three different measurement modes controlling layout
618
- // constraints: `Undefined`, `Exactly`, and `AtMost`. These modes are an
619
- // implementation detail and are not defined in `CSS Flexible Box Layout
620
- // Module`. Yoga C++ API (and `YGNodeCalculateLayout` function particularly)
621
- // does not allow to specify the measure modes explicitly. Instead, it infers
622
- // these from styles associated with the root node.
623
- // To pass the actual layout constraints to Yoga we represent them as
624
- // `(min/max)(Height/Width)` style properties. Also, we pass `ownerWidth` &
625
- // `ownerHeight` to allow proper calculation of relative (e.g. specified in
626
- // percents) style values.
627
-
628
- auto& yogaStyle = yogaNode_.getStyle();
629
-
630
- auto ownerWidth = yogaFloatFromFloat(maximumSize.width);
631
- auto ownerHeight = yogaFloatFromFloat(maximumSize.height);
632
-
633
- yogaStyle.setMaxDimension(
634
- YGDimensionWidth,
635
- yoga::CompactValue::ofMaybe<YGUnitPoint>(maximumSize.width));
636
-
637
- yogaStyle.setMaxDimension(
638
- YGDimensionHeight,
639
- yoga::CompactValue::ofMaybe<YGUnitPoint>(maximumSize.height));
640
-
641
- yogaStyle.setMinDimension(
642
- YGDimensionWidth,
643
- yoga::CompactValue::ofMaybe<YGUnitPoint>(minimumSize.width));
644
-
645
- yogaStyle.setMinDimension(
646
- YGDimensionHeight,
647
- yoga::CompactValue::ofMaybe<YGUnitPoint>(minimumSize.height));
648
-
649
- auto direction =
650
- yogaDirectionFromLayoutDirection(layoutConstraints.layoutDirection);
651
-
652
- threadLocalLayoutContext = layoutContext;
653
-
654
- {
655
- SystraceSection s3("YogaLayoutableShadowNode::YGNodeCalculateLayout");
656
- YGNodeCalculateLayout(&yogaNode_, ownerWidth, ownerHeight, direction);
657
- }
658
-
659
- // Update layout metrics for root node. Updated for children in
660
- // YogaLayoutableShadowNode::layout
661
- if (yogaNode_.getHasNewLayout()) {
662
- auto layoutMetrics = layoutMetricsFromYogaNode(yogaNode_);
663
- layoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
664
- layoutMetrics.wasLeftAndRightSwapped = swapLeftAndRight;
665
- setLayoutMetrics(layoutMetrics);
666
- yogaNode_.setHasNewLayout(false);
667
- }
668
-
669
- layout(layoutContext);
670
- }
671
-
672
- static EdgeInsets calculateOverflowInset(
673
- Rect contentFrame,
674
- Rect contentBounds) {
675
- auto size = contentFrame.size;
676
- auto overflowInset = EdgeInsets{};
677
- overflowInset.left = std::min(contentBounds.getMinX(), Float{0.0});
678
- overflowInset.top = std::min(contentBounds.getMinY(), Float{0.0});
679
- overflowInset.right =
680
- -std::max(contentBounds.getMaxX() - size.width, Float{0.0});
681
- overflowInset.bottom =
682
- -std::max(contentBounds.getMaxY() - size.height, Float{0.0});
683
- return overflowInset;
684
- }
685
-
686
- void YogaLayoutableShadowNode::layout(LayoutContext layoutContext) {
687
- // Reading data from a dirtied node does not make sense.
688
- react_native_assert(!yogaNode_.isDirty());
689
-
690
- for (auto childYogaNode : yogaNode_.getChildren()) {
691
- auto& childNode = shadowNodeFromContext(childYogaNode);
692
-
693
- // Verifying that the Yoga node belongs to the ShadowNode.
694
- react_native_assert(&childNode.yogaNode_ == childYogaNode);
695
-
696
- if (childYogaNode->getHasNewLayout()) {
697
- childYogaNode->setHasNewLayout(false);
698
-
699
- // Reading data from a dirtied node does not make sense.
700
- react_native_assert(!childYogaNode->isDirty());
701
-
702
- // We must copy layout metrics from Yoga node only once (when the parent
703
- // node exclusively ownes the child node).
704
- react_native_assert(childYogaNode->getOwner() == &yogaNode_);
705
-
706
- // We are about to mutate layout metrics of the node.
707
- childNode.ensureUnsealed();
708
-
709
- auto newLayoutMetrics = layoutMetricsFromYogaNode(*childYogaNode);
710
- newLayoutMetrics.pointScaleFactor = layoutContext.pointScaleFactor;
711
- newLayoutMetrics.wasLeftAndRightSwapped =
712
- layoutContext.swapLeftAndRightInRTL &&
713
- (newLayoutMetrics.layoutDirection == LayoutDirection::RightToLeft ||
714
- !CoreFeatures::doNotSwapLeftAndRightOnAndroidInLTR);
715
-
716
- // Child node's layout has changed. When a node is added to
717
- // `affectedNodes`, onLayout event is called on the component. Comparing
718
- // `newLayoutMetrics.frame` with `childNode.getLayoutMetrics().frame` to
719
- // detect if layout has not changed is not advised, please refer to
720
- // D22999891 for details.
721
- if (layoutContext.affectedNodes != nullptr) {
722
- layoutContext.affectedNodes->push_back(&childNode);
723
- }
724
-
725
- childNode.setLayoutMetrics(newLayoutMetrics);
726
-
727
- if (newLayoutMetrics.displayType != DisplayType::None) {
728
- childNode.layout(layoutContext);
729
- }
730
- }
731
- }
732
-
733
- if (yogaNode_.getStyle().overflow() == yoga::Overflow::Visible) {
734
- // Note that the parent node's overflow layout is NOT affected by its
735
- // transform matrix. That transform matrix is applied on the parent node as
736
- // well as all of its child nodes, which won't cause changes on the
737
- // overflowInset values. A special note on the scale transform -- the scaled
738
- // layout may look like it's causing overflowInset changes, but it's purely
739
- // cosmetic and will be handled by pixel density conversion logic later when
740
- // render the view. The actual overflowInset value is not changed as if the
741
- // transform is not happening here.
742
- auto contentBounds = getContentBounds();
743
- layoutMetrics_.overflowInset =
744
- calculateOverflowInset(layoutMetrics_.frame, contentBounds);
745
- } else {
746
- layoutMetrics_.overflowInset = {};
747
- }
748
- }
749
-
750
- Rect YogaLayoutableShadowNode::getContentBounds() const {
751
- auto contentBounds = Rect{};
752
-
753
- for (auto childYogaNode : yogaNode_.getChildren()) {
754
- auto& childNode = shadowNodeFromContext(childYogaNode);
755
-
756
- // Verifying that the Yoga node belongs to the ShadowNode.
757
- react_native_assert(&childNode.yogaNode_ == childYogaNode);
758
-
759
- auto layoutMetricsWithOverflowInset = childNode.getLayoutMetrics();
760
- if (layoutMetricsWithOverflowInset.displayType != DisplayType::None) {
761
- auto viewChildNode = traitCast<const ViewShadowNode*>(&childNode);
762
- auto hitSlop = viewChildNode != nullptr
763
- ? viewChildNode->getConcreteProps().hitSlop
764
- : EdgeInsets{};
765
-
766
- // The contentBounds should always union with existing child node layout +
767
- // overflowInset. The transform may in a deferred animation and not
768
- // applied yet.
769
- contentBounds.unionInPlace(insetBy(
770
- layoutMetricsWithOverflowInset.frame,
771
- layoutMetricsWithOverflowInset.overflowInset));
772
- contentBounds.unionInPlace(
773
- outsetBy(layoutMetricsWithOverflowInset.frame, hitSlop));
774
-
775
- auto childTransform = childNode.getTransform();
776
- if (childTransform != Transform::Identity()) {
777
- // The child node's transform matrix will affect the parent node's
778
- // contentBounds. We need to union with child node's after transform
779
- // layout here.
780
- contentBounds.unionInPlace(insetBy(
781
- layoutMetricsWithOverflowInset.frame * childTransform,
782
- layoutMetricsWithOverflowInset.overflowInset * childTransform));
783
- contentBounds.unionInPlace(outsetBy(
784
- layoutMetricsWithOverflowInset.frame * childTransform, hitSlop));
785
- }
786
- }
787
- }
788
-
789
- return contentBounds;
790
- }
791
-
792
- #pragma mark - Yoga Connectors
793
-
794
- YGNodeRef YogaLayoutableShadowNode::yogaNodeCloneCallbackConnector(
795
- YGNodeConstRef /*oldYogaNode*/,
796
- YGNodeConstRef parentYogaNode,
797
- size_t childIndex) {
798
- SystraceSection s("YogaLayoutableShadowNode::yogaNodeCloneCallbackConnector");
799
-
800
- auto& parentNode = shadowNodeFromContext(parentYogaNode);
801
- return &parentNode.cloneChildInPlace(childIndex).yogaNode_;
802
- }
803
-
804
- YGSize YogaLayoutableShadowNode::yogaNodeMeasureCallbackConnector(
805
- YGNodeConstRef yogaNode,
806
- float width,
807
- YGMeasureMode widthMode,
808
- float height,
809
- YGMeasureMode heightMode) {
810
- SystraceSection s(
811
- "YogaLayoutableShadowNode::yogaNodeMeasureCallbackConnector");
812
-
813
- auto& shadowNode = shadowNodeFromContext(yogaNode);
814
-
815
- auto minimumSize = Size{0, 0};
816
- auto maximumSize = Size{
817
- std::numeric_limits<Float>::infinity(),
818
- std::numeric_limits<Float>::infinity()};
819
-
820
- switch (widthMode) {
821
- case YGMeasureModeUndefined:
822
- break;
823
- case YGMeasureModeExactly:
824
- minimumSize.width = floatFromYogaFloat(width);
825
- maximumSize.width = floatFromYogaFloat(width);
826
- break;
827
- case YGMeasureModeAtMost:
828
- maximumSize.width = floatFromYogaFloat(width);
829
- break;
830
- }
831
-
832
- switch (heightMode) {
833
- case YGMeasureModeUndefined:
834
- break;
835
- case YGMeasureModeExactly:
836
- minimumSize.height = floatFromYogaFloat(height);
837
- maximumSize.height = floatFromYogaFloat(height);
838
- break;
839
- case YGMeasureModeAtMost:
840
- maximumSize.height = floatFromYogaFloat(height);
841
- break;
842
- }
843
-
844
- auto size = shadowNode.measureContent(
845
- threadLocalLayoutContext, {minimumSize, maximumSize});
846
-
847
- return YGSize{
848
- yogaFloatFromFloat(size.width), yogaFloatFromFloat(size.height)};
849
- }
850
-
851
- YogaLayoutableShadowNode& YogaLayoutableShadowNode::shadowNodeFromContext(
852
- YGNodeConstRef yogaNode) {
853
- return traitCast<YogaLayoutableShadowNode&>(
854
- *static_cast<ShadowNode*>(YGNodeGetContext(yogaNode)));
855
- }
856
-
857
- yoga::Config& YogaLayoutableShadowNode::initializeYogaConfig(
858
- yoga::Config& config,
859
- YGConfigConstRef previousConfig) {
860
- YGConfigSetCloneNodeFunc(
861
- &config, YogaLayoutableShadowNode::yogaNodeCloneCallbackConnector);
862
- if (previousConfig != nullptr) {
863
- YGConfigSetPointScaleFactor(
864
- &config, YGConfigGetPointScaleFactor(previousConfig));
865
- YGConfigSetErrata(&config, YGConfigGetErrata(previousConfig));
866
- }
867
-
868
- #ifdef RN_DEBUG_YOGA_LOGGER
869
- YGConfigSetPrintTreeFlag(&config, true);
870
- #endif
871
- return config;
872
- }
873
-
874
- #pragma mark - RTL left and right swapping
875
-
876
- void YogaLayoutableShadowNode::swapStyleLeftAndRight() {
877
- ensureUnsealed();
878
-
879
- swapLeftAndRightInYogaStyleProps(*this);
880
- swapLeftAndRightInViewProps(*this);
881
- }
882
-
883
- void YogaLayoutableShadowNode::swapLeftAndRightInYogaStyleProps(
884
- const YogaLayoutableShadowNode& shadowNode) {
885
- auto yogaStyle = shadowNode.yogaNode_.getStyle();
886
-
887
- const yoga::Style::Edges& position = yogaStyle.position();
888
- const yoga::Style::Edges& padding = yogaStyle.padding();
889
- const yoga::Style::Edges& margin = yogaStyle.margin();
890
-
891
- // Swap Yoga node values, position, padding and margin.
892
-
893
- if (yogaStyle.position()[YGEdgeLeft] != YGValueUndefined) {
894
- yogaStyle.position()[YGEdgeStart] = position[YGEdgeLeft];
895
- yogaStyle.position()[YGEdgeLeft] = YGValueUndefined;
896
- }
897
-
898
- if (yogaStyle.position()[YGEdgeRight] != YGValueUndefined) {
899
- yogaStyle.position()[YGEdgeEnd] = position[YGEdgeRight];
900
- yogaStyle.position()[YGEdgeRight] = YGValueUndefined;
901
- }
902
-
903
- if (yogaStyle.padding()[YGEdgeLeft] != YGValueUndefined) {
904
- yogaStyle.padding()[YGEdgeStart] = padding[YGEdgeLeft];
905
- yogaStyle.padding()[YGEdgeLeft] = YGValueUndefined;
906
- }
907
-
908
- if (yogaStyle.padding()[YGEdgeRight] != YGValueUndefined) {
909
- yogaStyle.padding()[YGEdgeEnd] = padding[YGEdgeRight];
910
- yogaStyle.padding()[YGEdgeRight] = YGValueUndefined;
911
- }
912
-
913
- if (yogaStyle.margin()[YGEdgeLeft] != YGValueUndefined) {
914
- yogaStyle.margin()[YGEdgeStart] = margin[YGEdgeLeft];
915
- yogaStyle.margin()[YGEdgeLeft] = YGValueUndefined;
916
- }
917
-
918
- if (yogaStyle.margin()[YGEdgeRight] != YGValueUndefined) {
919
- yogaStyle.margin()[YGEdgeEnd] = margin[YGEdgeRight];
920
- yogaStyle.margin()[YGEdgeRight] = YGValueUndefined;
921
- }
922
-
923
- shadowNode.yogaNode_.setStyle(yogaStyle);
924
- }
925
-
926
- void YogaLayoutableShadowNode::swapLeftAndRightInViewProps(
927
- const YogaLayoutableShadowNode& shadowNode) {
928
- auto& typedCasting = static_cast<const ViewProps&>(*shadowNode.props_);
929
- auto& props = const_cast<ViewProps&>(typedCasting);
930
-
931
- // Swap border node values, borderRadii, borderColors and borderStyles.
932
-
933
- if (props.borderRadii.topLeft.has_value()) {
934
- props.borderRadii.topStart = props.borderRadii.topLeft;
935
- props.borderRadii.topLeft.reset();
936
- }
937
-
938
- if (props.borderRadii.bottomLeft.has_value()) {
939
- props.borderRadii.bottomStart = props.borderRadii.bottomLeft;
940
- props.borderRadii.bottomLeft.reset();
941
- }
942
-
943
- if (props.borderRadii.topRight.has_value()) {
944
- props.borderRadii.topEnd = props.borderRadii.topRight;
945
- props.borderRadii.topRight.reset();
946
- }
947
-
948
- if (props.borderRadii.bottomRight.has_value()) {
949
- props.borderRadii.bottomEnd = props.borderRadii.bottomRight;
950
- props.borderRadii.bottomRight.reset();
951
- }
952
-
953
- if (props.borderColors.left.has_value()) {
954
- props.borderColors.start = props.borderColors.left;
955
- props.borderColors.left.reset();
956
- }
957
-
958
- if (props.borderColors.right.has_value()) {
959
- props.borderColors.end = props.borderColors.right;
960
- props.borderColors.right.reset();
961
- }
962
-
963
- if (props.borderStyles.left.has_value()) {
964
- props.borderStyles.start = props.borderStyles.left;
965
- props.borderStyles.left.reset();
966
- }
967
-
968
- if (props.borderStyles.right.has_value()) {
969
- props.borderStyles.end = props.borderStyles.right;
970
- props.borderStyles.right.reset();
971
- }
972
-
973
- const yoga::Style::Edges& border = props.yogaStyle.border();
974
-
975
- if (props.yogaStyle.border()[YGEdgeLeft] != YGValueUndefined) {
976
- props.yogaStyle.border()[YGEdgeStart] = border[YGEdgeLeft];
977
- props.yogaStyle.border()[YGEdgeLeft] = YGValueUndefined;
978
- }
979
-
980
- if (props.yogaStyle.border()[YGEdgeRight] != YGValueUndefined) {
981
- props.yogaStyle.border()[YGEdgeEnd] = border[YGEdgeRight];
982
- props.yogaStyle.border()[YGEdgeRight] = YGValueUndefined;
983
- }
984
- }
985
-
986
- #pragma mark - Consistency Ensuring Helpers
987
-
988
- void YogaLayoutableShadowNode::ensureConsistency() const {
989
- ensureYogaChildrenLookFine();
990
- ensureYogaChildrenAlignment();
991
- }
992
-
993
- void YogaLayoutableShadowNode::ensureYogaChildrenLookFine() const {
994
- #if defined(REACT_NATIVE_DEBUG) && defined(WITH_FBSYSTRACE)
995
- // Checking that the shapes of Yoga node children object look fine.
996
- // This is the only heuristic that might produce false-positive results
997
- // (really broken dangled nodes might look fine). This is useful as an early
998
- // signal that something went wrong.
999
- auto& yogaChildren = yogaNode_.getChildren();
1000
-
1001
- for (const auto& yogaChild : yogaChildren) {
1002
- react_native_assert(yogaChild->getContext());
1003
- react_native_assert(yogaChild->getChildren().size() < 16384);
1004
- if (!yogaChild->getChildren().empty()) {
1005
- react_native_assert(!yogaChild->hasMeasureFunc());
1006
- }
1007
- }
1008
- #endif
1009
- }
1010
-
1011
- void YogaLayoutableShadowNode::ensureYogaChildrenAlignment() const {
1012
- #if defined(REACT_NATIVE_DEBUG) && defined(WITH_FBSYSTRACE)
1013
- // If the node is not a leaf node, checking that:
1014
- // - All children are `YogaLayoutableShadowNode` subclasses.
1015
- // - All Yoga children are owned/connected to corresponding children of
1016
- // this node.
1017
-
1018
- auto& yogaChildren = yogaNode_.getChildren();
1019
- auto& children = yogaLayoutableChildren_;
1020
-
1021
- if (getTraits().check(ShadowNodeTraits::Trait::LeafYogaNode)) {
1022
- react_native_assert(yogaChildren.empty());
1023
- return;
1024
- }
1025
-
1026
- react_native_assert(yogaChildren.size() == children.size());
1027
-
1028
- for (size_t i = 0; i < children.size(); i++) {
1029
- auto& yogaChild = yogaChildren.at(i);
1030
- auto& child = children.at(i);
1031
- react_native_assert(
1032
- yogaChild->getContext() ==
1033
- traitCast<const YogaLayoutableShadowNode*>(child.get()));
1034
- }
1035
- #endif
1036
- }
1037
-
1038
- } // namespace facebook::react