react-native-reanimated 4.3.2 → 4.3.4

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 (39) hide show
  1. package/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +1 -1
  2. package/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.cpp +48 -23
  3. package/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.h +13 -6
  4. package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.cpp +84 -3
  5. package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.h +3 -0
  6. package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.cpp +40 -0
  7. package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.h +4 -0
  8. package/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +16 -6
  9. package/lib/module/PropsRegistryGarbageCollector.js +3 -6
  10. package/lib/module/PropsRegistryGarbageCollector.js.map +1 -1
  11. package/lib/module/animation/decay/rigidDecay.js +1 -1
  12. package/lib/module/animation/decay/rigidDecay.js.map +1 -1
  13. package/lib/module/animation/decay/rubberBandDecay.js +1 -1
  14. package/lib/module/animation/decay/rubberBandDecay.js.map +1 -1
  15. package/lib/module/animation/spring/spring.js +8 -1
  16. package/lib/module/animation/spring/spring.js.map +1 -1
  17. package/lib/module/animation/spring/springUtils.js +2 -2
  18. package/lib/module/animation/spring/springUtils.js.map +1 -1
  19. package/lib/module/animation/styleAnimation.js +4 -3
  20. package/lib/module/animation/styleAnimation.js.map +1 -1
  21. package/lib/module/layoutReanimation/animationsManager.js +9 -6
  22. package/lib/module/layoutReanimation/animationsManager.js.map +1 -1
  23. package/lib/module/platform-specific/jsVersion.js +1 -1
  24. package/lib/typescript/PropsRegistryGarbageCollector.d.ts +0 -1
  25. package/lib/typescript/PropsRegistryGarbageCollector.d.ts.map +1 -1
  26. package/lib/typescript/animation/spring/spring.d.ts.map +1 -1
  27. package/lib/typescript/animation/styleAnimation.d.ts +1 -1
  28. package/lib/typescript/animation/styleAnimation.d.ts.map +1 -1
  29. package/lib/typescript/layoutReanimation/animationsManager.d.ts.map +1 -1
  30. package/lib/typescript/platform-specific/jsVersion.d.ts +1 -1
  31. package/package.json +2 -2
  32. package/src/PropsRegistryGarbageCollector.ts +3 -6
  33. package/src/animation/decay/rigidDecay.ts +1 -1
  34. package/src/animation/decay/rubberBandDecay.ts +1 -1
  35. package/src/animation/spring/spring.ts +11 -1
  36. package/src/animation/spring/springUtils.ts +2 -2
  37. package/src/animation/styleAnimation.ts +5 -3
  38. package/src/layoutReanimation/animationsManager.ts +9 -7
  39. package/src/platform-specific/jsVersion.ts +1 -1
