react-native-tvos 0.76.5-0 → 0.77.0-0

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 (1066) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +1 -0
  2. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +13 -0
  3. package/Libraries/Animated/AnimatedEvent.js +1 -1
  4. package/Libraries/Animated/AnimatedImplementation.js +2 -2
  5. package/Libraries/Animated/NativeAnimatedAllowlist.js +20 -9
  6. package/Libraries/Animated/animations/Animation.js +60 -25
  7. package/Libraries/Animated/animations/DecayAnimation.js +26 -38
  8. package/Libraries/Animated/animations/SpringAnimation.js +33 -39
  9. package/Libraries/Animated/animations/TimingAnimation.js +34 -42
  10. package/Libraries/Animated/components/AnimatedFlatList.js +1 -1
  11. package/Libraries/Animated/components/AnimatedSectionList.js +3 -1
  12. package/Libraries/Animated/createAnimatedComponent.js +60 -33
  13. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  14. package/Libraries/Animated/nodes/AnimatedInterpolation.js +1 -1
  15. package/Libraries/Animated/nodes/AnimatedNode.js +39 -45
  16. package/Libraries/Animated/nodes/AnimatedObject.js +13 -3
  17. package/Libraries/Animated/nodes/AnimatedProps.js +104 -46
  18. package/Libraries/Animated/nodes/AnimatedStyle.js +116 -39
  19. package/Libraries/Animated/nodes/AnimatedTransform.js +56 -23
  20. package/Libraries/Animated/nodes/AnimatedValue.js +1 -1
  21. package/Libraries/Animated/nodes/AnimatedWithChildren.js +1 -3
  22. package/Libraries/Animated/useAnimatedProps.js +41 -35
  23. package/Libraries/AppDelegate/RCTAppDelegate.h +10 -64
  24. package/Libraries/AppDelegate/RCTAppDelegate.mm +23 -21
  25. package/Libraries/AppDelegate/RCTAppSetupUtils.h +5 -1
  26. package/Libraries/AppDelegate/RCTAppSetupUtils.mm +8 -14
  27. package/Libraries/AppDelegate/RCTArchConfiguratorProtocol.h +32 -0
  28. package/Libraries/AppDelegate/RCTDependencyProvider.h +26 -0
  29. package/Libraries/AppDelegate/RCTRootViewFactory.h +6 -2
  30. package/Libraries/AppDelegate/RCTRootViewFactory.mm +27 -43
  31. package/Libraries/AppDelegate/RCTUIConfiguratorProtocol.h +56 -0
  32. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +2 -1
  33. package/Libraries/Blob/React-RCTBlob.podspec +3 -1
  34. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +19 -3
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +77 -5
  36. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +4 -4
  37. package/Libraries/Components/Button.js +9 -4
  38. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +3 -1
  39. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +7 -0
  40. package/Libraries/Components/Pressable/Pressable.d.ts +2 -2
  41. package/Libraries/Components/Pressable/Pressable.js +7 -7
  42. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +13 -7
  43. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +3 -2
  44. package/Libraries/Components/SafeAreaView/SafeAreaView.js +4 -4
  45. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +0 -1
  46. package/Libraries/Components/ScrollView/ScrollView.js +51 -90
  47. package/Libraries/Components/ScrollView/ScrollViewCommands.js +1 -1
  48. package/Libraries/Components/ScrollView/ScrollViewContext.js +2 -0
  49. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +0 -2
  50. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +8 -9
  51. package/Libraries/Components/Switch/Switch.js +8 -6
  52. package/Libraries/Components/TV/TVFocusGuideView.js +2 -5
  53. package/Libraries/Components/TextInput/InputAccessoryView.js +1 -1
  54. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +4 -4
  55. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +6 -4
  56. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +2 -1
  57. package/Libraries/Components/TextInput/TextInput.d.ts +27 -4
  58. package/Libraries/Components/TextInput/TextInput.flow.js +36 -19
  59. package/Libraries/Components/TextInput/TextInput.js +38 -14
  60. package/Libraries/Components/TextInput/TextInputState.js +11 -13
  61. package/Libraries/Components/Touchable/BoundingDimensions.js +11 -3
  62. package/Libraries/Components/Touchable/Position.js +7 -2
  63. package/Libraries/Components/Touchable/Touchable.js +4 -0
  64. package/Libraries/Components/Touchable/TouchableBounce.js +6 -2
  65. package/Libraries/Components/Touchable/TouchableHighlight.js +5 -5
  66. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  67. package/Libraries/Components/Touchable/TouchableOpacity.js +7 -7
  68. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -2
  69. package/Libraries/Components/View/ReactNativeStyleAttributes.js +6 -1
  70. package/Libraries/Components/View/View.js +6 -11
  71. package/Libraries/Components/View/ViewNativeComponent.js +8 -111
  72. package/Libraries/Components/View/ViewPropTypes.d.ts +7 -0
  73. package/Libraries/Components/View/ViewPropTypes.js +0 -3
  74. package/Libraries/Core/ExceptionsManager.js +50 -29
  75. package/Libraries/Core/ReactNativeVersion.js +2 -2
  76. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +0 -1
  77. package/Libraries/Core/setUpBatchedBridge.js +1 -10
  78. package/Libraries/Core/setUpDeveloperTools.js +1 -5
  79. package/Libraries/Core/setUpErrorHandling.js +20 -18
  80. package/Libraries/Core/setUpReactDevTools.js +107 -8
  81. package/Libraries/Core/setUpSegmentFetcher.js +1 -0
  82. package/Libraries/Core/setUpTimers.js +21 -18
  83. package/Libraries/Debugging/DebuggingOverlay.js +4 -5
  84. package/Libraries/Image/AssetSourceResolver.js +12 -1
  85. package/Libraries/Image/Image.android.js +1 -5
  86. package/Libraries/Image/Image.d.ts +20 -29
  87. package/Libraries/Image/Image.ios.js +0 -2
  88. package/Libraries/Image/ImageBackground.js +2 -5
  89. package/Libraries/Image/ImageProps.js +7 -6
  90. package/Libraries/Image/ImageResizeMode.d.ts +8 -1
  91. package/Libraries/Image/ImageResizeMode.js +4 -1
  92. package/Libraries/Image/ImageSource.d.ts +0 -2
  93. package/Libraries/Image/ImageSource.js +0 -2
  94. package/Libraries/Image/ImageTypes.flow.js +11 -9
  95. package/Libraries/Image/ImageUtils.js +6 -3
  96. package/Libraries/Image/ImageViewNativeComponent.js +5 -3
  97. package/Libraries/Image/RCTImageUtils.mm +2 -0
  98. package/Libraries/Image/RCTResizeMode.h +4 -1
  99. package/Libraries/Image/RCTResizeMode.mm +1 -0
  100. package/Libraries/Image/React-RCTImage.podspec +1 -1
  101. package/Libraries/Inspector/Inspector.js +1 -0
  102. package/Libraries/Inspector/NetworkOverlay.js +4 -0
  103. package/Libraries/Inspector/ReactDevToolsOverlay.js +8 -14
  104. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +3 -5
  105. package/Libraries/Interaction/InteractionManager.js +6 -1
  106. package/Libraries/Interaction/InteractionManagerStub.js +176 -0
  107. package/Libraries/Interaction/TouchHistoryMath.js +22 -19
  108. package/Libraries/JSInspector/NetworkAgent.js +1 -1
  109. package/Libraries/LinkingIOS/RCTLinkingManager.mm +2 -1
  110. package/Libraries/LinkingIOS/React-RCTLinking.podspec +1 -1
  111. package/Libraries/Lists/FlatList.d.ts +1 -2
  112. package/Libraries/Lists/FlatList.js +2 -2
  113. package/Libraries/Lists/SectionListModern.js +7 -7
  114. package/Libraries/Lists/__flowtests__/FlatList-flowtest.js +2 -2
  115. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  116. package/Libraries/LogBox/Data/LogBoxData.js +3 -3
  117. package/Libraries/LogBox/LogBox.js +18 -5
  118. package/Libraries/LogBox/LogBoxInspectorContainer.js +1 -1
  119. package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -3
  120. package/Libraries/LogBox/UI/AnsiHighlight.js +26 -17
  121. package/Libraries/LogBox/UI/LogBoxButton.js +2 -2
  122. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +6 -1
  123. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  124. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +1 -1
  125. package/Libraries/LogBox/UI/LogBoxMessage.js +2 -2
  126. package/Libraries/LogBox/UI/LogBoxNotification.js +1 -1
  127. package/Libraries/Modal/Modal.d.ts +12 -0
  128. package/Libraries/Modal/Modal.js +31 -4
  129. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +1 -1
  130. package/Libraries/NativeComponent/BaseViewConfig.android.js +72 -1
  131. package/Libraries/NativeComponent/BaseViewConfig.ios.js +2 -1
  132. package/Libraries/NativeComponent/NativeComponentRegistry.js +3 -3
  133. package/Libraries/NativeComponent/StaticViewConfigValidator.js +0 -1
  134. package/Libraries/NativeComponent/TVViewConfig.js +1 -0
  135. package/Libraries/Network/FormData.js +11 -3
  136. package/Libraries/Network/React-RCTNetwork.podspec +1 -1
  137. package/Libraries/Network/XHRInterceptor.js +63 -14
  138. package/Libraries/Network/XMLHttpRequest.js +26 -1
  139. package/Libraries/NewAppScreen/components/HermesBadge.js +1 -1
  140. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +49 -2
  141. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  142. package/Libraries/Pressability/HoverState.js +2 -0
  143. package/Libraries/Pressability/Pressability.js +2 -3
  144. package/Libraries/Pressability/usePressability.js +4 -1
  145. package/Libraries/PushNotificationIOS/React-RCTPushNotification.podspec +1 -1
  146. package/Libraries/ReactNative/AppContainer.js +1 -1
  147. package/Libraries/ReactNative/AppRegistry.js +1 -11
  148. package/Libraries/ReactNative/DisplayMode.js +1 -1
  149. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +2 -3
  150. package/Libraries/ReactNative/RendererImplementation.js +18 -17
  151. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -3
  152. package/Libraries/ReactNative/renderApplication.js +9 -8
  153. package/Libraries/ReactNative/requireNativeComponent.js +5 -2
  154. package/Libraries/Renderer/shims/ReactFabric.js +3 -3
  155. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  156. package/Libraries/Renderer/shims/ReactNative.js +3 -3
  157. package/Libraries/Renderer/shims/ReactNativeTypes.js +22 -35
  158. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +5 -6
  159. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  160. package/Libraries/Settings/React-RCTSettings.podspec +1 -1
  161. package/Libraries/StyleSheet/StyleSheet.js +7 -1
  162. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +13 -2
  163. package/Libraries/StyleSheet/StyleSheetTypes.js +24 -6
  164. package/Libraries/StyleSheet/processBackgroundImage.js +87 -110
  165. package/Libraries/StyleSheet/processTransform.js +3 -34
  166. package/Libraries/Text/RCTTextAttributes.h +1 -2
  167. package/Libraries/Text/RCTTextAttributes.mm +9 -13
  168. package/Libraries/Text/Text.js +248 -249
  169. package/Libraries/Text/TextInput/Multiline/RCTUITextView.h +1 -0
  170. package/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h +1 -0
  171. package/Libraries/Text/TextInput/RCTBaseTextInputView.h +1 -0
  172. package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +25 -3
  173. package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.mm +1 -0
  174. package/Libraries/Text/TextInput/Singleline/RCTUITextField.h +1 -0
  175. package/Libraries/Text/TextNativeComponent.js +0 -1
  176. package/Libraries/TurboModule/TurboModuleRegistry.js +5 -5
  177. package/Libraries/Types/CoreEventTypes.d.ts +3 -10
  178. package/Libraries/Types/CoreEventTypes.js +4 -6
  179. package/Libraries/Utilities/Appearance.js +3 -1
  180. package/Libraries/Utilities/BackHandler.android.js +6 -18
  181. package/Libraries/Utilities/BackHandler.d.ts +0 -4
  182. package/Libraries/Utilities/BackHandler.ios.js +3 -16
  183. package/Libraries/Utilities/BackHandler.js.flow +0 -4
  184. package/Libraries/Utilities/HMRClient.js +3 -4
  185. package/Libraries/Utilities/Platform.flow.js +2 -2
  186. package/Libraries/Utilities/__mocks__/BackHandler.js +3 -8
  187. package/Libraries/Utilities/codegenNativeComponent.js +1 -1
  188. package/Libraries/Utilities/setAndForwardRef.js +2 -2
  189. package/Libraries/Utilities/useMergeRefs.js +26 -7
  190. package/Libraries/Vibration/React-RCTVibration.podspec +1 -1
  191. package/Libraries/WebSocket/WebSocketEvent.js +4 -1
  192. package/Libraries/WebSocket/WebSocketInterceptor.js +31 -13
  193. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +6 -5
  194. package/Libraries/promiseRejectionTrackingOptions.js +1 -1
  195. package/React/Base/RCTBridge.h +3 -0
  196. package/React/Base/RCTBridge.mm +12 -11
  197. package/React/Base/RCTBridgeModule.h +1 -9
  198. package/React/Base/RCTBridgeProxy.h +3 -0
  199. package/React/Base/RCTBridgeProxy.mm +10 -0
  200. package/React/Base/RCTCallInvoker.mm +5 -0
  201. package/React/Base/RCTConstants.h +2 -12
  202. package/React/Base/RCTConstants.m +3 -31
  203. package/React/Base/RCTConvert.mm +6 -1
  204. package/React/Base/RCTKeyCommands.m +0 -2
  205. package/React/Base/RCTModuleData.h +1 -7
  206. package/React/Base/RCTModuleData.mm +27 -34
  207. package/React/Base/RCTModuleMethod.mm +1 -1
  208. package/React/Base/RCTTouchEvent.m +1 -1
  209. package/React/Base/RCTUtils.h +1 -1
  210. package/React/Base/RCTUtils.m +9 -10
  211. package/React/Base/RCTVersion.m +2 -2
  212. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.h +7 -0
  213. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +2 -5
  214. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingView.h +1 -1
  215. package/React/CoreModules/PlatformStubs/RCTStatusBarManager.mm +57 -0
  216. package/React/CoreModules/RCTAccessibilityManager.h +1 -0
  217. package/React/CoreModules/RCTAccessibilityManager.mm +27 -0
  218. package/React/CoreModules/RCTActionSheetManager.mm +14 -7
  219. package/React/CoreModules/RCTAppearance.h +1 -1
  220. package/React/CoreModules/RCTAppearance.mm +8 -2
  221. package/React/CoreModules/RCTDevLoadingView.mm +42 -25
  222. package/React/CoreModules/RCTDevMenu.mm +5 -1
  223. package/{ReactAndroid/src/main/java/com/facebook/perftest/PerfTestConfig.java → React/CoreModules/RCTDevToolsRuntimeSettingsModule.h} +3 -7
  224. package/React/CoreModules/RCTDevToolsRuntimeSettingsModule.mm +58 -0
  225. package/React/CoreModules/RCTDeviceInfo.mm +4 -1
  226. package/React/CoreModules/RCTEventDispatcher.mm +1 -1
  227. package/React/CoreModules/RCTExceptionsManager.h +2 -6
  228. package/React/CoreModules/RCTExceptionsManager.mm +35 -30
  229. package/React/CoreModules/React-CoreModules.podspec +12 -2
  230. package/React/CxxBridge/RCTCxxBridge.mm +20 -23
  231. package/React/CxxModule/RCTCxxMethod.mm +10 -2
  232. package/React/DevSupport/RCTInspectorDevServerHelper.mm +1 -5
  233. package/React/DevSupport/RCTPackagerConnection.mm +11 -0
  234. package/React/DevSupport/RCTPausedInDebuggerOverlayController.mm +5 -1
  235. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +2395 -0
  236. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +2854 -0
  237. package/React/FBReactNativeSpec/FBReactNativeSpecJSI-generated.cpp +2982 -0
  238. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +8201 -0
  239. package/React/Fabric/AppleEventBeat.cpp +31 -0
  240. package/{ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.h → React/Fabric/AppleEventBeat.h} +8 -11
  241. package/React/Fabric/Mounting/ComponentViews/Image/RCTImageComponentView.mm +0 -8
  242. package/React/Fabric/Mounting/ComponentViews/Modal/RCTFabricModalHostViewController.mm +1 -1
  243. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +0 -1
  244. package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +1 -1
  245. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +3 -1
  246. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +106 -59
  247. package/React/Fabric/Mounting/ComponentViews/Switch/RCTSwitchComponentView.mm +2 -1
  248. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +39 -15
  249. package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputUtils.mm +9 -0
  250. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +173 -105
  251. package/React/Fabric/Mounting/RCTMountingManager.h +1 -1
  252. package/React/Fabric/Mounting/RCTMountingManager.mm +1 -2
  253. package/React/Fabric/RCTScheduler.h +3 -2
  254. package/React/Fabric/RCTScheduler.mm +5 -8
  255. package/React/Fabric/RCTSurfacePointerHandler.mm +8 -6
  256. package/React/Fabric/RCTSurfacePresenter.mm +6 -18
  257. package/React/Fabric/Surface/RCTFabricSurface.mm +7 -6
  258. package/React/Fabric/Utils/PlatformRunLoopObserver.h +6 -3
  259. package/React/Fabric/Utils/PlatformRunLoopObserver.mm +2 -5
  260. package/React/Fabric/Utils/RCTLinearGradient.h +19 -0
  261. package/React/Fabric/Utils/RCTLinearGradient.mm +134 -0
  262. package/React/I18n/FBXXHashUtils.h +10 -8
  263. package/React/Inspector/RCTCxxInspectorPackagerConnection.mm +3 -0
  264. package/React/Inspector/RCTCxxInspectorPackagerConnectionDelegate.mm +3 -0
  265. package/React/Inspector/RCTCxxInspectorWebSocketAdapter.mm +12 -1
  266. package/React/Inspector/RCTInspector.mm +1 -1
  267. package/React/Modules/{RCTUIManager.m → RCTUIManager.mm} +7 -4
  268. package/React/React-RCTFBReactNativeSpec.podspec +87 -0
  269. package/React/React-RCTFabric.podspec +3 -1
  270. package/React/Tests/Text/RCTAttributedTextUtilsTest.mm +274 -0
  271. package/React/Tests/Text/RCTParagraphComponentViewTests.mm +20 -20
  272. package/React/Tests/Text/RCTTextAttributesTest.mm +49 -0
  273. package/React/Views/RCTBorderDrawing.h +5 -5
  274. package/React/Views/RCTBorderDrawing.m +21 -23
  275. package/React/Views/{RCTComponentData.m → RCTComponentData.mm} +5 -4
  276. package/React/Views/RCTLayout.m +3 -0
  277. package/React/Views/RCTModalHostViewController.m +1 -1
  278. package/React/Views/RCTModalHostViewManager.m +3 -23
  279. package/React/Views/RCTView.m +9 -10
  280. package/React/Views/RCTViewManager.m +1 -1
  281. package/React/Views/ScrollView/RCTScrollEvent.m +3 -0
  282. package/React/Views/ScrollView/RCTScrollView.h +1 -1
  283. package/React/Views/ScrollView/RCTScrollView.m +80 -26
  284. package/React/Views/ScrollView/RCTScrollViewManager.m +1 -0
  285. package/React/third-party.xcconfig +1 -1
  286. package/React-Core.podspec +4 -2
  287. package/ReactAndroid/api/ReactAndroid.api +339 -814
  288. package/ReactAndroid/build.gradle.kts +48 -13
  289. package/ReactAndroid/cmake-utils/ReactNative-application.cmake +18 -3
  290. package/ReactAndroid/gradle.properties +8 -2
  291. package/ReactAndroid/hermes-engine/build.gradle.kts +28 -26
  292. package/ReactAndroid/src/main/AndroidManifest.xml +1 -1
  293. package/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/DebugOverlayTag.kt +21 -0
  294. package/ReactAndroid/src/main/java/com/facebook/debug/holder/NoopPrinter.kt +4 -5
  295. package/ReactAndroid/src/main/java/com/facebook/debug/holder/Printer.kt +4 -4
  296. package/ReactAndroid/src/main/java/com/facebook/debug/holder/PrinterHolder.kt +2 -2
  297. package/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.kt +45 -0
  298. package/ReactAndroid/src/main/java/com/facebook/proguard/annotations/KeepGettersAndSetters.kt +24 -0
  299. package/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt +131 -0
  300. package/ReactAndroid/src/main/java/com/facebook/react/HeadlessJsTaskService.java +3 -3
  301. package/ReactAndroid/src/main/java/com/facebook/react/NativeModuleRegistryBuilder.kt +61 -0
  302. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +12 -0
  303. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +74 -34
  304. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +109 -27
  305. package/ReactAndroid/src/main/java/com/facebook/react/ReactFragment.java +25 -7
  306. package/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt +35 -3
  307. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +43 -27
  308. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java +2 -2
  309. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.kt +53 -0
  310. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.kt +43 -0
  311. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageTurboModuleManagerDelegate.java +1 -2
  312. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +28 -0
  313. package/ReactAndroid/src/main/java/com/facebook/react/TurboReactPackage.kt +13 -0
  314. package/ReactAndroid/src/main/java/com/facebook/react/{ViewManagerOnDemandReactPackage.java → ViewManagerOnDemandReactPackage.kt} +8 -8
  315. package/ReactAndroid/src/main/java/com/facebook/react/animated/EventAnimationDriver.kt +3 -0
  316. package/ReactAndroid/src/main/java/com/facebook/react/animated/InterpolationAnimatedNode.kt +2 -2
  317. package/ReactAndroid/src/main/java/com/facebook/react/animated/NativeAnimatedNodesManager.java +22 -30
  318. package/ReactAndroid/src/main/java/com/facebook/react/animated/ObjectAnimatedNode.kt +3 -1
  319. package/ReactAndroid/src/main/java/com/facebook/react/animated/TransformAnimatedNode.kt +5 -5
  320. package/ReactAndroid/src/main/java/com/facebook/react/bridge/AssertionException.kt +14 -0
  321. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java +2 -0
  322. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstance.kt +9 -10
  323. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CatalystInstanceImpl.java +2 -2
  324. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ColorPropConverter.java +4 -4
  325. package/ReactAndroid/src/main/java/com/facebook/react/bridge/CxxCallbackImpl.java +3 -6
  326. package/ReactAndroid/src/main/java/com/facebook/react/bridge/DynamicNative.kt +2 -5
  327. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{InvalidIteratorException.java → InvalidIteratorException.kt} +4 -9
  328. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{JSApplicationCausedNativeException.java → JSApplicationCausedNativeException.kt} +7 -16
  329. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JSApplicationIllegalArgumentException.kt +16 -0
  330. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.kt +148 -0
  331. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.kt +180 -0
  332. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArgumentsParseException.kt +16 -0
  333. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.kt +25 -0
  334. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeMap.kt +2 -2
  335. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NoSuchKeyException.kt +14 -0
  336. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{ObjectAlreadyConsumedException.java → ObjectAlreadyConsumedException.kt} +4 -9
  337. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +4 -3
  338. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactIgnorableMountingException.kt +35 -0
  339. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNoCrashBridgeNotAllowedSoftException.kt +17 -0
  340. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNoCrashSoftException.kt +22 -0
  341. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.kt +65 -0
  342. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableArray.kt +4 -4
  343. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableMap.kt +2 -2
  344. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.kt +92 -0
  345. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeMap.kt +8 -13
  346. package/ReactAndroid/src/main/java/com/facebook/react/bridge/{RetryableMountingLayerException.java → RetryableMountingLayerException.kt} +6 -11
  347. package/ReactAndroid/src/main/java/com/facebook/react/bridge/UIManagerProvider.kt +1 -5
  348. package/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.kt +52 -0
  349. package/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeMap.kt +6 -9
  350. package/ReactAndroid/src/main/java/com/facebook/react/bridge/interop/InteropModuleRegistry.kt +49 -0
  351. package/ReactAndroid/src/main/java/com/facebook/react/common/{SurfaceDelegate.java → SurfaceDelegate.kt} +11 -11
  352. package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegateFactory.kt +22 -0
  353. package/ReactAndroid/src/main/java/com/facebook/react/common/build/ReactBuildConfig.kt +4 -0
  354. package/ReactAndroid/src/main/java/com/facebook/react/common/futures/SimpleSettableFuture.kt +1 -1
  355. package/ReactAndroid/src/main/java/com/facebook/react/common/network/OkHttpCallUtil.kt +1 -1
  356. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.kt +35 -0
  357. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +14 -15
  358. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactHost.kt +52 -3
  359. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultTurboModuleManagerDelegate.kt +14 -18
  360. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgeDevSupportManager.java +2 -2
  361. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BridgelessDevSupportManager.java +124 -0
  362. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/CxxInspectorPackagerConnection.java +3 -3
  363. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DefaultDevSupportManagerFactory.kt +33 -26
  364. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java +6 -3
  365. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSettingsActivity.kt +2 -0
  366. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +28 -38
  367. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.java +22 -0
  368. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialog.kt +2 -1
  369. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt +2 -2
  370. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxModule.kt +1 -1
  371. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReactInstanceDevHelper.java +12 -2
  372. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.java +37 -3
  373. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.kt +3 -6
  374. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/StackTraceHelper.java +23 -5
  375. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt +1 -2
  376. package/ReactAndroid/src/main/java/com/facebook/react/fabric/DevToolsReactPerfLogger.java +6 -7
  377. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +24 -26
  378. package/ReactAndroid/src/main/java/com/facebook/react/fabric/{BindingImpl.kt → FabricUIManagerBinding.kt} +26 -20
  379. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerProviderImpl.java +1 -1
  380. package/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.kt +62 -0
  381. package/ReactAndroid/src/main/java/com/facebook/react/fabric/StateWrapperImpl.java +10 -14
  382. package/ReactAndroid/src/main/java/com/facebook/react/fabric/SurfaceHandlerBinding.java +10 -57
  383. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/EventEmitterWrapper.java +5 -17
  384. package/ReactAndroid/src/main/java/com/facebook/react/fabric/events/FabricEventEmitter.kt +3 -0
  385. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.java +45 -62
  386. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.java +10 -18
  387. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/DestroyUnmountedViewMountItem.kt +30 -0
  388. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/FabricNameComponentMapping.kt +3 -9
  389. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/IntBufferBatchMountItem.java +27 -11
  390. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/MountItemFactory.kt +5 -0
  391. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.kt +63 -0
  392. package/ReactAndroid/src/main/java/com/facebook/react/interfaces/exceptionmanager/ReactJsExceptionHandler.kt +20 -10
  393. package/ReactAndroid/src/main/java/com/facebook/react/interfaces/fabric/ReactSurface.kt +10 -10
  394. package/ReactAndroid/src/main/java/com/facebook/react/interfaces/fabric/SurfaceHandler.kt +0 -11
  395. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +78 -70
  396. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsAccessor.kt +2 -0
  397. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +106 -133
  398. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +25 -29
  399. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +25 -31
  400. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +136 -155
  401. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +23 -29
  402. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +25 -22
  403. package/ReactAndroid/src/main/java/com/facebook/react/internal/interop/InteropEventEmitter.kt +1 -0
  404. package/ReactAndroid/src/main/java/com/facebook/react/module/model/ReactModuleInfo.kt +11 -16
  405. package/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt +121 -3
  406. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +0 -1
  407. package/ReactAndroid/src/main/java/com/facebook/react/modules/appstate/AppStateModule.kt +1 -1
  408. package/ReactAndroid/src/main/java/com/facebook/react/modules/camera/ImageStoreManager.kt +1 -1
  409. package/ReactAndroid/src/main/java/com/facebook/react/modules/clipboard/ClipboardModule.kt +5 -5
  410. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ExceptionsManagerModule.kt +0 -11
  411. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactChoreographer.kt +7 -8
  412. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/DidJSUpdateUiDuringFrameDetector.kt +2 -0
  413. package/ReactAndroid/src/main/java/com/facebook/react/modules/debug/FpsDebugFrameCallback.kt +1 -1
  414. package/ReactAndroid/src/main/java/com/facebook/react/modules/devloading/DevLoadingModule.kt +1 -1
  415. package/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule.kt +49 -0
  416. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/AlertFragment.java +57 -5
  417. package/ReactAndroid/src/main/java/com/facebook/react/modules/dialog/DialogTitle.kt +55 -0
  418. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt +21 -5
  419. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ImageCacheControl.kt +31 -0
  420. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactNetworkImageRequest.kt +6 -3
  421. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/ReactOkHttpNetworkFetcher.kt +19 -5
  422. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/SystraceRequestListener.kt +21 -14
  423. package/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/XmlFormat.kt +143 -0
  424. package/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt +5 -2
  425. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.kt +2 -2
  426. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.kt +270 -0
  427. package/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.kt +4 -3
  428. package/ReactAndroid/src/main/java/com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule.kt +34 -0
  429. package/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.kt +1 -0
  430. package/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.kt +4 -0
  431. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.kt +126 -0
  432. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.kt +87 -0
  433. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
  434. package/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.kt +8 -4
  435. package/ReactAndroid/src/main/java/com/facebook/react/processing/ReactPropertyProcessor.java +2 -0
  436. package/ReactAndroid/src/main/java/com/facebook/react/reactperflogger/NativeModulePerfLogger.kt +11 -11
  437. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +15 -8
  438. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +153 -81
  439. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImplDevHelper.kt +75 -0
  440. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.java +2 -3
  441. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactSurfaceImpl.java +6 -2
  442. package/ReactAndroid/src/main/java/com/facebook/react/runtime/cxxreactpackage/CxxReactPackage.kt +2 -2
  443. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/{Continuation.java → Continuation.kt} +4 -8
  444. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/{ExecutorException.java → ExecutorException.kt} +3 -9
  445. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/Task.java +1 -1
  446. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/TaskCompletionSource.kt +50 -0
  447. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/UnobservedErrorNotifier.kt +27 -0
  448. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/{UnobservedTaskException.java → UnobservedTaskException.kt} +2 -8
  449. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt +272 -0
  450. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BackgroundStyleApplicator.kt +398 -62
  451. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +42 -36
  452. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerDelegate.kt +40 -1
  453. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BlendModeHelper.kt +7 -0
  454. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/FilterHelper.kt +3 -3
  455. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +1 -1
  456. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +4 -4
  457. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/PixelUtil.kt +12 -4
  458. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactAccessibilityDelegate.java +13 -14
  459. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/{ReactClippingProhibitedView.java → ReactClippingProhibitedView.kt} +6 -6
  460. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/{ReactCompoundView.java → ReactCompoundView.kt} +3 -5
  461. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/{ReactCompoundViewGroup.java → ReactCompoundViewGroup.kt} +3 -3
  462. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +2 -0
  463. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +2 -0
  464. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.java +4 -3
  465. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +2 -0
  466. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupDrawingOrderHelper.java +1 -1
  467. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.java +1 -1
  468. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.kt +5 -1
  469. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/annotations/ReactProp.java +0 -2
  470. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/annotations/ReactPropGroup.java +0 -2
  471. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/annotations/ReactPropertyHolder.java +0 -2
  472. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.kt +25 -0
  473. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BackgroundDrawable.kt +257 -0
  474. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/BorderDrawable.kt +1071 -0
  475. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CSSBackgroundDrawable.java +11 -9
  476. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/CompositeBackgroundDrawable.kt +200 -24
  477. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/InsetBoxShadowDrawable.kt +16 -20
  478. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutlineDrawable.kt +189 -0
  479. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/drawable/OutsetBoxShadowDrawable.kt +15 -11
  480. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/BlackHoleEventDispatcher.kt +1 -0
  481. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/FabricEventDispatcher.java +7 -0
  482. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/PointerEvent.java +2 -2
  483. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/events/TouchEvent.kt +1 -0
  484. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BackgroundImageLayer.kt +3 -2
  485. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderColors.kt +107 -0
  486. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt +53 -4
  487. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BoxShadow.kt +14 -3
  488. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/ComputedBorderRadius.kt +5 -1
  489. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/Gradient.kt +20 -29
  490. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt +137 -0
  491. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/OutlineStyle.kt +26 -0
  492. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.kt +129 -0
  493. package/ReactAndroid/src/main/java/com/facebook/react/util/JSStackTrace.kt +1 -1
  494. package/ReactAndroid/src/main/java/com/facebook/react/views/common/ContextUtils.kt +2 -1
  495. package/ReactAndroid/src/main/java/com/facebook/react/views/debuggingoverlay/DebuggingOverlayManager.kt +96 -90
  496. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMethod.kt +1 -0
  497. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.kt +4 -1
  498. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageDownloadListener.kt +1 -1
  499. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.kt +8 -56
  500. package/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.kt +74 -171
  501. package/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ImageSource.kt +7 -4
  502. package/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/MultiSourceHelper.kt +4 -0
  503. package/ReactAndroid/src/main/java/com/facebook/react/views/imagehelper/ResourceDrawableIdHelper.kt +0 -35
  504. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ModalHostShadowNode.kt +1 -1
  505. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt +8 -0
  506. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +24 -6
  507. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ProgressBarContainerView.kt +1 -1
  508. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ProgressBarShadowNode.kt +2 -2
  509. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.kt +25 -25
  510. package/ReactAndroid/src/main/java/com/facebook/react/views/safeareaview/ReactSafeAreaView.kt +1 -1
  511. package/ReactAndroid/src/main/java/com/facebook/react/views/safeareaview/ReactSafeAreaViewManager.kt +3 -3
  512. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerLegacyView.kt +46 -0
  513. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerViewManager.kt +27 -7
  514. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +56 -100
  515. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.java +15 -93
  516. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +44 -81
  517. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewCommandHelper.kt +101 -0
  518. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewHelper.kt +28 -49
  519. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.java +12 -63
  520. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ScrollEvent.kt +5 -11
  521. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/ReactSwipeRefreshLayout.kt +131 -0
  522. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/RefreshEvent.kt +2 -2
  523. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.kt +153 -0
  524. package/ReactAndroid/src/main/java/com/facebook/react/views/switchview/ReactSwitchManager.java +6 -0
  525. package/ReactAndroid/src/main/java/com/facebook/react/views/text/FontMetricsUtil.kt +72 -0
  526. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactBaseTextShadowNode.java +7 -1
  527. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.kt +60 -0
  528. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactRawTextManager.kt +45 -0
  529. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextAnchorViewManager.java +12 -59
  530. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextShadowNode.java +4 -0
  531. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.kt +92 -0
  532. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +20 -54
  533. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManagerCallback.kt +25 -0
  534. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +114 -0
  535. package/ReactAndroid/src/main/java/com/facebook/react/views/text/{ReactVirtualTextShadowNode.java → ReactVirtualTextShadowNode.kt} +3 -8
  536. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactVirtualTextViewManager.kt +38 -0
  537. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.java +161 -56
  538. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextTransform.kt +48 -0
  539. package/ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageViewManager.java +2 -0
  540. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomLineHeightSpan.kt +25 -38
  541. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/LegacyLineHeightSpan.kt +69 -0
  542. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactTextPaintHolderSpan.kt +13 -0
  543. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.java +54 -58
  544. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.java +16 -60
  545. package/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedView.kt +2 -2
  546. package/ReactAndroid/src/main/java/com/facebook/react/views/unimplementedview/ReactUnimplementedViewManager.kt +14 -4
  547. package/ReactAndroid/src/main/java/com/facebook/react/views/view/CanvasUtil.kt +0 -5
  548. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.kt +82 -0
  549. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactDrawableHelper.java +9 -5
  550. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.java +150 -351
  551. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +489 -0
  552. package/ReactAndroid/src/main/java/com/facebook/react/views/view/WindowUtil.kt +42 -0
  553. package/ReactAndroid/src/main/java/com/facebook/systrace/Systrace.kt +11 -0
  554. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaBoxSizing.java +33 -0
  555. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.java +3 -1
  556. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaErrata.java +2 -2
  557. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.java +2 -0
  558. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.java +4 -0
  559. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +10 -0
  560. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.java +4 -0
  561. package/ReactAndroid/src/main/jni/CMakeLists.txt +1 -0
  562. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +7 -0
  563. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnection.cpp +4 -2
  564. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnection.h +2 -0
  565. package/ReactAndroid/src/main/jni/react/fabric/{AsyncEventBeat.cpp → AndroidEventBeat.cpp} +10 -32
  566. package/ReactAndroid/src/main/jni/react/fabric/{AsyncEventBeat.h → AndroidEventBeat.h} +6 -9
  567. package/ReactAndroid/src/main/jni/react/fabric/Binding.h +3 -156
  568. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +1 -0
  569. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp +422 -313
  570. package/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.h +2 -4
  571. package/ReactAndroid/src/main/jni/react/fabric/{Binding.cpp → FabricUIManagerBinding.cpp} +249 -169
  572. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +174 -0
  573. package/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.cpp +5 -6
  574. package/ReactAndroid/src/main/jni/react/fabric/JFabricUIManager.h +2 -2
  575. package/ReactAndroid/src/main/jni/react/fabric/OnLoad.cpp +2 -2
  576. package/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.cpp +16 -48
  577. package/ReactAndroid/src/main/jni/react/fabric/StateWrapperImpl.h +1 -3
  578. package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.cpp +8 -36
  579. package/ReactAndroid/src/main/jni/react/fabric/SurfaceHandlerBinding.h +2 -9
  580. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +146 -174
  581. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +31 -36
  582. package/ReactAndroid/src/main/jni/react/jni/JCallback.h +1 -1
  583. package/ReactAndroid/src/main/jni/react/jni/JInspector.cpp +1 -1
  584. package/ReactAndroid/src/main/jni/react/jni/WritableNativeArray.cpp +2 -3
  585. package/ReactAndroid/src/main/jni/react/jni/WritableNativeArray.h +1 -1
  586. package/ReactAndroid/src/main/jni/react/jni/WritableNativeMap.cpp +2 -3
  587. package/ReactAndroid/src/main/jni/react/jni/WritableNativeMap.h +1 -1
  588. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactExceptionManager.cpp +29 -8
  589. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactExceptionManager.h +3 -1
  590. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.cpp +2 -1
  591. package/ReactAndroid/src/main/jni/react/turbomodule/CMakeLists.txt +0 -1
  592. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/BindingsInstallerHolder.cpp +12 -3
  593. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/BindingsInstallerHolder.h +15 -4
  594. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/OnLoad.cpp +0 -3
  595. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +1 -1
  596. package/ReactAndroid/src/main/jni/third-party/fast_float/CMakeLists.txt +13 -0
  597. package/ReactAndroid/src/main/jni/third-party/folly/CMakeLists.txt +5 -6
  598. package/ReactAndroid/src/main/res/views/alert/layout/alert_title_layout.xml +22 -0
  599. package/ReactCommon/React-Fabric.podspec +4 -2
  600. package/ReactCommon/React-FabricComponents.podspec +7 -4
  601. package/ReactCommon/React-FabricImage.podspec +6 -2
  602. package/ReactCommon/ReactCommon.podspec +5 -3
  603. package/ReactCommon/callinvoker/React-callinvoker.podspec +0 -6
  604. package/ReactCommon/cxxreact/CMakeLists.txt +0 -1
  605. package/ReactCommon/cxxreact/CxxNativeModule.cpp +6 -3
  606. package/ReactCommon/cxxreact/JSBigString.cpp +4 -4
  607. package/ReactCommon/cxxreact/JSExecutor.cpp +2 -4
  608. package/ReactCommon/cxxreact/React-cxxreact.podspec +4 -2
  609. package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
  610. package/ReactCommon/devtoolsruntimesettings/CMakeLists.txt +22 -0
  611. package/ReactCommon/devtoolsruntimesettings/DevToolsRuntimeSettings.cpp +27 -0
  612. package/ReactCommon/devtoolsruntimesettings/DevToolsRuntimeSettings.h +56 -0
  613. package/ReactCommon/hermes/React-hermes.podspec +3 -1
  614. package/ReactCommon/jsc/JSCRuntime.cpp +9 -9
  615. package/ReactCommon/jserrorhandler/CMakeLists.txt +2 -1
  616. package/ReactCommon/jserrorhandler/JsErrorHandler.cpp +369 -98
  617. package/ReactCommon/jserrorhandler/JsErrorHandler.h +34 -8
  618. package/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +8 -4
  619. package/ReactCommon/jserrorhandler/StackTraceParser.cpp +317 -0
  620. package/ReactCommon/jserrorhandler/StackTraceParser.h +23 -0
  621. package/ReactCommon/jserrorhandler/tests/StackTraceParserTest.cpp +1196 -0
  622. package/ReactCommon/jsi/React-jsi.podspec +8 -3
  623. package/ReactCommon/jsi/jsi/decorator.h +16 -0
  624. package/ReactCommon/jsi/jsi/jsi.cpp +113 -2
  625. package/ReactCommon/jsi/jsi/jsi.h +19 -6
  626. package/ReactCommon/jsi/jsi/test/testlib.cpp +59 -0
  627. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +4 -2
  628. package/ReactCommon/jsinspector-modern/HostAgent.cpp +6 -40
  629. package/ReactCommon/jsinspector-modern/HostAgent.h +4 -1
  630. package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +2 -0
  631. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +8 -7
  632. package/ReactCommon/jsinspector-modern/InspectorInterfaces.h +2 -2
  633. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +19 -9
  634. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.h +4 -2
  635. package/ReactCommon/jsinspector-modern/InspectorPackagerConnectionImpl.h +6 -3
  636. package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +1 -1
  637. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +59 -0
  638. package/ReactCommon/jsinspector-modern/TracingAgent.h +41 -0
  639. package/ReactCommon/jsinspector-modern/tests/InspectorPackagerConnectionTest.cpp +29 -33
  640. package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +130 -0
  641. package/ReactCommon/jsinspector-modern/tests/ReactInstanceIntegrationTest.cpp +4 -13
  642. package/ReactCommon/logger/React-logger.podspec +2 -1
  643. package/ReactCommon/react/bridging/Base.h +29 -4
  644. package/ReactCommon/react/bridging/Convert.h +2 -2
  645. package/ReactCommon/react/config/ReactNativeConfig.cpp +0 -3
  646. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +66 -63
  647. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +66 -64
  648. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +174 -219
  649. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +31 -35
  650. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +36 -48
  651. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +15 -18
  652. package/ReactCommon/react/featureflags/tests/ReactNativeFeatureFlagsTest.cpp +23 -0
  653. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboCxxModule.cpp +4 -16
  654. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboCxxModule.h +1 -1
  655. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h +22 -22
  656. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModuleBinding.cpp +65 -45
  657. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +5 -2
  658. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +2 -2
  659. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h +0 -8
  660. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +4 -22
  661. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleWithJSIBindings.h +9 -1
  662. package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
  663. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +10 -0
  664. package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +18 -2
  665. package/ReactCommon/react/nativemodule/devtoolsruntimesettings/CMakeLists.txt +24 -0
  666. package/ReactCommon/react/nativemodule/devtoolsruntimesettings/DevToolsRuntimeSettingsModule.cpp +35 -0
  667. package/ReactCommon/react/nativemodule/devtoolsruntimesettings/DevToolsRuntimeSettingsModule.h +27 -0
  668. package/ReactCommon/react/nativemodule/devtoolsruntimesettings/README.md +6 -0
  669. package/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +21 -3
  670. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +53 -61
  671. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +24 -28
  672. package/ReactCommon/react/nativemodule/featureflags/React-featureflagsnativemodule.podspec +19 -3
  673. package/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +18 -3
  674. package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.cpp +6 -1
  675. package/ReactCommon/react/nativemodule/intersectionobserver/NativeIntersectionObserver.h +3 -1
  676. package/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec +18 -3
  677. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +2 -1
  678. package/ReactCommon/react/nativemodule/samples/ReactCommon-Samples.podspec +6 -3
  679. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleJSIBindings.cpp +5 -4
  680. package/ReactCommon/react/nativemodule/samples/platform/android/SampleLegacyModule.kt +277 -0
  681. package/ReactCommon/react/nativemodule/samples/platform/android/SampleTurboModule.kt +245 -0
  682. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTNativeSampleTurboModuleSpec.h +4 -0
  683. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTSampleLegacyModule.mm +2 -2
  684. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTSampleTurboModule.mm +3 -2
  685. package/ReactCommon/react/nativemodule/webperformance/NativePerformance.cpp +261 -28
  686. package/ReactCommon/react/nativemodule/webperformance/NativePerformance.h +131 -0
  687. package/ReactCommon/react/performance/timeline/CircularBuffer.h +133 -0
  688. package/ReactCommon/react/performance/timeline/PerformanceEntry.h +53 -0
  689. package/ReactCommon/react/performance/timeline/PerformanceEntryBuffer.h +40 -0
  690. package/ReactCommon/react/performance/timeline/PerformanceEntryCircularBuffer.cpp +38 -0
  691. package/ReactCommon/react/performance/timeline/PerformanceEntryCircularBuffer.h +34 -0
  692. package/ReactCommon/react/performance/timeline/PerformanceEntryKeyedBuffer.cpp +59 -0
  693. package/ReactCommon/react/performance/timeline/PerformanceEntryKeyedBuffer.h +39 -0
  694. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.cpp +140 -206
  695. package/ReactCommon/react/performance/timeline/PerformanceEntryReporter.h +82 -131
  696. package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +92 -0
  697. package/ReactCommon/react/performance/timeline/PerformanceObserver.h +139 -0
  698. package/ReactCommon/react/performance/timeline/PerformanceObserverRegistry.cpp +34 -0
  699. package/ReactCommon/react/performance/timeline/PerformanceObserverRegistry.h +54 -0
  700. package/ReactCommon/react/performance/timeline/React-performancetimeline.podspec +1 -0
  701. package/ReactCommon/react/performance/timeline/tests/CircularBufferTest.cpp +127 -0
  702. package/ReactCommon/react/performance/timeline/tests/PerformanceEntryReporterTest.cpp +238 -254
  703. package/ReactCommon/react/performance/timeline/tests/PerformanceObserverTest.cpp +272 -0
  704. package/ReactCommon/react/renderer/animations/LayoutAnimationKeyFrameManager.h +4 -4
  705. package/ReactCommon/react/renderer/attributedstring/AttributedString.cpp +13 -28
  706. package/ReactCommon/react/renderer/attributedstring/AttributedString.h +8 -6
  707. package/ReactCommon/react/renderer/attributedstring/conversions.h +4 -0
  708. package/ReactCommon/react/renderer/attributedstring/tests/AttributedStringBoxTest.cpp +3 -3
  709. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +5 -18
  710. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +110 -36
  711. package/ReactCommon/react/renderer/components/image/ImageProps.h +8 -1
  712. package/ReactCommon/react/renderer/components/image/ImageShadowNode.h +1 -1
  713. package/ReactCommon/react/renderer/components/image/conversions.h +27 -0
  714. package/ReactCommon/react/renderer/components/rncore/ComponentDescriptors.cpp +0 -1
  715. package/ReactCommon/react/renderer/components/rncore/ComponentDescriptors.h +0 -1
  716. package/ReactCommon/react/renderer/components/rncore/Props.cpp +1 -0
  717. package/ReactCommon/react/renderer/components/rncore/Props.h +1 -0
  718. package/ReactCommon/react/renderer/components/rncore/ShadowNodes.cpp +0 -1
  719. package/ReactCommon/react/renderer/components/rncore/ShadowNodes.h +0 -11
  720. package/ReactCommon/react/renderer/components/rncore/States.h +0 -12
  721. package/ReactCommon/react/renderer/components/scrollview/AndroidHorizontalScrollContentViewComponentDescriptor.h +18 -0
  722. package/ReactCommon/react/renderer/components/scrollview/AndroidHorizontalScrollContentViewShadowNode.cpp +29 -0
  723. package/ReactCommon/react/renderer/components/scrollview/AndroidHorizontalScrollContentViewShadowNode.h +26 -0
  724. package/ReactCommon/react/renderer/components/scrollview/ScrollEvent.cpp +8 -6
  725. package/ReactCommon/react/renderer/components/scrollview/ScrollEvent.h +5 -0
  726. package/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.cpp +0 -8
  727. package/ReactCommon/react/renderer/components/scrollview/ScrollViewEventEmitter.h +0 -1
  728. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.cpp +98 -100
  729. package/ReactCommon/react/renderer/components/scrollview/ScrollViewProps.h +0 -1
  730. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +2 -2
  731. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +19 -10
  732. package/ReactCommon/react/renderer/components/text/ParagraphProps.cpp +18 -16
  733. package/ReactCommon/react/renderer/components/text/ParagraphShadowNode.cpp +1 -0
  734. package/ReactCommon/react/renderer/components/text/tests/BaseTextShadowNodeTest.cpp +93 -0
  735. package/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.cpp +38 -2
  736. package/ReactCommon/react/renderer/components/textinput/BaseTextInputProps.h +10 -0
  737. package/ReactCommon/react/renderer/components/textinput/{platform/ios/react/renderer/components/iostextinput/TextInputEventEmitter.cpp → TextInputEventEmitter.cpp} +3 -1
  738. package/ReactCommon/react/renderer/components/textinput/{platform/ios/react/renderer/components/iostextinput/TextInputEventEmitter.h → TextInputEventEmitter.h} +1 -0
  739. package/ReactCommon/react/renderer/components/textinput/baseConversions.h +46 -0
  740. package/ReactCommon/react/{utils/CoreFeatures.cpp → renderer/components/textinput/basePrimitives.h} +7 -4
  741. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputComponentDescriptor.h +8 -6
  742. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +44 -57
  743. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputProps.h +1 -3
  744. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.cpp +3 -20
  745. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputShadowNode.h +0 -4
  746. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputProps.cpp +8 -1
  747. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputProps.h +1 -0
  748. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputShadowNode.cpp +1 -18
  749. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputShadowNode.h +1 -5
  750. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/conversions.h +0 -20
  751. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/primitives.h +1 -20
  752. package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/propsConversions.h +0 -12
  753. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +36 -34
  754. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +206 -149
  755. package/ReactCommon/react/renderer/components/view/BaseViewProps.h +8 -2
  756. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.cpp +48 -36
  757. package/ReactCommon/react/renderer/components/view/TouchEventEmitter.h +18 -18
  758. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +2 -2
  759. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +60 -60
  760. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +23 -17
  761. package/ReactCommon/react/renderer/components/view/conversions.h +136 -68
  762. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +22 -20
  763. package/ReactCommon/react/renderer/components/view/primitives.h +2 -0
  764. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +20 -20
  765. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +2 -2
  766. package/ReactCommon/react/renderer/core/EventBeat.cpp +47 -14
  767. package/ReactCommon/react/renderer/core/EventBeat.h +87 -31
  768. package/ReactCommon/react/renderer/core/EventDispatcher.cpp +4 -9
  769. package/ReactCommon/react/renderer/core/EventDispatcher.h +1 -3
  770. package/ReactCommon/react/renderer/core/EventEmitter.h +0 -2
  771. package/ReactCommon/react/renderer/core/EventLogger.h +4 -1
  772. package/ReactCommon/react/renderer/core/EventQueue.cpp +3 -18
  773. package/ReactCommon/react/renderer/core/EventQueue.h +1 -8
  774. package/ReactCommon/react/renderer/core/LayoutPrimitives.h +1 -1
  775. package/ReactCommon/react/renderer/core/LayoutableShadowNode.cpp +4 -4
  776. package/ReactCommon/react/renderer/core/Props.cpp +3 -2
  777. package/ReactCommon/react/renderer/core/RawEvent.h +6 -0
  778. package/ReactCommon/react/renderer/core/RawValue.h +20 -20
  779. package/ReactCommon/react/renderer/core/ShadowNode.cpp +21 -28
  780. package/ReactCommon/react/renderer/core/ShadowNode.h +4 -13
  781. package/ReactCommon/react/renderer/core/ShadowNodeFamily.cpp +24 -1
  782. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +38 -1
  783. package/ReactCommon/react/renderer/core/ShadowNodeFragment.h +0 -1
  784. package/ReactCommon/react/renderer/core/ShadowNodeTraits.h +5 -5
  785. package/ReactCommon/react/renderer/core/conversions.h +3 -3
  786. package/ReactCommon/react/renderer/core/tests/EventQueueProcessorTest.cpp +4 -2
  787. package/ReactCommon/react/renderer/core/tests/ShadowNodeTest.cpp +2 -51
  788. package/ReactCommon/react/renderer/debug/DebugStringConvertible.h +18 -18
  789. package/ReactCommon/react/renderer/debug/React-rendererdebug.podspec +2 -0
  790. package/ReactCommon/react/renderer/dom/DOM.cpp +4 -7
  791. package/ReactCommon/react/renderer/graphics/BackgroundImage.h +4 -32
  792. package/ReactCommon/react/renderer/graphics/LinearGradient.h +62 -0
  793. package/ReactCommon/react/renderer/graphics/React-graphics.podspec +4 -1
  794. package/ReactCommon/react/renderer/graphics/Transform.h +4 -4
  795. package/ReactCommon/react/renderer/graphics/platform/android/react/renderer/graphics/PlatformColorParser.h +20 -48
  796. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/HostPlatformColor.mm +2 -2
  797. package/ReactCommon/react/renderer/graphics/platform/ios/react/renderer/graphics/RCTPlatformColorUtils.mm +2 -0
  798. package/ReactCommon/react/renderer/imagemanager/ImageRequest.cpp +4 -8
  799. package/ReactCommon/react/renderer/imagemanager/ImageRequest.h +2 -12
  800. package/ReactCommon/react/renderer/imagemanager/ImageResponse.h +1 -0
  801. package/ReactCommon/react/renderer/imagemanager/ImageResponseObserverCoordinator.cpp +27 -3
  802. package/ReactCommon/react/renderer/imagemanager/ImageResponseObserverCoordinator.h +15 -0
  803. package/ReactCommon/react/renderer/imagemanager/platform/ios/React-ImageManager.podspec +5 -2
  804. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImageManager.mm +24 -16
  805. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTImagePrimitivesConversions.h +44 -8
  806. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +4 -3
  807. package/ReactCommon/react/renderer/imagemanager/primitives.h +5 -0
  808. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +36 -23
  809. package/ReactCommon/react/renderer/mounting/Differentiator.h +41 -2
  810. package/ReactCommon/react/renderer/mounting/MountingCoordinator.cpp +12 -7
  811. package/ReactCommon/react/renderer/mounting/MountingCoordinator.h +0 -3
  812. package/ReactCommon/react/renderer/mounting/MountingOverrideDelegate.h +5 -4
  813. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +10 -130
  814. package/ReactCommon/react/renderer/mounting/ShadowTree.h +2 -7
  815. package/ReactCommon/react/renderer/mounting/ShadowTreeDelegate.h +1 -1
  816. package/ReactCommon/react/renderer/mounting/ShadowView.cpp +0 -8
  817. package/ReactCommon/react/renderer/mounting/ShadowView.h +0 -44
  818. package/ReactCommon/react/renderer/mounting/stubs/StubViewTree.cpp +4 -4
  819. package/ReactCommon/react/renderer/mounting/stubs/StubViewTree.h +1 -1
  820. package/ReactCommon/react/renderer/mounting/stubs/stubs.h +2 -2
  821. package/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +3 -3
  822. package/ReactCommon/react/renderer/mounting/tests/StateReconciliationTest.cpp +35 -109
  823. package/ReactCommon/react/renderer/observers/events/EventPerformanceLogger.cpp +10 -6
  824. package/ReactCommon/react/renderer/observers/events/EventPerformanceLogger.h +5 -2
  825. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserver.cpp +36 -16
  826. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserver.h +4 -3
  827. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.cpp +6 -2
  828. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverManager.h +1 -0
  829. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverState.cpp +9 -6
  830. package/ReactCommon/react/renderer/observers/intersection/IntersectionObserverState.h +11 -1
  831. package/ReactCommon/react/renderer/observers/mutation/MutationObserver.cpp +14 -16
  832. package/ReactCommon/react/renderer/observers/mutation/MutationObserver.h +15 -4
  833. package/ReactCommon/react/renderer/observers/mutation/MutationObserverManager.cpp +2 -2
  834. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +2 -1
  835. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp +6 -0
  836. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp +42 -51
  837. package/ReactCommon/react/renderer/runtimescheduler/primitives.h +0 -1
  838. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +86 -68
  839. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +33 -37
  840. package/ReactCommon/react/renderer/scheduler/Scheduler.h +3 -3
  841. package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +4 -2
  842. package/ReactCommon/react/renderer/scheduler/SchedulerToolbox.h +1 -2
  843. package/ReactCommon/react/renderer/scheduler/SurfaceManager.cpp +3 -3
  844. package/ReactCommon/react/renderer/scheduler/SurfaceManager.h +1 -1
  845. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.h +2 -3
  846. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +2 -0
  847. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +25 -0
  848. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +4 -10
  849. package/ReactCommon/react/renderer/uimanager/UIManager.h +1 -1
  850. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationDelegate.h +1 -1
  851. package/ReactCommon/react/renderer/uimanager/UIManagerBinding.cpp +1 -3
  852. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +1 -1
  853. package/ReactCommon/react/renderer/uimanager/consistency/tests/LazyShadowTreeRevisionConsistencyManagerTest.cpp +1 -1
  854. package/ReactCommon/react/renderer/uimanager/tests/PointerEventsProcessorTest.cpp +10 -10
  855. package/ReactCommon/react/runtime/React-RuntimeCore.podspec +5 -2
  856. package/ReactCommon/react/runtime/React-RuntimeHermes.podspec +4 -2
  857. package/ReactCommon/react/runtime/ReactInstance.cpp +189 -39
  858. package/ReactCommon/react/runtime/ReactInstance.h +1 -0
  859. package/ReactCommon/react/runtime/TimerManager.cpp +1 -1
  860. package/ReactCommon/react/runtime/hermes/HermesInstance.cpp +3 -6
  861. package/ReactCommon/react/runtime/iostests/RCTHostTests.mm +20 -2
  862. package/ReactCommon/react/runtime/platform/ios/React-RuntimeApple.podspec +7 -2
  863. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost+Internal.h +3 -0
  864. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.h +14 -6
  865. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +59 -21
  866. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.h +11 -6
  867. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +65 -27
  868. package/ReactCommon/react/runtime/tests/cxx/ReactInstanceTest.cpp +2 -131
  869. package/ReactCommon/react/timing/CMakeLists.txt +1 -1
  870. package/ReactCommon/react/timing/primitives.h +2 -0
  871. package/ReactCommon/react/utils/RunLoopObserver.cpp +2 -4
  872. package/ReactCommon/react/utils/RunLoopObserver.h +1 -3
  873. package/ReactCommon/react/utils/SharedFunction.h +1 -0
  874. package/ReactCommon/reactperflogger/CMakeLists.txt +4 -1
  875. package/ReactCommon/reactperflogger/React-perflogger.podspec +1 -0
  876. package/ReactCommon/reactperflogger/reactperflogger/FuseboxPerfettoDataSource.cpp +143 -0
  877. package/ReactCommon/reactperflogger/reactperflogger/FuseboxPerfettoDataSource.h +48 -0
  878. package/ReactCommon/reactperflogger/reactperflogger/ReactPerfLogger.cpp +65 -0
  879. package/ReactCommon/reactperflogger/reactperflogger/ReactPerfLogger.h +35 -0
  880. package/ReactCommon/reactperflogger/reactperflogger/ReactPerfetto.cpp +2 -0
  881. package/ReactCommon/runtimeexecutor/React-runtimeexecutor.podspec +2 -1
  882. package/ReactCommon/yoga/yoga/YGEnums.cpp +14 -2
  883. package/ReactCommon/yoga/yoga/YGEnums.h +8 -2
  884. package/ReactCommon/yoga/yoga/YGNodeStyle.cpp +38 -28
  885. package/ReactCommon/yoga/yoga/YGNodeStyle.h +3 -0
  886. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +51 -117
  887. package/ReactCommon/yoga/yoga/algorithm/Align.h +4 -4
  888. package/ReactCommon/yoga/yoga/algorithm/Baseline.cpp +2 -6
  889. package/ReactCommon/yoga/yoga/algorithm/BoundAxis.h +13 -6
  890. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +349 -341
  891. package/ReactCommon/yoga/yoga/algorithm/FlexLine.cpp +19 -18
  892. package/ReactCommon/yoga/yoga/algorithm/FlexLine.h +2 -4
  893. package/ReactCommon/yoga/yoga/enums/BoxSizing.h +40 -0
  894. package/ReactCommon/yoga/yoga/enums/Display.h +2 -1
  895. package/ReactCommon/yoga/yoga/enums/Errata.h +1 -1
  896. package/ReactCommon/yoga/yoga/node/LayoutableChildren.h +148 -0
  897. package/ReactCommon/yoga/yoga/node/Node.cpp +60 -7
  898. package/ReactCommon/yoga/yoga/node/Node.h +51 -9
  899. package/ReactCommon/yoga/yoga/style/Style.h +64 -1
  900. package/ReactCommon/yoga/yoga/style/StyleLength.h +0 -32
  901. package/ReactCommon/yoga/yoga/style/StyleValuePool.h +4 -4
  902. package/cli.js +2 -2
  903. package/gradle/libs.versions.toml +9 -8
  904. package/index.js +15 -8
  905. package/jest/setup.js +31 -0
  906. package/package.json +11 -13
  907. package/scripts/cocoapods/codegen_utils.rb +42 -17
  908. package/scripts/cocoapods/helpers.rb +16 -2
  909. package/scripts/cocoapods/new_architecture.rb +2 -0
  910. package/scripts/cocoapods/spm.rb +1 -1
  911. package/scripts/cocoapods/utils.rb +8 -6
  912. package/scripts/codegen/generate-artifacts-executor.js +336 -172
  913. package/scripts/codegen/generate-specs-cli-executor.js +3 -3
  914. package/scripts/codegen/templates/RCTAppDependencyProviderH.template +25 -0
  915. package/scripts/codegen/templates/RCTAppDependencyProviderMM.template +55 -0
  916. package/scripts/codegen/templates/RCTThirdPartyComponentsProviderH.template +16 -0
  917. package/scripts/codegen/templates/RCTThirdPartyComponentsProviderMM.template +23 -0
  918. package/scripts/codegen/templates/ReactAppDependencyProvider.podspec.template +34 -0
  919. package/scripts/generate-provider-cli.js +1 -2
  920. package/scripts/ios-configure-glog.sh +2 -2
  921. package/scripts/react-native-xcode.sh +8 -5
  922. package/scripts/react_native_pods.rb +16 -0
  923. package/sdks/.hermesversion +1 -1
  924. package/sdks/hermes-engine/hermes-engine.podspec +15 -9
  925. package/sdks/hermes-engine/hermes-utils.rb +29 -8
  926. package/sdks/hermes-engine/utils/build-ios-framework.sh +4 -24
  927. package/sdks/hermesc/linux64-bin/hermesc +0 -0
  928. package/sdks/hermesc/osx-bin/hermes +0 -0
  929. package/sdks/hermesc/osx-bin/hermesc +0 -0
  930. package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
  931. package/src/private/animated/NativeAnimatedHelper.js +18 -16
  932. package/src/private/animated/useAnimatedPropsMemo.js +356 -0
  933. package/src/private/components/HScrollViewNativeComponents.js +1 -27
  934. package/src/private/components/SafeAreaView_INTERNAL_DO_NOT_USE.js +11 -8
  935. package/src/private/components/VScrollViewNativeComponents.js +2 -25
  936. package/src/private/debugging/ReactDevToolsSettingsManager.android.js +20 -0
  937. package/src/private/debugging/ReactDevToolsSettingsManager.ios.js +30 -0
  938. package/{Libraries/ReactNative/ReactFabricInternals.js → src/private/debugging/ReactDevToolsSettingsManager.js.flow} +5 -6
  939. package/src/private/{fusebox → debugging}/setUpFuseboxReactDevToolsDispatcher.js +6 -0
  940. package/src/private/devmenu/DevMenu.d.ts +20 -0
  941. package/src/private/devmenu/DevMenu.js +31 -0
  942. package/src/private/featureflags/ReactNativeFeatureFlags.js +95 -86
  943. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +8 -2
  944. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +17 -19
  945. package/src/private/fusebox/specs/NativeReactDevToolsRuntimeSettingsModule.js +34 -0
  946. package/src/private/setup/setUpDOM.js +14 -6
  947. package/src/private/setup/setUpMutationObserver.js +5 -0
  948. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +1 -0
  949. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +8 -0
  950. package/src/private/specs/modules/NativeAccessibilityInfo.js +9 -0
  951. package/src/private/specs/modules/NativeAccessibilityManager.js +4 -0
  952. package/src/private/specs/modules/NativeActionSheetManager.js +2 -0
  953. package/src/private/specs/modules/NativeAppearance.js +4 -10
  954. package/src/private/specs/modules/NativeExceptionsManager.js +0 -12
  955. package/src/private/specs/modules/{NativeDevToolsSettingsManager.js → NativeReactDevToolsSettingsManager.js} +3 -5
  956. package/src/private/webapis/dom/geometry/DOMRect.js +2 -2
  957. package/src/private/webapis/dom/geometry/DOMRectReadOnly.js +2 -2
  958. package/src/private/webapis/dom/nodes/ReactNativeElement.js +2 -3
  959. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +102 -11
  960. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +26 -0
  961. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -0
  962. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  963. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +9 -0
  964. package/src/private/webapis/performance/EventTiming.js +13 -8
  965. package/src/private/webapis/performance/Performance.js +66 -73
  966. package/src/private/webapis/performance/PerformanceEntry.js +2 -5
  967. package/src/private/webapis/performance/PerformanceObserver.js +65 -164
  968. package/src/private/webapis/performance/RawPerformanceEntry.js +1 -1
  969. package/src/private/webapis/performance/UserTiming.js +11 -7
  970. package/src/private/webapis/performance/Utilities.js +18 -0
  971. package/src/private/webapis/performance/specs/NativePerformance.js +71 -2
  972. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +267 -0
  973. package/third-party-podspecs/DoubleConversion.podspec +1 -0
  974. package/third-party-podspecs/RCT-Folly.podspec +20 -11
  975. package/third-party-podspecs/boost.podspec +4 -0
  976. package/third-party-podspecs/fast_float.podspec +29 -0
  977. package/third-party-podspecs/glog.podspec +2 -1
  978. package/types/index.d.ts +1 -1
  979. package/types/public/ReactNativeTVTypes.d.ts +9 -7
  980. package/types/public/ReactNativeTypes.d.ts +4 -8
  981. package/types/tsconfig.json +13 -13
  982. package/Libraries/DevToolsSettings/DevToolsSettingsManager.android.js +0 -35
  983. package/Libraries/DevToolsSettings/DevToolsSettingsManager.d.ts +0 -20
  984. package/Libraries/DevToolsSettings/DevToolsSettingsManager.ios.js +0 -49
  985. package/Libraries/DevToolsSettings/DevToolsSettingsManager.js.flow +0 -19
  986. package/Libraries/DevToolsSettings/NativeDevToolsSettingsManager.js +0 -13
  987. package/React/Base/RCTRuntimeExecutorModule.h +0 -19
  988. package/ReactAndroid/src/main/java/com/facebook/debug/debugoverlay/model/DebugOverlayTag.java +0 -30
  989. package/ReactAndroid/src/main/java/com/facebook/debug/tags/ReactDebugOverlayTags.java +0 -38
  990. package/ReactAndroid/src/main/java/com/facebook/proguard/annotations/KeepGettersAndSetters.java +0 -27
  991. package/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.java +0 -159
  992. package/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackage.java +0 -131
  993. package/ReactAndroid/src/main/java/com/facebook/react/CompositeReactPackageTurboModuleManagerDelegate.java +0 -57
  994. package/ReactAndroid/src/main/java/com/facebook/react/EagerModuleProvider.java +0 -26
  995. package/ReactAndroid/src/main/java/com/facebook/react/NativeModuleRegistryBuilder.java +0 -69
  996. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackage.java +0 -67
  997. package/ReactAndroid/src/main/java/com/facebook/react/ReactPackageHelper.java +0 -56
  998. package/ReactAndroid/src/main/java/com/facebook/react/TurboReactPackage.java +0 -14
  999. package/ReactAndroid/src/main/java/com/facebook/react/bridge/AssertionException.java +0 -20
  1000. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JSApplicationIllegalArgumentException.java +0 -20
  1001. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyArray.java +0 -219
  1002. package/ReactAndroid/src/main/java/com/facebook/react/bridge/JavaOnlyMap.java +0 -266
  1003. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArgumentsParseException.java +0 -22
  1004. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NativeArray.java +0 -28
  1005. package/ReactAndroid/src/main/java/com/facebook/react/bridge/NoSuchKeyException.java +0 -20
  1006. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactIgnorableMountingException.java +0 -36
  1007. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNoCrashBridgeNotAllowedSoftException.java +0 -27
  1008. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactNoCrashSoftException.java +0 -29
  1009. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactSoftExceptionLogger.java +0 -66
  1010. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReadableNativeArray.java +0 -174
  1011. package/ReactAndroid/src/main/java/com/facebook/react/bridge/WritableNativeArray.java +0 -68
  1012. package/ReactAndroid/src/main/java/com/facebook/react/bridge/interop/InteropModuleRegistry.java +0 -57
  1013. package/ReactAndroid/src/main/java/com/facebook/react/common/SurfaceDelegateFactory.java +0 -24
  1014. package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +0 -79
  1015. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/AndroidManifest.xml +0 -10
  1016. package/ReactAndroid/src/main/java/com/facebook/react/fabric/Binding.kt +0 -74
  1017. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricComponents.kt +0 -45
  1018. package/ReactAndroid/src/main/java/com/facebook/react/fabric/LongStreamingStats.java +0 -76
  1019. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PreAllocateViewMountItem.java +0 -90
  1020. package/ReactAndroid/src/main/java/com/facebook/react/flipper/ReactNativeFlipper.kt +0 -34
  1021. package/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolssettings/DevToolsSettingsManagerModule.kt +0 -40
  1022. package/ReactAndroid/src/main/java/com/facebook/react/modules/intent/IntentModule.java +0 -280
  1023. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoHelpers.java +0 -175
  1024. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/AndroidInfoModule.java +0 -104
  1025. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessDevSupportManager.java +0 -159
  1026. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/TaskCompletionSource.java +0 -73
  1027. package/ReactAndroid/src/main/java/com/facebook/react/runtime/internal/bolts/UnobservedErrorNotifier.java +0 -42
  1028. package/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +0 -329
  1029. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManagerInterface.kt +0 -85
  1030. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/debug/NotThreadSafeViewHierarchyUpdateDebugListener.java +0 -30
  1031. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/util/ReactFindViewUtil.java +0 -138
  1032. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollContainerView.java +0 -82
  1033. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewCommandHelper.java +0 -141
  1034. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/ReactSwipeRefreshLayout.java +0 -151
  1035. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/SwipeRefreshLayoutManager.java +0 -194
  1036. package/ReactAndroid/src/main/java/com/facebook/react/views/text/FontMetricsUtil.java +0 -65
  1037. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactFontManager.java +0 -66
  1038. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactRawTextManager.java +0 -55
  1039. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextUpdate.java +0 -153
  1040. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManagerCallback.java +0 -25
  1041. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.java +0 -198
  1042. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactVirtualTextViewManager.java +0 -47
  1043. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextTransform.java +0 -63
  1044. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactClippingViewManager.java +0 -95
  1045. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundDrawable.java +0 -25
  1046. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewBackgroundManager.java +0 -146
  1047. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.java +0 -588
  1048. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/CompositeTurboModuleManagerDelegate.cpp +0 -58
  1049. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/CompositeTurboModuleManagerDelegate.h +0 -48
  1050. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTRuntimeExecutor.h +0 -32
  1051. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTRuntimeExecutor.mm +0 -34
  1052. package/ReactCommon/react/nativemodule/samples/platform/android/SampleLegacyModule.java +0 -246
  1053. package/ReactCommon/react/nativemodule/samples/platform/android/SampleTurboModule.java +0 -281
  1054. package/ReactCommon/react/nativemodule/webperformance/NativePerformanceObserver.cpp +0 -130
  1055. package/ReactCommon/react/nativemodule/webperformance/NativePerformanceObserver.h +0 -91
  1056. package/ReactCommon/react/performance/timeline/BoundedConsumableBuffer.h +0 -247
  1057. package/ReactCommon/react/performance/timeline/tests/BoundedConsumableBufferTest.cpp +0 -219
  1058. package/ReactCommon/react/renderer/scheduler/AsynchronousEventBeat.cpp +0 -57
  1059. package/ReactCommon/react/utils/CoreFeatures.h +0 -30
  1060. package/src/private/components/useSyncOnScroll.js +0 -48
  1061. package/src/private/fusebox/README.md +0 -12
  1062. package/src/private/webapis/performance/specs/NativePerformanceObserver.js +0 -61
  1063. package/src/private/webapis/performance/specs/__mocks__/NativePerformance.js +0 -67
  1064. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceObserver.js +0 -127
  1065. package/types/experimental.d.ts +0 -59
  1066. /package/src/private/{fusebox → debugging}/FuseboxSessionObserver.js +0 -0
