react-native 0.84.0-nightly-20251205-95cc1e767 → 0.84.0-nightly-20251207-e4a5a56df

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 (43) hide show
  1. package/Libraries/Animated/nodes/AnimatedProps.js +29 -3
  2. package/Libraries/Core/ReactNativeVersion.js +1 -1
  3. package/Libraries/NativeAnimation/RCTNativeAnimatedTurboModule.mm +7 -0
  4. package/Libraries/NativeAnimation/React-RCTAnimation.podspec +1 -0
  5. package/React/Base/RCTVersion.m +1 -1
  6. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec-generated.mm +7 -0
  7. package/React/FBReactNativeSpec/FBReactNativeSpec/FBReactNativeSpec.h +2 -0
  8. package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +10 -0
  9. package/ReactAndroid/gradle.properties +1 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +9 -5
  11. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  12. package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +1 -10
  13. package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextViewAccessibilityDelegate.kt +1 -0
  14. package/ReactAndroid/src/main/java/com/facebook/react/views/text/TextLayoutManager.kt +42 -28
  15. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  16. package/ReactCommon/jsi/jsi/jsi.cpp +2 -1
  17. package/ReactCommon/jsinspector-modern/HostAgent.cpp +2 -2
  18. package/ReactCommon/jsinspector-modern/InspectorInterfaces.cpp +10 -5
  19. package/ReactCommon/jsinspector-modern/InspectorInterfaces.h +2 -2
  20. package/ReactCommon/jsinspector-modern/TracingAgent.cpp +1 -1
  21. package/ReactCommon/react/renderer/animated/AnimatedModule.cpp +19 -1
  22. package/ReactCommon/react/renderer/animated/AnimatedModule.h +8 -0
  23. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +83 -9
  24. package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.h +6 -0
  25. package/ReactCommon/react/renderer/animated/drivers/FrameAnimationDriver.cpp +1 -0
  26. package/ReactCommon/react/renderer/animated/nodes/ColorAnimatedNode.cpp +0 -1
  27. package/ReactCommon/react/renderer/animated/nodes/PropsAnimatedNode.h +1 -0
  28. package/ReactCommon/react/renderer/animated/nodes/RoundAnimatedNode.cpp +1 -1
  29. package/ReactCommon/react/renderer/animated/nodes/ValueAnimatedNode.cpp +1 -1
  30. package/ReactCommon/react/renderer/animated/tests/AnimatedNodeTests.cpp +67 -0
  31. package/ReactCommon/react/renderer/animated/tests/AnimationDriverTests.cpp +59 -0
  32. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.cpp +81 -0
  33. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +83 -0
  34. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +26 -15
  35. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +7 -4
  36. package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.cpp +69 -0
  37. package/ReactCommon/react/renderer/animationbackend/AnimationBackendCommitHook.h +32 -0
  38. package/ReactCommon/react/renderer/uimanager/UIManager.cpp +6 -0
  39. package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +1 -0
  40. package/package.json +9 -9
  41. package/sdks/hermes-engine/version.properties +1 -1
  42. package/src/private/animated/NativeAnimatedHelper.js +29 -1
  43. package/src/private/specs_DEPRECATED/modules/NativeAnimatedModule.js +4 -0