@@ -24,7 +24,7 @@ Props::Shared mergeProps(const ShadowNode &shadowNode, const PropsMap &propsMap,
24
24
  if (propsVector.size() > 1) {
25
25
  folly::dynamic newPropsDynamic = folly::dynamic::object;
26
26
  for (const auto &props : propsVector) {
27
- newPropsDynamic = folly::dynamic::merge(props.operator folly::dynamic(), newPropsDynamic);
27
+ newPropsDynamic = folly::dynamic::merge(newPropsDynamic, props.operator folly::dynamic());
28
28
  }
29
29
  return shadowNode.getComponentDescriptor().cloneProps(propsParserContext, newProps, RawProps(newPropsDynamic));
30
30
  }
@@ -1,8 +1,10 @@
1
1
  #include <reanimated/Fabric/updates/AnimatedPropsRegistry.h>
2
2
  #include <reanimated/Tools/FeatureFlags.h>
3
3
 
4
+ #include <functional>
4
5
  #include <memory>
5
6
  #include <utility>
7
+ #include <vector>
6
8
 
7
9
  namespace reanimated {
8
10
 
@@ -25,25 +27,59 @@ void AnimatedPropsRegistry::update(jsi::Runtime &rt, const jsi::Value &operation
25
27
  addUpdatesToBatch(shadowNode, jsi::dynamicFromValue(rt, updates));
26
28
 
27
29
  if constexpr (StaticFeatureFlags::getFlag("FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS")) {
28
- timestampMap_[shadowNode->getTag()] = timestamp;
30
+ const auto tag = shadowNode->getTag();
31
+ timestampMap_[tag] = timestamp;
32
+ // If JS already has a `settledProps` snapshot for this tag, it is now
33
+ // stale — schedule a refresh on the next `collectSettledUpdates`.
34
+ if (syncedTags_.erase(tag) > 0) {
35
+ invalidatedTags_.insert(tag);
36
+ }
29
37
  }
30
38
  }
31
39
  }
32
40
 
33
- jsi::Value AnimatedPropsRegistry::getUpdatesOlderThanTimestamp(
34
- jsi::Runtime &rt,
35
- const double timestamp,
36
- const double cleanupTimestamp) {
41
+ jsi::Value AnimatedPropsRegistry::collectSettledUpdates(jsi::Runtime &rt, const double settledTimestamp) {
37
42
  std::lock_guard<std::mutex> lock{mutex_};
38
- removeUpdatesOlderThanTimestamp(cleanupTimestamp);
39
43
 
40
44
  std::vector<std::pair<Tag, std::reference_wrapper<const folly::dynamic>>> updates;
41
45
 
42
- for (const auto &[viewTag, pair] : updatesRegistry_) {
43
- auto it = timestampMap_.find(viewTag);
44
- if (it != timestampMap_.end() && it->second < timestamp) {
45
- updates.emplace_back(viewTag, std::cref(pair.second));
46
+ for (auto it = updatesRegistry_.begin(); it != updatesRegistry_.end();) {
47
+ const auto viewTag = it->first;
48
+
49
+ if (syncedTags_.contains(viewTag)) {
50
+ // React already has the latest value for this tag (synced on a previous
51
+ // call, so the `settledProps` state is committed by now) — the registry
52
+ // entry is redundant. `syncedTags_` is intentionally retained to detect
53
+ // re-animation staleness. Note that `syncedTags_` and `invalidatedTags_`
54
+ // are disjoint — `update()` moves tags from the former to the latter.
55
+ timestampMap_.erase(viewTag);
56
+ it = updatesRegistry_.erase(it);
57
+ continue;
58
+ }
59
+
60
+ const auto timestampIt = timestampMap_.find(viewTag);
61
+ if (timestampIt == timestampMap_.end()) {
62
+ ++it;
63
+ continue;
64
+ }
65
+ const bool isSettled = timestampIt->second < settledTimestamp;
66
+ const auto invalidatedIt = invalidatedTags_.find(viewTag);
67
+ const bool isInvalidated = invalidatedIt != invalidatedTags_.end();
68
+ if (isSettled || isInvalidated) {
69
+ updates.emplace_back(viewTag, std::cref(it->second.second));
70
+ if (isSettled) {
71
+ // Only settled-path tags are tracked as "synced" so that an ongoing
72
+ // animation doesn't re-trigger an invalidation/sync on every GC tick.
73
+ syncedTags_.insert(viewTag);
74
+ }
75
+ if (isInvalidated) {
76
+ // Only erase serviced invalidations; if a tag was invalidated but the
77
+ // matching update batch hasn't been flushed into updatesRegistry_ yet,
78
+ // we leave the entry so the next sync picks it up.
79
+ invalidatedTags_.erase(invalidatedIt);
80
+ }
46
81
  }
82
+ ++it;
47
83
  }
48
84
 
49
85
  const jsi::Array array(rt, updates.size());
@@ -58,22 +94,11 @@ jsi::Value AnimatedPropsRegistry::getUpdatesOlderThanTimestamp(
58
94
  return jsi::Value(rt, array);
59
95
  }
60
96
 
61
- void AnimatedPropsRegistry::removeUpdatesOlderThanTimestamp(const double timestamp) {
62
- for (auto it = timestampMap_.begin(); it != timestampMap_.end();) {
63
- const auto viewTag = it->first;
64
- const auto viewTimestamp = it->second;
65
- if (viewTimestamp < timestamp) {
66
- it = timestampMap_.erase(it);
67
- updatesRegistry_.erase(viewTag);
68
- } else {
69
- it++;
70
- }
71
- }
72
- }
73
-
74
97
  void AnimatedPropsRegistry::removeTag(const Tag tag) {
75
98
  updatesRegistry_.erase(tag);
76
99
  timestampMap_.erase(tag);
100
+ syncedTags_.erase(tag);
101
+ invalidatedTags_.erase(tag);
77
102
  }
78
103
 
79
104
  } // namespace reanimated
@@ -4,10 +4,8 @@
4
4
 
5
5
  #include <react/renderer/uimanager/UIManager.h>
6
6
 
7
- #include <memory>
8
- #include <string>
9
7
  #include <unordered_map>
10
- #include <vector>
8
+ #include <unordered_set>
11
9
 
12
10
  namespace reanimated {
13
11
 
@@ -15,13 +13,22 @@ class AnimatedPropsRegistry : public UpdatesRegistry {
15
13
  public:
16
14
  void update(jsi::Runtime &rt, const jsi::Value &operations, double timestamp);
17
15
 
18
- /// Also removes updates older than `cleanupTimestamp` from the registry.
19
- jsi::Value getUpdatesOlderThanTimestamp(jsi::Runtime &rt, double timestamp, double cleanupTimestamp);
16
+ /// Returns updates that settled (received no update since `settledTimestamp`)
17
+ /// or whose synced `settledProps` snapshot was invalidated by a fresh update.
18
+ /// Also evicts entries that have already been synced to React — by the time
19
+ /// of the next call, the corresponding `settledProps` state is guaranteed to
20
+ /// be committed, so the registry entries are redundant.
21
+ jsi::Value collectSettledUpdates(jsi::Runtime &rt, double settledTimestamp);
20
22
 
21
23
  private:
22
24
  std::unordered_map<Tag, double> timestampMap_; // viewTag -> timestamp, protected by `mutex_`
25
+ // Tags whose latest values have already been pushed to React `settledProps`.
26
+ // Intentionally retained after eviction to detect re-animation staleness.
27
+ std::unordered_set<Tag> syncedTags_;
28
+ // Tags that were synced to React but received a fresh worklet update since;
29
+ // their `settledProps` are stale and need to be refreshed on the next sync.
30
+ std::unordered_set<Tag> invalidatedTags_;
23
31
 
24
- void removeUpdatesOlderThanTimestamp(double timestamp);
25
32
  void removeTag(Tag tag) override;
26
33
  };
27
34
 
@@ -34,6 +34,8 @@ std::optional<MountingTransaction> LayoutAnimationsProxy_Experimental::pullTrans
34
34
  const std::vector<std::shared_ptr<MutationNode>> roots;
35
35
  const bool isInTransition = static_cast<bool>(transitionState_);
36
36
 
37
+ reconcileContradictedRemovals(mutations, filteredMutations);
38
+
37
39
  if (isInTransition) {
38
40
  updateLightTree(propsParserContext, mutations, filteredMutations);
39
41
  handleProgressTransition(filteredMutations, mutations, propsParserContext, surfaceId);
@@ -105,6 +107,67 @@ std::optional<MountingTransaction> LayoutAnimationsProxy_Experimental::pullTrans
105
107
  return MountingTransaction{surfaceId, transactionNumber, std::move(filteredMutations), telemetry};
106
108
  }
107
109
 
110
+ // If React re-creates or re-inserts a tag whose exiting removal we are still
111
+ // withholding, it has contradicted that withheld removal. Flush it now instead
112
+ // of letting the stale node linger: updateLightTree would overwrite its
113
+ // lightNodes_ entry (the "LightNode already exists" assert is compiled out in
114
+ // release), orphaning the still-mounted exiting view, and the eventual
115
+ // endLayoutAnimation would then remove the wrong, live view and crash the
116
+ // mounting layer.
117
+ //
118
+ // This must run before updateLightTree (so the tag is re-registered cleanly)
119
+ // and before addOngoingAnimations (which would otherwise emit an Update for a
120
+ // tag we are about to Delete this frame).
121
+ void LayoutAnimationsProxy_Experimental::reconcileContradictedRemovals(
122
+ const ShadowViewMutationList &mutations,
123
+ ShadowViewMutationList &filteredMutations) const {
124
+ for (const auto &mutation : mutations) {
125
+ if (mutation.type != ShadowViewMutation::Type::Create && mutation.type != ShadowViewMutation::Type::Insert) {
126
+ continue;
127
+ }
128
+ const auto tag = mutation.newChildShadowView.tag;
129
+ std::shared_ptr<LightNode> node;
130
+ if (const auto it = lightNodes_.find(tag); it != lightNodes_.end() && it->second->state != UNDEFINED) {
131
+ node = it->second;
132
+ lightNodes_.erase(it);
133
+ if (node->state == DELETED) {
134
+ // already unmounted — only the stale map entry had to go
135
+ continue;
136
+ }
137
+ } else {
138
+ // A settled exiting view (state DEAD) has already left lightNodes_ but is
139
+ // still mounted, awaiting the deadNodes cleanup in handleRemovals. That
140
+ // cleanup runs at the end of the transaction — after this Create would
141
+ // have re-registered the tag in the mounting layer's view registry — so
142
+ // it must be flushed now instead.
143
+ const auto deadIt = std::find_if(
144
+ deadNodes.begin(), deadNodes.end(), [tag](const auto &deadNode) { return deadNode->current.tag == tag; });
145
+ if (deadIt == deadNodes.end()) {
146
+ continue;
147
+ }
148
+ node = *deadIt;
149
+ deadNodes.erase(deadIt);
150
+ if (node->state == DELETED) {
151
+ continue;
152
+ }
153
+ }
154
+ // Flush the withheld removal for this tag (and its withheld subtree) right
155
+ // now, mirroring the deadNodes cleanup in handleRemovals.
156
+ const auto parent = node->parent.lock();
157
+ react_native_assert(parent && "Parent node is nullptr");
158
+ if (!parent) {
159
+ continue;
160
+ }
161
+ const auto index = parent->removeChild(node);
162
+ react_native_assert(index != -1 && "Exiting node not found");
163
+ if (index == -1) {
164
+ continue;
165
+ }
166
+ endAnimationsRecursively(node, index, filteredMutations);
167
+ maybeDropAncestors(parent, filteredMutations);
168
+ }
169
+ }
170
+
108
171
  bool LayoutAnimationsProxy_Experimental::shouldOverridePullTransaction() const {
109
172
  // we need to listen to every possible mutation to keep the light tree updated
110
173
  return true;
@@ -298,11 +361,18 @@ std::optional<SurfaceId> LayoutAnimationsProxy_Experimental::endLayoutAnimation(
298
361
  return surfaceId;
299
362
  }
300
363
 
301
- auto node = lightNodes_[tag];
302
- react_native_assert(node && "LightNode not found");
364
+ const auto nodeIt = lightNodes_.find(tag);
365
+ // the withheld removal may have already been flushed (e.g. reconciled after
366
+ // React re-created the tag) — the assert alone is compiled out in release
367
+ // and operator[] would insert a null node here
368
+ if (nodeIt == lightNodes_.end() || !nodeIt->second) {
369
+ react_native_assert(false && "LightNode not found");
370
+ return surfaceId;
371
+ }
372
+ auto node = nodeIt->second;
303
373
 
304
374
  node->state = DEAD;
305
- lightNodes_.erase(tag);
375
+ lightNodes_.erase(nodeIt);
306
376
  deadNodes.insert(node);
307
377
 
308
378
  return surfaceId;
@@ -341,6 +411,7 @@ void LayoutAnimationsProxy_Experimental::handleRemovals(
341
411
  parent->children.push_back(node);
342
412
  if (node->state == UNDEFINED) {
343
413
  node->state = WAITING;
414
+ lightNodes_[node->current.tag] = node;
344
415
  }
345
416
  } else {
346
417
  maybeCancelAnimation(node->current.tag);
@@ -424,6 +495,10 @@ void LayoutAnimationsProxy_Experimental::endAnimationsRecursively(
424
495
  ShadowViewMutationList &mutations) const {
425
496
  maybeCancelAnimation(node->current.tag);
426
497
  node->state = DELETED;
498
+ // drop the tag mapping unless it was already re-registered for a new node
499
+ if (const auto it = lightNodes_.find(node->current.tag); it != lightNodes_.end() && it->second == node) {
500
+ lightNodes_.erase(it);
501
+ }
427
502
  // iterate from the end, so that children
428
503
  // with higher indices appear first in the mutations list
429
504
 
@@ -455,6 +530,9 @@ void LayoutAnimationsProxy_Experimental::maybeDropAncestors(
455
530
  react_native_assert(index != -1 && "Child node not found");
456
531
 
457
532
  node->state = DELETED;
533
+ if (const auto it = lightNodes_.find(node->current.tag); it != lightNodes_.end() && it->second == node) {
534
+ lightNodes_.erase(it);
535
+ }
458
536
  maybeCancelAnimation(node->current.tag);
459
537
  cleanupMutations.push_back(ShadowViewMutation::RemoveMutation(parent->current.tag, node->current, index));
460
538
  cleanupMutations.push_back(ShadowViewMutation::DeleteMutation(node->current));
@@ -507,6 +585,9 @@ bool LayoutAnimationsProxy_Experimental::startAnimationsRecursively(
507
585
  mutations.push_back(ShadowViewMutation::DeleteMutation(subNode->current));
508
586
  } else {
509
587
  subNode->state = WAITING;
588
+ // register withheld subtree members, so that reconcileContradictedRemovals
589
+ // can find them when React re-creates their tags
590
+ lightNodes_[subNode->current.tag] = subNode;
510
591
  }
511
592
  }
512
593
 
@@ -108,6 +108,9 @@ struct LayoutAnimationsProxy_Experimental : public LayoutAnimationsProxyCommon,
108
108
  const ShadowViewMutationList &mutations,
109
109
  ShadowViewMutationList &filteredMutations) const;
110
110
 
111
+ void reconcileContradictedRemovals(const ShadowViewMutationList &mutations, ShadowViewMutationList &filteredMutations)
112
+ const;
113
+
111
114
  void handleSharedTransitionsStart(
112
115
  const std::shared_ptr<LightNode> &afterTopScreen,
113
116
  const std::shared_ptr<LightNode> &beforeTopScreen,
@@ -39,6 +39,8 @@ std::optional<MountingTransaction> LayoutAnimationsProxy_Legacy::pullTransaction
39
39
  std::vector<std::shared_ptr<MutationNode>> roots;
40
40
  std::unordered_map<Tag, Tag> movedViews;
41
41
 
42
+ reconcileContradictedRemovals(mutations, filteredMutations, surfaceId);
43
+
42
44
  addOngoingAnimations(surfaceId, filteredMutations);
43
45
 
44
46
  #ifdef ANDROID
@@ -64,6 +66,40 @@ std::optional<MountingTransaction> LayoutAnimationsProxy_Legacy::pullTransaction
64
66
  return MountingTransaction{surfaceId, transactionNumber, std::move(filteredMutations), telemetry};
65
67
  }
66
68
 
69
+ // If React re-creates or re-inserts a tag whose exiting removal we are still
70
+ // withholding, it has contradicted that withheld Remove/Delete. Flush it now
71
+ // instead of letting it fire later against a stale hierarchy (which would
72
+ // unmount the wrong, still-live view and crash the mounting layer).
73
+ //
74
+ // This must run before addOngoingAnimations (which would otherwise emit an
75
+ // Update for a tag we are about to Delete this frame) and before
76
+ // parseRemoveMutations, so the rest of the pipeline sees clean bookkeeping.
77
+ void LayoutAnimationsProxy_Legacy::reconcileContradictedRemovals(
78
+ ShadowViewMutationList &mutations,
79
+ ShadowViewMutationList &filteredMutations,
80
+ SurfaceId surfaceId) const {
81
+ auto &[deadNodes] = surfaceContext_[surfaceId];
82
+ for (auto &mutation : mutations) {
83
+ if (mutation.type != ShadowViewMutation::Type::Create && mutation.type != ShadowViewMutation::Type::Insert) {
84
+ continue;
85
+ }
86
+ auto tag = mutation.newChildShadowView.tag;
87
+ auto it = nodeForTag_.find(tag);
88
+ // Only a MutationNode represents a withheld removal; a plain Node is just a
89
+ // live parent of some removed child and must be left untouched.
90
+ if (it == nodeForTag_.end() || !it->second->isMutationNode()) {
91
+ continue;
92
+ }
93
+ auto node = std::static_pointer_cast<MutationNode>(it->second);
94
+ // Flush the withheld Remove/Delete for this tag (and its withheld subtree)
95
+ // right now, mirroring the deadNodes cleanup in handleRemovals. This removes
96
+ // the stale view before React's Create/Insert re-registers the same tag.
97
+ endAnimationsRecursively(node, filteredMutations);
98
+ maybeDropAncestors(node->unflattenedParent, node, filteredMutations);
99
+ deadNodes.erase(node);
100
+ }
101
+ }
102
+
67
103
  std::optional<SurfaceId> LayoutAnimationsProxy_Legacy::progressLayoutAnimation(int tag, const jsi::Object &newStyle) {
68
104
  #ifdef LAYOUT_ANIMATIONS_LOGS
69
105
  LOG(INFO) << "progress layout animation for tag " << tag << std::endl;
@@ -123,6 +159,10 @@ std::optional<SurfaceId> LayoutAnimationsProxy_Legacy::endLayoutAnimation(int ta
123
159
  }
124
160
 
125
161
  auto node = nodeForTag_[tag];
162
+ if (!node->isMutationNode()) {
163
+ react_native_assert(false && "exiting tag must map to a MutationNode");
164
+ return {};
165
+ }
126
166
  auto mutationNode = std::static_pointer_cast<MutationNode>(node);
127
167
  mutationNode->state = ExitingState_Legacy::DEAD;
128
168
  auto &[deadNodes] = surfaceContext_[surfaceId];
@@ -148,6 +148,10 @@ struct LayoutAnimationsProxy_Legacy : public LayoutAnimationsProxyCommon,
148
148
  std::optional<SurfaceId> endLayoutAnimation(int tag, bool shouldRemove) override;
149
149
  void maybeCancelAnimation(const int tag) const;
150
150
 
151
+ void reconcileContradictedRemovals(
152
+ ShadowViewMutationList &mutations,
153
+ ShadowViewMutationList &filteredMutations,
154
+ SurfaceId surfaceId) const;
151
155
  void parseRemoveMutations(
152
156
  std::unordered_map<Tag, Tag> &movedViews,
153
157
  ShadowViewMutationList &mutations,
@@ -524,15 +524,13 @@ jsi::Value ReanimatedModuleProxy::getSettledUpdates(jsi::Runtime &rt) {
524
524
  StaticFeatureFlags::getFlag("FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS") &&
525
525
  "getSettledUpdates requires FORCE_REACT_RENDER_FOR_SETTLED_ANIMATIONS static feature flag to be enabled");
526
526
 
527
+ constexpr double SETTLED_ANIMATION_THRESHOLD_MS = 1000;
528
+
527
529
  // TODO(future): use unified timestamp
528
530
  const auto currentTimestamp = getAnimationTimestamp_();
529
531
 
530
- // TODO: fix bug when threshold difference is smaller than 1 second
531
532
  // TODO(future): flush updates from CSS animations and CSS transitions registries
532
- // TODO(future): find a better way to obtain timestamp for removing updates
533
- // TODO(future): move removing old updates to separate method
534
- return animatedPropsRegistry_->getUpdatesOlderThanTimestamp(
535
- rt, currentTimestamp - 1000 /* 1 second */, currentTimestamp - 2000 /* 2 seconds */);
533
+ return animatedPropsRegistry_->collectSettledUpdates(rt, currentTimestamp - SETTLED_ANIMATION_THRESHOLD_MS);
536
534
  }
537
535
 
538
536
  bool ReanimatedModuleProxy::handleEvent(
@@ -562,7 +560,19 @@ bool ReanimatedModuleProxy::handleRawEvent(const RawEvent &rawEvent, double curr
562
560
  return false;
563
561
  }
564
562
 
565
- int tag = eventTarget->getTag();
563
+ #if REACT_NATIVE_VERSION_MINOR >= 87
564
+ const auto tag = eventTarget->getTag();
565
+ #else
566
+ // A stale event dispatched during unmount may carry an EventTarget with a null
567
+ // InstanceHandle which getTag() would dereference (see #9925).
568
+ // Fixed in React Native 0.87 by https://github.com/facebook/react-native/pull/56763.
569
+ const auto shadowNodeFamily = rawEvent.shadowNodeFamily.lock();
570
+ if (shadowNodeFamily == nullptr) {
571
+ return false;
572
+ }
573
+ const auto tag = shadowNodeFamily->getTag();
574
+ #endif
575
+
566
576
  auto eventType = rawEvent.type;
567
577
  if (eventType.rfind("top", 0) == 0) {
568
578
  eventType = "on" + eventType.substr(3);
@@ -4,7 +4,6 @@ import { unprocessColor, unprocessColorsInProps } from './common/style/processor
4
4
  import { ReanimatedModule } from './ReanimatedModule';
5
5
  const FLUSH_INTERVAL_MS = 500;
6
6
  export const PropsRegistryGarbageCollector = {
7
- viewsCount: 0,
8
7
  viewsMap: new Map(),
9
8
  intervalId: null,
10
9
  registerView(viewTag, component) {
@@ -17,15 +16,13 @@ export const PropsRegistryGarbageCollector = {
17
16
  return;
18
17
  }
19
18
  this.viewsMap.set(viewTag, component);
20
- this.viewsCount++;
21
- if (this.viewsCount === 1) {
19
+ if (this.viewsMap.size === 1) {
22
20
  this.registerInterval();
23
21
  }
24
22
  },
25
23
  unregisterView(viewTag) {
26
- this.viewsMap.delete(viewTag);
27
- this.viewsCount--;
28
- if (this.viewsCount === 0) {
24
+ const deleted = this.viewsMap.delete(viewTag);
25
+ if (deleted && this.viewsMap.size === 0) {
29
26
  this.unregisterInterval();
30
27
  }
31
28
  },
@@ -1 +1 @@
1
- {"version":3,"names":["unprocessColor","unprocessColorsInProps","ReanimatedModule","FLUSH_INTERVAL_MS","PropsRegistryGarbageCollector","viewsCount","viewsMap","Map","intervalId","registerView","viewTag","component","has","set","registerInterval","unregisterView","delete","unregisterInterval","syncPropsBackToReact","settledUpdates","getSettledUpdates","styleProps","get","unprocessProps","_syncStylePropsBackToReact","setInterval","bind","clearInterval","props","unprocessBoxShadow","Array","isArray","boxShadow","map","color"],"sourceRoot":"../../src","sources":["PropsRegistryGarbageCollector.ts"],"mappings":"AAAA,YAAY;;AAEZ,SACEA,cAAc,EACdC,sBAAsB,QACjB,kCAAkC;AAGzC,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,MAAMC,iBAAiB,GAAG,GAAG;AAE7B,OAAO,MAAMC,6BAA6B,GAAG;EAC3CC,UAAU,EAAE,CAAC;EACbC,QAAQ,EAAE,IAAIC,GAAG,CAAqC,CAAC;EACvDC,UAAU,EAAE,IAA6B;EAEzCC,YAAYA,CAACC,OAAe,EAAEC,SAAqC,EAAE;IACnE,IAAI,IAAI,CAACL,QAAQ,CAACM,GAAG,CAACF,OAAO,CAAC,EAAE;MAC9B;MACA;MACA;MACA;MACA;MACA;IACF;IACA,IAAI,CAACJ,QAAQ,CAACO,GAAG,CAACH,OAAO,EAAEC,SAAS,CAAC;IACrC,IAAI,CAACN,UAAU,EAAE;IACjB,IAAI,IAAI,CAACA,UAAU,KAAK,CAAC,EAAE;MACzB,IAAI,CAACS,gBAAgB,CAAC,CAAC;IACzB;EACF,CAAC;EAEDC,cAAcA,CAACL,OAAe,EAAE;IAC9B,IAAI,CAACJ,QAAQ,CAACU,MAAM,CAACN,OAAO,CAAC;IAC7B,IAAI,CAACL,UAAU,EAAE;IACjB,IAAI,IAAI,CAACA,UAAU,KAAK,CAAC,EAAE;MACzB,IAAI,CAACY,kBAAkB,CAAC,CAAC;IAC3B;EACF,CAAC;EAEDC,oBAAoBA,CAAA,EAAG;IACrB,MAAMC,cAAc,GAAGjB,gBAAgB,CAACkB,iBAAiB,CAAC,CAAC;IAC3D,KAAK,MAAM;MAAEV,OAAO;MAAEW;IAAW,CAAC,IAAIF,cAAc,EAAE;MACpD,IAAIE,UAAU,KAAK,IAAI,EAAE;QACvB;MACF;MACA,MAAMV,SAAS,GAAG,IAAI,CAACL,QAAQ,CAACgB,GAAG,CAACZ,OAAO,CAAC;MAC5Ca,cAAc,CAACF,UAAU,CAAC;MAC1BV,SAAS,EAAEa,0BAA0B,CAACH,UAAU,CAAC;IACnD;EACF,CAAC;EAEDP,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACN,UAAU,GAAGiB,WAAW,CAC3B,IAAI,CAACP,oBAAoB,CAACQ,IAAI,CAAC,IAAI,CAAC,EACpCvB,iBACF,CAAC;EACH,CAAC;EAEDc,kBAAkBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACT,UAAU,KAAK,IAAI,EAAE;MAC5BmB,aAAa,CAAC,IAAI,CAACnB,UAAU,CAAC;MAC9B,IAAI,CAACA,UAAU,GAAG,IAAI;IACxB;EACF;AACF,CAAC;AAED,SAASe,cAAcA,CAACK,KAAiB,EAAE;EACzC3B,sBAAsB,CAAC2B,KAAK,CAAC;EAC7BC,kBAAkB,CAACD,KAAK,CAAC;AAC3B;AAEA,SAASC,kBAAkBA,CAACD,KAAiB,EAAE;EAC7C,IAAIE,KAAK,CAACC,OAAO,CAACH,KAAK,CAACI,SAAS,CAAC,EAAE;IAClC;IACAJ,KAAK,CAACI,SAAS,GAAGJ,KAAK,CAACI,SAAS,CAACC,GAAG,CAAED,SAAS,KAAM;MACpD,GAAGA,SAAS;MACZE,KAAK,EAAElC,cAAc,CAACgC,SAAS,CAACE,KAAK;IACvC,CAAC,CAAC,CAAC;EACL;AACF","ignoreList":[]}
1
+ {"version":3,"names":["unprocessColor","unprocessColorsInProps","ReanimatedModule","FLUSH_INTERVAL_MS","PropsRegistryGarbageCollector","viewsMap","Map","intervalId","registerView","viewTag","component","has","set","size","registerInterval","unregisterView","deleted","delete","unregisterInterval","syncPropsBackToReact","settledUpdates","getSettledUpdates","styleProps","get","unprocessProps","_syncStylePropsBackToReact","setInterval","bind","clearInterval","props","unprocessBoxShadow","Array","isArray","boxShadow","map","color"],"sourceRoot":"../../src","sources":["PropsRegistryGarbageCollector.ts"],"mappings":"AAAA,YAAY;;AAEZ,SACEA,cAAc,EACdC,sBAAsB,QACjB,kCAAkC;AAGzC,SAASC,gBAAgB,QAAQ,oBAAoB;AAErD,MAAMC,iBAAiB,GAAG,GAAG;AAE7B,OAAO,MAAMC,6BAA6B,GAAG;EAC3CC,QAAQ,EAAE,IAAIC,GAAG,CAAqC,CAAC;EACvDC,UAAU,EAAE,IAA6B;EAEzCC,YAAYA,CAACC,OAAe,EAAEC,SAAqC,EAAE;IACnE,IAAI,IAAI,CAACL,QAAQ,CAACM,GAAG,CAACF,OAAO,CAAC,EAAE;MAC9B;MACA;MACA;MACA;MACA;MACA;IACF;IACA,IAAI,CAACJ,QAAQ,CAACO,GAAG,CAACH,OAAO,EAAEC,SAAS,CAAC;IACrC,IAAI,IAAI,CAACL,QAAQ,CAACQ,IAAI,KAAK,CAAC,EAAE;MAC5B,IAAI,CAACC,gBAAgB,CAAC,CAAC;IACzB;EACF,CAAC;EAEDC,cAAcA,CAACN,OAAe,EAAE;IAC9B,MAAMO,OAAO,GAAG,IAAI,CAACX,QAAQ,CAACY,MAAM,CAACR,OAAO,CAAC;IAC7C,IAAIO,OAAO,IAAI,IAAI,CAACX,QAAQ,CAACQ,IAAI,KAAK,CAAC,EAAE;MACvC,IAAI,CAACK,kBAAkB,CAAC,CAAC;IAC3B;EACF,CAAC;EAEDC,oBAAoBA,CAAA,EAAG;IACrB,MAAMC,cAAc,GAAGlB,gBAAgB,CAACmB,iBAAiB,CAAC,CAAC;IAC3D,KAAK,MAAM;MAAEZ,OAAO;MAAEa;IAAW,CAAC,IAAIF,cAAc,EAAE;MACpD,IAAIE,UAAU,KAAK,IAAI,EAAE;QACvB;MACF;MACA,MAAMZ,SAAS,GAAG,IAAI,CAACL,QAAQ,CAACkB,GAAG,CAACd,OAAO,CAAC;MAC5Ce,cAAc,CAACF,UAAU,CAAC;MAC1BZ,SAAS,EAAEe,0BAA0B,CAACH,UAAU,CAAC;IACnD;EACF,CAAC;EAEDR,gBAAgBA,CAAA,EAAG;IACjB,IAAI,CAACP,UAAU,GAAGmB,WAAW,CAC3B,IAAI,CAACP,oBAAoB,CAACQ,IAAI,CAAC,IAAI,CAAC,EACpCxB,iBACF,CAAC;EACH,CAAC;EAEDe,kBAAkBA,CAAA,EAAG;IACnB,IAAI,IAAI,CAACX,UAAU,KAAK,IAAI,EAAE;MAC5BqB,aAAa,CAAC,IAAI,CAACrB,UAAU,CAAC;MAC9B,IAAI,CAACA,UAAU,GAAG,IAAI;IACxB;EACF;AACF,CAAC;AAED,SAASiB,cAAcA,CAACK,KAAiB,EAAE;EACzC5B,sBAAsB,CAAC4B,KAAK,CAAC;EAC7BC,kBAAkB,CAACD,KAAK,CAAC;AAC3B;AAEA,SAASC,kBAAkBA,CAACD,KAAiB,EAAE;EAC7C,IAAIE,KAAK,CAACC,OAAO,CAACH,KAAK,CAACI,SAAS,CAAC,EAAE;IAClC;IACAJ,KAAK,CAACI,SAAS,GAAGJ,KAAK,CAACI,SAAS,CAACC,GAAG,CAAED,SAAS,KAAM;MACpD,GAAGA,SAAS;MACZE,KAAK,EAAEnC,cAAc,CAACiC,SAAS,CAACE,KAAK;IACvC,CAAC,CAAC,CAAC;EACL;AACF","ignoreList":[]}
@@ -11,7 +11,7 @@ export function rigidDecay(animation, now, config) {
11
11
  current,
12
12
  velocity
13
13
  } = animation;
14
- const deltaTime = Math.min(now - lastTimestamp, 64);
14
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
15
15
  const v = velocity * Math.exp(-(1 - config.deceleration) * (now - startTimestamp) * SLOPE_FACTOR);
16
16
  animation.current = current + v * config.velocityFactor * deltaTime / 1000;
17
17
  animation.velocity = v;
@@ -1 +1 @@
1
- {"version":3,"names":["SLOPE_FACTOR","VELOCITY_EPS","rigidDecay","animation","now","config","lastTimestamp","startTimestamp","initialVelocity","current","velocity","deltaTime","Math","min","v","exp","deceleration","velocityFactor","clamp","abs"],"sourceRoot":"../../../../src","sources":["animation/decay/rigidDecay.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,YAAY,EAAEC,YAAY,QAAQ,SAAS;AAEpD,OAAO,SAASC,UAAUA,CACxBC,SAA8B,EAC9BC,GAAW,EACXC,MAA0B,EACjB;EACT,SAAS;;EACT,MAAM;IAAEC,aAAa;IAAEC,cAAc;IAAEC,eAAe;IAAEC,OAAO;IAAEC;EAAS,CAAC,GACzEP,SAAS;EAEX,MAAMQ,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACT,GAAG,GAAGE,aAAa,EAAE,EAAE,CAAC;EACnD,MAAMQ,CAAC,GACLJ,QAAQ,GACRE,IAAI,CAACG,GAAG,CACN,EAAE,CAAC,GAAGV,MAAM,CAACW,YAAY,CAAC,IAAIZ,GAAG,GAAGG,cAAc,CAAC,GAAGP,YACxD,CAAC;EACHG,SAAS,CAACM,OAAO,GAAGA,OAAO,GAAIK,CAAC,GAAGT,MAAM,CAACY,cAAc,GAAGN,SAAS,GAAI,IAAI;EAC5ER,SAAS,CAACO,QAAQ,GAAGI,CAAC;EACtBX,SAAS,CAACG,aAAa,GAAGF,GAAG;EAE7B,IAAIC,MAAM,CAACa,KAAK,EAAE;IAChB,IAAIV,eAAe,GAAG,CAAC,IAAIL,SAAS,CAACM,OAAO,IAAIJ,MAAM,CAACa,KAAK,CAAC,CAAC,CAAC,EAAE;MAC/Df,SAAS,CAACM,OAAO,GAAGJ,MAAM,CAACa,KAAK,CAAC,CAAC,CAAC;MACnC,OAAO,IAAI;IACb,CAAC,MAAM,IAAIV,eAAe,GAAG,CAAC,IAAIL,SAAS,CAACM,OAAO,IAAIJ,MAAM,CAACa,KAAK,CAAC,CAAC,CAAC,EAAE;MACtEf,SAAS,CAACM,OAAO,GAAGJ,MAAM,CAACa,KAAK,CAAC,CAAC,CAAC;MACnC,OAAO,IAAI;IACb;EACF;EACA,OAAON,IAAI,CAACO,GAAG,CAACL,CAAC,CAAC,GAAGb,YAAY;AACnC","ignoreList":[]}
1
+ {"version":3,"names":["SLOPE_FACTOR","VELOCITY_EPS","rigidDecay","animation","now","config","lastTimestamp","startTimestamp","initialVelocity","current","velocity","deltaTime","Math","min","max","v","exp","deceleration","velocityFactor","clamp","abs"],"sourceRoot":"../../../../src","sources":["animation/decay/rigidDecay.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,YAAY,EAAEC,YAAY,QAAQ,SAAS;AAEpD,OAAO,SAASC,UAAUA,CACxBC,SAA8B,EAC9BC,GAAW,EACXC,MAA0B,EACjB;EACT,SAAS;;EACT,MAAM;IAAEC,aAAa;IAAEC,cAAc;IAAEC,eAAe;IAAEC,OAAO;IAAEC;EAAS,CAAC,GACzEP,SAAS;EAEX,MAAMQ,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACV,GAAG,GAAGE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;EAChE,MAAMS,CAAC,GACLL,QAAQ,GACRE,IAAI,CAACI,GAAG,CACN,EAAE,CAAC,GAAGX,MAAM,CAACY,YAAY,CAAC,IAAIb,GAAG,GAAGG,cAAc,CAAC,GAAGP,YACxD,CAAC;EACHG,SAAS,CAACM,OAAO,GAAGA,OAAO,GAAIM,CAAC,GAAGV,MAAM,CAACa,cAAc,GAAGP,SAAS,GAAI,IAAI;EAC5ER,SAAS,CAACO,QAAQ,GAAGK,CAAC;EACtBZ,SAAS,CAACG,aAAa,GAAGF,GAAG;EAE7B,IAAIC,MAAM,CAACc,KAAK,EAAE;IAChB,IAAIX,eAAe,GAAG,CAAC,IAAIL,SAAS,CAACM,OAAO,IAAIJ,MAAM,CAACc,KAAK,CAAC,CAAC,CAAC,EAAE;MAC/DhB,SAAS,CAACM,OAAO,GAAGJ,MAAM,CAACc,KAAK,CAAC,CAAC,CAAC;MACnC,OAAO,IAAI;IACb,CAAC,MAAM,IAAIX,eAAe,GAAG,CAAC,IAAIL,SAAS,CAACM,OAAO,IAAIJ,MAAM,CAACc,KAAK,CAAC,CAAC,CAAC,EAAE;MACtEhB,SAAS,CAACM,OAAO,GAAGJ,MAAM,CAACc,KAAK,CAAC,CAAC,CAAC;MACnC,OAAO,IAAI;IACb;EACF;EACA,OAAOP,IAAI,CAACQ,GAAG,CAACL,CAAC,CAAC,GAAGd,YAAY;AACnC","ignoreList":[]}
@@ -11,7 +11,7 @@ export function rubberBandDecay(animation, now, config) {
11
11
  current,
12
12
  velocity
13
13
  } = animation;
14
- const deltaTime = Math.min(now - lastTimestamp, 64);
14
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
15
15
  const clampIndex = Math.abs(current - config.clamp[0]) < Math.abs(current - config.clamp[1]) ? 0 : 1;
16
16
  let derivative = 0;
17
17
  if (current < config.clamp[0] || current > config.clamp[1]) {
@@ -1 +1 @@
1
- {"version":3,"names":["SLOPE_FACTOR","VELOCITY_EPS","DERIVATIVE_EPS","rubberBandDecay","animation","now","config","lastTimestamp","startTimestamp","current","velocity","deltaTime","Math","min","clampIndex","abs","clamp","derivative","v","exp","deceleration","rubberBandFactor","springActive","velocityFactor"],"sourceRoot":"../../../../src","sources":["animation/decay/rubberBandDecay.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,YAAY,EAAEC,YAAY,QAAQ,SAAS;AAEpD,MAAMC,cAAc,GAAG,GAAG;AAE1B,OAAO,SAASC,eAAeA,CAC7BC,SAA8B,EAC9BC,GAAW,EACXC,MAA6B,EACpB;EACT,SAAS;;EACT,MAAM;IAAEC,aAAa;IAAEC,cAAc;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGN,SAAS;EAEtE,MAAMO,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACR,GAAG,GAAGE,aAAa,EAAE,EAAE,CAAC;EACnD,MAAMO,UAAU,GACdF,IAAI,CAACG,GAAG,CAACN,OAAO,GAAGH,MAAM,CAACU,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGJ,IAAI,CAACG,GAAG,CAACN,OAAO,GAAGH,MAAM,CAACU,KAAK,CAAC,CAAC,CAAC,CAAC,GACrE,CAAC,GACD,CAAC;EAEP,IAAIC,UAAU,GAAG,CAAC;EAClB,IAAIR,OAAO,GAAGH,MAAM,CAACU,KAAK,CAAC,CAAC,CAAC,IAAIP,OAAO,GAAGH,MAAM,CAACU,KAAK,CAAC,CAAC,CAAC,EAAE;IAC1DC,UAAU,GAAGR,OAAO,GAAGH,MAAM,CAACU,KAAK,CAACF,UAAU,CAAC;EACjD;EAEA,MAAMI,CAAC,GACLR,QAAQ,GACNE,IAAI,CAACO,GAAG,CACN,EAAE,CAAC,GAAGb,MAAM,CAACc,YAAY,CAAC,IAAIf,GAAG,GAAGG,cAAc,CAAC,GAAGR,YACxD,CAAC,GACHiB,UAAU,GAAGX,MAAM,CAACe,gBAAgB;EAEtC,IAAIT,IAAI,CAACG,GAAG,CAACE,UAAU,CAAC,GAAGf,cAAc,EAAE;IACzCE,SAAS,CAACkB,YAAY,GAAG,IAAI;EAC/B,CAAC,MAAM,IAAIlB,SAAS,CAACkB,YAAY,EAAE;IACjClB,SAAS,CAACK,OAAO,GAAGH,MAAM,CAACU,KAAK,CAACF,UAAU,CAAC;IAC5C,OAAO,IAAI;EACb,CAAC,MAAM,IAAIF,IAAI,CAACG,GAAG,CAACG,CAAC,CAAC,GAAGjB,YAAY,EAAE;IACrC,OAAO,IAAI;EACb;EAEAG,SAAS,CAACK,OAAO,GAAGA,OAAO,GAAIS,CAAC,GAAGZ,MAAM,CAACiB,cAAc,GAAGZ,SAAS,GAAI,IAAI;EAC5EP,SAAS,CAACM,QAAQ,GAAGQ,CAAC;EACtBd,SAAS,CAACG,aAAa,GAAGF,GAAG;EAC7B,OAAO,KAAK;AACd","ignoreList":[]}
1
+ {"version":3,"names":["SLOPE_FACTOR","VELOCITY_EPS","DERIVATIVE_EPS","rubberBandDecay","animation","now","config","lastTimestamp","startTimestamp","current","velocity","deltaTime","Math","min","max","clampIndex","abs","clamp","derivative","v","exp","deceleration","rubberBandFactor","springActive","velocityFactor"],"sourceRoot":"../../../../src","sources":["animation/decay/rubberBandDecay.ts"],"mappings":"AAAA,YAAY;;AAEZ,SAASA,YAAY,EAAEC,YAAY,QAAQ,SAAS;AAEpD,MAAMC,cAAc,GAAG,GAAG;AAE1B,OAAO,SAASC,eAAeA,CAC7BC,SAA8B,EAC9BC,GAAW,EACXC,MAA6B,EACpB;EACT,SAAS;;EACT,MAAM;IAAEC,aAAa;IAAEC,cAAc;IAAEC,OAAO;IAAEC;EAAS,CAAC,GAAGN,SAAS;EAEtE,MAAMO,SAAS,GAAGC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,GAAG,CAACT,GAAG,GAAGE,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;EAChE,MAAMQ,UAAU,GACdH,IAAI,CAACI,GAAG,CAACP,OAAO,GAAGH,MAAM,CAACW,KAAK,CAAC,CAAC,CAAC,CAAC,GAAGL,IAAI,CAACI,GAAG,CAACP,OAAO,GAAGH,MAAM,CAACW,KAAK,CAAC,CAAC,CAAC,CAAC,GACrE,CAAC,GACD,CAAC;EAEP,IAAIC,UAAU,GAAG,CAAC;EAClB,IAAIT,OAAO,GAAGH,MAAM,CAACW,KAAK,CAAC,CAAC,CAAC,IAAIR,OAAO,GAAGH,MAAM,CAACW,KAAK,CAAC,CAAC,CAAC,EAAE;IAC1DC,UAAU,GAAGT,OAAO,GAAGH,MAAM,CAACW,KAAK,CAACF,UAAU,CAAC;EACjD;EAEA,MAAMI,CAAC,GACLT,QAAQ,GACNE,IAAI,CAACQ,GAAG,CACN,EAAE,CAAC,GAAGd,MAAM,CAACe,YAAY,CAAC,IAAIhB,GAAG,GAAGG,cAAc,CAAC,GAAGR,YACxD,CAAC,GACHkB,UAAU,GAAGZ,MAAM,CAACgB,gBAAgB;EAEtC,IAAIV,IAAI,CAACI,GAAG,CAACE,UAAU,CAAC,GAAGhB,cAAc,EAAE;IACzCE,SAAS,CAACmB,YAAY,GAAG,IAAI;EAC/B,CAAC,MAAM,IAAInB,SAAS,CAACmB,YAAY,EAAE;IACjCnB,SAAS,CAACK,OAAO,GAAGH,MAAM,CAACW,KAAK,CAACF,UAAU,CAAC;IAC5C,OAAO,IAAI;EACb,CAAC,MAAM,IAAIH,IAAI,CAACI,GAAG,CAACG,CAAC,CAAC,GAAGlB,YAAY,EAAE;IACrC,OAAO,IAAI;EACb;EAEAG,SAAS,CAACK,OAAO,GAAGA,OAAO,GAAIU,CAAC,GAAGb,MAAM,CAACkB,cAAc,GAAGb,SAAS,GAAI,IAAI;EAC5EP,SAAS,CAACM,QAAQ,GAAGS,CAAC;EACtBf,SAAS,CAACG,aAAa,GAAGF,GAAG;EAC7B,OAAO,KAAK;AACd","ignoreList":[]}
@@ -62,7 +62,7 @@ export const withSpring = (toValue, userConfig, callback) => {
62
62
  lastTimestamp,
63
63
  velocity
64
64
  } = animation;
65
- const deltaTime = Math.min(now - lastTimestamp, 64);
65
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
66
66
  animation.lastTimestamp = now;
67
67
  const t = deltaTime / 1000;
68
68
  const v0 = velocity;
@@ -117,6 +117,13 @@ export const withSpring = (toValue, userConfig, callback) => {
117
117
  } else {
118
118
  animation.velocity = config.velocity || 0;
119
119
  }
120
+
121
+ // Clip velocity that would drive the first frame away from the new target.
122
+ // Inertia is only preserved when it already points toward toValue.
123
+ const toValueNum = Number(animation.toValue);
124
+ if (toValueNum > value && animation.velocity < 0 || toValueNum < value && animation.velocity > 0) {
125
+ animation.velocity = 0;
126
+ }
120
127
  if (triggeredTwice) {
121
128
  animation.zeta = previousAnimation?.zeta || 0;
122
129
  animation.omega0 = previousAnimation?.omega0 || 0;
@@ -1 +1 @@
1
- {"version":3,"names":["defineAnimation","getReduceMotionForAnimation","GentleSpringConfig","GentleSpringConfigWithDuration","calculateNewStiffnessToMatchDuration","checkIfConfigIsValid","criticallyDampedSpringCalculations","getEnergy","initialCalculations","isAnimationTerminatingCalculation","safeMergeConfigs","scaleZetaToMatchClamps","underDampedSpringCalculations","withSpring","toValue","userConfig","callback","defaultConfig","overshootClamping","energyThreshold","velocity","reduceMotion","undefined","clamp","config","useDuration","duration","dampingRatio","skipAnimation","springOnFrame","animation","now","current","lastTimestamp","deltaTime","Math","min","t","v0","x0","zeta","omega0","omega1","position","newPosition","newVelocity","isTriggeredTwice","previousAnimation","startTimestamp","onStart","value","stiffness","triggeredTwice","startValue","actualDuration","initialEnergy","mass","onFrame"],"sourceRoot":"../../../../src","sources":["animation/spring/spring.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["defineAnimation","getReduceMotionForAnimation","GentleSpringConfig","GentleSpringConfigWithDuration","calculateNewStiffnessToMatchDuration","checkIfConfigIsValid","criticallyDampedSpringCalculations","getEnergy","initialCalculations","isAnimationTerminatingCalculation","safeMergeConfigs","scaleZetaToMatchClamps","underDampedSpringCalculations","withSpring","toValue","userConfig","callback","defaultConfig","overshootClamping","energyThreshold","velocity","reduceMotion","undefined","clamp","config","useDuration","duration","dampingRatio","skipAnimation","springOnFrame","animation","now","current","lastTimestamp","deltaTime","Math","min","max","t","v0","x0","zeta","omega0","omega1","position","newPosition","newVelocity","isTriggeredTwice","previousAnimation","startTimestamp","onStart","value","stiffness","triggeredTwice","startValue","toValueNum","Number","actualDuration","initialEnergy","mass","onFrame"],"sourceRoot":"../../../../src","sources":["animation/spring/spring.ts"],"mappings":"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","ignoreList":[]}
@@ -83,7 +83,7 @@ export function initialCalculations(stiffness = 0, config) {
83
83
  * https://courses.lumenlearning.com/suny-osuniversityphysics/chapter/15-5-damped-oscillations/
84
84
  */
85
85
  const omega0 = Math.sqrt(stiffness / m);
86
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);
86
+ const omega1 = zeta < 1 ? omega0 * Math.sqrt(1 - zeta ** 2) : 0;
87
87
  return {
88
88
  zeta,
89
89
  omega0,
@@ -97,7 +97,7 @@ export function initialCalculations(stiffness = 0, config) {
97
97
  } = config;
98
98
  const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio
99
99
  const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)
100
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay
100
+ const omega1 = zeta < 1 ? omega0 * Math.sqrt(1 - zeta ** 2) : 0; // exponential decay
101
101
 
102
102
  return {
103
103
  zeta,
@@ -1 +1 @@
1
- {"version":3,"names":["logger","checkIfConfigIsValid","config","errorMessage","forEach","prop","value","duration","clamp","min","max","warn","safeMergeConfigs","defaults","userConfig","filtered","Object","fromEntries","entries","filter","v","undefined","bisectRoot","func","precision","maxIterations","direction","idx","current","Math","abs","initialCalculations","stiffness","skipAnimation","zeta","omega0","omega1","useDuration","mass","m","dampingRatio","sqrt","damping","c","k","scaleZetaToMatchClamps","animation","toValue","startValue","toValueNum","Number","firstBound","secondBound","relativeExtremum1","relativeExtremum2","newZeta1","log","PI","newZeta2","zetaSatisfyingClamp","x","getEnergy","displacement","velocity","potentialEnergy","kineticEnergy","calculateNewStiffnessToMatchDuration","x0","v0","energyThreshold","threshold","targetDuration","energyDiffForStiffness","perceptualCoefficient","MILLISECONDS_IN_SECOND","settlingDuration","xtk","exp","vtk","e0","etk","energyFraction","EPSILON","criticallyDampedSpringCalculations","precalculatedValues","t","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","position","underDampedSpringCalculations","sin1","sin","cos1","cos","underDampedEnvelope","underDampedFrag1","underDampedPosition","underDampedVelocity","isAnimationTerminatingCalculation","initialEnergy","overshootClamping","leftBound","rightBound","currentEnergy"],"sourceRoot":"../../../../src","sources":["animation/spring/springUtils.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["logger","checkIfConfigIsValid","config","errorMessage","forEach","prop","value","duration","clamp","min","max","warn","safeMergeConfigs","defaults","userConfig","filtered","Object","fromEntries","entries","filter","v","undefined","bisectRoot","func","precision","maxIterations","direction","idx","current","Math","abs","initialCalculations","stiffness","skipAnimation","zeta","omega0","omega1","useDuration","mass","m","dampingRatio","sqrt","damping","c","k","scaleZetaToMatchClamps","animation","toValue","startValue","toValueNum","Number","firstBound","secondBound","relativeExtremum1","relativeExtremum2","newZeta1","log","PI","newZeta2","zetaSatisfyingClamp","x","getEnergy","displacement","velocity","potentialEnergy","kineticEnergy","calculateNewStiffnessToMatchDuration","x0","v0","energyThreshold","threshold","targetDuration","energyDiffForStiffness","perceptualCoefficient","MILLISECONDS_IN_SECOND","settlingDuration","xtk","exp","vtk","e0","etk","energyFraction","EPSILON","criticallyDampedSpringCalculations","precalculatedValues","t","criticallyDampedEnvelope","criticallyDampedPosition","criticallyDampedVelocity","position","underDampedSpringCalculations","sin1","sin","cos1","cos","underDampedEnvelope","underDampedFrag1","underDampedPosition","underDampedVelocity","isAnimationTerminatingCalculation","initialEnergy","overshootClamping","leftBound","rightBound","currentEnergy"],"sourceRoot":"../../../../src","sources":["animation/spring/springUtils.ts"],"mappings":"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","ignoreList":[]}
@@ -45,7 +45,7 @@ function setPath(obj, path, value) {
45
45
  }
46
46
  export function withStyleAnimation(
47
47
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
- styleAnimations) {
48
+ styleAnimations, callback) {
49
49
  'worklet';
50
50
 
51
51
  return defineAnimation({}, () => {
@@ -148,7 +148,7 @@ styleAnimations) {
148
148
  }
149
149
  }
150
150
  };
151
- const callback = finished => {
151
+ const styleAnimationCallback = finished => {
152
152
  if (!finished) {
153
153
  const animationsToCheck = [styleAnimations];
154
154
  while (animationsToCheck.length > 0) {
@@ -169,6 +169,7 @@ styleAnimations) {
169
169
  }
170
170
  }
171
171
  }
172
+ callback?.(finished);
172
173
  };
173
174
  return {
174
175
  isHigherOrder: true,
@@ -176,7 +177,7 @@ styleAnimations) {
176
177
  onStart,
177
178
  current: {},
178
179
  styleAnimations,
179
- callback
180
+ callback: styleAnimationCallback
180
181
  };
181
182
  });
182
183
  }
@@ -1 +1 @@
1
- {"version":3,"names":["ColorProperties","logger","processColor","withTiming","defineAnimation","isValidLayoutAnimationProp","resolvePath","obj","path","keys","Array","isArray","reduce","acc","current","undefined","setPath","value","currObj","i","length","withStyleAnimation","styleAnimations","onFrame","animation","now","stillGoing","entriesToCheck","currentEntry","pop","index","push","concat","key","Object","currentStyleAnimation","finished","callback","isAnimatingColorProp","includes","onStart","previousAnimation","prevAnimation","prevVal","__DEV__","warn","join","propName","trim","currentAnimation","duration","animationsToCheck","element","values","isHigherOrder"],"sourceRoot":"../../../src","sources":["animation/styleAnimation.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["ColorProperties","logger","processColor","withTiming","defineAnimation","isValidLayoutAnimationProp","resolvePath","obj","path","keys","Array","isArray","reduce","acc","current","undefined","setPath","value","currObj","i","length","withStyleAnimation","styleAnimations","callback","onFrame","animation","now","stillGoing","entriesToCheck","currentEntry","pop","index","push","concat","key","Object","currentStyleAnimation","finished","isAnimatingColorProp","includes","onStart","previousAnimation","prevAnimation","prevVal","__DEV__","warn","join","propName","trim","currentAnimation","duration","styleAnimationCallback","animationsToCheck","element","values","isHigherOrder"],"sourceRoot":"../../../src","sources":["animation/styleAnimation.ts"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  import { runOnUISync } from 'react-native-worklets';
4
- import { withStyleAnimation } from '../animation';
4
+ import { cancelAnimation, withStyleAnimation } from '../animation';
5
5
  import { SHOULD_BE_USE_WEB } from '../common';
6
6
  import { LayoutAnimationType } from '../commonTypes';
7
7
  import { makeMutableUI } from '../mutables';
@@ -52,8 +52,7 @@ function createLayoutAnimationManager() {
52
52
  stopObservingProgress(tag, value);
53
53
  value._value = style.initialValues;
54
54
  }
55
- const animation = withStyleAnimation(currentAnimation);
56
- animation.callback = finished => {
55
+ const animation = withStyleAnimation(currentAnimation, finished => {
57
56
  if (finished) {
58
57
  currentAnimationForTag.delete(tag);
59
58
  mutableValuesForTag.delete(tag);
@@ -61,9 +60,9 @@ function createLayoutAnimationManager() {
61
60
  stopObservingProgress(tag, value, shouldRemoveView);
62
61
  }
63
62
  if (style.callback) {
64
- style.callback(finished === undefined ? false : finished);
63
+ style.callback(finished);
65
64
  }
66
- };
65
+ });
67
66
  startObservingProgress(tag, value);
68
67
  value.value = animation;
69
68
  },
@@ -72,7 +71,11 @@ function createLayoutAnimationManager() {
72
71
  if (!value) {
73
72
  return;
74
73
  }
75
- stopObservingProgress(tag, value);
74
+ // native already made its cleanup, so we just do cleanup here on JS side
75
+ value.removeListener(tag + TAG_OFFSET);
76
+ cancelAnimation(value);
77
+ currentAnimationForTag.delete(tag);
78
+ mutableValuesForTag.delete(tag);
76
79
  }
77
80
  };
78
81
  }
@@ -1 +1 @@
1
- {"version":3,"names":["runOnUISync","withStyleAnimation","SHOULD_BE_USE_WEB","LayoutAnimationType","makeMutableUI","TAG_OFFSET","startObservingProgress","tag","sharedValue","addListener","global","_notifyAboutProgress","value","stopObservingProgress","removeView","removeListener","_notifyAboutEnd","createLayoutAnimationManager","currentAnimationForTag","Map","mutableValuesForTag","start","type","yogaValues","config","style","currentAnimation","animations","previousAnimation","get","set","undefined","initialValues","_value","animation","callback","finished","delete","shouldRemoveView","EXITING","stop","LayoutAnimationsManager"],"sourceRoot":"../../../src","sources":["layoutReanimation/animationsManager.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["runOnUISync","cancelAnimation","withStyleAnimation","SHOULD_BE_USE_WEB","LayoutAnimationType","makeMutableUI","TAG_OFFSET","startObservingProgress","tag","sharedValue","addListener","global","_notifyAboutProgress","value","stopObservingProgress","removeView","removeListener","_notifyAboutEnd","createLayoutAnimationManager","currentAnimationForTag","Map","mutableValuesForTag","start","type","yogaValues","config","style","currentAnimation","animations","previousAnimation","get","set","undefined","initialValues","_value","animation","finished","delete","shouldRemoveView","EXITING","callback","stop","LayoutAnimationsManager"],"sourceRoot":"../../../src","sources":["layoutReanimation/animationsManager.ts"],"mappings":"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","ignoreList":[]}
@@ -5,5 +5,5 @@
5
5
  * version used to build the native part of the library in runtime. Remember to
6
6
  * keep this in sync with the version declared in `package.json`
7
7
  */
8
- export const jsVersion = '4.3.2';
8
+ export const jsVersion = '4.3.4';
9
9
  //# sourceMappingURL=jsVersion.js.map
@@ -1,6 +1,5 @@
1
1
  import type { IAnimatedComponentInternal } from './createAnimatedComponent/commonTypes';
2
2
  export declare const PropsRegistryGarbageCollector: {
3
- viewsCount: number;
4
3
  viewsMap: Map<number, IAnimatedComponentInternal>;
5
4
  intervalId: NodeJS.Timeout | null;
6
5
  registerView(viewTag: number, component: IAnimatedComponentInternal): void;
@@ -1 +1 @@
1
- {"version":3,"file":"PropsRegistryGarbageCollector.d.ts","sourceRoot":"","sources":["../../src/PropsRegistryGarbageCollector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAKxF,eAAO,MAAM,6BAA6B;;;gBAGpB,MAAM,CAAC,OAAO,GAAG,IAAI;0BAEnB,MAAM,aAAa,0BAA0B;4BAgB3C,MAAM;;;;CAiC/B,CAAC"}
1
+ {"version":3,"file":"PropsRegistryGarbageCollector.d.ts","sourceRoot":"","sources":["../../src/PropsRegistryGarbageCollector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAC;AAKxF,eAAO,MAAM,6BAA6B;;gBAEpB,MAAM,CAAC,OAAO,GAAG,IAAI;0BAEnB,MAAM,aAAa,0BAA0B;4BAe3C,MAAM;;;;CAgC/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../../../../src/animation/spring/spring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAEf,iBAAiB,EAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwBpD,KAAK,cAAc,GAAG,CAAC,CAAC,SAAS,eAAe,EAC9C,OAAO,EAAE,CAAC,EACV,UAAU,CAAC,EAAE,YAAY,EACzB,QAAQ,CAAC,EAAE,iBAAiB,KACzB,CAAC,CAAC;AAEP;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU,EAsMjB,cAAc,CAAC"}
1
+ {"version":3,"file":"spring.d.ts","sourceRoot":"","sources":["../../../../src/animation/spring/spring.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAEf,iBAAiB,EAElB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAwBpD,KAAK,cAAc,GAAG,CAAC,CAAC,SAAS,eAAe,EAC9C,OAAO,EAAE,CAAC,EACV,UAAU,CAAC,EAAE,YAAY,EACzB,QAAQ,CAAC,EAAE,iBAAiB,KACzB,CAAC,CAAC;AAEP;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU,EAgNjB,cAAc,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import type { AnimatedStyle } from '../commonTypes';
2
2
  import type { StyleLayoutAnimation } from './commonTypes';
3
- export declare function withStyleAnimation(styleAnimations: AnimatedStyle<any>): StyleLayoutAnimation;
3
+ export declare function withStyleAnimation(styleAnimations: AnimatedStyle<any>, callback?: (finished: boolean) => void): StyleLayoutAnimation;
4
4
  //# sourceMappingURL=styleAnimation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"styleAnimation.d.ts","sourceRoot":"","sources":["../../../src/animation/styleAnimation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EAMd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA6D1D,wBAAgB,kBAAkB,CAEhC,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,GAClC,oBAAoB,CA4MtB"}
1
+ {"version":3,"file":"styleAnimation.d.ts","sourceRoot":"","sources":["../../../src/animation/styleAnimation.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EAMd,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AA6D1D,wBAAgB,kBAAkB,CAEhC,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,EACnC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,GACrC,oBAAoB,CA6MtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"animationsManager.d.ts","sourceRoot":"","sources":["../../../src/layoutReanimation/animationsManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,4BAA4B,EAG7B,MAAM,gBAAgB,CAAC;AA0BxB,iBAAS,4BAA4B,IAAI;IACvC,KAAK,EAAE,4BAA4B,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,CA6DA;AASD,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAC9C,OAAO,4BAA4B,CACpC,CAAC"}
1
+ {"version":3,"file":"animationsManager.d.ts","sourceRoot":"","sources":["../../../src/layoutReanimation/animationsManager.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,4BAA4B,EAG7B,MAAM,gBAAgB,CAAC;AA0BxB,iBAAS,4BAA4B,IAAI;IACvC,KAAK,EAAE,4BAA4B,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B,CA+DA;AASD,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAC9C,OAAO,4BAA4B,CACpC,CAAC"}
@@ -3,5 +3,5 @@
3
3
  * version used to build the native part of the library in runtime. Remember to
4
4
  * keep this in sync with the version declared in `package.json`
5
5
  */
6
- export declare const jsVersion = "4.3.2";
6
+ export declare const jsVersion = "4.3.4";
7
7
  //# sourceMappingURL=jsVersion.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-reanimated",
3
- "version": "4.3.2",
3
+ "version": "4.3.4",
4
4
  "description": "More powerful alternative to Animated library for React Native.",
5
5
  "keywords": [
6
6
  "react-native",
@@ -136,7 +136,7 @@
136
136
  "react-native-builder-bob": "0.40.13",
137
137
  "react-native-svg": "patch:react-native-svg@npm%3A15.15.3#~/.yarn/patches/react-native-svg-npm-15.15.3-0699a4dc13.patch",
138
138
  "react-native-web": "0.21.1",
139
- "react-native-worklets": "0.8.1",
139
+ "react-native-worklets": "0.8.3",
140
140
  "react-test-renderer": "19.2.3",
141
141
  "typescript": "5.8.3"
142
142
  },
@@ -11,7 +11,6 @@ import { ReanimatedModule } from './ReanimatedModule';
11
11
  const FLUSH_INTERVAL_MS = 500;
12
12
 
13
13
  export const PropsRegistryGarbageCollector = {
14
- viewsCount: 0,
15
14
  viewsMap: new Map<number, IAnimatedComponentInternal>(),
16
15
  intervalId: null as NodeJS.Timeout | null,
17
16
 
@@ -25,16 +24,14 @@ export const PropsRegistryGarbageCollector = {
25
24
  return;
26
25
  }
27
26
  this.viewsMap.set(viewTag, component);
28
- this.viewsCount++;
29
- if (this.viewsCount === 1) {
27
+ if (this.viewsMap.size === 1) {
30
28
  this.registerInterval();
31
29
  }
32
30
  },
33
31
 
34
32
  unregisterView(viewTag: number) {
35
- this.viewsMap.delete(viewTag);
36
- this.viewsCount--;
37
- if (this.viewsCount === 0) {
33
+ const deleted = this.viewsMap.delete(viewTag);
34
+ if (deleted && this.viewsMap.size === 0) {
38
35
  this.unregisterInterval();
39
36
  }
40
37
  },
@@ -11,7 +11,7 @@ export function rigidDecay(
11
11
  const { lastTimestamp, startTimestamp, initialVelocity, current, velocity } =
12
12
  animation;
13
13
 
14
- const deltaTime = Math.min(now - lastTimestamp, 64);
14
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
15
15
  const v =
16
16
  velocity *
17
17
  Math.exp(
@@ -12,7 +12,7 @@ export function rubberBandDecay(
12
12
  'worklet';
13
13
  const { lastTimestamp, startTimestamp, current, velocity } = animation;
14
14
 
15
- const deltaTime = Math.min(now - lastTimestamp, 64);
15
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
16
16
  const clampIndex =
17
17
  Math.abs(current - config.clamp[0]) < Math.abs(current - config.clamp[1])
18
18
  ? 0
@@ -103,7 +103,7 @@ export const withSpring = ((
103
103
  }
104
104
  const { lastTimestamp, velocity } = animation;
105
105
 
106
- const deltaTime = Math.min(now - lastTimestamp, 64);
106
+ const deltaTime = Math.min(Math.max(now - lastTimestamp, 0), 64);
107
107
  animation.lastTimestamp = now;
108
108
 
109
109
  const t = deltaTime / 1000;
@@ -186,6 +186,16 @@ export const withSpring = ((
186
186
  animation.velocity = config.velocity || 0;
187
187
  }
188
188
 
189
+ // Clip velocity that would drive the first frame away from the new target.
190
+ // Inertia is only preserved when it already points toward toValue.
191
+ const toValueNum = Number(animation.toValue);
192
+ if (
193
+ (toValueNum > value && animation.velocity < 0) ||
194
+ (toValueNum < value && animation.velocity > 0)
195
+ ) {
196
+ animation.velocity = 0;
197
+ }
198
+
189
199
  if (triggeredTwice) {
190
200
  animation.zeta = previousAnimation?.zeta || 0;
191
201
  animation.omega0 = previousAnimation?.omega0 || 0;
@@ -138,7 +138,7 @@ export function initialCalculations(
138
138
  * https://courses.lumenlearning.com/suny-osuniversityphysics/chapter/15-5-damped-oscillations/
139
139
  */
140
140
  const omega0 = Math.sqrt(stiffness / m);
141
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2);
141
+ const omega1 = zeta < 1 ? omega0 * Math.sqrt(1 - zeta ** 2) : 0;
142
142
 
143
143
  return { zeta, omega0, omega1 };
144
144
  } else {
@@ -146,7 +146,7 @@ export function initialCalculations(
146
146
 
147
147
  const zeta = c / (2 * Math.sqrt(k * m)); // damping ratio
148
148
  const omega0 = Math.sqrt(k / m); // undamped angular frequency of the oscillator (rad/ms)
149
- const omega1 = omega0 * Math.sqrt(1 - zeta ** 2); // exponential decay
149
+ const omega1 = zeta < 1 ? omega0 * Math.sqrt(1 - zeta ** 2) : 0; // exponential decay
150
150
 
151
151
  return { zeta, omega0, omega1 };
152
152
  }
@@ -73,7 +73,8 @@ interface NestedObjectEntry<T> {
73
73
 
74
74
  export function withStyleAnimation(
75
75
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
76
- styleAnimations: AnimatedStyle<any>
76
+ styleAnimations: AnimatedStyle<any>,
77
+ callback?: (finished: boolean) => void
77
78
  ): StyleLayoutAnimation {
78
79
  'worklet';
79
80
  return defineAnimation<StyleLayoutAnimation>({}, () => {
@@ -236,7 +237,7 @@ export function withStyleAnimation(
236
237
  }
237
238
  };
238
239
 
239
- const callback = (finished: boolean): void => {
240
+ const styleAnimationCallback = (finished: boolean): void => {
240
241
  if (!finished) {
241
242
  const animationsToCheck: NestedObjectValues<AnimationObject>[] = [
242
243
  styleAnimations,
@@ -267,6 +268,7 @@ export function withStyleAnimation(
267
268
  }
268
269
  }
269
270
  }
271
+ callback?.(finished);
270
272
  };
271
273
 
272
274
  return {
@@ -275,7 +277,7 @@ export function withStyleAnimation(
275
277
  onStart,
276
278
  current: {},
277
279
  styleAnimations,
278
- callback,
280
+ callback: styleAnimationCallback,
279
281
  } as StyleLayoutAnimation;
280
282
  });
281
283
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { runOnUISync } from 'react-native-worklets';
4
4
 
5
- import { withStyleAnimation } from '../animation';
5
+ import { cancelAnimation, withStyleAnimation } from '../animation';
6
6
  import { SHOULD_BE_USE_WEB } from '../common';
7
7
  import type {
8
8
  LayoutAnimation,
@@ -74,9 +74,7 @@ function createLayoutAnimationManager(): {
74
74
  value._value = style.initialValues;
75
75
  }
76
76
 
77
- const animation = withStyleAnimation(currentAnimation);
78
-
79
- animation.callback = (finished?: boolean) => {
77
+ const animation = withStyleAnimation(currentAnimation, (finished) => {
80
78
  if (finished) {
81
79
  currentAnimationForTag.delete(tag);
82
80
  mutableValuesForTag.delete(tag);
@@ -84,9 +82,9 @@ function createLayoutAnimationManager(): {
84
82
  stopObservingProgress(tag, value, shouldRemoveView);
85
83
  }
86
84
  if (style.callback) {
87
- style.callback(finished === undefined ? false : finished);
85
+ style.callback(finished);
88
86
  }
89
- };
87
+ });
90
88
 
91
89
  startObservingProgress(tag, value);
92
90
  value.value = animation;
@@ -96,7 +94,11 @@ function createLayoutAnimationManager(): {
96
94
  if (!value) {
97
95
  return;
98
96
  }
99
- stopObservingProgress(tag, value);
97
+ // native already made its cleanup, so we just do cleanup here on JS side
98
+ value.removeListener(tag + TAG_OFFSET);
99
+ cancelAnimation(value);
100
+ currentAnimationForTag.delete(tag);
101
+ mutableValuesForTag.delete(tag);
100
102
  },
101
103
  };
102
104
  }
@@ -4,4 +4,4 @@
4
4
  * version used to build the native part of the library in runtime. Remember to
5
5
  * keep this in sync with the version declared in `package.json`
6
6
  */
7
- export const jsVersion = '4.3.2';
7
+ export const jsVersion = '4.3.4';