@office-iss/react-native-win32 0.70.3 → 0.71.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (559) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc.js +2 -0
  3. package/.flowconfig +3 -6
  4. package/CHANGELOG.json +268 -51
  5. package/CHANGELOG.md +101 -29
  6. package/IntegrationTests/AccessibilityManagerTest.js +1 -1
  7. package/IntegrationTests/AppEventsTest.js +0 -1
  8. package/IntegrationTests/BUCK +0 -1
  9. package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +1 -1
  10. package/IntegrationTests/ImageSnapshotTest.js +1 -1
  11. package/IntegrationTests/IntegrationTestsApp.js +2 -3
  12. package/IntegrationTests/SimpleSnapshotTest.js +1 -1
  13. package/IntegrationTests/SyncMethodTest.js +1 -1
  14. package/IntegrationTests/TimersTest.js +4 -4
  15. package/IntegrationTests/WebSocketTest.js +3 -3
  16. package/Libraries/ActionSheetIOS/ActionSheetIOS.d.ts +80 -0
  17. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +4 -3
  18. package/Libraries/ActionSheetIOS/NativeActionSheetManager.js +1 -0
  19. package/Libraries/Alert/Alert.d.ts +90 -0
  20. package/Libraries/Alert/Alert.js +7 -1
  21. package/Libraries/Alert/Alert.win32.js +1 -0
  22. package/Libraries/Alert/NativeAlertManager.js +2 -0
  23. package/Libraries/Alert/RCTAlertManager.ios.js +2 -1
  24. package/Libraries/Animated/Animated.d.ts +587 -0
  25. package/Libraries/Animated/Animated.js +13 -11
  26. package/Libraries/Animated/AnimatedEvent.js +12 -17
  27. package/Libraries/Animated/AnimatedImplementation.js +21 -23
  28. package/Libraries/Animated/AnimatedMock.js +11 -13
  29. package/Libraries/Animated/AnimatedWeb.js +2 -2
  30. package/Libraries/Animated/Easing.d.ts +37 -0
  31. package/Libraries/Animated/Easing.js +2 -2
  32. package/Libraries/Animated/NativeAnimatedHelper.js +32 -22
  33. package/Libraries/Animated/NativeAnimatedModule.js +1 -0
  34. package/Libraries/Animated/NativeAnimatedTurboModule.js +1 -0
  35. package/Libraries/Animated/SpringConfig.js +2 -7
  36. package/Libraries/Animated/animations/Animation.js +3 -4
  37. package/Libraries/Animated/animations/DecayAnimation.js +5 -8
  38. package/Libraries/Animated/animations/SpringAnimation.js +9 -14
  39. package/Libraries/Animated/animations/TimingAnimation.js +9 -13
  40. package/Libraries/Animated/bezier.js +2 -2
  41. package/Libraries/Animated/components/AnimatedFlatList.js +5 -6
  42. package/Libraries/Animated/components/AnimatedImage.js +5 -6
  43. package/Libraries/Animated/components/AnimatedScrollView.js +110 -14
  44. package/Libraries/Animated/components/AnimatedSectionList.js +4 -5
  45. package/Libraries/Animated/components/AnimatedText.js +5 -6
  46. package/Libraries/Animated/components/AnimatedView.js +5 -6
  47. package/Libraries/Animated/createAnimatedComponent.js +13 -20
  48. package/Libraries/Animated/createAnimatedComponent_EXPERIMENTAL.js +2 -2
  49. package/Libraries/Animated/nodes/AnimatedAddition.js +6 -8
  50. package/Libraries/Animated/nodes/AnimatedColor.js +7 -7
  51. package/Libraries/Animated/nodes/AnimatedDiffClamp.js +6 -8
  52. package/Libraries/Animated/nodes/AnimatedDivision.js +7 -9
  53. package/Libraries/Animated/nodes/AnimatedInterpolation.js +7 -10
  54. package/Libraries/Animated/nodes/AnimatedModulo.js +6 -8
  55. package/Libraries/Animated/nodes/AnimatedMultiplication.js +7 -9
  56. package/Libraries/Animated/nodes/AnimatedNode.js +10 -8
  57. package/Libraries/Animated/nodes/AnimatedProps.js +12 -30
  58. package/Libraries/Animated/nodes/AnimatedStyle.js +12 -22
  59. package/Libraries/Animated/nodes/AnimatedSubtraction.js +7 -9
  60. package/Libraries/Animated/nodes/AnimatedTracking.js +8 -12
  61. package/Libraries/Animated/nodes/AnimatedTransform.js +38 -31
  62. package/Libraries/Animated/nodes/AnimatedValue.js +9 -10
  63. package/Libraries/Animated/nodes/AnimatedValueXY.js +4 -7
  64. package/Libraries/Animated/nodes/AnimatedWithChildren.js +4 -5
  65. package/Libraries/Animated/useAnimatedProps.js +8 -16
  66. package/Libraries/Animated/useAnimatedValue.d.ts +15 -0
  67. package/Libraries/Animated/useAnimatedValue.js +25 -0
  68. package/Libraries/AppState/AppState.d.ts +58 -0
  69. package/Libraries/AppState/AppState.js +3 -7
  70. package/Libraries/AppState/NativeAppState.js +1 -0
  71. package/Libraries/BatchedBridge/MessageQueue.js +9 -5
  72. package/Libraries/BatchedBridge/NativeModules.d.ts +25 -0
  73. package/Libraries/BatchedBridge/NativeModules.js +1 -0
  74. package/Libraries/Blob/BlobManager.js +5 -3
  75. package/Libraries/Blob/File.js +2 -3
  76. package/Libraries/Blob/FileReader.js +6 -5
  77. package/Libraries/Blob/NativeBlobModule.js +1 -0
  78. package/Libraries/Blob/NativeFileReaderModule.js +1 -0
  79. package/Libraries/Blob/URL.js +11 -9
  80. package/Libraries/BugReporting/NativeBugReporting.js +1 -0
  81. package/Libraries/BugReporting/getReactData.js +1 -1
  82. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +128 -0
  83. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.flow.js +208 -0
  84. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +40 -8
  85. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +40 -8
  86. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +1 -0
  87. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityManager.js +5 -0
  88. package/Libraries/Components/ActivityIndicator/ActivityIndicator.d.ts +86 -0
  89. package/Libraries/Components/ActivityIndicator/ActivityIndicator.flow.js +58 -0
  90. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +7 -8
  91. package/Libraries/Components/ActivityIndicator/ActivityIndicatorViewNativeComponent.js +2 -3
  92. package/Libraries/Components/Button.d.ts +42 -0
  93. package/Libraries/Components/Button.flow.js +265 -0
  94. package/Libraries/Components/Button.js +62 -18
  95. package/Libraries/Components/Clipboard/Clipboard.d.ts +28 -0
  96. package/Libraries/Components/Clipboard/NativeClipboard.js +1 -0
  97. package/Libraries/Components/DatePicker/DatePickerIOS.android.js +4 -2
  98. package/Libraries/Components/DatePicker/DatePickerIOS.d.ts +92 -0
  99. package/Libraries/Components/{MaskedView/MaskedViewIOS.android.js → DatePicker/DatePickerIOS.flow.android.js} +3 -2
  100. package/Libraries/Components/DatePicker/DatePickerIOS.flow.ios.js +113 -0
  101. package/Libraries/Components/DatePicker/DatePickerIOS.ios.js +8 -7
  102. package/Libraries/Components/DatePicker/DatePickerIOS.win32.js +4 -2
  103. package/Libraries/Components/DatePicker/RCTDatePickerNativeComponent.js +7 -6
  104. package/Libraries/Components/DatePickerAndroid/NativeDatePickerAndroid.js +1 -0
  105. package/Libraries/Components/DrawerAndroid/AndroidDrawerLayoutNativeComponent.js +9 -8
  106. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +13 -14
  107. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +141 -0
  108. package/Libraries/Components/Keyboard/Keyboard.d.ts +109 -0
  109. package/Libraries/Components/Keyboard/Keyboard.js +35 -8
  110. package/Libraries/Components/Keyboard/KeyboardAvoidingView.d.ts +46 -0
  111. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +35 -15
  112. package/Libraries/Components/Keyboard/NativeKeyboardObserver.js +1 -0
  113. package/Libraries/Components/Pressable/Pressable.d.ts +167 -0
  114. package/Libraries/Components/Pressable/Pressable.js +73 -15
  115. package/Libraries/Components/Pressable/Pressable.win32.js +77 -19
  116. package/Libraries/Components/Pressable/useAndroidRippleForView.js +6 -3
  117. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +3 -3
  118. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.d.ts +83 -0
  119. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroidNativeComponent.js +2 -2
  120. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.android.js +1 -1
  121. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.d.ts +62 -0
  122. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.ios.js +4 -4
  123. package/Libraries/Components/ProgressViewIOS/ProgressViewIOS.win32.js +1 -1
  124. package/Libraries/Components/ProgressViewIOS/RCTProgressViewNativeComponent.js +2 -2
  125. package/Libraries/Components/RefreshControl/AndroidSwipeRefreshLayoutNativeComponent.js +5 -6
  126. package/Libraries/Components/RefreshControl/PullToRefreshViewNativeComponent.js +4 -4
  127. package/Libraries/Components/RefreshControl/RefreshControl.d.ts +87 -0
  128. package/Libraries/Components/RefreshControl/RefreshControl.js +4 -3
  129. package/Libraries/Components/RefreshControl/__mocks__/RefreshControlMock.js +2 -3
  130. package/Libraries/Components/SafeAreaView/RCTSafeAreaViewNativeComponent.js +1 -1
  131. package/Libraries/Components/SafeAreaView/SafeAreaView.d.ts +24 -0
  132. package/Libraries/Components/SafeAreaView/SafeAreaView.flow.js +19 -0
  133. package/Libraries/Components/SafeAreaView/SafeAreaView.js +5 -4
  134. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +5 -4
  135. package/Libraries/Components/ScrollView/AndroidHorizontalScrollContentViewNativeComponent.js +2 -1
  136. package/Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +2 -1
  137. package/Libraries/Components/ScrollView/ScrollContentViewNativeComponent.js +2 -1
  138. package/Libraries/Components/ScrollView/ScrollView.d.ts +911 -0
  139. package/Libraries/Components/ScrollView/ScrollView.js +87 -52
  140. package/Libraries/Components/ScrollView/ScrollViewCommands.js +3 -3
  141. package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +2 -1
  142. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +3 -3
  143. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +243 -269
  144. package/Libraries/Components/Slider/Slider.d.ts +132 -0
  145. package/Libraries/Components/Slider/Slider.js +9 -9
  146. package/Libraries/Components/Slider/SliderNativeComponent.js +4 -5
  147. package/Libraries/Components/Sound/NativeSoundManager.js +1 -0
  148. package/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid.js +1 -0
  149. package/Libraries/Components/StatusBar/NativeStatusBarManagerIOS.js +1 -0
  150. package/Libraries/Components/StatusBar/StatusBar.d.ts +138 -0
  151. package/Libraries/Components/StatusBar/StatusBar.js +7 -7
  152. package/Libraries/Components/Switch/AndroidSwitchNativeComponent.js +10 -10
  153. package/Libraries/Components/Switch/Switch.d.ts +115 -0
  154. package/Libraries/Components/Switch/Switch.js +7 -7
  155. package/Libraries/Components/Switch/SwitchNativeComponent.js +9 -4
  156. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +40 -12
  157. package/Libraries/Components/TextInput/InputAccessoryView.d.ts +34 -0
  158. package/Libraries/Components/TextInput/InputAccessoryView.js +3 -4
  159. package/Libraries/Components/TextInput/RCTInputAccessoryViewNativeComponent.js +1 -1
  160. package/Libraries/Components/TextInput/RCTMultilineTextInputNativeComponent.js +3 -2
  161. package/Libraries/Components/TextInput/RCTSingelineTextInputNativeComponent.js +3 -2
  162. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +3 -1
  163. package/Libraries/Components/TextInput/TextInput.d.ts +840 -0
  164. package/Libraries/Components/TextInput/TextInput.flow.js +1057 -0
  165. package/Libraries/Components/TextInput/TextInput.js +344 -38
  166. package/Libraries/Components/TextInput/TextInput.win32.d.ts +1 -1
  167. package/Libraries/Components/TextInput/TextInput.win32.js +1 -1
  168. package/Libraries/Components/TextInput/TextInput.win32.js.map +1 -1
  169. package/Libraries/Components/TextInput/TextInputNativeCommands.js +2 -2
  170. package/Libraries/Components/TextInput/TextInputState.js +22 -5
  171. package/Libraries/Components/TextInput/TextInputState.win32.js +24 -5
  172. package/Libraries/Components/ToastAndroid/NativeToastAndroid.js +1 -0
  173. package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +47 -0
  174. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  175. package/Libraries/Components/Touchable/Touchable.d.ts +90 -0
  176. package/Libraries/Components/Touchable/Touchable.flow.js +258 -0
  177. package/Libraries/Components/Touchable/Touchable.js +12 -12
  178. package/Libraries/Components/Touchable/Touchable.win32.js +12 -12
  179. package/Libraries/Components/Touchable/TouchableBounce.js +44 -10
  180. package/Libraries/Components/Touchable/TouchableHighlight.d.ts +68 -0
  181. package/Libraries/Components/Touchable/TouchableHighlight.js +32 -9
  182. package/Libraries/Components/Touchable/TouchableNativeFeedback.d.ts +114 -0
  183. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +54 -20
  184. package/Libraries/Components/Touchable/TouchableOpacity.d.ts +109 -0
  185. package/Libraries/Components/Touchable/TouchableOpacity.js +54 -16
  186. package/Libraries/Components/Touchable/TouchableWin32.Props.d.ts +2 -1
  187. package/Libraries/Components/Touchable/TouchableWin32.Props.js.map +1 -1
  188. package/Libraries/Components/Touchable/TouchableWin32.js +0 -1
  189. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  190. package/Libraries/Components/Touchable/TouchableWithoutFeedback.d.ts +143 -0
  191. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +64 -10
  192. package/Libraries/Components/UnimplementedViews/UnimplementedNativeViewNativeComponent.js +1 -1
  193. package/Libraries/Components/UnimplementedViews/UnimplementedView.js +1 -1
  194. package/Libraries/Components/View/ReactNativeStyleAttributes.js +13 -2
  195. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  196. package/Libraries/Components/View/View.d.ts +29 -0
  197. package/Libraries/Components/View/View.js +91 -8
  198. package/Libraries/Components/View/View.win32.js +176 -89
  199. package/Libraries/Components/View/ViewAccessibility.d.ts +360 -0
  200. package/Libraries/Components/View/ViewAccessibility.js +70 -1
  201. package/Libraries/Components/View/ViewNativeComponent.js +3 -3
  202. package/Libraries/Components/View/ViewPropTypes.d.ts +245 -0
  203. package/Libraries/Components/View/ViewPropTypes.js +105 -13
  204. package/Libraries/Components/View/ViewPropTypes.win32.js +105 -13
  205. package/Libraries/Components/View/ViewWin32.Props.d.ts +1 -0
  206. package/Libraries/Components/View/ViewWin32.Props.js.map +1 -1
  207. package/Libraries/Core/Devtools/openFileInEditor.js +3 -0
  208. package/Libraries/Core/Devtools/parseErrorStack.js +1 -1
  209. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -2
  210. package/Libraries/Core/ExceptionsManager.js +8 -0
  211. package/Libraries/Core/ExtendedError.js +11 -8
  212. package/Libraries/Core/InitializeCore.js +2 -1
  213. package/Libraries/Core/NativeExceptionsManager.js +3 -4
  214. package/Libraries/Core/RawEventEmitter.js +2 -1
  215. package/Libraries/Core/ReactFiberErrorDialog.js +2 -2
  216. package/Libraries/Core/ReactNativeVersion.js +2 -2
  217. package/Libraries/Core/ReactNativeVersionCheck.js +1 -0
  218. package/Libraries/Core/ReactNativeVersionCheck.win32.js +1 -0
  219. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +1 -0
  220. package/Libraries/Core/Timers/JSTimers.js +13 -11
  221. package/Libraries/Core/Timers/NativeTiming.js +1 -0
  222. package/Libraries/Core/setUpBatchedBridge.js +1 -5
  223. package/Libraries/Core/setUpDeveloperTools.js +4 -6
  224. package/Libraries/Core/setUpReactDevTools.js +4 -1
  225. package/Libraries/Core/setUpRegeneratorRuntime.js +1 -1
  226. package/Libraries/Core/setUpTimers.js +1 -1
  227. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +70 -0
  228. package/Libraries/EventEmitter/NativeEventEmitter.js +1 -0
  229. package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +30 -0
  230. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  231. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +32 -0
  232. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +1 -0
  233. package/Libraries/Events/EventPolyfill.js +1 -1
  234. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +1 -0
  235. package/Libraries/Image/AssetSourceResolver.js +4 -6
  236. package/Libraries/Image/Image.android.js +63 -45
  237. package/Libraries/Image/Image.d.ts +322 -0
  238. package/Libraries/Image/Image.flow.js +64 -0
  239. package/Libraries/Image/Image.ios.js +55 -28
  240. package/Libraries/Image/Image.win32.js +54 -25
  241. package/Libraries/Image/ImageBackground.js +18 -7
  242. package/Libraries/Image/ImageInjection.js +2 -1
  243. package/Libraries/Image/ImageProps.js +88 -5
  244. package/Libraries/Image/ImageResizeMode.d.ts +49 -0
  245. package/Libraries/Image/ImageSource.d.ts +76 -0
  246. package/Libraries/Image/ImageSourceUtils.js +80 -0
  247. package/Libraries/Image/ImageUtils.js +21 -0
  248. package/Libraries/Image/ImageViewNativeComponent.js +8 -5
  249. package/Libraries/Image/NativeImageEditor.js +1 -0
  250. package/Libraries/Image/NativeImageLoaderAndroid.js +1 -0
  251. package/Libraries/Image/NativeImageLoaderIOS.js +1 -0
  252. package/Libraries/Image/NativeImageLoaderWin32.js +1 -0
  253. package/Libraries/Image/NativeImageStoreAndroid.js +1 -0
  254. package/Libraries/Image/NativeImageStoreIOS.js +1 -0
  255. package/Libraries/Image/TextInlineImageNativeComponent.js +4 -3
  256. package/Libraries/Image/nativeImageSource.js +2 -2
  257. package/Libraries/Image/resolveAssetSource.js +5 -5
  258. package/Libraries/Inspector/BorderBox.js +1 -1
  259. package/Libraries/Inspector/BoxInspector.js +3 -4
  260. package/Libraries/Inspector/DevtoolsOverlay.js +213 -0
  261. package/Libraries/Inspector/ElementBox.js +4 -5
  262. package/Libraries/Inspector/ElementProperties.js +10 -11
  263. package/Libraries/Inspector/Inspector.js +22 -108
  264. package/Libraries/Inspector/Inspector.win32.js +23 -109
  265. package/Libraries/Inspector/InspectorOverlay.js +5 -5
  266. package/Libraries/Inspector/InspectorOverlay.win32.js +5 -5
  267. package/Libraries/Inspector/InspectorPanel.js +12 -10
  268. package/Libraries/Inspector/NetworkOverlay.js +7 -3
  269. package/Libraries/Inspector/PerformanceOverlay.js +3 -3
  270. package/Libraries/Inspector/StyleInspector.js +2 -2
  271. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +71 -0
  272. package/Libraries/Interaction/BridgeSpyStallHandler.js +1 -1
  273. package/Libraries/Interaction/InteractionManager.d.ts +74 -0
  274. package/Libraries/Interaction/InteractionManager.js +8 -8
  275. package/Libraries/Interaction/NativeFrameRateLogger.js +1 -0
  276. package/Libraries/Interaction/PanResponder.d.ts +202 -0
  277. package/Libraries/Interaction/PanResponder.flow.js +257 -0
  278. package/Libraries/Interaction/PanResponder.js +4 -3
  279. package/Libraries/JSInspector/JSInspector.js +0 -3
  280. package/Libraries/JSInspector/NetworkAgent.js +3 -3
  281. package/Libraries/LayoutAnimation/LayoutAnimation.d.ts +84 -0
  282. package/Libraries/LayoutAnimation/LayoutAnimation.js +4 -3
  283. package/Libraries/Linking/Linking.d.ts +61 -0
  284. package/Libraries/Linking/Linking.js +3 -2
  285. package/Libraries/Linking/NativeIntentAndroid.js +1 -0
  286. package/Libraries/Linking/NativeLinkingManager.js +1 -0
  287. package/Libraries/Lists/CellRenderMask.js +13 -3
  288. package/Libraries/Lists/ChildListCollection.js +72 -0
  289. package/Libraries/Lists/FillRateHelper.js +28 -17
  290. package/Libraries/Lists/FlatList.d.ts +292 -0
  291. package/Libraries/Lists/FlatList.js +70 -70
  292. package/Libraries/Lists/SectionList.d.ts +300 -0
  293. package/Libraries/Lists/SectionList.js +5 -5
  294. package/Libraries/Lists/SectionListModern.js +6 -6
  295. package/Libraries/Lists/StateSafePureComponent.js +85 -0
  296. package/Libraries/Lists/ViewabilityHelper.js +33 -12
  297. package/Libraries/Lists/VirtualizeUtils.js +17 -13
  298. package/Libraries/Lists/VirtualizedList.d.ts +317 -0
  299. package/Libraries/Lists/VirtualizedList.js +548 -890
  300. package/Libraries/Lists/VirtualizedListCellRenderer.js +259 -0
  301. package/Libraries/Lists/VirtualizedListContext.js +7 -48
  302. package/Libraries/Lists/VirtualizedListProps.js +279 -0
  303. package/Libraries/Lists/VirtualizedSectionList.js +6 -3
  304. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  305. package/Libraries/LogBox/Data/LogBoxData.js +9 -8
  306. package/Libraries/LogBox/Data/LogBoxLog.js +5 -5
  307. package/Libraries/LogBox/Data/LogBoxSymbolication.js +4 -4
  308. package/Libraries/LogBox/Data/parseLogBoxLog.js +5 -3
  309. package/Libraries/LogBox/LogBox.d.ts +28 -0
  310. package/Libraries/LogBox/LogBox.js +11 -11
  311. package/Libraries/LogBox/LogBoxInspectorContainer.js +5 -3
  312. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  313. package/Libraries/LogBox/UI/AnsiHighlight.js +5 -3
  314. package/Libraries/LogBox/UI/LogBoxButton.js +6 -5
  315. package/Libraries/LogBox/UI/LogBoxInspector.js +6 -6
  316. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +9 -8
  317. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +3 -3
  318. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +7 -6
  319. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +6 -5
  320. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +6 -5
  321. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +7 -6
  322. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
  323. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -3
  324. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +5 -5
  325. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +5 -5
  326. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +5 -5
  327. package/Libraries/LogBox/UI/LogBoxMessage.js +3 -3
  328. package/Libraries/LogBox/UI/LogBoxNotification.js +6 -5
  329. package/Libraries/Modal/Modal.d.ts +104 -0
  330. package/Libraries/Modal/Modal.js +14 -14
  331. package/Libraries/Modal/NativeModalManager.js +1 -0
  332. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -3
  333. package/Libraries/NativeComponent/BaseViewConfig.android.js +27 -2
  334. package/Libraries/NativeComponent/BaseViewConfig.ios.js +8 -3
  335. package/Libraries/NativeComponent/BaseViewConfig.win32.js +8 -3
  336. package/Libraries/NativeComponent/NativeComponentRegistry.js +5 -4
  337. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +1 -0
  338. package/Libraries/NativeComponent/StaticViewConfigValidator.js +1 -1
  339. package/Libraries/NativeComponent/ViewConfig.js +1 -0
  340. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +1 -0
  341. package/Libraries/NativeModules/specs/NativeDevMenu.js +1 -0
  342. package/Libraries/NativeModules/specs/NativeDevSettings.js +1 -0
  343. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +1 -0
  344. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +1 -0
  345. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -2
  346. package/Libraries/NativeModules/specs/NativeRedBox.js +1 -0
  347. package/Libraries/NativeModules/specs/NativeSourceCode.js +1 -0
  348. package/Libraries/Network/NativeNetworkingAndroid.js +1 -0
  349. package/Libraries/Network/NativeNetworkingIOS.js +1 -0
  350. package/Libraries/Network/RCTNetworking.android.js +4 -3
  351. package/Libraries/Network/RCTNetworking.ios.js +3 -2
  352. package/Libraries/Network/RCTNetworking.win32.js +1 -0
  353. package/Libraries/Network/convertRequestBody.js +1 -2
  354. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -1
  355. package/Libraries/NewAppScreen/components/Header.js +6 -2
  356. package/Libraries/NewAppScreen/components/HermesBadge.js +6 -2
  357. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +8 -9
  358. package/Libraries/NewAppScreen/components/ReloadInstructions.js +4 -1
  359. package/Libraries/NewAppScreen/index.js +1 -1
  360. package/Libraries/Performance/NativeJSCSamplingProfiler.js +1 -0
  361. package/Libraries/Performance/QuickPerformanceLogger.js +34 -10
  362. package/Libraries/Performance/Systrace.d.ts +66 -0
  363. package/Libraries/Performance/Systrace.js +110 -195
  364. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  365. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +115 -0
  366. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +5 -4
  367. package/Libraries/Pressability/Pressability.js +12 -10
  368. package/Libraries/Pressability/Pressability.win32.js +9 -7
  369. package/Libraries/Pressability/PressabilityDebug.js +2 -2
  370. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  371. package/Libraries/PushNotificationIOS/PushNotificationIOS.d.ts +275 -0
  372. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +19 -14
  373. package/Libraries/ReactNative/AppContainer.js +17 -7
  374. package/Libraries/ReactNative/AppRegistry.d.ts +68 -0
  375. package/Libraries/ReactNative/AppRegistry.js +11 -14
  376. package/Libraries/ReactNative/BridgelessUIManager.js +4 -3
  377. package/Libraries/ReactNative/FabricUIManager.js +3 -3
  378. package/Libraries/ReactNative/I18nManager.d.ts +25 -0
  379. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +1 -0
  380. package/Libraries/ReactNative/NativeI18nManager.js +1 -0
  381. package/Libraries/ReactNative/NativeUIManager.js +1 -0
  382. package/Libraries/ReactNative/PaperUIManager.js +2 -2
  383. package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
  384. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +9 -0
  385. package/Libraries/ReactNative/RendererImplementation.js +112 -0
  386. package/Libraries/ReactNative/RendererProxy.d.ts +20 -0
  387. package/Libraries/ReactNative/RendererProxy.js +26 -0
  388. package/Libraries/ReactNative/RootTag.js +0 -1
  389. package/Libraries/ReactNative/UIManager.d.ts +157 -0
  390. package/Libraries/ReactNative/UIManager.js +1 -1
  391. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -0
  392. package/Libraries/ReactNative/renderApplication.js +38 -20
  393. package/Libraries/ReactNative/requireNativeComponent.d.ts +23 -0
  394. package/Libraries/ReactNative/requireNativeComponent.js +2 -2
  395. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +10 -9
  396. package/Libraries/Renderer/implementations/ReactFabric-dev.js +312 -217
  397. package/Libraries/Renderer/implementations/ReactFabric-prod.js +212 -177
  398. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +248 -213
  399. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +311 -218
  400. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +226 -196
  401. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +262 -232
  402. package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +149 -0
  403. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  404. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  405. package/Libraries/Renderer/shims/ReactNative.js +2 -2
  406. package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +141 -0
  407. package/Libraries/Renderer/shims/ReactNativeTypes.js +23 -22
  408. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +8 -8
  409. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  410. package/Libraries/Settings/NativeSettingsManager.js +1 -0
  411. package/Libraries/Settings/Settings.d.ts +18 -0
  412. package/Libraries/Share/NativeShareModule.js +1 -0
  413. package/Libraries/Share/Share.d.ts +80 -0
  414. package/Libraries/Share/Share.js +7 -5
  415. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +1 -1
  416. package/Libraries/StyleSheet/PlatformColorValueTypes.d.ts +18 -0
  417. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  418. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.d.ts +25 -0
  419. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -0
  420. package/Libraries/StyleSheet/StyleSheet.d.ts +156 -0
  421. package/Libraries/StyleSheet/StyleSheet.js +15 -11
  422. package/Libraries/StyleSheet/StyleSheet.win32.js +16 -12
  423. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +332 -0
  424. package/Libraries/StyleSheet/StyleSheetTypes.js +101 -24
  425. package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +2 -2
  426. package/Libraries/StyleSheet/normalizeColor.js +3 -3
  427. package/Libraries/StyleSheet/private/_TransformStyle.js +26 -24
  428. package/Libraries/StyleSheet/processAspectRatio.js +53 -0
  429. package/Libraries/StyleSheet/processColor.d.ts +16 -0
  430. package/Libraries/StyleSheet/processColor.js +3 -4
  431. package/Libraries/StyleSheet/processColorArray.js +1 -0
  432. package/Libraries/StyleSheet/processFontVariant.js +30 -0
  433. package/Libraries/StyleSheet/processTransform.js +114 -105
  434. package/Libraries/StyleSheet/splitLayoutProps.js +5 -0
  435. package/Libraries/Text/Text.d.ts +209 -0
  436. package/Libraries/Text/Text.js +94 -12
  437. package/Libraries/Text/TextNativeComponent.js +49 -41
  438. package/Libraries/Text/TextNativeComponent.win32.js +67 -49
  439. package/Libraries/Text/TextProps.js +64 -7
  440. package/Libraries/{Components/MaskedView/MaskedViewIOS.win32.js → TurboModule/RCTExport.d.ts} +3 -4
  441. package/Libraries/TurboModule/TurboModuleRegistry.d.ts +15 -0
  442. package/Libraries/TurboModule/TurboModuleRegistry.js +3 -1
  443. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +1 -0
  444. package/Libraries/Types/CoreEventTypes.d.ts +263 -0
  445. package/Libraries/Types/CoreEventTypes.js +2 -1
  446. package/Libraries/Types/CoreEventTypes.win32.js +2 -1
  447. package/Libraries/Utilities/AcessibilityMapping.js +154 -0
  448. package/Libraries/Utilities/Appearance.d.ts +43 -0
  449. package/Libraries/Utilities/Appearance.js +3 -3
  450. package/Libraries/Utilities/BackHandler.android.js +3 -5
  451. package/Libraries/Utilities/BackHandler.d.ts +38 -0
  452. package/Libraries/Utilities/BackHandler.win32.js +3 -5
  453. package/Libraries/Utilities/DevSettings.d.ts +32 -0
  454. package/Libraries/Utilities/DevSettings.js +4 -2
  455. package/Libraries/Utilities/Dimensions.d.ts +79 -0
  456. package/Libraries/Utilities/Dimensions.js +2 -2
  457. package/Libraries/Utilities/Dimensions.win32.js +2 -2
  458. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -1
  459. package/Libraries/Utilities/HMRClient.js +23 -8
  460. package/Libraries/Utilities/LoadingView.ios.js +1 -1
  461. package/Libraries/Utilities/NativeAppearance.js +1 -0
  462. package/Libraries/Utilities/NativeDevLoadingView.js +1 -0
  463. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +1 -0
  464. package/Libraries/Utilities/NativeDeviceInfo.js +1 -0
  465. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +1 -0
  466. package/Libraries/Utilities/NativePlatformConstantsIOS.js +1 -0
  467. package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -0
  468. package/Libraries/Utilities/PerformanceLoggerContext.js +3 -2
  469. package/Libraries/Utilities/PixelRatio.d.ts +64 -0
  470. package/Libraries/Utilities/Platform.android.js +11 -5
  471. package/Libraries/Utilities/Platform.d.ts +102 -0
  472. package/Libraries/Utilities/Platform.ios.js +12 -5
  473. package/Libraries/Utilities/Platform.win32.js +11 -5
  474. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  475. package/Libraries/Utilities/ReactNativeTestTools.js +9 -15
  476. package/Libraries/Utilities/codegenNativeCommands.js +1 -10
  477. package/Libraries/Utilities/codegenNativeComponent.js +4 -1
  478. package/Libraries/Utilities/createPerformanceLogger.js +7 -8
  479. package/Libraries/Utilities/differ/deepDiffer.js +1 -1
  480. package/Libraries/Utilities/groupByEveryN.js +1 -1
  481. package/Libraries/Utilities/stringifySafe.js +3 -1
  482. package/Libraries/Utilities/useColorScheme.js +3 -2
  483. package/Libraries/Utilities/useRefEffect.js +1 -1
  484. package/Libraries/Vibration/NativeVibration.js +1 -0
  485. package/Libraries/Vibration/Vibration.d.ts +43 -0
  486. package/Libraries/Vibration/Vibration.js +1 -0
  487. package/Libraries/WebPerformance/NativePerformanceObserver.js +41 -0
  488. package/Libraries/WebPerformance/PerformanceObserver.js +223 -0
  489. package/Libraries/WebSocket/NativeWebSocketModule.js +1 -0
  490. package/Libraries/WebSocket/WebSocket.js +11 -3
  491. package/Libraries/WebSocket/WebSocketInterceptor.js +1 -1
  492. package/Libraries/YellowBox/YellowBoxDeprecated.d.ts +19 -0
  493. package/Libraries/YellowBox/YellowBoxDeprecated.js +2 -3
  494. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +2 -1
  495. package/Libraries/__tests__/ButtonWin32-test.js +16 -0
  496. package/Libraries/platform-types.d.ts +25 -0
  497. package/Libraries/vendor/core/ErrorUtils.d.ts +15 -0
  498. package/Libraries/vendor/emitter/EventEmitter.d.ts +164 -0
  499. package/babel.config.js +3 -0
  500. package/flow/jest.js +2 -2
  501. package/flow-typed/npm/{react-dom_v16.x.x.js → react-dom_v17.x.x.js} +58 -31
  502. package/flow-typed/npm/yargs_v17.x.x.js +341 -0
  503. package/index.js +89 -55
  504. package/index.win32.js +89 -55
  505. package/interface.js +8 -0
  506. package/jest/react-native-env.js +18 -0
  507. package/jest/renderer.js +2 -2
  508. package/jest/setup.js +7 -9
  509. package/jest.config.js +9 -2
  510. package/overrides.json +40 -101
  511. package/package.json +34 -33
  512. package/src/Libraries/Components/TextInput/TextInput.win32.tsx +2 -1
  513. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  514. package/src/Libraries/Components/Touchable/TouchableWin32.Props.tsx +2 -1
  515. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  516. package/src/Libraries/Components/View/ViewWin32.Props.ts +4 -0
  517. package/src/Libraries/__tests__/__snapshots__/ButtonWin32-test.js.snap +22 -0
  518. package/src/Libraries/platform-types.d.ts +25 -0
  519. package/types/index.d.ts +215 -0
  520. package/IntegrationTests/AsyncStorageTest.js +0 -261
  521. package/Libraries/Components/MaskedView/MaskedViewIOS.ios.js +0 -93
  522. package/Libraries/Components/MaskedView/RCTMaskedViewNativeComponent.js +0 -21
  523. package/Libraries/Core/setUpSystrace.js +0 -21
  524. package/Libraries/Image/ImagePickerIOS.js +0 -103
  525. package/Libraries/Image/NativeImagePickerIOS.js +0 -38
  526. package/Libraries/Lists/VirtualizedList.win32.js +0 -9
  527. package/Libraries/Lists/__tests__/CellRenderMask-test.js +0 -179
  528. package/Libraries/Lists/__tests__/FillRateHelper-test.js +0 -120
  529. package/Libraries/Lists/__tests__/FlatList-test.js +0 -155
  530. package/Libraries/Lists/__tests__/SectionList-test.js +0 -109
  531. package/Libraries/Lists/__tests__/ViewabilityHelper-test.js +0 -440
  532. package/Libraries/Lists/__tests__/VirtualizeUtils-test.js +0 -91
  533. package/Libraries/Lists/__tests__/VirtualizedList-test.js +0 -1587
  534. package/Libraries/Lists/__tests__/VirtualizedSectionList-test.js +0 -269
  535. package/Libraries/Storage/AsyncStorage.js +0 -385
  536. package/Libraries/Storage/NativeAsyncLocalStorage.js +0 -44
  537. package/Libraries/Storage/NativeAsyncSQLiteDBStorage.js +0 -44
  538. package/Libraries/Utilities/JSDevSupportModule.js +0 -37
  539. package/Libraries/Utilities/NativeJSDevSupport.js +0 -23
  540. package/rntypes/BatchedBridge.d.ts +0 -23
  541. package/rntypes/Devtools.d.ts +0 -20
  542. package/rntypes/LaunchScreen.d.ts +0 -9
  543. package/rntypes/globals.d.ts +0 -497
  544. package/rntypes/index.d.ts +0 -9754
  545. package/rntypes/legacy-properties.d.ts +0 -238
  546. package/src/Libraries/Lists/__tests__/__snapshots__/FlatList-test.js.snap +0 -427
  547. package/src/Libraries/Lists/__tests__/__snapshots__/SectionList-test.js.snap +0 -391
  548. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap +0 -4565
  549. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedSectionList-test.js.snap +0 -1153
  550. package/src/rntypes/BatchedBridge.d.ts +0 -23
  551. package/src/rntypes/Devtools.d.ts +0 -20
  552. package/src/rntypes/LaunchScreen.d.ts +0 -9
  553. package/src/rntypes/globals.d.ts +0 -497
  554. package/src/rntypes/index.d.ts +0 -9754
  555. package/src/rntypes/legacy-properties.d.ts +0 -238
  556. package/src/typings-index.ts +0 -37
  557. package/typings-index.d.ts +0 -23
  558. package/typings-index.js +0 -47
  559. package/typings-index.js.map +0 -1
