react-native-smooth-clip-view 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/README.md +171 -43
  2. package/SmoothClipView.podspec +8 -2
  3. package/android/CMakeLists.txt +39 -0
  4. package/android/build.gradle +69 -2
  5. package/android/proguard-rules.pro +6 -0
  6. package/android/src/main/cpp/SmoothClipAndroid.h +59 -0
  7. package/android/src/main/cpp/SmoothClipBindings.cpp +428 -0
  8. package/android/src/main/cpp/SmoothClipRegistry.cpp +945 -0
  9. package/android/src/main/java/com/smoothclipview/ClipGeometryNormalizer.kt +25 -0
  10. package/android/src/main/java/com/smoothclipview/SmoothClipBindings.kt +55 -0
  11. package/android/src/main/java/com/smoothclipview/SmoothClipModule.kt +128 -0
  12. package/android/src/main/java/com/smoothclipview/SmoothClipView.kt +164 -30
  13. package/android/src/main/java/com/smoothclipview/SmoothClipViewManager.kt +107 -10
  14. package/android/src/main/java/com/smoothclipview/SmoothClipViewPackage.kt +18 -2
  15. package/cpp/SmoothClipRegistry.h +93 -0
  16. package/cpp/SmoothClipSharedGeometry.h +50 -0
  17. package/ios/SmoothClipModuleProvider.h +9 -0
  18. package/ios/SmoothClipModuleProvider.mm +16 -0
  19. package/ios/SmoothClipRegistry.mm +754 -0
  20. package/ios/SmoothClipTurboModule.cpp +290 -0
  21. package/ios/SmoothClipTurboModule.h +132 -0
  22. package/ios/SmoothClipView.mm +976 -85
  23. package/ios/SmoothClipViewRegistry.h +27 -0
  24. package/lib/module/NativeSmoothClipModule.js +5 -0
  25. package/lib/module/NativeSmoothClipModule.js.map +1 -0
  26. package/lib/module/SmoothClipView.android.js +4 -0
  27. package/lib/module/SmoothClipView.android.js.map +1 -0
  28. package/lib/module/SmoothClipView.ios.js +34 -0
  29. package/lib/module/SmoothClipView.ios.js.map +1 -0
  30. package/lib/module/SmoothClipView.js +26 -12
  31. package/lib/module/SmoothClipView.js.map +1 -1
  32. package/lib/module/SmoothClipView.web.js +28 -12
  33. package/lib/module/SmoothClipView.web.js.map +1 -1
  34. package/lib/module/SmoothClipViewNativeComponent.ts +14 -1
  35. package/lib/module/driverState.js +102 -0
  36. package/lib/module/driverState.js.map +1 -0
  37. package/lib/module/driverTypes.js +4 -0
  38. package/lib/module/driverTypes.js.map +1 -0
  39. package/lib/module/drivers.android.js +4 -0
  40. package/lib/module/drivers.android.js.map +1 -0
  41. package/lib/module/drivers.ios.js +380 -0
  42. package/lib/module/drivers.ios.js.map +1 -0
  43. package/lib/module/drivers.js +276 -0
  44. package/lib/module/drivers.js.map +1 -0
  45. package/lib/module/geometry.js +19 -0
  46. package/lib/module/geometry.js.map +1 -1
  47. package/lib/module/index.js +2 -0
  48. package/lib/module/index.js.map +1 -1
  49. package/lib/module/index.web.js +2 -0
  50. package/lib/module/index.web.js.map +1 -1
  51. package/lib/module/nativeCompletion.js +21 -0
  52. package/lib/module/nativeCompletion.js.map +1 -0
  53. package/lib/module/reactRequests.js +50 -0
  54. package/lib/module/reactRequests.js.map +1 -0
  55. package/lib/module/smoothClipNative.android.js +15 -0
  56. package/lib/module/smoothClipNative.android.js.map +1 -0
  57. package/lib/module/smoothClipNative.js +8 -0
  58. package/lib/module/smoothClipNative.js.map +1 -0
  59. package/lib/typescript/src/NativeSmoothClipModule.d.ts +19 -0
  60. package/lib/typescript/src/NativeSmoothClipModule.d.ts.map +1 -0
  61. package/lib/typescript/src/SmoothClipView.android.d.ts +3 -0
  62. package/lib/typescript/src/SmoothClipView.android.d.ts.map +1 -0
  63. package/lib/typescript/src/SmoothClipView.d.ts +5 -6
  64. package/lib/typescript/src/SmoothClipView.d.ts.map +1 -1
  65. package/lib/typescript/src/SmoothClipView.ios.d.ts +9 -0
  66. package/lib/typescript/src/SmoothClipView.ios.d.ts.map +1 -0
  67. package/lib/typescript/src/SmoothClipView.web.d.ts +5 -7
  68. package/lib/typescript/src/SmoothClipView.web.d.ts.map +1 -1
  69. package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts +4 -0
  70. package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts.map +1 -1
  71. package/lib/typescript/src/driverState.d.ts +31 -0
  72. package/lib/typescript/src/driverState.d.ts.map +1 -0
  73. package/lib/typescript/src/driverTypes.d.ts +61 -0
  74. package/lib/typescript/src/driverTypes.d.ts.map +1 -0
  75. package/lib/typescript/src/drivers.android.d.ts +3 -0
  76. package/lib/typescript/src/drivers.android.d.ts.map +1 -0
  77. package/lib/typescript/src/drivers.d.ts +5 -0
  78. package/lib/typescript/src/drivers.d.ts.map +1 -0
  79. package/lib/typescript/src/drivers.ios.d.ts +5 -0
  80. package/lib/typescript/src/drivers.ios.d.ts.map +1 -0
  81. package/lib/typescript/src/geometry.d.ts +8 -0
  82. package/lib/typescript/src/geometry.d.ts.map +1 -1
  83. package/lib/typescript/src/index.d.ts +4 -1
  84. package/lib/typescript/src/index.d.ts.map +1 -1
  85. package/lib/typescript/src/index.web.d.ts +4 -1
  86. package/lib/typescript/src/index.web.d.ts.map +1 -1
  87. package/lib/typescript/src/nativeCompletion.d.ts +7 -0
  88. package/lib/typescript/src/nativeCompletion.d.ts.map +1 -0
  89. package/lib/typescript/src/reactRequests.d.ts +7 -0
  90. package/lib/typescript/src/reactRequests.d.ts.map +1 -0
  91. package/lib/typescript/src/smoothClipNative.android.d.ts +4 -0
  92. package/lib/typescript/src/smoothClipNative.android.d.ts.map +1 -0
  93. package/lib/typescript/src/smoothClipNative.d.ts +3 -0
  94. package/lib/typescript/src/smoothClipNative.d.ts.map +1 -0
  95. package/package.json +12 -7
  96. package/src/NativeSmoothClipModule.ts +104 -0
  97. package/src/SmoothClipView.android.tsx +2 -0
  98. package/src/SmoothClipView.ios.tsx +36 -0
  99. package/src/SmoothClipView.tsx +31 -27
  100. package/src/SmoothClipView.web.tsx +26 -22
  101. package/src/SmoothClipViewNativeComponent.ts +14 -1
  102. package/src/driverState.ts +150 -0
  103. package/src/driverTypes.ts +91 -0
  104. package/src/drivers.android.ts +6 -0
  105. package/src/drivers.ios.ts +665 -0
  106. package/src/drivers.ts +416 -0
  107. package/src/geometry.ts +39 -0
  108. package/src/index.ts +19 -1
  109. package/src/index.web.ts +19 -1
  110. package/src/nativeCompletion.ts +37 -0
  111. package/src/reactRequests.ts +64 -0
  112. package/src/smoothClipNative.android.ts +20 -0
  113. package/src/smoothClipNative.ts +5 -0
