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 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. Do not interleave
179
- `setScalars` with `presentation.value` writes on the same driver.
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; springs accept mass, stiffness, damping, and an
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 `0` and one `finished: false` completion
200
- is delivered). Unmounting the last host mid-flight does not complete the
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.
@@ -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)
@@ -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
- bool hasPreviousSample = false;
79
- bool hasLatestSample = false;
80
- Presentation previousSample{{0, 0, 0, 0, 0}, 0, 0};
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
- recordInteractiveSample(state, presentation);
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.hasPreviousSample = false;
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
- const double elapsedS = nowSeconds() - animation.startedAtS;
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
@@ -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
- BOOL _hasPreviousInteractiveSample;
86
- BOOL _hasInteractiveSample;
87
- CGRect _previousInteractiveRect;
88
- CGRect _interactiveRect;
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
- _hasPreviousInteractiveSample = NO;
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
- if (_hasInteractiveSample &&
309
- CGRectEqualToRect(_interactiveRect, rect) &&
310
- _interactiveRadius == radius &&
311
- CGPointEqualToPoint(
312
- _interactiveContentTranslation, contentTranslation)) {
313
- return;
314
- }
315
- if (_hasInteractiveSample) {
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
- if (!_hasPreviousInteractiveSample || !_hasInteractiveSample) return 0;
334
- const CFTimeInterval elapsed =
335
- _interactiveTime - _previousInteractiveTime;
336
- if (elapsed <= 0 || CACurrentMediaTime() - _interactiveTime > 0.1) return 0;
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
- _hasPreviousInteractiveSample = NO;
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":";;AAAA,SAASA,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACzC,SAASC,cAAc,QAA0B,yBAAyB;AAC1E,SAASC,WAAW,EAAEC,YAAY,EAAEC,YAAY,QAAQ,uBAAuB;AAC/E,OAAOC,sBAAsB,MAAM,oBAAoB;AAUvD,SACEC,gBAAgB,EAChBC,iBAAiB,EACjBC,iBAAiB,EACjBC,iBAAiB,EACjBC,cAAc,EACdC,cAAc,QACT,kBAAe;AACtB,SACEC,uBAAuB,EACvBC,2BAA2B,QACtB,uBAAoB;AAC3B,SACEC,sBAAsB,EACtBC,sBAAsB,EACtBC,wBAAwB,QAGnB,eAAY;AACnB,SACEC,kBAAkB,EAClBC,oBAAoB,EACpBC,mBAAmB,QACd,oBAAiB;AAExB,MAAMC,WAAW,GAAG,CAAC;AACrB,MAAMC,MAAM,GAAG,CAAC;AAEhB,MAAMC,2BAA2B,GAAGjB,sBAAsB,CAACkB,mBAAmB;AAC9E,MAAMC,4BAA4B,GAAGnB,sBAAsB,CAACoB,gBAAgB;AAC5E,MAAMC,yBAAyB,GAAGrB,sBAAsB,CAACsB,aAAa;AACtE,MAAMC,yBAAyB,GAAGvB,sBAAsB,CAACwB,aAAa;AACtE,MAAMC,4BAA4B,GAAGzB,sBAAsB,CAAC0B,gBAAgB;AAC5E,MAAMC,2BAA2B,GAAG3B,sBAAsB,CAAC4B,eAAe;AAC1E,MAAMC,2BAA2B,GAAG7B,sBAAsB,CAAC8B,eAAe;AAC1E,MAAMC,yBAAyB,GAAG/B,sBAAsB,CAACgC,aAAa;;AAEtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAjC,YAAY,CAAEkC,QAAoC,IAAK;EACrD,SAAS;;EACRC,UAAU,CAA6BC,0BAA0B,GAAGF,QAAQ;AAC/E,CAAC,EAAEnB,mBAAmB,CAAC;AAEvB,SAASsB,gBAAgBA,CAACC,KAAuB,EAAU;EACzD,QAAQA,KAAK;IACX,KAAK,QAAQ;MACX,OAAO,CAAC;IACV,KAAK,OAAO;MACV,OAAO,CAAC;IACV;MACE,OAAO,CAAC;EACZ;AACF;AAEA,SAASC,iBAAiBA,CACxBC,MAA8B,EAC9BC,SAA8B,EACrB;EACT,SAAS;;EACT,IAAIA,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;IAC/B,OACEC,MAAM,CAACC,QAAQ,CAACH,SAAS,CAACI,QAAQ,CAAC,IACnCJ,SAAS,CAACK,aAAa,CAACC,KAAK,CAACJ,MAAM,CAACC,QAAQ,CAAC;EAElD;EACA,IAAIH,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;IAC/B,OAAO,CACLD,SAAS,CAACO,IAAI,IAAI,CAAC,EACnBP,SAAS,CAACQ,SAAS,IAAI,GAAG,EAC1BR,SAAS,CAACS,OAAO,IAAI,EAAE,EACvBT,SAAS,CAACU,eAAe,KAAK,SAAS,GACnC,CAAC,GACAV,SAAS,CAACU,eAAe,IAAI,CAAE,CACrC,CAACJ,KAAK,CAACJ,MAAM,CAACC,QAAQ,CAAC;EAC1B;EACA,IAAI,CAACD,MAAM,CAACC,QAAQ,CAACH,SAAS,CAACI,QAAQ,CAAC,IAAIJ,SAAS,CAACW,MAAM,CAACC,MAAM,GAAG,CAAC,EAAE;IACvE,OAAO,KAAK;EACd;EACA,IAAIC,cAAc,GAAG,CAAC,CAAC;EACvB,KAAK,MAAMC,KAAK,IAAId,SAAS,CAACW,MAAM,EAAE;IACpC,IACE,CAACT,MAAM,CAACC,QAAQ,CAACW,KAAK,CAACC,MAAM,CAAC,IAC9BD,KAAK,CAACC,MAAM,GAAG,CAAC,IAChBD,KAAK,CAACC,MAAM,GAAG,CAAC,IAChBD,KAAK,CAACC,MAAM,IAAIF,cAAc,IAC9B,CAAC1C,wBAAwB,CAAC2C,KAAK,CAACE,YAAY,CAAC,EAC7C;MACA,OAAO,KAAK;IACd;IACAH,cAAc,GAAGC,KAAK,CAACC,MAAM;EAC/B;EACA,OACEf,SAAS,CAACW,MAAM,CAAC,CAAC,CAAC,EAAEI,MAAM,KAAK,CAAC,IACjCF,cAAc,KAAK,CAAC,IACpB5C,sBAAsB,CACpB+B,SAAS,CAACW,MAAM,CAACX,SAAS,CAACW,MAAM,CAACC,MAAM,GAAG,CAAC,CAAC,EAAEI,YAAY,IAAI,IAAI,EACnEjB,MACF,CAAC;AAEL;AAEA,SAASkB,sBAAsBA,CAC7BC,MAA6B,EAC7BC,QAAgC,EAChCJ,MAAM,GAAG,CAAC,EACc;EACxB,SAAS;;EACT,IAAIG,MAAM,CAACN,MAAM,GAAGG,MAAM,GAAG,CAAC,EAAE,OAAOI,QAAQ;EAC/C,MAAMH,YAAY,GAAG;IACnBI,IAAI,EAAE;MACJC,CAAC,EAAEH,MAAM,CAACH,MAAM,CAAW;MAC3BO,CAAC,EAAEJ,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MAC/BQ,KAAK,EAAEL,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MACnCS,MAAM,EAAEN,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;MACpCU,MAAM,EAAEP,MAAM,CAACH,MAAM,GAAG,CAAC;IAC3B,CAAC;IACDW,iBAAiB,EAAER,MAAM,CAACH,MAAM,GAAG,CAAC,CAAW;IAC/CY,iBAAiB,EAAET,MAAM,CAACH,MAAM,GAAG,CAAC;EACtC,CAAC;EACD,OAAO5C,wBAAwB,CAAC6C,YAAY,CAAC,GAAGA,YAAY,GAAGG,QAAQ;AACzE;AAEA,SAASS,kBAAkBA,CAAC5B,SAAiC,EAAY;EACvE,SAAS;;EACT,MAAMkB,MAAgB,GAAG,EAAE;EAC3B,KAAK,MAAMJ,KAAK,IAAId,SAAS,CAACW,MAAM,EAAE;IACpC,MAAM;MAAES,IAAI;MAAEM,iBAAiB;MAAEC;IAAkB,CAAC,GAAGb,KAAK,CAACE,YAAY;IACzEE,MAAM,CAACW,IAAI,CACTf,KAAK,CAACC,MAAM,EACZK,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBACF,CAAC;EACH;EACA,OAAOT,MAAM;AACf;AAEA,SAASY,MAAMA,CAAA,EAAU;EACvB,SAAS;;EACT,MAAM,IAAIC,KAAK,CACb,kGACF,CAAC;AACH;AAEA,OAAO,SAASC,mBAAmBA,CACjCC,YAAmD,EACnDC,OAAgC,GAAG,CAAC,CAAC,EACnB;EAClB,MAAMC,mBAAmB,GACvB,MAAM,IAAIF,YAAY,GAClBA,YAAY,GACZ/D,sBAAsB,CAAC+D,YAAY,CAAC;EAC1C,MAAMjB,YAAY,GAAG5D,cAAc,CAAC+E,mBAAmB,CAAC;EACxD,MAAMC,SAAS,GAAGhF,cAAc,CAACmB,WAAW,CAAC;EAC7C,MAAM8D,kBAAkB,GAAGjF,cAAc,CAAC,CAAC,CAAC;EAC5C,MAAMkF,iBAAiB,GAAGlF,cAAc,CAAC,CAAC,CAAC;EAC3C;EACA;EACA;EACA,MAAMmF,YAAY,GAAGnF,cAAc,CAAC,CAAC,CAAC;EACtC,MAAMoF,WAAW,GAAGrF,MAAM,CAAC+E,OAAO,CAACO,mBAAmB,CAAC;EACvD,MAAMC,SAAS,GAAGvF,MAAM,CAA0B,IAAI,CAAC;EACvDqF,WAAW,CAACG,OAAO,GAAGT,OAAO,CAACO,mBAAmB;EAEjD,IAAIC,SAAS,CAACC,OAAO,KAAK,IAAI,EAAE;IAC9B,MAAMC,QAAQ,GAAGnF,gBAAgB,CAAC,CAAC;IACnC,MAAMoF,YAAY,GAAGjD,gBAAgB,CAACsC,OAAO,CAACW,YAAY,IAAI,QAAQ,CAAC;IAEvE,MAAMC,gBAAgB,GAAIC,IAA4B,IAAK;MACzD,SAAS;;MACT,IAAI,CAAC9E,sBAAsB,CAAC+C,YAAY,CAACnB,KAAK,EAAEkD,IAAI,CAAC,EAAE;QACrDV,kBAAkB,CAACxC,KAAK,IAAI,CAAC;QAC7BmB,YAAY,CAACnB,KAAK,GAAGkD,IAAI;MAC3B;IACF,CAAC;IAED,MAAMC,SAAS,GAAGA,CAAA,KAA8B;MAC9C,SAAS;;MACT,MAAML,OAAO,GAAG1B,sBAAsB,CACpCtC,4BAA4B,CAACiE,QAAQ,CAAC,EACtC5B,YAAY,CAACnB,KACf,CAAC;MACDyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtBiD,gBAAgB,CAACH,OAAO,CAAC;MACzB,OAAOA,OAAO;IAChB,CAAC;IAED,MAAMM,OAAO,GAAIF,IAA4B,IAAW;MACtD,SAAS;;MACT,IAAI,CAAC5E,wBAAwB,CAAC4E,IAAI,CAAC,EAAE;MACrCT,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtB,MAAM;QAAEuB,IAAI;QAAEM,iBAAiB;QAAEC;MAAkB,CAAC,GAAGoB,IAAI;MAC3DtE,2BAA2B,CACzBmE,QAAQ,EACRxB,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBAAiB,EACjB,IACF,CAAC;MACDmB,gBAAgB,CAACC,IAAI,CAAC;IACxB,CAAC;IAED,MAAMG,cAAc,GAAGA,CACrB7B,CAAS,EACTC,CAAS,EACTC,KAAa,EACbC,MAAc,EACdC,MAAc,EACdC,iBAAyB,EACzBC,iBAAyB,KAChB;MACT,SAAS;;MACT,IACE,CAACzB,MAAM,CAACC,QAAQ,CAACkB,CAAC,CAAC,IACnB,CAACnB,MAAM,CAACC,QAAQ,CAACmB,CAAC,CAAC,IACnB,CAACpB,MAAM,CAACC,QAAQ,CAACoB,KAAK,CAAC,IACvB,CAACrB,MAAM,CAACC,QAAQ,CAACqB,MAAM,CAAC,IACxB,CAACtB,MAAM,CAACC,QAAQ,CAACsB,MAAM,CAAC,IACxB,CAACvB,MAAM,CAACC,QAAQ,CAACuB,iBAAiB,CAAC,IACnC,CAACxB,MAAM,CAACC,QAAQ,CAACwB,iBAAiB,CAAC,EACnC;QACA;MACF;MACA,IAAIW,iBAAiB,CAACzC,KAAK,KAAK,CAAC,EAAEyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC9D,IAAIuC,SAAS,CAACvC,KAAK,KAAKtB,WAAW,EAAE6D,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAClE,IAAIgE,YAAY,CAAC1C,KAAK,KAAK,CAAC,EAAE0C,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACpDpB,2BAA2B,CACzBmE,QAAQ,EACRvB,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBAAiB,EACjB,IACF,CAAC;IACH,CAAC;IAED,MAAMwB,WAAW,GAAGA,CAClBpD,MAA8B,EAC9BC,SAA8B,KACnB;MACX,SAAS;;MACT,IACE,CAAC7B,wBAAwB,CAAC4B,MAAM,CAAC,IACjC,CAACD,iBAAiB,CAACC,MAAM,EAAEC,SAAS,CAAC,EACrC;QACA,OAAOb,2BAA2B,CAACyD,QAAQ,CAAC;MAC9C;;MAEA;MACA;MACA;MACA;MACA,MAAMQ,gBAAgB,GAAGb,YAAY,CAAC1C,KAAK,KAAK,CAAC;MACjD,MAAMwD,mBAAmB,GACvBjB,SAAS,CAACvC,KAAK,KAAKtB,WAAW,IAAI,CAAC6E,gBAAgB;MACtD,MAAME,KAAK,GAAGtC,YAAY,CAACnB,KAAK;MAChCuC,SAAS,CAACvC,KAAK,GAAGrB,MAAM;MACxBwC,YAAY,CAACnB,KAAK,GAAGE,MAAM;MAC3BwC,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtB,MAAM0D,SAAS,GAAGD,KAAK,CAAClC,IAAI;MAC5B,MAAMoC,UAAU,GAAGzD,MAAM,CAACqB,IAAI;MAC9B,IAAIqC,WAAmB;MAEvB,IAAIzD,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;QAC/B,MAAM,CAACyD,EAAE,EAAEC,EAAE,EAAEC,EAAE,EAAEC,EAAE,CAAC,GAAG7D,SAAS,CAACK,aAAa;QAChDoD,WAAW,GAAG5E,yBAAyB,CACrC+D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACI,QAAQ,CAAC,EAC/BsD,EAAE,EACFC,EAAE,EACFC,EAAE,EACFC,EAAE,EACFhB,YACF,CAAC;MACH,CAAC,MAAM,IAAI7C,SAAS,CAACC,IAAI,KAAK,QAAQ,EAAE;QACtC,MAAM+D,eAAe,GACnBhE,SAAS,CAACU,eAAe,KAAKuD,SAAS,IACvCjE,SAAS,CAACU,eAAe,KAAK,SAAS;QACzC+C,WAAW,GAAG1E,yBAAyB,CACrC6D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,MAAM,EAAE/D,SAAS,CAACO,IAAI,IAAI,CAAC,CAAC,EACrCuD,IAAI,CAACC,GAAG,CAAC,MAAM,EAAE/D,SAAS,CAACQ,SAAS,IAAI,GAAG,CAAC,EAC5CsD,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACS,OAAO,IAAI,EAAE,CAAC,EACpCuD,eAAe,GAAG,CAAC,GAAIhE,SAAS,CAACU,eAA0B,EAC3DsD,eAAe,EACfnB,YACF,CAAC;MACH,CAAC,MAAM;QACLY,WAAW,GAAGxE,4BAA4B,CACxC2D,QAAQ,EACRS,mBAAmB,EACnBE,SAAS,CAAClC,CAAC,EACXkC,SAAS,CAACjC,CAAC,EACXiC,SAAS,CAAChC,KAAK,EACfgC,SAAS,CAAC/B,MAAM,EAChB+B,SAAS,CAAC9B,MAAM,EAChB6B,KAAK,CAAC5B,iBAAiB,EACvB4B,KAAK,CAAC3B,iBAAiB,EACvB6B,UAAU,CAACnC,CAAC,EACZmC,UAAU,CAAClC,CAAC,EACZkC,UAAU,CAACjC,KAAK,EAChBiC,UAAU,CAAChC,MAAM,EACjBgC,UAAU,CAAC/B,MAAM,EACjB1B,MAAM,CAAC2B,iBAAiB,EACxB3B,MAAM,CAAC4B,iBAAiB,EACxBmC,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/D,SAAS,CAACI,QAAQ,CAAC,EAC/BwB,kBAAkB,CAAC5B,SAAS,CAAC,EAC7B6C,YACF,CAAC;MACH;MACA,IAAIY,WAAW,KAAK,CAAC,EAAE;QACrB;QACA;QACA;QACA;QACArB,SAAS,CAACvC,KAAK,GAAGtB,WAAW;QAC7ByC,YAAY,CAACnB,KAAK,GAAGyD,KAAK;QAC1B,IAAIF,gBAAgB,EAAEb,YAAY,CAAC1C,KAAK,GAAG,CAAC;QAC5CyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;QAC3B,OAAOV,2BAA2B,CAACyD,QAAQ,CAAC;MAC9C;MACAN,iBAAiB,CAACzC,KAAK,GAAG4D,WAAW;MACrC,OAAOA,WAAW;IACpB,CAAC;IAED,MAAMS,UAAU,GAAGA,CACjBT,WAAW,GAAG,CAAC,EACfU,QAA8B,GAAG,SAAS,KACf;MAC3B,SAAS;;MACT,MAAMjD,MAAM,GAAG7B,2BAA2B,CACxCuD,QAAQ,EACRa,WAAW,EACXU,QAAQ,KAAK,QAAQ,GAAG,CAAC,GAAG,CAC9B,CAAC;MACD,IAAIjD,MAAM,CAACN,MAAM,GAAG,CAAC,IAAIM,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAOF,YAAY,CAACnB,KAAK;MACnE,MAAM8C,OAAO,GAAG1B,sBAAsB,CAACC,MAAM,EAAEF,YAAY,CAACnB,KAAK,EAAE,CAAC,CAAC;MACrEyC,iBAAiB,CAACzC,KAAK,GAAG,CAAC;MAC3BuC,SAAS,CAACvC,KAAK,GAAGtB,WAAW;MAC7BgE,YAAY,CAAC1C,KAAK,GAAG,CAAC;MACtBiD,gBAAgB,CAACH,OAAO,CAAC;MACzB,OAAOA,OAAO;IAChB,CAAC;IAED,MAAMyB,MAAwB,GAAG;MAC/BC,IAAI,EAAE,QAAQ;MACdrD,YAAY;MACZsD,EAAE,EAAE;QACF1F,gBAAgBA,CAAA,EAAG;UACjB,SAAS;;UACT,IAAIvB,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOkB,SAAS,CAAC,CAAC;QACpB,CAAC;QACDuB,GAAGA,CAACxB,IAAI,EAAE;UACR,SAAS;;UACT,IAAI1F,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClCmB,OAAO,CAACF,IAAI,CAAC;QACf,CAAC;QACDyB,UAAUA,CACRnD,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBAAiB,EACjB;UACA,SAAS;;UACT,IAAItE,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClCoB,cAAc,CACZ7B,CAAC,EACDC,CAAC,EACDC,KAAK,EACLC,MAAM,EACNC,MAAM,EACNC,iBAAiB,EACjBC,iBACF,CAAC;QACH,CAAC;QACD8C,SAASA,CAAC1E,MAAM,EAAEC,SAAS,EAAE;UAC3B,SAAS;;UACT,IAAI3C,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOqB,WAAW,CAACpD,MAAM,EAAEC,SAAS,CAAC;QACvC,CAAC;QACD0E,MAAMA,CAACjB,WAAW,GAAG,CAAC,EAAEU,QAAQ,GAAG,SAAS,EAAE;UAC5C,SAAS;;UACT,IAAI9G,WAAW,CAAC,CAAC,EAAE,OAAOyE,MAAM,CAAC,CAAC;UAClC,OAAOoC,UAAU,CAACT,WAAW,EAAEU,QAAQ,CAAC;QAC1C;MACF,CAAC;MACDQ,KAAK,EAAE;QACL/F,gBAAgBA,CAAA,EAAG;UACjB,MAAM;YAAEgG,SAAS;YAAEC;UAAQ,CAAC,GAC1BzG,kBAAkB,CAAyBwE,QAAQ,CAAC;UACtDrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAG9B,SAAS,CAAC,CAAC;YAC1B1F,YAAY,CAACgB,mBAAmB,EAAEsE,QAAQ,EAAEgC,SAAS,EAAEE,MAAM,CAAC;UAChE,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB,CAAC;QACDN,GAAGA,CAACxB,IAAI,EAAE;UACR,MAAM;YAAE6B,SAAS;YAAEC;UAAQ,CAAC,GAAGzG,kBAAkB,CAAOwE,QAAQ,CAAC;UACjErF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT0F,OAAO,CAACF,IAAI,CAAC;YACbzF,YAAY,CAACgB,mBAAmB,EAAEsE,QAAQ,EAAEgC,SAAS,EAAEX,SAAS,CAAC;UACnE,CAAC,CAAC;UACF,OAAOY,OAAO;QAChB,CAAC;QACDJ,SAASA,CAAC1E,MAAM,EAAEC,SAAS,EAAE;UAC3B,MAAM;YAAE4E,SAAS;YAAEC;UAAQ,CAAC,GAAGzG,kBAAkB,CAC/CwE,QAAQ,EACR,IACF,CAAC;UACDrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAG3B,WAAW,CAACpD,MAAM,EAAEC,SAAS,CAAC;YAC7C1C,YAAY,CACVgB,mBAAmB,EACnBsE,QAAQ,EACRgC,SAAS,EACTE,MAAM,EACN,IACF,CAAC;UACH,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB,CAAC;QACDH,MAAMA,CAACjB,WAAW,GAAG,CAAC,EAAEU,QAAQ,GAAG,SAAS,EAAE;UAC5C,MAAM;YAAES,SAAS;YAAEC;UAAQ,CAAC,GAC1BzG,kBAAkB,CAAyBwE,QAAQ,EAAE,IAAI,CAAC;UAC5DrF,YAAY,CAAC,MAAM;YACjB,SAAS;;YACT,MAAMuH,MAAM,GAAGZ,UAAU,CAACT,WAAW,EAAEU,QAAQ,CAAC;YAChD7G,YAAY,CACVgB,mBAAmB,EACnBsE,QAAQ,EACRgC,SAAS,EACTE,MAAM,EACN,IACF,CAAC;UACH,CAAC,CAAC;UACF,OAAOD,OAAO;QAChB;MACF;IACF,CAAC;IAED/G,cAAc,CACZsG,MAAM,EACNzG,iBAAiB,CACfiF,QAAQ,EACRT,mBAAmB,EACnBnB,YAAY,EACZwB,WAAW,EACXF,iBAAiB,EACjBF,SACF,CACF,CAAC;IACDM,SAAS,CAACC,OAAO,GAAGyB,MAAM;EAC5B;EAEA,MAAMA,MAAM,GAAG1B,SAAS,CAACC,OAAO;EAEhCzF,SAAS,CAAC,MAAM;IACd,MAAM6H,aAAa,GAAGrC,SAAS,CAACC,OAAO;IACvC,IAAI,CAACoC,aAAa,EAAE,OAAOd,SAAS;IACpC,MAAMe,KAAK,GAAGnH,cAAc,CAACkH,aAAa,CAAC;IAC3C,MAAM;MAAEnC;IAAS,CAAC,GAAGoC,KAAK;IAC1B;IACA;IACA;IACAtH,iBAAiB,CAACsH,KAAK,CAAC;IAExB,MAAMC,YAAY,GAAGzH,sBAAsB,CAAC0H,uBAAuB,CAChEJ,MAAM,IAAK;MACV,IAAIA,MAAM,CAAClC,QAAQ,KAAKA,QAAQ,EAAE;MAClC5E,2BAA2B,CACzBsE,iBAAiB,EACjBF,SAAS,EACT0C,MAAM,CAACrB,WAAW,EAClBqB,MAAM,CAACK,QACT,CAAC;MACDpH,uBAAuB,CAAC6E,QAAQ,EAAEkC,MAAM,CAACrB,WAAW,EAAEqB,MAAM,CAACK,QAAQ,CAAC;IACxE,CACF,CAAC;IAED5H,YAAY,CACV,CACE6H,MAA2C,EAC3CC,UAAkB,EAClBC,cAAsB,EACtBC,KAA0B,EAC1BC,UAA+B,EAC/BC,MAA2B,EAC3BC,KAA0B,EAC1BC,MAA0C,KACvC;MACH,SAAS;;MACT,IAAIC,IAAmC,GAAG,IAAI;MAC9C,MAAMC,OAAO,GAAI9C,IAA4B,IAAK;QAChD,IACE,CAAC5E,wBAAwB,CAAC4E,IAAI,CAAC,IAC/B9E,sBAAsB,CAAC2H,IAAI,EAAE7C,IAAI,CAAC,EAClC;UACA;QACF;QACA;QACA;QACA;QACA,IAAIwC,KAAK,CAAC1F,KAAK,KAAKtB,WAAW,EAAE;QACjC,IAAIiH,UAAU,CAAC3F,KAAK,GAAG,CAAC,EAAE;UACxB2F,UAAU,CAAC3F,KAAK,IAAI,CAAC;UACrB+F,IAAI,GAAG7C,IAAI;UACX;QACF;QACA6C,IAAI,GAAG7C,IAAI;QACX,IAAI2C,KAAK,CAAC7F,KAAK,KAAK,CAAC,EAAE6F,KAAK,CAAC7F,KAAK,GAAG,CAAC;QACtC,MAAM;UAAEuB,IAAI;UAAEM,iBAAiB;UAAEC;QAAkB,CAAC,GAAGoB,IAAI;QAC3D4C,MAAM,CACJL,cAAc,EACdlE,IAAI,CAACC,CAAC,EACND,IAAI,CAACE,CAAC,EACNF,IAAI,CAACG,KAAK,EACVH,IAAI,CAACI,MAAM,EACXJ,IAAI,CAACK,MAAM,EACXC,iBAAiB,EACjBC,iBAAiB,EACjB,KACF,CAAC;MACH,CAAC;MACDyD,MAAM,CAACU,WAAW,CAACT,UAAU,EAAEQ,OAAO,CAAC;MACvC;MACA;MACA;MACA,MAAMlD,OAAO,GAAGyC,MAAM,CAACvF,KAAK;MAC5B,IAAI1B,wBAAwB,CAACwE,OAAO,CAAC,EAAE;QACrC8C,MAAM,CAAC5F,KAAK,GAAG,CAAC;QAChB0F,KAAK,CAAC1F,KAAK,GAAGtB,WAAW;QACzBmH,KAAK,CAAC7F,KAAK,GAAG,CAAC;QACf+F,IAAI,GAAGjD,OAAO;QACdgD,MAAM,CACJL,cAAc,EACd3C,OAAO,CAACvB,IAAI,CAACC,CAAC,EACdsB,OAAO,CAACvB,IAAI,CAACE,CAAC,EACdqB,OAAO,CAACvB,IAAI,CAACG,KAAK,EAClBoB,OAAO,CAACvB,IAAI,CAACI,MAAM,EACnBmB,OAAO,CAACvB,IAAI,CAACK,MAAM,EACnBkB,OAAO,CAACjB,iBAAiB,EACzBiB,OAAO,CAAChB,iBAAiB,EACzB,IACF,CAAC;MACH;IACF,CAAC,EACDX,YAAY,EACZ4B,QAAQ,EACRA,QAAQ,EACRR,SAAS,EACTC,kBAAkB,EAClBC,iBAAiB,EACjBC,YAAY,EACZ9D,2BACF,CAAC;IAED,OAAO,MAAM;MACXwG,YAAY,CAACc,MAAM,CAAC,CAAC;MACrB1H,oBAAoB,CAACuE,QAAQ,CAAC;MAC9BhF,iBAAiB,CAACoH,KAAK,CAAC;MACxBzH,YAAY,CACV,CACE6H,MAA2C,EAC3CC,UAAkB,EAClBC,cAAsB,EACtBU,OAAyC,KACtC;QACH,SAAS;;QACTZ,MAAM,CAACa,cAAc,CAACZ,UAAU,CAAC;QACjCW,OAAO,CAACV,cAAc,CAAC;MACzB,CAAC,EACDtE,YAAY,EACZ4B,QAAQ,EACRA,QAAQ,EACRrD,yBACF,CAAC;IACH,CAAC;EACH,CAAC,EAAE,CACD+C,iBAAiB,EACjBF,SAAS,EACTpB,YAAY,EACZuB,YAAY,EACZF,kBAAkB,CACnB,CAAC;EAEF,OAAO+B,MAAM;AACf","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":[]}
@@ -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":[]}
@@ -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
@@ -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":[]}
@@ -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
- export type TimingClipAnimation = Readonly<{
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;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1D,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,QAAQ,CAAC;QACxB,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,sBAAsB,CAAC;KACtC,CAAC,EAAE,CAAC;CACN,CAAC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAC7B,mBAAmB,GAAG,mBAAmB,GAAG,sBAAsB,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG,QAAQ,CAAC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAChC,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,gBAAgB,IAAI,sBAAsB,CAAC;IAC3C,GAAG,CAAC,YAAY,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAChD;;;;;;;;OAQG;IACH,UAAU,CACR,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAAC;IACR,SAAS,CACP,YAAY,EAAE,sBAAsB,EACpC,SAAS,EAAE,mBAAmB,GAC7B,MAAM,CAAC;IACV,MAAM,CACJ,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAC9B,sBAAsB,CAAC;CAC3B,CAAC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,gBAAgB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACpD,GAAG,CAAC,YAAY,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,SAAS,CACP,YAAY,EAAE,sBAAsB,EACpC,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,MAAM,CAAC,CAAC;IACnB,MAAM,CACJ,WAAW,CAAC,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACpC,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,QAAQ,CAAC;IACf,YAAY,EAAE,WAAW,CAAC,sBAAsB,CAAC,CAAC;IAClD,EAAE,EAAE,oBAAoB,CAAC;IACzB,KAAK,EAAE,uBAAuB,CAAC;CAChC,CAAC,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;AAuFpB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,GAAG,sBAAsB,EACnD,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CA0RlB;AAED,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,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;AAyIpB,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,YAAY,GAAG,sBAAsB,EACnD,OAAO,GAAE,uBAA4B,GACpC,gBAAgB,CAuelB;AAED,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-smooth-clip-view",
3
- "version": "0.2.2",
3
+ "version": "0.2.4",
4
4
  "description": "Layout-free animated rounded clipping for React Native Fabric",
5
5
  "main": "./lib/module/index.js",
6
6
  "module": "./lib/module/index.js",
@@ -3,28 +3,57 @@ import type { SmoothClipPresentation } from './geometry';
3
3
 
4
4
  export type ClipReduceMotion = 'system' | 'always' | 'never';
5
5
 
6
- export type TimingClipAnimation = Readonly<{
7
- type: 'timing';
8
- duration: number;
9
- controlPoints: readonly [number, number, number, number];
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 SpringClipAnimation = Readonly<{
13
- type: 'spring';
14
- mass?: number;
15
- stiffness?: number;
16
- damping?: number;
17
- initialVelocity?: number | 'inherit';
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 KeyframedClipAnimation = Readonly<{
21
- type: 'keyframes';
22
- duration: number;
23
- frames: readonly Readonly<{
24
- offset: number;
25
- presentation: SmoothClipPresentation;
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,
@@ -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
@@ -13,6 +13,7 @@ export type {
13
13
  SpringClipAnimation,
14
14
  TimingClipAnimation,
15
15
  } from './driverTypes';
16
+ export { ClipEasings } from './easings';
16
17
  export { normalizeClipGeometry } from './geometry';
17
18
  export { createClipPresentation } from './geometry';
18
19
  export type {
package/src/index.web.ts CHANGED
@@ -13,6 +13,7 @@ export type {
13
13
  SpringClipAnimation,
14
14
  TimingClipAnimation,
15
15
  } from './driverTypes';
16
+ export { ClipEasings } from './easings';
16
17
  export { normalizeClipGeometry } from './geometry';
17
18
  export { createClipPresentation } from './geometry';
18
19
  export type {