@office-iss/react-native-win32 0.0.0-canary.282 → 0.0.0-canary.284

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 (244) hide show
  1. package/.flowconfig +1 -1
  2. package/CHANGELOG.json +79 -1
  3. package/CHANGELOG.md +28 -4
  4. package/IntegrationTests/AccessibilityManagerTest.js +17 -12
  5. package/IntegrationTests/AppEventsTest.js +47 -32
  6. package/IntegrationTests/GlobalEvalWithSourceUrlTest.js +10 -14
  7. package/IntegrationTests/ImageCachePolicyTest.js +64 -81
  8. package/IntegrationTests/ImageSnapshotTest.js +17 -20
  9. package/IntegrationTests/IntegrationTestHarnessTest.js +34 -52
  10. package/IntegrationTests/IntegrationTestsApp.js +11 -6
  11. package/IntegrationTests/LayoutEventsTest.js +1 -1
  12. package/IntegrationTests/LoggingTestModule.js +2 -1
  13. package/IntegrationTests/PromiseTest.js +51 -43
  14. package/IntegrationTests/SimpleSnapshotTest.js +19 -24
  15. package/IntegrationTests/SyncMethodTest.js +9 -13
  16. package/IntegrationTests/TimersTest.js +3 -3
  17. package/Libraries/ActionSheetIOS/ActionSheetIOS.js +3 -3
  18. package/Libraries/Alert/Alert.js +1 -1
  19. package/Libraries/Alert/Alert.win32.js +1 -1
  20. package/Libraries/Alert/RCTAlertManager.android.js +1 -1
  21. package/Libraries/Alert/RCTAlertManager.ios.js +1 -1
  22. package/Libraries/Animated/AnimatedMock.js +1 -1
  23. package/Libraries/Animated/AnimatedWeb.js +27 -9
  24. package/Libraries/Animated/nodes/AnimatedValue.js +35 -13
  25. package/Libraries/Animated/useAnimatedProps.js +47 -85
  26. package/Libraries/AppState/AppState.js +1 -1
  27. package/Libraries/BatchedBridge/BatchedBridge.js +4 -2
  28. package/Libraries/BatchedBridge/MessageQueue.js +2 -2
  29. package/Libraries/BatchedBridge/NativeModules.js +4 -3
  30. package/Libraries/Blob/Blob.js +4 -4
  31. package/Libraries/Blob/BlobManager.js +3 -2
  32. package/Libraries/Blob/BlobRegistry.js +3 -9
  33. package/Libraries/Blob/File.js +3 -2
  34. package/Libraries/Blob/FileReader.js +1 -1
  35. package/Libraries/BugReporting/BugReporting.js +2 -2
  36. package/Libraries/BugReporting/dumpReactTree.js +2 -2
  37. package/Libraries/BugReporting/getReactData.js +1 -1
  38. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +1 -1
  39. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.ios.js +1 -1
  40. package/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.win32.js +1 -1
  41. package/Libraries/Components/ActivityIndicator/ActivityIndicator.js +5 -5
  42. package/Libraries/Components/Button.js +2 -2
  43. package/Libraries/Components/Button.win32.js +2 -2
  44. package/Libraries/Components/Clipboard/Clipboard.js +1 -1
  45. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +7 -7
  46. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.js +1 -2
  47. package/Libraries/Components/Keyboard/Keyboard.js +9 -9
  48. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +4 -4
  49. package/Libraries/Components/Pressable/Pressable.js +4 -4
  50. package/Libraries/Components/Pressable/Pressable.win32.js +4 -4
  51. package/Libraries/Components/Pressable/useAndroidRippleForView.js +9 -9
  52. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.android.js +10 -11
  53. package/Libraries/Components/ProgressBarAndroid/ProgressBarAndroid.js +1 -1
  54. package/Libraries/Components/RefreshControl/RefreshControl.js +9 -9
  55. package/Libraries/Components/ScrollView/ScrollView.js +32 -26
  56. package/Libraries/Components/ScrollView/ScrollViewCommands.js +2 -2
  57. package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +2 -2
  58. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +1 -1
  59. package/Libraries/Components/ScrollView/processDecelerationRate.js +1 -1
  60. package/Libraries/Components/Sound/SoundManager.js +1 -1
  61. package/Libraries/Components/StaticRenderer.js +4 -4
  62. package/Libraries/Components/StatusBar/StatusBar.js +33 -18
  63. package/Libraries/Components/Switch/Switch.js +6 -6
  64. package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +31 -31
  65. package/Libraries/Components/TextInput/InputAccessoryView.js +2 -2
  66. package/Libraries/Components/TextInput/TextInput.flow.js +35 -35
  67. package/Libraries/Components/TextInput/TextInput.js +35 -35
  68. package/Libraries/Components/TextInput/TextInput.win32.js +35 -35
  69. package/Libraries/Components/TextInput/TextInputNativeCommands.js +1 -1
  70. package/Libraries/Components/ToastAndroid/ToastAndroid.d.ts +68 -6
  71. package/Libraries/Components/Touchable/TouchableBounce.js +5 -5
  72. package/Libraries/Components/Touchable/TouchableHighlight.js +11 -11
  73. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +14 -14
  74. package/Libraries/Components/Touchable/TouchableNativeFeedback.win32.js +6 -6
  75. package/Libraries/Components/Touchable/TouchableOpacity.js +6 -6
  76. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  77. package/Libraries/Components/UnimplementedViews/UnimplementedView.js +9 -1
  78. package/Libraries/Components/View/ViewAccessibility.js +2 -2
  79. package/Libraries/Components/View/ViewAccessibility.win32.js +2 -2
  80. package/Libraries/Components/View/ViewPropTypes.js +22 -22
  81. package/Libraries/Components/View/ViewPropTypes.win32.js +22 -22
  82. package/Libraries/Core/RawEventEmitter.js +2 -2
  83. package/Libraries/Core/ReactNativeVersion.js +3 -5
  84. package/Libraries/Core/Timers/JSTimers.js +3 -3
  85. package/Libraries/Core/polyfillPromise.js +1 -1
  86. package/Libraries/Core/registerCallableModule.js +1 -1
  87. package/Libraries/Core/setUpAlert.js +1 -1
  88. package/Libraries/Core/setUpDeveloperTools.js +0 -2
  89. package/Libraries/Core/setUpErrorHandling.js +6 -1
  90. package/Libraries/Core/setUpReactDevTools.js +1 -1
  91. package/Libraries/Core/setUpTimers.js +35 -56
  92. package/Libraries/Core/setUpXHR.js +5 -5
  93. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +2 -1
  94. package/Libraries/Events/CustomEvent.js +2 -2
  95. package/Libraries/Image/AssetRegistry.js +6 -1
  96. package/Libraries/Image/AssetSourceResolver.js +2 -2
  97. package/Libraries/Image/ImageProps.js +17 -17
  98. package/Libraries/Image/nativeImageSource.js +2 -2
  99. package/Libraries/Inspector/ElementProperties.js +4 -3
  100. package/Libraries/Inspector/Inspector.js +1 -1
  101. package/Libraries/Inspector/Inspector.win32.js +1 -1
  102. package/Libraries/Inspector/InspectorOverlay.js +4 -3
  103. package/Libraries/Inspector/InspectorOverlay.win32.js +3 -3
  104. package/Libraries/Inspector/InspectorPanel.js +6 -6
  105. package/Libraries/Inspector/NetworkOverlay.js +6 -5
  106. package/Libraries/Inspector/PerformanceOverlay.js +2 -1
  107. package/Libraries/Inspector/resolveBoxStyle.js +2 -2
  108. package/Libraries/Interaction/InteractionManager.js +3 -2
  109. package/Libraries/Interaction/PanResponder.js +6 -6
  110. package/Libraries/Interaction/TouchHistoryMath.js +26 -0
  111. package/Libraries/JSInspector/NetworkAgent.js +2 -1
  112. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -2
  113. package/Libraries/Linking/Linking.js +0 -1
  114. package/Libraries/Lists/FlatList.js +9 -10
  115. package/Libraries/Lists/SectionList.js +7 -9
  116. package/Libraries/Lists/SectionListModern.js +6 -6
  117. package/Libraries/LogBox/Data/LogBoxData.js +14 -14
  118. package/Libraries/LogBox/Data/LogBoxLog.js +51 -29
  119. package/Libraries/LogBox/Data/parseLogBoxLog.js +10 -10
  120. package/Libraries/LogBox/LogBox.js +13 -1
  121. package/Libraries/LogBox/LogBoxInspectorContainer.js +3 -3
  122. package/Libraries/LogBox/LogBoxNotificationContainer.js +3 -3
  123. package/Libraries/LogBox/UI/LogBoxButton.js +4 -4
  124. package/Libraries/LogBox/UI/LogBoxInspectorBody.js +8 -2
  125. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.js +50 -31
  126. package/Libraries/LogBox/UI/LogBoxInspectorCodeFrame.win32.js +50 -31
  127. package/Libraries/LogBox/UI/LogBoxInspectorMessageHeader.js +2 -2
  128. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.js +2 -2
  129. package/Libraries/LogBox/UI/LogBoxInspectorReactFrames.win32.js +2 -2
  130. package/Libraries/LogBox/UI/LogBoxInspectorSection.js +2 -2
  131. package/Libraries/LogBox/UI/LogBoxInspectorSourceMapStatus.js +2 -2
  132. package/Libraries/LogBox/UI/LogBoxInspectorStackFrames.js +2 -2
  133. package/Libraries/Modal/Modal.js +7 -7
  134. package/Libraries/Network/XMLHttpRequest.js +1 -1
  135. package/Libraries/Network/convertRequestBody.js +3 -1
  136. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +4 -4
  137. package/Libraries/Pressability/Pressability.js +10 -10
  138. package/Libraries/Pressability/Pressability.win32.js +10 -10
  139. package/Libraries/Pressability/PressabilityDebug.js +2 -2
  140. package/Libraries/Pressability/PressabilityPerformanceEventEmitter.js +2 -2
  141. package/Libraries/Promise.js +2 -2
  142. package/Libraries/ReactNative/AppContainer.js +2 -2
  143. package/Libraries/ReactNative/BridgelessUIManager.js +3 -8
  144. package/Libraries/ReactNative/I18nManager.js +3 -2
  145. package/Libraries/ReactNative/PaperUIManager.js +1 -1
  146. package/Libraries/ReactNative/PaperUIManager.win32.js +1 -1
  147. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +2 -2
  148. package/Libraries/ReactNative/ReactNativeRuntimeDiagnostics.js +2 -2
  149. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +3 -2
  150. package/Libraries/StyleSheet/Rect.js +2 -2
  151. package/Libraries/StyleSheet/StyleSheet.js +1 -1
  152. package/Libraries/StyleSheet/StyleSheet.win32.js +1 -1
  153. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +1 -1
  154. package/Libraries/StyleSheet/private/_TransformStyle.js +18 -18
  155. package/Libraries/StyleSheet/processBackgroundImage.js +138 -136
  156. package/Libraries/Text/TextAncestor.js +1 -2
  157. package/Libraries/TurboModule/TurboModuleRegistry.js +1 -1
  158. package/Libraries/Types/CodegenTypes.js +2 -1
  159. package/Libraries/Types/CoreEventTypes.js +40 -40
  160. package/Libraries/Types/CoreEventTypes.win32.js +40 -40
  161. package/Libraries/UTFSequence.js +2 -2
  162. package/Libraries/Utilities/BackHandler.android.js +2 -2
  163. package/Libraries/Utilities/BackHandler.ios.js +2 -2
  164. package/Libraries/Utilities/BackHandler.win32.js +2 -2
  165. package/Libraries/Utilities/HMRClient.js +2 -2
  166. package/Libraries/Utilities/Platform.android.js +4 -4
  167. package/Libraries/Utilities/Platform.flow.js +8 -8
  168. package/Libraries/Utilities/Platform.flow.win32.js +8 -8
  169. package/Libraries/Utilities/Platform.ios.js +4 -4
  170. package/Libraries/Utilities/Platform.win32.js +2 -2
  171. package/Libraries/Utilities/ReactNativeTestTools.js +3 -2
  172. package/Libraries/Utilities/codegenNativeCommands.js +2 -2
  173. package/Libraries/Utilities/codegenNativeComponent.js +2 -2
  174. package/Libraries/Utilities/differ/deepDiffer.js +3 -3
  175. package/Libraries/Utilities/stringifySafe.js +2 -2
  176. package/Libraries/Vibration/Vibration.js +1 -1
  177. package/Libraries/WebSocket/WebSocketEvent.js +1 -1
  178. package/Libraries/YellowBox/YellowBoxDeprecated.js +4 -3
  179. package/Libraries/vendor/core/ErrorUtils.js +1 -1
  180. package/flow/jest.js +14 -14
  181. package/index.js +16 -13
  182. package/index.win32.js +16 -13
  183. package/jest/setup.js +214 -197
  184. package/overrides.json +26 -26
  185. package/package.json +16 -16
  186. package/src/private/featureflags/ReactNativeFeatureFlags.js +11 -30
  187. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +3 -2
  188. package/src/private/specs/components/ActivityIndicatorViewNativeComponent.js +2 -2
  189. package/src/private/specs/components/AndroidDrawerLayoutNativeComponent.js +6 -6
  190. package/src/private/specs/components/AndroidHorizontalScrollContentViewNativeComponent.js +2 -2
  191. package/src/private/specs/components/AndroidSwipeRefreshLayoutNativeComponent.js +2 -2
  192. package/src/private/specs/components/AndroidSwitchNativeComponent.js +4 -4
  193. package/src/private/specs/components/DebuggingOverlayNativeComponent.js +2 -2
  194. package/src/private/specs/components/ProgressBarAndroidNativeComponent.js +2 -2
  195. package/src/private/specs/components/PullToRefreshViewNativeComponent.js +2 -2
  196. package/src/private/specs/components/RCTInputAccessoryViewNativeComponent.js +2 -2
  197. package/src/private/specs/components/RCTModalHostViewNativeComponent.js +4 -4
  198. package/src/private/specs/components/RCTSafeAreaViewNativeComponent.js +2 -2
  199. package/src/private/specs/components/SwitchNativeComponent.js +4 -4
  200. package/src/private/specs/components/UnimplementedNativeViewNativeComponent.js +2 -2
  201. package/src/private/specs/modules/NativeAccessibilityManager.js +2 -2
  202. package/src/private/specs/modules/NativeActionSheetManager.js +7 -7
  203. package/src/private/specs/modules/NativeAlertManager.js +2 -2
  204. package/src/private/specs/modules/NativeAnimatedModule.js +2 -2
  205. package/src/private/specs/modules/NativeAnimatedTurboModule.js +2 -2
  206. package/src/private/specs/modules/NativeAppState.js +3 -3
  207. package/src/private/specs/modules/NativeBlobModule.js +1 -1
  208. package/src/private/specs/modules/NativeClipboard.js +1 -1
  209. package/src/private/specs/modules/NativeDeviceInfo.js +8 -8
  210. package/src/private/specs/modules/NativeDialogManagerAndroid.js +4 -4
  211. package/src/private/specs/modules/NativeExceptionsManager.js +2 -2
  212. package/src/private/specs/modules/NativeFantom.js +6 -0
  213. package/src/private/specs/modules/NativeFrameRateLogger.js +1 -1
  214. package/src/private/specs/modules/NativeI18nManager.js +2 -2
  215. package/src/private/specs/modules/NativeImageEditor.js +9 -9
  216. package/src/private/specs/modules/NativeImageLoaderAndroid.js +1 -1
  217. package/src/private/specs/modules/NativeImageLoaderIOS.js +1 -1
  218. package/src/private/specs/modules/NativeImageLoaderWin32.js +1 -1
  219. package/src/private/specs/modules/NativeImageStoreAndroid.js +1 -1
  220. package/src/private/specs/modules/NativeImageStoreIOS.js +3 -3
  221. package/src/private/specs/modules/NativeNetworkingIOS.js +2 -2
  222. package/src/private/specs/modules/NativePlatformConstantsAndroid.js +4 -4
  223. package/src/private/specs/modules/NativePlatformConstantsIOS.js +4 -4
  224. package/src/private/specs/modules/NativePlatformConstantsWin.js +5 -10
  225. package/src/private/specs/modules/NativePushNotificationManagerIOS.js +7 -7
  226. package/src/private/specs/modules/NativeSampleTurboModule.js +2 -2
  227. package/src/private/specs/modules/NativeSettingsManager.js +2 -2
  228. package/src/private/specs/modules/NativeShareModule.js +3 -3
  229. package/src/private/specs/modules/NativeSourceCode.js +2 -2
  230. package/src/private/specs/modules/NativeStatusBarManagerAndroid.js +4 -4
  231. package/src/private/specs/modules/NativeStatusBarManagerIOS.js +6 -6
  232. package/src/private/specs/modules/NativeToastAndroid.js +2 -2
  233. package/src/private/specs/modules/NativeVibration.js +1 -1
  234. package/src/private/specs/modules/NativeWebSocketModule.js +1 -1
  235. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +2 -2
  236. package/src/private/webapis/intersectionobserver/{IntersectionObserverManager.js → internals/IntersectionObserverManager.js} +9 -9
  237. package/src/private/webapis/mutationobserver/MutationObserver.js +2 -2
  238. package/src/private/webapis/mutationobserver/{MutationObserverManager.js → internals/MutationObserverManager.js} +8 -8
  239. package/src/private/webapis/performance/EventTiming.js +1 -1
  240. package/src/private/webapis/performance/Performance.js +3 -3
  241. package/src/private/webapis/performance/PerformanceObserver.js +2 -2
  242. package/src/private/webapis/performance/{RawPerformanceEntry.js → internals/RawPerformanceEntry.js} +6 -6
  243. package/src/private/webapis/performance/{Utilities.js → internals/Utilities.js} +1 -1
  244. package/src/private/webapis/performance/specs/__mocks__/NativePerformanceMock.js +1 -1