@@ -0,0 +1,276 @@
1
+ "use strict";
2
+
3
+ import { useEffect, useRef } from 'react';
4
+ import { cancelAnimation as cancelReanimatedAnimation, Easing, ReduceMotion, useAnimatedReaction, useSharedValue, withSpring, withTiming } from 'react-native-reanimated';
5
+ import { scheduleOnRN, scheduleOnUI } from 'react-native-worklets';
6
+ import { allocateDriverId, attachDriverState, createDriverState, deliverDriverCompletion, detachDriverState, finishDriverAnimation, getDriverState, setDriverState, snapshotDriverViews } from "./driverState.js";
7
+ import { createClipPresentation, clipPresentationEquals, isFiniteClipPresentation } from "./geometry.js";
8
+ import { createReactRequest, rejectDriverRequests, resolveReactRequest } from "./reactRequests.js";
9
+ function toReanimatedReduceMotion(value) {
10
+ switch (value) {
11
+ case 'always':
12
+ return ReduceMotion.Always;
13
+ case 'never':
14
+ return ReduceMotion.Never;
15
+ default:
16
+ return ReduceMotion.System;
17
+ }
18
+ }
19
+ function animationIsFinite(animation) {
20
+ 'worklet';
21
+
22
+ if (animation.type === 'timing') {
23
+ return Number.isFinite(animation.duration) && animation.controlPoints.every(Number.isFinite);
24
+ }
25
+ if (animation.type === 'spring') {
26
+ return [animation.mass ?? 1, animation.stiffness ?? 100, animation.damping ?? 10, animation.initialVelocity === 'inherit' ? 0 : animation.initialVelocity ?? 0].every(Number.isFinite);
27
+ }
28
+ let previousOffset = -1;
29
+ if (!Number.isFinite(animation.duration) || animation.frames.length < 2) {
30
+ return false;
31
+ }
32
+ for (const frame of animation.frames) {
33
+ if (!Number.isFinite(frame.offset) || frame.offset < 0 || frame.offset > 1 || frame.offset <= previousOffset || !isFiniteClipPresentation(frame.presentation)) {
34
+ return false;
35
+ }
36
+ previousOffset = frame.offset;
37
+ }
38
+ return animation.frames[0]?.offset === 0 && previousOffset === 1;
39
+ }
40
+ function interpolatePresentation(from, to, progress) {
41
+ 'worklet';
42
+
43
+ const mix = (start, end) => start + (end - start) * progress;
44
+ return {
45
+ clip: {
46
+ x: mix(from.clip.x, to.clip.x),
47
+ y: mix(from.clip.y, to.clip.y),
48
+ width: mix(from.clip.width, to.clip.width),
49
+ height: mix(from.clip.height, to.clip.height),
50
+ radius: mix(from.clip.radius, to.clip.radius)
51
+ },
52
+ contentTranslateX: mix(from.contentTranslateX, to.contentTranslateX),
53
+ contentTranslateY: mix(from.contentTranslateY, to.contentTranslateY)
54
+ };
55
+ }
56
+ function finishFallback(driverId, animationId, finished) {
57
+ deliverDriverCompletion(driverId, animationId, finishDriverAnimation(driverId, animationId, finished));
58
+ }
59
+ export function useSmoothClipDriver(initialValue, options = {}) {
60
+ const initialPresentation = 'clip' in initialValue ? initialValue : createClipPresentation(initialValue);
61
+ const presentation = useSharedValue(initialPresentation);
62
+ const activeAnimationId = useSharedValue(0);
63
+ const nextAnimationId = useSharedValue(0);
64
+ const latestTarget = useSharedValue(initialPresentation);
65
+ const animationStart = useSharedValue(initialPresentation);
66
+ const animationProgress = useSharedValue(0);
67
+ const keyframes = useSharedValue([]);
68
+ const callbackRef = useRef(options.onAnimationComplete);
69
+ const driverRef = useRef(null);
70
+ callbackRef.current = options.onAnimationComplete;
71
+ useAnimatedReaction(() => animationProgress.value, progress => {
72
+ const frames = keyframes.value;
73
+ if (frames.length >= 2) {
74
+ let upperIndex = 1;
75
+ while (upperIndex < frames.length - 1 && progress > (frames[upperIndex]?.offset ?? 1)) {
76
+ upperIndex += 1;
77
+ }
78
+ const lower = frames[upperIndex - 1];
79
+ const upper = frames[upperIndex];
80
+ if (!lower || !upper) return;
81
+ const span = upper.offset - lower.offset;
82
+ const localProgress = span <= 0 ? 1 : (progress - lower.offset) / span;
83
+ presentation.value = interpolatePresentation(lower.presentation, upper.presentation, Math.min(1, Math.max(0, localProgress)));
84
+ return;
85
+ }
86
+ presentation.value = interpolatePresentation(animationStart.value, latestTarget.value, progress);
87
+ }, [animationProgress, animationStart, keyframes, latestTarget, presentation]);
88
+ if (driverRef.current === null) {
89
+ const driverId = allocateDriverId();
90
+ const reduceMotion = toReanimatedReduceMotion(options.reduceMotion ?? 'system');
91
+ const beginOnUI = () => {
92
+ 'worklet';
93
+
94
+ cancelReanimatedAnimation(animationProgress);
95
+ activeAnimationId.value = 0;
96
+ return presentation.value;
97
+ };
98
+ const setOnUI = next => {
99
+ 'worklet';
100
+
101
+ if (!isFiniteClipPresentation(next)) return;
102
+ cancelReanimatedAnimation(animationProgress);
103
+ activeAnimationId.value = 0;
104
+ latestTarget.value = next;
105
+ presentation.value = next;
106
+ };
107
+ const animateOnUI = (next, animation) => {
108
+ 'worklet';
109
+
110
+ nextAnimationId.value = nextAnimationId.value % 0x7ffffffe + 1;
111
+ const animationId = nextAnimationId.value;
112
+ if (!isFiniteClipPresentation(next) || !animationIsFinite(animation)) {
113
+ scheduleOnRN(finishFallback, driverId, animationId, false);
114
+ return animationId;
115
+ }
116
+ activeAnimationId.value = animationId;
117
+ animationStart.value = presentation.value;
118
+ latestTarget.value = next;
119
+ keyframes.value = [];
120
+ animationProgress.value = 0;
121
+ scheduleOnRN(snapshotDriverViews, driverId, animationId);
122
+ const onComplete = finished => {
123
+ 'worklet';
124
+
125
+ if (activeAnimationId.value === animationId) {
126
+ activeAnimationId.value = 0;
127
+ }
128
+ scheduleOnRN(finishFallback, driverId, animationId, finished === true);
129
+ };
130
+ if (animation.type === 'timing') {
131
+ const [x1, y1, x2, y2] = animation.controlPoints;
132
+ animationProgress.value = withTiming(1, {
133
+ duration: Math.max(0, animation.duration),
134
+ easing: Easing.bezier(x1, y1, x2, y2),
135
+ reduceMotion
136
+ }, onComplete);
137
+ } else if (animation.type === 'spring') {
138
+ const configuredVelocity = animation.initialVelocity;
139
+ animationProgress.value = withSpring(1, {
140
+ damping: animation.damping ?? 10,
141
+ mass: animation.mass ?? 1,
142
+ reduceMotion,
143
+ stiffness: animation.stiffness ?? 100,
144
+ // The fallback driver cannot sample native presentation motion,
145
+ // so 'inherit' (and undefined) degrade to zero launch velocity.
146
+ velocity: typeof configuredVelocity === 'number' ? configuredVelocity : 0
147
+ }, onComplete);
148
+ } else {
149
+ if (!clipPresentationEquals(animation.frames[animation.frames.length - 1]?.presentation ?? null, next)) {
150
+ scheduleOnRN(finishFallback, driverId, animationId, false);
151
+ activeAnimationId.value = 0;
152
+ return animationId;
153
+ }
154
+ keyframes.value = animation.frames;
155
+ animationProgress.value = withTiming(1, {
156
+ duration: Math.max(0, animation.duration),
157
+ easing: Easing.linear,
158
+ reduceMotion
159
+ }, onComplete);
160
+ }
161
+ return animationId;
162
+ };
163
+ const cancelOnUI = (animationId = 0, behavior = 'current') => {
164
+ 'worklet';
165
+
166
+ if (animationId !== 0 && animationId !== activeAnimationId.value) {
167
+ return presentation.value;
168
+ }
169
+ cancelReanimatedAnimation(animationProgress);
170
+ activeAnimationId.value = 0;
171
+ if (behavior === 'target') presentation.value = latestTarget.value;
172
+ return presentation.value;
173
+ };
174
+ const setScalarsOnUI = (x, y, width, height, radius, contentTranslateX, contentTranslateY) => {
175
+ 'worklet';
176
+
177
+ setOnUI({
178
+ clip: {
179
+ x,
180
+ y,
181
+ width,
182
+ height,
183
+ radius
184
+ },
185
+ contentTranslateX,
186
+ contentTranslateY
187
+ });
188
+ };
189
+ const driver = {
190
+ kind: 'hybrid',
191
+ presentation,
192
+ // Every worklet here shares the single JS runtime, so unlike the native
193
+ // driver there is no runtime guard on `ui`: calling it from React code
194
+ // is harmless in this fallback.
195
+ ui: {
196
+ beginInteraction: beginOnUI,
197
+ set: setOnUI,
198
+ setScalars: setScalarsOnUI,
199
+ animateTo: animateOnUI,
200
+ cancel: cancelOnUI
201
+ },
202
+ react: {
203
+ beginInteraction() {
204
+ const {
205
+ requestId,
206
+ promise
207
+ } = createReactRequest(driverId);
208
+ scheduleOnUI(() => {
209
+ 'worklet';
210
+
211
+ const result = beginOnUI();
212
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result);
213
+ });
214
+ return promise;
215
+ },
216
+ set(next) {
217
+ const {
218
+ requestId,
219
+ promise
220
+ } = createReactRequest(driverId);
221
+ scheduleOnUI(() => {
222
+ 'worklet';
223
+
224
+ setOnUI(next);
225
+ scheduleOnRN(resolveReactRequest, driverId, requestId, undefined);
226
+ });
227
+ return promise;
228
+ },
229
+ animateTo(next, animation) {
230
+ const {
231
+ requestId,
232
+ promise
233
+ } = createReactRequest(driverId, true);
234
+ scheduleOnUI(() => {
235
+ 'worklet';
236
+
237
+ const result = animateOnUI(next, animation);
238
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
239
+ });
240
+ return promise;
241
+ },
242
+ cancel(animationId = 0, behavior = 'current') {
243
+ const {
244
+ requestId,
245
+ promise
246
+ } = createReactRequest(driverId, true);
247
+ scheduleOnUI(() => {
248
+ 'worklet';
249
+
250
+ const result = cancelOnUI(animationId, behavior);
251
+ scheduleOnRN(resolveReactRequest, driverId, requestId, result, true);
252
+ });
253
+ return promise;
254
+ }
255
+ }
256
+ };
257
+ setDriverState(driver, createDriverState(driverId, initialPresentation, presentation, callbackRef, activeAnimationId));
258
+ driverRef.current = driver;
259
+ }
260
+ const driver = driverRef.current;
261
+ useEffect(() => {
262
+ const currentDriver = driverRef.current;
263
+ if (!currentDriver) return undefined;
264
+ const state = getDriverState(currentDriver);
265
+ // Re-attach on effect replays (StrictMode/<Activity>) after a cleanup
266
+ // detached this state.
267
+ attachDriverState(state);
268
+ return () => {
269
+ cancelReanimatedAnimation(animationProgress);
270
+ rejectDriverRequests(state.driverId);
271
+ detachDriverState(state);
272
+ };
273
+ }, [animationProgress]);
274
+ return driver;
275
+ }
276
+ //# sourceMappingURL=drivers.js.map
@@ -0,0 +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,5 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ export function createClipPresentation(clip, contentTranslateX = 0, contentTranslateY = 0) {
4
+ 'worklet';
5
+
6
+ return {
7
+ clip,
8
+ contentTranslateX,
9
+ contentTranslateY
10
+ };
11
+ }
3
12
  export function isFiniteClipGeometry(geometry) {
4
13
  'worklet';
5
14
 
@@ -10,6 +19,16 @@ export function clipGeometryEquals(first, second) {
10
19
 
11
20
  return first !== null && first.x === second.x && first.y === second.y && first.width === second.width && first.height === second.height && first.radius === second.radius;
12
21
  }
22
+ export function isFiniteClipPresentation(presentation) {
23
+ 'worklet';
24
+
25
+ return isFiniteClipGeometry(presentation.clip) && Number.isFinite(presentation.contentTranslateX) && Number.isFinite(presentation.contentTranslateY);
26
+ }
27
+ export function clipPresentationEquals(first, second) {
28
+ 'worklet';
29
+
30
+ return first !== null && clipGeometryEquals(first.clip, second.clip) && first.contentTranslateX === second.contentTranslateX && first.contentTranslateY === second.contentTranslateY;
31
+ }
13
32
 
14
33
  /**
15
34
  * Mirrors the native geometry contract for tests and non-native fallbacks.
@@ -1 +1 @@
1
- {"version":3,"names":["isFiniteClipGeometry","geometry","Number","isFinite","x","y","width","height","radius","clipGeometryEquals","first","second","normalizeClipGeometry","bounds","values","every","boundsWidth","Math","max","boundsHeight","requestedWidth","requestedHeight","left","min","top","right","bottom"],"sourceRoot":"../../src","sources":["geometry.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["createClipPresentation","clip","contentTranslateX","contentTranslateY","isFiniteClipGeometry","geometry","Number","isFinite","x","y","width","height","radius","clipGeometryEquals","first","second","isFiniteClipPresentation","presentation","clipPresentationEquals","normalizeClipGeometry","bounds","values","every","boundsWidth","Math","max","boundsHeight","requestedWidth","requestedHeight","left","min","top","right","bottom"],"sourceRoot":"../../src","sources":["geometry.ts"],"mappings":"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","ignoreList":[]}
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  export { SmoothClipView } from './SmoothClipView';
4
+ export { useSmoothClipDriver } from './drivers';
4
5
  export { normalizeClipGeometry } from "./geometry.js";
6
+ export { createClipPresentation } from "./geometry.js";
5
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SmoothClipView","normalizeClipGeometry"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,kBAAkB;AAEjD,SAASC,qBAAqB,QAAQ,eAAY","ignoreList":[]}
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,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  export { SmoothClipView } from "./SmoothClipView.web.js";
4
+ export { useSmoothClipDriver } from './drivers';
4
5
  export { normalizeClipGeometry } from "./geometry.js";
6
+ export { createClipPresentation } from "./geometry.js";
5
7
  //# sourceMappingURL=index.web.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SmoothClipView","normalizeClipGeometry"],"sourceRoot":"../../src","sources":["index.web.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,yBAAsB;AAErD,SAASC,qBAAqB,QAAQ,eAAY","ignoreList":[]}
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":[]}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ import { scheduleOnUI } from 'react-native-worklets';
4
+ import { deliverDriverCompletion } from "./driverState.js";
5
+ export function completeNativeAnimation(driverId, animationId, finished) {
6
+ deliverDriverCompletion(driverId, animationId, finished);
7
+ }
8
+ export function synchronizeNativeCompletion(activeAnimationId, ownership, animationId, _finished) {
9
+ // Unfinished completions must also release ownership: native emits
10
+ // finished:false when the last participating view unmounts or the system
11
+ // strips the animation. Superseded ids are already filtered by the
12
+ // active-id comparison below, so no finished-based gate is needed.
13
+ scheduleOnUI((active, owner, completedId) => {
14
+ 'worklet';
15
+
16
+ if (active.value !== completedId) return;
17
+ active.value = 0;
18
+ owner.value = 0;
19
+ }, activeAnimationId, ownership, animationId);
20
+ }
21
+ //# sourceMappingURL=nativeCompletion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["scheduleOnUI","deliverDriverCompletion","completeNativeAnimation","driverId","animationId","finished","synchronizeNativeCompletion","activeAnimationId","ownership","_finished","active","owner","completedId","value"],"sourceRoot":"../../src","sources":["nativeCompletion.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,uBAAuB;AACpD,SAASC,uBAAuB,QAAQ,kBAAe;AAEvD,OAAO,SAASC,uBAAuBA,CACrCC,QAAgB,EAChBC,WAAmB,EACnBC,QAAiB,EACX;EACNJ,uBAAuB,CAACE,QAAQ,EAAEC,WAAW,EAAEC,QAAQ,CAAC;AAC1D;AAEA,OAAO,SAASC,2BAA2BA,CACzCC,iBAAoC,EACpCC,SAA4B,EAC5BJ,WAAmB,EACnBK,SAAkB,EACZ;EACN;EACA;EACA;EACA;EACAT,YAAY,CACV,CACEU,MAAyB,EACzBC,KAAwB,EACxBC,WAAmB,KAChB;IACH,SAAS;;IACT,IAAIF,MAAM,CAACG,KAAK,KAAKD,WAAW,EAAE;IAClCF,MAAM,CAACG,KAAK,GAAG,CAAC;IAChBF,KAAK,CAACE,KAAK,GAAG,CAAC;EACjB,CAAC,EACDN,iBAAiB,EACjBC,SAAS,EACTJ,WACF,CAAC;AACH","ignoreList":[]}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ import { deferDriverCompletions, releaseDriverCompletions } from "./driverState.js";
4
+ const requests = new Map();
5
+ const requestsByDriver = new Map();
6
+ let nextRequestId = 0;
7
+ export function createReactRequest(driverId, deferCompletions = false) {
8
+ nextRequestId = nextRequestId % 0x7ffffffe + 1;
9
+ const requestId = nextRequestId;
10
+ let resolveRequest;
11
+ let rejectRequest;
12
+ const promise = new Promise((resolve, reject) => {
13
+ resolveRequest = resolve;
14
+ rejectRequest = reject;
15
+ });
16
+ requests.set(requestId, {
17
+ resolve: resolveRequest,
18
+ reject: rejectRequest
19
+ });
20
+ const driverRequests = requestsByDriver.get(driverId) ?? new Set();
21
+ driverRequests.add(requestId);
22
+ requestsByDriver.set(driverId, driverRequests);
23
+ if (deferCompletions) deferDriverCompletions(driverId);
24
+ return {
25
+ requestId,
26
+ promise
27
+ };
28
+ }
29
+ export function resolveReactRequest(driverId, requestId, value, releaseCompletions = false) {
30
+ const request = requests.get(requestId);
31
+ requests.delete(requestId);
32
+ const driverRequests = requestsByDriver.get(driverId);
33
+ driverRequests?.delete(requestId);
34
+ if (driverRequests?.size === 0) requestsByDriver.delete(driverId);
35
+ request?.resolve(value);
36
+ if (releaseCompletions) {
37
+ queueMicrotask(() => releaseDriverCompletions(driverId));
38
+ }
39
+ }
40
+ export function rejectDriverRequests(driverId) {
41
+ const driverRequests = requestsByDriver.get(driverId);
42
+ if (!driverRequests) return;
43
+ for (const requestId of driverRequests) {
44
+ const request = requests.get(requestId);
45
+ requests.delete(requestId);
46
+ request?.reject(new Error('[SmoothClipView] Driver was destroyed.'));
47
+ }
48
+ requestsByDriver.delete(driverId);
49
+ }
50
+ //# sourceMappingURL=reactRequests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["deferDriverCompletions","releaseDriverCompletions","requests","Map","requestsByDriver","nextRequestId","createReactRequest","driverId","deferCompletions","requestId","resolveRequest","rejectRequest","promise","Promise","resolve","reject","set","driverRequests","get","Set","add","resolveReactRequest","value","releaseCompletions","request","delete","size","queueMicrotask","rejectDriverRequests","Error"],"sourceRoot":"../../src","sources":["reactRequests.ts"],"mappings":";;AAAA,SACEA,sBAAsB,EACtBC,wBAAwB,QACnB,kBAAe;AAOtB,MAAMC,QAAQ,GAAG,IAAIC,GAAG,CAAyB,CAAC;AAClD,MAAMC,gBAAgB,GAAG,IAAID,GAAG,CAAsB,CAAC;AACvD,IAAIE,aAAa,GAAG,CAAC;AAErB,OAAO,SAASC,kBAAkBA,CAChCC,QAAgB,EAChBC,gBAAgB,GAAG,KAAK,EACoB;EAC5CH,aAAa,GAAIA,aAAa,GAAG,UAAU,GAAI,CAAC;EAChD,MAAMI,SAAS,GAAGJ,aAAa;EAC/B,IAAIK,cAAmC;EACvC,IAAIC,aAAsC;EAC1C,MAAMC,OAAO,GAAG,IAAIC,OAAO,CAAI,CAACC,OAAO,EAAEC,MAAM,KAAK;IAClDL,cAAc,GAAGI,OAAO;IACxBH,aAAa,GAAGI,MAAM;EACxB,CAAC,CAAC;EACFb,QAAQ,CAACc,GAAG,CAACP,SAAS,EAAE;IACtBK,OAAO,EAAEJ,cAA0C;IACnDK,MAAM,EAAEJ;EACV,CAAC,CAAC;EACF,MAAMM,cAAc,GAAGb,gBAAgB,CAACc,GAAG,CAACX,QAAQ,CAAC,IAAI,IAAIY,GAAG,CAAS,CAAC;EAC1EF,cAAc,CAACG,GAAG,CAACX,SAAS,CAAC;EAC7BL,gBAAgB,CAACY,GAAG,CAACT,QAAQ,EAAEU,cAAc,CAAC;EAC9C,IAAIT,gBAAgB,EAAER,sBAAsB,CAACO,QAAQ,CAAC;EACtD,OAAO;IAAEE,SAAS;IAAEG;EAAQ,CAAC;AAC/B;AAEA,OAAO,SAASS,mBAAmBA,CACjCd,QAAgB,EAChBE,SAAiB,EACjBa,KAAc,EACdC,kBAAkB,GAAG,KAAK,EACpB;EACN,MAAMC,OAAO,GAAGtB,QAAQ,CAACgB,GAAG,CAACT,SAAS,CAAC;EACvCP,QAAQ,CAACuB,MAAM,CAAChB,SAAS,CAAC;EAC1B,MAAMQ,cAAc,GAAGb,gBAAgB,CAACc,GAAG,CAACX,QAAQ,CAAC;EACrDU,cAAc,EAAEQ,MAAM,CAAChB,SAAS,CAAC;EACjC,IAAIQ,cAAc,EAAES,IAAI,KAAK,CAAC,EAAEtB,gBAAgB,CAACqB,MAAM,CAAClB,QAAQ,CAAC;EACjEiB,OAAO,EAAEV,OAAO,CAACQ,KAAK,CAAC;EACvB,IAAIC,kBAAkB,EAAE;IACtBI,cAAc,CAAC,MAAM1B,wBAAwB,CAACM,QAAQ,CAAC,CAAC;EAC1D;AACF;AAEA,OAAO,SAASqB,oBAAoBA,CAACrB,QAAgB,EAAQ;EAC3D,MAAMU,cAAc,GAAGb,gBAAgB,CAACc,GAAG,CAACX,QAAQ,CAAC;EACrD,IAAI,CAACU,cAAc,EAAE;EACrB,KAAK,MAAMR,SAAS,IAAIQ,cAAc,EAAE;IACtC,MAAMO,OAAO,GAAGtB,QAAQ,CAACgB,GAAG,CAACT,SAAS,CAAC;IACvCP,QAAQ,CAACuB,MAAM,CAAChB,SAAS,CAAC;IAC1Be,OAAO,EAAET,MAAM,CAAC,IAAIc,KAAK,CAAC,wCAAwC,CAAC,CAAC;EACtE;EACAzB,gBAAgB,CAACqB,MAAM,CAAClB,QAAQ,CAAC;AACnC","ignoreList":[]}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ // A Java/Kotlin TurboModule host function cannot be invoked synchronously from
5
+ // the Worklets UI runtime. The Android module therefore installs worklet-callable
6
+ // C++ host functions via TurboModuleWithJSIBindings. Resolving the module runs
7
+ // that installer synchronously (see TurboModuleManager), after which the driver
8
+ // uses the installed `global.__SmoothClipView` on both the UI and JS runtimes.
9
+ TurboModuleRegistry.getEnforcing('NativeSmoothClipModule');
10
+ const bindings = global.__SmoothClipView;
11
+ if (bindings == null) {
12
+ throw new Error('[SmoothClipView] Native JSI bindings are not installed. Rebuild the Android app after updating this package.');
13
+ }
14
+ export default bindings;
15
+ //# sourceMappingURL=smoothClipNative.android.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["TurboModuleRegistry","getEnforcing","bindings","global","__SmoothClipView","Error"],"sourceRoot":"../../src","sources":["smoothClipNative.android.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAAQ,cAAc;AAGlD;AACA;AACA;AACA;AACA;AACAA,mBAAmB,CAACC,YAAY,CAAO,wBAAwB,CAAC;AAEhE,MAAMC,QAAQ,GAAIC,MAAM,CACrBC,gBAAgB;AAEnB,IAAIF,QAAQ,IAAI,IAAI,EAAE;EACpB,MAAM,IAAIG,KAAK,CACb,8GACF,CAAC;AACH;AAEA,eAAeH,QAAQ","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ import NativeSmoothClipModule from "./NativeSmoothClipModule.js";
4
+
5
+ // iOS/default: the C++ TurboModule host functions are already worklet-callable,
6
+ // so the driver captures them directly from the module.
7
+ export default NativeSmoothClipModule;
8
+ //# sourceMappingURL=smoothClipNative.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeSmoothClipModule"],"sourceRoot":"../../src","sources":["smoothClipNative.ts"],"mappings":";;AAAA,OAAOA,sBAAsB,MAAM,6BAA0B;;AAE7D;AACA;AACA,eAAeA,sBAAsB","ignoreList":[]}
@@ -0,0 +1,19 @@
1
+ import type { CodegenTypes, TurboModule } from 'react-native';
2
+ export interface Spec extends TurboModule {
3
+ readonly onClipAnimationComplete: CodegenTypes.EventEmitter<Readonly<{
4
+ driverId: CodegenTypes.Double;
5
+ animationId: CodegenTypes.Int32;
6
+ finished: boolean;
7
+ }>>;
8
+ setClipPresentation(driverId: CodegenTypes.Double, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double, contentTranslateX: CodegenTypes.Double, contentTranslateY: CodegenTypes.Double, takeOwnership: boolean): void;
9
+ beginInteraction(driverId: CodegenTypes.Double): ReadonlyArray<CodegenTypes.Double>;
10
+ animateTiming(driverId: CodegenTypes.Double, hasInteractiveStart: boolean, startX: CodegenTypes.Double, startY: CodegenTypes.Double, startWidth: CodegenTypes.Double, startHeight: CodegenTypes.Double, startRadius: CodegenTypes.Double, startContentTranslateX: CodegenTypes.Double, startContentTranslateY: CodegenTypes.Double, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double, contentTranslateX: CodegenTypes.Double, contentTranslateY: CodegenTypes.Double, durationMs: CodegenTypes.Double, controlPoint1X: CodegenTypes.Double, controlPoint1Y: CodegenTypes.Double, controlPoint2X: CodegenTypes.Double, controlPoint2Y: CodegenTypes.Double, reduceMotion: CodegenTypes.Int32): CodegenTypes.Int32;
11
+ animateSpring(driverId: CodegenTypes.Double, hasInteractiveStart: boolean, startX: CodegenTypes.Double, startY: CodegenTypes.Double, startWidth: CodegenTypes.Double, startHeight: CodegenTypes.Double, startRadius: CodegenTypes.Double, startContentTranslateX: CodegenTypes.Double, startContentTranslateY: CodegenTypes.Double, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double, contentTranslateX: CodegenTypes.Double, contentTranslateY: CodegenTypes.Double, mass: CodegenTypes.Double, stiffness: CodegenTypes.Double, damping: CodegenTypes.Double, initialVelocity: CodegenTypes.Double, inheritVelocity: boolean, reduceMotion: CodegenTypes.Int32): CodegenTypes.Int32;
12
+ animateKeyframes(driverId: CodegenTypes.Double, hasInteractiveStart: boolean, startX: CodegenTypes.Double, startY: CodegenTypes.Double, startWidth: CodegenTypes.Double, startHeight: CodegenTypes.Double, startRadius: CodegenTypes.Double, startContentTranslateX: CodegenTypes.Double, startContentTranslateY: CodegenTypes.Double, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double, contentTranslateX: CodegenTypes.Double, contentTranslateY: CodegenTypes.Double, durationMs: CodegenTypes.Double, frames: ReadonlyArray<CodegenTypes.Double>, reduceMotion: CodegenTypes.Int32): CodegenTypes.Int32;
13
+ rejectAnimation(driverId: CodegenTypes.Double): CodegenTypes.Int32;
14
+ cancelAnimation(driverId: CodegenTypes.Double, animationId: CodegenTypes.Int32, behavior: CodegenTypes.Int32): ReadonlyArray<CodegenTypes.Double>;
15
+ destroyDriver(driverId: CodegenTypes.Double): void;
16
+ }
17
+ declare const _default: Spec;
18
+ export default _default;
19
+ //# sourceMappingURL=NativeSmoothClipModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeSmoothClipModule.d.ts","sourceRoot":"","sources":["../../../src/NativeSmoothClipModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAG9D,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,QAAQ,CAAC,uBAAuB,EAAE,YAAY,CAAC,YAAY,CACzD,QAAQ,CAAC;QACP,QAAQ,EAAE,YAAY,CAAC,MAAM,CAAC;QAC9B,WAAW,EAAE,YAAY,CAAC,KAAK,CAAC;QAChC,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CACH,CAAC;IACF,mBAAmB,CACjB,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,KAAK,EAAE,YAAY,CAAC,MAAM,EAC1B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,aAAa,EAAE,OAAO,GACrB,IAAI,CAAC;IACR,gBAAgB,CACd,QAAQ,EAAE,YAAY,CAAC,MAAM,GAC5B,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,CACX,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,UAAU,EAAE,YAAY,CAAC,MAAM,EAC/B,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,KAAK,EAAE,YAAY,CAAC,MAAM,EAC1B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,UAAU,EAAE,YAAY,CAAC,MAAM,EAC/B,cAAc,EAAE,YAAY,CAAC,MAAM,EACnC,cAAc,EAAE,YAAY,CAAC,MAAM,EACnC,cAAc,EAAE,YAAY,CAAC,MAAM,EACnC,cAAc,EAAE,YAAY,CAAC,MAAM,EACnC,YAAY,EAAE,YAAY,CAAC,KAAK,GAC/B,YAAY,CAAC,KAAK,CAAC;IACtB,aAAa,CACX,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,UAAU,EAAE,YAAY,CAAC,MAAM,EAC/B,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,KAAK,EAAE,YAAY,CAAC,MAAM,EAC1B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,IAAI,EAAE,YAAY,CAAC,MAAM,EACzB,SAAS,EAAE,YAAY,CAAC,MAAM,EAC9B,OAAO,EAAE,YAAY,CAAC,MAAM,EAC5B,eAAe,EAAE,YAAY,CAAC,MAAM,EACpC,eAAe,EAAE,OAAO,EACxB,YAAY,EAAE,YAAY,CAAC,KAAK,GAC/B,YAAY,CAAC,KAAK,CAAC;IACtB,gBAAgB,CACd,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,mBAAmB,EAAE,OAAO,EAC5B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,UAAU,EAAE,YAAY,CAAC,MAAM,EAC/B,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,WAAW,EAAE,YAAY,CAAC,MAAM,EAChC,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,sBAAsB,EAAE,YAAY,CAAC,MAAM,EAC3C,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,CAAC,EAAE,YAAY,CAAC,MAAM,EACtB,KAAK,EAAE,YAAY,CAAC,MAAM,EAC1B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,MAAM,EAAE,YAAY,CAAC,MAAM,EAC3B,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,iBAAiB,EAAE,YAAY,CAAC,MAAM,EACtC,UAAU,EAAE,YAAY,CAAC,MAAM,EAC/B,MAAM,EAAE,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,EAC1C,YAAY,EAAE,YAAY,CAAC,KAAK,GAC/B,YAAY,CAAC,KAAK,CAAC;IACtB,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC;IACnE,eAAe,CACb,QAAQ,EAAE,YAAY,CAAC,MAAM,EAC7B,WAAW,EAAE,YAAY,CAAC,KAAK,EAC/B,QAAQ,EAAE,YAAY,CAAC,KAAK,GAC3B,aAAa,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,aAAa,CAAC,QAAQ,EAAE,YAAY,CAAC,MAAM,GAAG,IAAI,CAAC;CACpD;;AAED,wBAAgF"}
@@ -0,0 +1,3 @@
1
+ export { SmoothClipView } from './SmoothClipView.ios.js';
2
+ export type { SmoothClipViewProps } from './SmoothClipView.ios.js';
3
+ //# sourceMappingURL=SmoothClipView.android.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmoothClipView.android.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.android.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAsB,CAAC;AACtD,YAAY,EAAE,mBAAmB,EAAE,MAAM,yBAAsB,CAAC"}
@@ -1,12 +1,11 @@
1
1
  import type React from 'react';
2
- import type { ReactNode } from 'react';
2
+ import { type ReactNode } from 'react';
3
3
  import { type ViewProps } from 'react-native';
4
- import { type SharedValue } from 'react-native-reanimated';
5
- import { type ClipGeometry } from './geometry.js';
4
+ import type { SmoothClipDriver } from './driverTypes.js';
6
5
  export type SmoothClipViewProps = ViewProps & {
7
- initialClip: ClipGeometry;
8
- animatedClip: SharedValue<ClipGeometry>;
6
+ driver: SmoothClipDriver;
9
7
  children?: ReactNode;
10
8
  };
11
- export declare function SmoothClipView({ initialClip, animatedClip, children, ...viewProps }: SmoothClipViewProps): React.JSX.Element;
9
+ /** Android fallback. iOS resolves SmoothClipView.ios.tsx instead. */
10
+ export declare function SmoothClipView({ driver, children, ...viewProps }: SmoothClipViewProps): React.JSX.Element;
12
11
  //# sourceMappingURL=SmoothClipView.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SmoothClipView.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAiB,EAIf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,eAAY,CAAC;AAKpB,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,WAAW,EAAE,YAAY,CAAC;IAC1B,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,mBAAmB,qBAuCrB"}
1
+ {"version":3,"file":"SmoothClipView.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAe,CAAC;AAUtD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,qEAAqE;AACrE,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,mBAAmB,qBA+CrB"}
@@ -0,0 +1,9 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type ViewProps } from 'react-native';
3
+ import type { SmoothClipDriver } from './driverTypes.js';
4
+ export type SmoothClipViewProps = ViewProps & {
5
+ driver: SmoothClipDriver;
6
+ children?: ReactNode;
7
+ };
8
+ export declare function SmoothClipView({ driver, children, ...viewProps }: SmoothClipViewProps): import("react").JSX.Element;
9
+ //# sourceMappingURL=SmoothClipView.ios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmoothClipView.ios.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.ios.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAe,CAAC;AAMtD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,GAAG,SAAS,EACb,EAAE,mBAAmB,+BAkBrB"}
@@ -1,12 +1,10 @@
1
- import type { ReactNode } from 'react';
1
+ import { type ReactNode } from 'react';
2
2
  import { type ViewProps } from 'react-native';
