react-native-tvos 0.86.0-2 → 0.87.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 (1076) hide show
  1. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +19 -24
  2. package/Libraries/Alert/Alert.js +38 -1
  3. package/Libraries/Animated/AnimatedExports.js +22 -0
  4. package/Libraries/Animated/AnimatedExports.js.flow +1 -1
  5. package/Libraries/Animated/AnimatedImplementation.js +120 -3
  6. package/Libraries/Animated/Easing.js +4 -3
  7. package/Libraries/Animated/NativeAnimatedAllowlist.js +37 -0
  8. package/Libraries/Animated/animations/Animation.js +14 -5
  9. package/Libraries/Animated/animations/DecayAnimation.js +1 -0
  10. package/Libraries/Animated/animations/SpringAnimation.js +1 -0
  11. package/Libraries/Animated/animations/TimingAnimation.js +9 -0
  12. package/Libraries/Animated/createAnimatedComponent.js +3 -3
  13. package/Libraries/Animated/nodes/AnimatedColor.js +8 -8
  14. package/Libraries/Animated/nodes/AnimatedInterpolation.js +106 -0
  15. package/Libraries/Animated/nodes/AnimatedProps.js +27 -3
  16. package/Libraries/Animated/nodes/AnimatedValue.js +8 -0
  17. package/Libraries/Animated/nodes/AnimatedValueXY.js +2 -2
  18. package/Libraries/AppDelegate/RCTAppDelegate.h +5 -9
  19. package/Libraries/AppDelegate/RCTAppDelegate.mm +0 -20
  20. package/Libraries/AppDelegate/RCTAppSetupUtils.h +0 -18
  21. package/Libraries/AppDelegate/RCTAppSetupUtils.mm +0 -78
  22. package/Libraries/AppDelegate/RCTDefaultReactNativeFactoryDelegate.mm +18 -17
  23. package/Libraries/AppDelegate/RCTReactNativeFactory.h +5 -41
  24. package/Libraries/AppDelegate/RCTReactNativeFactory.mm +0 -82
  25. package/Libraries/AppDelegate/RCTRootViewFactory.h +4 -1
  26. package/Libraries/AppDelegate/RCTRootViewFactory.mm +3 -98
  27. package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +1 -0
  28. package/Libraries/AppState/AppState.d.ts +4 -1
  29. package/Libraries/AppState/AppState.js +32 -17
  30. package/Libraries/BatchedBridge/MessageQueue.js +42 -51
  31. package/Libraries/BatchedBridge/NativeModules.js +7 -0
  32. package/Libraries/Blob/Blob.js +7 -1
  33. package/Libraries/Blob/FileReader.js +6 -0
  34. package/Libraries/Blob/URLSearchParams.js.flow +1 -1
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +20 -9
  36. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +30 -43
  37. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +59 -49
  38. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +2 -2
  39. package/Libraries/Components/Button.js +96 -182
  40. package/Libraries/Components/Clipboard/Clipboard.js +5 -0
  41. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +2 -2
  42. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +8 -69
  43. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +10 -1
  44. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js +2 -0
  45. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroidTypes.js +26 -31
  46. package/Libraries/Components/Keyboard/Keyboard.js +23 -60
  47. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +15 -7
  48. package/Libraries/Components/Pressable/Pressable.js +39 -17
  49. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +5 -6
  50. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +4 -4
  51. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +2 -2
  52. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidTypes.js +17 -0
  53. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  54. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +2 -2
  55. package/Libraries/Components/RefreshControl/RefreshControl.js +40 -50
  56. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +2 -2
  57. package/Libraries/Components/SafeAreaView/SafeAreaView.js +8 -8
  58. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
  59. package/Libraries/Components/ScrollView/ScrollView.d.ts +55 -43
  60. package/Libraries/Components/ScrollView/ScrollView.js +202 -115
  61. package/Libraries/Components/ScrollView/ScrollViewCommands.js +4 -4
  62. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  63. package/Libraries/Components/StatusBar/StatusBar.d.ts +7 -54
  64. package/Libraries/Components/StatusBar/StatusBar.js +85 -161
  65. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +2 -2
  66. package/Libraries/Components/Switch/Switch.js +76 -75
  67. package/Libraries/Components/Switch/SwitchNativeComponent.js +2 -2
  68. package/Libraries/Components/TV/TVEventHandler.js +16 -1
  69. package/Libraries/Components/TextInput/InputAccessoryView.js +13 -61
  70. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +2 -2
  71. package/Libraries/Components/TextInput/TextInput.d.ts +9 -2
  72. package/Libraries/Components/TextInput/TextInput.flow.js +19 -2
  73. package/Libraries/Components/TextInput/TextInput.js +116 -111
  74. package/Libraries/Components/TextInput/TextInputNativeCommands.js +3 -3
  75. package/Libraries/Components/ToastAndroid/ToastAndroid.android.js +25 -19
  76. package/Libraries/Components/Touchable/Touchable.js +94 -95
  77. package/Libraries/Components/Touchable/TouchableHighlight.js +46 -114
  78. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +13 -25
  79. package/Libraries/Components/Touchable/TouchableOpacity.js +14 -84
  80. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +4 -3
  81. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +2 -2
  82. package/Libraries/Components/View/ReactNativeStyleAttributes.js +1 -0
  83. package/Libraries/Components/View/View.js +85 -64
  84. package/Libraries/Components/View/ViewAccessibility.d.ts +11 -1
  85. package/Libraries/Components/View/ViewAccessibility.js +16 -5
  86. package/Libraries/Components/View/ViewNativeComponent.js +6 -8
  87. package/Libraries/Components/View/ViewPropTypes.js +55 -9
  88. package/Libraries/Core/InitializeCore.js +9 -1
  89. package/Libraries/Core/ReactFiberErrorDialog.js +3 -3
  90. package/Libraries/Core/ReactNativeVersion.js +2 -2
  91. package/Libraries/Core/Timers/JSTimers.js +53 -52
  92. package/Libraries/Core/setUpGlobals.js +9 -4
  93. package/Libraries/Core/setUpNavigator.js +6 -1
  94. package/Libraries/Core/setUpReactDevTools.js +0 -118
  95. package/Libraries/Core/setUpXHR.js +6 -2
  96. package/Libraries/Debugging/DebuggingOverlay.js +2 -2
  97. package/Libraries/Debugging/DebuggingOverlayNativeComponent.js +2 -2
  98. package/Libraries/EventEmitter/NativeEventEmitter.js +29 -0
  99. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +7 -7
  100. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.js +3 -0
  101. package/Libraries/Image/AssetSourceResolver.js +18 -27
  102. package/Libraries/Image/Image.android.js +13 -2
  103. package/Libraries/Image/Image.ios.js +3 -1
  104. package/Libraries/Image/ImageBackground.js +30 -18
  105. package/Libraries/Image/ImageProps.js +116 -117
  106. package/Libraries/Image/ImageSource.d.ts +1 -1
  107. package/Libraries/Image/ImageSource.js +9 -9
  108. package/Libraries/Image/ImageSourceUtils.js +10 -7
  109. package/Libraries/Image/ImageTypes.flow.js +2 -0
  110. package/Libraries/Image/ImageViewNativeComponent.js +1 -1
  111. package/Libraries/Image/RCTImageLoader.mm +60 -63
  112. package/Libraries/Image/RCTImageStoreManager.h +0 -2
  113. package/Libraries/Image/RelativeImageStub.js +1 -1
  114. package/Libraries/Image/resolveAssetSource.js +1 -1
  115. package/Libraries/Interaction/PanResponder.js +102 -97
  116. package/Libraries/LayoutAnimation/LayoutAnimation.js +22 -6
  117. package/Libraries/Linking/Linking.js +24 -23
  118. package/Libraries/Lists/FlatList.d.ts +6 -17
  119. package/Libraries/Lists/FlatList.js +7 -8
  120. package/Libraries/Lists/SectionList.js +7 -0
  121. package/Libraries/Lists/VirtualizedList.js +3 -0
  122. package/Libraries/Lists/VirtualizedSectionList.js +4 -0
  123. package/Libraries/LogBox/LogBox.js +3 -3
  124. package/Libraries/LogBox/UI/AnsiHighlight.js +2 -1
  125. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +2 -2
  126. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +4 -1
  127. package/Libraries/LogBox/UI/LogBoxInspectorFooterButton.js +3 -1
  128. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +8 -2
  129. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +9 -2
  130. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +17 -4
  131. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +3 -1
  132. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -1
  133. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +2 -0
  134. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +4 -2
  135. package/Libraries/LogBox/UI/LogBoxMessage.js +18 -5
  136. package/Libraries/LogBox/UI/LogBoxNotificationCountBadge.js +4 -1
  137. package/Libraries/LogBox/UI/LogBoxNotificationMessage.js +1 -0
  138. package/Libraries/LogBox/UI/LogBoxStyle.js +0 -4
  139. package/Libraries/Modal/Modal.d.ts +5 -4
  140. package/Libraries/Modal/Modal.js +71 -37
  141. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +2 -2
  142. package/Libraries/NativeComponent/BaseViewConfig.android.js +17 -0
  143. package/Libraries/NativeComponent/ViewConfig.js +3 -3
  144. package/Libraries/NativeComponent/ViewConfigIgnore.js +1 -1
  145. package/Libraries/Network/RCTHTTPRequestHandler.h +1 -1
  146. package/Libraries/Performance/Systrace.js +36 -0
  147. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +4 -2
  148. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +29 -17
  149. package/Libraries/Pressability/Pressability.js +1 -1
  150. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +4 -0
  151. package/Libraries/ReactNative/AppContainer-dev.js +3 -1
  152. package/Libraries/ReactNative/AppRegistry.flow.js +1 -0
  153. package/Libraries/ReactNative/AppRegistry.js +15 -11
  154. package/Libraries/ReactNative/AppRegistryImpl.js +57 -11
  155. package/Libraries/ReactNative/DisplayMode.js +1 -1
  156. package/Libraries/ReactNative/FabricUIManager.js +29 -26
  157. package/Libraries/ReactNative/I18nManager.js +20 -0
  158. package/Libraries/ReactNative/UIManager.js +53 -0
  159. package/Libraries/ReactNative/renderApplication.js +1 -1
  160. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +5 -126
  161. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js.flow +5 -41
  162. package/Libraries/Renderer/shims/ReactNativeTypes.js +36 -36
  163. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +4 -4
  164. package/Libraries/Settings/Settings.ios.js +22 -0
  165. package/Libraries/Share/Share.js +25 -28
  166. package/Libraries/StyleSheet/PlatformColorValueTypes.js.flow +6 -0
  167. package/Libraries/StyleSheet/StyleSheet.js +42 -2
  168. package/Libraries/StyleSheet/StyleSheet.js.flow +1 -1
  169. package/Libraries/StyleSheet/StyleSheetExports.js +7 -5
  170. package/Libraries/StyleSheet/StyleSheetExports.js.flow +1 -1
  171. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +24 -3
  172. package/Libraries/StyleSheet/StyleSheetTypes.js +34 -6
  173. package/Libraries/StyleSheet/flattenStyle.js +28 -13
  174. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -14
  175. package/Libraries/Text/Text.js +12 -9
  176. package/Libraries/Text/TextEffectNativeComponent.js +31 -0
  177. package/Libraries/Text/TextInput/Multiline/RCTUITextView.mm +0 -1
  178. package/Libraries/Text/TextInput/RCTBackedTextInputViewProtocol.h +0 -1
  179. package/Libraries/Text/TextInput/Singleline/RCTUITextField.mm +0 -1
  180. package/Libraries/Text/TextProps.js +59 -93
  181. package/Libraries/Text/requireNativeTextEffect.js +28 -0
  182. package/Libraries/TurboModule/RCTExport.js +1 -1
  183. package/Libraries/Types/CoreEventTypes.d.ts +8 -0
  184. package/Libraries/Types/CoreEventTypes.js +32 -29
  185. package/Libraries/Types/UIManagerJSInterface.js +2 -2
  186. package/Libraries/Utilities/Appearance.d.ts +32 -17
  187. package/Libraries/Utilities/Appearance.js +35 -18
  188. package/Libraries/Utilities/BackHandler.android.js +13 -33
  189. package/Libraries/Utilities/BackHandler.js.flow +18 -2
  190. package/Libraries/Utilities/DevSettings.js +8 -1
  191. package/Libraries/Utilities/Dimensions.js +18 -12
  192. package/Libraries/Utilities/PixelRatio.js +5 -2
  193. package/Libraries/Utilities/Platform.js.flow +4 -0
  194. package/Libraries/Utilities/PlatformTypes.js +77 -0
  195. package/Libraries/Utilities/differ/deepDiffer.js +5 -2
  196. package/Libraries/Utilities/useColorScheme.js +11 -1
  197. package/Libraries/Utilities/useWindowDimensions.js +6 -0
  198. package/Libraries/Vibration/Vibration.js +14 -11
  199. package/Libraries/vendor/emitter/EventEmitter.js +3 -3
  200. package/React/Base/RCTBridge+Private.h +0 -22
  201. package/React/Base/RCTBridge.h +10 -8
  202. package/React/Base/RCTBridge.mm +5 -447
  203. package/React/Base/RCTBridgeDelegate.h +1 -56
  204. package/React/Base/RCTBridgeModule.h +0 -9
  205. package/React/Base/RCTBridgeProxy.h +8 -0
  206. package/React/Base/RCTBridgeProxy.mm +3 -20
  207. package/React/Base/RCTBundleManager.h +0 -3
  208. package/React/Base/RCTBundleManager.m +0 -31
  209. package/React/Base/RCTBundleURLProvider.mm +4 -4
  210. package/React/Base/RCTCallableJSModules.m +0 -18
  211. package/React/Base/RCTConstants.h +1 -0
  212. package/React/Base/RCTConstants.m +1 -0
  213. package/React/Base/RCTConvert.mm +3 -0
  214. package/React/Base/RCTDisplayLink.h +3 -1
  215. package/React/Base/RCTJavaScriptExecutor.h +0 -69
  216. package/React/Base/RCTModuleData.mm +2 -483
  217. package/React/Base/RCTModuleRegistry.m +0 -25
  218. package/React/Base/RCTRootView.h +0 -11
  219. package/React/Base/RCTRootView.m +3 -461
  220. package/React/Base/RCTUtils.h +0 -3
  221. package/React/Base/RCTUtils.mm +17 -27
  222. package/React/Base/RCTVersion.m +2 -2
  223. package/React/Base/RCTViewRegistry.m +1 -29
  224. package/React/Base/Surface/RCTSurface.mm +1 -582
  225. package/React/Base/Surface/RCTSurfaceRootShadowView.m +0 -89
  226. package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +0 -1
  227. package/React/CoreModules/PlatformStubs/RCTStatusBarManager.mm +0 -2
  228. package/React/CoreModules/RCTAlertController.mm +1 -0
  229. package/React/CoreModules/RCTAlertManager.mm +0 -5
  230. package/React/CoreModules/RCTLogBox.mm +0 -11
  231. package/React/CoreModules/RCTLogBoxView.h +0 -3
  232. package/React/CoreModules/RCTLogBoxView.mm +0 -31
  233. package/React/CoreModules/RCTPerfMonitor.mm +0 -2
  234. package/React/CoreModules/RCTStatusBarManager.mm +0 -11
  235. package/React/CxxModule/RCTCxxUtils.h +0 -8
  236. package/React/CxxModule/RCTCxxUtils.mm +0 -17
  237. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +179 -7
  238. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +100 -2
  239. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +373 -119
  240. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.cpp +1 -1
  241. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ComponentDescriptors.h +1 -1
  242. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/EventEmitters.cpp +71 -71
  243. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/EventEmitters.h +96 -96
  244. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.cpp +357 -363
  245. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/Props.h +211 -212
  246. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/RCTComponentViewHelpers.h +107 -107
  247. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.cpp +1 -1
  248. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/ShadowNodes.h +11 -11
  249. package/React/FBReactNativeSpec/react/renderer/components/FBReactNativeSpec/States.h +2 -2
  250. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.h +4 -0
  251. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropComponentView.mm +4 -0
  252. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.h +4 -0
  253. package/React/Fabric/Mounting/ComponentViews/LegacyViewManagerInterop/RCTLegacyViewManagerInteropCoordinatorAdapter.mm +5 -0
  254. package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +0 -1
  255. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +14 -0
  256. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +12 -3
  257. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTVirtualViewContainerState.mm +12 -26
  258. package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +39 -4
  259. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +18 -22
  260. package/React/Fabric/Mounting/ComponentViews/VirtualView/RCTVirtualViewComponentView.mm +0 -18
  261. package/React/Fabric/Mounting/RCTComponentViewFactory.mm +9 -5
  262. package/React/Fabric/RCTSurfacePresenter.mm +86 -5
  263. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.h +2 -0
  264. package/React/I18n/RCTLocalizedString.mm +38 -2
  265. package/React/Modules/RCTEventEmitter.m +30 -10
  266. package/React/Modules/RCTI18nUtil.m +3 -1
  267. package/React/Modules/RCTUIManager.mm +0 -1501
  268. package/React/React-RCTFBReactNativeSpec.podspec +1 -1
  269. package/React/Tests/Text/RCTAttributedTextUtilsTest.mm +27 -0
  270. package/React/Views/RCTModalHostViewController.h +0 -18
  271. package/React/Views/RCTModalHostViewManager.h +0 -24
  272. package/React/Views/RCTShadowView.h +0 -2
  273. package/React/Views/RCTShadowView.m +0 -723
  274. package/React/Views/RCTView.h +0 -19
  275. package/React/Views/RCTViewManager.m +0 -53
  276. package/React/Views/ScrollView/RCTScrollView.h +0 -92
  277. package/React/Views/ScrollView/RCTScrollableProtocol.h +0 -4
  278. package/React-Core-prebuilt.podspec +45 -17
  279. package/React-Core.podspec +9 -2
  280. package/ReactAndroid/api/ReactAndroid.api +128 -142
  281. package/ReactAndroid/build.gradle.kts +26 -21
  282. package/ReactAndroid/external-artifacts/build.gradle.kts +49 -0
  283. package/ReactAndroid/gradle.properties +1 -1
  284. package/ReactAndroid/hermes-engine/build.gradle.kts +19 -20
  285. package/ReactAndroid/src/debug/AndroidManifest.xml +6 -0
  286. package/ReactAndroid/src/debugOptimized/AndroidManifest.xml +22 -0
  287. package/ReactAndroid/src/main/java/com/facebook/react/BaseReactPackage.kt +3 -7
  288. package/ReactAndroid/src/main/java/com/facebook/react/ReactActivityDelegate.java +4 -2
  289. package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.kt +4 -6
  290. package/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +5 -7
  291. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.kt +212 -0
  292. package/ReactAndroid/src/main/java/com/facebook/react/ReactRootView.java +0 -16
  293. package/ReactAndroid/src/main/java/com/facebook/react/animated/PropsAnimatedNode.kt +6 -1
  294. package/ReactAndroid/src/main/java/com/facebook/react/bridge/Arguments.kt +1 -0
  295. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.kt +287 -0
  296. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ColorPropConverter.kt +16 -0
  297. package/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +15 -2
  298. package/ReactAndroid/src/main/java/com/facebook/react/bridge/interop/InteropModuleRegistry.kt +1 -3
  299. package/ReactAndroid/src/main/java/com/facebook/react/common/build/ReactBuildConfig.kt +4 -0
  300. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/MapBuffer.kt +50 -2
  301. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/ReadableMapBuffer.kt +63 -22
  302. package/ReactAndroid/src/main/java/com/facebook/react/common/mapbuffer/WritableMapBuffer.kt +33 -0
  303. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +4 -12
  304. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactActivityDelegate.kt +14 -10
  305. package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultReactNativeHost.kt +6 -6
  306. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/BundleDownloader.kt +50 -47
  307. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.kt +0 -4
  308. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerFactory.kt +10 -10
  309. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/LocalNetworkPermissionUtil.kt +49 -0
  310. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/MultipartStreamReader.kt +101 -26
  311. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +40 -38
  312. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerBinding.kt +1 -10
  313. package/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManagerProviderImpl.kt +0 -3
  314. package/ReactAndroid/src/main/java/com/facebook/react/fabric/ViewTransitionSnapshotManager.kt +15 -11
  315. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountItemDispatcher.kt +4 -4
  316. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/MountingManager.kt +7 -13
  317. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/SurfaceMountingManager.kt +195 -194
  318. package/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/SynchronousMountItem.kt +12 -8
  319. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +30 -66
  320. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -111
  321. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -23
  322. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +12 -24
  323. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +57 -123
  324. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Canary_Android.kt +7 -5
  325. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +3 -5
  326. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -23
  327. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlags.kt +0 -24
  328. package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeNewArchitectureFeatureFlagsDefaults.kt +0 -4
  329. package/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.kt +1 -0
  330. package/ReactAndroid/src/main/java/com/facebook/react/modules/core/TimingModule.kt +3 -0
  331. package/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.kt +50 -0
  332. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +53 -3
  333. package/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.kt +2 -77
  334. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
  335. package/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.kt +2 -2
  336. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +1 -1
  337. package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessReactContext.kt +9 -4
  338. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +4 -19
  339. package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactInstance.kt +1 -5
  340. package/ReactAndroid/src/main/java/com/facebook/react/touch/ReactInterceptingViewGroup.kt +4 -4
  341. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/BaseViewManager.java +46 -9
  342. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/DisplayMetricsHolder.kt +1 -49
  343. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/HasChildPressedStateDelay.kt +29 -0
  344. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.kt +796 -0
  345. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSTouchDispatcher.kt +2 -4
  346. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/LayoutShadowNode.kt +27 -27
  347. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.kt +184 -0
  348. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.kt +486 -0
  349. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNodeImpl.java +8 -8
  350. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ShadowNodeRegistry.kt +2 -2
  351. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/SkewMatrixHelper.kt +200 -0
  352. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ThemedReactContext.kt +3 -0
  353. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TouchTargetHelper.kt +6 -1
  354. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/TransformHelper.kt +2 -2
  355. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIBlock.kt +7 -1
  356. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.kt +645 -0
  357. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstantsHelper.kt +2 -3
  358. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.kt +142 -0
  359. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupManager.kt +0 -10
  360. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManager.java +3 -3
  361. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.kt +527 -0
  362. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewProps.kt +3 -1
  363. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/BorderRadiusStyle.kt +6 -6
  364. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/ColorStop.kt +6 -0
  365. package/ReactAndroid/src/main/java/com/facebook/react/util/AndroidVersion.kt +7 -0
  366. package/ReactAndroid/src/main/java/com/facebook/react/views/drawer/ReactDrawerLayout.kt +8 -1
  367. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostManager.kt +0 -3
  368. package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.kt +2 -0
  369. package/ReactAndroid/src/main/java/com/facebook/react/views/progressbar/ReactProgressBarViewManager.kt +4 -4
  370. package/ReactAndroid/src/main/java/com/facebook/react/views/safeareaview/ReactSafeAreaView.kt +2 -0
  371. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.kt +1729 -0
  372. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +15 -15
  373. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.kt +1297 -0
  374. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollViewManager.kt +13 -13
  375. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.kt +1392 -0
  376. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +14 -14
  377. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainer.kt +19 -33
  378. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateClassic.kt +8 -6
  379. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/VirtualViewContainerStateExperimental.kt +4 -4
  380. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/generate-nested-scroll-view.js +13 -20
  381. package/ReactAndroid/src/main/java/com/facebook/react/views/swiperefresh/ReactSwipeRefreshLayout.kt +7 -1
  382. package/ReactAndroid/src/main/java/com/facebook/react/views/text/MutableSpannableLayout.kt +107 -0
  383. package/ReactAndroid/src/main/java/com/facebook/react/views/text/PreparedLayoutTextView.kt +122 -10
  384. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +91 -1
  385. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewManager.kt +3 -0
  386. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTypefaceUtils.kt +41 -0
  387. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextAttributeProps.kt +48 -2
  388. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextDecorationStyle.kt +200 -0
  389. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextEffectRegistry.kt +45 -0
  390. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextEffectSpanFactory.kt +17 -0
  391. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +361 -15
  392. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/AnimatedEffectSpan.kt +37 -0
  393. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/{DrawCommandSpan.kt → CanvasEffectSpan.kt} +3 -4
  394. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/CustomStyleSpan.kt +23 -3
  395. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactStrikethroughSpan.kt +30 -3
  396. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/ReactUnderlineSpan.kt +25 -3
  397. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/SetSpanOperation.kt +1 -1
  398. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/StatefulSpan.kt +21 -0
  399. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/TextEffectSpan.kt +19 -0
  400. package/ReactAndroid/src/main/java/com/facebook/react/views/text/internal/span/TouchableSpan.kt +29 -0
  401. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactEditText.kt +81 -9
  402. package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +4 -0
  403. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +7 -21
  404. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +9 -1
  405. package/ReactAndroid/src/main/java/com/facebook/react/views/view/WindowUtil.kt +2 -0
  406. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/VirtualViewRenderState.kt +1 -1
  407. package/ReactAndroid/src/main/java/com/facebook/react/views/virtual/view/ReactVirtualView.kt +7 -8
  408. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.kt +45 -0
  409. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaBoxSizing.kt +27 -0
  410. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfig.kt +15 -0
  411. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaConfigJNIBase.kt +6 -0
  412. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDimension.kt +27 -0
  413. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.kt +31 -0
  414. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaEdge.kt +41 -0
  415. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaErrata.kt +37 -0
  416. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.kt +27 -0
  417. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaFlexDirection.kt +31 -0
  418. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.kt +33 -0
  419. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGutter.kt +29 -0
  420. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.kt +43 -0
  421. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogLevel.kt +39 -0
  422. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaMeasureMode.kt +29 -0
  423. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNative.kt +16 -0
  424. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNode.kt +12 -2
  425. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.kt +762 -0
  426. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIFinalizer.kt +4 -4
  427. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeType.kt +27 -0
  428. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaOverflow.kt +29 -0
  429. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaPositionType.kt +29 -0
  430. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaProps.kt +24 -2
  431. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaUnit.kt +37 -0
  432. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaWrap.kt +29 -0
  433. package/ReactAndroid/src/main/jni/CMakeLists.txt +1 -2
  434. package/ReactAndroid/src/main/jni/first-party/yogajni/jni/YGJNIVanilla.cpp +94 -0
  435. package/ReactAndroid/src/main/jni/react/devsupport/JCxxInspectorPackagerConnectionDelegateImpl.cpp +3 -0
  436. package/ReactAndroid/src/main/jni/react/fabric/AndroidAnimationChoreographer.h +10 -10
  437. package/ReactAndroid/src/main/jni/react/fabric/CoreComponentsRegistry.cpp +3 -0
  438. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.cpp +12 -15
  439. package/ReactAndroid/src/main/jni/react/fabric/FabricUIManagerBinding.h +1 -3
  440. package/ReactAndroid/src/main/jni/react/fabric/test/FabricMountingManagerTest.cpp +159 -0
  441. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +69 -153
  442. package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +15 -33
  443. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.cpp +10 -24
  444. package/ReactAndroid/src/main/jni/react/jni/JReactMarker.h +0 -2
  445. package/ReactAndroid/src/main/jni/react/mapbuffer/react/common/mapbuffer/JWritableMapBuffer.cpp +13 -0
  446. package/ReactAndroid/src/main/jni/react/runtime/jni/JReactInstance.cpp +4 -1
  447. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.cpp +8 -0
  448. package/ReactAndroid/src/main/jni/react/turbomodule/ReactCommon/TurboModuleManager.h +4 -0
  449. package/ReactAndroid/src/main/res/views/uimanager/values/ids.xml +5 -0
  450. package/ReactAndroid/src/main/res/views/uimanager/values-zu/strings.xml +3 -0
  451. package/ReactApple/RCTAnimatedModuleProvider/React-RCTAnimatedModuleProvider.podspec +63 -0
  452. package/ReactCommon/React-Fabric.podspec +2 -0
  453. package/ReactCommon/ReactCommon.podspec +2 -12
  454. package/ReactCommon/cmake-utils/react-native-flags.cmake +1 -3
  455. package/ReactCommon/cxxreact/CMakeLists.txt +1 -0
  456. package/ReactCommon/cxxreact/ErrorUtils.h +2 -32
  457. package/ReactCommon/cxxreact/Instance.cpp +1 -26
  458. package/ReactCommon/cxxreact/Instance.h +0 -2
  459. package/ReactCommon/cxxreact/NativeToJsBridge.cpp +3 -2
  460. package/ReactCommon/cxxreact/RAMBundleRegistry.cpp +0 -12
  461. package/ReactCommon/cxxreact/RAMBundleRegistry.h +0 -5
  462. package/ReactCommon/cxxreact/React-cxxreact.podspec +2 -1
  463. package/ReactCommon/cxxreact/ReactMarker.cpp +4 -30
  464. package/ReactCommon/cxxreact/ReactMarker.h +38 -21
  465. package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
  466. package/ReactCommon/cxxreact/TraceSection.h +1 -1
  467. package/ReactCommon/cxxreact/tests/methodcall.cpp +4 -0
  468. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +6 -79
  469. package/ReactCommon/jserrorhandler/ErrorUtils.cpp +42 -0
  470. package/{React/CxxLogUtils/RCTDefaultCxxLogFunction.h → ReactCommon/jserrorhandler/ErrorUtils.h} +2 -2
  471. package/ReactCommon/jserrorhandler/JsErrorHandler.cpp +1 -1
  472. package/ReactCommon/jserrorhandler/React-jserrorhandler.podspec +2 -3
  473. package/ReactCommon/jsi/jsi/hermes-interfaces.h +53 -0
  474. package/ReactCommon/jsiexecutor/React-jsiexecutor.podspec +2 -1
  475. package/ReactCommon/jsiexecutor/jsireact/JSIExecutor.cpp +3 -14
  476. package/ReactCommon/jsiexecutor/jsireact/JSINativeModules.cpp +4 -13
  477. package/ReactCommon/jsinspector-modern/HostAgent.cpp +54 -0
  478. package/ReactCommon/jsinspector-modern/HostTarget.h +0 -7
  479. package/ReactCommon/jsinspector-modern/HostTargetTraceRecording.cpp +10 -7
  480. package/ReactCommon/jsinspector-modern/InspectorPackagerConnection.cpp +4 -1
  481. package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +7 -0
  482. package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +20 -0
  483. package/ReactCommon/jsinspector-modern/RuntimeTarget.h +16 -0
  484. package/ReactCommon/jsinspector-modern/SessionState.h +31 -0
  485. package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +53 -0
  486. package/ReactCommon/jsinspector-modern/tracing/HostTracingProfile.h +14 -1
  487. package/ReactCommon/jsinspector-modern/tracing/TraceRecordingState.h +11 -0
  488. package/ReactCommon/react/bridging/ArrayBuffer.h +180 -0
  489. package/ReactCommon/react/bridging/Bridging.h +1 -0
  490. package/ReactCommon/react/bridging/Convert.h +12 -0
  491. package/ReactCommon/react/bridging/React-bridging.podspec +44 -0
  492. package/ReactCommon/react/bridging/tests/BridgingTest.cpp +185 -11
  493. package/ReactCommon/react/bridging/tests/ClassTest.cpp +22 -0
  494. package/ReactCommon/react/cxxstableapi/CMakeLists.txt +18 -0
  495. package/ReactCommon/react/cxxstableapi/FrameworksGuard.h +35 -0
  496. package/ReactCommon/react/cxxstableapi/PrivateGuard.h +34 -0
  497. package/ReactCommon/react/cxxstableapi/React-cxxstableapi.podspec +34 -0
  498. package/ReactCommon/react/cxxstableapi/UmbrellaGuard.h +53 -0
  499. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -45
  500. package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -56
  501. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +134 -242
  502. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +14 -26
  503. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +20 -44
  504. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +43 -97
  505. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSCanary.h +10 -6
  506. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +3 -7
  507. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSStable.h +0 -8
  508. package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +7 -13
  509. package/ReactCommon/react/nativemodule/core/ReactCommon/TurboModule.h +1 -0
  510. package/ReactCommon/react/nativemodule/core/iostests/RCTTurboModuleTests.mm +49 -0
  511. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaInteropTurboModule.cpp +4 -0
  512. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaInteropTurboModule.h +4 -0
  513. package/ReactCommon/react/nativemodule/core/platform/android/ReactCommon/JavaTurboModule.cpp +1 -1
  514. package/ReactCommon/react/nativemodule/core/platform/ios/React-NativeModulesApple.podspec +1 -1
  515. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.h +4 -0
  516. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTInteropTurboModule.mm +4 -0
  517. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +60 -3
  518. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.h +0 -9
  519. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleManager.mm +37 -139
  520. package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModuleWithJSIBindings.h +0 -3
  521. package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +6 -0
  522. package/ReactCommon/react/nativemodule/dom/NativeDOM.cpp +10 -4
  523. package/ReactCommon/react/nativemodule/dom/React-domnativemodule.podspec +1 -0
  524. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +25 -55
  525. package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -23
  526. package/ReactCommon/react/nativemodule/idlecallbacks/React-idlecallbacksnativemodule.podspec +1 -0
  527. package/ReactCommon/react/nativemodule/intersectionobserver/React-intersectionobservernativemodule.podspec +1 -0
  528. package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.cpp +4 -0
  529. package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +1 -0
  530. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTSampleTurboModule.h +1 -1
  531. package/ReactCommon/react/nativemodule/webperformance/React-webperformancenativemodule.podspec +1 -0
  532. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +95 -63
  533. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +20 -1
  534. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManagerProvider.cpp +7 -10
  535. package/ReactCommon/react/renderer/animated/drivers/FrameAnimationDriver.cpp +20 -1
  536. package/ReactCommon/react/renderer/animated/drivers/FrameAnimationDriver.h +1 -0
  537. package/ReactCommon/react/renderer/animated/nodes/InterpolationAnimatedNode.cpp +67 -6
  538. package/ReactCommon/react/renderer/animated/nodes/InterpolationAnimatedNode.h +12 -0
  539. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.cpp +25 -13
  540. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.h +7 -0
  541. package/ReactCommon/react/renderer/animated/tests/AnimationDriverTests.cpp +48 -0
  542. package/ReactCommon/react/renderer/animated/tests/DecayAnimationDriverTest.cpp +245 -0
  543. package/ReactCommon/react/renderer/animated/tests/ManagedPropsMountingOverrideTests.cpp +204 -0
  544. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +10 -1
  545. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +1 -0
  546. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +17 -0
  547. package/ReactCommon/react/renderer/animations/tests/LayoutAnimationTest.cpp +0 -2
  548. package/ReactCommon/react/renderer/attributedstring/TextAttributes.cpp +6 -2
  549. package/ReactCommon/react/renderer/attributedstring/TextAttributes.h +25 -1
  550. package/ReactCommon/react/renderer/attributedstring/conversions.h +29 -1
  551. package/ReactCommon/react/renderer/attributedstring/primitives.h +4 -2
  552. package/ReactCommon/react/renderer/attributedstring/tests/ParagraphAttributesTest.cpp +73 -0
  553. package/ReactCommon/react/renderer/componentregistry/ComponentDescriptorRegistry.cpp +6 -0
  554. package/ReactCommon/react/renderer/components/image/ImageProps.cpp +79 -126
  555. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.cpp +4 -0
  556. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropShadowNode.h +4 -0
  557. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropState.h +4 -0
  558. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.cpp +5 -0
  559. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropViewProps.h +4 -0
  560. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.cpp +5 -0
  561. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticComponentDescriptor.h +4 -0
  562. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.cpp +4 -0
  563. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerAutomaticShadowNode.h +4 -0
  564. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/UnstableLegacyViewManagerInteropComponentDescriptor.h +4 -0
  565. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.h +4 -0
  566. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/LegacyViewManagerInteropComponentDescriptor.mm +5 -0
  567. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.h +4 -0
  568. package/ReactCommon/react/renderer/components/legacyviewmanagerinterop/platform/ios/react/renderer/components/legacyviewmanagerinterop/RCTLegacyViewManagerInteropCoordinator.mm +5 -0
  569. package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +253 -379
  570. package/ReactCommon/react/renderer/components/scrollview/platform/android/react/renderer/components/scrollview/HostPlatformScrollViewProps.cpp +36 -55
  571. package/ReactCommon/react/renderer/components/text/BaseParagraphProps.cpp +17 -27
  572. package/ReactCommon/react/renderer/components/text/BaseTextProps.cpp +8 -10
  573. package/ReactCommon/react/renderer/components/text/BaseTextShadowNode.cpp +19 -0
  574. package/ReactCommon/react/renderer/components/text/TextEffectComponentDescriptor.h +17 -0
  575. package/ReactCommon/react/renderer/components/text/TextEffectProps.cpp +59 -0
  576. package/ReactCommon/react/renderer/components/text/TextEffectProps.h +30 -0
  577. package/{Libraries/Text/VirtualText/RCTVirtualTextView.mm → ReactCommon/react/renderer/components/text/TextEffectShadowNode.cpp} +4 -6
  578. package/ReactCommon/react/renderer/components/text/TextEffectShadowNode.h +26 -0
  579. package/ReactCommon/react/renderer/components/text/platform/android/react/renderer/components/text/HostPlatformParagraphProps.cpp +18 -28
  580. package/ReactCommon/react/renderer/components/text/tests/BaseTextShadowNodeTest.cpp +15 -0
  581. package/ReactCommon/react/renderer/components/textinput/platform/android/react/renderer/components/androidtextinput/AndroidTextInputProps.cpp +42 -50
  582. package/ReactCommon/react/renderer/components/view/AccessibilityProps.cpp +168 -754
  583. package/ReactCommon/react/renderer/components/view/AccessibilityProps.h +0 -9
  584. package/ReactCommon/react/renderer/components/view/BaseViewProps.cpp +262 -326
  585. package/ReactCommon/react/renderer/components/view/ViewShadowNode.cpp +0 -6
  586. package/ReactCommon/react/renderer/components/view/ViewShadowNode.h +2 -12
  587. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.cpp +73 -27
  588. package/ReactCommon/react/renderer/components/view/YogaLayoutableShadowNode.h +7 -9
  589. package/ReactCommon/react/renderer/components/view/YogaStylableProps.cpp +3 -11
  590. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.cpp +94 -180
  591. package/ReactCommon/react/renderer/components/view/platform/android/react/renderer/components/view/HostPlatformViewProps.h +2 -2
  592. package/ReactCommon/react/renderer/components/view/primitives.h +5 -0
  593. package/ReactCommon/react/renderer/components/view/propsConversions.h +74 -42
  594. package/ReactCommon/react/renderer/components/view/tests/LayoutTest.cpp +5 -5
  595. package/ReactCommon/react/renderer/components/view/tests/ViewTest.cpp +353 -6
  596. package/ReactCommon/react/renderer/core/ConcreteComponentDescriptor.h +41 -16
  597. package/ReactCommon/react/renderer/core/ConcreteShadowNode.h +19 -0
  598. package/ReactCommon/react/renderer/core/EventEmitter.cpp +20 -4
  599. package/ReactCommon/react/renderer/core/LayoutMetrics.h +3 -0
  600. package/ReactCommon/react/renderer/core/Props.cpp +8 -39
  601. package/ReactCommon/react/renderer/core/Props.h +63 -13
  602. package/ReactCommon/react/renderer/core/RawProps.cpp +20 -3
  603. package/ReactCommon/react/renderer/core/RawProps.h +44 -0
  604. package/ReactCommon/react/renderer/core/RawPropsKeyMap.cpp +11 -27
  605. package/ReactCommon/react/renderer/core/RawPropsKeyMap.h +3 -3
  606. package/ReactCommon/react/renderer/core/RawPropsParser.cpp +4 -6
  607. package/ReactCommon/react/renderer/core/RawPropsParser.h +3 -3
  608. package/ReactCommon/react/renderer/core/ShadowNode.cpp +27 -19
  609. package/ReactCommon/react/renderer/core/ShadowNodeFamily.h +2 -0
  610. package/ReactCommon/react/renderer/core/StateData.h +4 -4
  611. package/ReactCommon/react/renderer/core/propsConversions.h +3 -7
  612. package/ReactCommon/react/renderer/core/tests/ComponentDescriptorTest.cpp +8 -0
  613. package/ReactCommon/react/renderer/core/tests/FindNodeAtPointTest.cpp +7 -7
  614. package/ReactCommon/react/renderer/core/tests/LayoutableShadowNodeTest.cpp +19 -19
  615. package/ReactCommon/react/renderer/core/tests/PropsConceptsTest.cpp +135 -0
  616. package/ReactCommon/react/renderer/core/tests/RawPropsTest.cpp +43 -53
  617. package/ReactCommon/react/renderer/element/tests/ElementTest.cpp +3 -3
  618. package/ReactCommon/react/renderer/imagemanager/platform/android/react/renderer/imagemanager/conversions.h +17 -0
  619. package/ReactCommon/react/renderer/imagemanager/platform/ios/react/renderer/imagemanager/RCTSyncImageManager.mm +1 -1
  620. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.cpp +123 -33
  621. package/ReactCommon/react/renderer/mapbuffer/MapBuffer.h +26 -14
  622. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.cpp +96 -53
  623. package/ReactCommon/react/renderer/mapbuffer/MapBufferBuilder.h +4 -0
  624. package/ReactCommon/react/renderer/mapbuffer/tests/MapBufferTest.cpp +96 -1
  625. package/ReactCommon/react/renderer/mounting/Differentiator.cpp +29 -318
  626. package/ReactCommon/react/renderer/mounting/ShadowTree.cpp +105 -33
  627. package/ReactCommon/react/renderer/mounting/ShadowTree.h +2 -0
  628. package/ReactCommon/react/renderer/mounting/tests/DifferentiatorUnflattenTest.cpp +11 -3
  629. package/ReactCommon/react/renderer/mounting/tests/OrderIndexTest.cpp +1 -1
  630. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeLifeCycleTest.cpp +15 -250
  631. package/ReactCommon/react/renderer/mounting/tests/ShadowTreeReactBranchingTest.cpp +141 -0
  632. package/ReactCommon/react/renderer/mounting/tests/StackingContextTest.cpp +1 -1
  633. package/ReactCommon/react/renderer/runtimescheduler/CMakeLists.txt +1 -0
  634. package/ReactCommon/react/renderer/runtimescheduler/React-runtimescheduler.podspec +1 -0
  635. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.cpp +22 -2
  636. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler.h +13 -2
  637. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.cpp +13 -0
  638. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Legacy.h +9 -0
  639. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.cpp +43 -5
  640. package/ReactCommon/react/renderer/runtimescheduler/RuntimeScheduler_Modern.h +17 -1
  641. package/ReactCommon/react/renderer/runtimescheduler/Task.h +4 -0
  642. package/ReactCommon/react/renderer/runtimescheduler/tests/RuntimeSchedulerTest.cpp +113 -8
  643. package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +14 -6
  644. package/ReactCommon/react/renderer/scheduler/Scheduler.h +3 -2
  645. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.cpp +1 -85
  646. package/ReactCommon/react/renderer/scheduler/SurfaceHandler.h +0 -6
  647. package/ReactCommon/react/renderer/scheduler/tests/SchedulerDelegateInvalidationTest.cpp +671 -0
  648. package/ReactCommon/react/renderer/textlayoutmanager/TextMeasureCache.h +22 -5
  649. package/ReactCommon/react/renderer/textlayoutmanager/platform/android/react/renderer/textlayoutmanager/TextLayoutManager.cpp +4 -2
  650. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.h +11 -0
  651. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTAttributedTextUtils.mm +65 -26
  652. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextLayoutManager.mm +193 -1
  653. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/RCTTextPrimitivesConversions.h +14 -2
  654. package/ReactCommon/react/renderer/textlayoutmanager/platform/ios/react/renderer/textlayoutmanager/TextLayoutManager.mm +2 -1
  655. package/ReactCommon/react/renderer/textlayoutmanager/tests/TextLayoutManagerTest.cpp +86 -5
  656. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +89 -94
  657. package/ReactCommon/react/renderer/uimanager/UIManager.h +2 -2
  658. package/ReactCommon/react/renderer/uimanager/UIManagerDelegate.h +1 -1
  659. package/ReactCommon/react/renderer/uimanager/tests/FabricUIManagerTest.cpp +144 -3
  660. package/ReactCommon/react/renderer/uimanager/tests/FindShadowNodeByTagTest.cpp +1 -52
  661. package/ReactCommon/react/renderer/uimanager/tests/PointerEventsProcessorTest.cpp +4 -4
  662. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.cpp +88 -39
  663. package/ReactCommon/react/renderer/viewtransition/ViewTransitionModule.h +12 -2
  664. package/ReactCommon/react/runtime/PlatformTimerRegistry.h +10 -0
  665. package/ReactCommon/react/runtime/ReactInstance.cpp +79 -64
  666. package/ReactCommon/react/runtime/hermes/HermesInstance.cpp +0 -89
  667. package/ReactCommon/react/runtime/iostests/MainQueueCoordinatorTests.mm +99 -0
  668. package/ReactCommon/react/runtime/iostests/RCTInstanceTests.mm +244 -0
  669. package/ReactCommon/react/runtime/platform/ios/ReactCommon/ObjCTimerRegistry.h +1 -1
  670. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTInstance.mm +47 -30
  671. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTJscInstance.mm +3 -2
  672. package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTPerformanceLoggerUtils.mm +3 -2
  673. package/ReactCommon/react/runtime/tests/cxx/ReactInstanceTest.cpp +27 -3
  674. package/ReactCommon/react/runtime/tests/cxx/RuntimeExecutorShutdownTest.cpp +155 -0
  675. package/ReactCommon/react/utils/Telemetry.h +0 -13
  676. package/ReactCommon/react/utils/tests/Base64Tests.cpp +36 -0
  677. package/ReactCommon/reactperflogger/reactperflogger/ReactPerfettoLogger.cpp +0 -1
  678. package/ReactCommon/runtimeexecutor/platform/ios/ReactCommon/RuntimeExecutorSyncUIThreadUtils.mm +21 -38
  679. package/ReactCommon/yoga/Yoga.podspec +1 -1
  680. package/ReactCommon/yoga/yoga/YGEnums.cpp +2 -0
  681. package/ReactCommon/yoga/yoga/YGEnums.h +1 -0
  682. package/ReactCommon/yoga/yoga/YGNode.cpp +27 -0
  683. package/ReactCommon/yoga/yoga/YGNode.h +69 -0
  684. package/ReactCommon/yoga/yoga/YGNodeLayout.h +0 -2
  685. package/ReactCommon/yoga/yoga/algorithm/AbsoluteLayout.cpp +2 -1
  686. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.cpp +294 -17
  687. package/ReactCommon/yoga/yoga/algorithm/CalculateLayout.h +1 -1
  688. package/ReactCommon/yoga/yoga/config/Config.h +1 -1
  689. package/ReactCommon/yoga/yoga/enums/Errata.h +1 -0
  690. package/ReactCommon/yoga/yoga/node/LayoutResults.h +8 -0
  691. package/ReactCommon/yoga/yoga/node/Node.cpp +32 -0
  692. package/ReactCommon/yoga/yoga/node/Node.h +33 -0
  693. package/cli.js +3 -182
  694. package/flow/bom.js.flow +42 -42
  695. package/flow/cssom.js.flow +21 -21
  696. package/flow/dom.js.flow +128 -128
  697. package/flow/global.js +6 -0
  698. package/gradle/libs.versions.toml +7 -5
  699. package/index.js +53 -86
  700. package/index.js.flow +53 -23
  701. package/package.json +41 -52
  702. package/react-native.config.js +82 -1
  703. package/scripts/cocoapods/fabric.rb +1 -1
  704. package/scripts/cocoapods/jsengine.rb +1 -1
  705. package/scripts/cocoapods/new_architecture.rb +1 -1
  706. package/scripts/cocoapods/rncore.rb +36 -78
  707. package/scripts/cocoapods/rncore_facades.rb +232 -0
  708. package/scripts/cocoapods/rndependencies.rb +64 -3
  709. package/scripts/cocoapods/rndeps_facades.rb +193 -0
  710. package/scripts/cocoapods/spm.rb +78 -11
  711. package/scripts/cocoapods/utils.rb +5 -7
  712. package/scripts/codegen/generate-artifacts-executor/generateSchemaInfos.js +0 -1
  713. package/scripts/codegen/templates/Package.swift.spm-template +97 -0
  714. package/scripts/codegen/templates/ReactCodegen.podspec.template +1 -1
  715. package/scripts/hermes/hermes-utils.js +27 -58
  716. package/scripts/react-native-xcode.sh +20 -0
  717. package/scripts/react_native_pods.rb +71 -21
  718. package/scripts/react_native_pods_utils/script_phases.sh +4 -3
  719. package/scripts/replace-rncore-version.js +57 -86
  720. package/scripts/setup-apple-spm.js +1267 -0
  721. package/scripts/spm/__doc__/rfc-spm-xcframework.md +707 -0
  722. package/scripts/spm/__doc__/spm-autolinking-plugins.md +244 -0
  723. package/scripts/spm/__doc__/spm-header-paths-contract.md +97 -0
  724. package/scripts/spm/__doc__/spm-plugins-assessment.md +128 -0
  725. package/scripts/spm/__doc__/spm-scripts.md +486 -0
  726. package/scripts/spm/autolinking-plugins.js +331 -0
  727. package/scripts/spm/download-spm-artifacts.js +1409 -0
  728. package/scripts/spm/expand-spm-dependencies.js +216 -0
  729. package/scripts/spm/flavored-frameworks.js +1008 -0
  730. package/scripts/spm/generate-spm-autolinking-config.js +221 -0
  731. package/scripts/spm/generate-spm-autolinking.js +1888 -0
  732. package/scripts/spm/generate-spm-package.js +302 -0
  733. package/scripts/spm/generate-spm-xcodeproj.js +2266 -0
  734. package/scripts/spm/read-podspec.js +695 -0
  735. package/scripts/spm/scaffold-package-swift.js +1206 -0
  736. package/scripts/spm/spm-pbxproj.js +654 -0
  737. package/scripts/spm/spm-types.js +520 -0
  738. package/scripts/spm/spm-utils.js +645 -0
  739. package/scripts/spm/sync-spm-autolinking.js +160 -0
  740. package/sdks/.hermesv1version +1 -1
  741. package/sdks/hermes-engine/hermes-engine.podspec +9 -39
  742. package/sdks/hermes-engine/hermes-utils.rb +20 -74
  743. package/sdks/hermes-engine/utils/replace_hermes_version.js +18 -4
  744. package/sdks/hermes-engine/version.properties +1 -2
  745. package/settings.gradle.kts +0 -43
  746. package/src/asset-registry.js +29 -0
  747. package/src/private/animated/NativeAnimatedHelper.js +45 -21
  748. package/src/private/assets/AssetRegistry.js +52 -0
  749. package/src/private/{specs_DEPRECATED/components → components/activityindicator/specs}/ActivityIndicatorViewNativeComponent.js +5 -5
  750. package/src/private/{specs_DEPRECATED/components → components/debuggingoverlay/specs}/DebuggingOverlayNativeComponent.js +8 -8
  751. package/src/private/{specs_DEPRECATED/components → components/drawerlayoutandroid/specs}/AndroidDrawerLayoutNativeComponent.js +8 -8
  752. package/src/private/{specs_DEPRECATED/components → components/inputaccessoryview/specs}/RCTInputAccessoryViewNativeComponent.js +4 -4
  753. package/src/private/{specs_DEPRECATED/components → components/modal/specs}/RCTModalHostViewNativeComponent.js +4 -9
  754. package/src/private/{specs_DEPRECATED/components → components/progressbarandroid/specs}/ProgressBarAndroidNativeComponent.js +5 -5
  755. package/src/private/{specs_DEPRECATED/components → components/refreshcontrol/specs}/AndroidSwipeRefreshLayoutNativeComponent.js +7 -7
  756. package/src/private/{specs_DEPRECATED/components → components/refreshcontrol/specs}/PullToRefreshViewNativeComponent.js +7 -7
  757. package/src/private/components/safeareaview/SafeAreaView_INTERNAL_DO_NOT_USE.js +2 -2
  758. package/src/private/{specs_DEPRECATED/components → components/safeareaview/specs}/RCTSafeAreaViewNativeComponent.js +3 -3
  759. package/src/private/components/scrollview/HScrollViewNativeComponents.js +1 -1
  760. package/src/private/{specs_DEPRECATED/components → components/scrollview/specs}/AndroidHorizontalScrollContentViewNativeComponent.js +3 -3
  761. package/src/private/{specs_DEPRECATED/components → components/switch/specs}/AndroidSwitchNativeComponent.js +7 -7
  762. package/src/private/{specs_DEPRECATED/components → components/switch/specs}/SwitchNativeComponent.js +10 -7
  763. package/src/private/{specs_DEPRECATED/components → components/unimplementedview/specs}/UnimplementedNativeViewNativeComponent.js +4 -4
  764. package/src/private/components/virtualcollection/Virtual.js +5 -5
  765. package/src/private/components/virtualcollection/VirtualCollectionView.js +2 -6
  766. package/src/private/components/virtualcollection/column/VirtualColumn.js +1 -1
  767. package/src/private/components/virtualcollection/row/VirtualRow.js +1 -1
  768. package/src/private/devsupport/devmenu/elementinspector/Inspector.js +3 -1
  769. package/src/private/devsupport/devmenu/specs/NativeDevMenu.js +4 -4
  770. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsRuntimeSettingsModule.js +4 -2
  771. package/src/private/devsupport/rndevtools/specs/NativeReactDevToolsSettingsManager.js +2 -2
  772. package/src/private/featureflags/ReactNativeFeatureFlags.js +46 -70
  773. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +88 -94
  774. package/src/private/renderer/errorhandling/ErrorHandlers.js +2 -2
  775. package/src/private/renderer/events/ReactNativeResponder.js +49 -4
  776. package/src/private/renderer/events/ResponderTouchHistoryStore.js +11 -2
  777. package/src/private/renderer/events/dispatchNativeEvent.js +71 -36
  778. package/src/private/setup/setUpDOM.js +19 -9
  779. package/src/private/setup/setUpIntersectionObserver.js +7 -0
  780. package/src/private/setup/setUpMutationObserver.js +3 -1
  781. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityInfo.js +9 -9
  782. package/src/private/specs_DEPRECATED/modules/NativeAccessibilityManager.js +24 -24
  783. package/src/private/specs_DEPRECATED/modules/NativeActionSheetManager.js +28 -28
  784. package/src/private/specs_DEPRECATED/modules/NativeAlertManager.js +1 -1
  785. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +45 -25
  786. package/src/private/specs_DEPRECATED/modules/NativeAnimatedTurboModule.js +44 -24
  787. package/src/private/specs_DEPRECATED/modules/NativeAppState.js +4 -4
  788. package/src/private/specs_DEPRECATED/modules/NativeAppearance.js +8 -6
  789. package/src/private/specs_DEPRECATED/modules/NativeBlobModule.js +7 -7
  790. package/src/private/specs_DEPRECATED/modules/NativeClipboard.js +3 -3
  791. package/src/private/specs_DEPRECATED/modules/NativeDevLoadingView.js +2 -2
  792. package/src/private/specs_DEPRECATED/modules/NativeDevSettings.js +11 -11
  793. package/src/private/specs_DEPRECATED/modules/NativeDeviceEventManager.js +1 -1
  794. package/src/private/specs_DEPRECATED/modules/NativeDeviceInfo.js +4 -4
  795. package/src/private/specs_DEPRECATED/modules/NativeDialogManagerAndroid.js +7 -7
  796. package/src/private/specs_DEPRECATED/modules/NativeExceptionsManager.js +4 -4
  797. package/src/private/specs_DEPRECATED/modules/NativeFileReaderModule.js +2 -2
  798. package/src/private/specs_DEPRECATED/modules/NativeFrameRateLogger.js +4 -4
  799. package/src/private/specs_DEPRECATED/modules/NativeHeadlessJsTaskSupport.js +2 -2
  800. package/src/private/specs_DEPRECATED/modules/NativeI18nManager.js +1 -1
  801. package/src/private/specs_DEPRECATED/modules/NativeImageEditor.js +13 -13
  802. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderAndroid.js +9 -6
  803. package/src/private/specs_DEPRECATED/modules/NativeImageLoaderIOS.js +6 -6
  804. package/src/private/specs_DEPRECATED/modules/NativeImageStoreAndroid.js +2 -2
  805. package/src/private/specs_DEPRECATED/modules/NativeImageStoreIOS.js +8 -5
  806. package/src/private/specs_DEPRECATED/modules/NativeIntentAndroid.js +5 -5
  807. package/src/private/specs_DEPRECATED/modules/NativeJSCHeapCapture.js +1 -1
  808. package/src/private/specs_DEPRECATED/modules/NativeKeyboardObserver.js +2 -2
  809. package/src/private/specs_DEPRECATED/modules/NativeLinkingManager.js +6 -6
  810. package/src/private/specs_DEPRECATED/modules/NativeLogBox.js +2 -2
  811. package/src/private/specs_DEPRECATED/modules/NativeModalManager.js +2 -2
  812. package/src/private/specs_DEPRECATED/modules/NativeNetworkingAndroid.js +5 -5
  813. package/src/private/specs_DEPRECATED/modules/NativeNetworkingIOS.js +6 -6
  814. package/src/private/specs_DEPRECATED/modules/NativePermissionsAndroid.js +6 -4
  815. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsAndroid.js +2 -2
  816. package/src/private/specs_DEPRECATED/modules/NativePlatformConstantsIOS.js +1 -1
  817. package/src/private/specs_DEPRECATED/modules/NativePushNotificationManagerIOS.js +35 -31
  818. package/src/private/specs_DEPRECATED/modules/NativeRedBox.js +2 -2
  819. package/src/private/specs_DEPRECATED/modules/NativeSampleTurboModule.js +24 -24
  820. package/src/private/specs_DEPRECATED/modules/NativeSegmentFetcher.js +2 -2
  821. package/src/private/specs_DEPRECATED/modules/NativeSettingsManager.js +3 -3
  822. package/src/private/specs_DEPRECATED/modules/NativeShareModule.js +2 -2
  823. package/src/private/specs_DEPRECATED/modules/NativeSoundManager.js +1 -1
  824. package/src/private/specs_DEPRECATED/modules/NativeSourceCode.js +1 -1
  825. package/src/private/specs_DEPRECATED/modules/NativeStatusBarManagerAndroid.js +5 -17
  826. package/src/private/specs_DEPRECATED/modules/NativeStatusBarManagerIOS.js +10 -15
  827. package/src/private/specs_DEPRECATED/modules/NativeTiming.js +3 -3
  828. package/src/private/specs_DEPRECATED/modules/NativeToastAndroid.js +4 -4
  829. package/src/private/specs_DEPRECATED/modules/NativeUIManager.js +35 -22
  830. package/src/private/specs_DEPRECATED/modules/NativeVibration.js +4 -4
  831. package/src/private/specs_DEPRECATED/modules/NativeWebSocketModule.js +7 -7
  832. package/src/private/types/HostInstance.js +38 -80
  833. package/src/private/viewtransition/specs/NativeViewTransition.js +6 -4
  834. package/src/private/webapis/dom/abort-api/AbortController.js +92 -0
  835. package/src/private/webapis/dom/abort-api/AbortSignal.js +243 -0
  836. package/src/private/webapis/dom/events/CustomEvent.js +1 -1
  837. package/src/private/webapis/dom/events/Event.js +12 -12
  838. package/src/private/webapis/dom/events/EventTarget.js +146 -37
  839. package/src/private/webapis/dom/events/internals/EventInternals.js +36 -0
  840. package/src/private/webapis/dom/events/internals/EventTargetInternals.js +38 -3
  841. package/src/private/webapis/dom/nodes/ReactNativeDocument.js +11 -0
  842. package/src/private/webapis/dom/nodes/ReactNativeElement.js +105 -4
  843. package/src/private/webapis/dom/nodes/ReadOnlyCharacterData.js +11 -0
  844. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +9 -0
  845. package/src/private/webapis/dom/nodes/ReadOnlyNode.js +34 -7
  846. package/src/private/webapis/dom/nodes/ReadOnlyText.js +33 -0
  847. package/src/private/webapis/dom/nodes/specs/NativeDOM.js +46 -42
  848. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +12 -0
  849. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js.flow +4 -2
  850. package/src/private/webapis/dom/oldstylecollections/NodeList.js +10 -0
  851. package/src/private/webapis/dom/oldstylecollections/NodeList.js.flow +4 -3
  852. package/src/private/webapis/errors/DOMException.js +50 -50
  853. package/src/private/webapis/geometry/DOMRectList.js +12 -0
  854. package/src/private/webapis/geometry/DOMRectList.js.flow +3 -1
  855. package/src/private/webapis/html/events/MessageEvent.js +3 -3
  856. package/src/private/webapis/idlecallbacks/specs/NativeIdleCallbacks.js +2 -2
  857. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +13 -0
  858. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +3 -7
  859. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +5 -5
  860. package/src/private/webapis/microtasks/specs/NativeMicrotasks.js +1 -1
  861. package/src/private/webapis/mutationobserver/MutationObserver.js +7 -7
  862. package/src/private/webapis/mutationobserver/MutationRecord.js +12 -0
  863. package/src/private/webapis/mutationobserver/internals/MutationObserverManager.js +5 -7
  864. package/src/private/webapis/mutationobserver/specs/NativeMutationObserver.js +5 -5
  865. package/src/private/webapis/performance/EventTiming.js +3 -3
  866. package/src/private/webapis/performance/PerformanceEntry.js +3 -3
  867. package/src/private/webapis/performance/PerformanceObserver.js +4 -4
  868. package/src/private/webapis/performance/ResourceTiming.js +13 -13
  869. package/src/private/webapis/performance/UserTiming.js +3 -3
  870. package/src/private/webapis/performance/internals/Utilities.js +1 -1
  871. package/src/private/webapis/performance/specs/NativePerformance.js +26 -20
  872. package/src/private/webapis/utils/ArrayLikeUtils.js +1 -1
  873. package/src/private/webapis/websockets/events/CloseEvent.js +3 -3
  874. package/src/private/webapis/xhr/events/ProgressEvent.js +3 -3
  875. package/src/react-private-interface.js +145 -0
  876. package/src/react-private-interface.js.flow +48 -0
  877. package/src/setup-env.js +22 -0
  878. package/src/types/globals.d.ts +33 -1
  879. package/src/unstable-internals-do-not-use.d.ts +214 -0
  880. package/src/unstable-internals-do-not-use.js +76 -0
  881. package/third-party-podspecs/ReactNativeDependencies.podspec +2 -2
  882. package/types/index.d.ts +0 -1
  883. package/types/public/DeprecatedPropertiesAlias.d.ts +0 -4
  884. package/types/public/ReactNativeTypes.d.ts +4 -2
  885. package/Libraries/AppDelegate/RCTArchConfiguratorProtocol.h +0 -38
  886. package/Libraries/Image/AssetRegistry.js +0 -14
  887. package/Libraries/Image/RCTImageShadowView.h +0 -17
  888. package/Libraries/Image/RCTImageShadowView.mm +0 -28
  889. package/Libraries/Image/RCTImageView.h +0 -32
  890. package/Libraries/Image/RCTImageView.mm +0 -507
  891. package/Libraries/Image/RCTImageViewManager.h +0 -17
  892. package/Libraries/Image/RCTImageViewManager.mm +0 -115
  893. package/Libraries/Interaction/InteractionManager.d.ts +0 -87
  894. package/Libraries/Interaction/InteractionManager.js +0 -189
  895. package/Libraries/Text/BaseText/RCTBaseTextShadowView.h +0 -35
  896. package/Libraries/Text/BaseText/RCTBaseTextShadowView.mm +0 -162
  897. package/Libraries/Text/BaseText/RCTBaseTextViewManager.h +0 -21
  898. package/Libraries/Text/BaseText/RCTBaseTextViewManager.mm +0 -64
  899. package/Libraries/Text/RCTTextAttributes.h +0 -107
  900. package/Libraries/Text/RCTTextAttributes.mm +0 -358
  901. package/Libraries/Text/RawText/RCTRawTextShadowView.h +0 -23
  902. package/Libraries/Text/RawText/RCTRawTextShadowView.mm +0 -38
  903. package/Libraries/Text/RawText/RCTRawTextViewManager.h +0 -21
  904. package/Libraries/Text/RawText/RCTRawTextViewManager.mm +0 -32
  905. package/Libraries/Text/Text/RCTTextShadowView.h +0 -33
  906. package/Libraries/Text/Text/RCTTextShadowView.mm +0 -469
  907. package/Libraries/Text/Text/RCTTextView.h +0 -34
  908. package/Libraries/Text/Text/RCTTextView.mm +0 -308
  909. package/Libraries/Text/Text/RCTTextViewManager.h +0 -19
  910. package/Libraries/Text/Text/RCTTextViewManager.mm +0 -97
  911. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.h +0 -21
  912. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputView.mm +0 -67
  913. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.h +0 -21
  914. package/Libraries/Text/TextInput/Multiline/RCTMultilineTextInputViewManager.mm +0 -30
  915. package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.h +0 -30
  916. package/Libraries/Text/TextInput/RCTBaseTextInputShadowView.mm +0 -367
  917. package/Libraries/Text/TextInput/RCTBaseTextInputView.h +0 -68
  918. package/Libraries/Text/TextInput/RCTBaseTextInputView.mm +0 -858
  919. package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.h +0 -17
  920. package/Libraries/Text/TextInput/RCTBaseTextInputViewManager.mm +0 -181
  921. package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.h +0 -17
  922. package/Libraries/Text/TextInput/RCTInputAccessoryShadowView.mm +0 -24
  923. package/Libraries/Text/TextInput/RCTInputAccessoryView.h +0 -22
  924. package/Libraries/Text/TextInput/RCTInputAccessoryView.mm +0 -82
  925. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.h +0 -17
  926. package/Libraries/Text/TextInput/RCTInputAccessoryViewContent.mm +0 -78
  927. package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.h +0 -17
  928. package/Libraries/Text/TextInput/RCTInputAccessoryViewManager.mm +0 -33
  929. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.h +0 -21
  930. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputView.mm +0 -43
  931. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.h +0 -21
  932. package/Libraries/Text/TextInput/Singleline/RCTSinglelineTextInputViewManager.mm +0 -35
  933. package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.h +0 -17
  934. package/Libraries/Text/VirtualText/RCTVirtualTextShadowView.mm +0 -42
  935. package/Libraries/Text/VirtualText/RCTVirtualTextView.h +0 -28
  936. package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.h +0 -17
  937. package/Libraries/Text/VirtualText/RCTVirtualTextViewManager.mm +0 -30
  938. package/Libraries/Utilities/SceneTracker.js +0 -42
  939. package/Libraries/Wrapper/Example/RCTWrapperExampleView.h +0 -21
  940. package/Libraries/Wrapper/Example/RCTWrapperExampleView.m +0 -57
  941. package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.h +0 -21
  942. package/Libraries/Wrapper/Example/RCTWrapperExampleViewController.m +0 -27
  943. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.h +0 -25
  944. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewController.m +0 -50
  945. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.h +0 -23
  946. package/Libraries/Wrapper/Example/RCTWrapperReactRootViewManager.m +0 -35
  947. package/Libraries/Wrapper/RCTWrapper.h +0 -73
  948. package/Libraries/Wrapper/RCTWrapperShadowView.h +0 -27
  949. package/Libraries/Wrapper/RCTWrapperShadowView.m +0 -138
  950. package/Libraries/Wrapper/RCTWrapperView.h +0 -42
  951. package/Libraries/Wrapper/RCTWrapperView.m +0 -99
  952. package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.h +0 -30
  953. package/Libraries/Wrapper/RCTWrapperViewControllerHostingView.m +0 -137
  954. package/Libraries/Wrapper/RCTWrapperViewManager.h +0 -25
  955. package/Libraries/Wrapper/RCTWrapperViewManager.m +0 -31
  956. package/React/Base/RCTRootContentView.h +0 -43
  957. package/React/Base/RCTRootContentView.m +0 -111
  958. package/React/Base/RCTRootViewInternal.h +0 -40
  959. package/React/CxxBridge/RCTCxxBridge.mm +0 -1572
  960. package/React/CxxBridge/RCTJSIExecutorRuntimeInstaller.h +0 -25
  961. package/React/CxxBridge/RCTJSIExecutorRuntimeInstaller.mm +0 -34
  962. package/React/CxxBridge/RCTObjcExecutor.h +0 -34
  963. package/React/CxxBridge/RCTObjcExecutor.mm +0 -150
  964. package/React/CxxLogUtils/RCTDefaultCxxLogFunction.mm +0 -34
  965. package/React/CxxModule/DispatchMessageQueueThread.h +0 -50
  966. package/React/CxxModule/RCTCxxMethod.h +0 -17
  967. package/React/CxxModule/RCTCxxMethod.mm +0 -147
  968. package/React/CxxModule/RCTNativeModule.h +0 -34
  969. package/React/CxxModule/RCTNativeModule.mm +0 -241
  970. package/React/Fabric/RCTSurfacePresenterBridgeAdapter.mm +0 -205
  971. package/React/Tests/Text/RCTTextAttributesTest.mm +0 -49
  972. package/React/Views/RCTActivityIndicatorView.h +0 -16
  973. package/React/Views/RCTActivityIndicatorView.m +0 -26
  974. package/React/Views/RCTActivityIndicatorViewManager.h +0 -23
  975. package/React/Views/RCTActivityIndicatorViewManager.m +0 -65
  976. package/React/Views/RCTDebuggingOverlayManager.h +0 -17
  977. package/React/Views/RCTDebuggingOverlayManager.m +0 -68
  978. package/React/Views/RCTModalHostView.h +0 -72
  979. package/React/Views/RCTModalHostView.m +0 -302
  980. package/React/Views/RCTModalHostViewController.m +0 -107
  981. package/React/Views/RCTModalHostViewManager.m +0 -131
  982. package/React/Views/RCTModalManager.h +0 -22
  983. package/React/Views/RCTModalManager.m +0 -46
  984. package/React/Views/RCTRootShadowView.h +0 -35
  985. package/React/Views/RCTRootShadowView.m +0 -53
  986. package/React/Views/RCTShadowView+Internal.h +0 -18
  987. package/React/Views/RCTShadowView+Internal.m +0 -23
  988. package/React/Views/RCTSwitch.h +0 -24
  989. package/React/Views/RCTSwitch.m +0 -26
  990. package/React/Views/RCTSwitchManager.h +0 -19
  991. package/React/Views/RCTSwitchManager.m +0 -72
  992. package/React/Views/RCTTVView.h +0 -105
  993. package/React/Views/RCTTVView.m +0 -602
  994. package/React/Views/RefreshControl/RCTRefreshControl.h +0 -26
  995. package/React/Views/RefreshControl/RCTRefreshControl.m +0 -232
  996. package/React/Views/RefreshControl/RCTRefreshControlManager.h +0 -19
  997. package/React/Views/RefreshControl/RCTRefreshControlManager.m +0 -49
  998. package/React/Views/SafeAreaView/RCTSafeAreaShadowView.h +0 -21
  999. package/React/Views/SafeAreaView/RCTSafeAreaShadowView.m +0 -57
  1000. package/React/Views/SafeAreaView/RCTSafeAreaView.h +0 -27
  1001. package/React/Views/SafeAreaView/RCTSafeAreaView.m +0 -79
  1002. package/React/Views/SafeAreaView/RCTSafeAreaViewLocalData.h +0 -25
  1003. package/React/Views/SafeAreaView/RCTSafeAreaViewLocalData.m +0 -25
  1004. package/React/Views/SafeAreaView/RCTSafeAreaViewManager.h +0 -21
  1005. package/React/Views/SafeAreaView/RCTSafeAreaViewManager.m +0 -32
  1006. package/React/Views/ScrollView/RCTScrollContentShadowView.h +0 -19
  1007. package/React/Views/ScrollView/RCTScrollContentShadowView.m +0 -35
  1008. package/React/Views/ScrollView/RCTScrollContentView.h +0 -19
  1009. package/React/Views/ScrollView/RCTScrollContentView.m +0 -36
  1010. package/React/Views/ScrollView/RCTScrollContentViewManager.h +0 -17
  1011. package/React/Views/ScrollView/RCTScrollContentViewManager.m +0 -31
  1012. package/React/Views/ScrollView/RCTScrollView.m +0 -1508
  1013. package/React/Views/ScrollView/RCTScrollViewManager.h +0 -25
  1014. package/React/Views/ScrollView/RCTScrollViewManager.m +0 -208
  1015. package/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java +0 -251
  1016. package/ReactAndroid/src/main/java/com/facebook/react/bridge/BridgeReactContext.java +0 -315
  1017. package/ReactAndroid/src/main/java/com/facebook/react/common/ClearableSynchronizedPool.kt +0 -51
  1018. package/ReactAndroid/src/main/java/com/facebook/react/fabric/AnimationBackendChoreographer.kt +0 -89
  1019. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/JSPointerDispatcher.java +0 -736
  1020. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/NativeViewHierarchyManager.java +0 -221
  1021. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactShadowNode.java +0 -399
  1022. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ReactZIndexedViewGroup.kt +0 -35
  1023. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIImplementation.java +0 -346
  1024. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModule.java +0 -666
  1025. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIViewOperationQueue.java +0 -147
  1026. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewGroupDrawingOrderHelper.kt +0 -113
  1027. package/ReactAndroid/src/main/java/com/facebook/react/uimanager/ViewManagersPropertyCache.java +0 -614
  1028. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +0 -1949
  1029. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactNestedScrollView.java +0 -1646
  1030. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +0 -1744
  1031. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaAlign.java +0 -51
  1032. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaBoxSizing.java +0 -33
  1033. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDimension.java +0 -33
  1034. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaDisplay.java +0 -37
  1035. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaEdge.java +0 -47
  1036. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaErrata.java +0 -41
  1037. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaExperimentalFeature.java +0 -33
  1038. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaFlexDirection.java +0 -37
  1039. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGridTrackType.java +0 -39
  1040. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaGutter.java +0 -35
  1041. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaJustify.java +0 -49
  1042. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaLogLevel.java +0 -45
  1043. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaMeasureMode.java +0 -35
  1044. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeJNIBase.java +0 -928
  1045. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaNodeType.java +0 -33
  1046. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaOverflow.java +0 -35
  1047. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaPositionType.java +0 -35
  1048. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaUnit.java +0 -43
  1049. package/ReactAndroid/src/main/java/com/facebook/yoga/YogaWrap.java +0 -35
  1050. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.cpp +0 -23
  1051. package/ReactAndroid/src/main/jni/react/fabric/JAnimationBackendChoreographer.h +0 -37
  1052. package/ReactCommon/cxxreact/JSIndexedRAMBundle.cpp +0 -135
  1053. package/ReactCommon/cxxreact/JSIndexedRAMBundle.h +0 -72
  1054. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.cpp +0 -143
  1055. package/ReactCommon/hermes/inspector-modern/chrome/ConnectionDemux.h +0 -55
  1056. package/ReactCommon/hermes/inspector-modern/chrome/Registration.cpp +0 -78
  1057. package/ReactCommon/hermes/inspector-modern/chrome/Registration.h +0 -39
  1058. package/ReactCommon/hermes/inspector-modern/chrome/tests/ConnectionDemuxTests.cpp +0 -148
  1059. package/ReactCommon/react/nativemodule/samples/platform/android/NativeSampleTurboModuleSpec.java +0 -168
  1060. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.cpp +0 -416
  1061. package/ReactCommon/react/nativemodule/samples/platform/android/ReactCommon/SampleTurboModuleSpec.h +0 -31
  1062. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTNativeSampleTurboModuleSpec.h +0 -134
  1063. package/ReactCommon/react/nativemodule/samples/platform/ios/ReactCommon/RCTNativeSampleTurboModuleSpec.mm +0 -290
  1064. package/ReactCommon/react/renderer/core/RawPropsKey.cpp +0 -62
  1065. package/ReactCommon/react/renderer/core/RawPropsKey.h +0 -39
  1066. package/ReactCommon/react/renderer/mounting/internal/DiffMap.h +0 -170
  1067. package/ReactCommon/react/renderer/mounting/internal/LongestIncreasingSubsequence.h +0 -95
  1068. package/ReactCommon/react/renderer/mounting/internal/TinyMap.h +0 -147
  1069. package/ReactCommon/react/renderer/mounting/tests/LongestIncreasingSubsequenceTest.cpp +0 -154
  1070. package/interface.js +0 -21
  1071. package/jest-preset.js +0 -26
  1072. package/rn-get-polyfills.js +0 -13
  1073. package/sdks/.hermesversion +0 -1
  1074. package/src/private/components/virtualcollection/debug/FlingItemOverlay.js +0 -13
  1075. package/types/tsconfig.json +0 -15
  1076. /package/ReactCommon/{cxxreact → react/utils}/MoveWrapper.h +0 -0