@@ -4,29 +4,24 @@
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
6
6
  *
7
- * @flow
7
+ * @flow strict-local
8
8
  * @format
9
9
  */
10
10
 
11
- import AnimatedImplementation from '../../Animated/AnimatedImplementation';
12
- import AnimatedAddition from '../../Animated/nodes/AnimatedAddition';
13
- import AnimatedDiffClamp from '../../Animated/nodes/AnimatedDiffClamp';
14
- import AnimatedNode from '../../Animated/nodes/AnimatedNode';
11
+ import type {LayoutEvent} from '../../Types/CoreEventTypes';
15
12
 
16
- import * as React from 'react';
13
+ import Animated from '../../Animated/Animated';
17
14
  import StyleSheet from '../../StyleSheet/StyleSheet';
18
- import View from '../View/View';
19
15
  import Platform from '../../Utilities/Platform';
20
-
21
- import type {LayoutEvent} from '../../Types/CoreEventTypes';
22
-
23
- const AnimatedView = AnimatedImplementation.createAnimatedComponent(View);
16
+ import useMergeRefs from '../../Utilities/useMergeRefs';
17
+ import * as React from 'react';
18
+ import {useCallback, useEffect, useMemo, useRef, useState} from 'react';
24
19
 
25
20
  export type Props = $ReadOnly<{
26
- children?: React.Element<any>,
21
+ children?: React.Element<$FlowFixMe>,
27
22
  nextHeaderLayoutY: ?number,
28
23
  onLayout: (event: LayoutEvent) => void,
29
- scrollAnimatedValue: AnimatedImplementation.Value,
24
+ scrollAnimatedValue: Animated.Value,
30
25
  // Will cause sticky headers to stick at the bottom of the ScrollView instead
31
26
  // of the top.
32
27
  inverted: ?boolean,
@@ -36,291 +31,270 @@ export type Props = $ReadOnly<{
36
31
  hiddenOnScroll?: ?boolean,
37
32
  }>;
38
33
 
39
- type State = {
40
- measured: boolean,
41
- layoutY: number,
42
- layoutHeight: number,
43
- nextHeaderLayoutY: ?number,
44
- translateY: ?number,
34
+ type Instance = {
35
+ ...React.ElementRef<typeof Animated.View>,
36
+ setNextHeaderY: number => void,
45
37
  ...
46
38
  };
47
39
 
48
- class ScrollViewStickyHeader extends React.Component<Props, State> {
49
- state: State = {
50
- measured: false,
51
- layoutY: 0,
52
- layoutHeight: 0,
53
- nextHeaderLayoutY: this.props.nextHeaderLayoutY,
54
- translateY: null,
55
- };
56
-
57
- _translateY: ?AnimatedNode = null;
58
- _shouldRecreateTranslateY: boolean = true;
59
- _haveReceivedInitialZeroTranslateY: boolean = true;
60
- _ref: any; // TODO T53738161: flow type this, and the whole file
40
+ const ScrollViewStickyHeaderWithForwardedRef: React.AbstractComponent<
41
+ Props,
42
+ Instance,
43
+ > = React.forwardRef(function ScrollViewStickyHeader(props, forwardedRef) {
44
+ const {
45
+ inverted,
46
+ scrollViewHeight,
47
+ hiddenOnScroll,
48
+ scrollAnimatedValue,
49
+ nextHeaderLayoutY: _nextHeaderLayoutY,
50
+ } = props;
61
51
 
62
- // Fabric-only:
63
- _timer: ?TimeoutID;
64
- _animatedValueListenerId: string;
65
- _animatedValueListener: (valueObject: $ReadOnly<{|value: number|}>) => void;
66
- _debounceTimeout: number = Platform.OS === 'android' ? 15 : 64;
52
+ const [measured, setMeasured] = useState<boolean>(false);
53
+ const [layoutY, setLayoutY] = useState<number>(0);
54
+ const [layoutHeight, setLayoutHeight] = useState<number>(0);
55
+ const [translateY, setTranslateY] = useState<?number>(null);
56
+ const [nextHeaderLayoutY, setNextHeaderLayoutY] =
57
+ useState<?number>(_nextHeaderLayoutY);
58
+ const [isFabric, setIsFabric] = useState<boolean>(false);
67
59
 
68
- setNextHeaderY: (y: number) => void = (y: number): void => {
69
- this._shouldRecreateTranslateY = true;
70
- this.setState({nextHeaderLayoutY: y});
60
+ const callbackRef = (ref: Instance | null): void => {
61
+ if (ref == null) {
62
+ return;
63
+ }
64
+ ref.setNextHeaderY = value => {
65
+ setNextHeaderLayoutY(value);
66
+ };
67
+ // Avoid dot notation because at Meta, private properties are obfuscated.
68
+ // $FlowFixMe[prop-missing]
69
+ const _internalInstanceHandler = ref['_internalInstanceHandle']; // eslint-disable-line dot-notation
70
+ setIsFabric(Boolean(_internalInstanceHandler?.stateNode?.canonical));
71
71
  };
72
+ const ref: (React.ElementRef<typeof Animated.View> | null) => void =
73
+ // $FlowFixMe[incompatible-type] - Ref is mutated by `callbackRef`.
74
+ useMergeRefs<Instance | null>(callbackRef, forwardedRef);
72
75
 
73
- componentWillUnmount() {
74
- if (this._translateY != null && this._animatedValueListenerId != null) {
75
- this._translateY.removeListener(this._animatedValueListenerId);
76
- }
77
- if (this._timer) {
78
- clearTimeout(this._timer);
79
- }
80
- }
76
+ const offset = useMemo(
77
+ () =>
78
+ hiddenOnScroll === true
79
+ ? Animated.diffClamp(
80
+ scrollAnimatedValue
81
+ .interpolate({
82
+ extrapolateLeft: 'clamp',
83
+ inputRange: [layoutY, layoutY + 1],
84
+ outputRange: ([0, 1]: Array<number>),
85
+ })
86
+ .interpolate({
87
+ inputRange: [0, 1],
88
+ outputRange: ([0, -1]: Array<number>),
89
+ }),
90
+ -layoutHeight,
91
+ 0,
92
+ )
93
+ : null,
94
+ [scrollAnimatedValue, layoutHeight, layoutY, hiddenOnScroll],
95
+ );
81
96
 
82
- UNSAFE_componentWillReceiveProps(nextProps: Props) {
83
- if (
84
- nextProps.scrollViewHeight !== this.props.scrollViewHeight ||
85
- nextProps.scrollAnimatedValue !== this.props.scrollAnimatedValue ||
86
- nextProps.inverted !== this.props.inverted
87
- ) {
88
- this._shouldRecreateTranslateY = true;
89
- }
90
- }
97
+ const [animatedTranslateY, setAnimatedTranslateY] = useState<Animated.Node>(
98
+ () => {
99
+ const inputRange: Array<number> = [-1, 0];
100
+ const outputRange: Array<number> = [0, 0];
101
+ const initialTranslateY = scrollAnimatedValue.interpolate({
102
+ inputRange,
103
+ outputRange,
104
+ });
91
105
 
92
- updateTranslateListener(
93
- translateY: AnimatedNode,
94
- isFabric: boolean,
95
- offset: AnimatedDiffClamp | null,
96
- ) {
97
- if (this._translateY != null && this._animatedValueListenerId != null) {
98
- this._translateY.removeListener(this._animatedValueListenerId);
99
- }
100
- offset
101
- ? (this._translateY = new AnimatedAddition(translateY, offset))
102
- : (this._translateY = translateY);
106
+ if (offset != null) {
107
+ return Animated.add(initialTranslateY, offset);
108
+ }
109
+ return initialTranslateY;
110
+ },
111
+ );
103
112
 
104
- this._shouldRecreateTranslateY = false;
113
+ const _haveReceivedInitialZeroTranslateY = useRef<boolean>(true);
114
+ const _timer = useRef<?TimeoutID>(null);
105
115
 
106
- if (!isFabric) {
107
- return;
116
+ useEffect(() => {
117
+ if (translateY !== 0 && translateY != null) {
118
+ _haveReceivedInitialZeroTranslateY.current = false;
108
119
  }
120
+ }, [translateY]);
109
121
 
110
- if (!this._animatedValueListener) {
111
- // This is called whenever the (Interpolated) Animated Value
112
- // updates, which is several times per frame during scrolling.
113
- // To ensure that the Fabric ShadowTree has the most recent
114
- // translate style of this node, we debounce the value and then
115
- // pass it through to the underlying node during render.
116
- // This is:
117
- // 1. Only an issue in Fabric.
118
- // 2. Worse in Android than iOS. In Android, but not iOS, you
119
- // can touch and move your finger slightly and still trigger
120
- // a "tap" event. In iOS, moving will cancel the tap in
121
- // both Fabric and non-Fabric. On Android when you move
122
- // your finger, the hit-detection moves from the Android
123
- // platform to JS, so we need the ShadowTree to have knowledge
124
- // of the current position.
125
- this._animatedValueListener = ({value}) => {
126
- // When the AnimatedInterpolation is recreated, it always initializes
127
- // to a value of zero and emits a value change of 0 to its listeners.
128
- if (value === 0 && !this._haveReceivedInitialZeroTranslateY) {
129
- this._haveReceivedInitialZeroTranslateY = true;
130
- return;
131
- }
132
- if (this._timer) {
133
- clearTimeout(this._timer);
122
+ // This is called whenever the (Interpolated) Animated Value
123
+ // updates, which is several times per frame during scrolling.
124
+ // To ensure that the Fabric ShadowTree has the most recent
125
+ // translate style of this node, we debounce the value and then
126
+ // pass it through to the underlying node during render.
127
+ // This is:
128
+ // 1. Only an issue in Fabric.
129
+ // 2. Worse in Android than iOS. In Android, but not iOS, you
130
+ // can touch and move your finger slightly and still trigger
131
+ // a "tap" event. In iOS, moving will cancel the tap in
132
+ // both Fabric and non-Fabric. On Android when you move
133
+ // your finger, the hit-detection moves from the Android
134
+ // platform to JS, so we need the ShadowTree to have knowledge
135
+ // of the current position.
136
+ const animatedValueListener = useCallback(
137
+ ({value}) => {
138
+ const _debounceTimeout: number = Platform.OS === 'android' ? 15 : 64;
139
+ // When the AnimatedInterpolation is recreated, it always initializes
140
+ // to a value of zero and emits a value change of 0 to its listeners.
141
+ if (value === 0 && !_haveReceivedInitialZeroTranslateY.current) {
142
+ _haveReceivedInitialZeroTranslateY.current = true;
143
+ return;
144
+ }
145
+ if (_timer.current != null) {
146
+ clearTimeout(_timer.current);
147
+ }
148
+ _timer.current = setTimeout(() => {
149
+ if (value !== translateY) {
150
+ setTranslateY(value);
134
151
  }
135
- this._timer = setTimeout(() => {
136
- if (value !== this.state.translateY) {
137
- this.setState({
138
- translateY: value,
139
- });
140
- }
141
- }, this._debounceTimeout);
142
- };
143
- }
144
- if (this.state.translateY !== 0 && this.state.translateY != null) {
145
- this._haveReceivedInitialZeroTranslateY = false;
146
- }
147
- this._animatedValueListenerId = translateY.addListener(
148
- this._animatedValueListener,
149
- );
150
- }
152
+ }, _debounceTimeout);
153
+ },
154
+ [translateY],
155
+ );
151
156
 
152
- _onLayout = (event: any) => {
153
- const layoutY = event.nativeEvent.layout.y;
154
- const layoutHeight = event.nativeEvent.layout.height;
155
- const measured = true;
157
+ useEffect(() => {
158
+ const inputRange: Array<number> = [-1, 0];
159
+ const outputRange: Array<number> = [0, 0];
156
160
 
157
- if (
158
- layoutY !== this.state.layoutY ||
159
- layoutHeight !== this.state.layoutHeight ||
160
- measured !== this.state.measured
161
- ) {
162
- this._shouldRecreateTranslateY = true;
161
+ if (measured) {
162
+ if (inverted === true) {
163
+ // The interpolation looks like:
164
+ // - Negative scroll: no translation
165
+ // - `stickStartPoint` is the point at which the header will start sticking.
166
+ // It is calculated using the ScrollView viewport height so it is a the bottom.
167
+ // - Headers that are in the initial viewport will never stick, `stickStartPoint`
168
+ // will be negative.
169
+ // - From 0 to `stickStartPoint` no translation. This will cause the header
170
+ // to scroll normally until it reaches the top of the scroll view.
171
+ // - From `stickStartPoint` to when the next header y hits the bottom edge of the header: translate
172
+ // equally to scroll. This will cause the header to stay at the top of the scroll view.
173
+ // - Past the collision with the next header y: no more translation. This will cause the
174
+ // header to continue scrolling up and make room for the next sticky header.
175
+ // In the case that there is no next header just translate equally to
176
+ // scroll indefinitely.
177
+ if (scrollViewHeight != null) {
178
+ const stickStartPoint = layoutY + layoutHeight - scrollViewHeight;
179
+ if (stickStartPoint > 0) {
180
+ inputRange.push(stickStartPoint);
181
+ outputRange.push(0);
182
+ inputRange.push(stickStartPoint + 1);
183
+ outputRange.push(1);
184
+ // If the next sticky header has not loaded yet (probably windowing) or is the last
185
+ // we can just keep it sticked forever.
186
+ const collisionPoint =
187
+ (nextHeaderLayoutY || 0) - layoutHeight - scrollViewHeight;
188
+ if (collisionPoint > stickStartPoint) {
189
+ inputRange.push(collisionPoint, collisionPoint + 1);
190
+ outputRange.push(
191
+ collisionPoint - stickStartPoint,
192
+ collisionPoint - stickStartPoint,
193
+ );
194
+ }
195
+ }
196
+ }
197
+ } else {
198
+ // The interpolation looks like:
199
+ // - Negative scroll: no translation
200
+ // - From 0 to the y of the header: no translation. This will cause the header
201
+ // to scroll normally until it reaches the top of the scroll view.
202
+ // - From header y to when the next header y hits the bottom edge of the header: translate
203
+ // equally to scroll. This will cause the header to stay at the top of the scroll view.
204
+ // - Past the collision with the next header y: no more translation. This will cause the
205
+ // header to continue scrolling up and make room for the next sticky header.
206
+ // In the case that there is no next header just translate equally to
207
+ // scroll indefinitely.
208
+ inputRange.push(layoutY);
209
+ outputRange.push(0);
210
+ // If the next sticky header has not loaded yet (probably windowing) or is the last
211
+ // we can just keep it sticked forever.
212
+ const collisionPoint = (nextHeaderLayoutY || 0) - layoutHeight;
213
+ if (collisionPoint >= layoutY) {
214
+ inputRange.push(collisionPoint, collisionPoint + 1);
215
+ outputRange.push(collisionPoint - layoutY, collisionPoint - layoutY);
216
+ } else {
217
+ inputRange.push(layoutY + 1);
218
+ outputRange.push(1);
219
+ }
220
+ }
163
221
  }
164
222
 
165
- this.setState({
166
- measured,
167
- layoutY,
168
- layoutHeight,
223
+ let newAnimatedTranslateY: Animated.Node = scrollAnimatedValue.interpolate({
224
+ inputRange,
225
+ outputRange,
169
226
  });
170
227
 
171
- this.props.onLayout(event);
172
- const child = React.Children.only(this.props.children);
173
- if (child.props.onCellLayout) {
174
- child.props.onCellLayout(event, child.props.cellKey, child.props.index);
175
- } else if (child.props.onLayout) {
176
- child.props.onLayout(event);
228
+ if (offset != null) {
229
+ newAnimatedTranslateY = Animated.add(newAnimatedTranslateY, offset);
177
230
  }
178
- };
179
231
 
180
- /* $FlowFixMe[missing-local-annot] The type annotation(s) required by Flow's
181
- * LTI update could not be added via codemod */
182
- _setComponentRef = ref => {
183
- this._ref = ref;
184
- };
232
+ // add the event listener
233
+ let animatedListenerId;
234
+ if (isFabric) {
235
+ animatedListenerId = newAnimatedTranslateY.addListener(
236
+ animatedValueListener,
237
+ );
238
+ }
185
239
 
186
- render(): React.Node {
187
- // Fabric Detection
188
- const isFabric = !!(
189
- // An internal transform mangles variables with leading "_" as private.
190
- // eslint-disable-next-line dot-notation
191
- (this._ref && this._ref['_internalInstanceHandle']?.stateNode?.canonical)
192
- );
193
- // Initially and in the case of updated props or layout, we
194
- // recreate this interpolated value. Otherwise, we do not recreate
195
- // when there are state changes.
196
- if (this._shouldRecreateTranslateY) {
197
- const {inverted, scrollViewHeight} = this.props;
198
- const {measured, layoutHeight, layoutY, nextHeaderLayoutY} = this.state;
199
- const inputRange: Array<number> = [-1, 0];
200
- const outputRange: Array<number> = [0, 0];
240
+ setAnimatedTranslateY(newAnimatedTranslateY);
201
241
 
202
- if (measured) {
203
- if (inverted) {
204
- // The interpolation looks like:
205
- // - Negative scroll: no translation
206
- // - `stickStartPoint` is the point at which the header will start sticking.
207
- // It is calculated using the ScrollView viewport height so it is a the bottom.
208
- // - Headers that are in the initial viewport will never stick, `stickStartPoint`
209
- // will be negative.
210
- // - From 0 to `stickStartPoint` no translation. This will cause the header
211
- // to scroll normally until it reaches the top of the scroll view.
212
- // - From `stickStartPoint` to when the next header y hits the bottom edge of the header: translate
213
- // equally to scroll. This will cause the header to stay at the top of the scroll view.
214
- // - Past the collision with the next header y: no more translation. This will cause the
215
- // header to continue scrolling up and make room for the next sticky header.
216
- // In the case that there is no next header just translate equally to
217
- // scroll indefinitely.
218
- if (scrollViewHeight != null) {
219
- const stickStartPoint = layoutY + layoutHeight - scrollViewHeight;
220
- if (stickStartPoint > 0) {
221
- inputRange.push(stickStartPoint);
222
- outputRange.push(0);
223
- inputRange.push(stickStartPoint + 1);
224
- outputRange.push(1);
225
- // If the next sticky header has not loaded yet (probably windowing) or is the last
226
- // we can just keep it sticked forever.
227
- const collisionPoint =
228
- (nextHeaderLayoutY || 0) - layoutHeight - scrollViewHeight;
229
- if (collisionPoint > stickStartPoint) {
230
- inputRange.push(collisionPoint, collisionPoint + 1);
231
- outputRange.push(
232
- collisionPoint - stickStartPoint,
233
- collisionPoint - stickStartPoint,
234
- );
235
- }
236
- }
237
- }
238
- } else {
239
- // The interpolation looks like:
240
- // - Negative scroll: no translation
241
- // - From 0 to the y of the header: no translation. This will cause the header
242
- // to scroll normally until it reaches the top of the scroll view.
243
- // - From header y to when the next header y hits the bottom edge of the header: translate
244
- // equally to scroll. This will cause the header to stay at the top of the scroll view.
245
- // - Past the collision with the next header y: no more translation. This will cause the
246
- // header to continue scrolling up and make room for the next sticky header.
247
- // In the case that there is no next header just translate equally to
248
- // scroll indefinitely.
249
- inputRange.push(layoutY);
250
- outputRange.push(0);
251
- // If the next sticky header has not loaded yet (probably windowing) or is the last
252
- // we can just keep it sticked forever.
253
- const collisionPoint = (nextHeaderLayoutY || 0) - layoutHeight;
254
- if (collisionPoint >= layoutY) {
255
- inputRange.push(collisionPoint, collisionPoint + 1);
256
- outputRange.push(
257
- collisionPoint - layoutY,
258
- collisionPoint - layoutY,
259
- );
260
- } else {
261
- inputRange.push(layoutY + 1);
262
- outputRange.push(1);
263
- }
264
- }
242
+ // clean up the event listener and timer
243
+ return () => {
244
+ if (animatedListenerId) {
245
+ newAnimatedTranslateY.removeListener(animatedListenerId);
246
+ }
247
+ if (_timer.current != null) {
248
+ clearTimeout(_timer.current);
265
249
  }
250
+ };
251
+ }, [nextHeaderLayoutY, measured, layoutHeight, layoutY, scrollViewHeight, scrollAnimatedValue, inverted, offset, animatedValueListener, isFabric]);
266
252
 
267
- this.updateTranslateListener(
268
- this.props.scrollAnimatedValue.interpolate({
269
- inputRange,
270
- outputRange,
271
- }),
272
- isFabric,
273
- this.props.hiddenOnScroll
274
- ? new AnimatedDiffClamp(
275
- this.props.scrollAnimatedValue
276
- .interpolate({
277
- extrapolateLeft: 'clamp',
278
- inputRange: [layoutY, layoutY + 1],
279
- outputRange: [0, 1],
280
- })
281
- .interpolate({
282
- inputRange: [0, 1],
283
- outputRange: [0, -1],
284
- }),
285
- -this.state.layoutHeight,
286
- 0,
287
- )
288
- : null,
289
- );
253
+ const _onLayout = (event: LayoutEvent) => {
254
+ setLayoutY(event.nativeEvent.layout.y);
255
+ setLayoutHeight(event.nativeEvent.layout.height);
256
+ setMeasured(true);
257
+
258
+ props.onLayout(event);
259
+ const child = React.Children.only(props.children);
260
+ if (child.props.onLayout) {
261
+ child.props.onLayout(event);
290
262
  }
263
+ };
291
264
 
292
- const child = React.Children.only(this.props.children);
265
+ const child = React.Children.only(props.children);
293
266
 
294
- // TODO T68319535: remove this if NativeAnimated is rewritten for Fabric
295
- const passthroughAnimatedPropExplicitValues =
296
- isFabric && this.state.translateY != null
297
- ? {
298
- style: {transform: [{translateY: this.state.translateY}]},
299
- }
300
- : null;
267
+ // TODO T68319535: remove this if NativeAnimated is rewritten for Fabric
268
+ const passthroughAnimatedPropExplicitValues =
269
+ isFabric && translateY != null
270
+ ? {
271
+ style: {transform: [{translateY: translateY}]},
272
+ }
273
+ : null;
301
274
 
302
- return (
303
- <AnimatedView
304
- collapsable={false}
305
- nativeID={this.props.nativeID}
306
- onLayout={this._onLayout}
307
- ref={this._setComponentRef}
308
- style={[
309
- child.props.style,
310
- styles.header,
311
- {transform: [{translateY: this._translateY}]},
312
- ]}
313
- passthroughAnimatedPropExplicitValues={
314
- passthroughAnimatedPropExplicitValues
315
- }>
316
- {React.cloneElement(child, {
317
- style: styles.fill, // We transfer the child style to the wrapper.
318
- onLayout: undefined, // we call this manually through our this._onLayout
319
- })}
320
- </AnimatedView>
321
- );
322
- }
323
- }
275
+ return (
276
+ /* $FlowFixMe[prop-missing] passthroughAnimatedPropExplicitValues isn't properly
277
+ included in the Animated.View flow type. */
278
+ <Animated.View
279
+ collapsable={false}
280
+ nativeID={props.nativeID}
281
+ onLayout={_onLayout}
282
+ ref={ref}
283
+ style={[
284
+ child.props.style,
285
+ styles.header,
286
+ {transform: [{translateY: animatedTranslateY}]},
287
+ ]}
288
+ passthroughAnimatedPropExplicitValues={
289
+ passthroughAnimatedPropExplicitValues
290
+ }>
291
+ {React.cloneElement(child, {
292
+ style: styles.fill, // We transfer the child style to the wrapper.
293
+ onLayout: undefined, // we call this manually through our this._onLayout
294
+ })}
295
+ </Animated.View>
296
+ );
297
+ });
324
298
 
325
299
  const styles = StyleSheet.create({
326
300
  header: {
@@ -332,4 +306,4 @@ const styles = StyleSheet.create({
332
306
  },
333
307
  });
334
308
 
335
- module.exports = ScrollViewStickyHeader;
309
+ export default ScrollViewStickyHeaderWithForwardedRef;