@office-iss/react-native-win32 0.72.8 → 0.73.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 (277) hide show
  1. package/.flowconfig +15 -5
  2. package/CHANGELOG.json +530 -101
  3. package/CHANGELOG.md +213 -56
  4. package/IntegrationTests/PromiseTest.js +1 -0
  5. package/IntegrationTests/websocket_integration_test_server.js +1 -1
  6. package/Libraries/Animated/Animated.js +1 -1
  7. package/Libraries/Animated/AnimatedImplementation.js +1 -1
  8. package/Libraries/Animated/NativeAnimatedHelper.js +14 -10
  9. package/Libraries/Animated/NativeAnimatedHelper.win32.js +16 -12
  10. package/Libraries/Animated/NativeAnimatedModule.js +6 -2
  11. package/Libraries/Animated/NativeAnimatedTurboModule.js +7 -4
  12. package/Libraries/Animated/animations/Animation.js +57 -3
  13. package/Libraries/Animated/animations/DecayAnimation.js +9 -0
  14. package/Libraries/Animated/animations/SpringAnimation.js +8 -0
  15. package/Libraries/Animated/animations/TimingAnimation.js +8 -0
  16. package/Libraries/Animated/components/AnimatedFlatList.js +2 -1
  17. package/Libraries/Animated/components/AnimatedScrollView.js +2 -0
  18. package/Libraries/Animated/components/AnimatedSectionList.js +2 -1
  19. package/Libraries/Animated/createAnimatedComponent.js +1 -0
  20. package/Libraries/Animated/nodes/AnimatedColor.js +1 -1
  21. package/Libraries/Animated/nodes/AnimatedObject.js +146 -0
  22. package/Libraries/Animated/nodes/AnimatedProps.js +19 -7
  23. package/Libraries/Animated/nodes/AnimatedStyle.js +29 -55
  24. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -17
  25. package/Libraries/Animated/shouldUseTurboAnimatedModule.js +17 -0
  26. package/Libraries/Animated/useAnimatedProps.js +9 -10
  27. package/Libraries/AppState/AppState.d.ts +1 -1
  28. package/Libraries/AppState/NativeAppState.js +8 -4
  29. package/Libraries/BatchedBridge/MessageQueue.js +45 -36
  30. package/Libraries/Blob/Blob.js +6 -2
  31. package/Libraries/Blob/BlobManager.js +9 -10
  32. package/Libraries/Blob/BlobRegistry.js +14 -9
  33. package/Libraries/Blob/File.js +1 -1
  34. package/Libraries/Blob/FileReader.js +1 -2
  35. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +1 -5
  36. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +7 -48
  37. package/Libraries/Components/Button/ButtonWin32.Props.d.ts +1 -1
  38. package/Libraries/Components/Button/ButtonWin32.Props.js.map +1 -1
  39. package/Libraries/Components/Button/ButtonWin32.d.ts +1 -1
  40. package/Libraries/Components/Button/ButtonWin32.js +1 -4
  41. package/Libraries/Components/Button/ButtonWin32.js.map +1 -1
  42. package/Libraries/Components/Clipboard/Clipboard.d.ts +4 -4
  43. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.android.js +3 -1
  44. package/Libraries/Components/EnterString.win32.d.ts +1 -1
  45. package/Libraries/Components/Keyboard/KeyboardAvoidingView.js +26 -6
  46. package/Libraries/Components/Pressable/Pressable.js +3 -2
  47. package/Libraries/Components/Pressable/Pressable.win32.js +4 -3
  48. package/Libraries/Components/Pressable/useAndroidRippleForView.js +1 -1
  49. package/Libraries/Components/SafeAreaView/SafeAreaView.js +7 -7
  50. package/Libraries/Components/SafeAreaView/SafeAreaView.win32.js +7 -8
  51. package/Libraries/Components/ScrollView/ScrollView.js +3 -1
  52. package/Libraries/Components/ScrollView/ScrollView.win32.js +3 -1
  53. package/Libraries/Components/ScrollView/ScrollViewStickyHeader.js +39 -46
  54. package/Libraries/Components/Switch/Switch.js +1 -0
  55. package/Libraries/Components/Text/TextWin32.d.ts +1 -1
  56. package/Libraries/Components/TextInput/RCTTextInputViewConfig.js +1 -0
  57. package/Libraries/Components/TextInput/TextInput.d.ts +49 -7
  58. package/Libraries/Components/TextInput/TextInput.flow.js +43 -10
  59. package/Libraries/Components/TextInput/TextInput.js +62 -10
  60. package/Libraries/Components/TextInput/TextInput.win32.js +953 -206
  61. package/Libraries/Components/TextInput/Win32TextInputNativeComponent.js +23 -0
  62. package/Libraries/Components/ToastAndroid/{ToastAndroid.ios.js → ToastAndroid.js} +9 -1
  63. package/Libraries/Components/ToastAndroid/ToastAndroid.win32.js +9 -1
  64. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js +2 -2
  65. package/Libraries/Components/Touchable/Tests/TouchableWin32Test.js.map +1 -1
  66. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  67. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  68. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  69. package/Libraries/Components/Touchable/TouchableOpacity.js +4 -1
  70. package/Libraries/Components/Touchable/TouchableWin32.d.ts +1 -1
  71. package/Libraries/Components/Touchable/TouchableWin32.js.map +1 -1
  72. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +1 -0
  73. package/Libraries/Components/TraceUpdateOverlay/TraceUpdateOverlay.js +16 -6
  74. package/Libraries/Components/View/ReactNativeStyleAttributes.js +9 -0
  75. package/Libraries/Components/View/ReactNativeViewAttributes.js +1 -0
  76. package/Libraries/Components/View/ReactNativeViewAttributes.win32.js +1 -0
  77. package/Libraries/Components/View/View.js +46 -32
  78. package/Libraries/Components/View/View.win32.js +37 -6
  79. package/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  80. package/Libraries/Components/View/ViewNativeComponent.js +1 -0
  81. package/Libraries/Components/View/ViewPropTypes.js +18 -3
  82. package/Libraries/Components/View/ViewPropTypes.win32.js +30 -4
  83. package/Libraries/Components/View/ViewWin32.js +3 -2
  84. package/Libraries/Core/Devtools/loadBundleFromServer.js +152 -0
  85. package/Libraries/Core/Devtools/symbolicateStackTrace.js +2 -1
  86. package/Libraries/Core/ExceptionsManager.js +16 -7
  87. package/Libraries/Core/ExtendedError.js +12 -0
  88. package/Libraries/Core/ReactNativeVersion.js +3 -3
  89. package/Libraries/Core/ReactNativeVersionCheck.js +0 -2
  90. package/Libraries/Core/ReactNativeVersionCheck.win32.js +0 -2
  91. package/Libraries/Core/__mocks__/NativeExceptionsManager.js +20 -0
  92. package/Libraries/Core/setUpDeveloperTools.js +5 -1
  93. package/Libraries/Core/setUpIntersectionObserver.js +16 -0
  94. package/Libraries/{Components/ProgressBarAndroid/ProgressBarAndroid.ios.js → Core/setUpMutationObserver.js} +6 -2
  95. package/Libraries/Core/setUpPerformance.js +6 -13
  96. package/Libraries/Core/setUpPerformanceObserver.js +16 -0
  97. package/Libraries/Core/setUpRegeneratorRuntime.js +4 -2
  98. package/Libraries/DOM/Nodes/ReactNativeElement.js +135 -18
  99. package/Libraries/DOM/Nodes/ReadOnlyCharacterData.js +72 -0
  100. package/Libraries/DOM/Nodes/ReadOnlyElement.js +209 -21
  101. package/Libraries/DOM/Nodes/ReadOnlyNode.js +206 -17
  102. package/Libraries/DOM/Nodes/ReadOnlyText.js +30 -0
  103. package/Libraries/DOM/Nodes/Utilities/Traversal.js +54 -0
  104. package/Libraries/EventEmitter/NativeEventEmitter.d.ts +0 -6
  105. package/Libraries/EventEmitter/RCTDeviceEventEmitter.js +15 -4
  106. package/Libraries/Image/Image.android.js +8 -2
  107. package/Libraries/Image/Image.d.ts +1 -1
  108. package/Libraries/Image/Image.ios.js +4 -1
  109. package/Libraries/Image/Image.win32.js +6 -3
  110. package/Libraries/Image/ImageBackground.js +3 -0
  111. package/Libraries/Image/resolveAssetSource.win32.js +1 -1
  112. package/Libraries/Inspector/DevtoolsOverlay.js +6 -3
  113. package/Libraries/Inspector/NetworkOverlay.js +2 -2
  114. package/Libraries/Interaction/JSEventLoopWatchdog.js +1 -5
  115. package/Libraries/Interaction/PanResponder.js +1 -4
  116. package/Libraries/IntersectionObserver/IntersectionObserver.js +252 -0
  117. package/Libraries/IntersectionObserver/IntersectionObserverEntry.js +140 -0
  118. package/Libraries/IntersectionObserver/IntersectionObserverManager.js +221 -0
  119. package/Libraries/IntersectionObserver/NativeIntersectionObserver.js +41 -0
  120. package/Libraries/IntersectionObserver/__mocks__/NativeIntersectionObserver.js +162 -0
  121. package/Libraries/LayoutAnimation/LayoutAnimation.js +1 -1
  122. package/Libraries/Lists/FlatList.d.ts +2 -1
  123. package/Libraries/Lists/FlatList.js +15 -5
  124. package/Libraries/Lists/SectionList.js +4 -0
  125. package/Libraries/LogBox/Data/LogBoxData.js +2 -1
  126. package/Libraries/LogBox/Data/LogBoxLog.js +4 -1
  127. package/Libraries/LogBox/Data/LogBoxSymbolication.js +5 -2
  128. package/Libraries/LogBox/Data/parseLogBoxLog.js +57 -20
  129. package/Libraries/LogBox/UI/AnsiHighlight.js +1 -1
  130. package/Libraries/LogBox/UI/LogBoxInspectorFooter.js +24 -31
  131. package/Libraries/LogBox/UI/LogBoxInspectorHeader.js +1 -1
  132. package/Libraries/LogBox/UI/LogBoxMessage.js +4 -7
  133. package/Libraries/MutationObserver/MutationObserver.js +184 -0
  134. package/Libraries/MutationObserver/MutationObserverManager.js +218 -0
  135. package/Libraries/MutationObserver/MutationRecord.js +82 -0
  136. package/Libraries/MutationObserver/NativeMutationObserver.js +58 -0
  137. package/Libraries/MutationObserver/__mocks__/NativeMutationObserver.js +327 -0
  138. package/Libraries/NativeComponent/BaseViewConfig.android.js +18 -3
  139. package/Libraries/NativeComponent/BaseViewConfig.ios.js +33 -0
  140. package/Libraries/NativeComponent/BaseViewConfig.win32.js +33 -0
  141. package/Libraries/NativeComponent/NativeComponentRegistry.js +13 -9
  142. package/Libraries/NativeModules/specs/NativeSourceCode.js +6 -6
  143. package/Libraries/Network/RCTNetworking.android.js +2 -1
  144. package/Libraries/Network/XMLHttpRequest.js +1 -1
  145. package/Libraries/NewAppScreen/components/DebugInstructions.js +4 -4
  146. package/Libraries/NewAppScreen/components/LearnMoreLinks.js +9 -2
  147. package/Libraries/Performance/QuickPerformanceLogger.js +1 -1
  148. package/Libraries/PermissionsAndroid/NativePermissionsAndroid.js +1 -0
  149. package/Libraries/PermissionsAndroid/PermissionsAndroid.d.ts +1 -0
  150. package/Libraries/PermissionsAndroid/PermissionsAndroid.js +3 -1
  151. package/Libraries/Pressability/Pressability.js +28 -3
  152. package/Libraries/Pressability/Pressability.win32.js +30 -5
  153. package/Libraries/ReactNative/AppContainer.js +2 -3
  154. package/Libraries/ReactNative/AppRegistry.d.ts +0 -5
  155. package/Libraries/ReactNative/AppRegistry.js +66 -53
  156. package/Libraries/ReactNative/BridgelessUIManager.js +38 -9
  157. package/Libraries/ReactNative/FabricUIManager.js +143 -34
  158. package/Libraries/ReactNative/I18nManager.js +5 -11
  159. package/Libraries/ReactNative/NativeI18nManager.js +7 -5
  160. package/Libraries/ReactNative/PaperUIManager.win32.js +2 -2
  161. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricHostComponent.js +151 -0
  162. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactFabricPublicInstance.js +81 -0
  163. package/Libraries/ReactNative/ReactFabricPublicInstance/ReactNativeAttributePayload.js +492 -0
  164. package/Libraries/ReactNative/ReactFabricPublicInstance/warnForStyleProps.js +32 -0
  165. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +19 -3
  166. package/Libraries/ReactNative/UIManager.js +8 -0
  167. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +648 -0
  168. package/Libraries/ReactPrivate/ReactNativePrivateInterface.js +38 -2
  169. package/Libraries/Renderer/implementations/ReactFabric-dev.js +27 -27
  170. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3 -3
  171. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +3 -3
  172. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +27 -27
  173. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +3 -3
  174. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +3 -3
  175. package/Libraries/Renderer/shims/ReactFabric.js +5 -6
  176. package/Libraries/Renderer/shims/ReactFeatureFlags.js +2 -3
  177. package/Libraries/Renderer/shims/ReactNative.js +2 -3
  178. package/Libraries/Renderer/shims/ReactNativeTypes.js +35 -17
  179. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -3
  180. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +2 -3
  181. package/Libraries/Settings/{Settings.android.js → Settings.js} +4 -4
  182. package/Libraries/Share/Share.d.ts +3 -9
  183. package/Libraries/StyleSheet/PlatformColorValueTypes.android.js +9 -4
  184. package/Libraries/StyleSheet/PlatformColorValueTypes.ios.js +28 -13
  185. package/Libraries/StyleSheet/PlatformColorValueTypes.win32.js +14 -4
  186. package/Libraries/StyleSheet/PlatformColorValueTypesIOS.ios.js +1 -1
  187. package/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  188. package/Libraries/StyleSheet/StyleSheet.d.ts +10 -1
  189. package/Libraries/StyleSheet/StyleSheet.js +3 -0
  190. package/Libraries/StyleSheet/StyleSheet.win32.js +3 -0
  191. package/Libraries/StyleSheet/StyleSheetTypes.d.ts +31 -17
  192. package/Libraries/StyleSheet/StyleSheetTypes.js +90 -6
  193. package/Libraries/StyleSheet/flattenStyle.js +4 -0
  194. package/Libraries/StyleSheet/private/_TransformStyle.js +16 -2
  195. package/Libraries/StyleSheet/processColor.js +1 -2
  196. package/Libraries/StyleSheet/processTransformOrigin.js +136 -0
  197. package/Libraries/StyleSheet/splitLayoutProps.js +1 -0
  198. package/Libraries/Text/Text.d.ts +5 -5
  199. package/Libraries/Text/Text.js +17 -10
  200. package/Libraries/Text/Text.win32.js +354 -0
  201. package/Libraries/Text/TextProps.win32.js +281 -0
  202. package/Libraries/TurboModule/TurboModuleRegistry.js +47 -7
  203. package/Libraries/TurboModule/samples/NativeSampleTurboModule.js +6 -0
  204. package/Libraries/Types/CoreEventTypes.d.ts +5 -2
  205. package/Libraries/Utilities/GlobalPerformanceLogger.js +2 -12
  206. package/Libraries/Utilities/NativeDeviceInfo.js +8 -9
  207. package/Libraries/Utilities/NativePlatformConstantsAndroid.js +23 -18
  208. package/Libraries/Utilities/NativePlatformConstantsIOS.js +16 -13
  209. package/Libraries/Utilities/NativePlatformConstantsWin.js +13 -10
  210. package/Libraries/Utilities/PerformanceLoggerContext.js +1 -1
  211. package/Libraries/Utilities/Platform.android.js +12 -8
  212. package/Libraries/Utilities/Platform.d.ts +1 -0
  213. package/Libraries/Utilities/Platform.flow.js +84 -0
  214. package/Libraries/Utilities/Platform.flow.win32.js +111 -0
  215. package/Libraries/Utilities/Platform.ios.js +12 -8
  216. package/Libraries/Utilities/Platform.win32.js +12 -8
  217. package/Libraries/Utilities/PolyfillFunctions.js +1 -1
  218. package/Libraries/Utilities/ReactNativeTestTools.js +1 -2
  219. package/Libraries/Utilities/SceneTracker.js +1 -1
  220. package/Libraries/Utilities/createPerformanceLogger.js +63 -32
  221. package/Libraries/Utilities/useColorScheme.js +7 -8
  222. package/Libraries/WebPerformance/MemoryInfo.js +1 -1
  223. package/Libraries/WebPerformance/NativePerformance.js +3 -8
  224. package/Libraries/WebPerformance/NativePerformanceObserver.js +4 -0
  225. package/Libraries/WebPerformance/Performance.js +42 -15
  226. package/Libraries/WebPerformance/PerformanceEntry.js +14 -6
  227. package/Libraries/WebPerformance/PerformanceEventTiming.js +18 -1
  228. package/Libraries/WebPerformance/ReactNativeStartupTiming.js +40 -14
  229. package/Libraries/WebPerformance/__mocks__/NativePerformance.js +4 -2
  230. package/Libraries/WebPerformance/__mocks__/NativePerformanceObserver.js +21 -3
  231. package/Libraries/promiseRejectionTrackingOptions.js +21 -9
  232. package/Libraries/vendor/emitter/EventEmitter.js +17 -17
  233. package/flow/global.js +1 -3
  234. package/flow/jest.js +5 -1
  235. package/{Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.ios.js → jest/ReactNativeInternalFeatureFlagsMock.js} +2 -1
  236. package/jest/__tests__/setup-test.js +18 -0
  237. package/jest/mockModal.js +6 -4
  238. package/jest/setup.js +61 -30
  239. package/jest.config.js +1 -1
  240. package/just-task.js +1 -0
  241. package/overrides.json +54 -60
  242. package/package.json +35 -33
  243. package/src/Libraries/Components/Button/ButtonWin32.Props.ts +1 -1
  244. package/src/Libraries/Components/Button/ButtonWin32.tsx +0 -2
  245. package/src/Libraries/Components/Touchable/Tests/TouchableWin32Test.tsx +2 -2
  246. package/src/Libraries/Components/Touchable/TouchableWin32.tsx +1 -1
  247. package/src/Libraries/Components/View/ViewAccessibility.d.ts +8 -2
  248. package/src/Libraries/StyleSheet/PlatformColorValueTypesWin32.d.ts +1 -1
  249. package/types/experimental.d.ts +44 -0
  250. package/types/index.d.ts +2 -1
  251. package/types/modules/Devtools.d.ts +1 -0
  252. package/types/modules/globals.d.ts +16 -1
  253. package/IntegrationTests/BUCK +0 -32
  254. package/IntegrationTests/PropertiesUpdateTest.js +0 -29
  255. package/IntegrationTests/RCTRootViewIntegrationTestApp.js +0 -86
  256. package/IntegrationTests/ReactContentSizeUpdateTest.js +0 -89
  257. package/IntegrationTests/SizeFlexibilityUpdateTest.js +0 -106
  258. package/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfoWin32.js +0 -37
  259. package/Libraries/Components/TextInput/TextInput.Types.win32.d.ts +0 -51
  260. package/Libraries/Components/TextInput/TextInput.Types.win32.js +0 -3
  261. package/Libraries/Components/TextInput/TextInput.Types.win32.js.map +0 -1
  262. package/Libraries/Utilities/AcessibilityMapping.js +0 -154
  263. package/Libraries/Utilities/AcessibilityMapping.win32.js +0 -156
  264. package/Libraries/Utilities/NativeDevSplitBundleLoader.js +0 -19
  265. package/Libraries/Utilities/useColorScheme.win32.js +0 -26
  266. package/flow/use-sync-external-store.js +0 -20
  267. package/flow-typed/npm/base64-js_v1.x.x.js +0 -12
  268. package/flow-typed/npm/glob_v7.x.x.js +0 -79
  269. package/flow-typed/npm/pretty-format_v26.x.x.js +0 -49
  270. package/flow-typed/npm/promise_v8.x.x.js +0 -30
  271. package/flow-typed/npm/react-dom_v17.x.x.js +0 -139
  272. package/flow-typed/npm/react-test-renderer_v16.x.x.js +0 -79
  273. package/flow-typed/npm/stacktrace-parser_v0.1.x.js +0 -17
  274. package/flow-typed/npm/yargs_v17.x.x.js +0 -341
  275. package/src/Libraries/Components/AccessibilityInfo/AccessibilityInfo.d.ts +0 -161
  276. package/src/Libraries/Components/TextInput/TextInput.Types.win32.ts +0 -68
  277. /package/Libraries/{Renderer/public → ReactNative/ReactFabricPublicInstance}/ReactFabricPublicInstanceUtils.js +0 -0
