react-native-smooth-clip-view 0.3.0 → 0.4.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 (199) hide show
  1. package/README.md +135 -386
  2. package/android/build.gradle +4 -7
  3. package/android/proguard-rules.pro +2 -2
  4. package/android/src/main/cpp/SmoothClipAndroid.h +9 -12
  5. package/android/src/main/cpp/SmoothClipBindings.cpp +300 -704
  6. package/android/src/main/cpp/SmoothClipRegistry.cpp +348 -594
  7. package/android/src/main/java/com/smoothclipview/ClipGeometryNormalizer.kt +36 -227
  8. package/android/src/main/java/com/smoothclipview/SmoothClipBindings.kt +16 -19
  9. package/android/src/main/java/com/smoothclipview/SmoothClipModule.kt +36 -294
  10. package/android/src/main/java/com/smoothclipview/SmoothClipView.kt +369 -486
  11. package/android/src/main/java/com/smoothclipview/SmoothClipViewManager.kt +75 -77
  12. package/cpp/SmoothClipAnimationCurve.h +237 -346
  13. package/cpp/SmoothClipRegistry.h +24 -52
  14. package/cpp/SmoothClipSharedGeometry.h +64 -94
  15. package/cpp/SmoothClipVelocityTracker.h +5 -5
  16. package/ios/SmoothClipGeometry.h +23 -34
  17. package/ios/SmoothClipRegistry.mm +206 -711
  18. package/ios/SmoothClipTurboModule.cpp +217 -715
  19. package/ios/SmoothClipTurboModule.h +54 -297
  20. package/ios/SmoothClipView.mm +599 -505
  21. package/ios/SmoothClipViewRegistry.h +2 -7
  22. package/lib/module/NativeSmoothClipModule.js.map +1 -1
  23. package/lib/module/SmoothClipView.ios.js +84 -17
  24. package/lib/module/SmoothClipView.ios.js.map +1 -1
  25. package/lib/module/SmoothClipView.js +1 -1
  26. package/lib/module/SmoothClipView.js.map +1 -1
  27. package/lib/module/SmoothClipViewNativeComponent.ts +20 -26
  28. package/lib/module/capabilities.native.js +1 -19
  29. package/lib/module/capabilities.native.js.map +1 -1
  30. package/lib/module/capabilityTypes.js +0 -9
  31. package/lib/module/capabilityTypes.js.map +1 -1
  32. package/lib/module/controllerInternals.js +28 -0
  33. package/lib/module/controllerInternals.js.map +1 -0
  34. package/lib/module/controllerLifecycle.js +9 -0
  35. package/lib/module/controllerLifecycle.js.map +1 -0
  36. package/lib/module/controllerTypes.js +4 -0
  37. package/lib/module/controllerTypes.js.map +1 -0
  38. package/lib/module/controllers.android.js +4 -0
  39. package/lib/module/controllers.android.js.map +1 -0
  40. package/lib/module/controllers.ios.js +4 -0
  41. package/lib/module/controllers.ios.js.map +1 -0
  42. package/lib/module/controllers.js +4 -0
  43. package/lib/module/controllers.js.map +1 -0
  44. package/lib/module/controllers.native.js +89 -0
  45. package/lib/module/controllers.native.js.map +1 -0
  46. package/lib/module/geometry.js +71 -51
  47. package/lib/module/geometry.js.map +1 -1
  48. package/lib/module/groupTypes.js +4 -0
  49. package/lib/module/{groupDriverTypes.js.map → groupTypes.js.map} +1 -1
  50. package/lib/module/groups.android.js +4 -0
  51. package/lib/module/groups.android.js.map +1 -0
  52. package/lib/module/groups.ios.js +4 -0
  53. package/lib/module/groups.ios.js.map +1 -0
  54. package/lib/module/groups.js +4 -0
  55. package/lib/module/groups.js.map +1 -0
  56. package/lib/module/groups.native.js +399 -0
  57. package/lib/module/groups.native.js.map +1 -0
  58. package/lib/module/ids.js +8 -0
  59. package/lib/module/ids.js.map +1 -0
  60. package/lib/module/index.js +3 -3
  61. package/lib/module/index.js.map +1 -1
  62. package/lib/module/nativeCompletion.js +37 -16
  63. package/lib/module/nativeCompletion.js.map +1 -1
  64. package/lib/module/presentationCodec.js +81 -0
  65. package/lib/module/presentationCodec.js.map +1 -0
  66. package/lib/typescript/src/NativeSmoothClipModule.d.ts +14 -23
  67. package/lib/typescript/src/NativeSmoothClipModule.d.ts.map +1 -1
  68. package/lib/typescript/src/SmoothClipView.d.ts +1 -1
  69. package/lib/typescript/src/SmoothClipView.d.ts.map +1 -1
  70. package/lib/typescript/src/SmoothClipView.ios.d.ts +18 -14
  71. package/lib/typescript/src/SmoothClipView.ios.d.ts.map +1 -1
  72. package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts +10 -5
  73. package/lib/typescript/src/SmoothClipViewNativeComponent.d.ts.map +1 -1
  74. package/lib/typescript/src/capabilities.native.d.ts +1 -1
  75. package/lib/typescript/src/capabilities.native.d.ts.map +1 -1
  76. package/lib/typescript/src/capabilityTypes.d.ts +0 -6
  77. package/lib/typescript/src/capabilityTypes.d.ts.map +1 -1
  78. package/lib/typescript/src/controllerInternals.d.ts +14 -0
  79. package/lib/typescript/src/controllerInternals.d.ts.map +1 -0
  80. package/lib/typescript/src/controllerLifecycle.d.ts +3 -0
  81. package/lib/typescript/src/controllerLifecycle.d.ts.map +1 -0
  82. package/lib/typescript/src/controllerTypes.d.ts +62 -0
  83. package/lib/typescript/src/controllerTypes.d.ts.map +1 -0
  84. package/lib/typescript/src/controllers.android.d.ts +2 -0
  85. package/lib/typescript/src/controllers.android.d.ts.map +1 -0
  86. package/lib/typescript/src/controllers.d.ts +2 -0
  87. package/lib/typescript/src/controllers.d.ts.map +1 -0
  88. package/lib/typescript/src/controllers.ios.d.ts +2 -0
  89. package/lib/typescript/src/controllers.ios.d.ts.map +1 -0
  90. package/lib/typescript/src/controllers.native.d.ts +3 -0
  91. package/lib/typescript/src/controllers.native.d.ts.map +1 -0
  92. package/lib/typescript/src/geometry.d.ts +22 -12
  93. package/lib/typescript/src/geometry.d.ts.map +1 -1
  94. package/lib/typescript/src/groupTypes.d.ts +31 -0
  95. package/lib/typescript/src/groupTypes.d.ts.map +1 -0
  96. package/lib/typescript/src/groups.android.d.ts +2 -0
  97. package/lib/typescript/src/groups.android.d.ts.map +1 -0
  98. package/lib/typescript/src/groups.d.ts +2 -0
  99. package/lib/typescript/src/groups.d.ts.map +1 -0
  100. package/lib/typescript/src/groups.ios.d.ts +2 -0
  101. package/lib/typescript/src/groups.ios.d.ts.map +1 -0
  102. package/lib/typescript/src/groups.native.d.ts +3 -0
  103. package/lib/typescript/src/groups.native.d.ts.map +1 -0
  104. package/lib/typescript/src/ids.d.ts +2 -0
  105. package/lib/typescript/src/ids.d.ts.map +1 -0
  106. package/lib/typescript/src/index.d.ts +6 -6
  107. package/lib/typescript/src/index.d.ts.map +1 -1
  108. package/lib/typescript/src/nativeCompletion.d.ts +16 -6
  109. package/lib/typescript/src/nativeCompletion.d.ts.map +1 -1
  110. package/lib/typescript/src/presentationCodec.d.ts +10 -0
  111. package/lib/typescript/src/presentationCodec.d.ts.map +1 -0
  112. package/package.json +8 -3
  113. package/src/NativeSmoothClipModule.ts +41 -292
  114. package/src/SmoothClipView.ios.tsx +130 -23
  115. package/src/SmoothClipView.tsx +5 -1
  116. package/src/SmoothClipViewNativeComponent.ts +20 -26
  117. package/src/capabilities.native.ts +2 -52
  118. package/src/capabilityTypes.ts +0 -14
  119. package/src/controllerInternals.ts +52 -0
  120. package/src/controllerLifecycle.ts +6 -0
  121. package/src/controllerTypes.ts +87 -0
  122. package/src/controllers.android.ts +1 -0
  123. package/src/controllers.ios.ts +1 -0
  124. package/src/controllers.native.ts +104 -0
  125. package/src/controllers.ts +1 -0
  126. package/src/geometry.ts +118 -74
  127. package/src/groupTypes.ts +53 -0
  128. package/src/groups.android.ts +1 -0
  129. package/src/groups.ios.ts +1 -0
  130. package/src/groups.native.ts +604 -0
  131. package/src/groups.ts +1 -0
  132. package/src/ids.ts +6 -0
  133. package/src/index.ts +20 -28
  134. package/src/nativeCompletion.ts +67 -32
  135. package/src/presentationCodec.ts +134 -0
  136. package/lib/module/driverState.js +0 -82
  137. package/lib/module/driverState.js.map +0 -1
  138. package/lib/module/driverTypes.js +0 -4
  139. package/lib/module/driverTypes.js.map +0 -1
  140. package/lib/module/drivers.android.js +0 -6
  141. package/lib/module/drivers.android.js.map +0 -1
  142. package/lib/module/drivers.ios.js +0 -6
  143. package/lib/module/drivers.ios.js.map +0 -1
  144. package/lib/module/drivers.js +0 -4
  145. package/lib/module/drivers.js.map +0 -1
  146. package/lib/module/drivers.native.js +0 -756
  147. package/lib/module/drivers.native.js.map +0 -1
  148. package/lib/module/groupDriverTypes.js +0 -4
  149. package/lib/module/groupDrivers.android.js +0 -4
  150. package/lib/module/groupDrivers.android.js.map +0 -1
  151. package/lib/module/groupDrivers.ios.js +0 -4
  152. package/lib/module/groupDrivers.ios.js.map +0 -1
  153. package/lib/module/groupDrivers.js +0 -4
  154. package/lib/module/groupDrivers.js.map +0 -1
  155. package/lib/module/groupDrivers.native.js +0 -799
  156. package/lib/module/groupDrivers.native.js.map +0 -1
  157. package/lib/module/presentationProtocol.js +0 -15
  158. package/lib/module/presentationProtocol.js.map +0 -1
  159. package/lib/module/reactRequests.js +0 -56
  160. package/lib/module/reactRequests.js.map +0 -1
  161. package/lib/typescript/src/driverState.d.ts +0 -26
  162. package/lib/typescript/src/driverState.d.ts.map +0 -1
  163. package/lib/typescript/src/driverTypes.d.ts +0 -121
  164. package/lib/typescript/src/driverTypes.d.ts.map +0 -1
  165. package/lib/typescript/src/drivers.android.d.ts +0 -3
  166. package/lib/typescript/src/drivers.android.d.ts.map +0 -1
  167. package/lib/typescript/src/drivers.d.ts +0 -3
  168. package/lib/typescript/src/drivers.d.ts.map +0 -1
  169. package/lib/typescript/src/drivers.ios.d.ts +0 -3
  170. package/lib/typescript/src/drivers.ios.d.ts.map +0 -1
  171. package/lib/typescript/src/drivers.native.d.ts +0 -5
  172. package/lib/typescript/src/drivers.native.d.ts.map +0 -1
  173. package/lib/typescript/src/groupDriverTypes.d.ts +0 -66
  174. package/lib/typescript/src/groupDriverTypes.d.ts.map +0 -1
  175. package/lib/typescript/src/groupDrivers.android.d.ts +0 -2
  176. package/lib/typescript/src/groupDrivers.android.d.ts.map +0 -1
  177. package/lib/typescript/src/groupDrivers.d.ts +0 -2
  178. package/lib/typescript/src/groupDrivers.d.ts.map +0 -1
  179. package/lib/typescript/src/groupDrivers.ios.d.ts +0 -2
  180. package/lib/typescript/src/groupDrivers.ios.d.ts.map +0 -1
  181. package/lib/typescript/src/groupDrivers.native.d.ts +0 -4
  182. package/lib/typescript/src/groupDrivers.native.d.ts.map +0 -1
  183. package/lib/typescript/src/presentationProtocol.d.ts +0 -4
  184. package/lib/typescript/src/presentationProtocol.d.ts.map +0 -1
  185. package/lib/typescript/src/reactRequests.d.ts +0 -9
  186. package/lib/typescript/src/reactRequests.d.ts.map +0 -1
  187. package/src/driverState.ts +0 -118
  188. package/src/driverTypes.ts +0 -171
  189. package/src/drivers.android.ts +0 -8
  190. package/src/drivers.ios.ts +0 -8
  191. package/src/drivers.native.ts +0 -1599
  192. package/src/drivers.ts +0 -6
  193. package/src/groupDriverTypes.ts +0 -117
  194. package/src/groupDrivers.android.ts +0 -1
  195. package/src/groupDrivers.ios.ts +0 -1
  196. package/src/groupDrivers.native.ts +0 -1189
  197. package/src/groupDrivers.ts +0 -1
  198. package/src/presentationProtocol.ts +0 -28
  199. package/src/reactRequests.ts +0 -76
