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.
- package/Common/cpp/reanimated/Fabric/ShadowTreeCloner.cpp +1 -1
- package/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.cpp +48 -23
- package/Common/cpp/reanimated/Fabric/updates/AnimatedPropsRegistry.h +13 -6
- package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.cpp +84 -3
- package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Experimental.h +3 -0
- package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.cpp +40 -0
- package/Common/cpp/reanimated/LayoutAnimations/LayoutAnimationsProxy_Legacy.h +4 -0
- package/Common/cpp/reanimated/NativeModules/ReanimatedModuleProxy.cpp +16 -6
- package/lib/module/PropsRegistryGarbageCollector.js +3 -6
- package/lib/module/PropsRegistryGarbageCollector.js.map +1 -1
- package/lib/module/animation/decay/rigidDecay.js +1 -1
- package/lib/module/animation/decay/rigidDecay.js.map +1 -1
- package/lib/module/animation/decay/rubberBandDecay.js +1 -1
- package/lib/module/animation/decay/rubberBandDecay.js.map +1 -1
- package/lib/module/animation/spring/spring.js +8 -1
- package/lib/module/animation/spring/spring.js.map +1 -1
- package/lib/module/animation/spring/springUtils.js +2 -2
- package/lib/module/animation/spring/springUtils.js.map +1 -1
- package/lib/module/animation/styleAnimation.js +4 -3
- package/lib/module/animation/styleAnimation.js.map +1 -1
- package/lib/module/layoutReanimation/animationsManager.js +9 -6
- package/lib/module/layoutReanimation/animationsManager.js.map +1 -1
- package/lib/module/platform-specific/jsVersion.js +1 -1
- package/lib/typescript/PropsRegistryGarbageCollector.d.ts +0 -1
- package/lib/typescript/PropsRegistryGarbageCollector.d.ts.map +1 -1
- package/lib/typescript/animation/spring/spring.d.ts.map +1 -1
- package/lib/typescript/animation/styleAnimation.d.ts +1 -1
- package/lib/typescript/animation/styleAnimation.d.ts.map +1 -1
- package/lib/typescript/layoutReanimation/animationsManager.d.ts.map +1 -1
- package/lib/typescript/platform-specific/jsVersion.d.ts +1 -1
- package/package.json +2 -2
- package/src/PropsRegistryGarbageCollector.ts +3 -6
- package/src/animation/decay/rigidDecay.ts +1 -1
- package/src/animation/decay/rubberBandDecay.ts +1 -1
- package/src/animation/spring/spring.ts +11 -1
- package/src/animation/spring/springUtils.ts +2 -2
- package/src/animation/styleAnimation.ts +5 -3
- package/src/layoutReanimation/animationsManager.ts +9 -7
- 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()
|
|
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
|
-
|
|
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::
|
|
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 (
|
|
43
|
-
auto
|
|
44
|
-
|
|
45
|
-
|
|
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 <
|
|
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
|
-
///
|
|
19
|
-
|
|
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
|
|
302
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
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","
|
|
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,
|
|
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,
|
|
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":"AAAA,YAAY;;AAOZ,SAASA,eAAe,EAAEC,2BAA2B,QAAQ,SAAS;AAEtE,SACEC,kBAAkB,EAClBC,8BAA8B,QACzB,iBAAiB;AAOxB,SACEC,oCAAoC,EACpCC,oBAAoB,EACpBC,kCAAkC,EAClCC,SAAS,EACTC,mBAAmB,EACnBC,iCAAiC,EACjCC,gBAAgB,EAChBC,sBAAsB,EACtBC,6BAA6B,QACxB,eAAe;;AAEtB;;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,GAAIA,CACzBC,OAAwB,EACxBC,UAAyB,EACzBC,QAA4B,KACG;EAC/B,SAAS;;EAET,OAAOhB,eAAe,CAAkBc,OAAO,EAAE,MAAM;IACrD,SAAS;;IACT,MAAMG,aAAkC,GAAG;MACzC,GAAGf,kBAAkB;MACrB,GAAGC,8BAA8B;MACjCe,iBAAiB,EAAE,KAAK;MACxBC,eAAe,EAAE,IAAI;MACrBC,QAAQ,EAAE,CAAC;MACXC,YAAY,EAAEC,SAAS;MACvBC,KAAK,EAAED;IACT,CAAU;IAEV,MAAME,MAA+C,GAAGd,gBAAgB,CAGtE;MACE,GAAGO,aAAa;MAChBQ,WAAW,EAAE,CAAC,EAAEV,UAAU,EAAEW,QAAQ,IAAIX,UAAU,EAAEY,YAAY,CAAC;MACjEC,aAAa,EAAE;IACjB,CAAC,EACDb,UACF,CAAC;IAEDS,MAAM,CAACI,aAAa,GAAG,CAACvB,oBAAoB,CAACmB,MAAM,CAAC;IAEpD,IAAIA,MAAM,CAACE,QAAQ,KAAK,CAAC,EAAE;MACzBF,MAAM,CAACI,aAAa,GAAG,IAAI;IAC7B;IAEA,SAASC,aAAaA,CACpBC,SAA+B,EAC/BC,GAAc,EACL;MACT;MACA,MAAM;QAAEjB,OAAO;QAAEkB;MAAQ,CAAC,GAAGF,SAAS;MAEtC,IAAIN,MAAM,CAACI,aAAa,EAAE;QACxBE,SAAS,CAACE,OAAO,GAAGlB,OAAO;QAC3BgB,SAAS,CAACG,aAAa,GAAG,CAAC;QAC3B,OAAO,IAAI;MACb;MACA,MAAM;QAAEA,aAAa;QAAEb;MAAS,CAAC,GAAGU,SAAS;MAE7C,MAAMI,SAAS,GAAGC,IAAI,CAACC,GAAG,
|
|
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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
|
|
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":"AAAA,YAAY;;AACZ,SAASA,MAAM,QAAQ,cAAc;;AAIrC;AACA;;AA+BA,OAAO,SAASC,oBAAoBA,CAACC,MAA2B,EAAW;EACzE,SAAS;;EACT,IAAIC,YAAY,GAAG,EAAE;EAEnB,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,iBAAiB,CAAC,CACnEC,OAAO,CAAEC,IAAI,IAAK;IAClB,MAAMC,KAAK,GAAGJ,MAAM,CAACG,IAAI,CAAC;IAC1B,IAAIC,KAAK,IAAI,CAAC,EAAE;MACdH,YAAY,IAAI,KAAKE,IAAI,qCAAqCC,KAAK,EAAE;IACvE;EACF,CAAC,CAAC;EAEF,IAAIJ,MAAM,CAACK,QAAQ,GAAG,CAAC,EAAE;IACvBJ,YAAY,IAAI,qCAAqCD,MAAM,CAACK,QAAQ,EAAE;EACxE;EAEA,IACEL,MAAM,CAACM,KAAK,EAAEC,GAAG,IACjBP,MAAM,CAACM,KAAK,EAAEE,GAAG,IACjBR,MAAM,CAACM,KAAK,CAACC,GAAG,GAAGP,MAAM,CAACM,KAAK,CAACE,GAAG,EACnC;IACAP,YAAY,IAAI,gEAAgED,MAAM,CAACM,KAAK,CAACC,GAAG,UAAUP,MAAM,CAACM,KAAK,CAACE,GAAG,IAAI;EAChI;EAEA,IAAIP,YAAY,KAAK,EAAE,EAAE;IACvBH,MAAM,CAACW,IAAI,CAAC,uBAAuB,GAAGR,YAAY,CAAC;EACrD;EAEA,OAAOA,YAAY,KAAK,EAAE;AAC5B;AAEA,OAAO,SAASS,gBAAgBA,CAC9BC,QAAiB,EACjBC,UAA6B,EACpB;EACT,SAAS;;EACT,IAAI,CAACA,UAAU,EAAE;IACf,OAAOD,QAAQ;EACjB;EAEA,MAAME,QAAQ,GAAGC,MAAM,CAACC,WAAW,CACjCD,MAAM,CAACE,OAAO,CAACJ,UAAU,CAAC,CAACK,MAAM,CAAC,CAAC,GAAGC,CAAC,CAAC,KAAKA,CAAC,KAAKC,SAAS,CAC9D,CAAqB;EAErB,OAAO;IACL,GAAGR,QAAQ;IACX,GAAGE;EACL,CAAC;AACH;AAEA,SAASO,UAAUA,CAAC;EAClBb,GAAG;EACHC,GAAG;EACHa,IAAI;EACJC,SAAS;EACTC,aAAa,GAAG;AAOlB,CAAC,EAAE;EACD,SAAS;;EACT,MAAMC,SAAS,GAAGH,IAAI,CAACb,GAAG,CAAC,IAAIa,IAAI,CAACd,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EACjD,IAAIkB,GAAG,GAAGF,aAAa;EACvB,IAAIG,OAAO,GAAG,CAAClB,GAAG,GAAGD,GAAG,IAAI,CAAC;EAC7B,OAAOoB,IAAI,CAACC,GAAG,CAACP,IAAI,CAACK,OAAO,CAAC,CAAC,GAAGJ,SAAS,IAAIG,GAAG,GAAG,CAAC,EAAE;IACrDA,GAAG,IAAI,CAAC;IAER,IAAIJ,IAAI,CAACK,OAAO,CAAC,GAAGF,SAAS,GAAG,CAAC,EAAE;MACjCjB,GAAG,GAAGmB,OAAO;IACf,CAAC,MAAM;MACLlB,GAAG,GAAGkB,OAAO;IACf;IACAA,OAAO,GAAG,CAACnB,GAAG,GAAGC,GAAG,IAAI,CAAC;EAC3B;EACA,OAAOkB,OAAO;AAChB;AAEA,OAAO,SAASG,mBAAmBA,CACjCC,SAAS,GAAG,CAAC,EACb9B,MAA+C,EAK/C;EACA,SAAS;;EAET,IAAIA,MAAM,CAAC+B,aAAa,EAAE;IACxB,OAAO;MAAEC,IAAI,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,MAAM,EAAE;IAAE,CAAC;EAC1C;EAEA,IAAIlC,MAAM,CAACmC,WAAW,EAAE;IACtB,MAAM;MAAEC,IAAI,EAAEC,CAAC;MAAEC,YAAY,EAAEN;IAAK,CAAC,GAAGhC,MAAM;;IAE9C;AACJ;AACA;AACA;AACA;IACI,MAAMiC,MAAM,GAAGN,IAAI,CAACY,IAAI,CAACT,SAAS,GAAGO,CAAC,CAAC;IACvC,MAAMH,MAAM,GAAGF,IAAI,GAAG,CAAC,GAAGC,MAAM,GAAGN,IAAI,CAACY,IAAI,CAAC,CAAC,GAAGP,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC;IAE/D,OAAO;MAAEA,IAAI;MAAEC,MAAM;MAAEC;IAAO,CAAC;EACjC,CAAC,MAAM;IACL,MAAM;MAAEM,OAAO,EAAEC,CAAC;MAAEL,IAAI,EAAEC,CAAC;MAAEP,SAAS,EAAEY;IAAE,CAAC,GAAG1C,MAAM;IAEpD,MAAMgC,IAAI,GAAGS,CAAC,IAAI,CAAC,GAAGd,IAAI,CAACY,IAAI,CAACG,CAAC,GAAGL,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,MAAMJ,MAAM,GAAGN,IAAI,CAACY,IAAI,CAACG,CAAC,GAAGL,CAAC,CAAC,CAAC,CAAC;IACjC,MAAMH,MAAM,GAAGF,IAAI,GAAG,CAAC,GAAGC,MAAM,GAAGN,IAAI,CAACY,IAAI,CAAC,CAAC,GAAGP,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;;IAEjE,OAAO;MAAEA,IAAI;MAAEC,MAAM;MAAEC;IAAO,CAAC;EACjC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,sBAAsBA,CACpCC,SAA0B,EAC1BtC,KAAqC,EAC7B;EACR,SAAS;;EACT,MAAM;IAAE0B,IAAI;IAAEa,OAAO;IAAEC;EAAW,CAAC,GAAGF,SAAS;EAC/C,MAAMG,UAAU,GAAGC,MAAM,CAACH,OAAO,CAAC;EAElC,IAAIC,UAAU,KAAK,CAAC,EAAE;IACpB,OAAOd,IAAI;EACb;EAEA,MAAM,CAACiB,UAAU,EAAEC,WAAW,CAAC,GAC7BJ,UAAU,IAAI,CAAC,GAAG,CAACxC,KAAK,CAACC,GAAG,EAAED,KAAK,CAACE,GAAG,CAAC,GAAG,CAACF,KAAK,CAACE,GAAG,EAAEF,KAAK,CAACC,GAAG,CAAC;;EAEnE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEE,MAAM4C,iBAAiB,GACrBD,WAAW,KAAK/B,SAAS,GACrBQ,IAAI,CAACC,GAAG,CAAC,CAACsB,WAAW,GAAGH,UAAU,IAAID,UAAU,CAAC,GACjD3B,SAAS;EAEf,MAAMiC,iBAAiB,GACrBH,UAAU,KAAK9B,SAAS,GACpBQ,IAAI,CAACC,GAAG,CAAC,CAACqB,UAAU,GAAGF,UAAU,IAAID,UAAU,CAAC,GAChD3B,SAAS;;EAEf;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAEE,MAAMkC,QAAQ,GACZF,iBAAiB,KAAKhC,SAAS,GAC3BQ,IAAI,CAACC,GAAG,CAACD,IAAI,CAAC2B,GAAG,CAACH,iBAAiB,CAAC,GAAGxB,IAAI,CAAC4B,EAAE,CAAC,GAC/CpC,SAAS;EAEf,MAAMqC,QAAQ,GACZJ,iBAAiB,KAAKjC,SAAS,GAC3BQ,IAAI,CAACC,GAAG,CAACD,IAAI,CAAC2B,GAAG,CAACF,iBAAiB,CAAC,IAAI,CAAC,GAAGzB,IAAI,CAAC4B,EAAE,CAAC,CAAC,GACrDpC,SAAS;EAEf,MAAMsC,mBAAmB,GAAG,CAACJ,QAAQ,EAAEG,QAAQ,CAAC,CAACvC,MAAM,CACpDyC,CAAqB,IAAkBA,CAAC,KAAKvC,SAChD,CAAC;EACD;EACA;EACA,OAAOQ,IAAI,CAACnB,GAAG,CAAC,GAAGiD,mBAAmB,EAAEzB,IAAI,CAAC;AAC/C;AAEA,OAAO,SAAS2B,SAASA,CACvBC,YAAoB,EACpBC,QAAgB,EAChB/B,SAAiB,EACjBM,IAAY,EACZ;EACA,SAAS;;EACT,MAAM0B,eAAe,GAAG,GAAG,GAAGhC,SAAS,GAAG8B,YAAY,IAAI,CAAC;EAC3D,MAAMG,aAAa,GAAG,GAAG,GAAG3B,IAAI,GAAGyB,QAAQ,IAAI,CAAC;EAChD,OAAOC,eAAe,GAAGC,aAAa;AACxC;;AAEA;AACA,OAAO,SAASC,oCAAoCA,CAClDC,EAAU,EACVjE,MAA+C,EAC/CkE,EAAU,EACV;EACA,SAAS;;EACT,IAAIlE,MAAM,CAAC+B,aAAa,EAAE;IACxB,OAAO,CAAC;EACV;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,MAAM;IACJO,YAAY,EAAEN,IAAI;IAClBmC,eAAe,EAAEC,SAAS;IAC1BhC,IAAI,EAAEC,CAAC;IACPhC,QAAQ,EAAEgE;EACZ,CAAC,GAAGrE,MAAM;EAEV,MAAMsE,sBAAsB,GAAIxC,SAAiB,IAAK;IACpD,SAAS;;IACT,MAAMyC,qBAAqB,GAAG,GAAG;IACjC,MAAMC,sBAAsB,GAAG,IAAI;IAEnC,MAAMC,gBAAgB,GACnBJ,cAAc,GAAGE,qBAAqB,GAAIC,sBAAsB;IACnE,MAAMvC,MAAM,GAAGN,IAAI,CAACY,IAAI,CAACT,SAAS,GAAGO,CAAC,CAAC,GAAGL,IAAI;IAE9C,MAAM0C,GAAG,GACP,CAACT,EAAE,GAAG,CAACC,EAAE,GAAGD,EAAE,GAAGhC,MAAM,IAAIwC,gBAAgB,IAC3C9C,IAAI,CAACgD,GAAG,CAAC,CAAC1C,MAAM,GAAGwC,gBAAgB,CAAC;IAEtC,MAAMG,GAAG,GACP,CAACX,EAAE,GAAG,CAACC,EAAE,GAAGD,EAAE,GAAGhC,MAAM,IAAIwC,gBAAgB,IACzC9C,IAAI,CAACgD,GAAG,CAAC,CAAC1C,MAAM,GAAGwC,gBAAgB,CAAC,GACpC,CAACxC,MAAM,GACT,CAACiC,EAAE,GAAGD,EAAE,GAAGhC,MAAM,IAAIN,IAAI,CAACgD,GAAG,CAAC,CAAC1C,MAAM,GAAGwC,gBAAgB,CAAC;IAE3D,MAAMI,EAAE,GAAGlB,SAAS,CAACM,EAAE,EAAEC,EAAE,EAAEpC,SAAS,EAAEO,CAAC,CAAC;IAE1C,MAAMyC,GAAG,GAAGnB,SAAS,CAACe,GAAG,EAAEE,GAAG,EAAE9C,SAAS,EAAEO,CAAC,CAAC;IAE7C,MAAM0C,cAAc,GAAGD,GAAG,GAAGD,EAAE;IAE/B,OAAOE,cAAc,GAAGX,SAAS;EACnC,CAAC;EAED,MAAM9C,SAAS,GAAGtB,MAAM,CAACmE,eAAe,GAAG,IAAI,CAAC,CAAC;;EAEjD;EACA,OAAO/C,UAAU,CAAC;IAChBb,GAAG,EAAEyC,MAAM,CAACgC,OAAO;IACnBxE,GAAG,EAAE,GAAG,CAAC;IACTa,IAAI,EAAEiD,sBAAsB;IAC5BhD,SAAS;IACTC,aAAa,EAAE;EACjB,CAAC,CAAC;AACJ;AAEA,OAAO,SAAS0D,kCAAkCA,CAChDrC,SAA+B,EAC/BsC,mBAKC,EACuC;EACxC,SAAS;;EACT,MAAM;IAAErC;EAAQ,CAAC,GAAGD,SAAS;EAE7B,MAAM;IAAEsB,EAAE;IAAED,EAAE;IAAEhC,MAAM;IAAEkD;EAAE,CAAC,GAAGD,mBAAmB;EAEjD,MAAME,wBAAwB,GAAGzD,IAAI,CAACgD,GAAG,CAAC,CAAC1C,MAAM,GAAGkD,CAAC,CAAC;EACtD,MAAME,wBAAwB,GAC5BxC,OAAO,GAAGuC,wBAAwB,IAAInB,EAAE,GAAG,CAACC,EAAE,GAAGjC,MAAM,GAAGgC,EAAE,IAAIkB,CAAC,CAAC;EAEpE,MAAMG,wBAAwB,GAC5BF,wBAAwB,GAAG,CAACnD,MAAM,IAAIgC,EAAE,GAAG,CAACC,EAAE,GAAGjC,MAAM,GAAGgC,EAAE,IAAIkB,CAAC,CAAC,GAClEC,wBAAwB,IAAIlB,EAAE,GAAGjC,MAAM,GAAGgC,EAAE,CAAC;EAE/C,OAAO;IACLsB,QAAQ,EAAEF,wBAAwB;IAClCxB,QAAQ,EAAEyB;EACZ,CAAC;AACH;AAEA,OAAO,SAASE,6BAA6BA,CAC3C5C,SAA+B,EAC/BsC,mBAOC,EACuC;EACxC,SAAS;;EACT,MAAM;IAAErC;EAAQ,CAAC,GAAGD,SAAS;EAE7B,MAAM;IAAEZ,IAAI;IAAEmD,CAAC;IAAElD,MAAM;IAAEC,MAAM;IAAE+B,EAAE;IAAEC;EAAG,CAAC,GAAGgB,mBAAmB;EAE/D,MAAMO,IAAI,GAAG9D,IAAI,CAAC+D,GAAG,CAACxD,MAAM,GAAGiD,CAAC,CAAC;EACjC,MAAMQ,IAAI,GAAGhE,IAAI,CAACiE,GAAG,CAAC1D,MAAM,GAAGiD,CAAC,CAAC;;EAEjC;EACA,MAAMU,mBAAmB,GAAGlE,IAAI,CAACgD,GAAG,CAAC,CAAC3C,IAAI,GAAGC,MAAM,GAAGkD,CAAC,CAAC;EACxD,MAAMW,gBAAgB,GACpBD,mBAAmB,IAClBJ,IAAI,IAAI,CAACvB,EAAE,GAAGlC,IAAI,GAAGC,MAAM,GAAGgC,EAAE,IAAI/B,MAAM,CAAC,GAAG+B,EAAE,GAAG0B,IAAI,CAAC;EAE3D,MAAMI,mBAAmB,GAAGlD,OAAO,GAAGiD,gBAAgB;EACtD;EACA,MAAME,mBAAmB,GACvB,CAAChE,IAAI,GAAGC,MAAM,GAAG6D,gBAAgB,GACjCD,mBAAmB,IAChBF,IAAI,IAAIzB,EAAE,GAAGlC,IAAI,GAAGC,MAAM,GAAGgC,EAAE,CAAC,GAAG/B,MAAM,GAAG+B,EAAE,GAAGwB,IAAI,CAAC;EAE3D,OAAO;IAAEF,QAAQ,EAAEQ,mBAAmB;IAAElC,QAAQ,EAAEmC;EAAoB,CAAC;AACzE;AAEA,OAAO,SAASC,iCAAiCA,CAC/CrD,SAA+B,EAC/B5C,MAA+C,EACtC;EACT,SAAS;;EACT,MAAM;IAAE6C,OAAO;IAAEgB,QAAQ;IAAEf,UAAU;IAAEpB,OAAO;IAAEwE;EAAc,CAAC,GAAGtD,SAAS;EAE3E,IAAI5C,MAAM,CAACmG,iBAAiB,EAAE;IAC5B,MAAMC,SAAS,GAAGtD,UAAU,IAAI,CAAC,GAAGD,OAAO,GAAGA,OAAO,GAAGC,UAAU;IAClE,MAAMuD,UAAU,GAAGD,SAAS,GAAGzE,IAAI,CAACC,GAAG,CAACkB,UAAU,CAAC;IACnD,IAAIpB,OAAO,GAAG0E,SAAS,IAAI1E,OAAO,GAAG2E,UAAU,EAAE;MAC/C,OAAO,IAAI;IACb;EACF;EACA,MAAMC,aAAa,GAAG3C,SAAS,CAC7Bd,OAAO,GAAGnB,OAAO,EACjBmC,QAAQ,EACR7D,MAAM,CAAC8B,SAAS,EAChB9B,MAAM,CAACoC,IACT,CAAC;EAED,OACE8D,aAAa,KAAK,CAAC,IACnBI,aAAa,GAAGJ,aAAa,IAAIlG,MAAM,CAACmE,eAAe;AAE3D","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
|
|
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","
|
|
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
|
|
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
|
-
|
|
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","
|
|
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":[]}
|
|
@@ -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
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
}
|