react-native-smooth-clip-view 0.2.2 → 0.2.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/README.md +37 -8
- package/android/CMakeLists.txt +4 -0
- package/android/build.gradle +1 -0
- package/android/src/main/cpp/SmoothClipRegistry.cpp +64 -53
- package/cpp/SmoothClipVelocityTracker.h +106 -0
- package/ios/SmoothClipView.mm +32 -74
- package/lib/module/drivers.ios.js +14 -0
- package/lib/module/drivers.ios.js.map +1 -1
- package/lib/module/drivers.js +8 -0
- package/lib/module/drivers.js.map +1 -1
- package/lib/module/easings.js +35 -0
- package/lib/module/easings.js.map +1 -0
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +1 -0
- package/lib/module/index.web.js.map +1 -1
- package/lib/typescript/src/driverTypes.d.ts +32 -3
- package/lib/typescript/src/driverTypes.d.ts.map +1 -1
- package/lib/typescript/src/drivers.d.ts.map +1 -1
- package/lib/typescript/src/drivers.ios.d.ts.map +1 -1
- package/lib/typescript/src/easings.d.ts +33 -0
- package/lib/typescript/src/easings.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +1 -0
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/driverTypes.ts +51 -19
- package/src/drivers.ios.ts +26 -0
- package/src/drivers.ts +11 -0
- package/src/easings.ts +32 -0
- package/src/index.ts +1 -0
- package/src/index.web.ts +1 -0
package/README.md
CHANGED
|
@@ -141,10 +141,16 @@ const gesture = Gesture.Pan()
|
|
|
141
141
|
// bookkeeping. Assigning driver.presentation.value also works.
|
|
142
142
|
driver.ui.setScalars(clip.x, clip.y, clip.width, clip.height, clip.radius, 0, 0);
|
|
143
143
|
})
|
|
144
|
-
.onEnd(() => {
|
|
144
|
+
.onEnd((event) => {
|
|
145
|
+
// The release event is fresher than the last onUpdate (on Android,
|
|
146
|
+
// ACTION_UP carries a position no MOVE ever delivered). Pass the final
|
|
147
|
+
// geometry as `from` so the animation starts from exactly that value —
|
|
148
|
+
// it fuses a setScalars hot write with the handoff in one call.
|
|
149
|
+
const clip = geometryForDrag(dragStart.value, event.translationY);
|
|
145
150
|
driver.ui.animateTo(createClipPresentation(expandedClip), {
|
|
146
151
|
type: 'spring',
|
|
147
152
|
initialVelocity: 'inherit',
|
|
153
|
+
from: createClipPresentation(clip),
|
|
148
154
|
});
|
|
149
155
|
});
|
|
150
156
|
```
|
|
@@ -175,29 +181,52 @@ const gesture = Gesture.Pan()
|
|
|
175
181
|
streams such as gestures. `driver.presentation.value` is stale after hot
|
|
176
182
|
writes by design; `beginInteraction()` remains the source of truth for
|
|
177
183
|
visible geometry, and `animateTo()` after hot writes starts from the native
|
|
178
|
-
registry's latest value rather than the stale SharedValue.
|
|
179
|
-
|
|
184
|
+
registry's latest value rather than the stale SharedValue. To start from a
|
|
185
|
+
value fresher than the last hot write (a gesture's release sample), pass it
|
|
186
|
+
as `animation.from` — `animateTo` then performs the hot write and the
|
|
187
|
+
handoff in one call. Do not interleave `setScalars` with
|
|
188
|
+
`presentation.value` writes on the same driver.
|
|
180
189
|
- Spring `initialVelocity` is one normalized scalar along the current-to-target
|
|
181
190
|
trajectory, in units of the remaining distance per second (`1` covers the
|
|
182
191
|
remaining distance in one second). Every geometry channel continues with the
|
|
183
192
|
same normalized rate, so grab/release preserves the felt direction and
|
|
184
193
|
speed. `'inherit'` (the default) estimates the scalar from the last two
|
|
185
194
|
interactive samples on iOS and Android; samples older than 100 ms — and the
|
|
186
|
-
web fallback — fall back to zero.
|
|
195
|
+
web fallback — fall back to zero. Two writes landing inside the same frame
|
|
196
|
+
(< 4 ms apart, e.g. a release-sample `from` seed right after the last drag
|
|
197
|
+
write) coalesce into one sample, and an identical re-write is ignored, so a
|
|
198
|
+
fused handoff can neither zero nor inflate the inherited velocity.
|
|
187
199
|
- `driver.react` exposes `beginInteraction`, `set`, `animateTo`, and `cancel`
|
|
188
200
|
as Promises (`setScalars` is UI-worklet-only). React code never blocks
|
|
189
201
|
waiting for main/UI-thread work. An immediate animation request resolves
|
|
190
202
|
before its completion callback is delivered.
|
|
191
203
|
- `animateTo()` transfers ownership to native animation. Timing uses
|
|
192
|
-
cubic Bézier control points
|
|
204
|
+
cubic Bézier control points — `ClipEasings` exports exact-form presets
|
|
205
|
+
(`easeOutCubic` = `Easing.out(Easing.cubic)` etc.) so a parallel Reanimated
|
|
206
|
+
animation can run the identical curve without hand-deriving it; springs
|
|
207
|
+
accept mass, stiffness, damping, and an
|
|
193
208
|
explicit normalized velocity or `'inherit'` (the default). Keyframes accept
|
|
194
|
-
validated, monotonically increasing offsets from zero through one.
|
|
209
|
+
validated, monotonically increasing offsets from zero through one. Every
|
|
210
|
+
kind accepts an optional `from` presentation — a fused take-ownership hot
|
|
211
|
+
write issued immediately before the handoff, so the animation starts from
|
|
212
|
+
exactly that value (pass `frames[0].presentation` for keyframes, which
|
|
213
|
+
interpolate absolutely). A non-finite `from` rejects the whole call; against
|
|
214
|
+
a held pending-animation latch the seed is dropped — the latch is newer
|
|
215
|
+
intent, and nothing is displayable yet anyway. `from` behaves the same on
|
|
216
|
+
both platforms (it is driver-layer, not native): on iOS the seed stops any
|
|
217
|
+
running Core Animation and writes the model layer first; keyframes then
|
|
218
|
+
start exactly at `from`, while timing/spring sample their from-value off
|
|
219
|
+
the presentation layer — the last committed frame, at most one frame
|
|
220
|
+
behind `from` — identical to the explicit two-call pattern.
|
|
195
221
|
- `cancel()` freezes visible presentation by default. Pass `'target'` as its
|
|
196
222
|
behavior to jump to the requested endpoint.
|
|
197
223
|
- `options.onAnimationComplete` fires exactly once per animation with its ID
|
|
198
224
|
and `finished` state, including cancellation, replacement, and native-side
|
|
199
|
-
rejection (`animateTo` then returns
|
|
200
|
-
|
|
225
|
+
rejection (`animateTo` then returns a fresh non-zero id whose single
|
|
226
|
+
`finished: false` completion follows — key completion handling by the
|
|
227
|
+
returned id, never by `0`). `animateTo` returns `0` — and delivers no
|
|
228
|
+
completion — only when the driver entry no longer exists (destroyed) or the
|
|
229
|
+
call ran off the main thread. Unmounting the last host mid-flight does not complete the
|
|
201
230
|
animation: the remainder is re-latched and the next displayable host resumes
|
|
202
231
|
it, so the completion arrives when it finishes there — or unfinished on
|
|
203
232
|
replacement, cancellation, `beginInteraction()`, or driver destruction.
|
package/android/CMakeLists.txt
CHANGED
|
@@ -16,6 +16,10 @@ file(GLOB smoothclip_SOURCES CONFIGURE_DEPENDS
|
|
|
16
16
|
|
|
17
17
|
add_library(smoothclipview SHARED ${smoothclip_SOURCES})
|
|
18
18
|
|
|
19
|
+
# 16 KB page-size support for NDKs where ANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES
|
|
20
|
+
# is unavailable (< r26.3) or ignored.
|
|
21
|
+
target_link_options(smoothclipview PRIVATE "-Wl,-z,max-page-size=16384")
|
|
22
|
+
|
|
19
23
|
# C++20, RTTI, exceptions and React Native macros.
|
|
20
24
|
include("${REACT_NATIVE_DIR}/ReactCommon/cmake-utils/react-native-flags.cmake")
|
|
21
25
|
target_compile_reactnative_options(smoothclipview PUBLIC)
|
package/android/build.gradle
CHANGED
|
@@ -86,6 +86,7 @@ android {
|
|
|
86
86
|
cmake {
|
|
87
87
|
cppFlags "-O2", "-frtti", "-fexceptions", "-Wall", "-std=c++20"
|
|
88
88
|
arguments "-DANDROID_STL=c++_shared",
|
|
89
|
+
"-DANDROID_SUPPORT_FLEXIBLE_PAGE_SIZES=ON",
|
|
89
90
|
"-DREACT_NATIVE_DIR=${reactNativeRootDir}"
|
|
90
91
|
abiFilters(*reactNativeArchitectures())
|
|
91
92
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#include "SmoothClipAndroid.h"
|
|
2
|
+
#include "SmoothClipVelocityTracker.h"
|
|
2
3
|
|
|
3
4
|
#include <android/choreographer.h>
|
|
4
5
|
#include <fbjni/fbjni.h>
|
|
@@ -42,6 +43,11 @@ struct ActiveAnimation {
|
|
|
42
43
|
std::vector<Keyframe> keyframes;
|
|
43
44
|
double durationS = 0;
|
|
44
45
|
double startedAtS = 0;
|
|
46
|
+
// Wall-clock twin of startedAtS: stamped together with it, NEVER rebased
|
|
47
|
+
// by the frame-clock anchor. Readers that need honest wall elapsed (the
|
|
48
|
+
// unregister re-latch remainder, the run-ahead guard) use this; the
|
|
49
|
+
// animation curve itself paces on the anchored startedAtS frame axis.
|
|
50
|
+
double wallStartedAtS = 0;
|
|
45
51
|
// Integrated spring state (channels: x, y, width, height, radius, tx, ty).
|
|
46
52
|
std::array<double, 7> springPosition{};
|
|
47
53
|
std::array<double, 7> springVelocity{};
|
|
@@ -51,6 +57,10 @@ struct ActiveAnimation {
|
|
|
51
57
|
// registered, held un-rendered (and out of animatingDrivers()) until the
|
|
52
58
|
// first registerViewAndroid rebases the clock and starts it.
|
|
53
59
|
bool started = false;
|
|
60
|
+
// False until the first advance() translates the wall-clock start stamp
|
|
61
|
+
// onto the choreographer frame-time axis (elapsed-preserving). Every
|
|
62
|
+
// startedAtS stamp clears it so a re-latched resume re-anchors too.
|
|
63
|
+
bool frameClockAnchored = false;
|
|
54
64
|
};
|
|
55
65
|
|
|
56
66
|
// Per-view fanout state. Density and host metrics are pushed from Kotlin at
|
|
@@ -75,12 +85,9 @@ struct DriverState {
|
|
|
75
85
|
// last view leaves and revived by a take-ownership setPresentation.
|
|
76
86
|
bool destroyed = false;
|
|
77
87
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
Presentation latestSample{{0, 0, 0, 0, 0}, 0, 0};
|
|
82
|
-
double previousSampleTimeS = 0;
|
|
83
|
-
double latestSampleTimeS = 0;
|
|
88
|
+
// 'inherit' velocity samples; recording/coalescing/projection live in the
|
|
89
|
+
// shared cpp/SmoothClipVelocityTracker.h (behavior-paired with iOS).
|
|
90
|
+
VelocitySampleHistory samples;
|
|
84
91
|
};
|
|
85
92
|
|
|
86
93
|
struct CompletionSink {
|
|
@@ -221,6 +228,10 @@ constexpr double kSpringSettleVelocity = 1.0;
|
|
|
221
228
|
// Settle-based termination is backed by a hard cap so a pathological
|
|
222
229
|
// configuration cannot run the frame loop forever.
|
|
223
230
|
constexpr double kSpringMaxDurationS = 10.0;
|
|
231
|
+
// One vsync of slack for the post-stall run-ahead guard in advance():
|
|
232
|
+
// frame-axis elapsed may lead wall elapsed by at most this much before the
|
|
233
|
+
// animation is re-anchored onto honest wall time.
|
|
234
|
+
constexpr double kMaxFrameLeadS = 0.017;
|
|
224
235
|
|
|
225
236
|
// Semi-implicit Euler per channel, substepped: one frame-sized step is only
|
|
226
237
|
// stable for omega*dt < 2, and accepted stiffness/mass ratios exceed that at
|
|
@@ -367,46 +378,6 @@ void applyToViews(DriverState &state, const Presentation &presentation) {
|
|
|
367
378
|
}
|
|
368
379
|
}
|
|
369
380
|
|
|
370
|
-
void recordInteractiveSample(DriverState &state, const Presentation &presentation) {
|
|
371
|
-
state.hasPreviousSample = state.hasLatestSample;
|
|
372
|
-
state.previousSample = state.latestSample;
|
|
373
|
-
state.previousSampleTimeS = state.latestSampleTimeS;
|
|
374
|
-
state.hasLatestSample = true;
|
|
375
|
-
state.latestSample = presentation;
|
|
376
|
-
state.latestSampleTimeS = nowSeconds();
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
double inheritedVelocity(DriverState &state, const Presentation &target) {
|
|
380
|
-
if (!state.hasPreviousSample || !state.hasLatestSample) return 0;
|
|
381
|
-
const double elapsed = state.latestSampleTimeS - state.previousSampleTimeS;
|
|
382
|
-
if (elapsed <= 0 || nowSeconds() - state.latestSampleTimeS > 0.1) return 0;
|
|
383
|
-
const double sample[7] = {
|
|
384
|
-
state.latestSample.clip.x - state.previousSample.clip.x,
|
|
385
|
-
state.latestSample.clip.y - state.previousSample.clip.y,
|
|
386
|
-
state.latestSample.clip.width - state.previousSample.clip.width,
|
|
387
|
-
state.latestSample.clip.height - state.previousSample.clip.height,
|
|
388
|
-
state.latestSample.clip.radius - state.previousSample.clip.radius,
|
|
389
|
-
state.latestSample.contentTranslateX - state.previousSample.contentTranslateX,
|
|
390
|
-
state.latestSample.contentTranslateY - state.previousSample.contentTranslateY};
|
|
391
|
-
const double destination[7] = {
|
|
392
|
-
target.clip.x - state.latestSample.clip.x,
|
|
393
|
-
target.clip.y - state.latestSample.clip.y,
|
|
394
|
-
target.clip.width - state.latestSample.clip.width,
|
|
395
|
-
target.clip.height - state.latestSample.clip.height,
|
|
396
|
-
target.clip.radius - state.latestSample.clip.radius,
|
|
397
|
-
target.contentTranslateX - state.latestSample.contentTranslateX,
|
|
398
|
-
target.contentTranslateY - state.latestSample.contentTranslateY};
|
|
399
|
-
double numerator = 0;
|
|
400
|
-
double denominator = 0;
|
|
401
|
-
for (int index = 0; index < 7; index += 1) {
|
|
402
|
-
numerator += sample[index] * destination[index];
|
|
403
|
-
denominator += destination[index] * destination[index];
|
|
404
|
-
}
|
|
405
|
-
if (denominator <= 1e-12) return 0;
|
|
406
|
-
const double result = numerator / elapsed / denominator;
|
|
407
|
-
return std::isfinite(result) ? result : 0;
|
|
408
|
-
}
|
|
409
|
-
|
|
410
381
|
void applyPresentation(DriverState &state, const Presentation &presentation) {
|
|
411
382
|
state.latest = presentation;
|
|
412
383
|
state.hasLatest = true;
|
|
@@ -480,6 +451,11 @@ void startLatchedAnimation(uint64_t driverId, DriverState &state) {
|
|
|
480
451
|
animation.started = true;
|
|
481
452
|
animation.startedAtS = nowSeconds();
|
|
482
453
|
animation.lastFrameS = animation.startedAtS;
|
|
454
|
+
animation.wallStartedAtS = animation.startedAtS;
|
|
455
|
+
// Load-bearing for re-latch resumes: unregisterViewAndroid rewrites this
|
|
456
|
+
// ActiveAnimation in place, so a stale anchor would replay the fraction-0
|
|
457
|
+
// first frame the anchor exists to remove.
|
|
458
|
+
animation.frameClockAnchored = false;
|
|
483
459
|
auto &active = animatingDrivers();
|
|
484
460
|
if (std::find(active.begin(), active.end(), driverId) == active.end()) {
|
|
485
461
|
active.push_back(driverId);
|
|
@@ -494,6 +470,8 @@ int32_t startAnimation(
|
|
|
494
470
|
ActiveAnimation animation) {
|
|
495
471
|
animation.startedAtS = nowSeconds();
|
|
496
472
|
animation.lastFrameS = animation.startedAtS;
|
|
473
|
+
animation.wallStartedAtS = animation.startedAtS;
|
|
474
|
+
animation.frameClockAnchored = false;
|
|
497
475
|
// current = start even while latched is load-bearing: cancelAnimation,
|
|
498
476
|
// beginInteraction, prepareAnimation's visibleBefore and registerView's
|
|
499
477
|
// visible all read animation->current, giving a never-rendered latch
|
|
@@ -521,6 +499,38 @@ int32_t startAnimation(
|
|
|
521
499
|
void advance(uint64_t driverId, DriverState &state, double now) {
|
|
522
500
|
ActiveAnimation &animation = *state.animation;
|
|
523
501
|
|
|
502
|
+
if (!animation.frameClockAnchored) {
|
|
503
|
+
// startedAtS/lastFrameS hold nowSeconds() sampled mid-frame at the
|
|
504
|
+
// animateTo call / latch attach, but `now` is the frame's vsync
|
|
505
|
+
// timestamp — the same CLOCK_MONOTONIC timebase at an earlier sampling
|
|
506
|
+
// point. Un-anchored, the first fraction clamps to 0 and re-renders the
|
|
507
|
+
// start (1-2 duplicated frames at every interactive→animateTo handoff).
|
|
508
|
+
// Re-anchor onto the frame-time axis keeping the real elapsed time, so
|
|
509
|
+
// the first rendered frame advances honestly and later frames pace on
|
|
510
|
+
// vsync. On the 32-bit path `now` is itself nowSeconds() → ~identity.
|
|
511
|
+
const double wallElapsedS =
|
|
512
|
+
std::max(0.0, nowSeconds() - animation.startedAtS);
|
|
513
|
+
animation.startedAtS = now - wallElapsedS;
|
|
514
|
+
animation.lastFrameS = animation.startedAtS;
|
|
515
|
+
animation.frameClockAnchored = true;
|
|
516
|
+
// wallStartedAtS deliberately keeps the wall axis through this rebase.
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Run-ahead guard: the anchor's one-time shift bakes the first callback's
|
|
520
|
+
// dispatch latency into the frame axis. If a stalled handoff anchored
|
|
521
|
+
// against a stale frame stamp and later stamps catch up to real time, the
|
|
522
|
+
// frame axis leads wall time by up to the stall length and the animation
|
|
523
|
+
// completes early. Re-anchor forward when the lead exceeds one vsync of
|
|
524
|
+
// slack; on calm frames the condition (first callback's latency exceeding
|
|
525
|
+
// this frame's by > 17 ms) cannot hold, so the hot path is unchanged, and
|
|
526
|
+
// the 32-bit path (frame axis == wall axis) never fires it. lastFrameS is
|
|
527
|
+
// deliberately untouched: springs pace on dt, already clamped to 64 ms.
|
|
528
|
+
const double wallElapsedNowS =
|
|
529
|
+
std::max(0.0, nowSeconds() - animation.wallStartedAtS);
|
|
530
|
+
if (now - animation.startedAtS > wallElapsedNowS + kMaxFrameLeadS) {
|
|
531
|
+
animation.startedAtS = now - wallElapsedNowS;
|
|
532
|
+
}
|
|
533
|
+
|
|
524
534
|
bool done = false;
|
|
525
535
|
if (animation.kind == AnimationKind::Spring) {
|
|
526
536
|
done = advanceSpring(animation, now);
|
|
@@ -648,7 +658,7 @@ void setPresentation(
|
|
|
648
658
|
state.latest = presentation;
|
|
649
659
|
state.hasLatest = true;
|
|
650
660
|
state.ownership = Ownership::Interactive;
|
|
651
|
-
|
|
661
|
+
recordVelocitySample(state.samples, toChannels(presentation), nowSeconds());
|
|
652
662
|
applyToViews(state, presentation);
|
|
653
663
|
}
|
|
654
664
|
|
|
@@ -668,10 +678,7 @@ Presentation beginInteraction(uint64_t driverId) {
|
|
|
668
678
|
state.latest = current;
|
|
669
679
|
state.hasLatest = true;
|
|
670
680
|
state.ownership = Ownership::Interactive;
|
|
671
|
-
state.
|
|
672
|
-
state.hasLatestSample = true;
|
|
673
|
-
state.latestSample = current;
|
|
674
|
-
state.latestSampleTimeS = nowSeconds();
|
|
681
|
+
resetVelocitySamples(state.samples, toChannels(current), nowSeconds());
|
|
675
682
|
applyToViews(state, current);
|
|
676
683
|
emitCompletion(driverId, animationId, false);
|
|
677
684
|
return current;
|
|
@@ -720,7 +727,7 @@ int32_t animateSpring(
|
|
|
720
727
|
// seeded with velocity·displacement to match the iOS CASpringAnimation
|
|
721
728
|
// per-keypath behavior.
|
|
722
729
|
const double velocity = animation.inheritVelocity
|
|
723
|
-
? inheritedVelocity(state, presentation)
|
|
730
|
+
? inheritedVelocity(state.samples, toChannels(presentation), nowSeconds())
|
|
724
731
|
: animation.initialVelocity;
|
|
725
732
|
const Presentation resolvedStart =
|
|
726
733
|
prepareAnimation(driverId, state, start, presentation);
|
|
@@ -1001,7 +1008,11 @@ void unregisterViewAndroid(
|
|
|
1001
1008
|
// it). Completing it here would betray the pending intent.
|
|
1002
1009
|
} else if (state.views.empty()) {
|
|
1003
1010
|
auto &animation = *state.animation;
|
|
1004
|
-
|
|
1011
|
+
// wallStartedAtS, not startedAtS: post-anchor the latter lives on the
|
|
1012
|
+
// shifted frame axis and would overstate elapsed by the first
|
|
1013
|
+
// callback's dispatch latency, shortening the resumed remainder and
|
|
1014
|
+
// advancing the keyframe rebase past the rendered position.
|
|
1015
|
+
const double elapsedS = nowSeconds() - animation.wallStartedAtS;
|
|
1005
1016
|
const double remainingS = std::max(0.0, animation.durationS - elapsedS);
|
|
1006
1017
|
const bool canResume = !state.destroyed &&
|
|
1007
1018
|
(animation.kind == AnimationKind::Spring || remainingS > 0);
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <array>
|
|
4
|
+
#include <cmath>
|
|
5
|
+
|
|
6
|
+
namespace smoothclip {
|
|
7
|
+
|
|
8
|
+
// The two most recent interactive samples used by `initialVelocity: 'inherit'`.
|
|
9
|
+
// Channels are the seven presentation scalars (x, y, width, height, radius,
|
|
10
|
+
// contentTranslateX, contentTranslateY) but the tracker is value-agnostic:
|
|
11
|
+
// iOS records normalized (host-clamped) geometry, Android raw DIP — the
|
|
12
|
+
// projection only needs both samples and the target in the same space.
|
|
13
|
+
// Shared by ios/SmoothClipView.mm and android/.../SmoothClipRegistry.cpp; a
|
|
14
|
+
// behavior change here changes both platforms.
|
|
15
|
+
struct VelocitySampleHistory {
|
|
16
|
+
bool hasPrevious = false;
|
|
17
|
+
bool hasLatest = false;
|
|
18
|
+
std::array<double, 7> previous{};
|
|
19
|
+
std::array<double, 7> latest{};
|
|
20
|
+
double previousTimeS = 0;
|
|
21
|
+
double latestTimeS = 0;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// Two records closer than this are one observation of the same frame (an
|
|
25
|
+
// ACTION_UP adoption or an animateTo `from` seed lands in the same input
|
|
26
|
+
// batch as the last drag write, ~1 ms apart). The window sits well above
|
|
27
|
+
// batch spacing and below the 8.33 ms 120 Hz frame, so legitimate
|
|
28
|
+
// consecutive-frame samples never coalesce.
|
|
29
|
+
inline constexpr double kSampleCoalesceWindowS = 0.004;
|
|
30
|
+
// A latest sample older than this no longer describes the finger; 'inherit'
|
|
31
|
+
// yields zero instead of replaying stale motion.
|
|
32
|
+
inline constexpr double kVelocityStalenessS = 0.1;
|
|
33
|
+
|
|
34
|
+
inline void recordVelocitySample(
|
|
35
|
+
VelocitySampleHistory &history,
|
|
36
|
+
const std::array<double, 7> &channels,
|
|
37
|
+
double nowS) {
|
|
38
|
+
if (history.hasLatest && channels == history.latest) {
|
|
39
|
+
// Identical re-record (a `from` seed equal to the last interactive
|
|
40
|
+
// write): keep the pair and its timestamps, so the last real motion
|
|
41
|
+
// still ages out through the staleness guard instead of zeroing the
|
|
42
|
+
// sample deltas.
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
if (history.hasLatest &&
|
|
46
|
+
nowS - history.latestTimeS < kSampleCoalesceWindowS) {
|
|
47
|
+
// Same-frame re-record: replace the latest sample in place instead of
|
|
48
|
+
// rotating, so the surviving pair spans a real frame interval. Rotating
|
|
49
|
+
// here would divide the extra sub-frame displacement by microseconds and
|
|
50
|
+
// explode the inherited velocity.
|
|
51
|
+
history.latest = channels;
|
|
52
|
+
history.latestTimeS = nowS;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
history.hasPrevious = history.hasLatest;
|
|
56
|
+
history.previous = history.latest;
|
|
57
|
+
history.previousTimeS = history.latestTimeS;
|
|
58
|
+
history.hasLatest = true;
|
|
59
|
+
history.latest = channels;
|
|
60
|
+
history.latestTimeS = nowS;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// beginInteraction semantics: history restarts from a single fresh sample;
|
|
64
|
+
// one more record is needed before 'inherit' can measure motion.
|
|
65
|
+
inline void resetVelocitySamples(
|
|
66
|
+
VelocitySampleHistory &history,
|
|
67
|
+
const std::array<double, 7> &channels,
|
|
68
|
+
double nowS) {
|
|
69
|
+
history.hasPrevious = false;
|
|
70
|
+
history.hasLatest = true;
|
|
71
|
+
history.latest = channels;
|
|
72
|
+
history.latestTimeS = nowS;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
inline void clearVelocitySamples(VelocitySampleHistory &history) {
|
|
76
|
+
history = VelocitySampleHistory{};
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Normalized velocity of the recorded motion projected onto the
|
|
80
|
+
// latest→target trajectory, in units of remaining-distance per second
|
|
81
|
+
// (1 covers the remaining distance in one second) — the CASpringAnimation
|
|
82
|
+
// initialVelocity convention. iOS passes the scalar unchanged per keypath;
|
|
83
|
+
// Android seeds each integrator channel with scalar·displacement.
|
|
84
|
+
inline double inheritedVelocity(
|
|
85
|
+
const VelocitySampleHistory &history,
|
|
86
|
+
const std::array<double, 7> &target,
|
|
87
|
+
double nowS) {
|
|
88
|
+
if (!history.hasPrevious || !history.hasLatest) return 0;
|
|
89
|
+
const double elapsed = history.latestTimeS - history.previousTimeS;
|
|
90
|
+
if (elapsed <= 0 || nowS - history.latestTimeS > kVelocityStalenessS) {
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
double numerator = 0;
|
|
94
|
+
double denominator = 0;
|
|
95
|
+
for (int index = 0; index < 7; index += 1) {
|
|
96
|
+
const double sampleDelta = history.latest[index] - history.previous[index];
|
|
97
|
+
const double destinationDelta = target[index] - history.latest[index];
|
|
98
|
+
numerator += sampleDelta * destinationDelta;
|
|
99
|
+
denominator += destinationDelta * destinationDelta;
|
|
100
|
+
}
|
|
101
|
+
if (denominator <= 1e-12) return 0;
|
|
102
|
+
const double result = numerator / elapsed / denominator;
|
|
103
|
+
return std::isfinite(result) ? result : 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
} // namespace smoothclip
|
package/ios/SmoothClipView.mm
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
#import "SmoothClipGeometry.h"
|
|
4
4
|
#import "SmoothClipViewRegistry.h"
|
|
5
5
|
|
|
6
|
+
#include "SmoothClipVelocityTracker.h"
|
|
7
|
+
|
|
6
8
|
#import <QuartzCore/QuartzCore.h>
|
|
7
9
|
#import <React/RCTConversions.h>
|
|
8
10
|
#import <React/RCTFabricComponentsPlugins.h>
|
|
@@ -48,6 +50,17 @@ using namespace facebook::react;
|
|
|
48
50
|
finished:(BOOL)finished;
|
|
49
51
|
@end
|
|
50
52
|
|
|
53
|
+
static std::array<double, 7> SmoothClipVelocityChannels(
|
|
54
|
+
CGRect rect, CGFloat radius, CGPoint contentTranslation) {
|
|
55
|
+
return {CGRectGetMinX(rect),
|
|
56
|
+
CGRectGetMinY(rect),
|
|
57
|
+
CGRectGetWidth(rect),
|
|
58
|
+
CGRectGetHeight(rect),
|
|
59
|
+
radius,
|
|
60
|
+
contentTranslation.x,
|
|
61
|
+
contentTranslation.y};
|
|
62
|
+
}
|
|
63
|
+
|
|
51
64
|
@implementation SmoothClipView {
|
|
52
65
|
SmoothClipContainerView *_clipContainer;
|
|
53
66
|
SmoothClipContainerView *_contentContainer;
|
|
@@ -82,16 +95,10 @@ using namespace facebook::react;
|
|
|
82
95
|
CGPoint _pausedContentTranslation;
|
|
83
96
|
CFTimeInterval _pausedRemaining;
|
|
84
97
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
CGFloat _previousInteractiveRadius;
|
|
90
|
-
CGFloat _interactiveRadius;
|
|
91
|
-
CGPoint _previousInteractiveContentTranslation;
|
|
92
|
-
CGPoint _interactiveContentTranslation;
|
|
93
|
-
CFTimeInterval _previousInteractiveTime;
|
|
94
|
-
CFTimeInterval _interactiveTime;
|
|
98
|
+
// 'inherit' velocity samples (normalized geometry, per view); recording/
|
|
99
|
+
// coalescing/projection live in the shared cpp/SmoothClipVelocityTracker.h
|
|
100
|
+
// (behavior-paired with Android's per-driver history).
|
|
101
|
+
smoothclip::VelocitySampleHistory _velocitySamples;
|
|
95
102
|
}
|
|
96
103
|
|
|
97
104
|
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
@@ -144,8 +151,7 @@ using namespace facebook::react;
|
|
|
144
151
|
_activeAnimationKind = 0;
|
|
145
152
|
_pendingAnimationInstall = NO;
|
|
146
153
|
_animationPaused = NO;
|
|
147
|
-
|
|
148
|
-
_hasInteractiveSample = NO;
|
|
154
|
+
smoothclip::clearVelocitySamples(_velocitySamples);
|
|
149
155
|
[[NSNotificationCenter defaultCenter]
|
|
150
156
|
addObserver:self
|
|
151
157
|
selector:@selector(applicationWillResignActive)
|
|
@@ -305,71 +311,24 @@ using namespace facebook::react;
|
|
|
305
311
|
- (void)recordInteractiveRect:(CGRect)rect
|
|
306
312
|
radius:(CGFloat)radius
|
|
307
313
|
contentTranslation:(CGPoint)contentTranslation {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
_hasPreviousInteractiveSample = YES;
|
|
317
|
-
_previousInteractiveRect = _interactiveRect;
|
|
318
|
-
_previousInteractiveRadius = _interactiveRadius;
|
|
319
|
-
_previousInteractiveContentTranslation =
|
|
320
|
-
_interactiveContentTranslation;
|
|
321
|
-
_previousInteractiveTime = _interactiveTime;
|
|
322
|
-
}
|
|
323
|
-
_hasInteractiveSample = YES;
|
|
324
|
-
_interactiveRect = rect;
|
|
325
|
-
_interactiveRadius = radius;
|
|
326
|
-
_interactiveContentTranslation = contentTranslation;
|
|
327
|
-
_interactiveTime = CACurrentMediaTime();
|
|
314
|
+
// Identical-value dedupe and same-frame coalescing live in the shared
|
|
315
|
+
// tracker; coalescing keeps a distinct re-record issued sub-frame after
|
|
316
|
+
// the last one (e.g. a fused animateTo `from` seed at gesture release)
|
|
317
|
+
// from exploding the inherited velocity.
|
|
318
|
+
smoothclip::recordVelocitySample(
|
|
319
|
+
_velocitySamples,
|
|
320
|
+
SmoothClipVelocityChannels(rect, radius, contentTranslation),
|
|
321
|
+
CACurrentMediaTime());
|
|
328
322
|
}
|
|
329
323
|
|
|
330
324
|
- (CGFloat)inheritedVelocityToRect:(CGRect)target
|
|
331
325
|
radius:(CGFloat)targetRadius
|
|
332
326
|
contentTranslation:(CGPoint)targetContentTranslation {
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
const CGFloat current[] = {
|
|
339
|
-
CGRectGetMinX(_interactiveRect),
|
|
340
|
-
CGRectGetMinY(_interactiveRect),
|
|
341
|
-
CGRectGetWidth(_interactiveRect),
|
|
342
|
-
CGRectGetHeight(_interactiveRect),
|
|
343
|
-
_interactiveRadius,
|
|
344
|
-
_interactiveContentTranslation.x,
|
|
345
|
-
_interactiveContentTranslation.y};
|
|
346
|
-
const CGFloat previous[] = {
|
|
347
|
-
CGRectGetMinX(_previousInteractiveRect),
|
|
348
|
-
CGRectGetMinY(_previousInteractiveRect),
|
|
349
|
-
CGRectGetWidth(_previousInteractiveRect),
|
|
350
|
-
CGRectGetHeight(_previousInteractiveRect),
|
|
351
|
-
_previousInteractiveRadius,
|
|
352
|
-
_previousInteractiveContentTranslation.x,
|
|
353
|
-
_previousInteractiveContentTranslation.y};
|
|
354
|
-
const CGFloat destination[] = {
|
|
355
|
-
CGRectGetMinX(target),
|
|
356
|
-
CGRectGetMinY(target),
|
|
357
|
-
CGRectGetWidth(target),
|
|
358
|
-
CGRectGetHeight(target),
|
|
359
|
-
targetRadius,
|
|
360
|
-
targetContentTranslation.x,
|
|
361
|
-
targetContentTranslation.y};
|
|
362
|
-
double numerator = 0;
|
|
363
|
-
double denominator = 0;
|
|
364
|
-
for (NSUInteger index = 0; index < 7; index += 1) {
|
|
365
|
-
const double velocity = (current[index] - previous[index]) / elapsed;
|
|
366
|
-
const double displacement = destination[index] - current[index];
|
|
367
|
-
numerator += velocity * displacement;
|
|
368
|
-
denominator += displacement * displacement;
|
|
369
|
-
}
|
|
370
|
-
if (denominator <= DBL_EPSILON) return 0;
|
|
371
|
-
const double result = numerator / denominator;
|
|
372
|
-
return isfinite(result) ? result : 0;
|
|
327
|
+
return smoothclip::inheritedVelocity(
|
|
328
|
+
_velocitySamples,
|
|
329
|
+
SmoothClipVelocityChannels(
|
|
330
|
+
target, targetRadius, targetContentTranslation),
|
|
331
|
+
CACurrentMediaTime());
|
|
373
332
|
}
|
|
374
333
|
|
|
375
334
|
- (void)smoothClipApplyPresentation:(smoothclip::Presentation)presentation {
|
|
@@ -1113,8 +1072,7 @@ using namespace facebook::react;
|
|
|
1113
1072
|
[self stopLayerAnimationWithoutCallback];
|
|
1114
1073
|
_pendingAnimationInstall = NO;
|
|
1115
1074
|
_animationPaused = NO;
|
|
1116
|
-
|
|
1117
|
-
_hasInteractiveSample = NO;
|
|
1075
|
+
smoothclip::clearVelocitySamples(_velocitySamples);
|
|
1118
1076
|
[super prepareForRecycle];
|
|
1119
1077
|
_requestedClip = CGRectZero;
|
|
1120
1078
|
_normalizedClip = CGRectZero;
|
|
@@ -45,6 +45,11 @@ function reduceMotionCode(value) {
|
|
|
45
45
|
function animationIsFinite(target, animation) {
|
|
46
46
|
'worklet';
|
|
47
47
|
|
|
48
|
+
if (animation.from !== undefined && !isFiniteClipPresentation(animation.from)) {
|
|
49
|
+
// Silently dropping an invalid explicit start would re-open the exact
|
|
50
|
+
// stale-start handoff `from` exists to close — reject the whole call.
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
48
53
|
if (animation.type === 'timing') {
|
|
49
54
|
return Number.isFinite(animation.duration) && animation.controlPoints.every(Number.isFinite);
|
|
50
55
|
}
|
|
@@ -165,6 +170,15 @@ export function useSmoothClipDriver(initialValue, options = {}) {
|
|
|
165
170
|
if (!isFiniteClipPresentation(target) || !animationIsFinite(target, animation)) {
|
|
166
171
|
return rejectAnimationHostFunction(driverId);
|
|
167
172
|
}
|
|
173
|
+
const from = animation.from;
|
|
174
|
+
if (from !== undefined) {
|
|
175
|
+
// Fused hot write: exactly setScalars(from…) issued immediately
|
|
176
|
+
// before the handoff, so native's latest value — the animation
|
|
177
|
+
// start below — is the caller's explicit presentation. Also
|
|
178
|
+
// re-grabs from a running animation, which the implicit
|
|
179
|
+
// interactive-start path would silently skip.
|
|
180
|
+
setScalarsOnUI(from.clip.x, from.clip.y, from.clip.width, from.clip.height, from.clip.radius, from.contentTranslateX, from.contentTranslateY);
|
|
181
|
+
}
|
|
168
182
|
|
|
169
183
|
// After a setScalars hot write the SharedValue no longer matches what
|
|
170
184
|
// is on screen; passing it as the start would snap the animation back.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","useSharedValue","isRNRuntime","scheduleOnRN","scheduleOnUI","NativeSmoothClipModule","allocateDriverId","attachDriverState","createDriverState","detachDriverState","getDriverState","setDriverState","completeNativeAnimation","synchronizeNativeCompletion","clipPresentationEquals","createClipPresentation","isFiniteClipPresentation","createReactRequest","rejectDriverRequests","resolveReactRequest","INTERACTIVE","NATIVE","setPresentationHostFunction","setClipPresentation","beginInteractionHostFunction","beginInteraction","animateTimingHostFunction","animateTiming","animateSpringHostFunction","animateSpring","animateKeyframesHostFunction","animateKeyframes","rejectAnimationHostFunction","rejectAnimation","cancelAnimationHostFunction","cancelAnimation","destroyDriverHostFunction","destroyDriver","resolver","globalThis","__smoothClipPinnedResolver","reduceMotionCode","value","animationIsFinite","target","animation","type","Number","isFinite","duration","controlPoints","every","mass","stiffness","damping","initialVelocity","frames","length","previousOffset","frame","offset","presentation","presentationFromNative","values","fallback","clip","x","y","width","height","radius","contentTranslateX","contentTranslateY","flattenedKeyframes","push","uiOnly","Error","useSmoothClipDriver","initialValue","options","initialPresentation","ownership","suppressDeliveries","activeAnimationId","scalarsStale","callbackRef","onAnimationComplete","driverRef","current","driverId","reduceMotion","seedPresentation","next","beginOnUI","setOnUI","setScalarsOnUI","animateOnUI","scalarsWereStale","hasInteractiveStart","start","startClip","targetClip","animationId","x1","y1","x2","y2","Math","max","inheritVelocity","undefined","cancelOnUI","behavior","driver","kind","ui","set","setScalars","animateTo","cancel","react","requestId","promise","result","currentDriver","state","subscription","onClipAnimationComplete","finished","source","listenerId","nativeDriverId","owner","suppressed","active","stale","setter","last","deliver","addListener","remove","destroy","removeListener"],"sourceRoot":"../../src","sources":["drivers.ios.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","useSharedValue","isRNRuntime","scheduleOnRN","scheduleOnUI","NativeSmoothClipModule","allocateDriverId","attachDriverState","createDriverState","detachDriverState","getDriverState","setDriverState","completeNativeAnimation","synchronizeNativeCompletion","clipPresentationEquals","createClipPresentation","isFiniteClipPresentation","createReactRequest","rejectDriverRequests","resolveReactRequest","INTERACTIVE","NATIVE","setPresentationHostFunction","setClipPresentation","beginInteractionHostFunction","beginInteraction","animateTimingHostFunction","animateTiming","animateSpringHostFunction","animateSpring","animateKeyframesHostFunction","animateKeyframes","rejectAnimationHostFunction","rejectAnimation","cancelAnimationHostFunction","cancelAnimation","destroyDriverHostFunction","destroyDriver","resolver","globalThis","__smoothClipPinnedResolver","reduceMotionCode","value","animationIsFinite","target","animation","from","undefined","type","Number","isFinite","duration","controlPoints","every","mass","stiffness","damping","initialVelocity","frames","length","previousOffset","frame","offset","presentation","presentationFromNative","values","fallback","clip","x","y","width","height","radius","contentTranslateX","contentTranslateY","flattenedKeyframes","push","uiOnly","Error","useSmoothClipDriver","initialValue","options","initialPresentation","ownership","suppressDeliveries","activeAnimationId","scalarsStale","callbackRef","onAnimationComplete","driverRef","current","driverId","reduceMotion","seedPresentation","next","beginOnUI","setOnUI","setScalarsOnUI","animateOnUI","scalarsWereStale","hasInteractiveStart","start","startClip","targetClip","animationId","x1","y1","x2","y2","Math","max","inheritVelocity","cancelOnUI","behavior","driver","kind","ui","set","setScalars","animateTo","cancel","react","requestId","promise","result","currentDriver","state","subscription","onClipAnimationComplete","finished","source","listenerId","nativeDriverId","owner","suppressed","active","stale","setter","last","deliver","addListener","remove","destroy","removeListener"],"sourceRoot":"../../src","sources":["drivers.ios.ts"],"mappings":"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","ignoreList":[]}
|
package/lib/module/drivers.js
CHANGED
|
@@ -19,6 +19,9 @@ function toReanimatedReduceMotion(value) {
|
|
|
19
19
|
function animationIsFinite(animation) {
|
|
20
20
|
'worklet';
|
|
21
21
|
|
|
22
|
+
if (animation.from !== undefined && !isFiniteClipPresentation(animation.from)) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
22
25
|
if (animation.type === 'timing') {
|
|
23
26
|
return Number.isFinite(animation.duration) && animation.controlPoints.every(Number.isFinite);
|
|
24
27
|
}
|
|
@@ -113,6 +116,11 @@ export function useSmoothClipDriver(initialValue, options = {}) {
|
|
|
113
116
|
scheduleOnRN(finishFallback, driverId, animationId, false);
|
|
114
117
|
return animationId;
|
|
115
118
|
}
|
|
119
|
+
if (animation.from !== undefined) {
|
|
120
|
+
// Fused explicit start: on the fallback driver the setScalars hot
|
|
121
|
+
// path is a plain presentation write, so the desugar is the same.
|
|
122
|
+
presentation.value = animation.from;
|
|
123
|
+
}
|
|
116
124
|
activeAnimationId.value = animationId;
|
|
117
125
|
animationStart.value = presentation.value;
|
|
118
126
|
latestTarget.value = next;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["useEffect","useRef","cancelAnimation","cancelReanimatedAnimation","Easing","ReduceMotion","useAnimatedReaction","useSharedValue","withSpring","withTiming","scheduleOnRN","scheduleOnUI","allocateDriverId","attachDriverState","createDriverState","deliverDriverCompletion","detachDriverState","finishDriverAnimation","getDriverState","setDriverState","snapshotDriverViews","createClipPresentation","clipPresentationEquals","isFiniteClipPresentation","createReactRequest","rejectDriverRequests","resolveReactRequest","toReanimatedReduceMotion","value","Always","Never","System","animationIsFinite","animation","type","Number","isFinite","duration","controlPoints","every","mass","stiffness","damping","initialVelocity","previousOffset","frames","length","frame","offset","presentation","interpolatePresentation","from","to","progress","mix","start","end","clip","x","y","width","height","radius","contentTranslateX","contentTranslateY","finishFallback","driverId","animationId","finished","useSmoothClipDriver","initialValue","options","initialPresentation","activeAnimationId","nextAnimationId","latestTarget","animationStart","animationProgress","keyframes","callbackRef","onAnimationComplete","driverRef","current","upperIndex","lower","upper","span","localProgress","Math","min","max","reduceMotion","beginOnUI","setOnUI","next","animateOnUI","onComplete","x1","y1","x2","y2","easing","bezier","configuredVelocity","velocity","linear","cancelOnUI","behavior","setScalarsOnUI","driver","kind","ui","beginInteraction","set","setScalars","animateTo","cancel","react","requestId","promise","result","undefined","currentDriver","state"],"sourceRoot":"../../src","sources":["drivers.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["useEffect","useRef","cancelAnimation","cancelReanimatedAnimation","Easing","ReduceMotion","useAnimatedReaction","useSharedValue","withSpring","withTiming","scheduleOnRN","scheduleOnUI","allocateDriverId","attachDriverState","createDriverState","deliverDriverCompletion","detachDriverState","finishDriverAnimation","getDriverState","setDriverState","snapshotDriverViews","createClipPresentation","clipPresentationEquals","isFiniteClipPresentation","createReactRequest","rejectDriverRequests","resolveReactRequest","toReanimatedReduceMotion","value","Always","Never","System","animationIsFinite","animation","from","undefined","type","Number","isFinite","duration","controlPoints","every","mass","stiffness","damping","initialVelocity","previousOffset","frames","length","frame","offset","presentation","interpolatePresentation","to","progress","mix","start","end","clip","x","y","width","height","radius","contentTranslateX","contentTranslateY","finishFallback","driverId","animationId","finished","useSmoothClipDriver","initialValue","options","initialPresentation","activeAnimationId","nextAnimationId","latestTarget","animationStart","animationProgress","keyframes","callbackRef","onAnimationComplete","driverRef","current","upperIndex","lower","upper","span","localProgress","Math","min","max","reduceMotion","beginOnUI","setOnUI","next","animateOnUI","onComplete","x1","y1","x2","y2","easing","bezier","configuredVelocity","velocity","linear","cancelOnUI","behavior","setScalarsOnUI","driver","kind","ui","beginInteraction","set","setScalars","animateTo","cancel","react","requestId","promise","result","currentDriver","state"],"sourceRoot":"../../src","sources":["drivers.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Exact cubic-Bézier control points for the standard polynomial easings, for
|
|
5
|
+
* use as `TimingClipAnimation.controlPoints`.
|
|
6
|
+
*
|
|
7
|
+
* Native transitions and a parallel Reanimated animation (content driven by
|
|
8
|
+
* `withTiming` alongside a native `animateTo`) only stay in sync when both
|
|
9
|
+
* sides run the identical curve. Each entry below is the exact single-Bézier
|
|
10
|
+
* form of the matching Reanimated easing — not an approximation — so pairing
|
|
11
|
+
* e.g. `Easing.out(Easing.cubic)` with `ClipEasings.easeOutCubic` is
|
|
12
|
+
* mathematically lossless:
|
|
13
|
+
*
|
|
14
|
+
* - `linear` ↔ `Easing.linear`
|
|
15
|
+
* - `easeInQuad` ↔ `Easing.in(Easing.quad)`
|
|
16
|
+
* - `easeOutQuad` ↔ `Easing.out(Easing.quad)`
|
|
17
|
+
* - `easeInCubic` ↔ `Easing.in(Easing.cubic)`
|
|
18
|
+
* - `easeOutCubic` ↔ `Easing.out(Easing.cubic)`
|
|
19
|
+
*
|
|
20
|
+
* With x-control-points at 1/3 and 2/3 the Bézier's x(t) is the identity, so
|
|
21
|
+
* y(t) is the easing polynomial itself (e.g. `easeOutCubic`: y = 1 − (1−t)³).
|
|
22
|
+
*
|
|
23
|
+
* `Easing.inOut(Easing.cubic)` (and the other `inOut` polynomials) are
|
|
24
|
+
* piecewise and have NO exact single-Bézier form — for those, define one
|
|
25
|
+
* `Easing.bezier(x1, y1, x2, y2)` and pass the same four numbers as
|
|
26
|
+
* `controlPoints` so both sides share the same (approximated) curve.
|
|
27
|
+
*/
|
|
28
|
+
export const ClipEasings = {
|
|
29
|
+
linear: [0, 0, 1, 1],
|
|
30
|
+
easeInQuad: [1 / 3, 0, 2 / 3, 1 / 3],
|
|
31
|
+
easeOutQuad: [1 / 3, 2 / 3, 2 / 3, 1],
|
|
32
|
+
easeInCubic: [1 / 3, 0, 2 / 3, 0],
|
|
33
|
+
easeOutCubic: [1 / 3, 1, 2 / 3, 1]
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=easings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["ClipEasings","linear","easeInQuad","easeOutQuad","easeInCubic","easeOutCubic"],"sourceRoot":"../../src","sources":["easings.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMA,WAAW,GAAG;EACzBC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;EACpBC,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACpCC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACrCC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;EACjCC,YAAY,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;AACnC,CAA8E","ignoreList":[]}
|
package/lib/module/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export { SmoothClipView } from './SmoothClipView';
|
|
4
4
|
export { useSmoothClipDriver } from './drivers';
|
|
5
|
+
export { ClipEasings } from "./easings.js";
|
|
5
6
|
export { normalizeClipGeometry } from "./geometry.js";
|
|
6
7
|
export { createClipPresentation } from "./geometry.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SmoothClipView","useSmoothClipDriver","normalizeClipGeometry","createClipPresentation"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,kBAAkB;AAEjD,SAASC,mBAAmB,QAAQ,WAAW;AAa/C,SAASC,qBAAqB,QAAQ,eAAY;AAClD,SAASC,sBAAsB,QAAQ,eAAY","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["SmoothClipView","useSmoothClipDriver","ClipEasings","normalizeClipGeometry","createClipPresentation"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,kBAAkB;AAEjD,SAASC,mBAAmB,QAAQ,WAAW;AAa/C,SAASC,WAAW,QAAQ,cAAW;AACvC,SAASC,qBAAqB,QAAQ,eAAY;AAClD,SAASC,sBAAsB,QAAQ,eAAY","ignoreList":[]}
|
package/lib/module/index.web.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
export { SmoothClipView } from "./SmoothClipView.web.js";
|
|
4
4
|
export { useSmoothClipDriver } from './drivers';
|
|
5
|
+
export { ClipEasings } from "./easings.js";
|
|
5
6
|
export { normalizeClipGeometry } from "./geometry.js";
|
|
6
7
|
export { createClipPresentation } from "./geometry.js";
|
|
7
8
|
//# sourceMappingURL=index.web.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["SmoothClipView","useSmoothClipDriver","normalizeClipGeometry","createClipPresentation"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,yBAAsB;AAErD,SAASC,mBAAmB,QAAQ,WAAW;AAa/C,SAASC,qBAAqB,QAAQ,eAAY;AAClD,SAASC,sBAAsB,QAAQ,eAAY","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["SmoothClipView","useSmoothClipDriver","ClipEasings","normalizeClipGeometry","createClipPresentation"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,yBAAsB;AAErD,SAASC,mBAAmB,QAAQ,WAAW;AAa/C,SAASC,WAAW,QAAQ,cAAW;AACvC,SAASC,qBAAqB,QAAQ,eAAY;AAClD,SAASC,sBAAsB,QAAQ,eAAY","ignoreList":[]}
|
|
@@ -1,19 +1,44 @@
|
|
|
1
1
|
import type { SharedValue } from 'react-native-reanimated';
|
|
2
2
|
import type { SmoothClipPresentation } from './geometry.js';
|
|
3
3
|
export type ClipReduceMotion = 'system' | 'always' | 'never';
|
|
4
|
-
|
|
4
|
+
/** Options shared by every animation kind. */
|
|
5
|
+
type ClipAnimationBase = Readonly<{
|
|
6
|
+
/**
|
|
7
|
+
* Explicit start: fuses a `setScalars(from…)` take-ownership hot write
|
|
8
|
+
* immediately before the animation, so native starts from exactly this
|
|
9
|
+
* presentation instead of its last delivered value. Use at a gesture
|
|
10
|
+
* release when the freshest sample (e.g. the UP event's position) never
|
|
11
|
+
* reached native — a gated per-frame reaction may not have flushed it.
|
|
12
|
+
* Also re-grabs from a running animation (which an implicit interactive
|
|
13
|
+
* start would silently skip). Non-finite `from` rejects the whole call.
|
|
14
|
+
* `driver.presentation.value` is not written from `from` (it stays stale
|
|
15
|
+
* until success sets it to the target). Against a held pending-animation
|
|
16
|
+
* latch the seed is dropped by design — latch intent wins.
|
|
17
|
+
*
|
|
18
|
+
* Keyframes interpolate absolutely, so pass `frames[0].presentation` —
|
|
19
|
+
* the seed renders it before the first animation frame, making the
|
|
20
|
+
* handoff continuous.
|
|
21
|
+
*
|
|
22
|
+
* iOS note: keyframes start exactly at `from` (frame 0 travels in-band);
|
|
23
|
+
* timing/spring sample their Core Animation from-value off the
|
|
24
|
+
* presentation layer — the last committed frame, at most one frame behind
|
|
25
|
+
* `from` — identical to the two-call pattern this option desugars to.
|
|
26
|
+
*/
|
|
27
|
+
from?: SmoothClipPresentation;
|
|
28
|
+
}>;
|
|
29
|
+
export type TimingClipAnimation = ClipAnimationBase & Readonly<{
|
|
5
30
|
type: 'timing';
|
|
6
31
|
duration: number;
|
|
7
32
|
controlPoints: readonly [number, number, number, number];
|
|
8
33
|
}>;
|
|
9
|
-
export type SpringClipAnimation = Readonly<{
|
|
34
|
+
export type SpringClipAnimation = ClipAnimationBase & Readonly<{
|
|
10
35
|
type: 'spring';
|
|
11
36
|
mass?: number;
|
|
12
37
|
stiffness?: number;
|
|
13
38
|
damping?: number;
|
|
14
39
|
initialVelocity?: number | 'inherit';
|
|
15
40
|
}>;
|
|
16
|
-
export type KeyframedClipAnimation = Readonly<{
|
|
41
|
+
export type KeyframedClipAnimation = ClipAnimationBase & Readonly<{
|
|
17
42
|
type: 'keyframes';
|
|
18
43
|
duration: number;
|
|
19
44
|
frames: readonly Readonly<{
|
|
@@ -41,6 +66,9 @@ export type SmoothClipUIControls = Readonly<{
|
|
|
41
66
|
* `beginInteraction()` remains the source of truth for visible geometry.
|
|
42
67
|
* Do not interleave with `presentation.value` writes on the same driver —
|
|
43
68
|
* the listener's duplicate suppression may skip a later equal value.
|
|
69
|
+
* To hand off into an animation from a fresher value than the last hot
|
|
70
|
+
* write, pass the geometry as `animation.from` to `animateTo` — it fuses
|
|
71
|
+
* this call and the handoff into one.
|
|
44
72
|
*/
|
|
45
73
|
setScalars(x: number, y: number, width: number, height: number, radius: number, contentTranslateX: number, contentTranslateY: number): void;
|
|
46
74
|
animateTo(presentation: SmoothClipPresentation, animation: SmoothClipAnimation): number;
|
|
@@ -58,4 +86,5 @@ export type SmoothClipDriver = Readonly<{
|
|
|
58
86
|
ui: SmoothClipUIControls;
|
|
59
87
|
react: SmoothClipReactControls;
|
|
60
88
|
}>;
|
|
89
|
+
export {};
|
|
61
90
|
//# sourceMappingURL=driverTypes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driverTypes.d.ts","sourceRoot":"","sources":["../../../src/driverTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAY,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"driverTypes.d.ts","sourceRoot":"","sources":["../../../src/driverTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drivers.d.ts","sourceRoot":"","sources":["../../../src/drivers.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAe,CAAC;AAYvB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,eAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"drivers.d.ts","sourceRoot":"","sources":["../../../src/drivers.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAe,CAAC;AAYvB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,eAAY,CAAC;AA6FpB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,GAAG,sBAAsB,EACnD,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA+RlB;AAED,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drivers.ios.d.ts","sourceRoot":"","sources":["../../../src/drivers.ios.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAe,CAAC;AAavB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,eAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"drivers.ios.d.ts","sourceRoot":"","sources":["../../../src/drivers.ios.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,sBAAsB,EAEtB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,kBAAe,CAAC;AAavB,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC5B,MAAM,eAAY,CAAC;AAiJpB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,GAAG,sBAAsB,EACnD,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CAyflB;AAED,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact cubic-Bézier control points for the standard polynomial easings, for
|
|
3
|
+
* use as `TimingClipAnimation.controlPoints`.
|
|
4
|
+
*
|
|
5
|
+
* Native transitions and a parallel Reanimated animation (content driven by
|
|
6
|
+
* `withTiming` alongside a native `animateTo`) only stay in sync when both
|
|
7
|
+
* sides run the identical curve. Each entry below is the exact single-Bézier
|
|
8
|
+
* form of the matching Reanimated easing — not an approximation — so pairing
|
|
9
|
+
* e.g. `Easing.out(Easing.cubic)` with `ClipEasings.easeOutCubic` is
|
|
10
|
+
* mathematically lossless:
|
|
11
|
+
*
|
|
12
|
+
* - `linear` ↔ `Easing.linear`
|
|
13
|
+
* - `easeInQuad` ↔ `Easing.in(Easing.quad)`
|
|
14
|
+
* - `easeOutQuad` ↔ `Easing.out(Easing.quad)`
|
|
15
|
+
* - `easeInCubic` ↔ `Easing.in(Easing.cubic)`
|
|
16
|
+
* - `easeOutCubic` ↔ `Easing.out(Easing.cubic)`
|
|
17
|
+
*
|
|
18
|
+
* With x-control-points at 1/3 and 2/3 the Bézier's x(t) is the identity, so
|
|
19
|
+
* y(t) is the easing polynomial itself (e.g. `easeOutCubic`: y = 1 − (1−t)³).
|
|
20
|
+
*
|
|
21
|
+
* `Easing.inOut(Easing.cubic)` (and the other `inOut` polynomials) are
|
|
22
|
+
* piecewise and have NO exact single-Bézier form — for those, define one
|
|
23
|
+
* `Easing.bezier(x1, y1, x2, y2)` and pass the same four numbers as
|
|
24
|
+
* `controlPoints` so both sides share the same (approximated) curve.
|
|
25
|
+
*/
|
|
26
|
+
export declare const ClipEasings: {
|
|
27
|
+
readonly linear: readonly [0, 0, 1, 1];
|
|
28
|
+
readonly easeInQuad: readonly [number, 0, number, number];
|
|
29
|
+
readonly easeOutQuad: readonly [number, number, number, 1];
|
|
30
|
+
readonly easeInCubic: readonly [number, 0, number, 0];
|
|
31
|
+
readonly easeOutCubic: readonly [number, 1, number, 1];
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=easings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"easings.d.ts","sourceRoot":"","sources":["../../../src/easings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,WAAW;;;;;;CAMsD,CAAC"}
|
|
@@ -2,6 +2,7 @@ export { SmoothClipView } from './SmoothClipView';
|
|
|
2
2
|
export type { SmoothClipViewProps } from './SmoothClipView';
|
|
3
3
|
export { useSmoothClipDriver } from './drivers';
|
|
4
4
|
export type { ClipAnimationResult, ClipReduceMotion, KeyframedClipAnimation, SmoothClipDriver, SmoothClipDriverOptions, SmoothClipReactControls, SmoothClipUIControls, SmoothClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './driverTypes.js';
|
|
5
|
+
export { ClipEasings } from './easings.js';
|
|
5
6
|
export { normalizeClipGeometry } from './geometry.js';
|
|
6
7
|
export { createClipPresentation } from './geometry.js';
|
|
7
8
|
export type { ClipBounds, ClipGeometry, SmoothClipPresentation, } from './geometry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAY,CAAC;AACpD,YAAY,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAW,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAY,CAAC;AACpD,YAAY,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
|
|
@@ -2,6 +2,7 @@ export { SmoothClipView } from './SmoothClipView.web.js';
|
|
|
2
2
|
export type { SmoothClipViewProps } from './SmoothClipView.web.js';
|
|
3
3
|
export { useSmoothClipDriver } from './drivers';
|
|
4
4
|
export type { ClipAnimationResult, ClipReduceMotion, KeyframedClipAnimation, SmoothClipDriver, SmoothClipDriverOptions, SmoothClipReactControls, SmoothClipUIControls, SmoothClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './driverTypes.js';
|
|
5
|
+
export { ClipEasings } from './easings.js';
|
|
5
6
|
export { normalizeClipGeometry } from './geometry.js';
|
|
6
7
|
export { createClipPresentation } from './geometry.js';
|
|
7
8
|
export type { ClipBounds, ClipGeometry, SmoothClipPresentation, } from './geometry.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAsB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAY,CAAC;AACpD,YAAY,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.web.d.ts","sourceRoot":"","sources":["../../../src/index.web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAsB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAW,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,eAAY,CAAC;AACpD,YAAY,EACV,UAAU,EACV,YAAY,EACZ,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
|
package/package.json
CHANGED
package/src/driverTypes.ts
CHANGED
|
@@ -3,28 +3,57 @@ import type { SmoothClipPresentation } from './geometry';
|
|
|
3
3
|
|
|
4
4
|
export type ClipReduceMotion = 'system' | 'always' | 'never';
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
/** Options shared by every animation kind. */
|
|
7
|
+
type ClipAnimationBase = Readonly<{
|
|
8
|
+
/**
|
|
9
|
+
* Explicit start: fuses a `setScalars(from…)` take-ownership hot write
|
|
10
|
+
* immediately before the animation, so native starts from exactly this
|
|
11
|
+
* presentation instead of its last delivered value. Use at a gesture
|
|
12
|
+
* release when the freshest sample (e.g. the UP event's position) never
|
|
13
|
+
* reached native — a gated per-frame reaction may not have flushed it.
|
|
14
|
+
* Also re-grabs from a running animation (which an implicit interactive
|
|
15
|
+
* start would silently skip). Non-finite `from` rejects the whole call.
|
|
16
|
+
* `driver.presentation.value` is not written from `from` (it stays stale
|
|
17
|
+
* until success sets it to the target). Against a held pending-animation
|
|
18
|
+
* latch the seed is dropped by design — latch intent wins.
|
|
19
|
+
*
|
|
20
|
+
* Keyframes interpolate absolutely, so pass `frames[0].presentation` —
|
|
21
|
+
* the seed renders it before the first animation frame, making the
|
|
22
|
+
* handoff continuous.
|
|
23
|
+
*
|
|
24
|
+
* iOS note: keyframes start exactly at `from` (frame 0 travels in-band);
|
|
25
|
+
* timing/spring sample their Core Animation from-value off the
|
|
26
|
+
* presentation layer — the last committed frame, at most one frame behind
|
|
27
|
+
* `from` — identical to the two-call pattern this option desugars to.
|
|
28
|
+
*/
|
|
29
|
+
from?: SmoothClipPresentation;
|
|
10
30
|
}>;
|
|
11
31
|
|
|
12
|
-
export type
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}>;
|
|
32
|
+
export type TimingClipAnimation = ClipAnimationBase &
|
|
33
|
+
Readonly<{
|
|
34
|
+
type: 'timing';
|
|
35
|
+
duration: number;
|
|
36
|
+
controlPoints: readonly [number, number, number, number];
|
|
37
|
+
}>;
|
|
19
38
|
|
|
20
|
-
export type
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}>;
|
|
39
|
+
export type SpringClipAnimation = ClipAnimationBase &
|
|
40
|
+
Readonly<{
|
|
41
|
+
type: 'spring';
|
|
42
|
+
mass?: number;
|
|
43
|
+
stiffness?: number;
|
|
44
|
+
damping?: number;
|
|
45
|
+
initialVelocity?: number | 'inherit';
|
|
46
|
+
}>;
|
|
47
|
+
|
|
48
|
+
export type KeyframedClipAnimation = ClipAnimationBase &
|
|
49
|
+
Readonly<{
|
|
50
|
+
type: 'keyframes';
|
|
51
|
+
duration: number;
|
|
52
|
+
frames: readonly Readonly<{
|
|
53
|
+
offset: number;
|
|
54
|
+
presentation: SmoothClipPresentation;
|
|
55
|
+
}>[];
|
|
56
|
+
}>;
|
|
28
57
|
|
|
29
58
|
export type SmoothClipAnimation =
|
|
30
59
|
TimingClipAnimation | SpringClipAnimation | KeyframedClipAnimation;
|
|
@@ -50,6 +79,9 @@ export type SmoothClipUIControls = Readonly<{
|
|
|
50
79
|
* `beginInteraction()` remains the source of truth for visible geometry.
|
|
51
80
|
* Do not interleave with `presentation.value` writes on the same driver —
|
|
52
81
|
* the listener's duplicate suppression may skip a later equal value.
|
|
82
|
+
* To hand off into an animation from a fresher value than the last hot
|
|
83
|
+
* write, pass the geometry as `animation.from` to `animateTo` — it fuses
|
|
84
|
+
* this call and the handoff into one.
|
|
53
85
|
*/
|
|
54
86
|
setScalars(
|
|
55
87
|
x: number,
|
package/src/drivers.ios.ts
CHANGED
|
@@ -77,6 +77,14 @@ function animationIsFinite(
|
|
|
77
77
|
animation: SmoothClipAnimation
|
|
78
78
|
): boolean {
|
|
79
79
|
'worklet';
|
|
80
|
+
if (
|
|
81
|
+
animation.from !== undefined &&
|
|
82
|
+
!isFiniteClipPresentation(animation.from)
|
|
83
|
+
) {
|
|
84
|
+
// Silently dropping an invalid explicit start would re-open the exact
|
|
85
|
+
// stale-start handoff `from` exists to close — reject the whole call.
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
80
88
|
if (animation.type === 'timing') {
|
|
81
89
|
return (
|
|
82
90
|
Number.isFinite(animation.duration) &&
|
|
@@ -281,6 +289,24 @@ export function useSmoothClipDriver(
|
|
|
281
289
|
return rejectAnimationHostFunction(driverId);
|
|
282
290
|
}
|
|
283
291
|
|
|
292
|
+
const from = animation.from;
|
|
293
|
+
if (from !== undefined) {
|
|
294
|
+
// Fused hot write: exactly setScalars(from…) issued immediately
|
|
295
|
+
// before the handoff, so native's latest value — the animation
|
|
296
|
+
// start below — is the caller's explicit presentation. Also
|
|
297
|
+
// re-grabs from a running animation, which the implicit
|
|
298
|
+
// interactive-start path would silently skip.
|
|
299
|
+
setScalarsOnUI(
|
|
300
|
+
from.clip.x,
|
|
301
|
+
from.clip.y,
|
|
302
|
+
from.clip.width,
|
|
303
|
+
from.clip.height,
|
|
304
|
+
from.clip.radius,
|
|
305
|
+
from.contentTranslateX,
|
|
306
|
+
from.contentTranslateY
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
|
|
284
310
|
// After a setScalars hot write the SharedValue no longer matches what
|
|
285
311
|
// is on screen; passing it as the start would snap the animation back.
|
|
286
312
|
// Without an interactive start, native resolves the start from its own
|
package/src/drivers.ts
CHANGED
|
@@ -55,6 +55,12 @@ function toReanimatedReduceMotion(value: ClipReduceMotion): ReduceMotion {
|
|
|
55
55
|
|
|
56
56
|
function animationIsFinite(animation: SmoothClipAnimation): boolean {
|
|
57
57
|
'worklet';
|
|
58
|
+
if (
|
|
59
|
+
animation.from !== undefined &&
|
|
60
|
+
!isFiniteClipPresentation(animation.from)
|
|
61
|
+
) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
58
64
|
if (animation.type === 'timing') {
|
|
59
65
|
return (
|
|
60
66
|
Number.isFinite(animation.duration) &&
|
|
@@ -213,6 +219,11 @@ export function useSmoothClipDriver(
|
|
|
213
219
|
return animationId;
|
|
214
220
|
}
|
|
215
221
|
|
|
222
|
+
if (animation.from !== undefined) {
|
|
223
|
+
// Fused explicit start: on the fallback driver the setScalars hot
|
|
224
|
+
// path is a plain presentation write, so the desugar is the same.
|
|
225
|
+
presentation.value = animation.from;
|
|
226
|
+
}
|
|
216
227
|
activeAnimationId.value = animationId;
|
|
217
228
|
animationStart.value = presentation.value;
|
|
218
229
|
latestTarget.value = next;
|
package/src/easings.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact cubic-Bézier control points for the standard polynomial easings, for
|
|
3
|
+
* use as `TimingClipAnimation.controlPoints`.
|
|
4
|
+
*
|
|
5
|
+
* Native transitions and a parallel Reanimated animation (content driven by
|
|
6
|
+
* `withTiming` alongside a native `animateTo`) only stay in sync when both
|
|
7
|
+
* sides run the identical curve. Each entry below is the exact single-Bézier
|
|
8
|
+
* form of the matching Reanimated easing — not an approximation — so pairing
|
|
9
|
+
* e.g. `Easing.out(Easing.cubic)` with `ClipEasings.easeOutCubic` is
|
|
10
|
+
* mathematically lossless:
|
|
11
|
+
*
|
|
12
|
+
* - `linear` ↔ `Easing.linear`
|
|
13
|
+
* - `easeInQuad` ↔ `Easing.in(Easing.quad)`
|
|
14
|
+
* - `easeOutQuad` ↔ `Easing.out(Easing.quad)`
|
|
15
|
+
* - `easeInCubic` ↔ `Easing.in(Easing.cubic)`
|
|
16
|
+
* - `easeOutCubic` ↔ `Easing.out(Easing.cubic)`
|
|
17
|
+
*
|
|
18
|
+
* With x-control-points at 1/3 and 2/3 the Bézier's x(t) is the identity, so
|
|
19
|
+
* y(t) is the easing polynomial itself (e.g. `easeOutCubic`: y = 1 − (1−t)³).
|
|
20
|
+
*
|
|
21
|
+
* `Easing.inOut(Easing.cubic)` (and the other `inOut` polynomials) are
|
|
22
|
+
* piecewise and have NO exact single-Bézier form — for those, define one
|
|
23
|
+
* `Easing.bezier(x1, y1, x2, y2)` and pass the same four numbers as
|
|
24
|
+
* `controlPoints` so both sides share the same (approximated) curve.
|
|
25
|
+
*/
|
|
26
|
+
export const ClipEasings = {
|
|
27
|
+
linear: [0, 0, 1, 1],
|
|
28
|
+
easeInQuad: [1 / 3, 0, 2 / 3, 1 / 3],
|
|
29
|
+
easeOutQuad: [1 / 3, 2 / 3, 2 / 3, 1],
|
|
30
|
+
easeInCubic: [1 / 3, 0, 2 / 3, 0],
|
|
31
|
+
easeOutCubic: [1 / 3, 1, 2 / 3, 1],
|
|
32
|
+
} as const satisfies Record<string, readonly [number, number, number, number]>;
|
package/src/index.ts
CHANGED
package/src/index.web.ts
CHANGED