@office-iss/react-native-win32 0.0.0-canary.277 → 0.0.0-canary.279

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 (84) hide show
  1. package/.flowconfig +1 -2
  2. package/CHANGELOG.json +55 -1
  3. package/CHANGELOG.md +24 -4
  4. package/Libraries/Animated/NativeAnimatedAllowlist.js +4 -4
  5. package/Libraries/Animated/animations/Animation.js +23 -2
  6. package/Libraries/Animated/animations/DecayAnimation.js +1 -0
  7. package/Libraries/Animated/animations/SpringAnimation.js +1 -0
  8. package/Libraries/Animated/animations/TimingAnimation.js +1 -0
  9. package/Libraries/Animated/nodes/AnimatedAddition.js +8 -2
  10. package/Libraries/Animated/nodes/AnimatedColor.js +4 -1
  11. package/Libraries/Animated/nodes/AnimatedDiffClamp.js +9 -2
  12. package/Libraries/Animated/nodes/AnimatedDivision.js +8 -2
  13. package/Libraries/Animated/nodes/AnimatedInterpolation.js +4 -1
  14. package/Libraries/Animated/nodes/AnimatedModulo.js +4 -2
  15. package/Libraries/Animated/nodes/AnimatedMultiplication.js +8 -2
  16. package/Libraries/Animated/nodes/AnimatedNode.js +25 -0
  17. package/Libraries/Animated/nodes/AnimatedObject.js +8 -2
  18. package/Libraries/Animated/nodes/AnimatedProps.js +13 -2
  19. package/Libraries/Animated/nodes/AnimatedStyle.js +13 -2
  20. package/Libraries/Animated/nodes/AnimatedSubtraction.js +8 -2
  21. package/Libraries/Animated/nodes/AnimatedTracking.js +4 -1
  22. package/Libraries/Animated/nodes/AnimatedTransform.js +4 -1
  23. package/Libraries/Animated/nodes/AnimatedValue.js +4 -1
  24. package/Libraries/Animated/nodes/AnimatedValueXY.js +3 -1
  25. package/Libraries/Components/DrawerAndroid/DrawerLayoutAndroid.d.ts +1 -1
  26. package/Libraries/Components/LayoutConformance/LayoutConformance.d.ts +21 -0
  27. package/Libraries/Components/LayoutConformance/LayoutConformance.js +59 -0
  28. package/Libraries/Components/LayoutConformance/LayoutConformanceNativeComponent.js +29 -0
  29. package/Libraries/Components/View/ViewPropTypes.d.ts +0 -7
  30. package/Libraries/Components/View/ViewPropTypes.js +0 -9
  31. package/Libraries/Components/View/ViewPropTypes.win32.js +0 -9
  32. package/Libraries/Core/ReactNativeVersion.js +1 -1
  33. package/Libraries/Core/setUpBatchedBridge.js +1 -16
  34. package/Libraries/EventEmitter/RCTEventEmitter.js +2 -6
  35. package/Libraries/Lists/FlatList.d.ts +1 -1
  36. package/Libraries/Modal/Modal.js +2 -0
  37. package/Libraries/NativeComponent/BaseViewConfig.android.js +0 -2
  38. package/Libraries/NativeComponent/BaseViewConfig.ios.js +0 -2
  39. package/Libraries/NativeComponent/BaseViewConfig.win32.js +0 -2
  40. package/Libraries/Network/FormData.js +11 -3
  41. package/Libraries/Network/RCTNetworking.android.js +24 -16
  42. package/Libraries/Network/RCTNetworking.ios.js +1 -46
  43. package/Libraries/Network/RCTNetworking.win32.js +1 -46
  44. package/Libraries/Network/RCTNetworkingEventDefinitions.flow.js +57 -0
  45. package/Libraries/PersonaCoin/PersonaCoin.js +1 -0
  46. package/Libraries/PersonaCoin/PersonaCoin.js.map +1 -1
  47. package/Libraries/Renderer/implementations/ReactFabric-dev.js +15828 -26461
  48. package/Libraries/Renderer/implementations/ReactFabric-prod.js +3907 -2560
  49. package/Libraries/Renderer/implementations/ReactFabric-profiling.js +4399 -2878
  50. package/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +16102 -26908
  51. package/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +4034 -2695
  52. package/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +4535 -3045
  53. package/Libraries/Renderer/shims/ReactNativeTypes.js +5 -6
  54. package/Libraries/StyleSheet/processTransform.js +6 -0
  55. package/Libraries/Text/Text.d.ts +6 -1
  56. package/Libraries/Text/TextProps.js +2 -2
  57. package/Libraries/Text/TextProps.win32.js +2 -2
  58. package/index.js +5 -0
  59. package/index.win32.js +5 -0
  60. package/overrides.json +9 -9
  61. package/package.json +19 -20
  62. package/src/private/animated/NativeAnimatedValidation.js +1 -1
  63. package/src/private/animated/useAnimatedPropsMemo.js +12 -4
  64. package/src/private/featureflags/ReactNativeFeatureFlags.js +22 -12
  65. package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +4 -2
  66. package/src/private/webapis/intersectionobserver/IntersectionObserver.js +11 -11
  67. package/src/private/webapis/intersectionobserver/IntersectionObserverEntry.js +1 -1
  68. package/src/private/webapis/intersectionobserver/IntersectionObserverManager.js +1 -1
  69. package/src/private/webapis/intersectionobserver/specs/NativeIntersectionObserver.js +1 -0
  70. package/src/private/webapis/performance/Performance.js +0 -12
  71. package/src/private/webapis/performance/specs/NativePerformance.js +0 -11
  72. package/src-win/Libraries/Components/View/ViewPropTypes.d.ts +0 -7
  73. package/src-win/Libraries/PersonaCoin/PersonaCoin.tsx +1 -0
  74. package/src-win/Libraries/Text/Text.d.ts +6 -1
  75. package/types/index.d.ts +1 -0
  76. package/Libraries/HeapCapture/HeapCapture.js +0 -29
  77. package/Libraries/HeapCapture/NativeJSCHeapCapture.js +0 -13
  78. package/Libraries/Performance/NativeJSCSamplingProfiler.js +0 -13
  79. package/Libraries/Performance/SamplingProfiler.js +0 -39
  80. package/Libraries/ReactNative/__mocks__/FabricUIManager.js +0 -334
  81. package/src/private/specs/modules/NativeJSCSamplingProfiler.js +0 -19
  82. package/src/private/webapis/dom/nodes/specs/__mocks__/NativeDOMMock.js +0 -413
  83. package/src/private/webapis/intersectionobserver/specs/__mocks__/NativeIntersectionObserver.js +0 -181
  84. package/src/private/webapis/mutationobserver/specs/__mocks__/NativeMutationObserver.js +0 -327
