@office-iss/react-native-win32 0.0.0-canary.299 → 0.0.0-canary.300

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 (99) hide show
  1. package/.flowconfig +3 -6
  2. package/CHANGELOG.json +46 -1
  3. package/CHANGELOG.md +19 -6
  4. package/IntegrationTests/IntegrationTestsApp.js +1 -1
  5. package/Libraries/Alert/RCTAlertManager.android.js +2 -0
  6. package/Libraries/Animated/Animated.d.ts +2 -0
  7. package/Libraries/Animated/AnimatedImplementation.js +2 -0
  8. package/Libraries/Animated/Easing.js +2 -0
  9. package/Libraries/Animated/animations/Animation.js +14 -14
  10. package/Libraries/Animated/animations/TimingAnimation.js +2 -0
  11. package/Libraries/Animated/nodes/AnimatedNode.js +7 -7
  12. package/Libraries/Animated/nodes/AnimatedObject.js +7 -7
  13. package/Libraries/Animated/nodes/AnimatedProps.js +30 -30
  14. package/Libraries/Animated/nodes/AnimatedStyle.js +17 -17
  15. package/Libraries/Animated/nodes/AnimatedTransform.js +5 -5
  16. package/Libraries/Animated/nodes/AnimatedValue.js +18 -18
  17. package/Libraries/AppState/AppState.js +3 -3
  18. package/Libraries/BatchedBridge/MessageQueue.js +4 -0
  19. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.js +1 -1
  20. package/Libraries/Components/AccessibilityInfo/AccessibilityInfo.win32.js +1 -1
  21. package/Libraries/Components/Pressable/Pressable.js +10 -1
  22. package/Libraries/Components/Pressable/Pressable.win32.js +9 -0
  23. package/Libraries/Components/StatusBar/StatusBar.js +2 -2
  24. package/Libraries/Components/Switch/Switch.js +1 -1
  25. package/Libraries/Components/TextInput/TextInput.js +2 -2
  26. package/Libraries/Components/TextInput/TextInput.win32.js +2 -1
  27. package/Libraries/Components/Touchable/TouchableBounce.js +1 -1
  28. package/Libraries/Components/Touchable/TouchableHighlight.js +1 -1
  29. package/Libraries/Components/Touchable/TouchableNativeFeedback.js +1 -1
  30. package/Libraries/Components/Touchable/TouchableOpacity.js +1 -1
  31. package/Libraries/Components/Touchable/TouchableWithoutFeedback.js +2 -2
  32. package/Libraries/Components/View/View.js +86 -168
  33. package/Libraries/Core/ReactNativeVersion.js +37 -10
  34. package/Libraries/Core/Timers/queueMicrotask.js +1 -0
  35. package/Libraries/Core/setUpPerformance.js +2 -1
  36. package/Libraries/Interaction/InteractionManager.js +118 -171
  37. package/Libraries/LayoutAnimation/LayoutAnimation.js +2 -0
  38. package/Libraries/LogBox/Data/LogBoxData.js +4 -1
  39. package/Libraries/Modal/Modal.js +1 -1
  40. package/Libraries/NativeComponent/ViewConfig.js +1 -1
  41. package/Libraries/Network/XMLHttpRequest.js +18 -5
  42. package/Libraries/Pressability/Pressability.js +1 -1
  43. package/Libraries/Pressability/Pressability.win32.js +1 -1
  44. package/Libraries/ReactNative/AppRegistryImpl.js +4 -2
  45. package/Libraries/Renderer/implementations/ReactFabric-dev.js +38 -35
  46. package/Libraries/Renderer/implementations/ReactFabric-prod.js +51 -22
  47. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +54 -24
  48. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +36 -33
  49. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +5 -5
  50. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +5 -5
  51. package/Libraries/Renderer/shims/ReactFabric.js +3 -1
  52. package/Libraries/Renderer/shims/ReactFeatureFlags.js +3 -1
  53. package/Libraries/Renderer/shims/ReactNative.js +3 -1
  54. package/Libraries/Renderer/shims/ReactNativeViewConfigRegistry.js +3 -1
  55. package/Libraries/Renderer/shims/createReactNativeComponentClass.js +3 -1
  56. package/Libraries/Utilities/useMergeRefs.js +1 -1
  57. package/Libraries/promiseRejectionTrackingOptions.js +17 -31
  58. package/flow/HermesInternalType.js +114 -0
  59. package/flow/Stringish.js +14 -0
  60. package/flow/bom.js.flow +554 -0
  61. package/flow/console.js +49 -0
  62. package/flow/cssom.js.flow +575 -0
  63. package/flow/dom.js.flow +6289 -0
  64. package/flow/global.js +88 -0
  65. package/flow/prettier.js.flow +14 -0
  66. package/flow/streams.js.flow +140 -0
  67. package/index.js +5 -2
  68. package/index.win32.js +6 -2
  69. package/jest/mockComponent.js +1 -1
  70. package/jest/setup.js +11 -0
  71. package/overrides.json +11 -11
  72. package/package.json +19 -19
  73. package/src/private/animated/NativeAnimatedHelper.js +8 -1
  74. package/src/private/animated/NativeAnimatedHelper.win32.js +8 -1
  75. package/src/private/animated/createAnimatedPropsHook.js +2 -49
  76. package/src/private/animated/createAnimatedPropsMemoHook.js +2 -48
  77. package/src/private/components/virtualview/VirtualView.js +22 -6
  78. package/src/private/components/virtualview/VirtualViewExperimentalNativeComponent.js +93 -0
  79. package/src/private/devsupport/devmenu/elementinspector/ReactDevToolsOverlay.js +2 -2
  80. package/src/private/featureflags/ReactNativeFeatureFlags.js +71 -51
  81. package/src/private/featureflags/ReactNativeFeatureFlagsBase.js +19 -0
  82. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +15 -5
  83. package/src/private/webapis/dom/nodes/ReadOnlyElement.js +1 -1
  84. package/src/private/webapis/dom/oldstylecollections/HTMLCollection.js +2 -2
  85. package/src/private/webapis/dom/oldstylecollections/NodeList.js +2 -2
  86. package/src/private/webapis/geometry/DOMRectList.js +2 -2
  87. package/src/private/webapis/intersectionobserver/internals/IntersectionObserverManager.js +19 -74
  88. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +0 -4
  89. package/src/private/webapis/performance/EventTiming.js +5 -9
  90. package/src/private/webapis/performance/Performance.js +251 -191
  91. package/src/private/webapis/performance/PerformanceObserver.js +8 -29
  92. package/src/private/webapis/performance/UserTiming.js +24 -23
  93. package/src/private/webapis/performance/UserTimingExtensibility.js.flow +38 -0
  94. package/src/private/webapis/performance/internals/Utilities.js +9 -0
  95. package/src/private/webapis/performance/specs/NativePerformance.js +19 -33
  96. package/src/private/webapis/structuredClone/structuredClone.js +1 -1
  97. package/Libraries/Interaction/InteractionManagerStub.js +0 -184
  98. package/Libraries/Interaction/TaskQueue.js +0 -197
  99. package/Libraries/ReactNative/ReactNativeFeatureFlags.js +0 -31
