@office-iss/react-native-win32 0.70.4 → 0.71.0-preview.2

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 (556) hide show
  1. package/.eslintignore +1 -0
  2. package/.eslintrc.js +2 -0
  3. package/.flowconfig +3 -6
  4. package/CHANGELOG.json +265 -63
  5. package/CHANGELOG.md +102 -30
  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 -1
  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/Core/Devtools/openFileInEditor.js +3 -0
  206. package/Libraries/Core/Devtools/parseErrorStack.js +1 -1
  207. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -2
  208. package/Libraries/Core/ExceptionsManager.js +8 -0
  209. package/Libraries/Core/ExtendedError.js +11 -8
  210. package/Libraries/Core/InitializeCore.js +2 -1
  211. package/Libraries/Core/NativeExceptionsManager.js +3 -4
  212. package/Libraries/Core/RawEventEmitter.js +2 -1
  213. package/Libraries/Core/ReactFiberErrorDialog.js +2 -2
  214. package/Libraries/Core/ReactNativeVersion.js +2 -2
  215. package/Libraries/Core/ReactNativeVersionCheck.js +1 -0
  216. package/Libraries/Core/ReactNativeVersionCheck.win32.js +1 -0
  217. package/Libraries/Core/SegmentFetcher/NativeSegmentFetcher.js +1 -0
  218. package/Libraries/Core/Timers/JSTimers.js +13 -11
  219. package/Libraries/Core/Timers/NativeTiming.js +1 -0
  220. package/Libraries/Core/setUpBatchedBridge.js +1 -5
  221. package/Libraries/Core/setUpDeveloperTools.js +4 -6
  222. package/Libraries/Core/setUpReactDevTools.js +4 -1
  223. package/Libraries/Core/setUpRegeneratorRuntime.js +1 -1
  224. package/Libraries/Core/setUpTimers.js +1 -1
  225. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +70 -0
  226. package/Libraries/EventEmitter/NativeEventEmitter.js +1 -0
  227. package/Libraries/EventEmitter/RCTDeviceEventEmitter.d.ts +30 -0
  228. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  229. package/Libraries/EventEmitter/RCTNativeAppEventEmitter.d.ts +32 -0
  230. package/Libraries/EventEmitter/__mocks__/NativeEventEmitter.js +1 -0
  231. package/Libraries/Events/EventPolyfill.js +1 -1
  232. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +1 -0
  233. package/Libraries/Image/AssetSourceResolver.js +4 -6
  234. package/Libraries/Image/Image.android.js +63 -45
  235. package/Libraries/Image/Image.d.ts +322 -0
  236. package/Libraries/Image/Image.flow.js +64 -0
  237. package/Libraries/Image/Image.ios.js +55 -28
  238. package/Libraries/Image/Image.win32.js +54 -25
  239. package/Libraries/Image/ImageBackground.js +18 -7
  240. package/Libraries/Image/ImageInjection.js +2 -1
  241. package/Libraries/Image/ImageProps.js +88 -5
  242. package/Libraries/Image/ImageResizeMode.d.ts +49 -0
  243. package/Libraries/Image/ImageSource.d.ts +76 -0
  244. package/Libraries/Image/ImageSourceUtils.js +80 -0
  245. package/Libraries/Image/ImageUtils.js +21 -0
  246. package/Libraries/Image/ImageViewNativeComponent.js +8 -5
  247. package/Libraries/Image/NativeImageEditor.js +1 -0
  248. package/Libraries/Image/NativeImageLoaderAndroid.js +1 -0
  249. package/Libraries/Image/NativeImageLoaderIOS.js +1 -0
  250. package/Libraries/Image/NativeImageLoaderWin32.js +1 -0
  251. package/Libraries/Image/NativeImageStoreAndroid.js +1 -0
  252. package/Libraries/Image/NativeImageStoreIOS.js +1 -0
  253. package/Libraries/Image/TextInlineImageNativeComponent.js +4 -3
  254. package/Libraries/Image/nativeImageSource.js +2 -2
  255. package/Libraries/Image/resolveAssetSource.js +5 -5
  256. package/Libraries/Inspector/BorderBox.js +1 -1
  257. package/Libraries/Inspector/BoxInspector.js +3 -4
  258. package/Libraries/Inspector/DevtoolsOverlay.js +213 -0
  259. package/Libraries/Inspector/ElementBox.js +4 -5
  260. package/Libraries/Inspector/ElementProperties.js +10 -11
  261. package/Libraries/Inspector/Inspector.js +22 -108
  262. package/Libraries/Inspector/Inspector.win32.js +23 -109
  263. package/Libraries/Inspector/InspectorOverlay.js +5 -5
  264. package/Libraries/Inspector/InspectorOverlay.win32.js +5 -5
  265. package/Libraries/Inspector/InspectorPanel.js +12 -10
  266. package/Libraries/Inspector/NetworkOverlay.js +7 -3
  267. package/Libraries/Inspector/PerformanceOverlay.js +3 -3
  268. package/Libraries/Inspector/StyleInspector.js +2 -2
  269. package/Libraries/Inspector/getInspectorDataForViewAtPoint.js +71 -0
  270. package/Libraries/Interaction/BridgeSpyStallHandler.js +1 -1
  271. package/Libraries/Interaction/InteractionManager.d.ts +74 -0
  272. package/Libraries/Interaction/InteractionManager.js +8 -8
  273. package/Libraries/Interaction/NativeFrameRateLogger.js +1 -0
  274. package/Libraries/Interaction/PanResponder.d.ts +202 -0
  275. package/Libraries/Interaction/PanResponder.flow.js +257 -0
  276. package/Libraries/Interaction/PanResponder.js +4 -3
  277. package/Libraries/JSInspector/JSInspector.js +0 -3
  278. package/Libraries/JSInspector/NetworkAgent.js +3 -3
  279. package/Libraries/LayoutAnimation/LayoutAnimation.d.ts +84 -0
  280. package/Libraries/LayoutAnimation/LayoutAnimation.js +4 -3
  281. package/Libraries/Linking/Linking.d.ts +61 -0
  282. package/Libraries/Linking/Linking.js +3 -2
  283. package/Libraries/Linking/NativeIntentAndroid.js +1 -0
  284. package/Libraries/Linking/NativeLinkingManager.js +1 -0
  285. package/Libraries/Lists/CellRenderMask.js +13 -3
  286. package/Libraries/Lists/ChildListCollection.js +72 -0
  287. package/Libraries/Lists/FillRateHelper.js +28 -17
  288. package/Libraries/Lists/FlatList.d.ts +292 -0
  289. package/Libraries/Lists/FlatList.js +70 -70
  290. package/Libraries/Lists/SectionList.d.ts +300 -0
  291. package/Libraries/Lists/SectionList.js +5 -5
  292. package/Libraries/Lists/SectionListModern.js +6 -6
  293. package/Libraries/Lists/StateSafePureComponent.js +85 -0
  294. package/Libraries/Lists/ViewabilityHelper.js +33 -12
  295. package/Libraries/Lists/VirtualizeUtils.js +17 -13
  296. package/Libraries/Lists/VirtualizedList.d.ts +317 -0
  297. package/Libraries/Lists/VirtualizedList.js +548 -890
  298. package/Libraries/Lists/VirtualizedListCellRenderer.js +259 -0
  299. package/Libraries/Lists/VirtualizedListContext.js +7 -48
  300. package/Libraries/Lists/VirtualizedListProps.js +279 -0
  301. package/Libraries/Lists/VirtualizedSectionList.js +6 -3
  302. package/Libraries/Lists/__flowtests__/SectionList-flowtest.js +1 -1
  303. package/Libraries/LogBox/Data/LogBoxData.js +9 -8
  304. package/Libraries/LogBox/Data/LogBoxLog.js +5 -5
  305. package/Libraries/LogBox/Data/LogBoxSymbolication.js +4 -4
  306. package/Libraries/LogBox/Data/parseLogBoxLog.js +5 -3
  307. package/Libraries/LogBox/LogBox.d.ts +28 -0
  308. package/Libraries/LogBox/LogBox.js +11 -11
  309. package/Libraries/LogBox/LogBoxInspectorContainer.js +5 -3
  310. package/Libraries/LogBox/LogBoxNotificationContainer.js +2 -2
  311. package/Libraries/LogBox/UI/AnsiHighlight.js +5 -3
  312. package/Libraries/LogBox/UI/LogBoxButton.js +6 -5
  313. package/Libraries/LogBox/UI/LogBoxInspector.js +6 -6
  314. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +9 -8
  315. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +3 -3
  316. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +7 -6
  317. package/Libraries/LogBox/UI/LogBoxInspectorHeader.win32.js +6 -5
  318. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +6 -5
  319. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +7 -6
  320. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
  321. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +3 -3
  322. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.js +5 -5
  323. package/Libraries/LogBox/UI/LogBoxInspectorStackFrame.win32.js +5 -5
  324. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +5 -5
  325. package/Libraries/LogBox/UI/LogBoxMessage.js +3 -3
  326. package/Libraries/LogBox/UI/LogBoxNotification.js +6 -5
  327. package/Libraries/Modal/Modal.d.ts +104 -0
  328. package/Libraries/Modal/Modal.js +14 -14
  329. package/Libraries/Modal/NativeModalManager.js +1 -0
  330. package/Libraries/Modal/RCTModalHostViewNativeComponent.js +3 -3
  331. package/Libraries/NativeComponent/BaseViewConfig.android.js +27 -2
  332. package/Libraries/NativeComponent/BaseViewConfig.ios.js +8 -3
  333. package/Libraries/NativeComponent/BaseViewConfig.win32.js +8 -3
  334. package/Libraries/NativeComponent/NativeComponentRegistry.js +5 -4
  335. package/Libraries/NativeComponent/PlatformBaseViewConfig.js +1 -0
  336. package/Libraries/NativeComponent/StaticViewConfigValidator.js +1 -1
  337. package/Libraries/NativeComponent/ViewConfig.js +1 -0
  338. package/Libraries/NativeModules/specs/NativeAnimationsDebugModule.js +1 -0
  339. package/Libraries/NativeModules/specs/NativeDevMenu.js +1 -0
  340. package/Libraries/NativeModules/specs/NativeDevSettings.js +1 -0
  341. package/Libraries/NativeModules/specs/NativeDeviceEventManager.js +1 -0
  342. package/Libraries/NativeModules/specs/NativeDialogManagerAndroid.js +1 -0
  343. package/Libraries/NativeModules/specs/NativeLogBox.js +3 -2
  344. package/Libraries/NativeModules/specs/NativeRedBox.js +1 -0
  345. package/Libraries/NativeModules/specs/NativeSourceCode.js +1 -0
  346. package/Libraries/Network/NativeNetworkingAndroid.js +1 -0
  347. package/Libraries/Network/NativeNetworkingIOS.js +1 -0
  348. package/Libraries/Network/RCTNetworking.android.js +4 -3
  349. package/Libraries/Network/RCTNetworking.ios.js +3 -2
  350. package/Libraries/Network/RCTNetworking.win32.js +1 -0
  351. package/Libraries/Network/convertRequestBody.js +1 -2
  352. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -1
  353. package/Libraries/NewAppScreen/components/Header.js +6 -2
  354. package/Libraries/NewAppScreen/components/HermesBadge.js +6 -2
  355. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +8 -9
  356. package/Libraries/NewAppScreen/components/ReloadInstructions.js +4 -1
  357. package/Libraries/NewAppScreen/index.js +1 -1
  358. package/Libraries/Performance/NativeJSCSamplingProfiler.js +1 -0
  359. package/Libraries/Performance/QuickPerformanceLogger.js +34 -10
  360. package/Libraries/Performance/Systrace.d.ts +66 -0
  361. package/Libraries/Performance/Systrace.js +110 -195
  362. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  363. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +115 -0
  364. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +5 -4
  365. package/Libraries/Pressability/Pressability.js +12 -10
  366. package/Libraries/Pressability/Pressability.win32.js +9 -7
  367. package/Libraries/Pressability/PressabilityDebug.js +2 -2
  368. package/Libraries/PushNotificationIOS/NativePushNotificationManagerIOS.js +1 -0
  369. package/Libraries/PushNotificationIOS/PushNotificationIOS.d.ts +275 -0
  370. package/Libraries/PushNotificationIOS/PushNotificationIOS.js +19 -14
  371. package/Libraries/ReactNative/AppContainer.js +17 -7
  372. package/Libraries/ReactNative/AppRegistry.d.ts +68 -0
  373. package/Libraries/ReactNative/AppRegistry.js +11 -14
  374. package/Libraries/ReactNative/BridgelessUIManager.js +4 -3
  375. package/Libraries/ReactNative/FabricUIManager.js +3 -3
  376. package/Libraries/ReactNative/I18nManager.d.ts +25 -0
  377. package/Libraries/ReactNative/NativeHeadlessJsTaskSupport.js +1 -0
  378. package/Libraries/ReactNative/NativeI18nManager.js +1 -0
  379. package/Libraries/ReactNative/NativeUIManager.js +1 -0
  380. package/Libraries/ReactNative/PaperUIManager.js +2 -2
  381. package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
  382. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +9 -0
  383. package/Libraries/ReactNative/RendererImplementation.js +112 -0
  384. package/Libraries/ReactNative/RendererProxy.d.ts +20 -0
  385. package/Libraries/ReactNative/RendererProxy.js +26 -0
  386. package/Libraries/ReactNative/RootTag.js +0 -1
  387. package/Libraries/ReactNative/UIManager.d.ts +157 -0
  388. package/Libraries/ReactNative/UIManager.js +1 -1
  389. package/Libraries/ReactNative/getCachedComponentWithDebugName.js +1 -0
  390. package/Libraries/ReactNative/renderApplication.js +38 -20
  391. package/Libraries/ReactNative/requireNativeComponent.d.ts +23 -0
  392. package/Libraries/ReactNative/requireNativeComponent.js +2 -2
  393. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +10 -9
  394. package/Libraries/Renderer/implementations/ReactFabric-dev.js +312 -217
  395. package/Libraries/Renderer/implementations/ReactFabric-prod.js +212 -177
  396. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +248 -213
  397. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +311 -218
  398. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +226 -196
  399. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +262 -232
  400. package/Libraries/Renderer/implementations/ReactNativeRenderer.d.ts +149 -0
  401. package/Libraries/Renderer/shims/ReactFabric.js +2 -2
  402. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -2
  403. package/Libraries/Renderer/shims/ReactNative.js +2 -2
  404. package/Libraries/Renderer/shims/ReactNativeTypes.d.ts +141 -0
  405. package/Libraries/Renderer/shims/ReactNativeTypes.js +23 -22
  406. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +8 -8
  407. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -2
  408. package/Libraries/Settings/NativeSettingsManager.js +1 -0
  409. package/Libraries/Settings/Settings.d.ts +18 -0
  410. package/Libraries/Share/NativeShareModule.js +1 -0
  411. package/Libraries/Share/Share.d.ts +80 -0
  412. package/Libraries/Share/Share.js +7 -5
  413. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +1 -1
  414. package/Libraries/StyleSheet/PlatformColorValueTypes.d.ts +18 -0
  415. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +1 -1
  416. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.d.ts +25 -0
  417. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -0
  418. package/Libraries/StyleSheet/StyleSheet.d.ts +156 -0
  419. package/Libraries/StyleSheet/StyleSheet.js +15 -11
  420. package/Libraries/StyleSheet/StyleSheet.win32.js +16 -12
  421. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +332 -0
  422. package/Libraries/StyleSheet/StyleSheetTypes.js +101 -24
  423. package/Libraries/StyleSheet/__flowtests__/StyleSheet-flowtest.js +2 -2
  424. package/Libraries/StyleSheet/normalizeColor.js +3 -3
  425. package/Libraries/StyleSheet/private/_TransformStyle.js +26 -24
  426. package/Libraries/StyleSheet/processAspectRatio.js +53 -0
  427. package/Libraries/StyleSheet/processColor.d.ts +16 -0
  428. package/Libraries/StyleSheet/processColor.js +3 -4
  429. package/Libraries/StyleSheet/processColorArray.js +1 -0
  430. package/Libraries/StyleSheet/processFontVariant.js +30 -0
  431. package/Libraries/StyleSheet/processTransform.js +114 -105
  432. package/Libraries/StyleSheet/splitLayoutProps.js +5 -0
  433. package/Libraries/Text/Text.d.ts +209 -0
  434. package/Libraries/Text/Text.js +94 -12
  435. package/Libraries/Text/TextNativeComponent.js +49 -41
  436. package/Libraries/Text/TextNativeComponent.win32.js +67 -49
  437. package/Libraries/Text/TextProps.js +64 -7
  438. package/Libraries/{Components/MaskedView/MaskedViewIOS.win32.js → TurboModule/RCTExport.d.ts} +3 -4
  439. package/Libraries/TurboModule/TurboModuleRegistry.d.ts +15 -0
  440. package/Libraries/TurboModule/TurboModuleRegistry.js +3 -1
  441. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +1 -0
  442. package/Libraries/Types/CoreEventTypes.d.ts +263 -0
  443. package/Libraries/Types/CoreEventTypes.js +2 -1
  444. package/Libraries/Types/CoreEventTypes.win32.js +2 -1
  445. package/Libraries/Utilities/AcessibilityMapping.js +154 -0
  446. package/Libraries/Utilities/Appearance.d.ts +43 -0
  447. package/Libraries/Utilities/Appearance.js +3 -3
  448. package/Libraries/Utilities/BackHandler.android.js +3 -5
  449. package/Libraries/Utilities/BackHandler.d.ts +38 -0
  450. package/Libraries/Utilities/BackHandler.win32.js +3 -5
  451. package/Libraries/Utilities/DevSettings.d.ts +32 -0
  452. package/Libraries/Utilities/DevSettings.js +4 -2
  453. package/Libraries/Utilities/Dimensions.d.ts +79 -0
  454. package/Libraries/Utilities/Dimensions.js +2 -2
  455. package/Libraries/Utilities/Dimensions.win32.js +2 -2
  456. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -1
  457. package/Libraries/Utilities/HMRClient.js +23 -8
  458. package/Libraries/Utilities/LoadingView.ios.js +1 -1
  459. package/Libraries/Utilities/NativeAppearance.js +1 -0
  460. package/Libraries/Utilities/NativeDevLoadingView.js +1 -0
  461. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +1 -0
  462. package/Libraries/Utilities/NativeDeviceInfo.js +1 -0
  463. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +1 -0
  464. package/Libraries/Utilities/NativePlatformConstantsIOS.js +1 -0
  465. package/Libraries/Utilities/NativePlatformConstantsWin.js +1 -0
  466. package/Libraries/Utilities/PerformanceLoggerContext.js +3 -2
  467. package/Libraries/Utilities/PixelRatio.d.ts +64 -0
  468. package/Libraries/Utilities/Platform.android.js +11 -5
  469. package/Libraries/Utilities/Platform.d.ts +102 -0
  470. package/Libraries/Utilities/Platform.ios.js +12 -5
  471. package/Libraries/Utilities/Platform.win32.js +11 -5
  472. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  473. package/Libraries/Utilities/ReactNativeTestTools.js +9 -15
  474. package/Libraries/Utilities/codegenNativeCommands.js +1 -10
  475. package/Libraries/Utilities/codegenNativeComponent.js +4 -1
  476. package/Libraries/Utilities/createPerformanceLogger.js +7 -8
  477. package/Libraries/Utilities/differ/deepDiffer.js +1 -1
  478. package/Libraries/Utilities/groupByEveryN.js +1 -1
  479. package/Libraries/Utilities/stringifySafe.js +3 -1
  480. package/Libraries/Utilities/useColorScheme.js +3 -2
  481. package/Libraries/Utilities/useRefEffect.js +1 -1
  482. package/Libraries/Vibration/NativeVibration.js +1 -0
  483. package/Libraries/Vibration/Vibration.d.ts +43 -0
  484. package/Libraries/Vibration/Vibration.js +1 -0
  485. package/Libraries/WebPerformance/NativePerformanceObserver.js +41 -0
  486. package/Libraries/WebPerformance/PerformanceObserver.js +223 -0
  487. package/Libraries/WebSocket/NativeWebSocketModule.js +1 -0
  488. package/Libraries/WebSocket/WebSocket.js +11 -3
  489. package/Libraries/WebSocket/WebSocketInterceptor.js +1 -1
  490. package/Libraries/YellowBox/YellowBoxDeprecated.d.ts +19 -0
  491. package/Libraries/YellowBox/YellowBoxDeprecated.js +2 -3
  492. package/Libraries/__flowtests__/ReactNativeTypes-flowtest.js +2 -1
  493. package/Libraries/__tests__/ButtonWin32-test.js +16 -0
  494. package/Libraries/platform-types.d.ts +25 -0
  495. package/Libraries/vendor/core/ErrorUtils.d.ts +15 -0
  496. package/Libraries/vendor/emitter/EventEmitter.d.ts +164 -0
  497. package/babel.config.js +3 -0
  498. package/flow/jest.js +2 -2
  499. package/flow-typed/npm/{react-dom_v16.x.x.js → react-dom_v17.x.x.js} +58 -31
  500. package/flow-typed/npm/yargs_v17.x.x.js +341 -0
  501. package/index.js +89 -55
  502. package/index.win32.js +89 -55
  503. package/interface.js +8 -0
  504. package/jest/react-native-env.js +18 -0
  505. package/jest/renderer.js +2 -2
  506. package/jest/setup.js +7 -9
  507. package/jest.config.js +9 -2
  508. package/overrides.json +40 -101
  509. package/package.json +34 -33
  510. package/src/Libraries/Components/TextInput/TextInput.win32.tsx +2 -1
  511. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  512. package/src/Libraries/Components/Touchable/TouchableWin32.Props.tsx +2 -1
  513. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  514. package/src/Libraries/__tests__/__snapshots__/ButtonWin32-test.js.snap +22 -0
  515. package/src/Libraries/platform-types.d.ts +25 -0
  516. package/types/index.d.ts +215 -0
  517. package/IntegrationTests/AsyncStorageTest.js +0 -261
  518. package/Libraries/Components/MaskedView/MaskedViewIOS.ios.js +0 -93
  519. package/Libraries/Components/MaskedView/RCTMaskedViewNativeComponent.js +0 -21
  520. package/Libraries/Core/setUpSystrace.js +0 -21
  521. package/Libraries/Image/ImagePickerIOS.js +0 -103
  522. package/Libraries/Image/NativeImagePickerIOS.js +0 -38
  523. package/Libraries/Lists/VirtualizedList.win32.js +0 -9
  524. package/Libraries/Lists/__tests__/CellRenderMask-test.js +0 -179
  525. package/Libraries/Lists/__tests__/FillRateHelper-test.js +0 -120
  526. package/Libraries/Lists/__tests__/FlatList-test.js +0 -155
  527. package/Libraries/Lists/__tests__/SectionList-test.js +0 -109
  528. package/Libraries/Lists/__tests__/ViewabilityHelper-test.js +0 -440
  529. package/Libraries/Lists/__tests__/VirtualizeUtils-test.js +0 -91
  530. package/Libraries/Lists/__tests__/VirtualizedList-test.js +0 -1587
  531. package/Libraries/Lists/__tests__/VirtualizedSectionList-test.js +0 -269
  532. package/Libraries/Storage/AsyncStorage.js +0 -385
  533. package/Libraries/Storage/NativeAsyncLocalStorage.js +0 -44
  534. package/Libraries/Storage/NativeAsyncSQLiteDBStorage.js +0 -44
  535. package/Libraries/Utilities/JSDevSupportModule.js +0 -37
  536. package/Libraries/Utilities/NativeJSDevSupport.js +0 -23
  537. package/rntypes/BatchedBridge.d.ts +0 -23
  538. package/rntypes/Devtools.d.ts +0 -20
  539. package/rntypes/LaunchScreen.d.ts +0 -9
  540. package/rntypes/globals.d.ts +0 -497
  541. package/rntypes/index.d.ts +0 -9754
  542. package/rntypes/legacy-properties.d.ts +0 -238
  543. package/src/Libraries/Lists/__tests__/__snapshots__/FlatList-test.js.snap +0 -427
  544. package/src/Libraries/Lists/__tests__/__snapshots__/SectionList-test.js.snap +0 -391
  545. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedList-test.js.snap +0 -4565
  546. package/src/Libraries/Lists/__tests__/__snapshots__/VirtualizedSectionList-test.js.snap +0 -1153
  547. package/src/rntypes/BatchedBridge.d.ts +0 -23
  548. package/src/rntypes/Devtools.d.ts +0 -20
  549. package/src/rntypes/LaunchScreen.d.ts +0 -9
  550. package/src/rntypes/globals.d.ts +0 -497
  551. package/src/rntypes/index.d.ts +0 -9754
  552. package/src/rntypes/legacy-properties.d.ts +0 -238
  553. package/src/typings-index.ts +0 -37
  554. package/typings-index.d.ts +0 -23
  555. package/typings-index.js +0 -47
  556. 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;