@@ -0,0 +1,69 @@
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
+
8
+ #include <react/renderer/animationbackend/AnimationBackendCommitHook.h>
9
+
10
+ namespace facebook::react {
11
+
12
+ AnimationBackendCommitHook::AnimationBackendCommitHook(
13
+ UIManager* uiManager,
14
+ std::shared_ptr<AnimatedPropsRegistry> animatedPropsRegistry)
15
+ : animatedPropsRegistry_(std::move(animatedPropsRegistry)) {
16
+ uiManager->registerCommitHook(*this);
17
+ }
18
+
19
+ RootShadowNode::Unshared AnimationBackendCommitHook::shadowTreeWillCommit(
20
+ const ShadowTree& shadowTree,
21
+ const RootShadowNode::Shared& oldRootShadowNode,
22
+ const RootShadowNode::Unshared& newRootShadowNode,
23
+ const ShadowTreeCommitOptions& commitOptions) noexcept {
24
+ if (commitOptions.source != ShadowTreeCommitSource::React) {
25
+ return newRootShadowNode;
26
+ }
27
+
28
+ const auto& res = animatedPropsRegistry_->getMap(shadowTree.getSurfaceId());
29
+ auto& surfaceFamilies = res.first;
30
+ auto& updates = res.second;
31
+
32
+ if (surfaceFamilies.empty()) {
33
+ return newRootShadowNode;
34
+ }
35
+ return std::static_pointer_cast<RootShadowNode>(
36
+ newRootShadowNode->cloneMultiple(
37
+ surfaceFamilies,
38
+ [&surfaceFamilies, &updates](
39
+ const ShadowNode& shadowNode,
40
+ const ShadowNodeFragment& fragment) {
41
+ auto newProps = ShadowNodeFragment::propsPlaceholder();
42
+ std::shared_ptr<BaseViewProps> viewProps = nullptr;
43
+ if (surfaceFamilies.contains(&shadowNode.getFamily()) &&
44
+ updates.contains(shadowNode.getTag())) {
45
+ auto& snapshot = updates.at(shadowNode.getTag());
46
+ if (!snapshot->propNames.empty()) {
47
+ PropsParserContext propsParserContext{
48
+ shadowNode.getSurfaceId(),
49
+ *shadowNode.getContextContainer()};
50
+
51
+ newProps = shadowNode.getComponentDescriptor().cloneProps(
52
+ propsParserContext, shadowNode.getProps(), {});
53
+ viewProps = std::const_pointer_cast<BaseViewProps>(
54
+ std::static_pointer_cast<const BaseViewProps>(newProps));
55
+ }
56
+
57
+ for (const auto& propName : snapshot->propNames) {
58
+ updateProp(propName, *viewProps, *snapshot);
59
+ }
60
+ }
61
+ return shadowNode.clone(
62
+ {.props = newProps,
63
+ .children = fragment.children,
64
+ .state = shadowNode.getState(),
65
+ .runtimeShadowNodeReference = true});
66
+ }));
67
+ }
68
+
69
+ } // namespace facebook::react
@@ -0,0 +1,32 @@
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
+
8
+ #pragma once
9
+
10
+ #include <folly/dynamic.h>
11
+ #include <react/renderer/core/ReactPrimitives.h>
12
+ #include <react/renderer/uimanager/UIManager.h>
13
+ #include <react/renderer/uimanager/UIManagerCommitHook.h>
14
+ #include "AnimatedPropsRegistry.h"
15
+
16
+ namespace facebook::react {
17
+
18
+ class AnimationBackendCommitHook : public UIManagerCommitHook {
19
+ std::shared_ptr<AnimatedPropsRegistry> animatedPropsRegistry_;
20
+
21
+ public:
22
+ AnimationBackendCommitHook(UIManager *uiManager, std::shared_ptr<AnimatedPropsRegistry> animatedPropsRegistry);
23
+ RootShadowNode::Unshared shadowTreeWillCommit(
24
+ const ShadowTree &shadowTree,
25
+ const RootShadowNode::Shared &oldRootShadowNode,
26
+ const RootShadowNode::Unshared &newRootShadowNode,
27
+ const ShadowTreeCommitOptions &commitOptions) noexcept override;
28
+ void commitHookWasRegistered(const UIManager &uiManager) noexcept override {}
29
+ void commitHookWasUnregistered(const UIManager &uiManager) noexcept override {}
30
+ };
31
+
32
+ } // namespace facebook::react
@@ -205,6 +205,12 @@ void UIManager::completeSurface(
205
205
  // after we commit a specific one.
206
206
  lazyShadowTreeRevisionConsistencyManager_->updateCurrentRevision(
207
207
  surfaceId, shadowTree.getCurrentRevision().rootShadowNode);
208
+
209
+ if (ReactNativeFeatureFlags::useSharedAnimatedBackend()) {
210
+ if (auto animationBackend = animationBackend_.lock()) {
211
+ animationBackend->clearRegistry(surfaceId);
212
+ }
213
+ }
208
214
  }