@@ -16,9 +16,8 @@ import {AnimatedEvent} from '../../../Libraries/Animated/AnimatedEvent';
16
16
  import AnimatedNode from '../../../Libraries/Animated/nodes/AnimatedNode';
17
17
  import {isPlainObject} from '../../../Libraries/Animated/nodes/AnimatedObject';
18
18
  import flattenStyle from '../../../Libraries/StyleSheet/flattenStyle';
19
- import * as ReactNativeFeatureFlags from '../featureflags/ReactNativeFeatureFlags';
20
19
  import nullthrows from 'nullthrows';
21
- import {useInsertionEffect, useMemo, useRef, useState} from 'react';
20
+ import {useInsertionEffect, useMemo, useRef} from 'react';
22
21
 
23
22
  type CompositeKey = {
24
23
  style?: {[string]: CompositeKeyComponent},
@@ -64,19 +63,6 @@ export function createAnimatedPropsMemoHook(
64
63
  return function useAnimatedPropsMemo(
65
64
  create: () => AnimatedProps,
66
65
  props: $ReadOnly<{[string]: mixed}>,
67
- ): AnimatedProps {
68
- // NOTE: This feature flag must be evaluated inside the hook because this
69
- // module factory can be evaluated much sooner, before overrides are set.
70
- const useAnimatedPropsImpl =
71
- ReactNativeFeatureFlags.avoidStateUpdateInAnimatedPropsMemo()
72
- ? useAnimatedPropsMemo_ref
73
- : useAnimatedPropsMemo_state;
74
- return useAnimatedPropsImpl(create, props);
75
- };
76
-
77
- function useAnimatedPropsMemo_ref(
78
- create: () => AnimatedProps,
79
- props: $ReadOnly<{[string]: mixed}>,
80
66
  ): AnimatedProps {
81
67
  const compositeKey = useMemo(
82
68
  () => createCompositeKeyForProps(props, allowlist),
@@ -102,39 +88,7 @@ export function createAnimatedPropsMemoHook(
102
88
  }, [next]);
103
89
 
104
90
  return next.node;
105
- }
106
-
107
- function useAnimatedPropsMemo_state(
108
- create: () => AnimatedProps,
109
- props: $ReadOnly<{[string]: mixed}>,
110
- ): AnimatedProps {
111
- const compositeKey = useMemo(
112
- () => createCompositeKeyForProps(props, allowlist),
113
- [props],
114
- );
115
-
116
- const [state, setState] = useState<{
117
- allowlist: ?AnimatedPropsAllowlist,
118
- compositeKey: $ReadOnlyCompositeKey | null,
119
- value: AnimatedProps,
120
- }>(() => ({
121
- allowlist,
122
- compositeKey,
123
- value: create(),
124
- }));
125
-
126
- if (
127
- state.allowlist !== allowlist ||
128
- !areCompositeKeysEqual(state.compositeKey, compositeKey)
129
- ) {
130
- setState({
131
- allowlist,
132
- compositeKey,
133
- value: create(),
134
- });
135
- }
136
- return state.value;
137
- }
91
+ };
138
92
  }
139
93
 
