react-native-smooth-clip-view 0.3.0 → 0.4.0

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 +132 -388
  2. package/android/build.gradle +3 -3
  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 +344 -488
  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
@@ -1,4 +1,22 @@
1
+ import type { ColorValue } from 'react-native';
1
2
  export type ClipCurve = 'circular' | 'continuous';
3
+ /** One numeric outset shadow following React Native's `boxShadow` field names. */
4
+ export type ClipBoxShadow = Readonly<{
5
+ color?: ColorValue;
6
+ offsetX: number;
7
+ offsetY: number;
8
+ /** CSS box-shadow blur radius. iOS converts this to CALayer radius / 2. */
9
+ blurRadius?: number;
10
+ spreadDistance?: number;
11
+ }>;
12
+ export type CanonicalClipBoxShadow = Readonly<{
13
+ /** React Native numeric RRGGBBAA color; canonicalization is idempotent. */
14
+ color: ColorValue;
15
+ offsetX: number;
16
+ offsetY: number;
17
+ blurRadius: number;
18
+ spreadDistance: number;
19
+ }>;
2
20
  export type ClipGeometry = Readonly<{
3
21
  x: number;
4
22
  y: number;
@@ -17,7 +35,7 @@ export type CanonicalClipGeometry = Readonly<{
17
35
  y: number;
18
36
  width: number;
19
37
  height: number;
20
- /** Normalized legacy all-corners value retained for V1 compatibility. */
38
+ /** Canonical all-corners value; zero when the corner radii differ. */
21
39
  radius: number;
22
40
  topLeftRadius: number;
23
41
  topRightRadius: number;
@@ -25,22 +43,20 @@ export type CanonicalClipGeometry = Readonly<{
25
43
  bottomLeftRadius: number;
26
44
  curve: ClipCurve;
27
45
  }>;
28
- export type ClipBounds = Readonly<{
29
- width: number;
30
- height: number;
31
- }>;
32
46
  export type SmoothClipPresentation = Readonly<{
33
47
  clip: ClipGeometry;
34
48
  contentTranslateX: number;
35
49
  contentTranslateY: number;
36
50
  /** Defaults to 1 when omitted. */
37
51
  contentScale?: number;
52
+ boxShadow?: ClipBoxShadow;
38
53
  }>;
39
54
  export type CanonicalSmoothClipPresentation = Readonly<{
40
55
  clip: CanonicalClipGeometry;
41
56
  contentTranslateX: number;
42
57
  contentTranslateY: number;
43
58
  contentScale: number;
59
+ boxShadow?: CanonicalClipBoxShadow;
44
60
  }>;
45
61
  export declare function isFiniteClipGeometry(geometry: ClipGeometry): boolean;
46
62
  export declare function clipGeometryEquals(first: ClipGeometry | null, second: ClipGeometry): boolean;
@@ -51,11 +67,5 @@ export declare function clipPresentationEquals(first: SmoothClipPresentation | n
51
67
  */
52
68
  export declare function canonicalizeClipGeometry(geometry: ClipGeometry): CanonicalClipGeometry | null;
53
69
  export declare function canonicalizeClipPresentation(presentation: SmoothClipPresentation): CanonicalSmoothClipPresentation | null;
54
- export declare function createClipPresentation(clip: ClipGeometry, contentTranslateX?: number, contentTranslateY?: number, contentScale?: number): CanonicalSmoothClipPresentation;
55
- /**
56
- * Mirrors the native geometry contract for tests and non-native fallbacks.
57
- * Native remains authoritative because its bounds are the actual rendered size.
58
- */
59
- export declare function normalizeClipGeometry(geometry: ClipGeometry, bounds: ClipBounds): CanonicalClipGeometry | null;
60
- export declare function normalizeClipPresentation(presentation: SmoothClipPresentation, bounds: ClipBounds): CanonicalSmoothClipPresentation | null;
70
+ export declare function createClipPresentation(clip: ClipGeometry, contentTranslateX?: number, contentTranslateY?: number, contentScale?: number, boxShadow?: ClipBoxShadow): CanonicalSmoothClipPresentation;
61
71
  //# sourceMappingURL=geometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/geometry.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,YAAY,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,SAAS,CAAC;CAClB,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,YAAY,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,QAAQ,CAAC;IACrD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC,CAAC;AAYH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAcpE;AA2BD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,YAAY,GAAG,IAAI,EAC1B,MAAM,EAAE,YAAY,GACnB,OAAO,CAeT;AAOD,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,sBAAsB,GACnC,OAAO,CAUT;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,sBAAsB,GAAG,IAAI,EACpC,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAST;AAsDD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,YAAY,GACrB,qBAAqB,GAAG,IAAI,CAa9B;AAED,wBAAgB,4BAA4B,CAC1C,YAAY,EAAE,sBAAsB,GACnC,+BAA+B,GAAG,IAAI,CAaxC;AAID,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,YAAY,EAClB,iBAAiB,SAAI,EACrB,iBAAiB,SAAI,EACrB,YAAY,SAAI,GACf,+BAA+B,CAsBjC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,UAAU,GACjB,qBAAqB,GAAG,IAAI,CA0B9B;AAED,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,sBAAsB,EACpC,MAAM,EAAE,UAAU,GACjB,+BAA+B,GAAG,IAAI,CAaxC"}
1
+ {"version":3,"file":"geometry.d.ts","sourceRoot":"","sources":["../../../src/geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { SmoothClipAnimation, SmoothClipCompletion, SmoothClipReactRun, SmoothClipRef, SmoothClipRunHandle } from './controllerTypes.js';
2
+ import type { CanonicalSmoothClipPresentation, SmoothClipPresentation } from './geometry.js';
3
+ export type SmoothClipGroupFrame = Readonly<{
4
+ clip: SmoothClipRef;
5
+ frame: SmoothClipPresentation;
6
+ }>;
7
+ export type SmoothClipGroupTarget = Readonly<{
8
+ clip: SmoothClipRef;
9
+ target: SmoothClipPresentation;
10
+ }>;
11
+ export type SmoothClipGroupSnapshot = Readonly<{
12
+ clip: SmoothClipRef;
13
+ frame: CanonicalSmoothClipPresentation;
14
+ ready: boolean;
15
+ }>;
16
+ export type SmoothClipGroupOptions = Readonly<{
17
+ /** Stable React-runtime callback for UI- and React-runtime transactions. */
18
+ onAnimationComplete?: (result: SmoothClipCompletion) => void;
19
+ }>;
20
+ export type SmoothClipGroup = Readonly<{
21
+ ui: Readonly<{
22
+ setFrames(entries: readonly SmoothClipGroupFrame[]): void;
23
+ beginInteraction(clips: readonly SmoothClipRef[]): readonly SmoothClipGroupSnapshot[];
24
+ animateTo(entries: readonly SmoothClipGroupTarget[], animation: SmoothClipAnimation, completionTag?: number): SmoothClipRunHandle | null;
25
+ cancel(run: SmoothClipRunHandle): readonly SmoothClipGroupSnapshot[];
26
+ }>;
27
+ react: Readonly<{
28
+ animateTo(entries: readonly SmoothClipGroupTarget[], animation: SmoothClipAnimation): SmoothClipReactRun;
29
+ }>;
30
+ }>;
31
+ //# sourceMappingURL=groupTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groupTypes.d.ts","sourceRoot":"","sources":["../../../src/groupTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACpB,MAAM,sBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,+BAA+B,EAC/B,sBAAsB,EACvB,MAAM,eAAY,CAAC;AAEpB,MAAM,MAAM,oBAAoB,GAAG,QAAQ,CAAC;IAC1C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,sBAAsB,CAAC;CAC/B,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,sBAAsB,CAAC;CAChC,CAAC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,QAAQ,CAAC;IAC7C,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,+BAA+B,CAAC;IACvC,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC5C,4EAA4E;IAC5E,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC9D,CAAC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,EAAE,EAAE,QAAQ,CAAC;QACX,SAAS,CAAC,OAAO,EAAE,SAAS,oBAAoB,EAAE,GAAG,IAAI,CAAC;QAC1D,gBAAgB,CACd,KAAK,EAAE,SAAS,aAAa,EAAE,GAC9B,SAAS,uBAAuB,EAAE,CAAC;QACtC,SAAS,CACP,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,SAAS,EAAE,mBAAmB,EAC9B,aAAa,CAAC,EAAE,MAAM,GACrB,mBAAmB,GAAG,IAAI,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,mBAAmB,GAAG,SAAS,uBAAuB,EAAE,CAAC;KACtE,CAAC,CAAC;IACH,KAAK,EAAE,QAAQ,CAAC;QACd,SAAS,CACP,OAAO,EAAE,SAAS,qBAAqB,EAAE,EACzC,SAAS,EAAE,mBAAmB,GAC7B,kBAAkB,CAAC;KACvB,CAAC,CAAC;CACJ,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useSmoothClipGroup } from './groups.native.js';
2
+ //# sourceMappingURL=groups.android.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.android.d.ts","sourceRoot":"","sources":["../../../src/groups.android.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useSmoothClipGroup } from './groups.native.js';
2
+ //# sourceMappingURL=groups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.d.ts","sourceRoot":"","sources":["../../../src/groups.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { useSmoothClipGroup } from './groups.native.js';
2
+ //# sourceMappingURL=groups.ios.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.ios.d.ts","sourceRoot":"","sources":["../../../src/groups.ios.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAiB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SmoothClipGroup, SmoothClipGroupOptions } from './groupTypes.js';
2
+ export declare function useSmoothClipGroup(options?: SmoothClipGroupOptions): SmoothClipGroup;
3
+ //# sourceMappingURL=groups.native.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"groups.native.d.ts","sourceRoot":"","sources":["../../../src/groups.native.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EACV,eAAe,EAEf,sBAAsB,EAGvB,MAAM,iBAAc,CAAC;AAibtB,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,sBAA2B,GACnC,eAAe,CAiJjB"}
@@ -0,0 +1,2 @@
1
+ export declare function allocateSmoothClipId(): number;
2
+ //# sourceMappingURL=ids.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../../src/ids.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,IAAI,MAAM,CAG7C"}
@@ -1,12 +1,12 @@
1
1
  export { SmoothClipView } from './SmoothClipView';
2
2
  export type { SmoothClipViewProps } from './SmoothClipView';
3
- export { useSmoothClipDriver } from './drivers';
4
- export { useSmoothClipGroupDriver } from './groupDrivers';
3
+ export { useSmoothClipController } from './controllers';
4
+ export { useSmoothClipGroup } from './groups';
5
5
  export { getSmoothClipCapabilities } from './capabilities';
6
6
  export type { SmoothClipCapabilities } from './capabilityTypes.js';
7
- export type { ClipAnimationResult, ClipReduceMotion, KeyframedClipAnimation, SmoothClipDriver, SmoothClipDriverOptions, SmoothClipReactControls, SmoothClipUIControls, SmoothClipAnimation, SpringClipAnimation, TimingClipAnimation, } from './driverTypes.js';
8
- export type { SmoothClipBatchEntry, SmoothClipGroupAnimationResult, SmoothClipGroupCancelBehavior, SmoothClipGroupDriver, SmoothClipGroupDriverOptions, SmoothClipGroupKeyframeAnimation, SmoothClipGroupKeyframeEntry, SmoothClipGroupMotionAnimation, SmoothClipGroupMotionEntry, SmoothClipGroupReactControls, SmoothClipGroupSnapshot, SmoothClipGroupSpringAnimation, SmoothClipGroupSuspensionPolicy, SmoothClipGroupTimingAnimation, SmoothClipGroupUIControls, } from './groupDriverTypes.js';
7
+ export type { ClipReduceMotion, SpringClipAnimation, TimingClipAnimation, SmoothClipAnimation, SmoothClipCompletion, SmoothClipController, SmoothClipControllerOptions, SmoothClipControllerReact, SmoothClipControllerUI, SmoothClipInitialFrame, SmoothClipReactRun, SmoothClipRef, SmoothClipRunHandle, } from './controllerTypes.js';
8
+ export type { SmoothClipGroup, SmoothClipGroupFrame, SmoothClipGroupOptions, SmoothClipGroupSnapshot, SmoothClipGroupTarget, } from './groupTypes.js';
9
9
  export { ClipEasings } from './easings.js';
10
- export { canonicalizeClipGeometry, canonicalizeClipPresentation, createClipPresentation, normalizeClipGeometry, normalizeClipPresentation, } from './geometry.js';
11
- export type { CanonicalClipGeometry, CanonicalSmoothClipPresentation, ClipBounds, ClipCurve, ClipGeometry, SmoothClipPresentation, } from './geometry.js';
10
+ export { canonicalizeClipGeometry, canonicalizeClipPresentation, createClipPresentation, } from './geometry.js';
11
+ export type { CanonicalClipGeometry, CanonicalClipBoxShadow, CanonicalSmoothClipPresentation, ClipCurve, ClipGeometry, ClipBoxShadow, SmoothClipPresentation, } from './geometry.js';
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAChE,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,kBAAe,CAAC;AACvB,YAAY,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,6BAA6B,EAC7B,qBAAqB,EACrB,4BAA4B,EAC5B,gCAAgC,EAChC,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,EAC1B,4BAA4B,EAC5B,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,uBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAW,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,eAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,+BAA+B,EAC/B,UAAU,EACV,SAAS,EACT,YAAY,EACZ,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,sBAAmB,CAAC;AAChE,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,2BAA2B,EAC3B,yBAAyB,EACzB,sBAAsB,EACtB,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,GACpB,MAAM,sBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,iBAAc,CAAC;AACtB,OAAO,EAAE,WAAW,EAAE,MAAM,cAAW,CAAC;AACxC,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,sBAAsB,GACvB,MAAM,eAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,+BAA+B,EAC/B,SAAS,EACT,YAAY,EACZ,aAAa,EACb,sBAAsB,GACvB,MAAM,eAAY,CAAC"}
@@ -1,7 +1,17 @@
1
- export declare function completeNativeAnimation(driverId: number, animationId: number, finished: boolean): void;
2
- export declare function synchronizeNativeCompletion(activeAnimationId: {
3
- value: number;
4
- }, ownership: {
5
- value: number;
6
- }, animationId: number, _finished: boolean): void;
1
+ type DriverCompletion = Readonly<{
2
+ driverId: number;
3
+ animationId: number;
4
+ completionTag: number;
5
+ finished: boolean;
6
+ }>;
7
+ type GroupCompletion = Readonly<{
8
+ controllerId: number;
9
+ groupId: number;
10
+ completionTag: number;
11
+ finished: boolean;
12
+ snapshots: readonly number[];
13
+ }>;
14
+ export declare function subscribeDriverCompletion(driverId: number, listener: (event: DriverCompletion) => void): () => void;
15
+ export declare function subscribeGroupCompletion(controllerId: number, listener: (event: GroupCompletion) => void): () => void;
16
+ export {};
7
17
  //# sourceMappingURL=nativeCompletion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nativeCompletion.d.ts","sourceRoot":"","sources":["../../../src/nativeCompletion.ts"],"names":[],"mappings":"AAGA,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,OAAO,GAChB,IAAI,CAEN;AAED,wBAAgB,2BAA2B,CACzC,iBAAiB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EACpC,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,EAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,OAAO,GACjB,IAAI,CAoBN"}
1
+ {"version":3,"file":"nativeCompletion.d.ts","sourceRoot":"","sources":["../../../src/nativeCompletion.ts"],"names":[],"mappings":"AAEA,KAAK,gBAAgB,GAAG,QAAQ,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC,CAAC;AAEH,KAAK,eAAe,GAAG,QAAQ,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B,CAAC,CAAC;AA8BH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAC1C,MAAM,IAAI,CASZ;AAED,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GACzC,MAAM,IAAI,CASZ"}
@@ -0,0 +1,10 @@
1
+ import type { CanonicalSmoothClipPresentation } from './geometry.js';
2
+ /**
3
+ * Versionless native packet layout. Keep this as the single JS codec used by
4
+ * drivers, groups, snapshots, and cancellation.
5
+ */
6
+ export declare const PRESENTATION_STRIDE = 21;
7
+ export declare function appendPresentationPacket(values: number[], presentation: CanonicalSmoothClipPresentation): void;
8
+ export declare function presentationPacket(presentation: CanonicalSmoothClipPresentation): number[];
9
+ export declare function presentationFromPacket(values: readonly number[], offset?: number): CanonicalSmoothClipPresentation | null;
10
+ //# sourceMappingURL=presentationCodec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presentationCodec.d.ts","sourceRoot":"","sources":["../../../src/presentationCodec.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,eAAY,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,EAAE,+BAA+B,GAC5C,IAAI,CAiCN;AAED,wBAAgB,kBAAkB,CAChC,YAAY,EAAE,+BAA+B,GAC5C,MAAM,EAAE,CAKV;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,SAAI,GACT,+BAA+B,GAAG,IAAI,CA0ExC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-smooth-clip-view",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
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",
@@ -36,6 +36,7 @@
36
36
  "scripts": {
37
37
  "example": "npm run --workspace react-native-smooth-clip-view-example",
38
38
  "clean": "del-cli lib",
39
+ "patch:legend-list": "patch-package",
39
40
  "prepare": "bob build",
40
41
  "typecheck": "tsc",
41
42
  "lint": "eslint \"**/*.{js,ts,tsx}\"",
@@ -89,6 +90,7 @@
89
90
  "hermes-eslint": "^0.37.0",
90
91
  "jest": "^29.7.0",
91
92
  "lefthook": "^2.1.9",
93
+ "patch-package": "^8.0.1",
92
94
  "prettier": "^3.8.3",
93
95
  "react": "19.2.3",
94
96
  "react-native": "0.86.2",
@@ -103,7 +105,7 @@
103
105
  "react": ">=19.2.0",
104
106
  "react-native": ">=0.86.0",
105
107
  "react-native-reanimated": ">=4.5.0",
106
- "react-native-worklets": ">=0.10.0"
108
+ "react-native-worklets": ">=0.10.1"
107
109
  },
108
110
  "workspaces": [
109
111
  "example"
@@ -165,7 +167,10 @@
165
167
  "modulePathIgnorePatterns": [
166
168
  "<rootDir>/example/node_modules",
167
169
  "<rootDir>/lib/"
168
- ]
170
+ ],
171
+ "moduleNameMapper": {
172
+ "^react-native-reanimated$": "<rootDir>/src/__mocks__/react-native-reanimated.ts"
173
+ }
169
174
  },
170
175
  "commitlint": {
171
176
  "extends": [