@@ -6,6 +6,7 @@ export interface Spec extends TurboModule {
6
6
  Readonly<{
7
7
  driverId: CodegenTypes.Double;
8
8
  animationId: CodegenTypes.Int32;
9
+ completionTag: CodegenTypes.Int32;
9
10
  finished: boolean;
10
11
  }>
11
12
  >;
@@ -13,22 +14,22 @@ export interface Spec extends TurboModule {
13
14
  Readonly<{
14
15
  controllerId: CodegenTypes.Double;
15
16
  groupId: CodegenTypes.Int32;
17
+ completionTag: CodegenTypes.Int32;
16
18
  finished: boolean;
17
- driverIds: ReadonlyArray<CodegenTypes.Double>;
19
+ snapshots: ReadonlyArray<CodegenTypes.Double>;
18
20
  }>
19
21
  >;
20
- getPresentationProtocolVersion(): CodegenTypes.Int32;
21
22
  supportsAutonomousComplexPathAnimation(): boolean;
22
- beginGroupInteractionV2(
23
+ beginGroupInteraction(
23
24
  driverIds: ReadonlyArray<CodegenTypes.Double>
24
25
  ): ReadonlyArray<CodegenTypes.Double>;
25
- snapshotGroupV2(
26
+ snapshotGroup(
26
27
  driverIds: ReadonlyArray<CodegenTypes.Double>
27
28
  ): ReadonlyArray<CodegenTypes.Double>;
28
- setClipPresentationBatchV2(
29
+ setClipPresentationBatch(
29
30
  entries: ReadonlyArray<CodegenTypes.Double>
30
31
  ): boolean;
31
- animateTimingGroupV2(
32
+ animateTimingGroup(
32
33
  controllerId: CodegenTypes.Double,
33
34
  entries: ReadonlyArray<CodegenTypes.Double>,
34
35
  durationMs: CodegenTypes.Double,
@@ -37,31 +38,32 @@ export interface Spec extends TurboModule {
37
38
  controlPoint2X: CodegenTypes.Double,
38
39
  controlPoint2Y: CodegenTypes.Double,
39
40
  reduceMotion: CodegenTypes.Int32,
40
- suspensionPolicy: CodegenTypes.Int32
41
+ completionTag: CodegenTypes.Int32,
42
+ startTimestamp: CodegenTypes.Double
41
43
  ): CodegenTypes.Int32;
42
- animateSpringGroupV2(
44
+ animateSpringGroup(
43
45
  controllerId: CodegenTypes.Double,
44
46
  entries: ReadonlyArray<CodegenTypes.Double>,
45
47
  mass: CodegenTypes.Double,
46
48
  stiffness: CodegenTypes.Double,
47
49
  damping: CodegenTypes.Double,
48
- initialVelocity: CodegenTypes.Double,
49
- inheritVelocity: boolean,
50
+ velocity: CodegenTypes.Double,
51
+ energyThreshold: CodegenTypes.Double,
50
52
  reduceMotion: CodegenTypes.Int32,
51
- suspensionPolicy: CodegenTypes.Int32
53
+ completionTag: CodegenTypes.Int32,
54
+ startTimestamp: CodegenTypes.Double
52
55
  ): CodegenTypes.Int32;
53
- animateKeyframesGroupV2(
54
- controllerId: CodegenTypes.Double,
55
- entries: ReadonlyArray<CodegenTypes.Double>,
56
- durationMs: CodegenTypes.Double,
57
- reduceMotion: CodegenTypes.Int32,
58
- suspensionPolicy: CodegenTypes.Int32
59
- ): CodegenTypes.Int32;
60
- cancelAnimationGroupV2(
56
+ cancelAnimationGroup(
61
57
  groupId: CodegenTypes.Int32,
62
58
  behavior: CodegenTypes.Int32
63
59
  ): ReadonlyArray<CodegenTypes.Double>;
64
- setClipPresentationV2(
60
+ setClipPresentation(
61
+ driverId: CodegenTypes.Double,
62
+ presentation: ReadonlyArray<CodegenTypes.Double>,
63
+ takeOwnership: boolean,
64
+ overridePendingAnimation: boolean
65
+ ): void;
66
+ setClipFrameScalars(
65
67
  driverId: CodegenTypes.Double,
66
68
  x: CodegenTypes.Double,
67
69
  y: CodegenTypes.Double,
@@ -75,293 +77,45 @@ export interface Spec extends TurboModule {
75
77
  contentTranslateX: CodegenTypes.Double,
76
78
  contentTranslateY: CodegenTypes.Double,
77
79
  contentScale: CodegenTypes.Double,
78
- takeOwnership: boolean,
79
- overridePendingAnimation: boolean
80
+ shadowEnabled: boolean,
81
+ shadowRed: CodegenTypes.Double,
82
+ shadowGreen: CodegenTypes.Double,
83
+ shadowBlue: CodegenTypes.Double,
84
+ shadowAlpha: CodegenTypes.Double,
85
+ shadowOffsetX: CodegenTypes.Double,
86
+ shadowOffsetY: CodegenTypes.Double,
87
+ shadowBlurRadius: CodegenTypes.Double,
88
+ shadowSpreadDistance: CodegenTypes.Double
80
89
  ): void;
81
- beginInteractionV2(
90
+ beginInteraction(
82
91
  driverId: CodegenTypes.Double
83
92
  ): ReadonlyArray<CodegenTypes.Double>;
84
- snapshotCurrentV2(
85
- driverId: CodegenTypes.Double
86
- ): ReadonlyArray<CodegenTypes.Double>;
87
- setClipPresentation(
88
- driverId: CodegenTypes.Double,
89
- x: CodegenTypes.Double,
90
- y: CodegenTypes.Double,
91
- width: CodegenTypes.Double,
92
- height: CodegenTypes.Double,
93
- radius: CodegenTypes.Double,
94
- contentTranslateX: CodegenTypes.Double,
95
- contentTranslateY: CodegenTypes.Double,
96
- takeOwnership: boolean,
97
- overridePendingAnimation: boolean
98
- ): void;
99
- beginInteraction(
93
+ snapshotCurrent(
100
94
  driverId: CodegenTypes.Double
101
95
  ): ReadonlyArray<CodegenTypes.Double>;
102
96
  animateTiming(
103
97
  driverId: CodegenTypes.Double,
104
- hasInteractiveStart: boolean,
105
- startX: CodegenTypes.Double,
106
- startY: CodegenTypes.Double,
107
- startWidth: CodegenTypes.Double,
108
- startHeight: CodegenTypes.Double,
109
- startRadius: CodegenTypes.Double,
110
- startContentTranslateX: CodegenTypes.Double,
111
- startContentTranslateY: CodegenTypes.Double,
112
- x: CodegenTypes.Double,
113
- y: CodegenTypes.Double,
114
- width: CodegenTypes.Double,
115
- height: CodegenTypes.Double,
116
- radius: CodegenTypes.Double,
117
- contentTranslateX: CodegenTypes.Double,
118
- contentTranslateY: CodegenTypes.Double,
98
+ start: ReadonlyArray<CodegenTypes.Double>,
99
+ target: ReadonlyArray<CodegenTypes.Double>,
119
100
  durationMs: CodegenTypes.Double,
120
101
  controlPoint1X: CodegenTypes.Double,
121
102
  controlPoint1Y: CodegenTypes.Double,
122
103
  controlPoint2X: CodegenTypes.Double,
123
104
  controlPoint2Y: CodegenTypes.Double,
124
- reduceMotion: CodegenTypes.Int32
125
- ): CodegenTypes.Int32;
126
- animateTimingV2(
127
- driverId: CodegenTypes.Double,
128
- hasInteractiveStart: boolean,
129
- startX: CodegenTypes.Double,
130
- startY: CodegenTypes.Double,
131
- startWidth: CodegenTypes.Double,
132
- startHeight: CodegenTypes.Double,
133
- startTopLeftRadius: CodegenTypes.Double,
134
- startTopRightRadius: CodegenTypes.Double,
135
- startBottomRightRadius: CodegenTypes.Double,
136
- startBottomLeftRadius: CodegenTypes.Double,
137
- startCurveCode: CodegenTypes.Int32,
138
- startContentTranslateX: CodegenTypes.Double,
139
- startContentTranslateY: CodegenTypes.Double,
140
- startContentScale: CodegenTypes.Double,
141
- x: CodegenTypes.Double,
142
- y: CodegenTypes.Double,
143
- width: CodegenTypes.Double,
144
- height: CodegenTypes.Double,
145
- topLeftRadius: CodegenTypes.Double,
146
- topRightRadius: CodegenTypes.Double,
147
- bottomRightRadius: CodegenTypes.Double,
148
- bottomLeftRadius: CodegenTypes.Double,
149
- curveCode: CodegenTypes.Int32,
150
- contentTranslateX: CodegenTypes.Double,
151
- contentTranslateY: CodegenTypes.Double,
152
- contentScale: CodegenTypes.Double,
153
- durationMs: CodegenTypes.Double,
154
- controlPoint1X: CodegenTypes.Double,
155
- controlPoint1Y: CodegenTypes.Double,
156
- controlPoint2X: CodegenTypes.Double,
157
- controlPoint2Y: CodegenTypes.Double,
158
- reduceMotion: CodegenTypes.Int32
105
+ reduceMotion: CodegenTypes.Int32,
106
+ completionTag: CodegenTypes.Int32
159
107
  ): CodegenTypes.Int32;
160
108
  animateSpring(
161
109
  driverId: CodegenTypes.Double,
162
- hasInteractiveStart: boolean,
163
- startX: CodegenTypes.Double,
164
- startY: CodegenTypes.Double,
165
- startWidth: CodegenTypes.Double,
166
- startHeight: CodegenTypes.Double,
167
- startRadius: CodegenTypes.Double,
168
- startContentTranslateX: CodegenTypes.Double,
169
- startContentTranslateY: CodegenTypes.Double,
170
- x: CodegenTypes.Double,
171
- y: CodegenTypes.Double,
172
- width: CodegenTypes.Double,
173
- height: CodegenTypes.Double,
174
- radius: CodegenTypes.Double,
175
- contentTranslateX: CodegenTypes.Double,
176
- contentTranslateY: CodegenTypes.Double,
177
- mass: CodegenTypes.Double,
178
- stiffness: CodegenTypes.Double,
179
- damping: CodegenTypes.Double,
180
- initialVelocity: CodegenTypes.Double,
181
- inheritVelocity: boolean,
182
- reduceMotion: CodegenTypes.Int32
183
- ): CodegenTypes.Int32;
184
- animateSpringV2(
185
- driverId: CodegenTypes.Double,
186
- hasInteractiveStart: boolean,
187
- startX: CodegenTypes.Double,
188
- startY: CodegenTypes.Double,
189
- startWidth: CodegenTypes.Double,
190
- startHeight: CodegenTypes.Double,
191
- startTopLeftRadius: CodegenTypes.Double,
192
- startTopRightRadius: CodegenTypes.Double,
193
- startBottomRightRadius: CodegenTypes.Double,
194
- startBottomLeftRadius: CodegenTypes.Double,
195
- startCurveCode: CodegenTypes.Int32,
196
- startContentTranslateX: CodegenTypes.Double,
197
- startContentTranslateY: CodegenTypes.Double,
198
- startContentScale: CodegenTypes.Double,
199
- x: CodegenTypes.Double,
200
- y: CodegenTypes.Double,
201
- width: CodegenTypes.Double,
202
- height: CodegenTypes.Double,
203
- topLeftRadius: CodegenTypes.Double,
204
- topRightRadius: CodegenTypes.Double,
205
- bottomRightRadius: CodegenTypes.Double,
206
- bottomLeftRadius: CodegenTypes.Double,
207
- curveCode: CodegenTypes.Int32,
208
- contentTranslateX: CodegenTypes.Double,
209
- contentTranslateY: CodegenTypes.Double,
210
- contentScale: CodegenTypes.Double,
211
- mass: CodegenTypes.Double,
212
- stiffness: CodegenTypes.Double,
213
- damping: CodegenTypes.Double,
214
- initialVelocity: CodegenTypes.Double,
215
- inheritVelocity: boolean,
216
- reduceMotion: CodegenTypes.Int32
217
- ): CodegenTypes.Int32;
218
- animateKeyframes(
219
- driverId: CodegenTypes.Double,
220
- hasInteractiveStart: boolean,
221
- startX: CodegenTypes.Double,
222
- startY: CodegenTypes.Double,
223
- startWidth: CodegenTypes.Double,
224
- startHeight: CodegenTypes.Double,
225
- startRadius: CodegenTypes.Double,
226
- startContentTranslateX: CodegenTypes.Double,
227
- startContentTranslateY: CodegenTypes.Double,
228
- x: CodegenTypes.Double,
229
- y: CodegenTypes.Double,
230
- width: CodegenTypes.Double,
231
- height: CodegenTypes.Double,
232
- radius: CodegenTypes.Double,
233
- contentTranslateX: CodegenTypes.Double,
234
- contentTranslateY: CodegenTypes.Double,
235
- durationMs: CodegenTypes.Double,
236
- frames: ReadonlyArray<CodegenTypes.Double>,
237
- reduceMotion: CodegenTypes.Int32
238
- ): CodegenTypes.Int32;
239
- animateKeyframesV2(
240
- driverId: CodegenTypes.Double,
241
- hasInteractiveStart: boolean,
242
- startX: CodegenTypes.Double,
243
- startY: CodegenTypes.Double,
244
- startWidth: CodegenTypes.Double,
245
- startHeight: CodegenTypes.Double,
246
- startTopLeftRadius: CodegenTypes.Double,
247
- startTopRightRadius: CodegenTypes.Double,
248
- startBottomRightRadius: CodegenTypes.Double,
249
- startBottomLeftRadius: CodegenTypes.Double,
250
- startCurveCode: CodegenTypes.Int32,
251
- startContentTranslateX: CodegenTypes.Double,
252
- startContentTranslateY: CodegenTypes.Double,
253
- startContentScale: CodegenTypes.Double,
254
- x: CodegenTypes.Double,
255
- y: CodegenTypes.Double,
256
- width: CodegenTypes.Double,
257
- height: CodegenTypes.Double,
258
- topLeftRadius: CodegenTypes.Double,
259
- topRightRadius: CodegenTypes.Double,
260
- bottomRightRadius: CodegenTypes.Double,
261
- bottomLeftRadius: CodegenTypes.Double,
262
- curveCode: CodegenTypes.Int32,
263
- contentTranslateX: CodegenTypes.Double,
264
- contentTranslateY: CodegenTypes.Double,
265
- contentScale: CodegenTypes.Double,
266
- durationMs: CodegenTypes.Double,
267
- frames: ReadonlyArray<CodegenTypes.Double>,
268
- reduceMotion: CodegenTypes.Int32
269
- ): CodegenTypes.Int32;
270
- animateTimingFromV2(
271
- driverId: CodegenTypes.Double,
272
- startX: CodegenTypes.Double,
273
- startY: CodegenTypes.Double,
274
- startWidth: CodegenTypes.Double,
275
- startHeight: CodegenTypes.Double,
276
- startTopLeftRadius: CodegenTypes.Double,
277
- startTopRightRadius: CodegenTypes.Double,
278
- startBottomRightRadius: CodegenTypes.Double,
279
- startBottomLeftRadius: CodegenTypes.Double,
280
- startCurveCode: CodegenTypes.Int32,
281
- startContentTranslateX: CodegenTypes.Double,
282
- startContentTranslateY: CodegenTypes.Double,
283
- startContentScale: CodegenTypes.Double,
284
- x: CodegenTypes.Double,
285
- y: CodegenTypes.Double,
286
- width: CodegenTypes.Double,
287
- height: CodegenTypes.Double,
288
- topLeftRadius: CodegenTypes.Double,
289
- topRightRadius: CodegenTypes.Double,
290
- bottomRightRadius: CodegenTypes.Double,
291
- bottomLeftRadius: CodegenTypes.Double,
292
- curveCode: CodegenTypes.Int32,
293
- contentTranslateX: CodegenTypes.Double,
294
- contentTranslateY: CodegenTypes.Double,
295
- contentScale: CodegenTypes.Double,
296
- durationMs: CodegenTypes.Double,
297
- controlPoint1X: CodegenTypes.Double,
298
- controlPoint1Y: CodegenTypes.Double,
299
- controlPoint2X: CodegenTypes.Double,
300
- controlPoint2Y: CodegenTypes.Double,
301
- reduceMotion: CodegenTypes.Int32
302
- ): CodegenTypes.Int32;
303
- animateSpringFromV2(
304
- driverId: CodegenTypes.Double,
305
- startX: CodegenTypes.Double,
306
- startY: CodegenTypes.Double,
307
- startWidth: CodegenTypes.Double,
308
- startHeight: CodegenTypes.Double,
309
- startTopLeftRadius: CodegenTypes.Double,
310
- startTopRightRadius: CodegenTypes.Double,
311
- startBottomRightRadius: CodegenTypes.Double,
312
- startBottomLeftRadius: CodegenTypes.Double,
313
- startCurveCode: CodegenTypes.Int32,
314
- startContentTranslateX: CodegenTypes.Double,
315
- startContentTranslateY: CodegenTypes.Double,
316
- startContentScale: CodegenTypes.Double,
317
- x: CodegenTypes.Double,
318
- y: CodegenTypes.Double,
319
- width: CodegenTypes.Double,
320
- height: CodegenTypes.Double,
321
- topLeftRadius: CodegenTypes.Double,
322
- topRightRadius: CodegenTypes.Double,
323
- bottomRightRadius: CodegenTypes.Double,
324
- bottomLeftRadius: CodegenTypes.Double,
325
- curveCode: CodegenTypes.Int32,
326
- contentTranslateX: CodegenTypes.Double,
327
- contentTranslateY: CodegenTypes.Double,
328
- contentScale: CodegenTypes.Double,
110
+ start: ReadonlyArray<CodegenTypes.Double>,
111
+ target: ReadonlyArray<CodegenTypes.Double>,
329
112
  mass: CodegenTypes.Double,
330
113
  stiffness: CodegenTypes.Double,
331
114
  damping: CodegenTypes.Double,
332
115
  initialVelocity: CodegenTypes.Double,
333
116
  inheritVelocity: boolean,
334
- reduceMotion: CodegenTypes.Int32
335
- ): CodegenTypes.Int32;
336
- animateKeyframesFromV2(
337
- driverId: CodegenTypes.Double,
338
- startX: CodegenTypes.Double,
339
- startY: CodegenTypes.Double,
340
- startWidth: CodegenTypes.Double,
341
- startHeight: CodegenTypes.Double,
342
- startTopLeftRadius: CodegenTypes.Double,
343
- startTopRightRadius: CodegenTypes.Double,
344
- startBottomRightRadius: CodegenTypes.Double,
345
- startBottomLeftRadius: CodegenTypes.Double,
346
- startCurveCode: CodegenTypes.Int32,
347
- startContentTranslateX: CodegenTypes.Double,
348
- startContentTranslateY: CodegenTypes.Double,
349
- startContentScale: CodegenTypes.Double,
350
- x: CodegenTypes.Double,
351
- y: CodegenTypes.Double,
352
- width: CodegenTypes.Double,
353
- height: CodegenTypes.Double,
354
- topLeftRadius: CodegenTypes.Double,
355
- topRightRadius: CodegenTypes.Double,
356
- bottomRightRadius: CodegenTypes.Double,
357
- bottomLeftRadius: CodegenTypes.Double,
358
- curveCode: CodegenTypes.Int32,
359
- contentTranslateX: CodegenTypes.Double,
360
- contentTranslateY: CodegenTypes.Double,
361
- contentScale: CodegenTypes.Double,
362
- durationMs: CodegenTypes.Double,
363
- frames: ReadonlyArray<CodegenTypes.Double>,
364
- reduceMotion: CodegenTypes.Int32
117
+ reduceMotion: CodegenTypes.Int32,
118
+ completionTag: CodegenTypes.Int32
365
119
  ): CodegenTypes.Int32;
366
120
  rejectAnimation(driverId: CodegenTypes.Double): CodegenTypes.Int32;
367
121
  cancelAnimation(
@@ -369,11 +123,6 @@ export interface Spec extends TurboModule {
369
123
  animationId: CodegenTypes.Int32,
370
124
  behavior: CodegenTypes.Int32
371
125
  ): ReadonlyArray<CodegenTypes.Double>;
372
- cancelAnimationV2(
373
- driverId: CodegenTypes.Double,
374
- animationId: CodegenTypes.Int32,
375
- behavior: CodegenTypes.Int32
376
- ): ReadonlyArray<CodegenTypes.Double>;
377
126
  destroyDriver(driverId: CodegenTypes.Double): void;
378
127
  }
379
128
 
@@ -1,42 +1,132 @@
1
- import { forwardRef, type ComponentRef, type ReactNode } from 'react';
2
- import { type ViewProps } from 'react-native';
3
- import type { SmoothClipDriver } from './driverTypes';
4
- import { getDriverState } from './driverState';
5
- import { getSmoothClipCapabilities } from './capabilities';
6
- import { canonicalizeClipPresentation } from './geometry';
7
- import { assertInitialPresentationProtocol } from './presentationProtocol';
1
+ /* eslint-disable no-bitwise -- color channels use packed RRGGBBAA integers */
2
+ import {
3
+ forwardRef,
4
+ useEffect,
5
+ type ComponentRef,
6
+ type ForwardedRef,
7
+ type ReactElement,
8
+ type ReactNode,
9
+ } from 'react';
10
+ import { StyleSheet, type ViewProps, type ViewStyle } from 'react-native';
11
+ import type { SmoothClipController } from './controllerTypes';
12
+ import { getControllerRef, unwrapSmoothClipRef } from './controllerInternals';
8
13
  import NativeSmoothClipView, {
9
14
  type NativeProps,
10
15
  } from './SmoothClipViewNativeComponent';
11
16
 
12
17
  export type SmoothClipViewProps = ViewProps & {
13
- driver: SmoothClipDriver;
18
+ controller: SmoothClipController;
14
19
  children?: ReactNode;
15
20
  };
16
21
 
17
- export const SmoothClipView = forwardRef<
18
- ComponentRef<typeof NativeSmoothClipView>,
19
- SmoothClipViewProps
20
- >(function SmoothClipViewComponent(
21
- { driver, children, ...viewProps },
22
- forwardedRef
23
- ) {
24
- const { driverId, initialPresentation } = getDriverState(driver);
25
- const canonical = canonicalizeClipPresentation(initialPresentation);
26
- if (canonical === null) return null;
22
+ let reportedIndependentShadow = false;
23
+ const mountedControllers = new WeakMap<SmoothClipController, number>();
24
+
25
+ function useSingleControllerHost(controller: SmoothClipController): void {
26
+ useEffect(() => {
27
+ const mounted = mountedControllers.get(controller) ?? 0;
28
+ if (__DEV__ && mounted > 0) {
29
+ throw new Error(
30
+ '[SmoothClipView] One controller cannot drive two mounted hosts. Create one controller per SmoothClipView.'
31
+ );
32
+ }
33
+ mountedControllers.set(controller, mounted + 1);
34
+ return () => {
35
+ const current = mountedControllers.get(controller) ?? 1;
36
+ if (current <= 1) mountedControllers.delete(controller);
37
+ else mountedControllers.set(controller, current - 1);
38
+ };
39
+ }, [controller]);
40
+ }
41
+
42
+ function filterContainsDropShadow(filter: ViewStyle['filter']): boolean {
43
+ if (typeof filter === 'string') return /drop-shadow\s*\(/i.test(filter);
44
+ return (
45
+ Array.isArray(filter) &&
46
+ filter.some(
47
+ (entry) =>
48
+ typeof entry === 'object' && entry !== null && 'dropShadow' in entry
49
+ )
50
+ );
51
+ }
52
+
53
+ function removeDropShadowFilter(
54
+ filter: ViewStyle['filter']
55
+ ): ViewStyle['filter'] | undefined {
56
+ if (typeof filter === 'string') {
57
+ const remaining = filter
58
+ .replace(/drop-shadow\((?:[^()]|\([^()]*\))*\)/gi, '')
59
+ .trim();
60
+ return remaining === '' ? undefined : remaining;
61
+ }
62
+ if (Array.isArray(filter)) {
63
+ const remaining = filter.filter(
64
+ (entry) =>
65
+ !(typeof entry === 'object' && entry !== null && 'dropShadow' in entry)
66
+ );
67
+ return remaining.length === 0
68
+ ? undefined
69
+ : (remaining as ViewStyle['filter']);
70
+ }
71
+ return filter;
72
+ }
73
+
74
+ /** Prevents React Native from installing a second, aperture-independent shadow. */
75
+ export function sanitizeSmoothClipStyle(
76
+ style: ViewProps['style']
77
+ ): ViewProps['style'] {
78
+ const flat = StyleSheet.flatten(style);
79
+ if (flat == null) return style;
80
+ const hasIndependentShadow =
81
+ flat.boxShadow !== undefined ||
82
+ flat.shadowColor !== undefined ||
83
+ flat.shadowOffset !== undefined ||
84
+ flat.shadowOpacity !== undefined ||
85
+ flat.shadowRadius !== undefined ||
86
+ flat.elevation !== undefined ||
87
+ filterContainsDropShadow(flat.filter);
88
+ if (!hasIndependentShadow) return style;
89
+ if (__DEV__ && !reportedIndependentShadow) {
90
+ reportedIndependentShadow = true;
91
+ console.error(
92
+ '[SmoothClipView] Shadow style properties are not rendered on the host. ' +
93
+ 'Put the shadow in SmoothClipPresentation.boxShadow so it follows the clip aperture.'
94
+ );
95
+ }
96
+ const sanitized: Record<string, unknown> = { ...flat };
97
+ delete sanitized.boxShadow;
98
+ delete sanitized.shadowColor;
99
+ delete sanitized.shadowOffset;
100
+ delete sanitized.shadowOpacity;
101
+ delete sanitized.shadowRadius;
102
+ delete sanitized.elevation;
103
+ if (filterContainsDropShadow(sanitized.filter as ViewStyle['filter'])) {
104
+ const filter = removeDropShadowFilter(
105
+ sanitized.filter as ViewStyle['filter']
106
+ );
107
+ if (filter === undefined) delete sanitized.filter;
108
+ else sanitized.filter = filter;
109
+ }
110
+ return sanitized as ViewStyle;
111
+ }
112
+
113
+ export function renderSmoothClipView(
114
+ { controller, children, style, ...viewProps }: SmoothClipViewProps,
115
+ forwardedRef: ForwardedRef<ComponentRef<typeof NativeSmoothClipView>>
116
+ ): ReactElement {
117
+ const { ref, initialFrame: canonical } = getControllerRef(controller);
118
+ const driverId = unwrapSmoothClipRef(ref)?.id ?? 0;
27
119
  const { clip } = canonical;
28
- const protocolVersion =
29
- getSmoothClipCapabilities().presentationProtocolVersion;
30
- assertInitialPresentationProtocol(canonical, protocolVersion);
120
+ const shadow = canonical.boxShadow;
121
+ const color = (shadow?.color as unknown as number) ?? 0;
31
122
  const nativeProps: NativeProps = {
32
123
  ...viewProps,
124
+ style: sanitizeSmoothClipStyle(style),
33
125
  driverId,
34
126
  initialClipX: clip.x,
35
127
  initialClipY: clip.y,
36
128
  initialClipWidth: clip.width,
37
129
  initialClipHeight: clip.height,
38
- initialClipRadius: clip.radius,
39
- presentationVersion: protocolVersion,
40
130
  initialClipTopLeftRadius: clip.topLeftRadius,
41
131
  initialClipTopRightRadius: clip.topRightRadius,
42
132
  initialClipBottomRightRadius: clip.bottomRightRadius,
@@ -45,6 +135,15 @@ export const SmoothClipView = forwardRef<
45
135
  initialContentTranslateX: canonical.contentTranslateX,
46
136
  initialContentTranslateY: canonical.contentTranslateY,
47
137
  initialContentScale: canonical.contentScale,
138
+ initialClipBoxShadowEnabled: shadow !== undefined,
139
+ initialClipBoxShadowRed: ((color >>> 24) & 0xff) / 255,
140
+ initialClipBoxShadowGreen: ((color >>> 16) & 0xff) / 255,
141
+ initialClipBoxShadowBlue: ((color >>> 8) & 0xff) / 255,
142
+ initialClipBoxShadowAlpha: (color & 0xff) / 255,
143
+ initialClipBoxShadowOffsetX: shadow?.offsetX ?? 0,
144
+ initialClipBoxShadowOffsetY: shadow?.offsetY ?? 0,
145
+ initialClipBoxShadowBlurRadius: shadow?.blurRadius ?? 0,
146
+ initialClipBoxShadowSpreadDistance: shadow?.spreadDistance ?? 0,
48
147
  };
49
148
 
50
149
  return (
@@ -52,4 +151,12 @@ export const SmoothClipView = forwardRef<
52
151
  {children}
53
152
  </NativeSmoothClipView>
54
153
  );
154
+ }
155
+
156
+ export const SmoothClipView = forwardRef<
157
+ ComponentRef<typeof NativeSmoothClipView>,
158
+ SmoothClipViewProps
159
+ >(function SmoothClipViewComponent(props, forwardedRef) {
160
+ useSingleControllerHost(props.controller);
161
+ return renderSmoothClipView(props, forwardedRef);
55
162
  });
@@ -1,2 +1,6 @@
1
- export { SmoothClipView } from './SmoothClipView.ios';
1
+ export {
2
+ renderSmoothClipView,
3
+ sanitizeSmoothClipStyle,
4
+ SmoothClipView,
5
+ } from './SmoothClipView.ios';
2
6
  export type { SmoothClipViewProps } from './SmoothClipView.ios';
@@ -12,8 +12,6 @@ export interface NativeProps extends ViewProps {
12
12
  initialClipY: CodegenTypes.Double;
13
13
  initialClipWidth: CodegenTypes.Double;
14
14
  initialClipHeight: CodegenTypes.Double;
15
- initialClipRadius: CodegenTypes.Double;
16
- presentationVersion: CodegenTypes.Int32;
17
15
  initialClipTopLeftRadius: CodegenTypes.Double;
18
16
  initialClipTopRightRadius: CodegenTypes.Double;
19
17
  initialClipBottomRightRadius: CodegenTypes.Double;
@@ -22,28 +20,19 @@ export interface NativeProps extends ViewProps {
22
20
  initialContentTranslateX: CodegenTypes.Double;
23
21
  initialContentTranslateY: CodegenTypes.Double;
24
22
  initialContentScale: CodegenTypes.Double;
23
+ initialClipBoxShadowEnabled: boolean;
24
+ initialClipBoxShadowRed: CodegenTypes.Double;
25
+ initialClipBoxShadowGreen: CodegenTypes.Double;
26
+ initialClipBoxShadowBlue: CodegenTypes.Double;
27
+ initialClipBoxShadowAlpha: CodegenTypes.Double;
28
+ initialClipBoxShadowOffsetX: CodegenTypes.Double;
29
+ initialClipBoxShadowOffsetY: CodegenTypes.Double;
30
+ initialClipBoxShadowBlurRadius: CodegenTypes.Double;
31
+ initialClipBoxShadowSpreadDistance: CodegenTypes.Double;
25
32
  }
26
33
 
27
34
  interface NativeCommands {
28
- setClipGeometry: (
29
- viewRef: React.ElementRef<HostComponent<NativeProps>>,
30
- x: CodegenTypes.Double,
31
- y: CodegenTypes.Double,
32
- width: CodegenTypes.Double,
33
- height: CodegenTypes.Double,
34
- radius: CodegenTypes.Double
35
- ) => void;
36
35
  setClipPresentation: (
37
- viewRef: React.ElementRef<HostComponent<NativeProps>>,
38
- x: CodegenTypes.Double,
39
- y: CodegenTypes.Double,
40
- width: CodegenTypes.Double,
41
- height: CodegenTypes.Double,
42
- radius: CodegenTypes.Double,
43
- contentTranslateX: CodegenTypes.Double,
44
- contentTranslateY: CodegenTypes.Double
45
- ) => void;
46
- setClipPresentationV2: (
47
36
  viewRef: React.ElementRef<HostComponent<NativeProps>>,
48
37
  x: CodegenTypes.Double,
49
38
  y: CodegenTypes.Double,
@@ -56,16 +45,21 @@ interface NativeCommands {
56
45
  curveCode: CodegenTypes.Int32,
57
46
  contentTranslateX: CodegenTypes.Double,
58
47
  contentTranslateY: CodegenTypes.Double,
59
- contentScale: CodegenTypes.Double
48
+ contentScale: CodegenTypes.Double,
49
+ shadowEnabled: boolean,
50
+ shadowRed: CodegenTypes.Double,
51
+ shadowGreen: CodegenTypes.Double,
52
+ shadowBlue: CodegenTypes.Double,
53
+ shadowAlpha: CodegenTypes.Double,
54
+ shadowOffsetX: CodegenTypes.Double,
55
+ shadowOffsetY: CodegenTypes.Double,
56
+ shadowBlurRadius: CodegenTypes.Double,
57
+ shadowSpreadDistance: CodegenTypes.Double
60
58
  ) => void;
61
59
  }
62
60
 
63
61
  export const Commands: NativeCommands = codegenNativeCommands<NativeCommands>({
64
- supportedCommands: [
65
- 'setClipGeometry',
66
- 'setClipPresentation',
67
- 'setClipPresentationV2',
68
- ],
62
+ supportedCommands: ['setClipPresentation'],
69
63
  });
70
64
 
71
65
  export default codegenNativeComponent<NativeProps>(