209
215
  });
210
216
  }
@@ -19,6 +19,7 @@ class UIManagerAnimationBackend {
19
19
  virtual void onAnimationFrame(double timestamp) = 0;
20
20
  // TODO: T240293839 Move over start() function and mutation types
21
21
  virtual void stop(bool isAsync) = 0;
22
+ virtual void clearRegistry(SurfaceId surfaceId) = 0;
22
23
  };
23
24
 
24
25
  } // namespace facebook::react
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native",
3
- "version": "0.84.0-nightly-20251205-95cc1e767",
3
+ "version": "0.84.0-nightly-20251207-e4a5a56df",
4
4
  "description": "A framework for building native apps using React",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -160,13 +160,13 @@
160
160
  },
161
161
  "dependencies": {
162
162
  "@jest/create-cache-key-function": "^29.7.0",
163
- "@react-native/assets-registry": "0.84.0-nightly-20251205-95cc1e767",
164
- "@react-native/codegen": "0.84.0-nightly-20251205-95cc1e767",
165
- "@react-native/community-cli-plugin": "0.84.0-nightly-20251205-95cc1e767",
166
- "@react-native/gradle-plugin": "0.84.0-nightly-20251205-95cc1e767",
167
- "@react-native/js-polyfills": "0.84.0-nightly-20251205-95cc1e767",
168
- "@react-native/normalize-colors": "0.84.0-nightly-20251205-95cc1e767",
169
- "@react-native/virtualized-lists": "0.84.0-nightly-20251205-95cc1e767",
163
+ "@react-native/assets-registry": "0.84.0-nightly-20251207-e4a5a56df",
164
+ "@react-native/codegen": "0.84.0-nightly-20251207-e4a5a56df",
165
+ "@react-native/community-cli-plugin": "0.84.0-nightly-20251207-e4a5a56df",
166
+ "@react-native/gradle-plugin": "0.84.0-nightly-20251207-e4a5a56df",
167
+ "@react-native/js-polyfills": "0.84.0-nightly-20251207-e4a5a56df",
168
+ "@react-native/normalize-colors": "0.84.0-nightly-20251207-e4a5a56df",
169
+ "@react-native/virtualized-lists": "0.84.0-nightly-20251207-e4a5a56df",
170
170
  "abort-controller": "^3.0.0",
171
171
  "anser": "^1.4.9",
172
172
  "ansi-regex": "^5.0.0",
@@ -175,7 +175,7 @@
175
175
  "base64-js": "^1.5.1",
176
176
  "commander": "^12.0.0",
177
177
  "flow-enums-runtime": "^0.0.6",
178
- "hermes-compiler": "0.14.0-commitly-202512030604-3713fb12a",
178
+ "hermes-compiler": "0.14.0-commitly-202512051838-1e8c447f2",
179
179
  "invariant": "^2.2.4",
180
180
  "jest-environment-node": "^29.7.0",
181
181
  "memoize-one": "^5.0.0",
@@ -1,2 +1,2 @@
1
- HERMES_VERSION_NAME=0.14.0-commitly-202512030604-3713fb12a
1
+ HERMES_VERSION_NAME=0.14.0-commitly-202512051838-1e8c447f2
2
2
  HERMES_V1_VERSION_NAME=250829098.0.4
@@ -17,6 +17,8 @@ import type {
17
17
  AnimatedNodeConfig,
18
18
  EventMapping,
19
19
  } from '../../../Libraries/Animated/NativeAnimatedModule';
20
+ import type {Spec as NativeAnimatedTurboModuleSpec} from '../../../Libraries/Animated/NativeAnimatedTurboModule';
21
+ import type {Node} from '../../../Libraries/Renderer/shims/ReactNativeTypes';
20
22
  import type {EventSubscription} from '../../../Libraries/vendor/emitter/EventEmitter';
21
23
 
22
24
  import NativeAnimatedNonTurboModule from '../../../Libraries/Animated/NativeAnimatedModule';
@@ -28,8 +30,17 @@ import * as ReactNativeFeatureFlags from '../featureflags/ReactNativeFeatureFlag
28
30
  import invariant from 'invariant';
29
31
  import nullthrows from 'nullthrows';
30
32
 
33
+ interface NativeAnimatedModuleSpec extends NativeAnimatedTurboModuleSpec {
34
+ // connectAnimatedNodeToShadowNodeFamily is available only in NativeAnimatedNonTurboModule
35
+ +connectAnimatedNodeToShadowNodeFamily?: (
36
+ nodeTag: number,
37
+ // $FlowExpectedError[unclear-type].
38
+ shadowNode: Object,
39
+ ) => void;
40
+ }
41
+
31
42
  // TODO T69437152 @petetheheat - Delete this fork when Fabric ships to 100%.
32
- const NativeAnimatedModule: typeof NativeAnimatedTurboModule =
43
+ const NativeAnimatedModule: ?NativeAnimatedModuleSpec =
33
44
  NativeAnimatedNonTurboModule ?? NativeAnimatedTurboModule;
34
45
 
35
46
  let __nativeAnimatedNodeTagCount = 1; /* used for animated nodes */
@@ -84,6 +95,13 @@ function createNativeOperations(): $NonMaybeType<typeof NativeAnimatedModule> {
84
95
  'addListener', // 20
85
96
  'removeListener', // 21
86
97
  ];
98
+ if (
99
+ ReactNativeFeatureFlags.cxxNativeAnimatedEnabled() &&
100
+ //eslint-disable-next-line
101
+ ReactNativeFeatureFlags.useSharedAnimatedBackend()
102
+ ) {
103
+ methodNames.push('connectAnimatedNodeToShadowNodeFamily');
104
+ }
87
105
  const nativeOperations: {
88
106
  [$Values<typeof methodNames>]: (...$ReadOnlyArray<mixed>) => void,
89
107
  } = {};
@@ -312,6 +330,16 @@ const API = {
312
330
  NativeOperations.connectAnimatedNodeToView(nodeTag, viewTag);
313
331
  },
314
332
 
333
+ connectAnimatedNodeToShadowNodeFamily(
334
+ nodeTag: number,
335
+ shadowNode: Node,
336
+ ): void {
337
+ NativeOperations.connectAnimatedNodeToShadowNodeFamily?.(
338
+ nodeTag,
339
+ shadowNode,
340
+ );
341
+ },
342
+
315
343
  disconnectAnimatedNodeFromView(nodeTag: number, viewTag: number): void {
316
344
  NativeOperations.disconnectAnimatedNodeFromView(nodeTag, viewTag);
317
345
  },
@@ -49,6 +49,10 @@ export interface Spec extends TurboModule {
49
49
  +flattenAnimatedNodeOffset: (nodeTag: number) => void;
50
50
  +extractAnimatedNodeOffset: (nodeTag: number) => void;
51
51
  +connectAnimatedNodeToView: (nodeTag: number, viewTag: number) => void;
52
+ +connectAnimatedNodeToShadowNodeFamily?: (
53
+ nodeTag: number,
54
+ shadowNode: Object,
55
+ ) => void;
52
56
  +disconnectAnimatedNodeFromView: (nodeTag: number, viewTag: number) => void;
53
57
  +restoreDefaultValues: (nodeTag: number) => void;
54
58
  +dropAnimatedNode: (tag: number) => void;