3
- import { type SharedValue } from 'react-native-reanimated';
4
- import { type ClipGeometry } from './geometry.js';
3
+ import type { SmoothClipDriver } from './driverTypes.js';
5
4
  export type SmoothClipViewProps = ViewProps & {
6
- initialClip: ClipGeometry;
7
- animatedClip: SharedValue<ClipGeometry>;
5
+ driver: SmoothClipDriver;
8
6
  children?: ReactNode;
9
7
  };
10
- /** Build-safe fallback. Web performance is intentionally outside the POC. */
11
- export declare function SmoothClipView({ initialClip, animatedClip, children, style, ...viewProps }: SmoothClipViewProps): import("react").JSX.Element;
8
+ /** Fixed-layout CSS fallback. */
9
+ export declare function SmoothClipView({ driver, children, style, ...viewProps }: SmoothClipViewProps): import("react").JSX.Element;
12
10
  //# sourceMappingURL=SmoothClipView.web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SmoothClipView.web.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,cAAc,CAAC;AAC9D,OAAiB,EAIf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,eAAY,CAAC;AAGpB,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,WAAW,EAAE,YAAY,CAAC;IAC1B,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,6EAA6E;AAC7E,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,KAAK,EACL,GAAG,SAAS,EACb,EAAE,mBAAmB,+BAiCrB"}