@@ -7,7 +7,7 @@
7
7
  * @noformat
8
8
  * @nolint
9
9
  * @flow strict
10
- * @generated SignedSource<<9cf3e28d6ca0299bc0bb5caa75b19556>>
10
+ * @generated SignedSource<<c6ea057ee85cbc116a083e3a306b2b88>>
11
11
  */
12
12
 
13
13
  import type {ElementRef, ElementType, MixedElement} from 'react';
@@ -133,9 +133,10 @@ declare const ensureNativeMethodsAreSynced: NativeMethods;
133
133
  (ensureNativeMethodsAreSynced: INativeMethods);
134
134
 
135
135
  export type HostInstance = NativeMethods;
136
- /*::
137
- export type HostComponent<Config: {...}> = component(ref: React$RefSetter<HostInstance>, ...Config);
138
- */
136
+ export type HostComponent<Config: {...}> = component(
137
+ ref: React$RefSetter<HostInstance>,
138
+ ...Config
139
+ );
139
140
 
140
141
  type InspectorDataProps = $ReadOnly<{
141
142
  [propName: string]: string,
@@ -206,9 +207,7 @@ export type ReactNativeType = {
206
207
  componentOrHandle: ?(ElementRef<TElementType> | number),
207
208
  ): ?number,
208
209
  isChildPublicInstance(
209
- // eslint-disable-next-line no-undef
210
210
  parent: PublicInstance | HostComponent<empty>,
211
- // eslint-disable-next-line no-undef
212
211
  child: PublicInstance | HostComponent<empty>,
213
212
  ): boolean,
214
213
  dispatchCommand(
@@ -148,6 +148,12 @@ function _validateTransforms(transform: Array<Object>): void {
148
148
  );
149
149
  const key = keys[0];
150
150
  const value = transformation[key];
151
+ if (key === 'matrix' && transform.length > 1) {
152
+ console.error(
153
+ 'When using a matrix transform, you must specify exactly one transform object. Passed transform: ' +
154
+ stringifySafe(transform),
155
+ );
156
+ }
151
157
  _validateTransform(key, value, transformation);
152
158
  });
153
159
  }
@@ -12,7 +12,7 @@ import {Constructor} from '../../types/private/Utilities';
12
12
  import {AccessibilityProps} from '../Components/View/ViewAccessibility';
13
13
  import {NativeMethods} from '../../types/public/ReactNativeTypes';
14
14
  import {ColorValue, StyleProp} from '../StyleSheet/StyleSheet';
15
- import {TextStyle} from '../StyleSheet/StyleSheetTypes';
15
+ import {TextStyle, ViewStyle} from '../StyleSheet/StyleSheetTypes';
16
16
  import {
17
17
  GestureResponderEvent,
18
18
  LayoutChangeEvent,
@@ -294,6 +294,11 @@ export interface TextProps
294
294
  * Specifies smallest possible scale a font can reach when adjustsFontSizeToFit is enabled. (values 0.01-1.0).
295
295
  */
296
296
  minimumFontScale?: number | undefined;
297
+
298
+ /**
299
+ * Controls how touch events are handled. Similar to `View`'s `pointerEvents`.
300
+ */
301
+ pointerEvents?: ViewStyle['pointerEvents'] | undefined;
297
302
  }
298
303
 
299
304
  /**
@@ -17,7 +17,7 @@ import type {
17
17
  AccessibilityState,
18
18
  Role,
19
19
  } from '../Components/View/ViewAccessibility';
20
- import type {TextStyleProp} from '../StyleSheet/StyleSheet';
20
+ import type {ColorValue, TextStyleProp} from '../StyleSheet/StyleSheet';
21
21
  import type {
22
22
  LayoutEvent,
23
23
  PointerEvent,
@@ -212,7 +212,7 @@ export type TextProps = $ReadOnly<{
212
212
  *
213
213
  * See https://reactnative.dev/docs/text#selectioncolor
214
214
  */
215
- selectionColor?: ?string,
215
+ selectionColor?: ?ColorValue,
216
216
 
217
217
  dataDetectorType?: ?('phoneNumber' | 'link' | 'email' | 'none' | 'all'),
218
218
 
@@ -17,7 +17,7 @@ import type {
17
17
  AccessibilityState,
18
18
  Role,
19
19
  } from '../Components/View/ViewAccessibility';