@@ -0,0 +1,1729 @@
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.views.scroll
9
+
10
+ import android.animation.ObjectAnimator
11
+ import android.animation.ValueAnimator
12
+ import android.content.Context
13
+ import android.graphics.Canvas
14
+ import android.graphics.Color
15
+ import android.graphics.Point
16
+ import android.graphics.Rect
17
+ import android.graphics.drawable.Drawable
18
+ import android.os.Build
19
+ import android.view.FocusFinder
20
+ import android.view.KeyEvent
21
+ import android.view.MotionEvent
22
+ import android.view.View
23
+ import android.view.ViewGroup
24
+ import android.view.ViewParent
25
+ import android.view.accessibility.AccessibilityNodeInfo
26
+ import android.widget.HorizontalScrollView
27
+ import android.widget.OverScroller
28
+ import androidx.core.graphics.drawable.toDrawable
29
+ import androidx.core.view.ViewCompat
30
+ import androidx.core.view.ViewCompat.FocusDirection
31
+ import androidx.core.view.isEmpty
32
+ import androidx.core.view.isNotEmpty
33
+ import com.facebook.common.logging.FLog
34
+ import com.facebook.react.R
35
+ import com.facebook.react.common.ReactConstants
36
+ import com.facebook.react.common.build.ReactBuildConfig
37
+ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
38
+ import com.facebook.react.uimanager.BackgroundStyleApplicator
39
+ import com.facebook.react.uimanager.HasChildPressedStateDelay
40
+ import com.facebook.react.uimanager.LengthPercentage
41
+ import com.facebook.react.uimanager.LengthPercentageType
42
+ import com.facebook.react.uimanager.MeasureSpecAssertions
43
+ import com.facebook.react.uimanager.PixelUtil
44
+ import com.facebook.react.uimanager.PointerEvents
45
+ import com.facebook.react.uimanager.ReactClippingViewGroup
46
+ import com.facebook.react.uimanager.ReactClippingViewGroupHelper
47
+ import com.facebook.react.uimanager.ReactOverflowViewWithInset
48
+ import com.facebook.react.uimanager.StateWrapper
49
+ import com.facebook.react.uimanager.events.NativeGestureUtil
50
+ import com.facebook.react.uimanager.style.BorderRadiusProp
51
+ import com.facebook.react.uimanager.style.BorderStyle
52
+ import com.facebook.react.uimanager.style.LogicalEdge
53
+ import com.facebook.react.uimanager.style.Overflow
54
+ import com.facebook.react.views.common.UiModeUtils
55
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.HasFlingAnimator
56
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.HasScrollEventThrottle
57
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.HasScrollState
58
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.HasSmoothScroll
59
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.HasStateWrapper
60
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.ReactScrollViewScrollState
61
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_CENTER
62
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_DISABLED
63
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_END
64
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_ITEM
65
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.SNAP_ALIGNMENT_START
66
+ import com.facebook.react.views.scroll.ReactScrollViewHelper.findNextFocusableView
67
+ import com.facebook.systrace.Systrace
68
+ import kotlin.math.abs
69
+ import kotlin.math.ceil
70
+ import kotlin.math.floor
71
+ import kotlin.math.max
72
+ import kotlin.math.round
73
+ import kotlin.math.sign
74
+
75
+ /** Similar to [ReactScrollView] but only supports horizontal scrolling. */
76
+ public open class ReactHorizontalScrollView
77
+ @JvmOverloads
78
+ constructor(context: Context, private val fpsListener: FpsListener? = null) :
79
+ HorizontalScrollView(context),
80
+ ReactClippingViewGroup,
81
+ ViewGroup.OnHierarchyChangeListener,
82
+ View.OnLayoutChangeListener,
83
+ ReactAccessibleScrollView,
84
+ ReactOverflowViewWithInset,
85
+ HasScrollState,
86
+ HasStateWrapper,
87
+ HasFlingAnimator,
88
+ HasScrollEventThrottle,
89
+ HasSmoothScroll,
90
+ VirtualViewContainer,
91
+ HasChildPressedStateDelay {
92
+
93
+ private companion object {
94
+ private val DEBUG_MODE = false && ReactBuildConfig.DEBUG
95
+ private val TAG = ReactHorizontalScrollView::class.java.simpleName
96
+
97
+ private const val NO_SCROLL_POSITION = Int.MIN_VALUE
98
+ private const val UNSET_CONTENT_OFFSET = -1
99
+
100
+ private var scrollerField: java.lang.reflect.Field? = null
101
+ private var triedToGetScrollerField = false
102
+
103
+ private fun findDeepestScrollViewForMotionEvent(
104
+ view: View,
105
+ ev: MotionEvent,
106
+ ): HorizontalScrollView? = findDeepestScrollViewForMotionEvent(view, ev, true)
107
+
108
+ private fun findDeepestScrollViewForMotionEvent(
109
+ view: View?,
110
+ ev: MotionEvent,
111
+ skipInitialView: Boolean,
112
+ ): HorizontalScrollView? {
113
+ if (view == null) return null
114
+
115
+ val rectOnScreen = Rect()
116
+ view.getGlobalVisibleRect(rectOnScreen)
117
+ if (!rectOnScreen.contains(ev.rawX.toInt(), ev.rawY.toInt())) {
118
+ return null
119
+ }
120
+
121
+ if (
122
+ !skipInitialView &&
123
+ view is HorizontalScrollView &&
124
+ ViewCompat.isNestedScrollingEnabled(view) &&
125
+ (view is ReactHorizontalScrollView && view.scrollEnabled)
126
+ ) {
127
+ return view
128
+ }
129
+
130
+ if (view is ViewGroup) {
131
+ for (i in 0 until view.childCount) {
132
+ val foundScrollView = findDeepestScrollViewForMotionEvent(view.getChildAt(i), ev, false)
133
+ if (foundScrollView != null) {
134
+ return foundScrollView
135
+ }
136
+ }
137
+ }
138
+
139
+ return null
140
+ }
141
+ }
142
+
143
+ private var scrollXAfterMeasure = NO_SCROLL_POSITION
144
+
145
+ private val onScrollDispatchHelper = OnScrollDispatchHelper()
146
+ private val scroller: OverScroller? = getOverScrollerFromParent()
147
+ private val velocityHelper = VelocityHelper()
148
+ private val tempRect = Rect()
149
+ private val defaultFlingAnimator: ValueAnimator = ObjectAnimator.ofInt(this, "scrollX", 0, 0)
150
+
151
+ // Backing fields for interface properties with custom logic
152
+ private var _overflowInset = Rect()
153
+ private var _virtualViewContainerState: VirtualViewContainerState? = null
154
+ private var _removeClippedSubviews = false
155
+ private var _reactScrollViewScrollState = ReactScrollViewScrollState()
156
+
157
+ // Private state
158
+ private var activelyScrolling = false
159
+ private var clippingRect: Rect? = null
160
+ private var _overflow: Overflow =
161
+ if (ReactNativeFeatureFlags.enablePropsUpdateReconciliationAndroid()) Overflow.VISIBLE
162
+ else Overflow.SCROLL
163
+ private var dragging = false
164
+ private var pagingEnabled = false
165
+ private var postTouchRunnable: Runnable? = null
166
+ private var sendMomentumEvents = false
167
+ private var scrollPerfTag: String? = null
168
+ private var endBackground: Drawable? = null
169
+ private var endFillColor = Color.TRANSPARENT
170
+ private var disableIntervalMomentum = false
171
+ internal var snapInterval = 0
172
+ internal var snapOffsets: List<Int>? = null
173
+ internal var snapToStart = true
174
+ internal var snapToEnd = true
175
+ internal var snapToAlignment = SNAP_ALIGNMENT_DISABLED
176
+ private var pagedArrowScrolling = false
177
+ private var pendingContentOffsetX = UNSET_CONTENT_OFFSET
178
+ private var pendingContentOffsetY = UNSET_CONTENT_OFFSET
179
+ public open var pointerEvents: PointerEvents = PointerEvents.AUTO
180
+ private var contentView: View? = null
181
+ private var maintainVisibleContentPositionHelper:
182
+ MaintainVisibleScrollPositionHelper<ReactHorizontalScrollView>? =
183
+ null
184
+ public open var fadingEdgeLengthStart: Int = 0
185
+ set(value) {
186
+ field = value
187
+ invalidate()
188
+ }
189
+
190
+ public open var fadingEdgeLengthEnd: Int = 0
191
+ set(value) {
192
+ field = value
193
+ invalidate()
194
+ }
195
+
196
+ private var emittedOverScrollSinceScrollBegin = false
197
+ private var scrollsChildToFocus = true
198
+ internal var snapToItemPadding: Int = 0
199
+ internal var scrollAnimationEnabled: Boolean = true
200
+ private var blockScrollDelta: Boolean = false
201
+
202
+ // Interface property overrides
203
+ override var scrollEnabled: Boolean = true
204
+ override var stateWrapper: StateWrapper? = null
205
+ override var scrollEventThrottle: Int = 0
206
+ override var lastScrollDispatchTime: Long = 0L
207
+ override var hasChildPressedStateDelay: Boolean? = null
208
+
209
+ override val virtualViewContainerState: VirtualViewContainerState
210
+ get() =
211
+ _virtualViewContainerState
212
+ ?: VirtualViewContainerState.create(this).also { _virtualViewContainerState = it }
213
+
214
+ override val overflowInset: Rect
215
+ get() = _overflowInset
216
+
217
+ override val overflow: String?
218
+ get() =
219
+ when (_overflow) {
220
+ Overflow.HIDDEN -> "hidden"
221
+ Overflow.SCROLL -> "scroll"
222
+ Overflow.VISIBLE -> "visible"
223
+ }
224
+
225
+ override var removeClippedSubviews: Boolean
226
+ get() = _removeClippedSubviews
227
+ set(value) {
228
+ if (ReactNativeFeatureFlags.disableSubviewClippingAndroid()) return
229
+ if (value && clippingRect == null) clippingRect = Rect()
230
+ _removeClippedSubviews = value
231
+ updateClippingRect()
232
+ }
233
+
234
+ override var reactScrollViewScrollState: ReactScrollViewScrollState
235
+ get() = _reactScrollViewScrollState
236
+ set(value) {
237
+ _reactScrollViewScrollState = value
238
+ if (
239
+ ReactNativeFeatureFlags.enableViewCulling() ||
240
+ ReactNativeFeatureFlags.useTraitHiddenOnAndroid()
241
+ ) {
242
+ val scrollPosition = value.lastStateUpdateScroll
243
+ restoreScrollTo(scrollPosition.x, scrollPosition.y)
244
+ }
245
+ }
246
+
247
+ init {
248
+ ViewCompat.setAccessibilityDelegate(this, ReactScrollViewAccessibilityDelegate())
249
+ setOnHierarchyChangeListener(this)
250
+ setClipChildren(false)
251
+ initView()
252
+ }
253
+
254
+ /**
255
+ * Set all default values here as opposed to in the constructor or field defaults. It is important
256
+ * that these properties are set during the constructor, but also on-demand whenever an existing
257
+ * ReactHorizontalScrollView is recycled.
258
+ */
259
+ private fun initView() {
260
+ _overflowInset = Rect()
261
+ _virtualViewContainerState = null
262
+ activelyScrolling = false
263
+ clippingRect = null
264
+ _overflow =
265
+ if (ReactNativeFeatureFlags.enablePropsUpdateReconciliationAndroid()) Overflow.VISIBLE
266
+ else Overflow.SCROLL
267
+ dragging = false
268
+ pagingEnabled = false
269
+ postTouchRunnable = null
270
+ _removeClippedSubviews = false
271
+ scrollEnabled = true
272
+ sendMomentumEvents = false
273
+ scrollPerfTag = null
274
+ endBackground = null
275
+ endFillColor = Color.TRANSPARENT
276
+ disableIntervalMomentum = false
277
+ snapInterval = 0
278
+ snapOffsets = null
279
+ snapToStart = true
280
+ snapToEnd = true
281
+ snapToAlignment = SNAP_ALIGNMENT_DISABLED
282
+ pagedArrowScrolling = false
283
+ pendingContentOffsetX = UNSET_CONTENT_OFFSET
284
+ pendingContentOffsetY = UNSET_CONTENT_OFFSET
285
+ stateWrapper = null
286
+ _reactScrollViewScrollState = ReactScrollViewScrollState()
287
+ pointerEvents = PointerEvents.AUTO
288
+ lastScrollDispatchTime = 0
289
+ scrollEventThrottle = 0
290
+ contentView = null
291
+ maintainVisibleContentPositionHelper = null
292
+ fadingEdgeLengthStart = 0
293
+ fadingEdgeLengthEnd = 0
294
+ emittedOverScrollSinceScrollBegin = false
295
+ scrollsChildToFocus = true
296
+ snapToItemPadding = 0
297
+ scrollAnimationEnabled = true
298
+ blockScrollDelta = false
299
+ }
300
+
301
+ internal fun recycleView() {
302
+ initView()
303
+ if (parent != null) {
304
+ (parent as ViewGroup).removeView(this)
305
+ }
306
+ updateView()
307
+ }
308
+
309
+ private fun updateView() {}
310
+
311
+ override fun onInitializeAccessibilityNodeInfo(info: AccessibilityNodeInfo) {
312
+ super.onInitializeAccessibilityNodeInfo(info)
313
+ val testId = getTag(R.id.react_test_id) as? String
314
+ if (testId != null) {
315
+ info.viewIdResourceName = testId
316
+ }
317
+ }
318
+
319
+ override fun canScrollHorizontally(direction: Int): Boolean {
320
+ return scrollEnabled && super.canScrollHorizontally(direction)
321
+ }
322
+
323
+ override fun computeScroll() {
324
+ val s = scroller
325
+ if (UiModeUtils.isTVDevice(context) &&
326
+ !scrollAnimationEnabled &&
327
+ s != null &&
328
+ !s.isFinished) {
329
+ // Jump instantly to the target position instead of animating.
330
+ scrollTo(s.finalX, s.finalY)
331
+ s.forceFinished(true)
332
+ return
333
+ }
334
+ super.computeScroll()
335
+ }
336
+
337
+ override fun computeScrollDeltaToGetChildRectOnScreen(rect: Rect): Int {
338
+ if (!scrollEnabled || blockScrollDelta) {
339
+ return 0
340
+ }
341
+ return super.computeScrollDeltaToGetChildRectOnScreen(rect)
342
+ }
343
+
344
+ private fun getOverScrollerFromParent(): OverScroller? {
345
+ if (!triedToGetScrollerField) {
346
+ triedToGetScrollerField = true
347
+ try {
348
+ scrollerField = HorizontalScrollView::class.java.getDeclaredField("mScroller")
349
+ scrollerField?.isAccessible = true
350
+ } catch (e: NoSuchFieldException) {
351
+ FLog.w(
352
+ TAG,
353
+ "Failed to get mScroller field for HorizontalScrollView! " +
354
+ "This app will exhibit the bounce-back scrolling bug :(",
355
+ )
356
+ }
357
+ }
358
+
359
+ val field = scrollerField ?: return null
360
+ return try {
361
+ val scrollerValue = field.get(this)
362
+ if (scrollerValue is OverScroller) {
363
+ scrollerValue
364
+ } else {
365
+ FLog.w(
366
+ TAG,
367
+ "Failed to cast mScroller field in HorizontalScrollView (probably due to OEM changes" +
368
+ " to AOSP)! This app will exhibit the bounce-back scrolling bug :(",
369
+ )
370
+ null
371
+ }
372
+ } catch (e: IllegalAccessException) {
373
+ throw RuntimeException("Failed to get mScroller from HorizontalScrollView!", e)
374
+ }
375
+ }
376
+
377
+ public open fun setScrollPerfTag(scrollPerfTag: String?) {
378
+ this.scrollPerfTag = scrollPerfTag
379
+ }
380
+
381
+ public open fun setDisableIntervalMomentum(disableIntervalMomentum: Boolean) {
382
+ this.disableIntervalMomentum = disableIntervalMomentum
383
+ }
384
+
385
+ public open fun setSendMomentumEvents(sendMomentumEvents: Boolean) {
386
+ this.sendMomentumEvents = sendMomentumEvents
387
+ }
388
+
389
+ public open fun setPagingEnabled(pagingEnabled: Boolean) {
390
+ this.pagingEnabled = pagingEnabled
391
+ }
392
+
393
+ public open fun setScrollsChildToFocus(scrollsChildToFocus: Boolean) {
394
+ this.scrollsChildToFocus = scrollsChildToFocus
395
+ }
396
+
397
+ public open fun setDecelerationRate(decelerationRate: Float) {
398
+ reactScrollViewScrollState.decelerationRate = decelerationRate
399
+ scroller?.setFriction(1.0f - decelerationRate)
400
+ }
401
+
402
+ public open fun abortAnimation() {
403
+ if (scroller != null && !scroller.isFinished) {
404
+ scroller.abortAnimation()
405
+ }
406
+ }
407
+
408
+ public open fun flashScrollIndicators() {
409
+ awakenScrollBars()
410
+ }
411
+
412
+ override fun getLeftFadingEdgeStrength(): Float {
413
+ val max = max(fadingEdgeLengthStart.toFloat(), fadingEdgeLengthEnd.toFloat())
414
+ val value =
415
+ if (layoutDirection == LAYOUT_DIRECTION_RTL) fadingEdgeLengthEnd else fadingEdgeLengthStart
416
+ return value / max
417
+ }
418
+
419
+ override fun getRightFadingEdgeStrength(): Float {
420
+ val max = max(fadingEdgeLengthStart.toFloat(), fadingEdgeLengthEnd.toFloat())
421
+ val value =
422
+ if (layoutDirection == LAYOUT_DIRECTION_RTL) fadingEdgeLengthStart else fadingEdgeLengthEnd
423
+ return value / max
424
+ }
425
+
426
+ public open fun setOverflow(overflow: String?) {
427
+ _overflow =
428
+ if (overflow == null) {
429
+ Overflow.SCROLL
430
+ } else {
431
+ Overflow.fromString(overflow)
432
+ ?: if (ReactNativeFeatureFlags.enablePropsUpdateReconciliationAndroid())
433
+ Overflow.VISIBLE
434
+ else Overflow.SCROLL
435
+ }
436
+ invalidate()
437
+ }
438
+
439
+ internal open fun setMaintainVisibleContentPosition(
440
+ config: MaintainVisibleScrollPositionHelper.Config?
441
+ ) {
442
+ if (config != null && maintainVisibleContentPositionHelper == null) {
443
+ val helper = MaintainVisibleScrollPositionHelper(this, true)
444
+ maintainVisibleContentPositionHelper = helper
445
+ helper.start()
446
+ } else if (config == null) {
447
+ maintainVisibleContentPositionHelper?.stop()
448
+ maintainVisibleContentPositionHelper = null
449
+ }
450
+ maintainVisibleContentPositionHelper?.let { it.config = config }
451
+ }
452
+
453
+ override fun setOverflowInset(left: Int, top: Int, right: Int, bottom: Int) {
454
+ _overflowInset.set(left, top, right, bottom)
455
+ }
456
+
457
+ public override fun onDraw(canvas: Canvas) {
458
+ if (_overflow != Overflow.VISIBLE) {
459
+ BackgroundStyleApplicator.clipToPaddingBox(this, canvas)
460
+ }
461
+ super.onDraw(canvas)
462
+ }
463
+
464
+ override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
465
+ MeasureSpecAssertions.assertExplicitMeasureSpec(widthMeasureSpec, heightMeasureSpec)
466
+
467
+ val measuredWidth = MeasureSpec.getSize(widthMeasureSpec)
468
+ val measuredHeight = MeasureSpec.getSize(heightMeasureSpec)
469
+
470
+ if (DEBUG_MODE) {
471
+ FLog.i(
472
+ TAG,
473
+ "onMeasure[%d] measured width: %d measured height: %d",
474
+ id,
475
+ measuredWidth,
476
+ measuredHeight,
477
+ )
478
+ }
479
+
480
+ val measuredHeightChanged = getMeasuredHeight() != measuredHeight
481
+
482
+ setMeasuredDimension(measuredWidth, measuredHeight)
483
+
484
+ // See how `scrollXAfterMeasure` is used in `onLayout`, and why we only enable the
485
+ // hack if the height has changed.
486
+ if (measuredHeightChanged && scroller != null) {
487
+ scrollXAfterMeasure = scroller.currX
488
+ }
489
+ }
490
+
491
+ override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
492
+ if (DEBUG_MODE) {
493
+ FLog.i(TAG, "onLayout[%d] l %d t %d r %d b %d", id, l, t, r, b)
494
+ }
495
+
496
+ // Has the scrollX changed between the last onMeasure and this layout?
497
+ // If so, cancel the animation.
498
+ // Essentially, if the height changes (due to keyboard popping up, for instance) the
499
+ // underlying View.layout method will in some cases scroll to an incorrect X position -
500
+ // see also the hacks in `fling`. The order of layout is called in the order of: onMeasure,
501
+ // layout, onLayout.
502
+ // We cannot override `layout` but we can detect the sequence of events between onMeasure
503
+ // and onLayout.
504
+ if (
505
+ scrollXAfterMeasure != NO_SCROLL_POSITION &&
506
+ scroller != null &&
507
+ scrollXAfterMeasure != scroller.finalX &&
508
+ !scroller.isFinished
509
+ ) {
510
+ if (DEBUG_MODE) {
511
+ FLog.i(
512
+ TAG,
513
+ "onLayout[%d] scroll hack enabled: reset to previous scrollX position of %d",
514
+ id,
515
+ scrollXAfterMeasure,
516
+ )
517
+ }
518
+ scroller.startScroll(scrollXAfterMeasure, scroller.finalY, 0, 0)
519
+ scroller.forceFinished(true)
520
+ scrollXAfterMeasure = NO_SCROLL_POSITION
521
+ }
522
+
523
+ // Apply pending contentOffset in case it was set before the view was laid out.
524
+ if (isContentReady()) {
525
+ val scrollToX =
526
+ if (pendingContentOffsetX != UNSET_CONTENT_OFFSET) pendingContentOffsetX else scrollX
527
+ val scrollToY =
528
+ if (pendingContentOffsetY != UNSET_CONTENT_OFFSET) pendingContentOffsetY else scrollY
529
+ scrollTo(scrollToX, scrollToY)
530
+ }
531
+
532
+ ReactScrollViewHelper.emitLayoutEvent(this)
533
+ _virtualViewContainerState?.updateState()
534
+ }
535
+
536
+ /**
537
+ * Attempts to scroll-snap to the focused child based on snapToAlignment/scrollSnapAlign or
538
+ * scrollSnapOffset. Returns true if snap scrolling was performed, false otherwise.
539
+ */
540
+ private fun tryScrollSnapToChild(focused: View): Boolean {
541
+ if (snapToAlignment != SNAP_ALIGNMENT_ITEM) {
542
+ return false
543
+ }
544
+
545
+ val result = ReactScrollViewHelper.findScrollSnap(focused, this) ?: return false
546
+ val snapTarget = result.first
547
+ val alignment = result.second
548
+ val snapOffset = result.third
549
+
550
+ val rect = Rect()
551
+ snapTarget.getDrawingRect(rect)
552
+ offsetDescendantRectToMyCoords(snapTarget, rect)
553
+
554
+ val maxScrollX = max(0, computeHorizontalScrollRange() - width)
555
+
556
+ if (snapOffset != null) {
557
+ val targetOffset =
558
+ ReactScrollViewHelper.computeScrollSnapTargetForOffset(
559
+ rect.left, snapOffset, snapInterval, maxScrollX)
560
+ reactSmoothScrollTo(targetOffset, scrollY)
561
+ return true
562
+ }
563
+
564
+ val viewportWidth = width - paddingLeft - paddingRight
565
+
566
+ val targetOffset =
567
+ ReactScrollViewHelper.computeScrollSnapOffset(
568
+ rect.left,
569
+ rect.right,
570
+ viewportWidth,
571
+ alignment ?: return false,
572
+ snapInterval,
573
+ snapToItemPadding,
574
+ maxScrollX,
575
+ ) ?: return false
576
+
577
+ reactSmoothScrollTo(targetOffset, scrollY)
578
+ return true
579
+ }
580
+
581
+ /**
582
+ * Since ReactHorizontalScrollView handles layout changes on JS side, it does not call
583
+ * super.onLayout due to which mIsLayoutDirty flag in HorizontalScrollView remains true and
584
+ * prevents scrolling to child when requestChildFocus is called. Overriding this method and
585
+ * scrolling to child without checking any layout dirty flag. This will fix focus navigation issue
586
+ * for KeyEvents which are not handled in HorizontalScrollView, for example: KEYCODE_TAB.
587
+ */
588
+ override fun requestChildFocus(child: View, focused: View?) {
589
+ if (focused != null && scrollsChildToFocus) {
590
+ if (!tryScrollSnapToChild(focused)) {
591
+ if (!pagingEnabled) {
592
+ scrollToChild(focused)
593
+ }
594
+ }
595
+ }
596
+ requestChildFocusWithoutScroll(child, focused)
597
+ }
598
+
599
+ /**
600
+ * In rare cases where an app overrides the built-in ReactScrollView by overriding it, and also
601
+ * needs to customize scroll into view on focus behaviors, this protected method can be used to
602
+ * unblock such customization.
603
+ */
604
+ protected open fun requestChildFocusWithoutScroll(child: View, focused: View?) {
605
+ // Temporarily block HorizontalScrollView's internal scrollToChild from running during
606
+ // super.requestChildFocus — we've already handled scrolling in requestChildFocus.
607
+ blockScrollDelta = true
608
+ super.requestChildFocus(child, focused)
609
+ blockScrollDelta = false
610
+ }
611
+
612
+ override fun requestChildRectangleOnScreen(
613
+ child: View,
614
+ rectangle: Rect,
615
+ immediate: Boolean,
616
+ ): Boolean {
617
+ if (!scrollsChildToFocus) return false
618
+ return super.requestChildRectangleOnScreen(child, rectangle, immediate)
619
+ }
620
+
621
+ override fun addFocusables(views: ArrayList<View>, direction: Int, focusableMode: Int) {
622
+ if (pagingEnabled && !pagedArrowScrolling) {
623
+ // Only add elements within the current page to list of focusables
624
+ val candidateViews = ArrayList<View>()
625
+ super.addFocusables(candidateViews, direction, focusableMode)
626
+ for (candidate in candidateViews) {
627
+ // We must also include the currently focused in the focusables list or focus search will
628
+ // always return the first element within the focusables list
629
+ if (
630
+ isScrolledInView(candidate) ||
631
+ isPartiallyScrolledInView(candidate) ||
632
+ candidate.isFocused
633
+ ) {
634
+ views.add(candidate)
635
+ }
636
+ }
637
+ } else {
638
+ super.addFocusables(views, direction, focusableMode)
639
+ }
640
+ }
641
+
642
+ /** Calculates the x delta required to scroll the given descendent into view */
643
+ private fun getScrollDelta(descendent: View): Int {
644
+ descendent.getDrawingRect(tempRect)
645
+ offsetDescendantRectToMyCoords(descendent, tempRect)
646
+ return computeScrollDeltaToGetChildRectOnScreen(tempRect)
647
+ }
648
+
649
+ /** Returns whether the given descendent is scrolled fully in view */
650
+ private fun isScrolledInView(descendent: View): Boolean {
651
+ return getScrollDelta(descendent) == 0
652
+ }
653
+
654
+ override fun isPartiallyScrolledInView(view: View): Boolean {
655
+ val scrollDelta = getScrollDelta(view)
656
+ view.getDrawingRect(tempRect)
657
+ return scrollDelta != 0 && abs(scrollDelta) < tempRect.width()
658
+ }
659
+
660
+ /** Returns whether the given descendent is "mostly" (>50%) scrolled in view */
661
+ private fun isMostlyScrolledInView(descendent: View): Boolean {
662
+ val scrollDelta = getScrollDelta(descendent)
663
+ descendent.getDrawingRect(tempRect)
664
+ return scrollDelta != 0 && abs(scrollDelta) < (tempRect.width() / 2)
665
+ }
666
+
667
+ private fun scrollToChild(child: View) {
668
+ val scrollDelta = getScrollDelta(child)
669
+ if (scrollDelta != 0) {
670
+ scrollBy(scrollDelta, 0)
671
+ }
672
+ }
673
+
674
+ override fun onScrollChanged(x: Int, y: Int, oldX: Int, oldY: Int) {
675
+ if (DEBUG_MODE) {
676
+ FLog.i(TAG, "onScrollChanged[%d] x %d y %d oldx %d oldy %d", id, x, y, oldX, oldY)
677
+ }
678
+
679
+ Systrace.beginSection(Systrace.TRACE_TAG_REACT, "ReactHorizontalScrollView.onScrollChanged")
680
+ try {
681
+ super.onScrollChanged(x, y, oldX, oldY)
682
+ activelyScrolling = true
683
+ if (onScrollDispatchHelper.onScrollChanged(x, y)) {
684
+ if (_removeClippedSubviews) {
685
+ updateClippingRect()
686
+ }
687
+ ReactScrollViewHelper.updateStateOnScrollChanged(
688
+ this,
689
+ onScrollDispatchHelper.xFlingVelocity,
690
+ onScrollDispatchHelper.yFlingVelocity,
691
+ )
692
+ _virtualViewContainerState?.updateState()
693
+ }
694
+ } finally {
695
+ Systrace.endSection(Systrace.TRACE_TAG_REACT)
696
+ }
697
+ }
698
+
699
+ override fun shouldDelayChildPressedState(): Boolean =
700
+ hasChildPressedStateDelay ?: super.shouldDelayChildPressedState()
701
+
702
+ override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
703
+ if (!scrollEnabled) return false
704
+
705
+ if (
706
+ ev.action == MotionEvent.ACTION_DOWN &&
707
+ findDeepestScrollViewForMotionEvent(this, ev) != null
708
+ ) {
709
+ return false
710
+ }
711
+
712
+ // We intercept the touch event if the children are not supposed to receive it.
713
+ if (!PointerEvents.canChildrenBeTouchTarget(pointerEvents)) return true
714
+
715
+ try {
716
+ if (super.onInterceptTouchEvent(ev)) {
717
+ handleInterceptedTouchEvent(ev)
718
+ return true
719
+ }
720
+ } catch (e: IllegalArgumentException) {
721
+ // Log and ignore the error. This seems to be a bug in the android SDK and
722
+ // this is the commonly accepted workaround.
723
+ // https://tinyurl.com/mw6qkod (Stack Overflow)
724
+ FLog.w(ReactConstants.TAG, "Error intercepting touch event.", e)
725
+ }
726
+
727
+ return false
728
+ }
729
+
730
+ protected open fun handleInterceptedTouchEvent(ev: MotionEvent) {
731
+ if (!ReactNativeFeatureFlags.shouldTriggerResponderTransferOnScrollAndroid()) {
732
+ NativeGestureUtil.notifyNativeGestureStarted(this, ev)
733
+ }
734
+ ReactScrollViewHelper.emitScrollBeginDragEvent(this)
735
+ dragging = true
736
+ emittedOverScrollSinceScrollBegin = false
737
+ enableFpsListener()
738
+ getFlingAnimator().cancel()
739
+ }
740
+
741
+ override fun pageScroll(direction: Int): Boolean {
742
+ val handled = super.pageScroll(direction)
743
+ if (pagingEnabled && handled) {
744
+ handlePostTouchScrolling(0, 0)
745
+ }
746
+ return handled
747
+ }
748
+
749
+ private fun isDescendantOf(parent: View?, view: View?): Boolean {
750
+ if (view == null || parent == null) return false
751
+ var p: ViewParent? = view.parent
752
+ while (p != null && p.parent != null) {
753
+ if (p === parent) return true
754
+ p = p.parent
755
+ }
756
+ return false
757
+ }
758
+
759
+ override fun arrowScroll(direction: Int): Boolean {
760
+ var handled = false
761
+
762
+ if (snapToAlignment == SNAP_ALIGNMENT_ITEM) {
763
+ // When snapToAlignment is "item", find the next focusable and request focus directly.
764
+ // This avoids super.arrowScroll() which starts its own scroll animation that conflicts
765
+ // with tryScrollSnapToChild's snap scrolling — requestChildFocus → tryScrollSnapToChild
766
+ // handles scrolling.
767
+ val currentFocused = findFocus()
768
+ val nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction)
769
+ if (nextFocused != null && nextFocused !== currentFocused && nextFocused !== this) {
770
+ nextFocused.requestFocus(direction)
771
+ handled = true
772
+ }
773
+ } else if (pagingEnabled) {
774
+ pagedArrowScrolling = true
775
+
776
+ if (isNotEmpty()) {
777
+ val currentFocused = findFocus()
778
+ val nextFocused = FocusFinder.getInstance().findNextFocus(this, currentFocused, direction)
779
+ val rootChild = getContentView()
780
+ if (nextFocused != null && isDescendantOf(rootChild, nextFocused)) {
781
+ if (snapToAlignment == SNAP_ALIGNMENT_ITEM) {
782
+ // When snapToAlignment is "item", don't use smoothScrollToNextPage (which scrolls
783
+ // by full page width and ignores snapToItemPadding). Just request focus —
784
+ // requestChildFocus → tryScrollSnapToChild handles scrolling with correct padding.
785
+ nextFocused.requestFocus()
786
+ } else {
787
+ if (!isScrolledInView(nextFocused) && !isMostlyScrolledInView(nextFocused)) {
788
+ smoothScrollToNextPage(direction)
789
+ }
790
+ nextFocused.requestFocus()
791
+ }
792
+ handled = true
793
+ } else {
794
+ if (snapToAlignment != SNAP_ALIGNMENT_ITEM) {
795
+ smoothScrollToNextPage(direction)
796
+ }
797
+ handled = true
798
+ }
799
+ }
800
+
801
+ pagedArrowScrolling = false
802
+ } else {
803
+ handled = super.arrowScroll(direction)
804
+ }
805
+
806
+ return handled
807
+ }
808
+
809
+ override fun onTouchEvent(ev: MotionEvent): Boolean {
810
+ if (!scrollEnabled) return false
811
+
812
+ // We do not accept the touch event if this view is not supposed to receive it.
813
+ if (!PointerEvents.canBeTouchTarget(pointerEvents)) return false
814
+
815
+ velocityHelper.calculateVelocity(ev)
816
+ val action = ev.actionMasked
817
+ if (action == MotionEvent.ACTION_UP && dragging) {
818
+ ReactScrollViewHelper.updateFabricScrollState(this)
819
+
820
+ val velocityX = velocityHelper.xVelocity
821
+ val velocityY = velocityHelper.yVelocity
822
+ ReactScrollViewHelper.emitScrollEndDragEvent(this, velocityX, velocityY)
823
+ if (!ReactNativeFeatureFlags.shouldTriggerResponderTransferOnScrollAndroid()) {
824
+ NativeGestureUtil.notifyNativeGestureEnded(this, ev)
825
+ }
826
+ dragging = false
827
+ // After the touch finishes, we may need to do some scrolling afterwards either as a result
828
+ // of a fling or because we need to page align the content
829
+ handlePostTouchScrolling(Math.round(velocityX), Math.round(velocityY))
830
+ }
831
+
832
+ if (action == MotionEvent.ACTION_DOWN) {
833
+ cancelPostTouchScrolling()
834
+ }
835
+
836
+ return try {
837
+ super.onTouchEvent(ev)
838
+ } catch (e: IllegalArgumentException) {
839
+ // Log and ignore the error. This seems to be a bug in the android SDK and
840
+ // this is the commonly accepted workaround.
841
+ // https://tinyurl.com/mw6qkod (Stack Overflow)
842
+ FLog.w(ReactConstants.TAG, "Error handling touch event.", e)
843
+ false
844
+ }
845
+ }
846
+
847
+ override fun dispatchGenericMotionEvent(ev: MotionEvent): Boolean {
848
+ // Ignore generic motion events (joystick, mouse wheel, trackpad) if scrolling is disabled
849
+ if (!scrollEnabled) return false
850
+
851
+ // We do not dispatch the motion event if its children are not supposed to receive it
852
+ if (!PointerEvents.canChildrenBeTouchTarget(pointerEvents)) return false
853
+
854
+ // Handle ACTION_SCROLL events (mouse wheel, trackpad, joystick)
855
+ if (ev.actionMasked == MotionEvent.ACTION_SCROLL) {
856
+ val hScroll = ev.getAxisValue(MotionEvent.AXIS_HSCROLL)
857
+ if (hScroll != 0f) {
858
+ // Perform the scroll
859
+ enableFpsListener()
860
+ val result = super.dispatchGenericMotionEvent(ev)
861
+ // Schedule snap alignment to run after scrolling stops
862
+ if (
863
+ result &&
864
+ (pagingEnabled ||
865
+ snapInterval != 0 ||
866
+ snapOffsets != null ||
867
+ (snapToAlignment != SNAP_ALIGNMENT_DISABLED &&
868
+ snapToAlignment != SNAP_ALIGNMENT_ITEM))
869
+ ) {
870
+ // Cancel any pending post-touch runnable and reschedule
871
+ if (postTouchRunnable != null) {
872
+ removeCallbacks(postTouchRunnable)
873
+ postTouchRunnable = null
874
+ }
875
+ postTouchRunnable = Runnable {
876
+ postTouchRunnable = null
877
+ // +1/-1 velocity if scrolling right or left. This is to ensure that the
878
+ // next/previous page is picked rather than sliding backwards to the current page
879
+ var velocityX = hScroll.sign.toInt()
880
+ if (disableIntervalMomentum) {
881
+ velocityX = 0
882
+ }
883
+ flingAndSnap(velocityX)
884
+ handlePostTouchScrolling(velocityX, 0)
885
+ }
886
+ postOnAnimationDelayed(postTouchRunnable, ReactScrollViewHelper.MOMENTUM_DELAY)
887
+ } else {
888
+ handlePostTouchScrolling(0, 0)
889
+ }
890
+ return result
891
+ }
892
+ }
893
+
894
+ return super.dispatchGenericMotionEvent(ev)
895
+ }
896
+
897
+ override fun executeKeyEvent(event: KeyEvent): Boolean {
898
+ val eventKeyCode = event.keyCode
899
+ if (
900
+ !scrollEnabled &&
901
+ (eventKeyCode == KeyEvent.KEYCODE_DPAD_LEFT ||
902
+ eventKeyCode == KeyEvent.KEYCODE_DPAD_RIGHT)
903
+ ) {
904
+ return false
905
+ }
906
+ return super.executeKeyEvent(event)
907
+ }
908
+
909
+ override fun fling(velocityX: Int) {
910
+ if (DEBUG_MODE) {
911
+ FLog.i(TAG, "fling[%d] velocityX %d", id, velocityX)
912
+ }
913
+
914
+ // Workaround.
915
+ // On Android P if a ScrollView is inverted, we will get a wrong sign for
916
+ // velocityX (see https://issuetracker.google.com/issues/112385925).
917
+ // At the same time, onScrollDispatchHelper tracks the correct velocity direction.
918
+ //
919
+ // Hence, we can use the absolute value from whatever the OS gives
920
+ // us and use the sign of what onScrollDispatchHelper has tracked.
921
+ val correctedVelocityX =
922
+ if (Build.VERSION.SDK_INT == Build.VERSION_CODES.P) {
923
+ (abs(velocityX) * onScrollDispatchHelper.xFlingVelocity.sign).toInt()
924
+ } else {
925
+ velocityX
926
+ }
927
+
928
+ if (pagingEnabled) {
929
+ flingAndSnap(correctedVelocityX)
930
+ } else if (scroller != null) {
931
+ // FB SCROLLVIEW CHANGE
932
+
933
+ // We provide our own version of fling that uses a different call to the standard OverScroller
934
+ // which takes into account the possibility of adding new content while the ScrollView is
935
+ // animating. Because we give essentially no max X for the fling, the fling will continue as
936
+ // long as there is content. See onOverScrolled() to see the second part of this change which
937
+ // properly aborts the scroller animation when we get to the bottom of the ScrollView content.
938
+
939
+ val scrollWindowWidth = width - paddingStart - paddingEnd
940
+
941
+ scroller.fling(
942
+ scrollX, // startX
943
+ scrollY, // startY
944
+ correctedVelocityX, // velocityX
945
+ 0, // velocityY
946
+ 0, // minX
947
+ Int.MAX_VALUE, // maxX
948
+ 0, // minY
949
+ 0, // maxY
950
+ scrollWindowWidth / 2, // overX
951
+ 0, // overY
952
+ )
953
+
954
+ postInvalidateOnAnimation()
955
+
956
+ // END FB SCROLLVIEW CHANGE
957
+ } else {
958
+ super.fling(correctedVelocityX)
959
+ }
960
+ handlePostTouchScrolling(correctedVelocityX, 0)
961
+ }
962
+
963
+ override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
964
+ super.onSizeChanged(w, h, oldw, oldh)
965
+ if (_removeClippedSubviews) {
966
+ updateClippingRect()
967
+ }
968
+ _virtualViewContainerState?.updateState()
969
+ }
970
+
971
+ override fun onAttachedToWindow() {
972
+ super.onAttachedToWindow()
973
+ if (_removeClippedSubviews) {
974
+ updateClippingRect()
975
+ }
976
+ maintainVisibleContentPositionHelper?.start()
977
+ }
978
+
979
+ override fun onDetachedFromWindow() {
980
+ super.onDetachedFromWindow()
981
+ maintainVisibleContentPositionHelper?.stop()
982
+ }
983
+
984
+ override fun focusSearch(focused: View, @FocusDirection direction: Int): View? {
985
+ val nextFocus = super.focusSearch(focused, direction)
986
+
987
+ if (ReactNativeFeatureFlags.enableCustomFocusSearchOnClippedElementsAndroid()) {
988
+ // If we can find the next focus and it is a child of this view, return it, else it means we
989
+ // are leaving the scroll view and we should try to find a clipped element
990
+ if (nextFocus != null && findViewById<View>(nextFocus.id) != null) {
991
+ return nextFocus
992
+ }
993
+ val nextFocusableView = findNextFocusableView(this, focused, direction)
994
+ if (nextFocusableView != null) {
995
+ return nextFocusableView
996
+ }
997
+ }
998
+
999
+ return nextFocus
1000
+ }
1001
+
1002
+ override fun updateClippingRect() {
1003
+ updateClippingRect(null)
1004
+ }
1005
+
1006
+ override fun updateClippingRect(excludedViews: Set<Int>?) {
1007
+ if (!_removeClippedSubviews) return
1008
+
1009
+ Systrace.beginSection(Systrace.TRACE_TAG_REACT, "ReactHorizontalScrollView.updateClippingRect")
1010
+ try {
1011
+ val rect = checkNotNull(clippingRect)
1012
+ ReactClippingViewGroupHelper.calculateClippingRect(this, rect)
1013
+ val cv = getContentView()
1014
+ if (cv is ReactClippingViewGroup) {
1015
+ cv.updateClippingRect(excludedViews)
1016
+ }
1017
+ } finally {
1018
+ Systrace.endSection(Systrace.TRACE_TAG_REACT)
1019
+ }
1020
+ }
1021
+
1022
+ override fun getClippingRect(outClippingRect: Rect) {
1023
+ outClippingRect.set(checkNotNull(clippingRect))
1024
+ }
1025
+
1026
+ override fun getChildVisibleRect(child: View, r: Rect, offset: android.graphics.Point?): Boolean {
1027
+ return super.getChildVisibleRect(child, r, offset)
1028
+ }
1029
+
1030
+ private fun getSnapInterval(): Int = if (snapInterval != 0) snapInterval else width
1031
+
1032
+ private fun getContentView(): View? = getChildAt(0)
1033
+
1034
+ public open fun setEndFillColor(color: Int) {
1035
+ if (color != endFillColor) {
1036
+ endFillColor = color
1037
+ endBackground = endFillColor.toDrawable()
1038
+ }
1039
+ }
1040
+
1041
+ override fun onOverScrolled(scrollX: Int, scrollY: Int, clampedX: Boolean, clampedY: Boolean) {
1042
+ if (DEBUG_MODE) {
1043
+ FLog.i(
1044
+ TAG,
1045
+ "onOverScrolled[%d] scrollX %d scrollY %d clampedX %b clampedY %b",
1046
+ id,
1047
+ scrollX,
1048
+ scrollY,
1049
+ clampedX,
1050
+ clampedY,
1051
+ )
1052
+ }
1053
+
1054
+ @Suppress("NAME_SHADOWING") var scrollX = scrollX
1055
+
1056
+ if (scroller != null) {
1057
+ // FB SCROLLVIEW CHANGE
1058
+
1059
+ // This is part two of the reimplementation of fling to fix the bounce-back bug. See fling()
1060
+ // for more information.
1061
+
1062
+ if (!scroller.isFinished && scroller.currX != scroller.finalX) {
1063
+ val scrollRange = max(computeHorizontalScrollRange() - width, 0)
1064
+ if (scrollX >= scrollRange) {
1065
+ scroller.abortAnimation()
1066
+ scrollX = scrollRange
1067
+ }
1068
+ }
1069
+
1070
+ // END FB SCROLLVIEW CHANGE
1071
+ }
1072
+
1073
+ if (
1074
+ ReactNativeFeatureFlags.shouldTriggerResponderTransferOnScrollAndroid() &&
1075
+ clampedX &&
1076
+ !emittedOverScrollSinceScrollBegin
1077
+ ) {
1078
+ ReactScrollViewHelper.emitScrollEvent(this, 0f, 0f)
1079
+ emittedOverScrollSinceScrollBegin = true
1080
+ }
1081
+
1082
+ super.onOverScrolled(scrollX, scrollY, clampedX, clampedY)
1083
+ }
1084
+
1085
+ override fun onChildViewAdded(parent: View, child: View) {
1086
+ contentView = child
1087
+ child.addOnLayoutChangeListener(this)
1088
+ }
1089
+
1090
+ override fun onChildViewRemoved(parent: View, child: View) {
1091
+ contentView?.removeOnLayoutChangeListener(this)
1092
+ contentView = null
1093
+ }
1094
+
1095
+ private fun enableFpsListener() {
1096
+ if (isScrollPerfLoggingEnabled()) {
1097
+ val listener = fpsListener ?: return
1098
+ val perfTag = scrollPerfTag.takeUnless { it.isNullOrEmpty() } ?: return
1099
+ listener.enable(perfTag)
1100
+ }
1101
+ }
1102
+
1103
+ private fun disableFpsListener() {
1104
+ if (isScrollPerfLoggingEnabled()) {
1105
+ val listener = fpsListener ?: return
1106
+ val perfTag = scrollPerfTag.takeUnless { it.isNullOrEmpty() } ?: return
1107
+ listener.disable(perfTag)
1108
+ }
1109
+ }
1110
+
1111
+ private fun isScrollPerfLoggingEnabled(): Boolean {
1112
+ return fpsListener != null && !scrollPerfTag.isNullOrEmpty()
1113
+ }
1114
+
1115
+ override fun draw(canvas: Canvas) {
1116
+ if (endFillColor != Color.TRANSPARENT) {
1117
+ val content = getContentView()
1118
+ val bg = endBackground
1119
+ if (bg != null && content != null && content.right < width) {
1120
+ bg.setBounds(content.right, 0, width, height)
1121
+ bg.draw(canvas)
1122
+ }
1123
+ }
1124
+ super.draw(canvas)
1125
+ }
1126
+
1127
+ /**
1128
+ * This handles any sort of scrolling that may occur after a touch is finished. This may be
1129
+ * momentum scrolling (fling) or because you have pagingEnabled on the scroll view. Because we
1130
+ * don't get any events from Android about this lifecycle, we do all our detection by creating a
1131
+ * runnable that checks if we scrolled in the last frame and if so assumes we are still scrolling.
1132
+ */
1133
+ private fun handlePostTouchScrolling(velocityX: Int, velocityY: Int) {
1134
+ if (DEBUG_MODE) {
1135
+ FLog.i(
1136
+ TAG,
1137
+ "handlePostTouchScrolling[%d] velocityX %d velocityY %d",
1138
+ id,
1139
+ velocityX,
1140
+ velocityY,
1141
+ )
1142
+ }
1143
+
1144
+ // Check if we are already handling this which may occur if this is called by both the touch up
1145
+ // and a fling call
1146
+ if (postTouchRunnable != null) return
1147
+
1148
+ if (sendMomentumEvents) {
1149
+ ReactScrollViewHelper.emitScrollMomentumBeginEvent(this, velocityX, velocityY)
1150
+ }
1151
+
1152
+ activelyScrolling = false
1153
+ postTouchRunnable =
1154
+ object : Runnable {
1155
+ private var snappingToPage = false
1156
+ private var stableFrames = 0
1157
+
1158
+ override fun run() {
1159
+ if (activelyScrolling) {
1160
+ // We are still scrolling.
1161
+ activelyScrolling = false
1162
+ stableFrames = 0
1163
+ this@ReactHorizontalScrollView.postOnAnimationDelayed(
1164
+ this,
1165
+ ReactScrollViewHelper.MOMENTUM_DELAY,
1166
+ )
1167
+ } else {
1168
+ // There has not been a scroll update since the last time this Runnable executed.
1169
+ ReactScrollViewHelper.updateFabricScrollState(this@ReactHorizontalScrollView)
1170
+
1171
+ // We keep checking for updates until the ScrollView has "stabilized" and hasn't
1172
+ // scrolled for N consecutive frames. This number is arbitrary: big enough to catch
1173
+ // a number of race conditions, but small enough to not cause perf regressions, etc.
1174
+ // In anecdotal testing, it seemed like a decent number.
1175
+ // Without this check, sometimes this Runnable stops executing too soon - it will
1176
+ // fire before the first scroll event of an animated scroll/fling, and stop
1177
+ // immediately.
1178
+ stableFrames++
1179
+
1180
+ if (stableFrames >= 3) {
1181
+ postTouchRunnable = null
1182
+ if (sendMomentumEvents) {
1183
+ ReactScrollViewHelper.emitScrollMomentumEndEvent(this@ReactHorizontalScrollView)
1184
+ }
1185
+ // Kotlin name is notifyUserDrivenScrollEnded; the _internal suffix is
1186
+ // only a @JvmName alias for Java callers.
1187
+ ReactScrollViewHelper.notifyUserDrivenScrollEnded(this@ReactHorizontalScrollView)
1188
+ disableFpsListener()
1189
+ } else {
1190
+ if (pagingEnabled && !snappingToPage) {
1191
+ // If we have pagingEnabled and we have not snapped to the page
1192
+ // we need to cause that scroll by asking for it
1193
+ snappingToPage = true
1194
+ flingAndSnap(0)
1195
+ }
1196
+ // The scrollview has not "stabilized" so we just post to check again a frame later
1197
+ this@ReactHorizontalScrollView.postOnAnimationDelayed(
1198
+ this,
1199
+ ReactScrollViewHelper.MOMENTUM_DELAY,
1200
+ )
1201
+ }
1202
+ }
1203
+ }
1204
+ }
1205
+ postOnAnimationDelayed(postTouchRunnable, ReactScrollViewHelper.MOMENTUM_DELAY)
1206
+ }
1207
+
1208
+ private fun cancelPostTouchScrolling() {
1209
+ if (postTouchRunnable != null) {
1210
+ removeCallbacks(postTouchRunnable)
1211
+ postTouchRunnable = null
1212
+ getFlingAnimator().cancel()
1213
+ }
1214
+ }
1215
+
1216
+ private fun predictFinalScrollPosition(velocityX: Int): Int {
1217
+ // predict where a fling would end up so we can scroll to the nearest snap offset
1218
+ val maximumOffset = max(0, computeHorizontalScrollRange() - width)
1219
+ // TODO(T106335409): Existing prediction still uses overscroller. Consider change this to use
1220
+ // fling animator instead.
1221
+ return if (getFlingAnimator() === defaultFlingAnimator) {
1222
+ ReactScrollViewHelper.predictFinalScrollPosition(this, velocityX, 0, maximumOffset, 0).x
1223
+ } else {
1224
+ ReactScrollViewHelper.getNextFlingStartValue(
1225
+ this,
1226
+ scrollX,
1227
+ reactScrollViewScrollState.finalAnimatedPositionScroll.x,
1228
+ velocityX,
1229
+ ) + getFlingExtrapolatedDistance(velocityX)
1230
+ }
1231
+ }
1232
+
1233
+ /**
1234
+ * This will smooth scroll us to the nearest snap offset point. It currently just looks at where
1235
+ * the content is and slides to the nearest point. It is intended to be run after we are done
1236
+ * scrolling, and handling any momentum scrolling.
1237
+ */
1238
+ private fun smoothScrollAndSnap(velocity: Int) {
1239
+ if (DEBUG_MODE) {
1240
+ FLog.i(TAG, "smoothScrollAndSnap[%d] velocity %d", id, velocity)
1241
+ }
1242
+
1243
+ val interval = getSnapInterval().toDouble()
1244
+ val currentOffset =
1245
+ ReactScrollViewHelper.getNextFlingStartValue(
1246
+ this,
1247
+ scrollX,
1248
+ reactScrollViewScrollState.finalAnimatedPositionScroll.x,
1249
+ velocity,
1250
+ )
1251
+ .toDouble()
1252
+ val targetOffset = predictFinalScrollPosition(velocity).toDouble()
1253
+
1254
+ var previousPage = floor(currentOffset / interval).toInt()
1255
+ var nextPage = ceil(currentOffset / interval).toInt()
1256
+ var currentPage = round(currentOffset / interval).toInt()
1257
+ val targetPage = round(targetOffset / interval).toInt()
1258
+
1259
+ if (velocity > 0 && nextPage == previousPage) {
1260
+ nextPage++
1261
+ } else if (velocity < 0 && previousPage == nextPage) {
1262
+ previousPage--
1263
+ }
1264
+
1265
+ if (velocity > 0 && currentPage < nextPage && targetPage > previousPage) {
1266
+ currentPage = nextPage
1267
+ } else if (velocity < 0 && currentPage > previousPage && targetPage < nextPage) {
1268
+ currentPage = previousPage
1269
+ }
1270
+
1271
+ val finalTargetOffset = currentPage * interval
1272
+ if (finalTargetOffset != currentOffset) {
1273
+ activelyScrolling = true
1274
+ reactSmoothScrollTo(finalTargetOffset.toInt(), scrollY)
1275
+ }
1276
+ }
1277
+
1278
+ private fun flingAndSnap(velocityX: Int) {
1279
+ if (DEBUG_MODE) {
1280
+ FLog.i(TAG, "smoothScrollAndSnap[%d] velocityX %d", id, velocityX)
1281
+ }
1282
+
1283
+ if (isEmpty()) return
1284
+
1285
+ // pagingEnabled only allows snapping one interval at a time
1286
+ if (snapInterval == 0 &&
1287
+ snapOffsets == null &&
1288
+ (snapToAlignment == SNAP_ALIGNMENT_DISABLED || snapToAlignment == SNAP_ALIGNMENT_ITEM)) {
1289
+ smoothScrollAndSnap(velocityX)
1290
+ return
1291
+ }
1292
+
1293
+ @Suppress("NAME_SHADOWING") var velocityX = velocityX
1294
+ val hasCustomizedFlingAnimator = getFlingAnimator() !== defaultFlingAnimator
1295
+ val maximumOffset = max(0, computeHorizontalScrollRange() - width)
1296
+ var targetOffset = predictFinalScrollPosition(velocityX)
1297
+ if (disableIntervalMomentum) {
1298
+ targetOffset = scrollX
1299
+ }
1300
+
1301
+ var smallerOffset = 0
1302
+ var largerOffset = maximumOffset
1303
+ var firstOffset = 0
1304
+ var lastOffset = maximumOffset
1305
+ val viewportWidth = width - paddingStart - paddingEnd
1306
+
1307
+ // offsets are from the right edge in RTL layouts
1308
+ if (layoutDirection == LAYOUT_DIRECTION_RTL) {
1309
+ targetOffset = maximumOffset - targetOffset
1310
+ velocityX = -velocityX
1311
+ }
1312
+
1313
+ // get the nearest snap points to the target offset
1314
+ val offsets = snapOffsets
1315
+ if (!offsets.isNullOrEmpty()) {
1316
+ firstOffset = offsets[0]
1317
+ lastOffset = offsets[offsets.size - 1]
1318
+
1319
+ for (i in offsets.indices) {
1320
+ val offset = offsets[i]
1321
+ if (offset <= targetOffset) {
1322
+ if (targetOffset - offset < targetOffset - smallerOffset) {
1323
+ smallerOffset = offset
1324
+ }
1325
+ }
1326
+ if (offset >= targetOffset) {
1327
+ if (offset - targetOffset < largerOffset - targetOffset) {
1328
+ largerOffset = offset
1329
+ }
1330
+ }
1331
+ }
1332
+ } else if (snapToAlignment != SNAP_ALIGNMENT_DISABLED && snapToAlignment != SNAP_ALIGNMENT_ITEM) {
1333
+ if (snapInterval > 0) {
1334
+ val ratio = targetOffset.toDouble() / snapInterval
1335
+ smallerOffset =
1336
+ max(
1337
+ getItemStartOffset(
1338
+ snapToAlignment,
1339
+ (floor(ratio) * snapInterval).toInt(),
1340
+ snapInterval,
1341
+ viewportWidth,
1342
+ ),
1343
+ 0,
1344
+ )
1345
+ largerOffset =
1346
+ kotlin.math.min(
1347
+ getItemStartOffset(
1348
+ snapToAlignment,
1349
+ (ceil(ratio) * snapInterval).toInt(),
1350
+ snapInterval,
1351
+ viewportWidth,
1352
+ ),
1353
+ maximumOffset,
1354
+ )
1355
+ } else {
1356
+ val cv = getContentView() as? ViewGroup ?: return
1357
+ var smallerChildOffset = largerOffset
1358
+ var largerChildOffset = smallerOffset
1359
+ for (i in 0 until cv.childCount) {
1360
+ val item = cv.getChildAt(i)
1361
+ val itemStartOffset =
1362
+ getItemStartOffset(snapToAlignment, item.left, item.width, viewportWidth)
1363
+ if (itemStartOffset <= targetOffset) {
1364
+ if (targetOffset - itemStartOffset < targetOffset - smallerOffset) {
1365
+ smallerOffset = itemStartOffset
1366
+ }
1367
+ }
1368
+ if (itemStartOffset >= targetOffset) {
1369
+ if (itemStartOffset - targetOffset < largerOffset - targetOffset) {
1370
+ largerOffset = itemStartOffset
1371
+ }
1372
+ }
1373
+ smallerChildOffset = kotlin.math.min(smallerChildOffset, itemStartOffset)
1374
+ largerChildOffset = max(largerChildOffset, itemStartOffset)
1375
+ }
1376
+
1377
+ // For Recycler ViewGroup, the maximumOffset can be much larger than the total heights of
1378
+ // items in the layout. In this case snapping is not possible beyond the currently rendered
1379
+ // children.
1380
+ smallerOffset = max(smallerOffset, smallerChildOffset)
1381
+ largerOffset = kotlin.math.min(largerOffset, largerChildOffset)
1382
+ }
1383
+ } else {
1384
+ val interval = getSnapInterval().toDouble()
1385
+ val ratio = targetOffset.toDouble() / interval
1386
+ smallerOffset = (floor(ratio) * interval).toInt()
1387
+ largerOffset = kotlin.math.min((ceil(ratio) * interval).toInt(), maximumOffset)
1388
+ }
1389
+
1390
+ // Calculate the nearest offset
1391
+ val nearestOffset =
1392
+ if (abs(targetOffset - smallerOffset) < abs(largerOffset - targetOffset)) smallerOffset
1393
+ else largerOffset
1394
+
1395
+ // if scrolling after the last snap offset and snapping to the
1396
+ // end of the list is disabled, then we allow free scrolling
1397
+ var currentOffset = scrollX
1398
+ if (layoutDirection == LAYOUT_DIRECTION_RTL) {
1399
+ currentOffset = maximumOffset - currentOffset
1400
+ }
1401
+ if (!snapToEnd && targetOffset >= lastOffset) {
1402
+ if (currentOffset >= lastOffset) {
1403
+ // free scrolling
1404
+ } else {
1405
+ // snap to end
1406
+ targetOffset = lastOffset
1407
+ }
1408
+ } else if (!snapToStart && targetOffset <= firstOffset) {
1409
+ if (currentOffset <= firstOffset) {
1410
+ // free scrolling
1411
+ } else {
1412
+ // snap to beginning
1413
+ targetOffset = firstOffset
1414
+ }
1415
+ } else if (velocityX > 0) {
1416
+ if (!hasCustomizedFlingAnimator) {
1417
+ // The default animator requires boost on initial velocity as when snapping velocity can
1418
+ // feel sluggish for slow swipes
1419
+ velocityX += ((largerOffset - targetOffset) * 10.0).toInt()
1420
+ }
1421
+ targetOffset = largerOffset
1422
+ } else if (velocityX < 0) {
1423
+ if (!hasCustomizedFlingAnimator) {
1424
+ // The default animator requires boost on initial velocity as when snapping velocity can
1425
+ // feel sluggish for slow swipes
1426
+ velocityX -= ((targetOffset - smallerOffset) * 10.0).toInt()
1427
+ }
1428
+ targetOffset = smallerOffset
1429
+ } else {
1430
+ targetOffset = nearestOffset
1431
+ }
1432
+
1433
+ // Make sure the new offset isn't out of bounds
1434
+ targetOffset = kotlin.math.min(max(0, targetOffset), maximumOffset)
1435
+
1436
+ if (layoutDirection == LAYOUT_DIRECTION_RTL) {
1437
+ targetOffset = maximumOffset - targetOffset
1438
+ velocityX = -velocityX
1439
+ }
1440
+
1441
+ if (hasCustomizedFlingAnimator || scroller == null) {
1442
+ reactSmoothScrollTo(targetOffset, scrollY)
1443
+ } else {
1444
+ // smoothScrollTo will always scroll over 250ms which is often *waaay*
1445
+ // too short and will cause the scrolling to feel almost instant
1446
+ // try to manually interact with OverScroller instead
1447
+ // if velocity is 0 however, fling() won't work, so we want to use smoothScrollTo
1448
+ activelyScrolling = true
1449
+
1450
+ scroller.fling(
1451
+ scrollX, // startX
1452
+ scrollY, // startY
1453
+ // velocity = 0 doesn't work with fling() so we pretend there's a reasonable
1454
+ // initial velocity going on when a touch is released without any movement
1455
+ if (velocityX != 0) velocityX else targetOffset - scrollX, // velocityX
1456
+ 0, // velocityY
1457
+ // setting both minX and maxX to the same value will guarantee that we scroll to it
1458
+ // but using the standard fling-style easing rather than smoothScrollTo's 250ms animation
1459
+ targetOffset, // minX
1460
+ targetOffset, // maxX
1461
+ 0, // minY
1462
+ 0, // maxY
1463
+ // we only want to allow overscrolling if the final offset is at the very edge of the view
1464
+ if (targetOffset == 0 || targetOffset == maximumOffset) viewportWidth / 2 else 0, // overX
1465
+ 0, // overY
1466
+ )
1467
+
1468
+ postInvalidateOnAnimation()
1469
+ }
1470
+ }
1471
+
1472
+ private fun getItemStartOffset(
1473
+ snapToAlignment: Int,
1474
+ itemStartPosition: Int,
1475
+ itemWidth: Int,
1476
+ viewPortWidth: Int,
1477
+ ): Int =
1478
+ when (snapToAlignment) {
1479
+ SNAP_ALIGNMENT_CENTER -> itemStartPosition - (viewPortWidth - itemWidth) / 2
1480
+ SNAP_ALIGNMENT_START -> itemStartPosition
1481
+ SNAP_ALIGNMENT_END -> itemStartPosition - (viewPortWidth - itemWidth)
1482
+ else ->
1483
+ throw IllegalStateException("Invalid SnapToAlignment value: ${this.snapToAlignment}")
1484
+ }
1485
+
1486
+ private fun smoothScrollToNextPage(direction: Int) {
1487
+ if (DEBUG_MODE) {
1488
+ FLog.i(TAG, "smoothScrollToNextPage[%d] direction %d", id, direction)
1489
+ }
1490
+
1491
+ val w = width
1492
+ val currentX = scrollX
1493
+
1494
+ var page = currentX / w
1495
+ if (currentX % w != 0) {
1496
+ page++
1497
+ }
1498
+
1499
+ if (direction == View.FOCUS_LEFT) {
1500
+ page -= 1
1501
+ } else {
1502
+ page += 1
1503
+ }
1504
+
1505
+ if (page < 0) {
1506
+ page = 0
1507
+ }
1508
+
1509
+ reactSmoothScrollTo(page * w, scrollY)
1510
+ handlePostTouchScrolling(0, 0)
1511
+ }
1512
+
1513
+ override fun setBackgroundColor(color: Int) {
1514
+ BackgroundStyleApplicator.setBackgroundColor(this, color)
1515
+ }
1516
+
1517
+ public open fun setBorderWidth(position: Int, width: Float) {
1518
+ BackgroundStyleApplicator.setBorderWidth(
1519
+ this,
1520
+ LogicalEdge.entries[position],
1521
+ PixelUtil.toDIPFromPixel(width),
1522
+ )
1523
+ }
1524
+
1525
+ public open fun setBorderColor(position: Int, color: Int?) {
1526
+ BackgroundStyleApplicator.setBorderColor(this, LogicalEdge.entries[position], color)
1527
+ }
1528
+
1529
+ public open fun setBorderRadius(borderRadius: Float) {
1530
+ setBorderRadius(borderRadius, BorderRadiusProp.BORDER_RADIUS.ordinal)
1531
+ }
1532
+
1533
+ public open fun setBorderRadius(borderRadius: Float, position: Int) {
1534
+ val radius =
1535
+ if (borderRadius.isNaN()) null
1536
+ else LengthPercentage(PixelUtil.toDIPFromPixel(borderRadius), LengthPercentageType.POINT)
1537
+ BackgroundStyleApplicator.setBorderRadius(this, BorderRadiusProp.entries[position], radius)
1538
+ }
1539
+
1540
+ public open fun setBorderStyle(style: String?) {
1541
+ BackgroundStyleApplicator.setBorderStyle(
1542
+ this,
1543
+ if (style == null) null else BorderStyle.fromString(style),
1544
+ )
1545
+ }
1546
+
1547
+ /**
1548
+ * Calls `smoothScrollTo` and updates state.
1549
+ *
1550
+ * `smoothScrollTo` changes `contentOffset` and we need to keep `contentOffset` in sync between
1551
+ * scroll view and state. Calling raw `smoothScrollTo` doesn't update state.
1552
+ */
1553
+ override fun reactSmoothScrollTo(x: Int, y: Int) {
1554
+ if (scrollAnimationEnabled || !UiModeUtils.isTVDevice(context)) {
1555
+ ReactScrollViewHelper.smoothScrollTo(this, x, y)
1556
+ } else {
1557
+ scrollTo(x, y)
1558
+ }
1559
+ setPendingContentOffsets(x, y)
1560
+ }
1561
+
1562
+ /**
1563
+ * Calls `super.scrollTo` and updates state.
1564
+ *
1565
+ * `super.scrollTo` changes `contentOffset` and we need to keep `contentOffset` in sync between
1566
+ * scroll view and state.
1567
+ *
1568
+ * Note that while we can override scrollTo, we *cannot* override `smoothScrollTo` because it is
1569
+ * final. See `reactSmoothScrollTo`.
1570
+ */
1571
+ override fun scrollTo(x: Int, y: Int) {
1572
+ if (DEBUG_MODE) {
1573
+ FLog.i(TAG, "scrollTo[%d] x %d y %d", id, x, y)
1574
+ }
1575
+
1576
+ super.scrollTo(x, y)
1577
+ ReactScrollViewHelper.updateFabricScrollState(this)
1578
+ setPendingContentOffsets(x, y)
1579
+ }
1580
+
1581
+ /** Scrolls to a new position preserving any momentum scrolling animation. */
1582
+ override fun scrollToPreservingMomentum(x: Int, y: Int) {
1583
+ scrollTo(x, y)
1584
+ recreateFlingAnimation(x, Int.MAX_VALUE)
1585
+ }
1586
+
1587
+ protected open fun restoreScrollTo(x: Int, y: Int) {
1588
+ scrollTo(x, y)
1589
+ }
1590
+
1591
+ private fun isContentReady(): Boolean {
1592
+ val child = getContentView()
1593
+ return child != null && child.width != 0 && child.height != 0
1594
+ }
1595
+
1596
+ private fun setPendingContentOffsets(x: Int, y: Int) {
1597
+ if (DEBUG_MODE) {
1598
+ FLog.i(TAG, "setPendingContentOffsets[%d] x %d y %d", id, x, y)
1599
+ }
1600
+
1601
+ if (isContentReady()) {
1602
+ pendingContentOffsetX = UNSET_CONTENT_OFFSET
1603
+ pendingContentOffsetY = UNSET_CONTENT_OFFSET
1604
+ } else {
1605
+ pendingContentOffsetX = x
1606
+ pendingContentOffsetY = y
1607
+ }
1608
+ }
1609
+
1610
+ override fun onLayoutChange(
1611
+ v: View,
1612
+ left: Int,
1613
+ top: Int,
1614
+ right: Int,
1615
+ bottom: Int,
1616
+ oldLeft: Int,
1617
+ oldTop: Int,
1618
+ oldRight: Int,
1619
+ oldBottom: Int,
1620
+ ) {
1621
+ if (contentView == null) return
1622
+
1623
+ // Adjust the scroll position to follow new content. In RTL, this means we keep a constant
1624
+ // offset from the right edge instead of the left edge, so content added to the end of the flow
1625
+ // does not shift layout. If `maintainVisibleContentPosition` is enabled, we try to adjust
1626
+ // position so that the viewport keeps the same insets to previously visible views. TODO: MVCP
1627
+ // does not work in RTL.
1628
+ if (v.layoutDirection == LAYOUT_DIRECTION_RTL) {
1629
+ adjustPositionForContentChangeRTL(left, right, oldLeft, oldRight)
1630
+ }
1631
+ ReactScrollViewHelper.emitLayoutChangeEvent(this)
1632
+ }
1633
+
1634
+ /**
1635
+ * If we are in the middle of a fling animation from the user removing their finger (OverScroller
1636
+ * is in `FLING_MODE`), recreate the existing fling animation since it was calculated against
1637
+ * outdated scroll offsets.
1638
+ */
1639
+ private fun recreateFlingAnimation(scrollX: Int, maxX: Int) {
1640
+ // If we have any pending custom flings (e.g. from animated `scrollTo`, or flinging to a snap
1641
+ // point), cancel them.
1642
+ // TODO: Can we be more graceful (like OverScroller flings)?
1643
+ if (getFlingAnimator().isRunning) {
1644
+ getFlingAnimator().cancel()
1645
+ }
1646
+
1647
+ if (scroller != null && !scroller.isFinished) {
1648
+ // Calculate the velocity and position of the fling animation at the time of this layout
1649
+ // event, which may be later than the last ScrollView tick. These values are not committed to
1650
+ // the underlying ScrollView, which will recalculate positions on its next tick.
1651
+ val scrollerXBeforeTick = scroller.currX
1652
+ val hasMoreTicks = scroller.computeScrollOffset()
1653
+
1654
+ // Stop the existing animation at the current state of the scroller. We will then recreate
1655
+ // it starting at the adjusted x offset.
1656
+ scroller.forceFinished(true)
1657
+
1658
+ if (hasMoreTicks) {
1659
+ // OverScroller.getCurrVelocity() returns an absolute value of the velocity a current fling
1660
+ // animation (only FLING_MODE animations). We derive direction along the X axis from the
1661
+ // start and end of the animation, assuming HorizontalScrollView never fires vertical fling
1662
+ // animations.
1663
+ // TODO: This does not fully handle overscroll.
1664
+ val direction = (scroller.finalX - scroller.startX).toFloat().sign
1665
+ val flingVelocityX = scroller.currVelocity * direction
1666
+
1667
+ scroller.fling(scrollX, scrollY, flingVelocityX.toInt(), 0, 0, maxX, 0, 0)
1668
+ } else {
1669
+ scrollTo(scrollX + (scroller.currX - scrollerXBeforeTick), scrollY)
1670
+ }
1671
+ }
1672
+ }
1673
+
1674
+ private fun adjustPositionForContentChangeRTL(
1675
+ left: Int,
1676
+ right: Int,
1677
+ oldLeft: Int,
1678
+ oldRight: Int,
1679
+ ) {
1680
+ // If we have any pending custom flings (e.g. from animated `scrollTo`, or flinging to a snap
1681
+ // point), finish them, committing the final `scrollX`.
1682
+ // TODO: Can we be more graceful (like OverScroller flings)?
1683
+ if (getFlingAnimator().isRunning) {
1684
+ getFlingAnimator().end()
1685
+ }
1686
+
1687
+ val distanceToRightEdge = oldRight - scrollX
1688
+ val newWidth = right - left
1689
+ val newScrollX = newWidth - distanceToRightEdge
1690
+ scrollTo(newScrollX, scrollY)
1691
+
1692
+ recreateFlingAnimation(newScrollX, newWidth - width)
1693
+ }
1694
+
1695
+ override fun startFlingAnimator(start: Int, end: Int) {
1696
+ // Always cancel existing animator before starting the new one. `smoothScrollTo` contains some
1697
+ // logic that, if called multiple times in a short amount of time, will treat all calls as part
1698
+ // of the same animation and will not lengthen the duration of the animation. This means that,
1699
+ // for example, if the user is scrolling rapidly, multiple pages could be considered part of one
1700
+ // animation, causing some page animations to be animated very rapidly - looking like they're
1701
+ // not animated at all.
1702
+ defaultFlingAnimator.cancel()
1703
+
1704
+ // Update the fling animator with new values
1705
+ val duration = ReactScrollViewHelper.getDefaultScrollAnimationDuration(context)
1706
+ defaultFlingAnimator.setDuration(duration.toLong()).setIntValues(start, end)
1707
+
1708
+ // Start the animator
1709
+ defaultFlingAnimator.start()
1710
+
1711
+ if (sendMomentumEvents) {
1712
+ val xVelocity = if (duration > 0) (end - start) / duration else 0
1713
+ ReactScrollViewHelper.emitScrollMomentumBeginEvent(this, xVelocity, 0)
1714
+ ReactScrollViewHelper.dispatchMomentumEndOnAnimationEnd(this)
1715
+ }
1716
+ }
1717
+
1718
+ override fun getFlingAnimator(): ValueAnimator = defaultFlingAnimator
1719
+
1720
+ override fun getFlingExtrapolatedDistance(velocity: Int): Int =
1721
+ ReactScrollViewHelper.predictFinalScrollPosition(
1722
+ this,
1723
+ velocity,
1724
+ 0,
1725
+ max(0, computeHorizontalScrollRange() - width),
1726
+ 0,
1727
+ )
1728
+ .x
1729
+ }