140
94
  /**
@@ -14,6 +14,7 @@ import type ReadOnlyElement from '../../webapis/dom/nodes/ReadOnlyElement';
14
14
  import type {NativeModeChangeEvent} from './VirtualViewNativeComponent';
15
15
 
16
16
  import StyleSheet from '../../../../Libraries/StyleSheet/StyleSheet';
17
+ import VirtualViewExperimentalNativeComponent from './VirtualViewExperimentalNativeComponent';
17
18
  import VirtualViewNativeComponent from './VirtualViewNativeComponent';
18
19
  import nullthrows from 'nullthrows';
19
20
  import * as React from 'react';
@@ -59,9 +60,16 @@ const NotHidden = null;
59
60
 
60
61
  type State = HiddenHeight | typeof NotHidden;
61
62
 
62
- function createVirtualView(initialState: State): VirtualViewComponent {
63
+ function createVirtualView(
64
+ initialState: State,
65
+ experimental: boolean,
66
+ ): VirtualViewComponent {
63
67
  const initialHidden = initialState !== NotHidden;
64
68
 
69
+ const NativeComponent = experimental
70
+ ? VirtualViewExperimentalNativeComponent
71
+ : VirtualViewNativeComponent;
72
+
65
73
  component VirtualView(
66
74
  children?: React.Node,
67
75
  nativeID?: string,
@@ -112,7 +120,7 @@ function createVirtualView(initialState: State): VirtualViewComponent {
112
120
  };
113
121
 
114
122
  return (
115
- <VirtualViewNativeComponent
123
+ <NativeComponent
116
124
  initialHidden={initialHidden}
117
125
  nativeID={nativeID}
118
126
  ref={ref}
@@ -130,16 +138,24 @@ function createVirtualView(initialState: State): VirtualViewComponent {
130
138
  }
131
139
  onModeChange={handleModeChange}>
132
140
  {isHidden ? null : children}
133
- </VirtualViewNativeComponent>
141
+ </NativeComponent>
134
142
  );
135
143
  }
136
144
  return VirtualView;
137
145
  }
138
146
 
139
- export default createVirtualView(NotHidden) as VirtualViewComponent;
147
+ export default createVirtualView(NotHidden, false) as VirtualViewComponent;
148
+
149
+ export const VirtualViewExperimental = createVirtualView(
150
+ NotHidden,
151
+ true,
152
+ ) as VirtualViewComponent;
140
153
 
141
- export function createHiddenVirtualView(height: number): VirtualViewComponent {
142
- return createVirtualView(height as HiddenHeight);
154
+ export function createHiddenVirtualView(
155
+ height: number,
156
+ experimental: boolean,
157
+ ): VirtualViewComponent {
158
+ return createVirtualView(height as HiddenHeight, experimental);
143
159
  }
144
160
 
145
161
  export const _logs: {states?: Array<State>} = {};
@@ -0,0 +1,93 @@
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
+ * @flow strict-local
8
+ * @format
9
+ */
10
+
11
+ import type {ViewProps} from '../../../../Libraries/Components/View/ViewPropTypes';
12
+ import type {
13
+ DirectEventHandler,
14
+ Double,
15
+ Int32,
16
+ } from '../../../../Libraries/Types/CodegenTypes';
17
+ import type {HostComponent} from '../../types/HostComponent';
18
+
19
+ import codegenNativeComponent from '../../../../Libraries/Utilities/codegenNativeComponent';
20
+
21
+ export type NativeModeChangeEvent = $ReadOnly<{
22
+ /**
23
+ * Virtualization mode of the target view.
24
+ *
25
+ * - `0`: Target view is visible.
26
+ * - `1`: Target view is hidden, but can be prerendered.
27
+ * - `2`: Target view is hidden.
28
+ *
29
+ * WORKAROUND: As of this writing, codegen doesn't support enums, so we need
30
+ * to convert `number` into an enum in `VirtualView`.
31
+ */
32
+ mode: Int32,
33
+
34
+ /**
35
+ * Rect of the target view, relative to the nearest ancestor scroll container.
36
+ */
37
+ targetRect: $ReadOnly<{
38
+ x: Double,
39
+ y: Double,
40
+ width: Double,
41
+ height: Double,
42
+ }>,
43
+
44
+ /**
45
+ * Rect of the threshold that determines the mode of the target view, relative
46
+ * to the nearest ancestor scroll container.
47
+ *
48
+ * - `Visible`: Rect in which the target view is visible.
49
+ * - `Prerender`: Rect in which the target view is prerendered.
50
+ * - `Hidden`: Unused, without any guarantees.
51
+ *
52
+ * This can be used to determine whether and how much new content to render.
53
+ */
54
+ thresholdRect: $ReadOnly<{
55
+ x: Double,
56
+ y: Double,
57
+ width: Double,
58
+ height: Double,
59
+ }>,
60
+ }>;
61
+
62
+ type VirtualViewExperimentalNativeProps = $ReadOnly<{
63
+ ...ViewProps,
64
+
65
+ /**
66
+ * Whether the initial mode should be `Hidden`.
67
+ */
68
+ initialHidden?: boolean,
69
+
70
+ /**
71
+ * Render state of children.
72
+ *
73
+ * - `0`: Reserved to represent unknown future values.
74
+ * - `1`: Children are rendered.
75
+ * - `2`: Children are not rendered.
76
+ *
77
+ * WORKAROUND: As of this writing, codegen doesn't support enums, so we need
78
+ * to convert `number` into an enum in `VirtualView`.
79
+ */
80
+ renderState: Int32,
81
+
82
+ /**
83
+ * See `NativeModeChangeEvent`.
84
+ */
85
+ onModeChange?: ?DirectEventHandler<NativeModeChangeEvent>,
86
+ }>;
87
+
88
+ export default codegenNativeComponent<VirtualViewExperimentalNativeProps>(
89
+ 'VirtualViewExperimental',
90
+ {
91
+ interfaceOnly: true,
92
+ },
93
+ ) as HostComponent<VirtualViewExperimentalNativeProps>;
@@ -15,8 +15,8 @@ import type {ReactDevToolsAgent} from '../../../../../Libraries/Types/ReactDevTo
15
15
  import type {InspectedElement} from './Inspector';
16
16
 
17
17
  import View from '../../../../../Libraries/Components/View/View';
18
- import ReactNativeFeatureFlags from '../../../../../Libraries/ReactNative/ReactNativeFeatureFlags';
19
18
  import StyleSheet from '../../../../../Libraries/StyleSheet/StyleSheet';
19
+ import * as ReactNativeFeatureFlags from '../../../../../src/private/featureflags/ReactNativeFeatureFlags';
20
20
  import ElementBox from './ElementBox';
21
21
  import * as React from 'react';
22
22
 