1
+ {"version":3,"file":"SmoothClipView.web.d.ts","sourceRoot":"","sources":["../../../src/SmoothClipView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAa,MAAM,OAAO,CAAC;AAClD,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,cAAc,CAAC;AAM9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAe,CAAC;AAKtD,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG;IAC5C,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,iCAAiC;AACjC,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,QAAQ,EACR,KAAK,EACL,GAAG,SAAS,EACb,EAAE,mBAAmB,+BA0CrB"}
@@ -1,13 +1,17 @@
1
1
  import { type CodegenTypes, type HostComponent, type ViewProps } from 'react-native';
2
2
  export interface NativeProps extends ViewProps {
3
+ driverId: CodegenTypes.Double;
3
4
  initialClipX: CodegenTypes.Double;
4
5
  initialClipY: CodegenTypes.Double;
5
6
  initialClipWidth: CodegenTypes.Double;
6
7
  initialClipHeight: CodegenTypes.Double;
7
8
  initialClipRadius: CodegenTypes.Double;
9
+ initialContentTranslateX: CodegenTypes.Double;
10
+ initialContentTranslateY: CodegenTypes.Double;
8
11
  }
9
12
  interface NativeCommands {
10
13
  setClipGeometry: (viewRef: React.ElementRef<HostComponent<NativeProps>>, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double) => void;
14
+ setClipPresentation: (viewRef: React.ElementRef<HostComponent<NativeProps>>, x: CodegenTypes.Double, y: CodegenTypes.Double, width: CodegenTypes.Double, height: CodegenTypes.Double, radius: CodegenTypes.Double, contentTranslateX: CodegenTypes.Double, contentTranslateY: CodegenTypes.Double) => void;
11
15
  }
12
16
  export declare const Commands: NativeCommands;
13
17
  declare const _default: HostComponent<NativeProps>;