@@ -14,26 +14,47 @@ import type {RootTag} from '../Types/RootTagTypes';
14
14
 
15
15
  import {unstable_hasComponent} from '../NativeComponent/NativeComponentRegistryUnstable';
16
16
 
17
+ let cachedConstants = null;
18
+
17
19
  const errorMessageForMethod = (methodName: string): string =>
18
20
  "[ReactNative Architecture][JS] '" +
19
21
  methodName +
20
22
  "' is not available in the new React Native architecture.";
21
23
 
22
- module.exports = {
24
+ function nativeViewConfigsInBridgelessModeEnabled(): boolean {
25
+ return global.RN$LegacyInterop_UIManager_getConstants !== undefined;
26
+ }
27
+
28
+ function getCachedConstants(): Object {
29
+ if (!cachedConstants) {
30
+ cachedConstants = global.RN$LegacyInterop_UIManager_getConstants();
31
+ }
32
+ return cachedConstants;
33
+ }
34
+
35
+ const UIManagerJS: {[string]: $FlowFixMe} = {
23
36
  getViewManagerConfig: (viewManagerName: string): mixed => {
24
- console.error(
25
- errorMessageForMethod('getViewManagerConfig') +
26
- 'Use hasViewManagerConfig instead. viewManagerName: ' +
27
- viewManagerName,
28
- );
29
- return null;
37
+ if (nativeViewConfigsInBridgelessModeEnabled()) {
38
+ return getCachedConstants()[viewManagerName];
39
+ } else {
40
+ console.error(
41
+ errorMessageForMethod('getViewManagerConfig') +
42
+ 'Use hasViewManagerConfig instead. viewManagerName: ' +
43
+ viewManagerName,
44
+ );
45
+ return null;
46
+ }
30
47
  },
31
48
  hasViewManagerConfig: (viewManagerName: string): boolean => {
32
49
  return unstable_hasComponent(viewManagerName);
33
50
  },
34
51
  getConstants: (): Object => {
35
- console.error(errorMessageForMethod('getConstants'));
36
- return {};
52
+ if (nativeViewConfigsInBridgelessModeEnabled()) {
53
+ return getCachedConstants();
54
+ } else {
55
+ console.error(errorMessageForMethod('getConstants'));
56
+ return null;
57
+ }
37
58
  },
38
59
  getConstantsForViewManager: (viewManagerName: string): Object => {
39
60
  console.error(errorMessageForMethod('getConstantsForViewManager'));
@@ -160,3 +181,11 @@ module.exports = {
160
181
  dismissPopupMenu: (): void =>
161
182
  console.error(errorMessageForMethod('dismissPopupMenu')),
162
183
  };
184
+
185
+ if (nativeViewConfigsInBridgelessModeEnabled()) {
186
+ Object.keys(getCachedConstants()).forEach(viewConfigName => {
187
+ UIManagerJS[viewConfigName] = getCachedConstants()[viewConfigName];
188
+ });
189
+ }
190
+
191
+ module.exports = UIManagerJS;
@@ -11,71 +11,180 @@
11
11
  'use strict';
12
12
 
13
13
  import type {
14
+ InternalInstanceHandle,
14
15
  LayoutAnimationConfig,
15
16
  MeasureInWindowOnSuccessCallback,
16
17
  MeasureLayoutOnSuccessCallback,
17
18
  MeasureOnSuccessCallback,
19
+ Node,
18
20
  } from '../Renderer/shims/ReactNativeTypes';
19
21
  import type {RootTag} from '../Types/RootTagTypes';
20
22
 
21
- // TODO: type these properly.
22
- export opaque type Node = {...};
23
- type NodeSet = Array<Node>;
24
- type NodeProps = {...};
25
- type InstanceHandle = {...};
26
- export type Spec = {|
23
+ import defineLazyObjectProperty from '../Utilities/defineLazyObjectProperty';
24
+
25
+ export type NodeSet = Array<Node>;
26
+ export type NodeProps = {...};
27
+ export interface Spec {
27
28
  +createNode: (
28
29
  reactTag: number,
29
30
  viewName: string,
30
31
  rootTag: RootTag,
31
32
  props: NodeProps,
32
- instanceHandle: InstanceHandle,
33
- ) => Node,
34
- +cloneNode: (node: Node) => Node,
35
- +cloneNodeWithNewChildren: (node: Node) => Node,
36
- +cloneNodeWithNewProps: (node: Node, newProps: NodeProps) => Node,
37
- +cloneNodeWithNewChildrenAndProps: (node: Node, newProps: NodeProps) => Node,
38
- +createChildSet: (rootTag: RootTag) => NodeSet,
39
- +appendChild: (parentNode: Node, child: Node) => Node,
40
- +appendChildToSet: (childSet: NodeSet, child: Node) => void,
41
- +completeRoot: (rootTag: RootTag, childSet: NodeSet) => void,
42
- +measure: (node: Node, callback: MeasureOnSuccessCallback) => void,
33
+ instanceHandle: InternalInstanceHandle,
34
+ ) => Node;
35
+ +cloneNode: (node: Node) => Node;
36
+ +cloneNodeWithNewChildren: (node: Node) => Node;
37
+ +cloneNodeWithNewProps: (node: Node, newProps: NodeProps) => Node;
38
+ +cloneNodeWithNewChildrenAndProps: (node: Node, newProps: NodeProps) => Node;
39
+ +createChildSet: (rootTag: RootTag) => NodeSet;
40
+ +appendChild: (parentNode: Node, child: Node) => Node;
41
+ +appendChildToSet: (childSet: NodeSet, child: Node) => void;
42
+ +completeRoot: (rootTag: RootTag, childSet: NodeSet) => void;
43
+ +measure: (node: Node, callback: MeasureOnSuccessCallback) => void;
43
44
  +measureInWindow: (
44
45
  node: Node,
45
46
  callback: MeasureInWindowOnSuccessCallback,
46
- ) => void,
47
+ ) => void;
47
48
  +measureLayout: (
48
49
  node: Node,
49
50
  relativeNode: Node,
50
51
  onFail: () => void,
51
52
  onSuccess: MeasureLayoutOnSuccessCallback,
52
- ) => void,
53
+ ) => void;
53
54
  +configureNextLayoutAnimation: (
54
55
  config: LayoutAnimationConfig,
55
56
  callback: () => void, // check what is returned here
56
57
  errorCallback: () => void,
57
- ) => void,
58
- +sendAccessibilityEvent: (node: Node, eventType: string) => void,
59
- +findShadowNodeByTag_DEPRECATED: (reactTag: number) => ?Node,
60
- +getBoundingClientRect: (
61
- node: Node,
62
- ) => [
63
- /* x:*/ number,
64
- /* y:*/ number,
65
- /* width:*/ number,
66
- /* height:*/ number,
67
- ],
68
- +setNativeProps: (node: Node, newProps: NodeProps) => void,
58
+ ) => void;
59
+ +sendAccessibilityEvent: (node: Node, eventType: string) => void;
60
+ +findShadowNodeByTag_DEPRECATED: (reactTag: number) => ?Node;
61
+ +setNativeProps: (node: Node, newProps: NodeProps) => void;
69
62
  +dispatchCommand: (
70
63
  node: Node,
71
64
  commandName: string,
72
65
  args: Array<mixed>,
73
- ) => void,
74
- |};
66
+ ) => void;
67
+
68
+ /**
69
+ * Support methods for the DOM-compatible APIs.
70
+ */
71
+ +getParentNode: (node: Node) => ?InternalInstanceHandle;
72
+ +getChildNodes: (node: Node) => $ReadOnlyArray<InternalInstanceHandle>;
73
+ +isConnected: (node: Node) => boolean;
74
+ +compareDocumentPosition: (node: Node, otherNode: Node) => number;
75
+ +getTextContent: (node: Node) => string;
76
+ +getBoundingClientRect: (
77
+ node: Node,
78
+ includeTransform: boolean,
79
+ ) => ?[
80
+ /* x: */ number,
81
+ /* y: */ number,
82
+ /* width: */ number,
83
+ /* height: */ number,
84
+ ];
85
+ +getOffset: (
86
+ node: Node,
87
+ ) => ?[
88
+ /* offsetParent: */ InternalInstanceHandle,
89
+ /* offsetTop: */ number,
90
+ /* offsetLeft: */ number,
91
+ ];
92
+ +getScrollPosition: (
93
+ node: Node,
94
+ ) => ?[/* scrollLeft: */ number, /* scrollTop: */ number];
95
+ +getScrollSize: (
96
+ node: Node,
97
+ ) => ?[/* scrollWidth: */ number, /* scrollHeight: */ number];
98
+ +getInnerSize: (node: Node) => ?[/* width: */ number, /* height: */ number];
99
+ +getBorderSize: (
100
+ node: Node,
101
+ ) => ?[
102
+ /* topWidth: */ number,
103
+ /* rightWidth: */ number,
104
+ /* bottomWidth: */ number,
105
+ /* leftWidth: */ number,
106
+ ];
107
+ +getTagName: (node: Node) => string;
108
+
109
+ /**
110
+ * Support methods for the Pointer Capture APIs.
111
+ */
112
+ +hasPointerCapture: (node: Node, pointerId: number) => boolean;
113
+ +setPointerCapture: (node: Node, pointerId: number) => void;
114
+ +releasePointerCapture: (node: Node, pointerId: number) => void;
115
+ }
116
+
117
+ let nativeFabricUIManagerProxy: ?Spec;
118
+
119
+ // This is a list of all the methods in global.nativeFabricUIManager that we'll
120
+ // cache in JavaScript, as the current implementation of the binding
121
+ // creates a new host function every time methods are accessed.
122
+ const CACHED_PROPERTIES = [
123
+ 'createNode',
124
+ 'cloneNode',
125
+ 'cloneNodeWithNewChildren',
126
+ 'cloneNodeWithNewProps',
127
+ 'cloneNodeWithNewChildrenAndProps',
128
+ 'createChildSet',
129
+ 'appendChild',
130
+ 'appendChildToSet',
131
+ 'completeRoot',
132
+ 'measure',
133
+ 'measureInWindow',
134
+ 'measureLayout',
135
+ 'configureNextLayoutAnimation',
136
+ 'sendAccessibilityEvent',
137
+ 'findShadowNodeByTag_DEPRECATED',
138
+ 'setNativeProps',
139
+ 'dispatchCommand',
140
+ 'getParentNode',
141
+ 'getChildNodes',
142
+ 'isConnected',
143
+ 'compareDocumentPosition',
144
+ 'getTextContent',
145
+ 'getBoundingClientRect',
146
+ 'getOffset',
147
+ 'getScrollPosition',
148
+ 'getScrollSize',
149
+ 'getInnerSize',
150
+ 'getBorderSize',
151
+ 'getTagName',
152
+ 'hasPointerCapture',
153
+ 'setPointerCapture',
154
+ 'releasePointerCapture',
155
+ ];
75
156
 