@@ -0,0 +1,1071 @@
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
+ package com.facebook.react.uimanager.drawable
9
+
10
+ import android.content.Context
11
+ import android.graphics.Canvas
12
+ import android.graphics.Color
13
+ import android.graphics.ColorFilter
14
+ import android.graphics.DashPathEffect
15
+ import android.graphics.Paint
16
+ import android.graphics.Path
17
+ import android.graphics.PathEffect
18
+ import android.graphics.PixelFormat
19
+ import android.graphics.PointF
20
+ import android.graphics.Rect
21
+ import android.graphics.RectF
22
+ import android.graphics.Region
23
+ import android.graphics.drawable.Drawable
24
+ import android.os.Build
25
+ import com.facebook.react.uimanager.FloatUtil.floatsEqual
26
+ import com.facebook.react.uimanager.LengthPercentage
27
+ import com.facebook.react.uimanager.PixelUtil.dpToPx
28
+ import com.facebook.react.uimanager.PixelUtil.pxToDp
29
+ import com.facebook.react.uimanager.Spacing
30
+ import com.facebook.react.uimanager.style.BorderColors
31
+ import com.facebook.react.uimanager.style.BorderInsets
32
+ import com.facebook.react.uimanager.style.BorderRadiusProp
33
+ import com.facebook.react.uimanager.style.BorderRadiusStyle
34
+ import com.facebook.react.uimanager.style.BorderStyle
35
+ import com.facebook.react.uimanager.style.ColorEdges
36
+ import com.facebook.react.uimanager.style.ComputedBorderRadius
37
+ import com.facebook.react.uimanager.style.CornerRadii
38
+ import com.facebook.react.uimanager.style.LogicalEdge
39
+ import kotlin.math.abs
40
+ import kotlin.math.pow
41
+ import kotlin.math.roundToInt
42
+ import kotlin.math.sqrt
43
+ import kotlin.properties.ObservableProperty
44
+ import kotlin.properties.ReadWriteProperty
45
+ import kotlin.reflect.KProperty
46
+
47
+ // 0.inv() == 0xFFFFFFFF, all bits set to 1.
48
+ private const val ALL_BITS_SET = 0.inv()
49
+ // 0 == 0x00000000, all bits set to 0.
50
+ private const val ALL_BITS_UNSET = 0
51
+
52
+ internal class BorderDrawable(
53
+ private val context: Context,
54
+ val borderWidth: Spacing?,
55
+ /*
56
+ * We assume borderRadius & borderInsets to be shared across multiple drawables
57
+ * therefore user should invalidate this drawable when changing either of them
58
+ */
59
+ var borderRadius: BorderRadiusStyle?,
60
+ var borderInsets: BorderInsets?,
61
+ borderStyle: BorderStyle?,
62
+ ) : Drawable() {
63
+ private fun <T> invalidatingAndPathChange(initialValue: T): ReadWriteProperty<Any?, T> =
64
+ object : ObservableProperty<T>(initialValue) {
65
+ override fun afterChange(property: KProperty<*>, oldValue: T, newValue: T) {
66
+ if (oldValue != newValue) {
67
+ needUpdatePath = true
68
+ invalidateSelf()
69
+ }
70
+ }
71
+ }
72
+
73
+ /** Border Properties */
74
+ var borderStyle: BorderStyle? by invalidatingAndPathChange(borderStyle)
75
+
76
+ private var borderColors: BorderColors? = null
77
+ private var computedBorderColors: ColorEdges = ColorEdges()
78
+ private var computedBorderRadius: ComputedBorderRadius? = null
79
+ private var borderAlpha: Int = 255
80
+
81
+ /**
82
+ * There is a small gap between the edges of adjacent paths, such as between its Border and its
83
+ * Outline. The smallest amount (found to be 0.8f) is used to shrink outline's path, overlapping
84
+ * them and closing the visible gap.
85
+ */
86
+ private val gapBetweenPaths = 0.8f
87
+ private var pathForBorder: Path? = null
88
+
89
+ private val borderPaint: Paint = Paint(Paint.ANTI_ALIAS_FLAG)
90
+
91
+ private var needUpdatePath: Boolean = true
92
+
93
+ private var pathForSingleBorder: Path? = null
94
+ private var pathForOutline: Path? = null
95
+
96
+ private var centerDrawPath: Path? = null
97
+ private var outerClipPathForBorderRadius: Path? = null
98
+ var innerClipPathForBorderRadius: Path? = null
99
+ private set
100
+
101
+ /**
102
+ * Points that represent the inner point of the quadrilateral gotten from the intersection of L
103
+ * with the border-radius forming ellipse
104
+ */
105
+ private var innerBottomLeftCorner: PointF? = null
106
+ private var innerBottomRightCorner: PointF? = null
107
+ private var innerTopLeftCorner: PointF? = null
108
+ private var innerTopRightCorner: PointF? = null
109
+
110
+ private var innerClipTempRectForBorderRadius: RectF? = null
111
+ private var outerClipTempRectForBorderRadius: RectF? = null
112
+ private var tempRectForCenterDrawPath: RectF? = null
113
+
114
+ override fun invalidateSelf() {
115
+ needUpdatePath = true
116
+ super.invalidateSelf()
117
+ }
118
+
119
+ override fun onBoundsChange(bounds: Rect) {
120
+ super.onBoundsChange(bounds)
121
+ needUpdatePath = true
122
+ }
123
+
124
+ override fun setAlpha(alpha: Int) {
125
+ /*
126
+ * borderAlpha proportionally affects the alpha each borderColor edge
127
+ * for example if borderColor's alpha originally is 255 and borderAlpha is set to 128
128
+ * then the resulting alpha for that borderColor will be 128
129
+ */
130
+ borderAlpha = alpha
131
+ invalidateSelf()
132
+ }
133
+
134
+ override fun setColorFilter(colorFilter: ColorFilter?) {
135
+ // do nothing
136
+ }
137
+
138
+ @Deprecated("Deprecated in Java")
139
+ override fun getOpacity(): Int {
140
+ val maxBorderAlpha =
141
+ minOf(
142
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.left, borderAlpha))),
143
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.top, borderAlpha))),
144
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.right, borderAlpha))),
145
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.bottom, borderAlpha))))
146
+
147
+ // If the highest alpha value of all border edges is 0, then the drawable is TRANSPARENT.
148
+ if (maxBorderAlpha == 0) {
149
+ return PixelFormat.TRANSPARENT
150
+ }
151
+
152
+ val minBorderAlpha =
153
+ minOf(
154
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.left, borderAlpha))),
155
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.top, borderAlpha))),
156
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.right, borderAlpha))),
157
+ (Color.alpha(multiplyColorAlpha(computedBorderColors.bottom, borderAlpha))))
158
+
159
+ /*
160
+ * If the lowest alpha value of all border edges is 255, then the drawable is OPAQUE.
161
+ * else the drawable is TRANSLUCENT.
162
+ */
163
+ return when (minBorderAlpha) {
164
+ 255 -> PixelFormat.OPAQUE
165
+ else -> PixelFormat.TRANSLUCENT
166
+ }
167
+ }
168
+
169
+ override fun draw(canvas: Canvas) {
170
+ updatePathEffect()
171
+ computedBorderColors = borderColors?.resolve(layoutDirection, context) ?: computedBorderColors
172
+ if (borderRadius?.hasRoundedBorders() == true) {
173
+ drawRoundedBorders(canvas)
174
+ } else {
175
+ drawRectangularBorders(canvas)
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Here, "inner" refers to the border radius on the inside of the border. So it ends up being the
181
+ * "outer" border radius inset by the respective width.
182
+ */
183
+ private fun getInnerBorderRadius(computedRadius: Float, borderWidth: Float): Float {
184
+ return (computedRadius - borderWidth).coerceAtLeast(0f)
185
+ }
186
+
187
+ fun setBorderWidth(position: Int, width: Float) {
188
+ if (!floatsEqual(this.borderWidth?.getRaw(position), width)) {
189
+ this.borderWidth?.set(position, width)
190
+ when (position) {
191
+ Spacing.ALL,
192
+ Spacing.LEFT,
193
+ Spacing.BOTTOM,
194
+ Spacing.RIGHT,
195
+ Spacing.TOP,
196
+ Spacing.START,
197
+ Spacing.END -> needUpdatePath = true
198
+ }
199
+ invalidateSelf()
200
+ }
201
+ }
202
+
203
+ fun setBorderRadius(property: BorderRadiusProp, radius: LengthPercentage?) {
204
+ if (radius != borderRadius?.get(property)) {
205
+ borderRadius?.set(property, radius)
206
+ needUpdatePath = true
207
+ invalidateSelf()
208
+ }
209
+ }
210
+
211
+ fun setBorderStyle(style: String?) {
212
+ val borderStyle = if (style == null) null else BorderStyle.valueOf(style.uppercase())
213
+ this.borderStyle = borderStyle
214
+ needUpdatePath = true
215
+ invalidateSelf()
216
+ }
217
+
218
+ fun setBorderColor(position: LogicalEdge, color: Int?) {
219
+ borderColors = borderColors ?: BorderColors()
220
+
221
+ borderColors?.edgeColors?.set(position.ordinal, color)
222
+ needUpdatePath = true
223
+ invalidateSelf()
224
+ }
225
+
226
+ fun getBorderColor(position: LogicalEdge): Int {
227
+ return borderColors?.edgeColors?.get(position.ordinal) ?: Color.BLACK
228
+ }
229
+
230
+ public fun invalidateSelfAndUpdatePath() {
231
+ needUpdatePath = true
232
+ invalidateSelf()
233
+ }
234
+
235
+ private fun drawRectangularBorders(canvas: Canvas) {
236
+ val borderWidth = computeBorderInsets()
237
+ val borderLeft = borderWidth.left.roundToInt()
238
+ val borderTop = borderWidth.top.roundToInt()
239
+ val borderRight = borderWidth.right.roundToInt()
240
+ val borderBottom = borderWidth.bottom.roundToInt()
241
+
242
+ // maybe draw borders?
243
+ if (borderLeft > 0 || borderRight > 0 || borderTop > 0 || borderBottom > 0) {
244
+ val bounds = bounds
245
+ val left = bounds.left
246
+ val top = bounds.top
247
+
248
+ // Check for fast path to border drawing.
249
+ val fastBorderColor =
250
+ fastBorderCompatibleColorOrZero(
251
+ borderLeft,
252
+ borderTop,
253
+ borderRight,
254
+ borderBottom,
255
+ computedBorderColors.left,
256
+ computedBorderColors.top,
257
+ computedBorderColors.right,
258
+ computedBorderColors.bottom)
259
+ if (fastBorderColor != 0) {
260
+ if (Color.alpha(fastBorderColor) != 0) {
261
+ // Border color is not transparent.
262
+ val right = bounds.right
263
+ val bottom = bounds.bottom
264
+ borderPaint.color = multiplyColorAlpha(fastBorderColor, borderAlpha)
265
+ borderPaint.style = Paint.Style.STROKE
266
+ pathForSingleBorder = Path()
267
+ if (borderLeft > 0) {
268
+ pathForSingleBorder?.reset()
269
+ val width = borderWidth.left.roundToInt()
270
+ updatePathEffect(width)
271
+ borderPaint.strokeWidth = width.toFloat()
272
+ pathForSingleBorder?.moveTo((left + width / 2).toFloat(), top.toFloat())
273
+ pathForSingleBorder?.lineTo((left + width / 2).toFloat(), bottom.toFloat())
274
+ pathForSingleBorder?.let { canvas.drawPath(it, borderPaint) }
275
+ }
276
+ if (borderTop > 0) {
277
+ pathForSingleBorder?.reset()
278
+ val width = borderWidth.top.roundToInt()
279
+ updatePathEffect(width)
280
+ borderPaint.strokeWidth = width.toFloat()
281
+ pathForSingleBorder?.moveTo(left.toFloat(), (top + width / 2).toFloat())
282
+ pathForSingleBorder?.lineTo(right.toFloat(), (top + width / 2).toFloat())
283
+ pathForSingleBorder?.let { canvas.drawPath(it, borderPaint) }
284
+ }
285
+ if (borderRight > 0) {
286
+ pathForSingleBorder?.reset()
287
+ val width = borderWidth.right.roundToInt()
288
+ updatePathEffect(width)
289
+ borderPaint.strokeWidth = width.toFloat()
290
+ pathForSingleBorder?.moveTo((right - width / 2).toFloat(), top.toFloat())
291
+ pathForSingleBorder?.lineTo((right - width / 2).toFloat(), bottom.toFloat())
292
+ pathForSingleBorder?.let { canvas.drawPath(it, borderPaint) }
293
+ }
294
+ if (borderBottom > 0) {
295
+ pathForSingleBorder?.reset()
296
+ val width = borderWidth.bottom.roundToInt()
297
+ updatePathEffect(width)
298
+ borderPaint.strokeWidth = width.toFloat()
299
+ pathForSingleBorder?.moveTo(left.toFloat(), (bottom - width / 2).toFloat())
300
+ pathForSingleBorder?.lineTo(right.toFloat(), (bottom - width / 2).toFloat())
301
+ pathForSingleBorder?.let { canvas.drawPath(it, borderPaint) }
302
+ }
303
+ }
304
+ } else {
305
+ /**
306
+ * If the path drawn previously is of the same color, there would be a slight white space
307
+ * between borders with anti-alias set to true. Therefore we need to disable anti-alias, and
308
+ * after drawing is done, we will re-enable it.
309
+ */
310
+ borderPaint.isAntiAlias = false
311
+ val width = bounds.width()
312
+ val height = bounds.height()
313
+ if (borderLeft > 0) {
314
+ val x1 = left.toFloat()
315
+ val y1 = top.toFloat()
316
+ val x2 = (left + borderLeft).toFloat()
317
+ val y2 = (top + borderTop).toFloat()
318
+ val x3 = (left + borderLeft).toFloat()
319
+ val y3 = (top + height - borderBottom).toFloat()
320
+ val x4 = left.toFloat()
321
+ val y4 = (top + height).toFloat()
322
+ drawQuadrilateral(canvas, computedBorderColors.left, x1, y1, x2, y2, x3, y3, x4, y4)
323
+ }
324
+ if (borderTop > 0) {
325
+ val x1 = left.toFloat()
326
+ val y1 = top.toFloat()
327
+ val x2 = (left + borderLeft).toFloat()
328
+ val y2 = (top + borderTop).toFloat()
329
+ val x3 = (left + width - borderRight).toFloat()
330
+ val y3 = (top + borderTop).toFloat()
331
+ val x4 = (left + width).toFloat()
332
+ val y4 = top.toFloat()
333
+ drawQuadrilateral(canvas, computedBorderColors.top, x1, y1, x2, y2, x3, y3, x4, y4)
334
+ }
335
+ if (borderRight > 0) {
336
+ val x1 = (left + width).toFloat()
337
+ val y1 = top.toFloat()
338
+ val x2 = (left + width).toFloat()
339
+ val y2 = (top + height).toFloat()
340
+ val x3 = (left + width - borderRight).toFloat()
341
+ val y3 = (top + height - borderBottom).toFloat()
342
+ val x4 = (left + width - borderRight).toFloat()
343
+ val y4 = (top + borderTop).toFloat()
344
+ drawQuadrilateral(canvas, computedBorderColors.right, x1, y1, x2, y2, x3, y3, x4, y4)
345
+ }
346
+ if (borderBottom > 0) {
347
+ val x1 = left.toFloat()
348
+ val y1 = (top + height).toFloat()
349
+ val x2 = (left + width).toFloat()
350
+ val y2 = (top + height).toFloat()
351
+ val x3 = (left + width - borderRight).toFloat()
352
+ val y3 = (top + height - borderBottom).toFloat()
353
+ val x4 = (left + borderLeft).toFloat()
354
+ val y4 = (top + height - borderBottom).toFloat()
355
+ drawQuadrilateral(canvas, computedBorderColors.bottom, x1, y1, x2, y2, x3, y3, x4, y4)
356
+ }
357
+
358
+ // re-enable anti alias
359
+ borderPaint.isAntiAlias = true
360
+ }
361
+ }
362
+ }
363
+
364
+ private fun drawRoundedBorders(canvas: Canvas) {
365
+ updatePath()
366
+ canvas.save()
367
+
368
+ // Clip outer border
369
+ canvas.clipPath(checkNotNull(outerClipPathForBorderRadius))
370
+
371
+ val borderWidth = computeBorderInsets()
372
+ if (borderWidth.top > 0 ||
373
+ borderWidth.bottom > 0 ||
374
+ borderWidth.left > 0 ||
375
+ borderWidth.right > 0) {
376
+
377
+ // If it's a full and even border draw inner rect path with stroke
378
+ val fullBorderWidth: Float = getFullBorderWidth()
379
+ val borderColor = getBorderColor(LogicalEdge.ALL)
380
+
381
+ if (borderWidth.top == fullBorderWidth &&
382
+ borderWidth.bottom == fullBorderWidth &&
383
+ borderWidth.left == fullBorderWidth &&
384
+ borderWidth.right == fullBorderWidth &&
385
+ computedBorderColors.left == borderColor &&
386
+ computedBorderColors.top == borderColor &&
387
+ computedBorderColors.right == borderColor &&
388
+ computedBorderColors.bottom == borderColor) {
389
+ if (fullBorderWidth > 0) {
390
+ borderPaint.color = multiplyColorAlpha(borderColor, borderAlpha)
391
+ borderPaint.style = Paint.Style.STROKE
392
+ borderPaint.strokeWidth = fullBorderWidth
393
+ if (computedBorderRadius?.isUniform() == true) {
394
+ tempRectForCenterDrawPath?.let {
395
+ canvas.drawRoundRect(
396
+ it,
397
+ ((computedBorderRadius?.topLeft?.toPixelFromDIP()?.horizontal ?: 0f) -
398
+ borderWidth.left * 0.5f),
399
+ ((computedBorderRadius?.topLeft?.toPixelFromDIP()?.vertical ?: 0f) -
400
+ borderWidth.top * 0.5f),
401
+ borderPaint)
402
+ }
403
+ } else {
404
+ canvas.drawPath(checkNotNull(centerDrawPath), borderPaint)
405
+ }
406
+ }
407
+ }
408
+ // In the case of uneven border widths/colors draw quadrilateral in each direction
409
+ else {
410
+ borderPaint.style = Paint.Style.FILL
411
+
412
+ // Clip inner border
413
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
414
+ canvas.clipOutPath(checkNotNull(innerClipPathForBorderRadius))
415
+ } else {
416
+ @Suppress("DEPRECATION")
417
+ canvas.clipPath(checkNotNull(innerClipPathForBorderRadius), Region.Op.DIFFERENCE)
418
+ }
419
+ val outerClipTempRect = checkNotNull(outerClipTempRectForBorderRadius)
420
+ val left = outerClipTempRect.left
421
+ val right = outerClipTempRect.right
422
+ val top = outerClipTempRect.top
423
+ val bottom = outerClipTempRect.bottom
424
+
425
+ val innerTopLeftCorner = checkNotNull(this.innerTopLeftCorner)
426
+ val innerTopRightCorner = checkNotNull(this.innerTopRightCorner)
427
+ val innerBottomLeftCorner = checkNotNull(this.innerBottomLeftCorner)
428
+ val innerBottomRightCorner = checkNotNull(this.innerBottomRightCorner)
429
+
430
+ /**
431
+ * gapBetweenPaths is used to close the gap between the diagonal edges of the quadrilaterals
432
+ * on adjacent sides of the rectangle
433
+ */
434
+ if (borderWidth.left > 0) {
435
+ val x1 = left
436
+ val y1: Float = top - gapBetweenPaths
437
+ val x2 = innerTopLeftCorner.x
438
+ val y2: Float = innerTopLeftCorner.y - gapBetweenPaths
439
+ val x3 = innerBottomLeftCorner.x
440
+ val y3: Float = innerBottomLeftCorner.y + gapBetweenPaths
441
+ val x4 = left
442
+ val y4: Float = bottom + gapBetweenPaths
443
+ drawQuadrilateral(canvas, computedBorderColors.left, x1, y1, x2, y2, x3, y3, x4, y4)
444
+ }
445
+ if (borderWidth.top > 0) {
446
+ val x1: Float = left - gapBetweenPaths
447
+ val y1 = top
448
+ val x2: Float = innerTopLeftCorner.x - gapBetweenPaths
449
+ val y2 = innerTopLeftCorner.y
450
+ val x3: Float = innerTopRightCorner.x + gapBetweenPaths
451
+ val y3 = innerTopRightCorner.y
452
+ val x4: Float = right + gapBetweenPaths
453
+ val y4 = top
454
+ drawQuadrilateral(canvas, computedBorderColors.top, x1, y1, x2, y2, x3, y3, x4, y4)
455
+ }
456
+ if (borderWidth.right > 0) {
457
+ val x1 = right
458
+ val y1: Float = top - gapBetweenPaths
459
+ val x2 = innerTopRightCorner.x
460
+ val y2: Float = innerTopRightCorner.y - gapBetweenPaths
461
+ val x3 = innerBottomRightCorner.x
462
+ val y3: Float = innerBottomRightCorner.y + gapBetweenPaths
463
+ val x4 = right
464
+ val y4: Float = bottom + gapBetweenPaths
465
+ drawQuadrilateral(canvas, computedBorderColors.right, x1, y1, x2, y2, x3, y3, x4, y4)
466
+ }
467
+ if (borderWidth.bottom > 0) {
468
+ val x1: Float = left - gapBetweenPaths
469
+ val y1 = bottom
470
+ val x2: Float = innerBottomLeftCorner.x - gapBetweenPaths
471
+ val y2 = innerBottomLeftCorner.y
472
+ val x3: Float = innerBottomRightCorner.x + gapBetweenPaths
473
+ val y3 = innerBottomRightCorner.y
474
+ val x4: Float = right + gapBetweenPaths
475
+ val y4 = bottom
476
+ drawQuadrilateral(canvas, computedBorderColors.bottom, x1, y1, x2, y2, x3, y3, x4, y4)
477
+ }
478
+ }
479
+ }
480
+ canvas.restore()
481
+ }
482
+
483
+ private fun fastBorderCompatibleColorOrZero(
484
+ borderLeft: Int,
485
+ borderTop: Int,
486
+ borderRight: Int,
487
+ borderBottom: Int,
488
+ colorLeft: Int,
489
+ colorTop: Int,
490
+ colorRight: Int,
491
+ colorBottom: Int
492
+ ): Int {
493
+ val andSmear =
494
+ ((if (borderLeft > 0) colorLeft else ALL_BITS_SET) and
495
+ (if (borderTop > 0) colorTop else ALL_BITS_SET) and
496
+ (if (borderRight > 0) colorRight else ALL_BITS_SET) and
497
+ if (borderBottom > 0) colorBottom else ALL_BITS_SET)
498
+ val orSmear =
499
+ ((if (borderLeft > 0) colorLeft else ALL_BITS_UNSET) or
500
+ (if (borderTop > 0) colorTop else ALL_BITS_UNSET) or
501
+ (if (borderRight > 0) colorRight else ALL_BITS_UNSET) or
502
+ if (borderBottom > 0) colorBottom else ALL_BITS_UNSET)
503
+ return if (andSmear == orSmear) andSmear else 0
504
+ }
505
+
506
+ private fun drawQuadrilateral(
507
+ canvas: Canvas,
508
+ fillColor: Int,
509
+ x1: Float,
510
+ y1: Float,
511
+ x2: Float,
512
+ y2: Float,
513
+ x3: Float,
514
+ y3: Float,
515
+ x4: Float,
516
+ y4: Float
517
+ ) {
518
+ if (fillColor == Color.TRANSPARENT) {
519
+ return
520
+ }
521
+
522
+ if (this.pathForBorder == null) {
523
+ this.pathForBorder = Path()
524
+ }
525
+
526
+ borderPaint.color = multiplyColorAlpha(fillColor, borderAlpha)
527
+ this.pathForBorder?.reset()
528
+ this.pathForBorder?.moveTo(x1, y1)
529
+ this.pathForBorder?.lineTo(x2, y2)
530
+ this.pathForBorder?.lineTo(x3, y3)
531
+ this.pathForBorder?.lineTo(x4, y4)
532
+ this.pathForBorder?.lineTo(x1, y1)
533
+ this.pathForBorder?.let { canvas.drawPath(it, borderPaint) }
534
+ }
535
+
536
+ private fun computeBorderInsets(): RectF {
537
+ borderInsets?.resolve(layoutDirection, context)?.let {
538
+ return RectF(
539
+ if (it.left.isNaN()) 0f else it.left.dpToPx(),
540
+ if (it.top.isNaN()) 0f else it.top.dpToPx(),
541
+ if (it.right.isNaN()) 0f else it.right.dpToPx(),
542
+ if (it.bottom.isNaN()) 0f else it.bottom.dpToPx(),
543
+ )
544
+ }
545
+ return RectF(0f, 0f, 0f, 0f)
546
+ }
547
+
548
+ /** For rounded borders we use default "borderWidth" property. */
549
+ private fun getFullBorderWidth(): Float {
550
+ val borderWidth = this.borderWidth?.getRaw(Spacing.ALL) ?: Float.NaN
551
+ return if (!borderWidth.isNaN()) borderWidth else 0f
552
+ }
553
+
554
+ private fun updatePathEffect() {
555
+ /** Used for rounded border and rounded background. */
556
+ this.borderStyle?.let { style ->
557
+ val pathEffectForBorderStyle =
558
+ if (this.borderStyle != null) getPathEffect(style, getFullBorderWidth()) else null
559
+ borderPaint.setPathEffect(pathEffectForBorderStyle)
560
+ }
561
+ }
562
+
563
+ private fun updatePathEffect(borderWidth: Int) {
564
+ this.borderStyle?.let { style ->
565
+ val pathEffectForBorderStyle =
566
+ if (this.borderStyle != null) getPathEffect(style, borderWidth.toFloat()) else null
567
+ borderPaint.setPathEffect(pathEffectForBorderStyle)
568
+ }
569
+ }
570
+
571
+ private fun getPathEffect(style: BorderStyle, borderWidth: Float): PathEffect? {
572
+ return when (style) {
573
+ BorderStyle.SOLID -> null
574
+ BorderStyle.DASHED ->
575
+ DashPathEffect(
576
+ floatArrayOf(borderWidth * 3, borderWidth * 3, borderWidth * 3, borderWidth * 3), 0f)
577
+ BorderStyle.DOTTED ->
578
+ DashPathEffect(floatArrayOf(borderWidth, borderWidth, borderWidth, borderWidth), 0f)
579
+ }
580
+ }
581
+
582
+ private fun getEllipseIntersectionWithLine(
583
+ ellipseBoundsLeft: Double,
584
+ ellipseBoundsTop: Double,
585
+ ellipseBoundsRight: Double,
586
+ ellipseBoundsBottom: Double,
587
+ lineStartX: Double,
588
+ lineStartY: Double,
589
+ lineEndX: Double,
590
+ lineEndY: Double,
591
+ result: PointF
592
+ ) {
593
+ var _lineStartX = lineStartX
594
+ var _lineStartY = lineStartY
595
+ var _lineEndX = lineEndX
596
+ var _lineEndY = lineEndY
597
+ val ellipseCenterX = (ellipseBoundsLeft + ellipseBoundsRight) / 2
598
+ val ellipseCenterY = (ellipseBoundsTop + ellipseBoundsBottom) / 2
599
+ /**
600
+ * Step 1:
601
+ *
602
+ * Translate the line so that the ellipse is at the origin.
603
+ *
604
+ * Why? It makes the math easier by changing the ellipse equation from ((x -
605
+ * ellipseCenterX)/a)^2 + ((y - ellipseCenterY)/b)^2 = 1 to (x/a)^2 + (y/b)^2 = 1.
606
+ */
607
+ _lineStartX -= ellipseCenterX
608
+ _lineStartY -= ellipseCenterY
609
+ _lineEndX -= ellipseCenterX
610
+ _lineEndY -= ellipseCenterY
611
+ /**
612
+ * Step 2:
613
+ *
614
+ * Ellipse equation: (x/a)^2 + (y/b)^2 = 1 Line equation: y = mx + c
615
+ */
616
+ val a = abs(ellipseBoundsRight - ellipseBoundsLeft) / 2
617
+ val b = abs(ellipseBoundsBottom - ellipseBoundsTop) / 2
618
+ val m = (_lineEndY - _lineStartY) / (_lineEndX - _lineStartX)
619
+ val c = _lineStartY - m * _lineStartX // Just a point on the line
620
+ /**
621
+ * Step 3:
622
+ *
623
+ * Substitute the Line equation into the Ellipse equation. Solve for x. Eventually, you'll have
624
+ * to use the quadratic formula.
625
+ *
626
+ * Quadratic formula: Ax^2 + Bx + C = 0
627
+ */
628
+ val A = b * b + a * a * m * m
629
+ val B = 2 * a * a * c * m
630
+ val C = a * a * (c * c - b * b)
631
+ /**
632
+ * Step 4:
633
+ *
634
+ * Apply Quadratic formula. D = determinant / 2A
635
+ */
636
+ val D = sqrt(-C / A + (B / (2 * A)).pow(2.0))
637
+ val x2 = -B / (2 * A) - D
638
+ val y2 = m * x2 + c
639
+ /**
640
+ * Step 5:
641
+ *
642
+ * Undo the space transformation in Step 5.
643
+ */
644
+ val x = x2 + ellipseCenterX
645
+ val y = y2 + ellipseCenterY
646
+ if (!x.isNaN() && !y.isNaN()) {
647
+ result.x = x.toFloat()
648
+ result.y = y.toFloat()
649
+ }
650
+ }
651
+
652
+ private fun updatePath() {
653
+ if (!needUpdatePath) {
654
+ return
655
+ }
656
+
657
+ needUpdatePath = false
658
+
659
+ // Path
660
+ innerClipPathForBorderRadius = innerClipPathForBorderRadius ?: Path()
661
+ outerClipPathForBorderRadius = outerClipPathForBorderRadius ?: Path()
662
+ pathForOutline = Path()
663
+
664
+ // RectF
665
+ innerClipTempRectForBorderRadius = innerClipTempRectForBorderRadius ?: RectF()
666
+ outerClipTempRectForBorderRadius = outerClipTempRectForBorderRadius ?: RectF()
667
+ tempRectForCenterDrawPath = tempRectForCenterDrawPath ?: RectF()
668
+
669
+ innerClipPathForBorderRadius?.reset()
670
+ outerClipPathForBorderRadius?.reset()
671
+
672
+ innerClipTempRectForBorderRadius?.set(bounds)
673
+ outerClipTempRectForBorderRadius?.set(bounds)
674
+ tempRectForCenterDrawPath?.set(bounds)
675
+
676
+ val borderWidth = computeBorderInsets()
677
+
678
+ // Clip border ONLY if its color is non transparent
679
+ if (Color.alpha(computedBorderColors.left) != 0 &&
680
+ Color.alpha(computedBorderColors.top) != 0 &&
681
+ Color.alpha(computedBorderColors.right) != 0 &&
682
+ Color.alpha(computedBorderColors.bottom) != 0) {
683
+ innerClipTempRectForBorderRadius?.top =
684
+ innerClipTempRectForBorderRadius?.top?.plus(borderWidth.top) ?: 0f
685
+ innerClipTempRectForBorderRadius?.bottom =
686
+ innerClipTempRectForBorderRadius?.bottom?.minus(borderWidth.bottom) ?: 0f
687
+ innerClipTempRectForBorderRadius?.left =
688
+ innerClipTempRectForBorderRadius?.left?.plus(borderWidth.left) ?: 0f
689
+ innerClipTempRectForBorderRadius?.right =
690
+ innerClipTempRectForBorderRadius?.right?.minus(borderWidth.right) ?: 0f
691
+ }
692
+
693
+ tempRectForCenterDrawPath?.top =
694
+ tempRectForCenterDrawPath?.top?.plus(borderWidth.top * 0.5f) ?: 0f
695
+ tempRectForCenterDrawPath?.bottom =
696
+ tempRectForCenterDrawPath?.bottom?.minus(borderWidth.bottom * 0.5f) ?: 0f
697
+ tempRectForCenterDrawPath?.left =
698
+ tempRectForCenterDrawPath?.left?.plus(borderWidth.left * 0.5f) ?: 0f
699
+ tempRectForCenterDrawPath?.right =
700
+ tempRectForCenterDrawPath?.right?.minus(borderWidth.right * 0.5f) ?: 0f
701
+
702
+ computedBorderRadius =
703
+ this.borderRadius?.resolve(
704
+ layoutDirection,
705
+ this.context,
706
+ outerClipTempRectForBorderRadius?.width()?.pxToDp() ?: 0f,
707
+ outerClipTempRectForBorderRadius?.height()?.pxToDp() ?: 0f,
708
+ )
709
+
710
+ val topLeftRadius = computedBorderRadius?.topLeft?.toPixelFromDIP() ?: CornerRadii(0f, 0f)
711
+ val topRightRadius = computedBorderRadius?.topRight?.toPixelFromDIP() ?: CornerRadii(0f, 0f)
712
+ val bottomLeftRadius = computedBorderRadius?.bottomLeft?.toPixelFromDIP() ?: CornerRadii(0f, 0f)
713
+ val bottomRightRadius =
714
+ computedBorderRadius?.bottomRight?.toPixelFromDIP() ?: CornerRadii(0f, 0f)
715
+
716
+ val innerTopLeftRadiusX: Float =
717
+ getInnerBorderRadius(topLeftRadius.horizontal, borderWidth.left)
718
+ val innerTopLeftRadiusY: Float = getInnerBorderRadius(topLeftRadius.vertical, borderWidth.top)
719
+ val innerTopRightRadiusX: Float =
720
+ getInnerBorderRadius(topRightRadius.horizontal, borderWidth.right)
721
+ val innerTopRightRadiusY: Float = getInnerBorderRadius(topRightRadius.vertical, borderWidth.top)
722
+ val innerBottomRightRadiusX: Float =
723
+ getInnerBorderRadius(bottomRightRadius.horizontal, borderWidth.right)
724
+ val innerBottomRightRadiusY: Float =
725
+ getInnerBorderRadius(bottomRightRadius.vertical, borderWidth.bottom)
726
+ val innerBottomLeftRadiusX: Float =
727
+ getInnerBorderRadius(bottomLeftRadius.horizontal, borderWidth.left)
728
+ val innerBottomLeftRadiusY: Float =
729
+ getInnerBorderRadius(bottomLeftRadius.vertical, borderWidth.bottom)
730
+
731
+ innerClipTempRectForBorderRadius?.let {
732
+ innerClipPathForBorderRadius?.addRoundRect(
733
+ it,
734
+ floatArrayOf(
735
+ innerTopLeftRadiusX,
736
+ innerTopLeftRadiusY,
737
+ innerTopRightRadiusX,
738
+ innerTopRightRadiusY,
739
+ innerBottomRightRadiusX,
740
+ innerBottomRightRadiusY,
741
+ innerBottomLeftRadiusX,
742
+ innerBottomLeftRadiusY),
743
+ Path.Direction.CW)
744
+ }
745
+
746
+ outerClipTempRectForBorderRadius?.let {
747
+ outerClipPathForBorderRadius?.addRoundRect(
748
+ it,
749
+ floatArrayOf(
750
+ topLeftRadius.horizontal,
751
+ topLeftRadius.vertical,
752
+ topRightRadius.horizontal,
753
+ topRightRadius.vertical,
754
+ bottomRightRadius.horizontal,
755
+ bottomRightRadius.vertical,
756
+ bottomLeftRadius.horizontal,
757
+ bottomLeftRadius.vertical),
758
+ Path.Direction.CW)
759
+ }
760
+
761
+ var extraRadiusForOutline = 0f
762
+
763
+ if (this.borderWidth != null) {
764
+ extraRadiusForOutline = this.borderWidth[Spacing.ALL] / 2f
765
+ }
766
+
767
+ pathForOutline?.addRoundRect(
768
+ RectF(bounds),
769
+ floatArrayOf(
770
+ topLeftRadius.horizontal + extraRadiusForOutline,
771
+ topLeftRadius.vertical + extraRadiusForOutline,
772
+ topRightRadius.horizontal + extraRadiusForOutline,
773
+ topRightRadius.vertical + extraRadiusForOutline,
774
+ bottomRightRadius.horizontal + extraRadiusForOutline,
775
+ bottomRightRadius.vertical + extraRadiusForOutline,
776
+ bottomLeftRadius.horizontal + extraRadiusForOutline,
777
+ bottomLeftRadius.vertical + extraRadiusForOutline),
778
+ Path.Direction.CW)
779
+
780
+ if (computedBorderRadius?.isUniform() != true) {
781
+ centerDrawPath = centerDrawPath ?: Path()
782
+ centerDrawPath?.reset()
783
+ tempRectForCenterDrawPath?.let {
784
+ centerDrawPath?.addRoundRect(
785
+ it,
786
+ floatArrayOf(
787
+ topLeftRadius.horizontal - borderWidth.left * 0.5f,
788
+ topLeftRadius.vertical - borderWidth.top * 0.5f,
789
+ topRightRadius.horizontal - borderWidth.right * 0.5f,
790
+ topRightRadius.vertical - borderWidth.top * 0.5f,
791
+ bottomRightRadius.horizontal - borderWidth.right * 0.5f,
792
+ bottomRightRadius.vertical - borderWidth.bottom * 0.5f,
793
+ bottomLeftRadius.horizontal - borderWidth.left * 0.5f,
794
+ bottomLeftRadius.vertical - borderWidth.bottom * 0.5f),
795
+ Path.Direction.CW)
796
+ }
797
+ }
798
+
799
+ /**
800
+ * Rounded Multi-Colored Border Algorithm:
801
+ *
802
+ * <p>Let O (for outer) = (top, left, bottom, right) be the rectangle that represents the size
803
+ * and position of a view V. Since the box-sizing of all React Native views is border-box, any
804
+ * border of V will render inside O.
805
+ *
806
+ * <p>Let BorderWidth = (borderTop, borderLeft, borderBottom, borderRight).
807
+ *
808
+ * <p>Let I (for inner) = O - BorderWidth.
809
+ *
810
+ * <p>Then, remembering that O and I are rectangles and that I is inside O, O - I gives us the
811
+ * border of V. Therefore, we can use canvas.clipPath/clipOutPath to draw V's border.
812
+ *
813
+ * <p>canvas.clipPath(O);
814
+ *
815
+ * <p>canvas.clipOutPath(I);
816
+ *
817
+ * <p>canvas.drawRect(O, paint);
818
+ *
819
+ * <p>This lets us draw non-rounded single-color borders.
820
+ *
821
+ * <p>To extend this algorithm to rounded single-color borders, we:
822
+ *
823
+ * <p>1. Curve the corners of O by the (border radii of V) using Path#addRoundRect.
824
+ *
825
+ * <p>2. Curve the corners of I by (border radii of V - border widths of V) using
826
+ * Path#addRoundRect.
827
+ *
828
+ * <p>Let O' = curve(O, border radii of V).
829
+ *
830
+ * <p>Let I' = curve(I, border radii of V - border widths of V)
831
+ *
832
+ * <p>The rationale behind this decision is the (first sentence of the) following section in the
833
+ * CSS Backgrounds and Borders Module Level 3:
834
+ * https://www.w3.org/TR/css3-background/#the-border-radius.
835
+ *
836
+ * <p>After both O and I have been curved, we can execute the following lines once again to
837
+ * render curved single-color borders:
838
+ *
839
+ * <p>canvas.clipPath(O);
840
+ *
841
+ * <p>canvas.clipOutPath(I);
842
+ *
843
+ * <p>canvas.drawRect(O, paint);
844
+ *
845
+ * <p>To extend this algorithm to rendering multi-colored rounded borders, we render each side
846
+ * of the border as its own quadrilateral. Suppose that we were handling the case where all the
847
+ * border radii are 0. Then, the four quadrilaterals would be:
848
+ *
849
+ * <p>Left: (O.left, O.top), (I.left, I.top), (I.left, I.bottom), (O.left, O.bottom)
850
+ *
851
+ * <p>Top: (O.left, O.top), (I.left, I.top), (I.right, I.top), (O.right, O.top)
852
+ *
853
+ * <p>Right: (O.right, O.top), (I.right, I.top), (I.right, I.bottom), (O.right, O.bottom)
854
+ *
855
+ * <p>Bottom: (O.right, O.bottom), (I.right, I.bottom), (I.left, I.bottom), (O.left, O.bottom)
856
+ *
857
+ * <p>Now, lets consider what happens when we render a rounded border (radii != 0). For the sake
858
+ * of simplicity, let's focus on the top edge of the Left border:
859
+ *
860
+ * <p>Let borderTopLeftRadius = 5. Let borderLeftWidth = 1. Let borderTopWidth = 2.
861
+ *
862
+ * <p>We know that O is curved by the ellipse E_O (a = 5, b = 5). We know that I is curved by
863
+ * the ellipse E_I (a = 5 - 1, b = 5 - 2).
864
+ *
865
+ * <p>Since we have clipping, it should be safe to set the top-left point of the Left
866
+ * quadrilateral's top edge to (O.left, O.top).
867
+ *
868
+ * <p>But, what should the top-right point be?
869
+ *
870
+ * <p>The fact that the border is curved shouldn't change the slope (nor the position) of the
871
+ * line connecting the top-left and top-right points of the Left quadrilateral's top edge.
872
+ * Therefore, The top-right point should lie somewhere on the line L = (1 - a) * (O.left, O.top)
873
+ * + a * (I.left, I.top).
874
+ *
875
+ * <p>a != 0, because then the top-left and top-right points would be the same and
876
+ * borderLeftWidth = 1. a != 1, because then the top-right point would not touch an edge of the
877
+ * ellipse E_I. We want the top-right point to touch an edge of the inner ellipse because the
878
+ * border curves with E_I on the top-left corner of V.
879
+ *
880
+ * <p>Therefore, it must be the case that a > 1. Two natural locations of the top-right point
881
+ * exist: 1. The first intersection of L with E_I. 2. The second intersection of L with E_I.
882
+ *
883
+ * <p>We choose the top-right point of the top edge of the Left quadrilateral to be an arbitrary
884
+ * intersection of L with E_I.
885
+ */
886
+ /**
887
+ * Rounded Multi-Colored Border Algorithm:
888
+ *
889
+ * Let O (for outer) = (top, left, bottom, right) be the rectangle that represents the size and
890
+ * position of a view V. Since the box-sizing of all React Native views is border-box, any
891
+ * border of V will render inside O.
892
+ *
893
+ * Let BorderWidth = (borderTop, borderLeft, borderBottom, borderRight).
894
+ *
895
+ * Let I (for inner) = O - BorderWidth.
896
+ *
897
+ * Then, remembering that O and I are rectangles and that I is inside O, O - I gives us the
898
+ * border of V. Therefore, we can use canvas.clipPath to draw V's border.
899
+ *
900
+ * canvas.clipPath(O, Region.OP.INTERSECT);
901
+ *
902
+ * canvas.clipPath(I, Region.OP.DIFFERENCE);
903
+ *
904
+ * canvas.drawRect(O, paint);
905
+ *
906
+ * This lets us draw non-rounded single-color borders.
907
+ *
908
+ * To extend this algorithm to rounded single-color borders, we:
909
+ * 1. Curve the corners of O by the (border radii of V) using Path#addRoundRect.
910
+ * 2. Curve the corners of I by (border radii of V - border widths of V) using
911
+ * Path#addRoundRect.
912
+ *
913
+ * Let O' = curve(O, border radii of V).
914
+ *
915
+ * Let I' = curve(I, border radii of V - border widths of V)
916
+ *
917
+ * The rationale behind this decision is the (first sentence of the) following section in the
918
+ * CSS Backgrounds and Borders Module Level 3:
919
+ * https://www.w3.org/TR/css3-background/#the-border-radius.
920
+ *
921
+ * After both O and I have been curved, we can execute the following lines once again to render
922
+ * curved single-color borders:
923
+ *
924
+ * canvas.clipPath(O);
925
+ *
926
+ * canvas.clipOutPath(I);
927
+ *
928
+ * canvas.drawRect(O, paint);
929
+ *
930
+ * To extend this algorithm to rendering multi-colored rounded borders, we render each side of
931
+ * the border as its own quadrilateral. Suppose that we were handling the case where all the
932
+ * border radii are 0. Then, the four quadrilaterals would be:
933
+ *
934
+ * Left: (O.left, O.top), (I.left, I.top), (I.left, I.bottom), (O.left, O.bottom)
935
+ *
936
+ * Top: (O.left, O.top), (I.left, I.top), (I.right, I.top), (O.right, O.top)
937
+ *
938
+ * Right: (O.right, O.top), (I.right, I.top), (I.right, I.bottom), (O.right, O.bottom)
939
+ *
940
+ * Bottom: (O.right, O.bottom), (I.right, I.bottom), (I.left, I.bottom), (O.left, O.bottom)
941
+ *
942
+ * Now, lets consider what happens when we render a rounded border (radii != 0). For the sake of
943
+ * simplicity, let's focus on the top edge of the Left border:
944
+ *
945
+ * Let borderTopLeftRadius = 5. Let borderLeftWidth = 1. Let borderTopWidth = 2.
946
+ *
947
+ * We know that O is curved by the ellipse E_O (a = 5, b = 5). We know that I is curved by the
948
+ * ellipse E_I (a = 5 - 1, b = 5 - 2).
949
+ *
950
+ * Since we have clipping, it should be safe to set the top-left point of the Left
951
+ * quadrilateral's top edge to (O.left, O.top).
952
+ *
953
+ * But, what should the top-right point be?
954
+ *
955
+ * The fact that the border is curved shouldn't change the slope (nor the position) of the line
956
+ * connecting the top-left and top-right points of the Left quadrilateral's top edge. Therefore,
957
+ * The top-right point should lie somewhere on the line L = (1 - a) * (O.left, O.top)
958
+ * + a * (I.left, I.top).
959
+ *
960
+ * a != 0, because then the top-left and top-right points would be the same and borderLeftWidth
961
+ * = 1. a != 1, because then the top-right point would not touch an edge of the ellipse E_I. We
962
+ * want the top-right point to touch an edge of the inner ellipse because the border curves with
963
+ * E_I on the top-left corner of V.
964
+ *
965
+ * Therefore, it must be the case that a > 1. Two natural locations of the top-right point
966
+ * exist: 1. The first intersection of L with E_I. 2. The second intersection of L with E_I.
967
+ *
968
+ * We choose the top-right point of the top edge of the Left quadrilateral to be an arbitrary
969
+ * intersection of L with E_I.
970
+ */
971
+ val innerRect = innerClipTempRectForBorderRadius
972
+ val outerRect = outerClipTempRectForBorderRadius
973
+
974
+ if (innerRect != null && outerRect != null) {
975
+ /** Compute innerTopLeftCorner */
976
+ innerTopLeftCorner = innerTopLeftCorner ?: PointF()
977
+
978
+ innerTopLeftCorner?.x = innerRect.left
979
+ innerTopLeftCorner?.y = innerRect.top
980
+
981
+ innerTopLeftCorner?.let {
982
+ getEllipseIntersectionWithLine( // Ellipse Bounds
983
+ innerRect.left.toDouble(),
984
+ innerRect.top.toDouble(),
985
+ (innerRect.left + 2 * innerTopLeftRadiusX).toDouble(),
986
+ (innerRect.top + 2 * innerTopLeftRadiusY).toDouble(), // Line Start
987
+ outerRect.left.toDouble(),
988
+ outerRect.top.toDouble(), // Line End
989
+ innerRect.left.toDouble(),
990
+ innerRect.top.toDouble(), // Result
991
+ it)
992
+ }
993
+
994
+ /** Compute innerBottomLeftCorner */
995
+ innerBottomLeftCorner = innerBottomLeftCorner ?: PointF()
996
+
997
+ innerBottomLeftCorner?.x = innerRect.left
998
+ innerBottomLeftCorner?.y = innerRect.bottom
999
+ innerBottomLeftCorner?.let {
1000
+ getEllipseIntersectionWithLine( // Ellipse Bounds
1001
+ innerRect.left.toDouble(),
1002
+ (innerRect.bottom - 2 * innerBottomLeftRadiusY).toDouble(),
1003
+ (innerRect.left + 2 * innerBottomLeftRadiusX).toDouble(),
1004
+ innerRect.bottom.toDouble(), // Line Start
1005
+ outerRect.left.toDouble(),
1006
+ outerRect.bottom.toDouble(), // Line End
1007
+ innerRect.left.toDouble(),
1008
+ innerRect.bottom.toDouble(), // Result
1009
+ it)
1010
+ }
1011
+
1012
+ /** Compute innerTopRightCorner */
1013
+ innerTopRightCorner = innerTopRightCorner ?: PointF()
1014
+
1015
+ innerTopRightCorner?.x = innerRect.right
1016
+ innerTopRightCorner?.y = innerRect.top
1017
+
1018
+ innerTopRightCorner?.let {
1019
+ getEllipseIntersectionWithLine( // Ellipse Bounds
1020
+ (innerRect.right - 2 * innerTopRightRadiusX).toDouble(),
1021
+ innerRect.top.toDouble(),
1022
+ innerRect.right.toDouble(),
1023
+ (innerRect.top + 2 * innerTopRightRadiusY).toDouble(), // Line Start
1024
+ outerRect.right.toDouble(),
1025
+ outerRect.top.toDouble(), // Line End
1026
+ innerRect.right.toDouble(),
1027
+ innerRect.top.toDouble(), // Result
1028
+ it)
1029
+ }
1030
+
1031
+ /** Compute innerBottomRightCorner */
1032
+ innerBottomRightCorner = innerBottomRightCorner ?: PointF()
1033
+
1034
+ innerBottomRightCorner?.x = innerRect.right
1035
+ innerBottomRightCorner?.y = innerRect.bottom
1036
+
1037
+ innerBottomRightCorner?.let {
1038
+ getEllipseIntersectionWithLine( // Ellipse Bounds
1039
+ (innerRect.right - 2 * innerBottomRightRadiusX).toDouble(),
1040
+ (innerRect.bottom - 2 * innerBottomRightRadiusY).toDouble(),
1041
+ innerRect.right.toDouble(),
1042
+ innerRect.bottom.toDouble(), // Line Start
1043
+ outerRect.right.toDouble(),
1044
+ outerRect.bottom.toDouble(), // Line End
1045
+ innerRect.right.toDouble(),
1046
+ innerRect.bottom.toDouble(), // Result
1047
+ it)
1048
+ }
1049
+ }
1050
+ }
1051
+
1052
+ /**
1053
+ * Multiplies the color with the given alpha.
1054
+ *
1055
+ * @param color color to be multiplied
1056
+ * @param alpha value between 0 and 255
1057
+ * @return multiplied color
1058
+ */
1059
+ private fun multiplyColorAlpha(color: Int, rawAlpha: Int): Int {
1060
+ if (rawAlpha == 255) {
1061
+ return color
1062
+ }
1063
+ if (rawAlpha == 0) {
1064
+ return color and 0x00FFFFFF
1065
+ }
1066
+ val alpha = rawAlpha + (rawAlpha shr 7) // make it 0..256
1067
+ val colorAlpha = color ushr 24
1068
+ val multipliedAlpha = colorAlpha * (alpha shr 7) shr 8
1069
+ return (multipliedAlpha shl 24) or (color and 0x00FFFFFF)
1070
+ }
1071
+ }