20
- import type {TextStyleProp} from '../StyleSheet/StyleSheet';
20
+ import type {ColorValue, TextStyleProp} from '../StyleSheet/StyleSheet';
21
21
  import type {
22
22
  LayoutEvent,
23
23
  PointerEvent,
@@ -225,7 +225,7 @@ export type TextProps = $ReadOnly<{
225
225
  *
226
226
  * See https://reactnative.dev/docs/text#selectioncolor
227
227
  */
228
- selectionColor?: ?string,
228
+ selectionColor?: ?ColorValue,
229
229
 
230
230
  dataDetectorType?: ?('phoneNumber' | 'link' | 'email' | 'none' | 'all'),
231
231
 
package/index.js CHANGED
@@ -28,6 +28,7 @@ import typeof Clipboard from './Libraries/Components/Clipboard/Clipboard';
28
28
  import typeof DrawerLayoutAndroid from './Libraries/Components/DrawerAndroid/DrawerLayoutAndroid';
29
29
  import typeof Keyboard from './Libraries/Components/Keyboard/Keyboard';
30
30
  import typeof KeyboardAvoidingView from './Libraries/Components/Keyboard/KeyboardAvoidingView';
31
+ import typeof LayoutConformance from './Libraries/Components/LayoutConformance/LayoutConformance';
31
32
  import typeof Pressable from './Libraries/Components/Pressable/Pressable';
32
33
  import typeof ProgressBarAndroid from './Libraries/Components/ProgressBarAndroid/ProgressBarAndroid';
33
34
  import typeof RefreshControl from './Libraries/Components/RefreshControl/RefreshControl';
@@ -136,6 +137,10 @@ module.exports = {
136
137
  return require('./Libraries/Components/TextInput/InputAccessoryView')
137
138
  .default;
138
139
  },
140
+ get experimental_LayoutConformance(): LayoutConformance {
141
+ return require('./Libraries/Components/LayoutConformance/LayoutConformance')
142
+ .default;
143
+ },
139
144
  get KeyboardAvoidingView(): KeyboardAvoidingView {
140
145
  return require('./Libraries/Components/Keyboard/KeyboardAvoidingView')
141
146
  .default;
package/index.win32.js CHANGED
@@ -29,6 +29,7 @@ import typeof Clipboard from './Libraries/Components/Clipboard/Clipboard';
29
29
  import typeof DrawerLayoutAndroid from './Libraries/Components/DrawerAndroid/DrawerLayoutAndroid';
30
30
  import typeof Keyboard from './Libraries/Components/Keyboard/Keyboard';
31
31
  import typeof KeyboardAvoidingView from './Libraries/Components/Keyboard/KeyboardAvoidingView';
32
+ import typeof LayoutConformance from './Libraries/Components/LayoutConformance/LayoutConformance';
32
33
  import typeof Pressable from './Libraries/Components/Pressable/Pressable';
33
34
  import typeof ProgressBarAndroid from './Libraries/Components/ProgressBarAndroid/ProgressBarAndroid';
34
35
  import typeof RefreshControl from './Libraries/Components/RefreshControl/RefreshControl';
@@ -136,6 +137,10 @@ module.exports = {
136
137
  return require('./Libraries/Components/TextInput/InputAccessoryView')
137
138
  .default;
138
139
  },
140
+ get experimental_LayoutConformance(): LayoutConformance {
141
+ return require('./Libraries/Components/LayoutConformance/LayoutConformance')
142
+ .default;
143
+ },
139
144
  get KeyboardAvoidingView(): KeyboardAvoidingView {
140
145
  return require('./Libraries/Components/Keyboard/KeyboardAvoidingView')
141
146
  .default;
package/overrides.json CHANGED
@@ -7,19 +7,19 @@
7
7
  "**/__snapshots__/**",
8
8
  "src-win/rntypes/**"
9
9
  ],
10
- "baseVersion": "0.78.0-nightly-20241201-91e217ff5",
10
+ "baseVersion": "0.78.0-nightly-20241221-66342d3cc",
11
11
  "overrides": [
12
12
  {
13
13
  "type": "derived",
14
14
  "file": ".flowconfig",
15
15
  "baseFile": ".flowconfig",
16
- "baseHash": "38943f268bd48c91a2ace6ad2a9302a3bb346dbd"
16
+ "baseHash": "5b40175690b07272a61410d4fc6437a82248e8cc"
17
17
  },
18
18
  {
19
19
  "type": "derived",
20
20
  "file": "src-win/index.win32.js",
21
21
  "baseFile": "packages/react-native/index.js",
22
- "baseHash": "5f0532348ca7440731478ef5b119a3a569529a7f"
22
+ "baseHash": "326e132bab39f949872e2de8f3e3120936ef7d5c"
23
23
  },
24
24
  {
25
25
  "type": "platform",
@@ -191,13 +191,13 @@
191
191
  "type": "derived",
192
192
  "file": "src-win/Libraries/Components/View/ViewPropTypes.d.ts",
193
193
  "baseFile": "packages/react-native/Libraries/Components/View/ViewPropTypes.d.ts",
194
- "baseHash": "050f28e7caeef2e52717a7c43c6964612eb75ee9"
194
+ "baseHash": "8e33800dfdd3b50e26c3331abb8b4682c091602f"
195
195
  },
196
196
  {
197
197
  "type": "patch",
198
198
  "file": "src-win/Libraries/Components/View/ViewPropTypes.win32.js",
199
199
  "baseFile": "packages/react-native/Libraries/Components/View/ViewPropTypes.js",
200
- "baseHash": "994aead3d5ab49e6bd34a497094a4bc131a8bdb1",
200
+ "baseHash": "bf6dc1a18a8c069cd8f21d187c81177e3b6d5c1f",
201
201
  "issue": 6240
202
202
  },
203
203
  {
@@ -331,13 +331,13 @@
331
331
  "type": "derived",
332
332
  "file": "src-win/Libraries/NativeComponent/BaseViewConfig.win32.js",
333
333
  "baseFile": "packages/react-native/Libraries/NativeComponent/BaseViewConfig.ios.js",
334
- "baseHash": "51ae58fc739dc6c0679dc888550c2af41787b959"
334
+ "baseHash": "4f959b8e2f98c7d6de44e06be8bc41bf58adbe31"
335
335
  },
336
336
  {
337
337
  "type": "copy",
338
338
  "file": "src-win/Libraries/Network/RCTNetworking.win32.js",
339
339
  "baseFile": "packages/react-native/Libraries/Network/RCTNetworking.ios.js",
340
- "baseHash": "39fc8e1003b0f6345ec4fea060f455d06939a321",
340
+ "baseHash": "9f1622d938405344bc27a2cf61a1c26773518a88",
341
341
  "issue": 4318
342
342
  },
343
343
  {
@@ -420,7 +420,7 @@
420
420
  "type": "derived",
421
421
  "file": "src-win/Libraries/Text/Text.d.ts",
422
422
  "baseFile": "packages/react-native/Libraries/Text/Text.d.ts",
423
- "baseHash": "4b523469a5c8dcfe53749d1739ccf77c0106375e"
423
+ "baseHash": "21dab7f71254c429d592827ab313f77c18baeda1"
424
424
  },
425
425
  {
426
426
  "type": "derived",
@@ -439,7 +439,7 @@
439
439
  "type": "derived",
440
440
  "file": "src-win/Libraries/Text/TextProps.win32.js",
441
441
  "baseFile": "packages/react-native/Libraries/Text/TextProps.js",
442
- "baseHash": "8e56a028dee989ebb8b06f4c01a1d038f074597d"
442
+ "baseHash": "ef1efdc0fb302273cd98be71aef2986677dda184"
443
443
  },
444
444
  {
445
445
  "type": "patch",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@office-iss/react-native-win32",
3
- "version": "0.0.0-canary.277",
3
+ "version": "0.0.0-canary.279",
4
4
  "description": "Implementation of react native on top of Office's Win32 platform.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -30,13 +30,13 @@
30
30
  "@react-native-community/cli-platform-android": "15.0.0-alpha.2",
31
31
  "@react-native-community/cli-platform-ios": "15.0.0-alpha.2",
32
32
  "@react-native/assets": "1.0.0",
33
- "@react-native/assets-registry": "0.78.0-nightly-20241201-91e217ff5",
34
- "@react-native/codegen": "0.78.0-nightly-20241201-91e217ff5",
35
- "@react-native/community-cli-plugin": "0.78.0-nightly-20241201-91e217ff5",
36
- "@react-native/gradle-plugin": "0.78.0-nightly-20241201-91e217ff5",
37
- "@react-native/js-polyfills": "0.78.0-nightly-20241201-91e217ff5",
38
- "@react-native/normalize-colors": "0.78.0-nightly-20241201-91e217ff5",
39
- "@react-native/virtualized-lists": "0.78.0-nightly-20241201-91e217ff5",
33
+ "@react-native/assets-registry": "0.78.0-nightly-20241221-66342d3cc",
34
+ "@react-native/codegen": "0.78.0-nightly-20241221-66342d3cc",
35
+ "@react-native/community-cli-plugin": "0.78.0-nightly-20241221-66342d3cc",
36
+ "@react-native/gradle-plugin": "0.78.0-nightly-20241221-66342d3cc",
37
+ "@react-native/js-polyfills": "0.78.0-nightly-20241221-66342d3cc",
38
+ "@react-native/normalize-colors": "0.78.0-nightly-20241221-66342d3cc",
39
+ "@react-native/virtualized-lists": "0.78.0-nightly-20241221-66342d3cc",
40
40
  "abort-controller": "^3.0.0",
41
41
  "anser": "^1.4.9",
42
42
  "ansi-regex": "^5.0.0",
@@ -51,7 +51,6 @@
51
51
  "glob": "^7.1.1",
52
52
  "invariant": "^2.2.4",
53
53
  "jest-environment-node": "^29.6.3",
54
- "jsc-android": "^250231.0.0",
55
54
  "memoize-one": "^5.0.0",
56
55
  "metro-runtime": "^0.81.0",
57
56
  "metro-source-map": "^0.81.0",
@@ -76,28 +75,28 @@
76
75
  "@babel/eslint-parser": "^7.25.1",
77
76
  "@react-native/metro-config": "0.77.0-nightly-20241001-223e98cc4",
78
77
  "@rnw-scripts/babel-react-native-config": "0.0.0",
79
- "@rnw-scripts/eslint-config": "1.2.30",
80
- "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "^1.1.34",
81
- "@rnw-scripts/just-task": "2.3.47",
78
+ "@rnw-scripts/eslint-config": "1.2.31",
79
+ "@rnw-scripts/jest-out-of-tree-snapshot-resolver": "^1.1.35",
80
+ "@rnw-scripts/just-task": "2.3.48",
82
81
  "@rnw-scripts/metro-dev-config": "0.0.0",
83
82
  "@rnx-kit/jest-preset": "^0.1.17",
84
83
  "@types/node": "^18.0.0",
85
84
  "@types/prop-types": "15.7.1",
86
- "@types/react": "^18.2.6",
85
+ "@types/react": "^19.0.0",
87
86
  "eslint": "^8.19.0",
88
- "flow-bin": "^0.250.0",
87
+ "flow-bin": "^0.257.1",
89
88
  "jscodeshift": "^0.14.0",
90
89
  "just-scripts": "^1.3.3",
91
90
  "prettier": "2.8.8",
92
- "react": "18.3.1",
93
- "react-native": "0.78.0-nightly-20241201-91e217ff5",
94
- "react-native-platform-override": "^1.9.49",
91
+ "react": "19.0.0",
92
+ "react-native": "0.78.0-nightly-20241221-66342d3cc",
93
+ "react-native-platform-override": "^1.9.50",
95
94
  "typescript": "5.0.4"
96
95
  },
97
96
  "peerDependencies": {
98
- "@types/react": "^18.2.6",
99
- "react": "^18.2.0",
100
- "react-native": "0.78.0-nightly-20241201-91e217ff5"
97
+ "@types/react": "^19.0.0",
98
+ "react": "^19.0.0",
99
+ "react-native": "0.78.0-nightly-20241221-66342d3cc"
101
100
  },
102
101
  "beachball": {
103
102
  "defaultNpmTag": "canary",
@@ -20,7 +20,7 @@ export function validateInterpolation<OutputT: number | string>(
20
20
  config: InterpolationConfigType<OutputT>,
21
21
  ): void {
22
22
  for (const key in config) {
23
- if (!isSupportedInterpolationParam(key)) {
23
+ if (key !== 'debugID' && !isSupportedInterpolationParam(key)) {
24
24
  console.error(
25
25
  `Interpolation property '${key}' is not supported by native animated module`,
26
26
  );
@@ -113,7 +113,7 @@ export function createCompositeKeyForProps(
113
113
  const key = keys[ii];
114
114
  const value = props[key];
115
115
 
116
- if (allowlist == null || Object.hasOwn(allowlist, key)) {
116
+ if (allowlist == null || hasOwn(allowlist, key)) {
117
117
  let compositeKeyComponent;
118
118
  if (key === 'style') {
119
119
  // $FlowFixMe[incompatible-call] - `style` is a valid argument.
@@ -205,7 +205,7 @@ function createCompositeKeyForObject(
205
205
  for (let ii = 0, length = keys.length; ii < length; ii++) {
206
206
  const key = keys[ii];
207
207
 
208
- if (allowlist == null || Object.hasOwn(allowlist, key)) {
208
+ if (allowlist == null || hasOwn(allowlist, key)) {
209
209
  const value = object[key];
210
210
 
211
211
  let compositeKeyComponent;
@@ -250,7 +250,7 @@ export function areCompositeKeysEqual(
250
250
  }
251
251
  for (let ii = 0; ii < length; ii++) {
252
252
  const key = keys[ii];
253
- if (!Object.hasOwn(next, key)) {
253
+ if (!hasOwn(next, key)) {
254
254
  return false;
255
255
  }
256
256
  const prevComponent = prev[key];
@@ -336,7 +336,7 @@ function areCompositeKeyComponentsEqual(
336
336
  for (let ii = 0; ii < length; ii++) {
337
337
  const key = keys[ii];
338
338
  if (
339
- !Object.hasOwn(nullthrows(next), key) ||
339
+ !hasOwn(nullthrows(next), key) ||
340
340
  !areCompositeKeyComponentsEqual(prev[key], next[key])
341
341
  ) {
342
342
  return false;
@@ -346,3 +346,11 @@ function areCompositeKeyComponentsEqual(
346
346
  }
347
347
  return false;
348
348
  }
349
+
350
+ // Supported versions of JSC do not implement the newer Object.hasOwn. Remove
351
+ // this shim when they do.
352
+ // $FlowIgnore[method-unbinding]
353
+ const _hasOwnProp = Object.prototype.hasOwnProperty;
354
+ const hasOwn: (obj: $ReadOnly<{...}>, prop: string) => boolean =
355
+ // $FlowIgnore[method-unbinding]
356
+ Object.hasOwn ?? ((obj, prop) => _hasOwnProp.call(obj, prop));
@@ -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<<38ad29621eeb29a9f82735dc187c13d4>>
7
+ * @generated SignedSource<<a35c5b22c0f20cb50ceaf56a856c9c8f>>
8
8
  * @flow strict
9
9
  */
10
10
 
@@ -26,7 +26,7 @@ import {
26
26
  setOverrides,
27
27
  } from './ReactNativeFeatureFlagsBase';
28
28
 
29
- export type ReactNativeFeatureFlagsJsOnly = {
29
+ export type ReactNativeFeatureFlagsJsOnly = $ReadOnly<{
30
30
  jsOnlyTestFlag: Getter<boolean>,
31
31
  animatedShouldDebounceQueueFlush: Getter<boolean>,
32
32
  animatedShouldUseSingleOp: Getter<boolean>,
@@ -44,17 +44,18 @@ export type ReactNativeFeatureFlagsJsOnly = {
44
44
  shouldUseSetNativePropsInFabric: Getter<boolean>,
45
45
  useInsertionEffectsForAnimations: Getter<boolean>,
46
46
  useRefsForTextInputState: Getter<boolean>,
47
- };
47
+ }>;
48
48
 
49
49
  export type ReactNativeFeatureFlagsJsOnlyOverrides = OverridesFor<ReactNativeFeatureFlagsJsOnly>;
50
50
 
51
- export type ReactNativeFeatureFlags = {
51
+ export type ReactNativeFeatureFlags = $ReadOnly<{
52
52
  ...ReactNativeFeatureFlagsJsOnly,
53
53
  commonTestFlag: Getter<boolean>,
54
54
  commonTestFlagWithoutNativeImplementation: Getter<boolean>,
55
55
  completeReactInstanceCreationOnBgThreadOnAndroid: Getter<boolean>,
56
56
  disableEventLoopOnBridgeless: Getter<boolean>,
57
57
  disableMountItemReorderingAndroid: Getter<boolean>,
58
+ enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean>,
58
59
  enableAlignItemsBaselineOnFabricIOS: Getter<boolean>,
59
60
  enableAndroidLineHeightCentering: Getter<boolean>,
60
61
  enableBridgelessArchitecture: Getter<boolean>,
@@ -64,7 +65,6 @@ export type ReactNativeFeatureFlags = {
64
65
  enableEventEmitterRetentionDuringGesturesOnAndroid: Getter<boolean>,
65
66
  enableFabricLogs: Getter<boolean>,
66
67
  enableFabricRenderer: Getter<boolean>,
67
- enableFabricRendererExclusively: Getter<boolean>,
68
68
  enableFixForViewCommandRace: Getter<boolean>,
69
69
  enableGranularShadowTreeStateReconciliation: Getter<boolean>,
70
70
  enableIOSViewClipToPaddingBox: Getter<boolean>,
@@ -80,6 +80,7 @@ export type ReactNativeFeatureFlags = {
80
80
  enableUIConsistency: Getter<boolean>,
81
81
  enableViewRecycling: Getter<boolean>,
82
82
  excludeYogaFromRawProps: Getter<boolean>,
83
+ fixDifferentiatorEmittingUpdatesWithWrongParentTag: Getter<boolean>,
83
84
  fixMappingOfEventPrioritiesBetweenFabricAndReact: Getter<boolean>,
84
85
  fixMountingCoordinatorReportedPendingTransactionsOnAndroid: Getter<boolean>,
85
86
  fuseboxEnabledDebug: Getter<boolean>,
@@ -94,10 +95,11 @@ export type ReactNativeFeatureFlags = {
94
95
  useNativeViewConfigsInBridgelessMode: Getter<boolean>,
95
96
  useOptimisedViewPreallocationOnAndroid: Getter<boolean>,
96
97
  useOptimizedEventBatchingOnAndroid: Getter<boolean>,
98
+ useRawPropsJsiValue: Getter<boolean>,
97
99
  useRuntimeShadowNodeReferenceUpdate: Getter<boolean>,
98
100
  useTurboModuleInterop: Getter<boolean>,
99
101
  useTurboModules: Getter<boolean>,
100
- }
102
+ }>;
101
103
 
102
104
  /**
103
105
  * JS-only flag for testing. Do NOT modify.
@@ -157,7 +159,7 @@ export const isLayoutAnimationEnabled: Getter<boolean> = createJavaScriptFlagGet
157
159
  /**
158
160
  * If the animation is within Animated.loop, we do not send state updates to React.
159
161
  */
160
- export const shouldSkipStateUpdatesForLoopingAnimations: Getter<boolean> = createJavaScriptFlagGetter('shouldSkipStateUpdatesForLoopingAnimations', false);
162
+ export const shouldSkipStateUpdatesForLoopingAnimations: Getter<boolean> = createJavaScriptFlagGetter('shouldSkipStateUpdatesForLoopingAnimations', true);
161
163
 
162
164
  /**
163
165
  * Enables use of AnimatedObject for animating transform values.
@@ -204,6 +206,10 @@ export const disableEventLoopOnBridgeless: Getter<boolean> = createNativeFlagGet
204
206
  * Prevent FabricMountingManager from reordering mountitems, which may lead to invalid state on the UI thread
205
207
  */
206
208
  export const disableMountItemReorderingAndroid: Getter<boolean> = createNativeFlagGetter('disableMountItemReorderingAndroid', false);
209
+ /**
210
+ * When enabled, Andoid will accumulate updates in rawProps to reduce the number of mounting instructions for cascading rerenders.
211
+ */
212
+ export const enableAccumulatedUpdatesInRawPropsAndroid: Getter<boolean> = createNativeFlagGetter('enableAccumulatedUpdatesInRawPropsAndroid', false);
207
213
  /**
208
214
  * Kill-switch to turn off support for aling-items:baseline on Fabric iOS.
209
215
  */
@@ -240,10 +246,6 @@ export const enableFabricLogs: Getter<boolean> = createNativeFlagGetter('enableF
240
246
  * Enables the use of the Fabric renderer in the whole app.
241
247
  */
242
248
  export const enableFabricRenderer: Getter<boolean> = createNativeFlagGetter('enableFabricRenderer', false);
243
- /**
244
- * When the app is completely migrated to Fabric, set this flag to true to disable parts of Paper infrastructure that are not needed anymore but consume memory and CPU. Specifically, UIViewOperationQueue and EventDispatcherImpl will no longer work as they will not subscribe to ReactChoreographer for updates.
245
- */
246
- export const enableFabricRendererExclusively: Getter<boolean> = createNativeFlagGetter('enableFabricRendererExclusively', false);
247
249
  /**
248
250
  * Synchronise the view command dispatching with mounting of new transaction
249
251
  */
@@ -304,6 +306,10 @@ export const enableViewRecycling: Getter<boolean> = createNativeFlagGetter('enab
304
306
  * When enabled, rawProps in Props will not include Yoga specific props.
305
307
  */
306
308
  export const excludeYogaFromRawProps: Getter<boolean> = createNativeFlagGetter('excludeYogaFromRawProps', false);
309
+ /**
310
+ * Fixes a bug in Differentiator where parent views may be referenced before they're created
311
+ */
312
+ export const fixDifferentiatorEmittingUpdatesWithWrongParentTag: Getter<boolean> = createNativeFlagGetter('fixDifferentiatorEmittingUpdatesWithWrongParentTag', true);
307
313
  /**
308
314
  * Uses the default event priority instead of the discreet event priority by default when dispatching events from Fabric to React.
309
315
  */
@@ -360,10 +366,14 @@ export const useOptimisedViewPreallocationOnAndroid: Getter<boolean> = createNat
360
366
  * Uses an optimized mechanism for event batching on Android that does not need to wait for a Choreographer frame callback.
361
367
  */
362
368
  export const useOptimizedEventBatchingOnAndroid: Getter<boolean> = createNativeFlagGetter('useOptimizedEventBatchingOnAndroid', false);
369
+ /**
370
+ * Instead of using folly::dynamic as internal representation in RawProps and RawValue, use jsi::Value
371
+ */
372
+ export const useRawPropsJsiValue: Getter<boolean> = createNativeFlagGetter('useRawPropsJsiValue', false);
363
373
  /**
364
374
  * When enabled, cloning shadow nodes within react native will update the reference held by the current JS fiber tree.
365
375
  */
366
- export const useRuntimeShadowNodeReferenceUpdate: Getter<boolean> = createNativeFlagGetter('useRuntimeShadowNodeReferenceUpdate', false);
376
+ export const useRuntimeShadowNodeReferenceUpdate: Getter<boolean> = createNativeFlagGetter('useRuntimeShadowNodeReferenceUpdate', true);
367
377
  /**
368
378
  * In Bridgeless mode, should legacy NativeModules use the TurboModule system?
369
379
  */
@@ -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<<17c0e677f7b308795e836c558b15d1d1>>
7
+ * @generated SignedSource<<386958552a092ac75840bf3202fb0341>>
8
8
  * @flow strict
9
9
  */
10
10
 
@@ -28,6 +28,7 @@ export interface Spec extends TurboModule {
28
28
  +completeReactInstanceCreationOnBgThreadOnAndroid?: () => boolean;
29
29
  +disableEventLoopOnBridgeless?: () => boolean;
30
30
  +disableMountItemReorderingAndroid?: () => boolean;
31
+ +enableAccumulatedUpdatesInRawPropsAndroid?: () => boolean;
31
32
  +enableAlignItemsBaselineOnFabricIOS?: () => boolean;
32
33
  +enableAndroidLineHeightCentering?: () => boolean;
33
34
  +enableBridgelessArchitecture?: () => boolean;
@@ -37,7 +38,6 @@ export interface Spec extends TurboModule {
37
38
  +enableEventEmitterRetentionDuringGesturesOnAndroid?: () => boolean;
38
39
  +enableFabricLogs?: () => boolean;
39
40
  +enableFabricRenderer?: () => boolean;
40
- +enableFabricRendererExclusively?: () => boolean;
41
41
  +enableFixForViewCommandRace?: () => boolean;
42
42
  +enableGranularShadowTreeStateReconciliation?: () => boolean;
43
43
  +enableIOSViewClipToPaddingBox?: () => boolean;
@@ -53,6 +53,7 @@ export interface Spec extends TurboModule {
53
53
  +enableUIConsistency?: () => boolean;
54
54
  +enableViewRecycling?: () => boolean;
55
55
  +excludeYogaFromRawProps?: () => boolean;
56
+ +fixDifferentiatorEmittingUpdatesWithWrongParentTag?: () => boolean;
56
57
  +fixMappingOfEventPrioritiesBetweenFabricAndReact?: () => boolean;
57
58
  +fixMountingCoordinatorReportedPendingTransactionsOnAndroid?: () => boolean;
58
59
  +fuseboxEnabledDebug?: () => boolean;
@@ -67,6 +68,7 @@ export interface Spec extends TurboModule {
67
68
  +useNativeViewConfigsInBridgelessMode?: () => boolean;
68
69
  +useOptimisedViewPreallocationOnAndroid?: () => boolean;
69
70
  +useOptimizedEventBatchingOnAndroid?: () => boolean;
71
+ +useRawPropsJsiValue?: () => boolean;
70
72
  +useRuntimeShadowNodeReferenceUpdate?: () => boolean;
71
73
  +useTurboModuleInterop?: () => boolean;
72
74
  +useTurboModules?: () => boolean;
@@ -33,10 +33,10 @@ type IntersectionObserverInit = {
33
33
  * If set, it will either be a singular ratio value between 0-1 (inclusive)
34
34
  * or an array of such ratios.
35
35
  *
36
- * Note: If `rn_rootThreshold` is set, and `threshold` is not set,
36
+ * Note: If `rnRootThreshold` is set, and `threshold` is not set,
37
37
  * `threshold` will not default to [0] (as per spec)
38
38
  */
39
- rn_rootThreshold?: number | $ReadOnlyArray<number>,
39
+ rnRootThreshold?: number | $ReadOnlyArray<number>,
40
40
  };
41
41
 
42
42
  /**
@@ -57,7 +57,7 @@ type IntersectionObserverInit = {
57
57
  *
58
58
  * This implementation only supports the `threshold` option at the moment
59
59
  * (`root` and `rootMargin` are not supported) and provides a React Native specific
60
- * option `rn_rootThreshold`.
60
+ * option `rnRootThreshold`.
61
61
  *
62
62
  */
63
63
  export default class IntersectionObserver {
@@ -99,7 +99,7 @@ export default class IntersectionObserver {
99
99
 
100
100
  this._callback = callback;
101
101
 
102
- this._rootThresholds = normalizeRootThreshold(options?.rn_rootThreshold);
102
+ this._rootThresholds = normalizeRootThreshold(options?.rnRootThreshold);
103
103
  this._thresholds = normalizeThreshold(
104
104
  options?.threshold,
105
105
  this._rootThresholds != null, // only provide default if no rootThreshold
@@ -136,9 +136,9 @@ export default class IntersectionObserver {
136
136
  * threshold is a ratio of intersection area to bounding box area of an
137
137
  * observed target.
138
138
  * Notifications for a target are generated when any of the thresholds specified
139
- * in `rn_rootThreshold` or `threshold` are crossed for that target.
139
+ * in `rnRootThreshold` or `threshold` are crossed for that target.
140
140
  *
141
- * If no value was passed to the constructor, and no `rn_rootThreshold`
141
+ * If no value was passed to the constructor, and no `rnRootThreshold`
142
142
  * is set, `0` is used.
143
143
  */
144
144
  get thresholds(): $ReadOnlyArray<number> {
@@ -150,9 +150,9 @@ export default class IntersectionObserver {
150
150
  * threshold is a ratio of intersection area to bounding box area of the specified
151
151
  * root view, which defaults to the viewport.
152
152
  * Notifications for a target are generated when any of the thresholds specified
153
- * in `rn_rootThreshold` or `threshold` are crossed for that target.
153
+ * in `rnRootThreshold` or `threshold` are crossed for that target.
154
154
  */
155
- get rootThresholds(): $ReadOnlyArray<number> | null {
155
+ get rnRootThresholds(): $ReadOnlyArray<number> | null {
156
156
  return this._rootThresholds;
157
157
  }
158
158
 
@@ -293,7 +293,7 @@ function normalizeThreshold(
293
293
  }
294
294
 
295
295
  /**
296
- * Converts the user defined `rn_rootThreshold` value into an array of sorted valid
296
+ * Converts the user defined `rnRootThreshold` value into an array of sorted valid
297
297
  * threshold options for `IntersectionObserver` (double ∈ [0, 1]).
298
298
  *
299
299
  * If invalid array or null, returns null.
@@ -310,13 +310,13 @@ function normalizeRootThreshold(
310
310
  ): null | $ReadOnlyArray<number> {
311
311
  if (Array.isArray(rootThreshold)) {
312
312
  const normalizedArr = rootThreshold
313
- .map(rt => normalizeThresholdValue(rt, 'rn_rootThreshold'))
313
+ .map(rt => normalizeThresholdValue(rt, 'rnRootThreshold'))
314
314
  .filter((rt): rt is number => rt != null)
315
315
  .sort();
316
316
  return normalizedArr.length === 0 ? null : normalizedArr;
317
317
  }
318
318
 
319
- const normalized = normalizeThresholdValue(rootThreshold, 'rn_rootThreshold');
319
+ const normalized = normalizeThresholdValue(rootThreshold, 'rnRootThreshold');
320
320
  return normalized == null ? null : [normalized];
321
321
  }
322
322
 
@@ -77,7 +77,7 @@ export default class IntersectionObserverEntry {
77
77
  /**
78
78
  * Returns the ratio of the `intersectionRect` to the `boundingRootRect`.
79
79
  */
80
- get rn_intersectionRootRatio(): number {
80
+ get rnRootIntersectionRatio(): number {
81
81
  const intersectionRect = this.intersectionRect;
82
82
 
83
83
  const rootRect = this._nativeEntry.rootRect;
@@ -162,7 +162,7 @@ export function observe({
162
162
  intersectionObserverId,
163
163
  targetShadowNode,
164
164
  thresholds: registeredObserver.observer.thresholds,
165
- rootThresholds: registeredObserver.observer.rootThresholds,
165
+ rootThresholds: registeredObserver.observer.rnRootThresholds,
166
166
  });
167
167
 
168
168
  return true;
@@ -17,6 +17,7 @@ export type NativeIntersectionObserverEntry = {
17
17
  targetInstanceHandle: mixed,
18
18
  targetRect: $ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
19
19
  rootRect: $ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
20
+ // TODO(T209328432) - Remove optionality of intersectionRect when native changes are released
20
21
  intersectionRect: ?$ReadOnlyArray<number>, // It's actually a tuple with x, y, width and height
21
22
  isIntersectingAboveThresholds: boolean,
22
23
  time: number,
@@ -115,9 +115,6 @@ export default class Performance {
115
115
  markName,
116
116
  markOptions?.startTime,
117
117
  );
118
- } else if (NativePerformance?.mark) {
119
- computedStartTime = markOptions?.startTime ?? performance.now();
120
- NativePerformance?.mark?.(markName, computedStartTime);
121
118
  } else {
122
119
  warnNoNativePerformance();
123
120
  computedStartTime = performance.now();
@@ -203,15 +200,6 @@ export default class Performance {
203
200
  startMarkName,
204
201
  endMarkName,
205
202
  );
206
- } else if (NativePerformance?.measure) {
207
- NativePerformance.measure(
208
- measureName,
209
- startTime,
210
- endTime,
211
- duration,
212
- startMarkName,
213
- endMarkName,
214
- );
215
203
  } else {
216
204
  warnNoNativePerformance();
217
205
  }