76
157
  // This is exposed as a getter because apps using the legacy renderer AND
77
158
  // Fabric can define the binding lazily. If we evaluated the global and cached
78
159
  // it in the module we might be caching an `undefined` value before it is set.
79
160
  export function getFabricUIManager(): ?Spec {
80
- return global.nativeFabricUIManager;
161
+ if (
162
+ nativeFabricUIManagerProxy == null &&
163
+ global.nativeFabricUIManager != null
164
+ ) {
165
+ nativeFabricUIManagerProxy = createProxyWithCachedProperties(
166
+ global.nativeFabricUIManager,
167
+ CACHED_PROPERTIES,
168
+ );
169
+ }
170
+ return nativeFabricUIManagerProxy;
171
+ }
172
+
173
+ /**
174
+ *
175
+ * Returns an object that caches the specified properties the first time they
176
+ * are accessed, and falls back to the original object for other properties.
177
+ */
178
+ function createProxyWithCachedProperties(
179
+ implementation: Spec,
180
+ propertiesToCache: $ReadOnlyArray<string>,
181
+ ): Spec {
182
+ const proxy = Object.create(implementation);
183
+ for (const propertyName of propertiesToCache) {
184
+ defineLazyObjectProperty(proxy, propertyName, {
185
+ // $FlowExpectedError[prop-missing]
186
+ get: () => implementation[propertyName],
187
+ });
188
+ }
189
+ return proxy;
81
190
  }