@@ -129,7 +129,7 @@ export default function ReactDevToolsOverlay({
129
129
  if (isInspecting) {
130
130
  const events =
131
131
  // Pointer events only work on fabric
132
- ReactNativeFeatureFlags.shouldEmitW3CPointerEvents()
132
+ ReactNativeFeatureFlags.shouldPressibilityUseW3CPointerEventsForHover()
133
133
  ? {
134
134
  onPointerMove,
135
135
  onPointerDown: onPointerMove,
@@ -4,7 +4,7 @@
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
- * @generated SignedSource<<b75fccb46a36b07c692d890f0659f9a3>>
7
+ * @generated SignedSource<<24a5d3213cbc7cd101d34e059ba5c8c4>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -29,21 +29,16 @@ import {
29
29
 
30
30
  export type ReactNativeFeatureFlagsJsOnly = $ReadOnly<{
31
31
  jsOnlyTestFlag: Getter<boolean>,
32
- alwaysFlattenAnimatedStyles: Getter<boolean>,
33
32
  animatedShouldDebounceQueueFlush: Getter<boolean>,
34
33
  animatedShouldUseSingleOp: Getter<boolean>,
35
- avoidStateUpdateInAnimatedPropsMemo: Getter<boolean>,
36
34
  deferFlatListFocusChangeRenderUpdate: Getter<boolean>,
37
- disableInteractionManager: Getter<boolean>,
38
35
  enableAccessToHostTreeInFabric: Getter<boolean>,
39
36
  fixVirtualizeListCollapseWindowSize: Getter<boolean>,
40
37
  isLayoutAnimationEnabled: Getter<boolean>,
41
- reduceDefaultPropsInView: Getter<boolean>,
42
- scheduleAnimatedCleanupInMicrotask: Getter<boolean>,
38
+ reduceDefaultPropsInText: Getter<boolean>,
43
39
  shouldUseAnimatedObjectForTransform: Getter<boolean>,
44
40
  shouldUseRemoveClippedSubviewsAsDefaultOnIOS: Getter<boolean>,
45
41
  shouldUseSetNativePropsInFabric: Getter<boolean>,
46
- utilizeTokensInIntersectionObserver: Getter<boolean>,
47
42
  }>;
48
43
 
49
44
  export type ReactNativeFeatureFlagsJsOnlyOverrides = OverridesFor<ReactNativeFeatureFlagsJsOnly>;
@@ -52,11 +47,12 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
52
47
  ...ReactNativeFeatureFlagsJsOnly,
53
48
  commonTestFlag: Getter<boolean>,
54
49
  commonTestFlagWithoutNativeImplementation: Getter<boolean>,
55
- animatedShouldSignalBatch: Getter<boolean>,
50
+ cdpInteractionMetricsEnabled: Getter<boolean>,
56
51
  cxxNativeAnimatedEnabled: Getter<boolean>,
57
52
  cxxNativeAnimatedRemoveJsSync: Getter<boolean>,
58
- disableMainQueueSyncDispatchIOS: Getter<boolean>,
53
+ disableFabricCommitInCXXAnimated: Getter<boolean>,
59
54
  disableMountItemReorderingAndroid: Getter<boolean>,
55
+ disableOldAndroidAttachmentMetricsWorkarounds: Getter<boolean>,
60
56
  disableTextLayoutManagerCacheAndroid: Getter<boolean>,
61
57
  enableAccessibilityOrder: Getter<boolean>,
62
58
  enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>,
@@ -66,6 +62,7 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
66
62
  enableCustomFocusSearchOnClippedElementsAndroid: Getter<boolean>,
67
63
  enableDestroyShadowTreeRevisionAsync: Getter<boolean>,
68
64
  enableDoubleMeasurementFixAndroid: Getter<boolean>,
65
+ enableEagerMainQueueModulesOnIOS: Getter<boolean>,
69
66
  enableEagerRootViewAttachment: Getter<boolean>,
70
67
  enableFabricLogs: Getter<boolean>,
71
68
  enableFabricRenderer: Getter<boolean>,
@@ -73,11 +70,12 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
73
70
  enableFontScaleChangesUpdatingLayout: Getter<boolean>,
74
71
  enableIOSTextBaselineOffsetPerLine: Getter<boolean>,
75
72
  enableIOSViewClipToPaddingBox: Getter<boolean>,
73
+ enableImagePrefetchingAndroid: Getter<boolean>,
74
+ enableImmediateUpdateModeForContentOffsetChanges: Getter<boolean>,
76
75
  enableInteropViewManagerClassLookUpOptimizationIOS: Getter<boolean>,
77
76
  enableLayoutAnimationsOnAndroid: Getter<boolean>,
78
77
  enableLayoutAnimationsOnIOS: Getter<boolean>,
79
78
  enableMainQueueCoordinatorOnIOS: Getter<boolean>,
80
- enableMainQueueModulesOnIOS: Getter<boolean>,
81
79
  enableModuleArgumentNSNullConversionIOS: Getter<boolean>,
82
80
  enableNativeCSSParsing: Getter<boolean>,
83
81
  enableNetworkEventReporting: Getter<boolean>,
@@ -85,7 +83,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
85
83
  enablePreparedTextLayout: Getter<boolean>,
86
84
  enablePropsUpdateReconciliationAndroid: Getter<boolean>,
87
85
  enableResourceTimingAPI: Getter<boolean>,
88
- enableSynchronousStateUpdates: Getter<boolean>,
89
86
  enableViewCulling: Getter<boolean>,
90
87
  enableViewRecycling: Getter<boolean>,
91
88
  enableViewRecyclingForText: Getter<boolean>,
@@ -97,11 +94,19 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
97
94
  fuseboxEnabledRelease: Getter<boolean>,
98
95
  fuseboxNetworkInspectionEnabled: Getter<boolean>,
99
96
  hideOffscreenVirtualViewsOnIOS: Getter<boolean>,
97
+ perfMonitorV2Enabled: Getter<boolean>,
100
98
  preparedTextCacheSize: Getter<number>,
99
+ preventShadowTreeCommitExhaustion: Getter<boolean>,
100
+ releaseImageDataWhenConsumed: Getter<boolean>,
101
+ shouldPressibilityUseW3CPointerEventsForHover: Getter<boolean>,
102
+ skipActivityIdentityAssertionOnHostPause: Getter<boolean>,
103
+ sweepActiveTouchOnChildNativeGesturesAndroid: Getter<boolean>,
101
104
  traceTurboModulePromiseRejectionsOnAndroid: Getter<boolean>,
102
105
  updateRuntimeShadowNodeReferencesOnCommit: Getter<boolean>,
103
106
  useAlwaysAvailableJSErrorHandling: Getter<boolean>,
104
107
  useFabricInterop: Getter<boolean>,
108
+ useNativeEqualsInNativeReadableArrayAndroid: Getter<boolean>,
109
+ useNativeTransformHelperAndroid: Getter<boolean>,
105
110
  useNativeViewConfigsInBridgelessMode: Getter<boolean>,
106
111
  useOptimizedEventBatchingOnAndroid: Getter<boolean>,
107
112
  useRawPropsJsiValue: Getter<boolean>,
@@ -116,11 +121,6 @@ export type ReactNativeFeatureFlags = $ReadOnly<{
116
121
  */
117
122
  export const jsOnlyTestFlag: Getter<boolean> = createJavaScriptFlagGetter('jsOnlyTestFlag', false);
118
123
 
119
- /**
120
- * Changes `Animated` to always flatten style, fixing a bug with shadowed `AnimatedNode` instances.
121
- */
122
- export const alwaysFlattenAnimatedStyles: Getter<boolean> = createJavaScriptFlagGetter('alwaysFlattenAnimatedStyles', false);
123
-
124
124
  /**
125
125
  * Enables an experimental flush-queue debouncing in Animated.js.
126
126
  */
@@ -131,21 +131,11 @@ export const animatedShouldDebounceQueueFlush: Getter<boolean> = createJavaScrip
131
131
  */
132
132
  export const animatedShouldUseSingleOp: Getter<boolean> = createJavaScriptFlagGetter('animatedShouldUseSingleOp', false);
133
133
 
134
- /**
135
- * Changes `useAnimatedPropsMemo` to avoid state updates to invalidate the cached `AnimatedProps`.
136
- */
137
- export const avoidStateUpdateInAnimatedPropsMemo: Getter<boolean> = createJavaScriptFlagGetter('avoidStateUpdateInAnimatedPropsMemo', true);
138
-
139
134
  /**
140
135
  * Use the deferred cell render update mechanism for focus change in FlatList.
141
136
  */
142
137
  export const deferFlatListFocusChangeRenderUpdate: Getter<boolean> = createJavaScriptFlagGetter('deferFlatListFocusChangeRenderUpdate', false);
143
138
 
144
- /**
145
- * Disables InteractionManager and replaces its scheduler with `setImmediate`.
146
- */
147
- export const disableInteractionManager: Getter<boolean> = createJavaScriptFlagGetter('disableInteractionManager', true);
148
-
149
139
  /**
150
140
  * Enables access to the host tree in Fabric using DOM-compatible APIs.
151
141
  */
@@ -162,14 +152,9 @@ export const fixVirtualizeListCollapseWindowSize: Getter<boolean> = createJavaSc
162
152
  export const isLayoutAnimationEnabled: Getter<boolean> = createJavaScriptFlagGetter('isLayoutAnimationEnabled', true);
163
153
 
164
154
  /**
165
- * Optimize how default (accessibility) props are processed in View to avoid unnecessary keys.
166
- */
167
- export const reduceDefaultPropsInView: Getter<boolean> = createJavaScriptFlagGetter('reduceDefaultPropsInView', true);
168
-
169
- /**
170
- * Changes the cleanup of `AnimatedProps` to occur in a microtask instead of synchronously during effect cleanup (for unmount) or subsequent mounts (for updates).
155
+ * Optimize how default props are processed in Text to avoid unnecessary keys.
171
156
  */
172
- export const scheduleAnimatedCleanupInMicrotask: Getter<boolean> = createJavaScriptFlagGetter('scheduleAnimatedCleanupInMicrotask', true);
157
+ export const reduceDefaultPropsInText: Getter<boolean> = createJavaScriptFlagGetter('reduceDefaultPropsInText', false);
173
158
 
174
159
  /**
175
160
  * Enables use of AnimatedObject for animating transform values.
@@ -186,11 +171,6 @@ export const shouldUseRemoveClippedSubviewsAsDefaultOnIOS: Getter<boolean> = cre
186
171
  */
187
172
  export const shouldUseSetNativePropsInFabric: Getter<boolean> = createJavaScriptFlagGetter('shouldUseSetNativePropsInFabric', true);
188
173
 
189
- /**
190
- * Use tokens in IntersectionObserver vs ShadowNode.
191
- */
192
- export const utilizeTokensInIntersectionObserver: Getter<boolean> = createJavaScriptFlagGetter('utilizeTokensInIntersectionObserver', true);
193
-
194
174
  /**
195
175
  * Common flag for testing. Do NOT modify.
196
176
  */
@@ -200,9 +180,9 @@ export const commonTestFlag: Getter<boolean> = createNativeFlagGetter('commonTes
200
180
  */
201
181
  export const commonTestFlagWithoutNativeImplementation: Getter<boolean> = createNativeFlagGetter('commonTestFlagWithoutNativeImplementation', false);
202
182
  /**
203
- * Enables start- and finishOperationBatch on any platform.
183
+ * Enable emitting of InteractionEntry live metrics to the debugger. Requires `enableBridgelessArchitecture`.
204
184
  */
205
- export const animatedShouldSignalBatch: Getter<boolean> = createNativeFlagGetter('animatedShouldSignalBatch', false);
185
+ export const cdpInteractionMetricsEnabled: Getter<boolean> = createNativeFlagGetter('cdpInteractionMetricsEnabled', false);
206
186
  /**
207
187
  * Use a C++ implementation of Native Animated instead of the platform implementation.
208
188
  */
@@ -212,13 +192,17 @@ export const cxxNativeAnimatedEnabled: Getter<boolean> = createNativeFlagGetter(
212
192
  */
213
193
  export const cxxNativeAnimatedRemoveJsSync: Getter<boolean> = createNativeFlagGetter('cxxNativeAnimatedRemoveJsSync', false);
214
194
  /**
215
- * Disable sync dispatch on the main queue on iOS
195
+ * Prevents use of Fabric commit in C++ Animated implementation
216
196
  */
217
- export const disableMainQueueSyncDispatchIOS: Getter<boolean> = createNativeFlagGetter('disableMainQueueSyncDispatchIOS', false);
197
+ export const disableFabricCommitInCXXAnimated: Getter<boolean> = createNativeFlagGetter('disableFabricCommitInCXXAnimated', false);
218
198
  /**
219
199
  * Prevent FabricMountingManager from reordering mountItems, which may lead to invalid state on the UI thread
220
200
  */
221
201
  export const disableMountItemReorderingAndroid: Getter<boolean> = createNativeFlagGetter('disableMountItemReorderingAndroid', false);
202
+ /**
203
+ * Disable some workarounds for old Android versions in TextLayoutManager logic for retrieving attachment metrics
204
+ */
205
+ export const disableOldAndroidAttachmentMetricsWorkarounds: Getter<boolean> = createNativeFlagGetter('disableOldAndroidAttachmentMetricsWorkarounds', true);
222
206
  /**
223
207
  * Turns off the global measurement cache used by TextLayoutManager on Android.
224
208
  */
@@ -255,6 +239,10 @@ export const enableDestroyShadowTreeRevisionAsync: Getter<boolean> = createNativ
255
239
  * When enabled a subset of components will avoid double measurement on Android.
256
240
  */
257
241
  export const enableDoubleMeasurementFixAndroid: Getter<boolean> = createNativeFlagGetter('enableDoubleMeasurementFixAndroid', false);
242
+ /**
243
+ * This infra allows native modules to initialize on the main thread, during React Native init.
244
+ */
245
+ export const enableEagerMainQueueModulesOnIOS: Getter<boolean> = createNativeFlagGetter('enableEagerMainQueueModulesOnIOS', false);
258
246
  /**
259
247
  * Feature flag to configure eager attachment of the root view/initialisation of the JS code.
260
248
  */
@@ -283,6 +271,14 @@ export const enableIOSTextBaselineOffsetPerLine: Getter<boolean> = createNativeF
283
271
  * iOS Views will clip to their padding box vs border box
284
272
  */
285
273
  export const enableIOSViewClipToPaddingBox: Getter<boolean> = createNativeFlagGetter('enableIOSViewClipToPaddingBox', false);
274
+ /**
275
+ * When enabled, Android will build and initiate image prefetch requests on ImageShadowNode::layout
276
+ */
277
+ export const enableImagePrefetchingAndroid: Getter<boolean> = createNativeFlagGetter('enableImagePrefetchingAndroid', false);
278
+ /**
279
+ * Dispatches state updates for content offset changes synchronously on the main thread.
280
+ */
281
+ export const enableImmediateUpdateModeForContentOffsetChanges: Getter<boolean> = createNativeFlagGetter('enableImmediateUpdateModeForContentOffsetChanges', false);
286
282
  /**
287
283
  * This is to fix the issue with interop view manager where component descriptor lookup is causing ViewManager to preload.
288
284
  */
@@ -299,10 +295,6 @@ export const enableLayoutAnimationsOnIOS: Getter<boolean> = createNativeFlagGett
299
295
  * Make RCTUnsafeExecuteOnMainQueueSync less likely to deadlock, when used in conjuction with sync rendering/events.
300
296
  */
301
297
  export const enableMainQueueCoordinatorOnIOS: Getter<boolean> = createNativeFlagGetter('enableMainQueueCoordinatorOnIOS', false);
302
- /**
303
- * Makes modules requiring main queue setup initialize on the main thread, during React Native init.
304
- */
305
- export const enableMainQueueModulesOnIOS: Getter<boolean> = createNativeFlagGetter('enableMainQueueModulesOnIOS', false);
306
298
  /**
307
299
  * Enable NSNull conversion when handling module arguments on iOS
308
300
  */
@@ -331,10 +323,6 @@ export const enablePropsUpdateReconciliationAndroid: Getter<boolean> = createNat
331
323
  * Enables the reporting of network resource timings through `PerformanceObserver`.
332
324
  */
333
325
  export const enableResourceTimingAPI: Getter<boolean> = createNativeFlagGetter('enableResourceTimingAPI', false);
334
- /**
335
- * Dispatches state updates synchronously in Fabric (e.g.: updates the scroll position in the shadow tree synchronously from the main thread).
336
- */
337
- export const enableSynchronousStateUpdates: Getter<boolean> = createNativeFlagGetter('enableSynchronousStateUpdates', false);
338
326
  /**
339
327
  * Enables View Culling: as soon as a view goes off screen, it can be reused anywhere in the UI and pieced together with other items to create new UI elements.
340
328
  */
@@ -358,7 +346,7 @@ export const enableVirtualViewDebugFeatures: Getter<boolean> = createNativeFlagG
358
346
  /**
359
347
  * Enables reading render state when dispatching VirtualView events.
360
348
  */
361
- export const enableVirtualViewRenderState: Getter<boolean> = createNativeFlagGetter('enableVirtualViewRenderState', false);
349
+ export const enableVirtualViewRenderState: Getter<boolean> = createNativeFlagGetter('enableVirtualViewRenderState', true);
362
350
  /**
363
351
  * Enables window focus detection for prioritizing VirtualView events.
364
352
  */
@@ -379,10 +367,34 @@ export const fuseboxNetworkInspectionEnabled: Getter<boolean> = createNativeFlag
379
367
  * Hides offscreen VirtualViews on iOS by setting hidden = YES to avoid extra cost of views
380
368
  */
381
369
  export const hideOffscreenVirtualViewsOnIOS: Getter<boolean> = createNativeFlagGetter('hideOffscreenVirtualViewsOnIOS', false);
370
+ /**
371
+ * Enable the V2 in-app Performance Monitor. This flag is global and should not be changed across React Host lifetimes.
372
+ */
373
+ export const perfMonitorV2Enabled: Getter<boolean> = createNativeFlagGetter('perfMonitorV2Enabled', false);
382
374
  /**
383
375
  * Number cached PreparedLayouts in TextLayoutManager cache
384
376
  */
385
377
  export const preparedTextCacheSize: Getter<number> = createNativeFlagGetter('preparedTextCacheSize', 200);
378
+ /**
379
+ * Enables a new mechanism in ShadowTree to prevent problems caused by multiple threads trying to commit concurrently. If a thread tries to commit a few times unsuccessfully, it will acquire a lock and try again.
380
+ */
381
+ export const preventShadowTreeCommitExhaustion: Getter<boolean> = createNativeFlagGetter('preventShadowTreeCommitExhaustion', false);
382
+ /**
383
+ * Releases the cached image data when it is consumed by the observers.
384
+ */
385
+ export const releaseImageDataWhenConsumed: Getter<boolean> = createNativeFlagGetter('releaseImageDataWhenConsumed', false);
386
+ /**
387
+ * Function used to enable / disable Pressibility from using W3C Pointer Events for its hover callbacks
388
+ */
389
+ export const shouldPressibilityUseW3CPointerEventsForHover: Getter<boolean> = createNativeFlagGetter('shouldPressibilityUseW3CPointerEventsForHover', false);
390
+ /**
391
+ * Skip activity identity assertion in ReactHostImpl::onHostPause()
392
+ */
393
+ export const skipActivityIdentityAssertionOnHostPause: Getter<boolean> = createNativeFlagGetter('skipActivityIdentityAssertionOnHostPause', false);
394
+ /**
395
+ * A flag to tell Fabric to sweep active touches from JSTouchDispatcher in Android when a child native gesture is started.
396
+ */
397
+ export const sweepActiveTouchOnChildNativeGesturesAndroid: Getter<boolean> = createNativeFlagGetter('sweepActiveTouchOnChildNativeGesturesAndroid', false);
386
398
  /**
387
399
  * Enables storing js caller stack when creating promise in native module. This is useful in case of Promise rejection and tracing the cause.
388
400
  */
@@ -399,6 +411,14 @@ export const useAlwaysAvailableJSErrorHandling: Getter<boolean> = createNativeFl
399
411
  * Should this application enable the Fabric Interop Layer for Android? If yes, the application will behave so that it can accept non-Fabric components and render them on Fabric. This toggle is controlling extra logic such as custom event dispatching that are needed for the Fabric Interop Layer to work correctly.
400
412
  */
401
413
  export const useFabricInterop: Getter<boolean> = createNativeFlagGetter('useFabricInterop', true);
414
+ /**
415
+ * Use a native implementation of equals in NativeReadableArray.
416
+ */
417
+ export const useNativeEqualsInNativeReadableArrayAndroid: Getter<boolean> = createNativeFlagGetter('useNativeEqualsInNativeReadableArrayAndroid', false);
418
+ /**
419
+ * Use a native implementation of TransformHelper
420
+ */
421
+ export const useNativeTransformHelperAndroid: Getter<boolean> = createNativeFlagGetter('useNativeTransformHelperAndroid', false);
402
422
  /**
403
423
  * When enabled, the native view configs are used in bridgeless mode.
404
424
  */
@@ -18,6 +18,10 @@ import NativeReactNativeFeatureFlags from './specs/NativeReactNativeFeatureFlags
18
18
  const accessedFeatureFlags: Set<string> = new Set();
19
19
  let overrides: ?ReactNativeFeatureFlagsJsOnlyOverrides;
20
20
 
21
+ // This is a list of functions to clear the cached value for each feature flag
22
+ // getter. This is only used in development.
23
+ const clearCachedValuesFns: Array<() => void> = [];
24
+
21
25
  export type Getter<T> = () => T;
22
26
 
23
27
  // This defines the types for the overrides object, whose methods also receive
@@ -33,6 +37,12 @@ function createGetter<T: boolean | number | string>(
33
37
  ): Getter<T> {
34
38
  let cachedValue: ?T;
35
39
 
40
+ if (__DEV__) {
41
+ clearCachedValuesFns.push(() => {
42
+ cachedValue = undefined;
43
+ });
44
+ }
45
+
36
46
  return () => {
37
47
  if (cachedValue == null) {
38
48
  cachedValue = customValueGetter() ?? defaultValue;
@@ -115,3 +125,12 @@ function maybeLogUnavailableNativeModuleError(configName: string): void {
115
125
  );
116
126
  }
117
127
  }
128
+
129
+ export function dangerouslyResetForTesting(): void {
130
+ if (__DEV__) {
131
+ overrides = null;
132
+ accessedFeatureFlags.clear();
133
+ reportedConfigNames.clear();
134
+ clearCachedValuesFns.forEach(fn => fn());
135
+ }
136
+ }
@@ -4,7 +4,7 @@
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
- * @generated SignedSource<<55c1f0223345b5680bbdd888a358f210>>
7
+ * @generated SignedSource<<4bd1c1bd236e9afa5b010f58683d5e67>>
8
8
  * @flow strict
9
9
  * @noformat
10
10
  */
@@ -26,11 +26,12 @@ import * as TurboModuleRegistry from '../../../../Libraries/TurboModule/TurboMod
26
26
  export interface Spec extends TurboModule {
27
27
  +commonTestFlag?: () => boolean;
28
28
  +commonTestFlagWithoutNativeImplementation?: () => boolean;
29
- +animatedShouldSignalBatch?: () => boolean;
29
+ +cdpInteractionMetricsEnabled?: () => boolean;
30
30
  +cxxNativeAnimatedEnabled?: () => boolean;
31
31
  +cxxNativeAnimatedRemoveJsSync?: () => boolean;
32
- +disableMainQueueSyncDispatchIOS?: () => boolean;
32
+ +disableFabricCommitInCXXAnimated?: () => boolean;
33
33
  +disableMountItemReorderingAndroid?: () => boolean;
34
+ +disableOldAndroidAttachmentMetricsWorkarounds?: () => boolean;
34
35
  +disableTextLayoutManagerCacheAndroid?: () => boolean;
35
36
  +enableAccessibilityOrder?: () => boolean;
36
37
  +enableAccumulatedUpdatesInRawPropsAndroid?: () => boolean;
@@ -40,6 +41,7 @@ export interface Spec extends TurboModule {
40
41
  +enableCustomFocusSearchOnClippedElementsAndroid?: () => boolean;
41
42
  +enableDestroyShadowTreeRevisionAsync?: () => boolean;
42
43
  +enableDoubleMeasurementFixAndroid?: () => boolean;
44
+ +enableEagerMainQueueModulesOnIOS?: () => boolean;
43
45
  +enableEagerRootViewAttachment?: () => boolean;
44
46
  +enableFabricLogs?: () => boolean;
45
47
  +enableFabricRenderer?: () => boolean;
@@ -47,11 +49,12 @@ export interface Spec extends TurboModule {
47
49
  +enableFontScaleChangesUpdatingLayout?: () => boolean;
48
50
  +enableIOSTextBaselineOffsetPerLine?: () => boolean;
49
51
  +enableIOSViewClipToPaddingBox?: () => boolean;
52
+ +enableImagePrefetchingAndroid?: () => boolean;
53
+ +enableImmediateUpdateModeForContentOffsetChanges?: () => boolean;
50
54
  +enableInteropViewManagerClassLookUpOptimizationIOS?: () => boolean;
51
55
  +enableLayoutAnimationsOnAndroid?: () => boolean;
52
56
  +enableLayoutAnimationsOnIOS?: () => boolean;
53
57
  +enableMainQueueCoordinatorOnIOS?: () => boolean;
54
- +enableMainQueueModulesOnIOS?: () => boolean;
55
58
  +enableModuleArgumentNSNullConversionIOS?: () => boolean;
56
59
  +enableNativeCSSParsing?: () => boolean;
57
60
  +enableNetworkEventReporting?: () => boolean;
@@ -59,7 +62,6 @@ export interface Spec extends TurboModule {
59
62
  +enablePreparedTextLayout?: () => boolean;
60
63
  +enablePropsUpdateReconciliationAndroid?: () => boolean;
61
64
  +enableResourceTimingAPI?: () => boolean;
62
- +enableSynchronousStateUpdates?: () => boolean;
63
65
  +enableViewCulling?: () => boolean;
64
66
  +enableViewRecycling?: () => boolean;
65
67
  +enableViewRecyclingForText?: () => boolean;
@@ -71,11 +73,19 @@ export interface Spec extends TurboModule {
71
73
  +fuseboxEnabledRelease?: () => boolean;
72
74
  +fuseboxNetworkInspectionEnabled?: () => boolean;
73
75
  +hideOffscreenVirtualViewsOnIOS?: () => boolean;
76
+ +perfMonitorV2Enabled?: () => boolean;
74
77
  +preparedTextCacheSize?: () => number;
78
+ +preventShadowTreeCommitExhaustion?: () => boolean;
79
+ +releaseImageDataWhenConsumed?: () => boolean;
80
+ +shouldPressibilityUseW3CPointerEventsForHover?: () => boolean;
81
+ +skipActivityIdentityAssertionOnHostPause?: () => boolean;
82
+ +sweepActiveTouchOnChildNativeGesturesAndroid?: () => boolean;
75
83
  +traceTurboModulePromiseRejectionsOnAndroid?: () => boolean;
76
84
  +updateRuntimeShadowNodeReferencesOnCommit?: () => boolean;
77
85
  +useAlwaysAvailableJSErrorHandling?: () => boolean;
78
86
  +useFabricInterop?: () => boolean;
87
+ +useNativeEqualsInNativeReadableArrayAndroid?: () => boolean;
88
+ +useNativeTransformHelperAndroid?: () => boolean;
79
89
  +useNativeViewConfigsInBridgelessMode?: () => boolean;
80
90
  +useOptimizedEventBatchingOnAndroid?: () => boolean;
81
91
  +useRawPropsJsiValue?: () => boolean;
@@ -220,7 +220,7 @@ export default class ReadOnlyElement extends ReadOnlyNode {
220
220
  }
221
221
 
222
222
  function getChildElements(node: ReadOnlyNode): $ReadOnlyArray<ReadOnlyElement> {
223
- // $FlowIssue[incompatible-call]
223
+ // $FlowFixMe[incompatible-call]
224
224
  return getChildNodes(node).filter(
225
225
  childNode => childNode instanceof ReadOnlyElement,
226
226
  );