react-native-smooth-clip-view 0.2.4 → 0.2.5

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.
@@ -0,0 +1,401 @@
1
+ "use strict";
2
+
3
+ // The shared NATIVE driver: iOS and Android both execute this file, via the
4
+ // one-line re-exports in drivers.ios.ts / drivers.android.ts that Metro's
5
+ // platform resolution picks up from index.ts's `./drivers` import. Only the
6
+ // `./smoothClipNative` import below is platform-split. drivers.ts (no
7
+ // suffix) is the web/Reanimated fallback, not this driver's sibling.
8
+ import { useEffect, useRef } from 'react';
9
+ import { useSharedValue } from 'react-native-reanimated';
10
+ import { isRNRuntime, scheduleOnRN, scheduleOnUI } from 'react-native-worklets';
11
+ import NativeSmoothClipModule from './smoothClipNative';
12
+ import { allocateDriverId, attachDriverState, createDriverState, detachDriverState, getDriverState, setDriverState } from "./driverState.js";
13
+ import { completeNativeAnimation, synchronizeNativeCompletion } from "./nativeCompletion.js";
14
+ import { clipPresentationEquals, createClipPresentation, isFiniteClipPresentation } from "./geometry.js";
15
+ import { createReactRequest, rejectDriverRequests, resolveReactRequest } from "./reactRequests.js";
16
+ const INTERACTIVE = 0;
17
+ const NATIVE = 1;
18
+ const setPresentationHostFunction = NativeSmoothClipModule.setClipPresentation;
19
+ const beginInteractionHostFunction = NativeSmoothClipModule.beginInteraction;
20
+ const animateTimingHostFunction = NativeSmoothClipModule.animateTiming;
21
+ const animateSpringHostFunction = NativeSmoothClipModule.animateSpring;
22
+ const animateKeyframesHostFunction = NativeSmoothClipModule.animateKeyframes;
23
+ const rejectAnimationHostFunction = NativeSmoothClipModule.rejectAnimation;
24
+ const cancelAnimationHostFunction = NativeSmoothClipModule.cancelAnimation;
25
+ const destroyDriverHostFunction = NativeSmoothClipModule.destroyDriver;
26
+
27
+ // Workaround for react-native-worklets 0.10: the RN-side serialization cache
28
+ // hands out one remote-function registry id per function forever, but the
29
+ // registry entry is deleted as soon as any transient UI-side proxy of that
30
+ // function is garbage collected. A later scheduleOnRN for the same function
31
+ // then reads `undefined` from the registry and aborts in Value::getObject.
32
+ // Pinning one UI-side reference for the app lifetime keeps the proxy — and
33
+ // with it the registry entry — alive. Remove once worklets decouples registry
34
+ // cleanup from proxy lifetime.
35
+ scheduleOnUI(resolver => {
36
+ 'worklet';
37
+
38
+ globalThis.__smoothClipPinnedResolver = resolver;
39
+ }, resolveReactRequest);
40
+ function reduceMotionCode(value) {
41
+ switch (value) {
42
+ case 'always':
43
+ return 1;
44
+ case 'never':
45
+ return 2;
46
+ default:
47
+ return 0;
48
+ }
49
+ }
50
+ function animationIsFinite(target, animation) {
51
+ 'worklet';
52
+
53
+ if (animation.from !== undefined && !isFiniteClipPresentation(animation.from)) {
54
+ // Silently dropping an invalid explicit start would re-open the exact
55
+ // stale-start handoff `from` exists to close — reject the whole call.
56
+ return false;
57
+ }
58
+ if (animation.type === 'timing') {
59
+ return Number.isFinite(animation.duration) && animation.controlPoints.every(Number.isFinite);
60
+ }
61
+ if (animation.type === 'spring') {
62
+ return [animation.mass ?? 1, animation.stiffness ?? 100, animation.damping ?? 10, animation.initialVelocity === 'inherit' ? 0 : animation.initialVelocity ?? 0].every(Number.isFinite);
63
+ }
64
+ if (!Number.isFinite(animation.duration) || animation.frames.length < 2) {
65
+ return false;
66
+ }
67
+ let previousOffset = -1;
68
+ for (const frame of animation.frames) {
69
+ if (!Number.isFinite(frame.offset) || frame.offset < 0 || frame.offset > 1 || frame.offset <= previousOffset || !isFiniteClipPresentation(frame.presentation)) {
70
+ return false;
71
+ }
72
+ previousOffset = frame.offset;
73
+ }
74
+ return animation.frames[0]?.offset === 0 && previousOffset === 1 && clipPresentationEquals(animation.frames[animation.frames.length - 1]?.presentation ?? null, target);
75
+ }
76
+ function presentationFromNative(values, fallback, offset = 0) {
77
+ 'worklet';
78
+
79
+ if (values.length < offset + 7) return fallback;
80
+ const presentation = {
81
+ clip: {
82
+ x: values[offset],
83
+ y: values[offset + 1],
84
+ width: values[offset + 2],
85
+ height: values[offset + 3],
86
+ radius: values[offset + 4]
87
+ },
88
+ contentTranslateX: values[offset + 5],
89
+ contentTranslateY: values[offset + 6]
90
+ };
91
+ return isFiniteClipPresentation(presentation) ? presentation : fallback;
92
+ }
93
+ function flattenedKeyframes(animation) {
94
+ 'worklet';
95
+
96
+ const values = [];
97
+ for (const frame of animation.frames) {
98
+ const {
99
+ clip,
100
+ contentTranslateX,
101
+ contentTranslateY
102
+ } = frame.presentation;
103
+ values.push(frame.offset, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY);
104
+ }
105
+ return values;
106
+ }
107
+ function uiOnly() {
108
+ 'worklet';
109
+
110
+ throw new Error('[SmoothClipView] driver.ui methods must run on the UI runtime. Use driver.react from React code.');
111
+ }
112
+ export function useSmoothClipDriver(initialValue, options = {}) {
113
+ const initialPresentation = 'clip' in initialValue ? initialValue : createClipPresentation(initialValue);
114
+ const presentation = useSharedValue(initialPresentation);
115
+ const ownership = useSharedValue(INTERACTIVE);
116
+ const suppressDeliveries = useSharedValue(0);
117
+ const activeAnimationId = useSharedValue(0);
118
+ // Non-zero after a setScalars hot write: driver.presentation is then stale,
119
+ // so animateTo must start from the native registry's latest value instead
120
+ // of snapping back to the stale SharedValue.
121
+ const scalarsStale = useSharedValue(0);
122
+ const callbackRef = useRef(options.onAnimationComplete);
123
+ const driverRef = useRef(null);
124
+ callbackRef.current = options.onAnimationComplete;
125
+ if (driverRef.current === null) {
126
+ const driverId = allocateDriverId();
127
+ const reduceMotion = reduceMotionCode(options.reduceMotion ?? 'system');
128
+ const seedPresentation = next => {
129
+ 'worklet';
130
+
131
+ if (!clipPresentationEquals(presentation.value, next)) {
132
+ suppressDeliveries.value += 1;
133
+ presentation.value = next;
134
+ }
135
+ };
136
+ const beginOnUI = () => {
137
+ 'worklet';
138
+
139
+ const current = presentationFromNative(beginInteractionHostFunction(driverId), presentation.value);
140
+ activeAnimationId.value = 0;
141
+ ownership.value = INTERACTIVE;
142
+ scalarsStale.value = 0;
143
+ seedPresentation(current);
144
+ return current;
145
+ };
146
+ const setOnUI = next => {
147
+ 'worklet';
148
+
149
+ if (!isFiniteClipPresentation(next)) return;
150
+ activeAnimationId.value = 0;
151
+ ownership.value = INTERACTIVE;
152
+ scalarsStale.value = 0;
153
+ const {
154
+ clip,
155
+ contentTranslateX,
156
+ contentTranslateY
157
+ } = next;
158
+ setPresentationHostFunction(driverId, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY, true);
159
+ seedPresentation(next);
160
+ };
161
+ const setScalarsOnUI = (x, y, width, height, radius, contentTranslateX, contentTranslateY) => {
162
+ 'worklet';
163
+
164
+ if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(radius) || !Number.isFinite(contentTranslateX) || !Number.isFinite(contentTranslateY)) {
165
+ return;
166
+ }
167
+ if (activeAnimationId.value !== 0) activeAnimationId.value = 0;
168
+ if (ownership.value !== INTERACTIVE) ownership.value = INTERACTIVE;
169
+ if (scalarsStale.value === 0) scalarsStale.value = 1;
170
+ setPresentationHostFunction(driverId, x, y, width, height, radius, contentTranslateX, contentTranslateY, true);
171
+ };
172
+ const animateOnUI = (target, animation) => {
173
+ 'worklet';
174
+
175
+ if (!isFiniteClipPresentation(target) || !animationIsFinite(target, animation)) {
176
+ return rejectAnimationHostFunction(driverId);
177
+ }
178
+ const from = animation.from;
179
+ if (from !== undefined) {
180
+ // Fused hot write: exactly setScalars(from…) issued immediately
181
+ // before the handoff, so native's latest value — the animation
182
+ // start below — is the caller's explicit presentation. Also
183
+ // re-grabs from a running animation, which the implicit
184
+ // interactive-start path would silently skip.
185
+ setScalarsOnUI(from.clip.x, from.clip.y, from.clip.width, from.clip.height, from.clip.radius, from.contentTranslateX, from.contentTranslateY);
186
+ }
187
+
188
+ // After a setScalars hot write the SharedValue no longer matches what
189
+ // is on screen; passing it as the start would snap the animation back.
190
+ // Without an interactive start, native resolves the start from its own
191
+ // latest value instead.
192
+ const scalarsWereStale = scalarsStale.value !== 0;
193
+ const hasInteractiveStart = ownership.value === INTERACTIVE && !scalarsWereStale;
194
+ const start = presentation.value;
195
+ ownership.value = NATIVE;
196
+ presentation.value = target;
197
+ scalarsStale.value = 0;
198
+ const startClip = start.clip;
199
+ const targetClip = target.clip;
200
+ let animationId;
201
+ if (animation.type === 'timing') {
202
+ const [x1, y1, x2, y2] = animation.controlPoints;
203
+ animationId = animateTimingHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0, animation.duration), x1, y1, x2, y2, reduceMotion);
204
+ } else if (animation.type === 'spring') {
205
+ const inheritVelocity = animation.initialVelocity === undefined || animation.initialVelocity === 'inherit';
206
+ animationId = animateSpringHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0.0001, animation.mass ?? 1), Math.max(0.0001, animation.stiffness ?? 100), Math.max(0, animation.damping ?? 10), inheritVelocity ? 0 : animation.initialVelocity, inheritVelocity, reduceMotion);
207
+ } else {
208
+ animationId = animateKeyframesHostFunction(driverId, hasInteractiveStart, startClip.x, startClip.y, startClip.width, startClip.height, startClip.radius, start.contentTranslateX, start.contentTranslateY, targetClip.x, targetClip.y, targetClip.width, targetClip.height, targetClip.radius, target.contentTranslateX, target.contentTranslateY, Math.max(0, animation.duration), flattenedKeyframes(animation), reduceMotion);
209
+ }
210
+ if (animationId === 0) {
211
+ // The 0 sentinel: the driver entry no longer exists (destroyed) or
212
+ // the call ran off the main thread — validation failures never get
213
+ // here (they reject before any side effect with a fresh id and one
214
+ // finished:false completion). Restore the two-call-desugar state and
215
+ // forward the registry's rejection result, which is 0 again in both
216
+ // reachable cases, with no completion — exactly the README contract.
217
+ ownership.value = INTERACTIVE;
218
+ presentation.value = start;
219
+ if (scalarsWereStale) scalarsStale.value = 1;
220
+ activeAnimationId.value = 0;
221
+ return rejectAnimationHostFunction(driverId);
222
+ }
223
+ activeAnimationId.value = animationId;
224
+ return animationId;
225
+ };
226
+ const cancelOnUI = (animationId = 0, behavior = 'current') => {
227
+ 'worklet';
228
+
229
+ const values = cancelAnimationHostFunction(driverId, animationId, behavior === 'target' ? 1 : 0);
230
+ if (values.length < 8 || values[0] !== 1) return presentation.value;
231
+ const current = presentationFromNative(values, presentation.value, 1);
232
+ activeAnimationId.value = 0;
233
+ ownership.value = INTERACTIVE;
234
+ scalarsStale.value = 0;
235
+ seedPresentation(current);
236
+ return current;
237
+ };
238
+ const driver = {
239
+ kind: 'hybrid',
240
+ presentation,
241
+ ui: {
242
+ beginInteraction() {
243
+ 'worklet';
244
+
245
+ if (isRNRuntime()) return uiOnly();
246
+ return beginOnUI();
247
+ },
248
+ set(next) {
249
+ 'worklet';
250
+
251
+ if (isRNRuntime()) return uiOnly();
252
+ setOnUI(next);
253
+ },
254
+ setScalars(x, y, width, height, radius, contentTranslateX, contentTranslateY) {
255
+ 'worklet';
256
+
257
+ if (isRNRuntime()) return uiOnly();
258
+ setScalarsOnUI(x, y, width, height, radius, contentTranslateX, contentTranslateY);
259
+ },
260
+ animateTo(target, animation) {
261
+ 'worklet';
262
+
263
+ if (isRNRuntime()) return uiOnly();
264
+ return animateOnUI(target, animation);
265
+ },
266
+ cancel(animationId = 0, behavior = 'current') {
267
+ 'worklet';
268
+
269
+ if (isRNRuntime()) return uiOnly();
270
+ return cancelOnUI(animationId, behavior);
271
+ }
272
+ },
273
+ react: {
274
+ beginInteraction() {
275
+ const {
276
+ requestId,
277
+ promise
278
+ } = createReactRequest(driverId);
279
+ scheduleOnUI(() => {
280
+ 'worklet';
281
+
282
+ const result = beginOnUI();
283
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result);
284
+ });
285
+ return promise;
286
+ },
287
+ set(next) {
288
+ const {
289
+ requestId,
290
+ promise
291
+ } = createReactRequest(driverId);
292
+ scheduleOnUI(() => {
293
+ 'worklet';
294
+
295
+ setOnUI(next);
296
+ scheduleOnRN(resolveReactRequest, driverId, requestId, undefined);
297
+ });
298
+ return promise;
299
+ },
300
+ animateTo(target, animation) {
301
+ const {
302
+ requestId,
303
+ promise
304
+ } = createReactRequest(driverId, true);
305
+ scheduleOnUI(() => {
306
+ 'worklet';
307
+
308
+ const result = animateOnUI(target, animation);
309
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
310
+ });
311
+ return promise;
312
+ },
313
+ cancel(animationId = 0, behavior = 'current') {
314
+ const {
315
+ requestId,
316
+ promise
317
+ } = createReactRequest(driverId, true);
318
+ scheduleOnUI(() => {
319
+ 'worklet';
320
+
321
+ const result = cancelOnUI(animationId, behavior);
322
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
323
+ });
324
+ return promise;
325
+ }
326
+ }
327
+ };
328
+ setDriverState(driver, createDriverState(driverId, initialPresentation, presentation, callbackRef, activeAnimationId, ownership));
329
+ driverRef.current = driver;
330
+ }
331
+ const driver = driverRef.current;
332
+ useEffect(() => {
333
+ const currentDriver = driverRef.current;
334
+ if (!currentDriver) return undefined;
335
+ const state = getDriverState(currentDriver);
336
+ const {
337
+ driverId
338
+ } = state;
339
+ // Re-attach on every effect run: StrictMode/<Activity> replay the effect
340
+ // after its cleanup detached this state and destroyed the native driver.
341
+ // The authoritative seed below recreates the native entry in that case.
342
+ attachDriverState(state);
343
+ const subscription = NativeSmoothClipModule.onClipAnimationComplete(result => {
344
+ if (result.driverId !== driverId) return;
345
+ synchronizeNativeCompletion(activeAnimationId, ownership, result.animationId, result.finished);
346
+ completeNativeAnimation(driverId, result.animationId, result.finished);
347
+ });
348
+ scheduleOnUI((source, listenerId, nativeDriverId, owner, suppressed, active, stale, setter) => {
349
+ 'worklet';
350
+
351
+ let last = null;
352
+ const deliver = next => {
353
+ if (!isFiniteClipPresentation(next) || clipPresentationEquals(last, next)) {
354
+ return;
355
+ }
356
+ // Record `last` only for values native has actually observed:
357
+ // deliveries dropped during native ownership must stay eligible
358
+ // for re-delivery once interactive ownership returns.
359
+ if (owner.value !== INTERACTIVE) return;
360
+ if (suppressed.value > 0) {
361
+ suppressed.value -= 1;
362
+ last = next;
363
+ return;
364
+ }
365
+ last = next;
366
+ if (stale.value !== 0) stale.value = 0;
367
+ const {
368
+ clip,
369
+ contentTranslateX,
370
+ contentTranslateY
371
+ } = next;
372
+ setter(nativeDriverId, clip.x, clip.y, clip.width, clip.height, clip.radius, contentTranslateX, contentTranslateY, false);
373
+ };
374
+ source.addListener(listenerId, deliver);
375
+ // Authoritative take-ownership seed. Creates the native entry before
376
+ // any view mounts on the first run, and revives a driver destroyed by
377
+ // an effect-replay cleanup (StrictMode/<Activity>) on later runs.
378
+ const current = source.value;
379
+ if (isFiniteClipPresentation(current)) {
380
+ active.value = 0;
381
+ owner.value = INTERACTIVE;
382
+ stale.value = 0;
383
+ last = current;
384
+ setter(nativeDriverId, current.clip.x, current.clip.y, current.clip.width, current.clip.height, current.clip.radius, current.contentTranslateX, current.contentTranslateY, true);
385
+ }
386
+ }, presentation, driverId, driverId, ownership, suppressDeliveries, activeAnimationId, scalarsStale, setPresentationHostFunction);
387
+ return () => {
388
+ subscription.remove();
389
+ rejectDriverRequests(driverId);
390
+ detachDriverState(state);
391
+ scheduleOnUI((source, listenerId, nativeDriverId, destroy) => {
392
+ 'worklet';
393
+
394
+ source.removeListener(listenerId);
395
+ destroy(nativeDriverId);
396
+ }, presentation, driverId, driverId, destroyDriverHostFunction);
397
+ };
398
+ }, [activeAnimationId, ownership, presentation, scalarsStale, suppressDeliveries]);
399
+ return driver;
400
+ }
401
+ //# sourceMappingURL=drivers.native.js.map
@@ -0,0 +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","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.native.ts"],"mappings":"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","ignoreList":[]}
@@ -11,9 +11,11 @@ type ClipAnimationBase = Readonly<{
11
11
  * reached native — a gated per-frame reaction may not have flushed it.
12
12
  * Also re-grabs from a running animation (which an implicit interactive
13
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.
14
+ * On the native drivers `driver.presentation.value` is not written from
15
+ * `from` (it stays stale until success sets it to the target); the web
16
+ * fallback does write it — its presentation SharedValue is the render
17
+ * channel itself. Against a held pending-animation latch the seed is
18
+ * dropped by design — latch intent wins.
17
19
  *
18
20
  * Keyframes interpolate absolutely, so pass `frames[0].presentation` —
19
21
  * the seed renders it before the first animation frame, making the
@@ -1 +1 @@
1
- {"version":3,"file":"driverTypes.d.ts","sourceRoot":"","sources":["../../../src/driverTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driverTypes.d.ts","sourceRoot":"","sources":["../../../src/driverTypes.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
- export { useSmoothClipDriver } from './drivers.ios.js';
2
- export type { KeyframedClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './drivers.ios.js';
1
+ export { useSmoothClipDriver } from './drivers.native.js';
2
+ export type { KeyframedClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './drivers.native.js';
3
3
  //# sourceMappingURL=drivers.android.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drivers.android.d.ts","sourceRoot":"","sources":["../../../src/drivers.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAe,CAAC;AACpD,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC"}
1
+ {"version":3,"file":"drivers.android.d.ts","sourceRoot":"","sources":["../../../src/drivers.android.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAkB,CAAC;AACvD,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAkB,CAAC"}
@@ -1,5 +1,3 @@
1
- import type { KeyframedClipAnimation, SmoothClipDriver, SmoothClipDriverOptions, SpringClipAnimation, TimingClipAnimation } from './driverTypes.js';
2
- import { type ClipGeometry, type SmoothClipPresentation } from './geometry.js';
3
- export declare function useSmoothClipDriver(initialValue: ClipGeometry | SmoothClipPresentation, options?: SmoothClipDriverOptions): SmoothClipDriver;
4
- export type { KeyframedClipAnimation, SpringClipAnimation, TimingClipAnimation, };
1
+ export { useSmoothClipDriver } from './drivers.native.js';
2
+ export type { KeyframedClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './drivers.native.js';
5
3
  //# sourceMappingURL=drivers.ios.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"drivers.ios.d.ts","sourceRoot":"","sources":["../../../src/drivers.ios.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAkB,CAAC;AACvD,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,qBAAkB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { KeyframedClipAnimation, SmoothClipDriver, SmoothClipDriverOptions, SpringClipAnimation, TimingClipAnimation } from './driverTypes.js';
2
+ import { type ClipGeometry, type SmoothClipPresentation } from './geometry.js';
3
+ export declare function useSmoothClipDriver(initialValue: ClipGeometry | SmoothClipPresentation, options?: SmoothClipDriverOptions): SmoothClipDriver;
4
+ export type { KeyframedClipAnimation, SpringClipAnimation, TimingClipAnimation, };
5
+ //# sourceMappingURL=drivers.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drivers.native.d.ts","sourceRoot":"","sources":["../../../src/drivers.native.ts"],"names":[],"mappings":"AASA,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,CA2flB;AAED,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,GACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-smooth-clip-view",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
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",
@@ -13,9 +13,11 @@ type ClipAnimationBase = Readonly<{
13
13
  * reached native — a gated per-frame reaction may not have flushed it.
14
14
  * Also re-grabs from a running animation (which an implicit interactive
15
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.
16
+ * On the native drivers `driver.presentation.value` is not written from
17
+ * `from` (it stays stale until success sets it to the target); the web
18
+ * fallback does write it — its presentation SharedValue is the render
19
+ * channel itself. Against a held pending-animation latch the seed is
20
+ * dropped by design — latch intent wins.
19
21
  *
20
22
  * Keyframes interpolate absolutely, so pass `frames[0].presentation` —
21
23
  * the seed renders it before the first animation frame, making the
@@ -1,6 +1,8 @@
1
- export { useSmoothClipDriver } from './drivers.ios';
1
+ // Platform re-export only — the implementation is shared with iOS.
2
+ // Edit drivers.native.ts, not this file.
3
+ export { useSmoothClipDriver } from './drivers.native';
2
4
  export type {
3
5
  KeyframedClipAnimation,
4
6
  SpringClipAnimation,
5
7
  TimingClipAnimation,
6
- } from './drivers.ios';
8
+ } from './drivers.native';