@@ -8,15 +8,13 @@
8
8
  * @format
9
9
  */
10
10
 
11
+ import type {I18nManagerConstants} from './NativeI18nManager';
12
+
11
13
  import NativeI18nManager from './NativeI18nManager';
12
14
 
13
- const i18nConstants: {|
14
- doLeftAndRightSwapInRTL: boolean,
15
- isRTL: boolean,
16
- localeIdentifier?: ?string,
17
- |} = getI18nManagerConstants();
15
+ const i18nConstants: I18nManagerConstants = getI18nManagerConstants();
18
16
 
19
- function getI18nManagerConstants() {
17
+ function getI18nManagerConstants(): I18nManagerConstants {
20
18
  if (NativeI18nManager) {
21
19
  const {isRTL, doLeftAndRightSwapInRTL, localeIdentifier} =
22
20
  NativeI18nManager.getConstants();
@@ -30,11 +28,7 @@ function getI18nManagerConstants() {
30
28
  }
31
29
 
32
30
  module.exports = {
33
- getConstants: (): {|
34
- doLeftAndRightSwapInRTL: boolean,
35
- isRTL: boolean,
36
- localeIdentifier: ?string,
37
- |} => {
31
+ getConstants: (): I18nManagerConstants => {
38
32
  return i18nConstants;
39
33
  },
40
34
 
@@ -12,12 +12,14 @@ import type {TurboModule} from '../TurboModule/RCTExport';
12
12
 
13
13
  import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
14
14
 
15
+ export type I18nManagerConstants = {|
16
+ doLeftAndRightSwapInRTL: boolean,
17
+ isRTL: boolean,
18
+ localeIdentifier?: ?string,
19
+ |};
20
+
15
21
  export interface Spec extends TurboModule {
16
- +getConstants: () => {|
17
- isRTL: boolean,
18
- doLeftAndRightSwapInRTL: boolean,
19
- localeIdentifier: ?string,
20
- |};
22
+ +getConstants: () => I18nManagerConstants;
21
23
  allowRTL: (allowRTL: boolean) => void;
22
24
  forceRTL: (forceRTL: boolean) => void;
23
25
  swapLeftAndRightInRTL: (flipStyles: boolean) => void;
@@ -107,8 +107,8 @@ UIManagerJS.hasViewManagerConfig = (viewManagerName: string) =>
107
107
  // instead of `UIManager.getViewManagerConfig()` off UIManager.js.
108
108
  // This is a workaround for now.
109
109
  // [Windows - This is incompatible with running UIManager as a JSI object.
110
- // getViewManagerConfig is implemented on the JSI object, so we dont
111
- // need to hook this unless we are runnign in webdebugger
110
+ // getViewManagerConfig is implemented on the JSI object, so we don't
111
+ // need to hook this unless we are running in webdebugger
112
112
  if (!global.nativeCallSyncHook)
113
113
  // $FlowFixMe
114
114
  NativeUIManager.getViewManagerConfig = UIManagerJS.getViewManagerConfig;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @flow strict-local
9
+ */
10
+
11
+ import type {
12
+ HostComponent,
13
+ INativeMethods,
14
+ InternalInstanceHandle,
15
+ MeasureInWindowOnSuccessCallback,
16
+ MeasureLayoutOnSuccessCallback,
17
+ MeasureOnSuccessCallback,
18
+ ViewConfig,
19
+ } from '../../Renderer/shims/ReactNativeTypes';
20
+ import type {ElementRef} from 'react';
21
+
22
+ import TextInputState from '../../Components/TextInput/TextInputState';
23
+ import {getNodeFromInternalInstanceHandle} from '../../Renderer/shims/ReactFabric';
24
+ import {getFabricUIManager} from '../FabricUIManager';
25
+ import {create} from './ReactNativeAttributePayload';
26
+ import warnForStyleProps from './warnForStyleProps';
27
+ import nullthrows from 'nullthrows';
28
+
29
+ const {
30
+ measure: fabricMeasure,
31
+ measureInWindow: fabricMeasureInWindow,
32
+ measureLayout: fabricMeasureLayout,
33
+ getBoundingClientRect: fabricGetBoundingClientRect,
34
+ setNativeProps,
35
+ } = nullthrows(getFabricUIManager());
36
+
37
+ const noop = () => {};
38
+
39
+ /**
40
+ * This is used for refs on host components.
41
+ */
42
+ export default class ReactFabricHostComponent implements INativeMethods {
43
+ // These need to be accessible from `ReactFabricPublicInstanceUtils`.
44
+ __nativeTag: number;
45
+ __internalInstanceHandle: InternalInstanceHandle;
46
+
47
+ _viewConfig: ViewConfig;
48
+
49
+ constructor(
50
+ tag: number,
51
+ viewConfig: ViewConfig,
52
+ internalInstanceHandle: InternalInstanceHandle,
53
+ ) {
54
+ this.__nativeTag = tag;
55
+ this._viewConfig = viewConfig;
56
+ this.__internalInstanceHandle = internalInstanceHandle;
57
+ }
58
+
59
+ blur() {
60
+ // $FlowFixMe[incompatible-exact] Migrate all usages of `NativeMethods` to an interface to fix this.
61
+ TextInputState.blurTextInput(this);
62
+ }
63
+
64
+ focus() {
65
+ // $FlowFixMe[incompatible-exact] Migrate all usages of `NativeMethods` to an interface to fix this.
66
+ TextInputState.focusTextInput(this);
67
+ }
68
+
69
+ measure(callback: MeasureOnSuccessCallback) {
70
+ const node = getNodeFromInternalInstanceHandle(
71
+ this.__internalInstanceHandle,
72
+ );
73
+ if (node != null) {
74
+ fabricMeasure(node, callback);
75
+ }
76
+ }
77
+
78
+ measureInWindow(callback: MeasureInWindowOnSuccessCallback) {
79
+ const node = getNodeFromInternalInstanceHandle(
80
+ this.__internalInstanceHandle,
81
+ );
82
+ if (node != null) {
83
+ fabricMeasureInWindow(node, callback);
84
+ }
85
+ }
86
+
87
+ measureLayout(
88
+ relativeToNativeNode: number | ElementRef<HostComponent<mixed>>,
89
+ onSuccess: MeasureLayoutOnSuccessCallback,
90
+ onFail?: () => void /* currently unused */,
91
+ ) {
92
+ if (
93
+ typeof relativeToNativeNode === 'number' ||
94
+ !(relativeToNativeNode instanceof ReactFabricHostComponent)
95
+ ) {
96
+ if (__DEV__) {
97
+ console.error(
98
+ 'Warning: ref.measureLayout must be called with a ref to a native component.',
99
+ );
100
+ }
101
+
102
+ return;
103
+ }
104
+
105
+ const toStateNode = getNodeFromInternalInstanceHandle(
106
+ this.__internalInstanceHandle,
107
+ );
108
+ const fromStateNode = getNodeFromInternalInstanceHandle(
109
+ relativeToNativeNode.__internalInstanceHandle,
110
+ );
111
+
112
+ if (toStateNode != null && fromStateNode != null) {
113
+ fabricMeasureLayout(
114
+ toStateNode,
115
+ fromStateNode,
116
+ onFail != null ? onFail : noop,
117
+ onSuccess != null ? onSuccess : noop,
118
+ );
119
+ }
120
+ }
121
+
122
+ unstable_getBoundingClientRect(): DOMRect {
123
+ const node = getNodeFromInternalInstanceHandle(
124
+ this.__internalInstanceHandle,
125
+ );
126
+ if (node != null) {
127
+ const rect = fabricGetBoundingClientRect(node, true);
128
+
129
+ if (rect) {
130
+ return new DOMRect(rect[0], rect[1], rect[2], rect[3]);
131
+ }
132
+ }
133
+
134
+ // Empty rect if any of the above failed
135
+ return new DOMRect(0, 0, 0, 0);
136
+ }
137
+
138
+ setNativeProps(nativeProps: {...}): void {
139
+ if (__DEV__) {
140
+ warnForStyleProps(nativeProps, this._viewConfig.validAttributes);
141
+ }
142
+ const updatePayload = create(nativeProps, this._viewConfig.validAttributes);
143
+
144
+ const node = getNodeFromInternalInstanceHandle(
145
+ this.__internalInstanceHandle,
146
+ );
147
+ if (node != null && updatePayload != null) {
148
+ setNativeProps(node, updatePayload);
149
+ }
150
+ }
151
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ * @format
8
+ * @flow strict-local
9
+ */
10
+
11
+ import type ReactNativeElement from '../../DOM/Nodes/ReactNativeElement';
12
+ import type ReadOnlyText from '../../DOM/Nodes/ReadOnlyText';
13
+ import typeof ReactFabricType from '../../Renderer/shims/ReactFabric';
14
+ import type {
15
+ InternalInstanceHandle,
16
+ Node,
17
+ ViewConfig,
18
+ } from '../../Renderer/shims/ReactNativeTypes';
19
+ import type ReactFabricHostComponent from './ReactFabricHostComponent';
20
+
21
+ import ReactNativeFeatureFlags from '../ReactNativeFeatureFlags';
22
+
23
+ // Lazy loaded to avoid evaluating the module when using the legacy renderer.
24
+ let PublicInstanceClass:
25
+ | Class<ReactFabricHostComponent>
26
+ | Class<ReactNativeElement>;
27
+ let ReadOnlyTextClass: Class<ReadOnlyText>;
28
+
29
+ // Lazy loaded to avoid evaluating the module when using the legacy renderer.
30
+ let ReactFabric: ReactFabricType;
31
+
32
+ export function createPublicInstance(
33
+ tag: number,
34
+ viewConfig: ViewConfig,
35
+ internalInstanceHandle: InternalInstanceHandle,
36
+ ): ReactFabricHostComponent | ReactNativeElement {
37
+ if (PublicInstanceClass == null) {
38
+ // We don't use inline requires in react-native, so this forces lazy loading
39
+ // the right module to avoid eagerly loading both.
40
+ if (ReactNativeFeatureFlags.enableAccessToHostTreeInFabric()) {
41
+ PublicInstanceClass =
42
+ require('../../DOM/Nodes/ReactNativeElement').default;
43
+ } else {
44
+ PublicInstanceClass = require('./ReactFabricHostComponent').default;
45
+ }
46
+ }
47
+
48
+ return new PublicInstanceClass(tag, viewConfig, internalInstanceHandle);
49
+ }
50
+
51
+ export function createPublicTextInstance(
52
+ internalInstanceHandle: InternalInstanceHandle,
53
+ ): ReadOnlyText {
54
+ if (ReadOnlyTextClass == null) {
55
+ ReadOnlyTextClass = require('../../DOM/Nodes/ReadOnlyText').default;
56
+ }
57
+
58
+ return new ReadOnlyTextClass(internalInstanceHandle);
59
+ }
60
+
61
+ export function getNativeTagFromPublicInstance(
62
+ publicInstance: ReactFabricHostComponent | ReactNativeElement,
63
+ ): number {
64
+ return publicInstance.__nativeTag;
65
+ }
66
+
67
+ export function getNodeFromPublicInstance(
68
+ publicInstance: ReactFabricHostComponent | ReactNativeElement,
69
+ ): ?Node {
70
+ // Avoid loading ReactFabric if using an instance from the legacy renderer.
71
+ if (publicInstance.__internalInstanceHandle == null) {
72
+ return null;
73
+ }
74
+
75
+ if (ReactFabric == null) {
76
+ ReactFabric = require('../../Renderer/shims/ReactFabric');
77
+ }
78
+ return ReactFabric.getNodeFromInternalInstanceHandle(
79
+ publicInstance.__internalInstanceHandle,
80
+ );
81
+ }