@@ -17,13 +17,13 @@ import * as ReactNativeFeatureFlags from '../../src/private/featureflags/ReactNa
17
17
  import {isPublicInstance as isFabricPublicInstance} from '../ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstanceUtils';
18
18
  import useRefEffect from '../Utilities/useRefEffect';
19
19
  import {AnimatedEvent} from './AnimatedEvent';
20
+ import AnimatedNode from './nodes/AnimatedNode';
20
21
  import AnimatedProps from './nodes/AnimatedProps';
22
+ import AnimatedValue from './nodes/AnimatedValue';
21
23
  import {
22
24
  useCallback,
23
25
  useEffect,
24
26
  useInsertionEffect,
25
- useLayoutEffect,
26
- useMemo,
27
27
  useReducer,
28
28
  useRef,
29
29
  } from 'react';
@@ -37,10 +37,10 @@ type CallbackRef<T> = T => mixed;
37
37
 
38
38
  type UpdateCallback = () => void;
39
39
 
40
- const useMemoOrAnimatedPropsMemo =
41
- ReactNativeFeatureFlags.enableAnimatedPropsMemo()
42
- ? useAnimatedPropsMemo
43
- : useMemo;
40
+ type AnimatedValueListeners = Array<{
41
+ propValue: AnimatedValue,
42
+ listenerId: string,
43
+ }>;
44
44
 
45
45
  export default function useAnimatedProps<TProps: {...}, TInstance>(
46
46
  props: TProps,
@@ -50,28 +50,14 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
50
50
  const onUpdateRef = useRef<UpdateCallback | null>(null);
51
51
  const timerRef = useRef<TimeoutID | null>(null);
52
52
 
53
- const allowlistIfEnabled = ReactNativeFeatureFlags.enableAnimatedAllowlist()
54
- ? allowlist
55
- : null;
56
-
57
- const node = useMemoOrAnimatedPropsMemo(
58
- () =>
59
- new AnimatedProps(
60
- props,
61
- () => onUpdateRef.current?.(),
62
- allowlistIfEnabled,
63
- ),
64
- [allowlistIfEnabled, props],
53
+ const node = useAnimatedPropsMemo(
54
+ () => new AnimatedProps(props, () => onUpdateRef.current?.(), allowlist),
55
+ [allowlist, props],
65
56
  );
66
57
 
67
58
  const useNativePropsInFabric =
68
59
  ReactNativeFeatureFlags.shouldUseSetNativePropsInFabric();
69
60
 
70
- const useAnimatedPropsLifecycle =
71
- ReactNativeFeatureFlags.useInsertionEffectsForAnimations()
72
- ? useAnimatedPropsLifecycle_insertionEffects
73
- : useAnimatedPropsLifecycle_layoutEffects;
74
-
75
61
  useAnimatedPropsLifecycle(node);
76
62
 
77
63
  // TODO: This "effect" does three things:
@@ -162,6 +148,7 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
162
148
 
163
149
  const target = getEventTarget(instance);
164
150
  const events = [];
151
+ const animatedValueListeners: AnimatedValueListeners = [];
165
152
 
166
153
  for (const propName in props) {
167
154
  // $FlowFixMe[invalid-computed-prop]
@@ -169,6 +156,8 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
169
156
  if (propValue instanceof AnimatedEvent && propValue.__isNative) {
170
157
  propValue.__attach(target, propName);
171
158
  events.push([propName, propValue]);
159
+ // $FlowFixMe[incompatible-call] - the `addListenersToPropsValue` drills down the propValue.
160
+ addListenersToPropsValue(propValue, animatedValueListeners);
172
161
  }
173
162
  }
174
163
 
@@ -178,6 +167,10 @@ export default function useAnimatedProps<TProps: {...}, TInstance>(
178
167
  for (const [propName, propValue] of events) {
179
168
  propValue.__detach(target, propName);
180
169
  }
170
+
171
+ for (const {propValue, listenerId} of animatedValueListeners) {
172
+ propValue.removeListener(listenerId);
173
+ }
181
174
  };
182
175
  },
183
176
  [node, useNativePropsInFabric, props],
@@ -194,13 +187,40 @@ function reduceAnimatedProps<TProps>(
194
187
  // Force `collapsable` to be false so that the native view is not flattened.
195
188
  // Flattened views cannot be accurately referenced by the native driver.
196
189
  return {
197
- ...(ReactNativeFeatureFlags.enableAnimatedPropsMemo()
198
- ? node.__getValueWithStaticProps(props)
199
- : node.__getValue()),
190
+ ...node.__getValueWithStaticProps(props),
200
191
  collapsable: false,
201
192
  };
202
193
  }
203
194
 
195
+ function addListenersToPropsValue(
196
+ propValue: AnimatedValue,
197
+ accumulator: AnimatedValueListeners,
198
+ ) {
199
+ // propValue can be a scalar value, an array or an object.
200
+ if (propValue instanceof AnimatedValue) {
201
+ const listenerId = propValue.addListener(() => {});
202
+ accumulator.push({propValue, listenerId});
203
+ } else if (Array.isArray(propValue)) {
204
+ // An array can be an array of scalar values, arrays of arrays, or arrays of objects
205
+ for (const prop of propValue) {
206
+ addListenersToPropsValue(prop, accumulator);
207
+ }
208
+ } else if (propValue instanceof Object) {
209
+ addAnimatedValuesListenersToProps(propValue, accumulator);
210
+ }
211
+ }
212
+
213
+ function addAnimatedValuesListenersToProps(
214
+ props: AnimatedNode,
215
+ accumulator: AnimatedValueListeners,
216
+ ) {
217
+ for (const propName in props) {
218
+ // $FlowFixMe[prop-missing] - This is an object contained in a prop, but we don't know the exact type.
219
+ const propValue = props[propName];
220
+ addListenersToPropsValue(propValue, accumulator);
221
+ }
222
+ }
223
+
204
224
  /**
205
225
  * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`
206
226
  * and `__detach`. However, this is more complicated because `AnimatedProps`
@@ -208,7 +228,7 @@ function reduceAnimatedProps<TProps>(
208
228
  * nodes. So in order to optimize this, we avoid detaching until the next attach
209
229
  * unless we are unmounting.
210
230
  */
211
- function useAnimatedPropsLifecycle_layoutEffects(node: AnimatedProps): void {
231
+ function useAnimatedPropsLifecycle(node: AnimatedProps): void {
212
232
  const prevNodeRef = useRef<?AnimatedProps>(null);
213
233
  const isUnmountingRef = useRef<boolean>(false);
214
234
 
@@ -233,51 +253,6 @@ function useAnimatedPropsLifecycle_layoutEffects(node: AnimatedProps): void {
233
253
  };
234
254
  });
235
255
 
236
- useLayoutEffect(() => {
237
- isUnmountingRef.current = false;
238
- return () => {
239
- isUnmountingRef.current = true;
240
- };
241
- }, []);
242
-
243
- useLayoutEffect(() => {
244
- node.__attach();
245
- if (prevNodeRef.current != null) {
246
- const prevNode = prevNodeRef.current;
247
- // TODO: Stop restoring default values (unless `reset` is called).
248
- prevNode.__restoreDefaultValues();
249
- prevNode.__detach();
250
- prevNodeRef.current = null;
251
- }
252
- return () => {
253
- if (isUnmountingRef.current) {
254
- // NOTE: Do not restore default values on unmount, see D18197735.
255
- node.__detach();
256
- } else {
257
- prevNodeRef.current = node;
258
- }
259
- };
260
- }, [node]);
261
- }
262
-
263
- /**
264
- * Manages the lifecycle of the supplied `AnimatedProps` by invoking `__attach`
265
- * and `__detach`. However, this is more complicated because `AnimatedProps`
266
- * uses reference counting to determine when to recursively detach its children
267
- * nodes. So in order to optimize this, we avoid detaching until the next attach
268
- * unless we are unmounting.
269
- */
270
- function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
271
- const prevNodeRef = useRef<?AnimatedProps>(null);
272
- const isUnmountingRef = useRef<boolean>(false);
273
-
274
- useEffect(() => {
275
- // It is ok for multiple components to call `flushQueue` because it noops
276
- // if the queue is empty. When multiple animated components are mounted at
277
- // the same time. Only first component flushes the queue and the others will noop.
278
- NativeAnimatedHelper.API.flushQueue();
279
- });
280
-
281
256
  useInsertionEffect(() => {
282
257
  isUnmountingRef.current = false;
283
258
  return () => {
@@ -287,17 +262,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
287
262
 
288
263
  useInsertionEffect(() => {
289
264
  node.__attach();
290
- let drivenAnimationEndedListener: ?EventSubscription = null;
291
-
292
- if (node.__isNative) {
293
- drivenAnimationEndedListener =
294
- NativeAnimatedHelper.nativeEventEmitter.addListener(
295
- 'onUserDrivenAnimationEnded',
296
- data => {
297
- node.update();
298
- },
299
- );
300
- }
301
265
  if (prevNodeRef.current != null) {
302
266
  const prevNode = prevNodeRef.current;
303
267
  // TODO: Stop restoring default values (unless `reset` is called).
@@ -312,8 +276,6 @@ function useAnimatedPropsLifecycle_insertionEffects(node: AnimatedProps): void {
312
276
  } else {
313
277
  prevNodeRef.current = node;
314
278
  }
315
-
316
- drivenAnimationEndedListener?.remove();
317
279
  };
318
280
  }, [node]);
319
281
  }
@@ -125,4 +125,4 @@ class AppState {
125
125
  }
126
126
  }
127
127
 
128
- module.exports = (new AppState(): AppState);
128
+ export default (new AppState(): AppState);
@@ -10,7 +10,9 @@
10
10
 
11
11
  'use strict';
12
12
 
13
- const MessageQueue = require('./MessageQueue');
13
+ import typeof MessageQueueT from './MessageQueue';
14
+
15
+ const MessageQueue: MessageQueueT = require('./MessageQueue').default;
14
16
 
15
17
  const BatchedBridge: MessageQueue = new MessageQueue();
16
18
 
@@ -25,4 +27,4 @@ Object.defineProperty(global, '__fbBatchedBridge', {
25
27
  value: BatchedBridge,
26
28
  });
27
29
 
28
- module.exports = BatchedBridge;
30
+ export default BatchedBridge;
@@ -14,7 +14,7 @@ const Systrace = require('../Performance/Systrace');
14
14
  const deepFreezeAndThrowOnMutationInDev = require('../Utilities/deepFreezeAndThrowOnMutationInDev');
15
15
  const stringifySafe = require('../Utilities/stringifySafe').default;
16
16
  const warnOnce = require('../Utilities/warnOnce');
17
- const ErrorUtils = require('../vendor/core/ErrorUtils');
17
+ const ErrorUtils = require('../vendor/core/ErrorUtils').default;
18
18
  const invariant = require('invariant');
19
19
 
20
20
  export type SpyData = {
@@ -489,4 +489,4 @@ class MessageQueue {
489
489
  }
490
490
  }
491
491
 
492
- module.exports = MessageQueue;
492
+ export default MessageQueue;
@@ -12,7 +12,7 @@
12
12
 
13
13
  import type {ExtendedError} from '../Core/ExtendedError';
14
14
 
15
- const BatchedBridge = require('./BatchedBridge');
15
+ const BatchedBridge = require('./BatchedBridge').default;
16
16
  const invariant = require('invariant');
17
17
 
18
18
  export type ModuleConfig = [
@@ -176,7 +176,8 @@ function updateErrorWithErrorData(
176
176
  return Object.assign(error, errorData || {});
177
177
  }
178
178
 
179
- let NativeModules: {[moduleName: string]: $FlowFixMe, ...} = {};
179
+ /* $FlowFixMe[unclear-type] unclear type of NativeModules */
180
+ let NativeModules: {[moduleName: string]: any, ...} = {};
180
181
  if (global.nativeModuleProxy) {
181
182
  NativeModules = global.nativeModuleProxy;
182
183
  } else {
@@ -209,4 +210,4 @@ if (global.nativeModuleProxy) {
209
210
  );
210
211
  }
211
212
 
212
- module.exports = NativeModules;
213
+ export default NativeModules;
@@ -58,7 +58,7 @@ class Blob {
58
58
  * Reference: https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob
59
59
  */
60
60
  constructor(parts: Array<Blob | string> = [], options?: BlobOptions) {
61
- const BlobManager = require('./BlobManager');
61
+ const BlobManager = require('./BlobManager').default;
62
62
  this.data = BlobManager.createFromParts(parts, options).data;
63
63
  }
64
64
 
@@ -82,7 +82,7 @@ class Blob {
82
82
  }
83
83
 
84
84
  slice(start?: number, end?: number, contentType: string = ''): Blob {
85
- const BlobManager = require('./BlobManager');
85
+ const BlobManager = require('./BlobManager').default;
86
86
  let {offset, size} = this.data;
87
87
 
88
88
  if (typeof start === 'number') {
@@ -132,7 +132,7 @@ class Blob {
132
132
  * `new Blob([blob, ...])` actually copies the data in memory.
133
133
  */
134
134
  close() {
135
- const BlobManager = require('./BlobManager');
135
+ const BlobManager = require('./BlobManager').default;
136
136
  BlobManager.release(this.data.blobId);
137
137
  this.data = null;
138
138
  }
@@ -155,4 +155,4 @@ class Blob {
155
155
  }
156
156
  }
157
157
 
158
- module.exports = Blob;
158
+ export default Blob;
@@ -8,12 +8,13 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import typeof BlobT from './Blob';
11
12
  import type {BlobCollector, BlobData, BlobOptions} from './BlobTypes';
12
13
 
13
14
  import NativeBlobModule from './NativeBlobModule';
14
15
  import invariant from 'invariant';
15
16
 
16
- const Blob = require('./Blob');
17
+ const Blob: BlobT = require('./Blob').default;
17
18
  const BlobRegistry = require('./BlobRegistry');
18
19
 
19
20
  /*eslint-disable no-bitwise */
@@ -176,4 +177,4 @@ class BlobManager {
176
177
  }
177
178
  }
178
179
 
179
- module.exports = BlobManager;
180
+ export default BlobManager;
@@ -10,7 +10,7 @@
10
10
 
11
11
  const registry: Map<string, number> = new Map();
12
12
 
13
- const register = (id: string) => {
13
+ export const register = (id: string) => {
14
14
  const used = registry.get(id);
15
15
 
16
16
  if (used != null) {
@@ -20,7 +20,7 @@ const register = (id: string) => {
20
20
  }
21
21
  };
22
22
 
23
- const unregister = (id: string) => {
23
+ export const unregister = (id: string) => {
24
24
  const used = registry.get(id);
25
25
 
26
26
  if (used != null) {
@@ -32,12 +32,6 @@ const unregister = (id: string) => {
32
32
  }
33
33
  };
34
34
 
35
- const has = (id: string): number | boolean => {
35
+ export const has = (id: string): number | boolean => {
36
36
  return registry.get(id) || false;
37
37
  };
38
-
39
- module.exports = {
40
- register,
41
- unregister,
42
- has,
43
- };
@@ -12,7 +12,8 @@
12
12
 
13
13
  import type {BlobOptions} from './BlobTypes';
14
14
 
15
- const Blob = require('./Blob');
15
+ import Blob from './Blob';
16
+
16
17
  const invariant = require('invariant');
17
18
 
18
19
  /**
@@ -52,4 +53,4 @@ class File extends Blob {
52
53
  }
53
54
  }
54
55
 
55
- module.exports = File;
56
+ export default File;
@@ -183,4 +183,4 @@ class FileReader extends (EventTarget(...READER_EVENTS): typeof EventTarget) {
183
183
  }
184
184
  }
185
185
 
186
- module.exports = FileReader;
186
+ export default FileReader;
@@ -23,7 +23,7 @@ type DebugData = {
23
23
 
24
24
  function defaultExtras() {
25
25
  BugReporting.addFileSource('react_hierarchy.txt', () =>
26
- require('./dumpReactTree')(),
26
+ require('./dumpReactTree').default(),
27
27
  );
28
28
  }
29
29
 
@@ -137,4 +137,4 @@ class BugReporting {
137
137
  }
138
138
  }
139
139
 
140
- module.exports = BugReporting;
140
+ export default BugReporting;
@@ -11,7 +11,7 @@
11
11
  'use strict';
12
12
 
13
13
  /*
14
- const getReactData = require('getReactData');
14
+ const getReactData = require('getReactData').default;
15
15
 
16
16
  const INDENTATION_SIZE = 2;
17
17
  const MAX_DEPTH = 2;
@@ -148,4 +148,4 @@ function indent(size: number) {
148
148
  }
149
149
  */
150
150
 
151
- module.exports = dumpReactTree;
151
+ export default dumpReactTree;
@@ -184,4 +184,4 @@ function copyWithSet(
184
184
  return copyWithSetImpl(obj, path, 0, value);
185
185
  }
186
186
 
187
- module.exports = getData;
187
+ export default getData;
@@ -33,4 +33,4 @@ function legacySendAccessibilityEvent(
33
33
  }
34
34
  }
35
35
 
36
- module.exports = legacySendAccessibilityEvent;
36
+ export default legacySendAccessibilityEvent;
@@ -23,4 +23,4 @@ function legacySendAccessibilityEvent(
23
23
  }
24
24
  }
25
25
 
26
- module.exports = legacySendAccessibilityEvent;
26
+ export default legacySendAccessibilityEvent;
@@ -33,4 +33,4 @@ function legacySendAccessibilityEvent(
33
33
  }
34
34
  }
35
35
 
36
- module.exports = legacySendAccessibilityEvent;
36
+ export default legacySendAccessibilityEvent;
@@ -19,22 +19,22 @@ import * as React from 'react';
19
19
 
20
20
  const PlatformActivityIndicator =
21
21
  Platform.OS === 'android'
22
- ? require('../ProgressBarAndroid/ProgressBarAndroid')
22
+ ? require('../ProgressBarAndroid/ProgressBarAndroid').default
23
23
  : require('./ActivityIndicatorViewNativeComponent').default;
24
24
 
25
25
  const GRAY = '#999999';
26
26
 
27
27
  type IndicatorSize = number | 'small' | 'large';
28
28
 
29
- type IOSProps = $ReadOnly<{|
29
+ type IOSProps = $ReadOnly<{
30
30
  /**
31
31
  Whether the indicator should hide when not animating.
32
32
 
33
33
  @platform ios
34
34
  */
35
35
  hidesWhenStopped?: ?boolean,
36
- |}>;
37
- type Props = $ReadOnly<{|
36
+ }>;
37
+ type Props = $ReadOnly<{
38
38
  ...ViewProps,
39
39
  ...IOSProps,
40
40
 
@@ -58,7 +58,7 @@ type Props = $ReadOnly<{|
58
58
  @type {@platform android} number
59
59
  */
60
60
  size?: ?IndicatorSize,
61
- |}>;
61
+ }>;
62
62
 
63
63
  const ActivityIndicator = (
64
64
  {
@@ -27,7 +27,7 @@ import View from './View/View';
27
27
  import invariant from 'invariant';
28
28
  import * as React from 'react';
29
29
 
30
- type ButtonProps = $ReadOnly<{|
30
+ type ButtonProps = $ReadOnly<{
31
31
  /**
32
32
  Text to display inside the button. On Android the given title will be
33
33
  converted to the uppercased form.
@@ -167,7 +167,7 @@ type ButtonProps = $ReadOnly<{|
167
167
  importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
168
168
  accessibilityHint?: ?string,
169
169
  accessibilityLanguage?: ?Stringish,
170
- |}>;
170
+ }>;
171
171
 
172
172
  /**
173
173
  A basic button component that should render nicely on any platform. Supports a
@@ -28,7 +28,7 @@ import View from './View/View';
28
28
  import invariant from 'invariant';
29
29
  import * as React from 'react';
30
30
 
31
- type ButtonProps = $ReadOnly<{|
31
+ type ButtonProps = $ReadOnly<{
32
32
  /**
33
33
  Text to display inside the button. On Android the given title will be
34
34
  converted to the uppercased form.
@@ -170,7 +170,7 @@ type ButtonProps = $ReadOnly<{|
170
170
  importantForAccessibility?: ?('auto' | 'yes' | 'no' | 'no-hide-descendants'),
171
171
  accessibilityHint?: ?string,
172
172
  accessibilityLanguage?: ?Stringish,
173
- |}>;
173
+ }>;
174
174
 
175
175
  /**
176
176
  A basic button component that should render nicely on any platform. Supports a
@@ -13,7 +13,7 @@ import NativeClipboard from './NativeClipboard';
13
13
  /**
14
14
  * `Clipboard` gives you an interface for setting and getting content from Clipboard on both iOS and Android
15
15
  */
16
- module.exports = {
16
+ export default {
17
17
  /**
18
18
  * Get content of string type, this method returns a `Promise`, so you can use following code to get clipboard content
19
19
  * ```javascript
@@ -31,11 +31,11 @@ const DRAWER_STATES = ['Idle', 'Dragging', 'Settling'];
31
31
 
32
32
  type DrawerStates = 'Idle' | 'Dragging' | 'Settling';
33
33
 
34
- type DrawerSlideEvent = $ReadOnly<{|
34
+ type DrawerSlideEvent = $ReadOnly<{
35
35
  offset: number,
36
- |}>;
36
+ }>;
37
37
 
38
- type Props = $ReadOnly<{|
38
+ type Props = $ReadOnly<{
39
39
  accessibilityRole?: ?AccessibilityRole,
40
40
 
41
41
  /**
@@ -116,11 +116,11 @@ type Props = $ReadOnly<{|
116
116
 
117
117
  children?: React.Node,
118
118
  style?: ?ViewStyleProp,
119
- |}>;
119
+ }>;
120
120
 
121
- type State = {|
121
+ type State = {
122
122
  drawerOpened: boolean,
123
- |};
123
+ };
124
124
 
125
125
  /**
126
126
  * React component that wraps the platform `DrawerLayout` (Android only). The
@@ -391,4 +391,4 @@ const styles = StyleSheet.create({
391
391
  },
392
392
  });
393
393
 
394
- module.exports = DrawerLayoutAndroid;
394
+ export default DrawerLayoutAndroid;
@@ -13,5 +13,4 @@
13
13
  // $FlowFixMe[cannot-resolve-module]
14
14
  import typeof DrawerLayoutAndroid from './DrawerLayoutAndroid.android';
15
15
 
16
- module.exports =
17
- require('../UnimplementedViews/UnimplementedView') as $FlowFixMe as DrawerLayoutAndroid;
16
+ export default require('../UnimplementedViews/UnimplementedView') as $FlowFixMe as DrawerLayoutAndroid;
@@ -25,32 +25,32 @@ export type KeyboardEventEasing =
25
25
  | 'linear'
26
26
  | 'keyboard';
27
27
 
28
- export type KeyboardMetrics = $ReadOnly<{|
28
+ export type KeyboardMetrics = $ReadOnly<{
29
29
  screenX: number,
30
30
  screenY: number,
31
31
  width: number,
32
32
  height: number,
33
- |}>;
33
+ }>;
34
34
 
35
35
  export type KeyboardEvent = AndroidKeyboardEvent | IOSKeyboardEvent;
36
36
 
37
- type BaseKeyboardEvent = {|
37
+ type BaseKeyboardEvent = {
38
38
  duration: number,
39
39
  easing: KeyboardEventEasing,
40
40
  endCoordinates: KeyboardMetrics,
41
- |};
41
+ };
42
42
 
43
- export type AndroidKeyboardEvent = $ReadOnly<{|
43
+ export type AndroidKeyboardEvent = $ReadOnly<{
44
44
  ...BaseKeyboardEvent,
45
45
  duration: 0,
46
46
  easing: 'keyboard',
47
- |}>;
47
+ }>;
48
48
 
49
- export type IOSKeyboardEvent = $ReadOnly<{|
49
+ export type IOSKeyboardEvent = $ReadOnly<{
50
50
  ...BaseKeyboardEvent,
51
51
  startCoordinates: KeyboardMetrics,
52
52
  isEventFromThisApp: boolean,
53
- |}>;
53
+ }>;
54
54
 
55
55
  type KeyboardEventDefinitions = {
56
56
  keyboardWillShow: [KeyboardEvent],
@@ -202,4 +202,4 @@ class Keyboard {
202
202
  }
203
203
  }
204
204
 
205
- module.exports = (new Keyboard(): Keyboard);
205
+ export default (new Keyboard(): Keyboard);
@@ -27,7 +27,7 @@ import View from '../View/View';
27
27
  import Keyboard from './Keyboard';
28
28
  import * as React from 'react';
29
29
 
30
- type Props = $ReadOnly<{|
30
+ type Props = $ReadOnly<{
31
31
  ...ViewProps,
32
32
 
33
33
  /**
@@ -51,11 +51,11 @@ type Props = $ReadOnly<{|
51
51
  * may be non-zero in some cases. Defaults to 0.
52
52
  */
53
53
  keyboardVerticalOffset?: number,
54
- |}>;
54
+ }>;
55
55
 
56
- type State = {|
56
+ type State = {
57
57
  bottom: number,
58
- |};
58
+ };
59
59
 
60
60
  /**
61
61
  * View that moves out of the way when the keyboard appears by automatically