react-native-attachment-kit 1.1.0 → 1.1.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 (30) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +4 -2
  3. package/android/src/main/libs/rnattachmentkit-release.aar +0 -0
  4. package/android/src/newarch/java/com/rnattachmentkit/RNAttachmentKitModule.kt +24 -0
  5. package/android/src/oldarch/java/com/rnattachmentkit/RNAttachmentKitModule.kt +24 -0
  6. package/ios/RNAttachmentKit.swift +20 -0
  7. package/ios/RNAttachmentKit.xcframework/Info.plist +5 -5
  8. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/Assets.car +0 -0
  9. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.abi.json +265 -2
  10. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.private.swiftinterface +3 -0
  11. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  12. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftinterface +3 -0
  13. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/RNAttachmentKit +0 -0
  14. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/_CodeSignature/CodeDirectory +0 -0
  15. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/_CodeSignature/CodeResources +12 -12
  16. package/ios/RNAttachmentKit.xcframework/ios-arm64/RNAttachmentKit.framework/_CodeSignature/CodeSignature +0 -0
  17. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios-simulator.abi.json +265 -2
  18. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +3 -0
  19. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  20. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +3 -0
  21. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +265 -2
  22. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +3 -0
  23. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  24. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/Modules/RNAttachmentKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +3 -0
  25. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/RNAttachmentKit +0 -0
  26. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/_CodeSignature/CodeDirectory +0 -0
  27. package/ios/RNAttachmentKit.xcframework/ios-arm64_x86_64-simulator/RNAttachmentKit.framework/_CodeSignature/CodeResources +20 -20
  28. package/package.json +1 -1
  29. package/src/index.ts +4 -3
  30. package/src/types.ts +28 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.1 — 2026-11-03
4
+
5
+ - **Viewer: `sourceClipInsets` / `sourceClipRect` options — the zoom open / close stays behind translucent bars (iOS + Android `useOverlayViewer`)**. The moving photo and the `hideSourceImage` mask are drawn in the window above the app, so a thumbnail half under the app's translucent top bar flew back *over* the bar and the mask covered the bar too. With a clip area (screen-edge insets, a rect in `sourceRect` coordinates, or both = intersection) they are drawn only inside it: on open the photo starts cut at the bar and the clip widens to the full screen during the second half (the viewer itself is never cut); on close it narrows back in the first 20 % (the viewer background turns transparent at once on close, so the photo never covers the bar), and the part under the bar disappears behind it. Checked on the iOS simulator (HeyTalk feed): a cell half under the translucent top bar opens from behind the bar and closes back behind it; a cell clear of the bar animates as before. `updateSourceRect` takes the same keys (changed only when passed, `null` = no clip) for paging to another thumbnail. Without the options nothing changes.
6
+ - iOS: `ZoomTransitionAnimator.sourceClipRect` / `sourceClipInsets` (public) — the dummy image sits in a full-screen view whose `mask` view animates between the clip and the bounds; the source mask sits in a holder of the clip's size (`clipsToBounds`). Other users of the animator (gallery, media gallery) pass nothing.
7
+ - Android: `ImageViewerOverlayView` sets `clipBounds` on the dummy image (lerped with the open / close progress) and on the mask (its own coordinates, refreshed whenever the mask moves). Insets are measured from the window's decor view. The Activity / Dialog viewers ignore the options.
3
8
  ## 1.1.0 — 2026-10-27
4
9
 
5
10
  - **New public API for native screens: `AttachmentProcessor` (iOS framework + Android aar)** — the "after picking" processing that used to live only inside the RN bridge (photo resize and save as webp / jpg / png, photo thumbnail, video export with `VideoExporter` and its poster, the processing-start slots with predicted sizes and posters, progress throttling, per-video cancel, temp files and the result model). An app's own native screen can now open the kit gallery and process the result with exactly the same code as `openGallery`, so both produce the same files (size, thumbnail, poster).
package/README.md CHANGED
@@ -341,6 +341,8 @@ ref.current?.measure((x, y, width, height, pageX, pageY) => {
341
341
  | `sourceBorderCorners` | `('topLeft' \| 'topRight' \| 'bottomLeft' \| 'bottomRight')[]` | Which corners are rounded (chat-bubble groups). `[]` = none. |
342
342
  | `sourceBackgroundColor` | `string` | Background behind the thumbnail during the animation. |
343
343
  | `hideSourceImage` | `boolean` | A native mask hides the source thumbnail while the viewer is open. |
344
+ | `sourceClipInsets` | `{ top?, bottom?, left?, right? }` | Screen-edge insets of the area where the **moving photo and the `hideSourceImage` mask** are drawn during the zoom open / close (e.g. `{ top: headerHeight, bottom: tabBarHeight }` for translucent bars). A thumbnail half under a translucent bar then slides **behind** the bar instead of over it. The clip widens to the full screen in the second half of the open (when the viewer background covers the bar) and narrows in the first 20 % of the close, so the viewer itself is never cut. iOS + Android `useOverlayViewer`. |
345
+ | `sourceClipRect` | `SourceRect` | Same, as a rect in `sourceRect` coordinates (e.g. a list area inside a sheet). With both, the intersection is used. Omit both = no clipping (as before). |
344
346
 
345
347
  **Actions**
346
348
 
@@ -368,8 +370,8 @@ ref.current?.measure((x, y, width, height, pageX, pageY) => {
368
370
  | `useDialogViewer: true` | DialogFragment — no `AppState` blip, but background RN layout changes may not render until it closes. |
369
371
  | `useOverlayViewer: true` | ⭐ View on top of the host Activity's window — no `AppState` blip, background changes render in real time. Wins over `useDialogViewer`. |
370
372
 
371
- #### `updateSourceRect(rect: SourceRect & { sourceBorderRadius?, sourceBorderCorners? }): Promise<void>`
372
- Updates where the viewer closes to (e.g. after paging to another thumbnail or scrolling).
373
+ #### `updateSourceRect(rect: ViewerSourceUpdate): Promise<void>`
374
+ Updates where the viewer closes to (e.g. after paging to another thumbnail or scrolling). `ViewerSourceUpdate = SourceRect & { sourceBorderRadius?, sourceBorderCorners?, sourceClipRect?, sourceClipInsets? }` — the clip keys change only when passed (`null` = stop clipping).
373
375
 
374
376
  #### `injectImageCache(url: string, localPath: string): Promise<boolean>`
375
377
  Seeds the viewer's image cache with a local file for a remote URL, so it opens instantly without network.
@@ -212,12 +212,33 @@ class RNAttachmentKitModule(reactContext: ReactApplicationContext) :
212
212
  }
213
213
  }
214
214
 
215
+ // 잘라내기 영역 — 넘긴 키만 바뀜 (useOverlayViewer 뷰어만 반영)
216
+ clipArrayOf(options, "sourceClipRect")?.let { intent.putExtra("sourceClipRect", it) }
217
+ clipArrayOf(options, "sourceClipInsets")?.let { intent.putExtra("sourceClipInsets", it) }
215
218
  androidx.localbroadcastmanager.content.LocalBroadcastManager.getInstance(reactApplicationContext)
216
219
  .sendBroadcast(intent)
217
220
 
218
221
  promise.resolve(null)
219
222
  }
220
223
 
224
+ /**
225
+ * sourceClipRect {x,y,width,height} / sourceClipInsets {top,bottom,left,right} (dp) → 화면 px [l,t,r,b]
226
+ * (여백이면 각 변의 여백). 키가 없으면 null(안 바꿈), 값이 null 이면 빈 배열(자르지 않음).
227
+ */
228
+ private fun clipArrayOf(options: ReadableMap, key: String): FloatArray? {
229
+ if (!options.hasKey(key)) return null
230
+ if (options.isNull(key)) return FloatArray(0)
231
+ val m = options.getMap(key) ?: return FloatArray(0)
232
+ fun px(k: String) = if (m.hasKey(k) && !m.isNull(k)) com.facebook.react.uimanager.PixelUtil.toPixelFromDIP(m.getDouble(k).toFloat()) else 0f
233
+ return if (key == "sourceClipRect") {
234
+ val x = px("x")
235
+ val y = px("y")
236
+ floatArrayOf(x, y, x + px("width"), y + px("height"))
237
+ } else {
238
+ floatArrayOf(px("left"), px("top"), px("right"), px("bottom"))
239
+ }
240
+ }
241
+
221
242
  override fun getName(): String = NAME
222
243
 
223
244
  override fun init(licenseKey: String, promise: Promise) {
@@ -664,6 +685,9 @@ class RNAttachmentKitModule(reactContext: ReactApplicationContext) :
664
685
  if (options.hasKey("sourceBackgroundColor")) {
665
686
  putString("sourceBackgroundColor", options.getString("sourceBackgroundColor"))
666
687
  }
688
+ // 잘라내기 영역 (열림·닫힘 중 사진과 가림 판이 그려지는 곳) — 이 오버레이 뷰어만
689
+ clipArrayOf(options, "sourceClipRect")?.let { putFloatArray("sourceClipRect", it) }
690
+ clipArrayOf(options, "sourceClipInsets")?.let { putFloatArray("sourceClipInsets", it) }
667
691
  // placeholderImages: 타입/뷰어 코드에는 있었지만 브릿지에서 한 번도 전달되지 않았던
668
692
  // 필드. 네이티브 뷰어가 onlyRetrieveFromCache(true)로 첫 프레임을 즉시 그리려 할 때
669
693
  // 쓰는 저해상도 대체 이미지 목록입니다(원본 다운로드 전 임시 표시용).
@@ -522,10 +522,31 @@ class RNAttachmentKitModule(reactContext: ReactApplicationContext) :
522
522
  intent.putStringArrayListExtra("sourceBorderCorners", corners)
523
523
  }
524
524
  }
525
+ // 잘라내기 영역 — 넘긴 키만 바뀜 (useOverlayViewer 뷰어만 반영)
526
+ clipArrayOf(options, "sourceClipRect")?.let { intent.putExtra("sourceClipRect", it) }
527
+ clipArrayOf(options, "sourceClipInsets")?.let { intent.putExtra("sourceClipInsets", it) }
525
528
  androidx.localbroadcastmanager.content.LocalBroadcastManager.getInstance(reactApplicationContext).sendBroadcast(intent)
526
529
  promise.resolve(null)
527
530
  }
528
531
 
532
+ /**
533
+ * sourceClipRect {x,y,width,height} / sourceClipInsets {top,bottom,left,right} (dp) → 화면 px [l,t,r,b]
534
+ * (여백이면 각 변의 여백). 키가 없으면 null(안 바꿈), 값이 null 이면 빈 배열(자르지 않음).
535
+ */
536
+ private fun clipArrayOf(options: ReadableMap, key: String): FloatArray? {
537
+ if (!options.hasKey(key)) return null
538
+ if (options.isNull(key)) return FloatArray(0)
539
+ val m = options.getMap(key) ?: return FloatArray(0)
540
+ fun px(k: String) = if (m.hasKey(k) && !m.isNull(k)) com.facebook.react.uimanager.PixelUtil.toPixelFromDIP(m.getDouble(k).toFloat()) else 0f
541
+ return if (key == "sourceClipRect") {
542
+ val x = px("x")
543
+ val y = px("y")
544
+ floatArrayOf(x, y, x + px("width"), y + px("height"))
545
+ } else {
546
+ floatArrayOf(px("left"), px("top"), px("right"), px("bottom"))
547
+ }
548
+ }
549
+
529
550
  /** 동영상 변환 취소 (HUD 없이 앱이 말풍선에서). index -1 = 남은 동영상 전부. 진행 중인 처리가 없으면 false */
530
551
  @ReactMethod
531
552
  fun cancelVideoProcessing(index: Double, processingId: String, promise: Promise) {
@@ -673,6 +694,9 @@ class RNAttachmentKitModule(reactContext: ReactApplicationContext) :
673
694
  if (options.hasKey("sourceBackgroundColor")) {
674
695
  putString("sourceBackgroundColor", options.getString("sourceBackgroundColor"))
675
696
  }
697
+ // 잘라내기 영역 (열림·닫힘 중 사진과 가림 판이 그려지는 곳) — 이 오버레이 뷰어만
698
+ clipArrayOf(options, "sourceClipRect")?.let { putFloatArray("sourceClipRect", it) }
699
+ clipArrayOf(options, "sourceClipInsets")?.let { putFloatArray("sourceClipInsets", it) }
676
700
  // placeholderImages: 타입/뷰어 코드에는 있었지만 브릿지에서 한 번도 전달되지 않았던
677
701
  // 필드. 네이티브 뷰어가 onlyRetrieveFromCache(true)로 첫 프레임을 즉시 그리려 할 때
678
702
  // 쓰는 저해상도 대체 이미지 목록입니다(원본 다운로드 전 임시 표시용).
@@ -175,6 +175,13 @@ class RNAttachmentKit: RCTEventEmitter {
175
175
  } else if let r = optDict["sourceBorderRadius"] as? Double {
176
176
  self.zoomAnimator.sourceBorderRadius = CGFloat(r)
177
177
  }
178
+ // 잘라내기 영역 — 키가 있을 때만 바꿈 (null = 자르지 않음)
179
+ if optDict.keys.contains("sourceClipRect") {
180
+ self.zoomAnimator.sourceClipRect = RNAttachmentKit.parseRect(optDict["sourceClipRect"])
181
+ }
182
+ if optDict.keys.contains("sourceClipInsets") {
183
+ self.zoomAnimator.sourceClipInsets = RNAttachmentKit.parseInsets(optDict["sourceClipInsets"])
184
+ }
178
185
  self.zoomAnimator.updateMaskView()
179
186
 
180
187
  resolve(true)
@@ -203,6 +210,13 @@ class RNAttachmentKit: RCTEventEmitter {
203
210
  return CGRect(x: x, y: y, width: w, height: h)
204
211
  }
205
212
 
213
+ /// { top, bottom, left, right } (빠진 값 0). 객체가 아니면 nil
214
+ private static func parseInsets(_ v: Any?) -> UIEdgeInsets? {
215
+ guard let d = v as? NSDictionary else { return nil }
216
+ return UIEdgeInsets(top: cgFloat(d["top"]) ?? 0, left: cgFloat(d["left"]) ?? 0,
217
+ bottom: cgFloat(d["bottom"]) ?? 0, right: cgFloat(d["right"]) ?? 0)
218
+ }
219
+
206
220
  /// 말풍선 이미지(정적 지도 스냅샷) 로드. 메모리/디스크 캐시 → file:// → 다운로드 순.
207
221
  /// 실패하거나 너무 오래 걸리면 nil (이미지 없이 지도만 엶)
208
222
  /// completion(이미지, 마커 뺀 이미지인지). renderLocationThumbnail 결과면 마커 뺀 짝을 씀 → 뷰어가 마커를 따로 그려
@@ -495,6 +509,9 @@ class RNAttachmentKit: RCTEventEmitter {
495
509
  parsedRect = CGRect(x: x, y: y, width: w, height: h)
496
510
  }
497
511
 
512
+ let sourceClipRect = RNAttachmentKit.parseRect(options["sourceClipRect"])
513
+ let sourceClipInsets = RNAttachmentKit.parseInsets(options["sourceClipInsets"])
514
+
498
515
  var sourceBorderRadius: CGFloat = 0
499
516
  if let radiusNum = options["sourceBorderRadius"] as? NSNumber {
500
517
  sourceBorderRadius = CGFloat(truncating: radiusNum)
@@ -551,6 +568,9 @@ class RNAttachmentKit: RCTEventEmitter {
551
568
  self.zoomAnimator.sourceBorderRadius = sourceBorderRadius
552
569
  self.zoomAnimator.sourceBorderCorners = mask
553
570
  self.zoomAnimator.sourceBackgroundColor = sourceBackgroundColor
571
+ // 애니메이터는 재사용되므로 이번 호출 값으로 덮어씀 (안 주면 자르지 않음)
572
+ self.zoomAnimator.sourceClipRect = sourceClipRect
573
+ self.zoomAnimator.sourceClipInsets = sourceClipInsets
554
574
  // Reset any sourceImage left over from a previous openViewer() call - it's only
555
575
  // meant to carry this call's local placeholder (see below), and must not leak
556
576
  // into a later call that has no placeholder of its own.
@@ -8,32 +8,32 @@
8
8
  <key>BinaryPath</key>
9
9
  <string>RNAttachmentKit.framework/RNAttachmentKit</string>
10
10
  <key>LibraryIdentifier</key>
11
- <string>ios-arm64_x86_64-simulator</string>
11
+ <string>ios-arm64</string>
12
12
  <key>LibraryPath</key>
13
13
  <string>RNAttachmentKit.framework</string>
14
14
  <key>SupportedArchitectures</key>
15
15
  <array>
16
16
  <string>arm64</string>
17
- <string>x86_64</string>
18
17
  </array>
19
18
  <key>SupportedPlatform</key>
20
19
  <string>ios</string>
21
- <key>SupportedPlatformVariant</key>
22
- <string>simulator</string>
23
20
  </dict>
24
21
  <dict>
25
22
  <key>BinaryPath</key>
26
23
  <string>RNAttachmentKit.framework/RNAttachmentKit</string>
27
24
  <key>LibraryIdentifier</key>
28
- <string>ios-arm64</string>
25
+ <string>ios-arm64_x86_64-simulator</string>
29
26
  <key>LibraryPath</key>
30
27
  <string>RNAttachmentKit.framework</string>
31
28
  <key>SupportedArchitectures</key>
32
29
  <array>
33
30
  <string>arm64</string>
31
+ <string>x86_64</string>
34
32
  </array>
35
33
  <key>SupportedPlatform</key>
36
34
  <string>ios</string>
35
+ <key>SupportedPlatformVariant</key>
36
+ <string>simulator</string>
37
37
  </dict>
38
38
  </array>
39
39
  <key>CFBundlePackageType</key>
@@ -33856,6 +33856,269 @@
33856
33856
  }
33857
33857
  ]
33858
33858
  },
33859
+ {
33860
+ "kind": "Var",
33861
+ "name": "sourceClipRect",
33862
+ "printedName": "sourceClipRect",
33863
+ "children": [
33864
+ {
33865
+ "kind": "TypeNominal",
33866
+ "name": "Optional",
33867
+ "printedName": "CoreFoundation.CGRect?",
33868
+ "children": [
33869
+ {
33870
+ "kind": "TypeNominal",
33871
+ "name": "CGRect",
33872
+ "printedName": "CoreFoundation.CGRect",
33873
+ "usr": "c:@S@CGRect"
33874
+ }
33875
+ ],
33876
+ "usr": "s:Sq"
33877
+ }
33878
+ ],
33879
+ "declKind": "Var",
33880
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvp",
33881
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvp",
33882
+ "moduleName": "RNAttachmentKit",
33883
+ "declAttributes": [
33884
+ "HasInitialValue",
33885
+ "Preconcurrency",
33886
+ "Custom",
33887
+ "HasStorage",
33888
+ "AccessControl",
33889
+ "RawDocComment"
33890
+ ],
33891
+ "hasStorage": true,
33892
+ "accessors": [
33893
+ {
33894
+ "kind": "Accessor",
33895
+ "name": "Get",
33896
+ "printedName": "Get()",
33897
+ "children": [
33898
+ {
33899
+ "kind": "TypeNominal",
33900
+ "name": "Optional",
33901
+ "printedName": "CoreFoundation.CGRect?",
33902
+ "children": [
33903
+ {
33904
+ "kind": "TypeNominal",
33905
+ "name": "CGRect",
33906
+ "printedName": "CoreFoundation.CGRect",
33907
+ "usr": "c:@S@CGRect"
33908
+ }
33909
+ ],
33910
+ "usr": "s:Sq"
33911
+ }
33912
+ ],
33913
+ "declKind": "Accessor",
33914
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvg",
33915
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvg",
33916
+ "moduleName": "RNAttachmentKit",
33917
+ "implicit": true,
33918
+ "accessorKind": "get"
33919
+ },
33920
+ {
33921
+ "kind": "Accessor",
33922
+ "name": "Set",
33923
+ "printedName": "Set()",
33924
+ "children": [
33925
+ {
33926
+ "kind": "TypeNominal",
33927
+ "name": "Void",
33928
+ "printedName": "()"
33929
+ },
33930
+ {
33931
+ "kind": "TypeNominal",
33932
+ "name": "Optional",
33933
+ "printedName": "CoreFoundation.CGRect?",
33934
+ "children": [
33935
+ {
33936
+ "kind": "TypeNominal",
33937
+ "name": "CGRect",
33938
+ "printedName": "CoreFoundation.CGRect",
33939
+ "usr": "c:@S@CGRect"
33940
+ }
33941
+ ],
33942
+ "usr": "s:Sq"
33943
+ }
33944
+ ],
33945
+ "declKind": "Accessor",
33946
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvs",
33947
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvs",
33948
+ "moduleName": "RNAttachmentKit",
33949
+ "implicit": true,
33950
+ "accessorKind": "set"
33951
+ },
33952
+ {
33953
+ "kind": "Accessor",
33954
+ "name": "Modify",
33955
+ "printedName": "Modify()",
33956
+ "children": [
33957
+ {
33958
+ "kind": "TypeNominal",
33959
+ "name": "Void",
33960
+ "printedName": "()"
33961
+ }
33962
+ ],
33963
+ "declKind": "Accessor",
33964
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvM",
33965
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC14sourceClipRectSo6CGRectVSgvM",
33966
+ "moduleName": "RNAttachmentKit",
33967
+ "implicit": true,
33968
+ "accessorKind": "_modify"
33969
+ }
33970
+ ]
33971
+ },
33972
+ {
33973
+ "kind": "Var",
33974
+ "name": "sourceClipInsets",
33975
+ "printedName": "sourceClipInsets",
33976
+ "children": [
33977
+ {
33978
+ "kind": "TypeNominal",
33979
+ "name": "Optional",
33980
+ "printedName": "UIKit.UIEdgeInsets?",
33981
+ "children": [
33982
+ {
33983
+ "kind": "TypeNominal",
33984
+ "name": "UIEdgeInsets",
33985
+ "printedName": "UIKit.UIEdgeInsets",
33986
+ "usr": "c:@S@UIEdgeInsets"
33987
+ }
33988
+ ],
33989
+ "usr": "s:Sq"
33990
+ }
33991
+ ],
33992
+ "declKind": "Var",
33993
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvp",
33994
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvp",
33995
+ "moduleName": "RNAttachmentKit",
33996
+ "declAttributes": [
33997
+ "HasInitialValue",
33998
+ "Preconcurrency",
33999
+ "Custom",
34000
+ "HasStorage",
34001
+ "AccessControl"
34002
+ ],
34003
+ "hasStorage": true,
34004
+ "accessors": [
34005
+ {
34006
+ "kind": "Accessor",
34007
+ "name": "Get",
34008
+ "printedName": "Get()",
34009
+ "children": [
34010
+ {
34011
+ "kind": "TypeNominal",
34012
+ "name": "Optional",
34013
+ "printedName": "UIKit.UIEdgeInsets?",
34014
+ "children": [
34015
+ {
34016
+ "kind": "TypeNominal",
34017
+ "name": "UIEdgeInsets",
34018
+ "printedName": "UIKit.UIEdgeInsets",
34019
+ "usr": "c:@S@UIEdgeInsets"
34020
+ }
34021
+ ],
34022
+ "usr": "s:Sq"
34023
+ }
34024
+ ],
34025
+ "declKind": "Accessor",
34026
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvg",
34027
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvg",
34028
+ "moduleName": "RNAttachmentKit",
34029
+ "implicit": true,
34030
+ "accessorKind": "get"
34031
+ },
34032
+ {
34033
+ "kind": "Accessor",
34034
+ "name": "Set",
34035
+ "printedName": "Set()",
34036
+ "children": [
34037
+ {
34038
+ "kind": "TypeNominal",
34039
+ "name": "Void",
34040
+ "printedName": "()"
34041
+ },
34042
+ {
34043
+ "kind": "TypeNominal",
34044
+ "name": "Optional",
34045
+ "printedName": "UIKit.UIEdgeInsets?",
34046
+ "children": [
34047
+ {
34048
+ "kind": "TypeNominal",
34049
+ "name": "UIEdgeInsets",
34050
+ "printedName": "UIKit.UIEdgeInsets",
34051
+ "usr": "c:@S@UIEdgeInsets"
34052
+ }
34053
+ ],
34054
+ "usr": "s:Sq"
34055
+ }
34056
+ ],
34057
+ "declKind": "Accessor",
34058
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvs",
34059
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvs",
34060
+ "moduleName": "RNAttachmentKit",
34061
+ "implicit": true,
34062
+ "accessorKind": "set"
34063
+ },
34064
+ {
34065
+ "kind": "Accessor",
34066
+ "name": "Modify",
34067
+ "printedName": "Modify()",
34068
+ "children": [
34069
+ {
34070
+ "kind": "TypeNominal",
34071
+ "name": "Void",
34072
+ "printedName": "()"
34073
+ }
34074
+ ],
34075
+ "declKind": "Accessor",
34076
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvM",
34077
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC16sourceClipInsetsSo06UIEdgeH0VSgvM",
34078
+ "moduleName": "RNAttachmentKit",
34079
+ "implicit": true,
34080
+ "accessorKind": "_modify"
34081
+ }
34082
+ ]
34083
+ },
34084
+ {
34085
+ "kind": "Function",
34086
+ "name": "clipRect",
34087
+ "printedName": "clipRect(in:)",
34088
+ "children": [
34089
+ {
34090
+ "kind": "TypeNominal",
34091
+ "name": "Optional",
34092
+ "printedName": "CoreFoundation.CGRect?",
34093
+ "children": [
34094
+ {
34095
+ "kind": "TypeNominal",
34096
+ "name": "CGRect",
34097
+ "printedName": "CoreFoundation.CGRect",
34098
+ "usr": "c:@S@CGRect"
34099
+ }
34100
+ ],
34101
+ "usr": "s:Sq"
34102
+ },
34103
+ {
34104
+ "kind": "TypeNominal",
34105
+ "name": "CGRect",
34106
+ "printedName": "CoreFoundation.CGRect",
34107
+ "usr": "c:@S@CGRect"
34108
+ }
34109
+ ],
34110
+ "declKind": "Func",
34111
+ "usr": "s:15RNAttachmentKit22ZoomTransitionAnimatorC8clipRect2inSo6CGRectVSgAG_tF",
34112
+ "mangledName": "$s15RNAttachmentKit22ZoomTransitionAnimatorC8clipRect2inSo6CGRectVSgAG_tF",
34113
+ "moduleName": "RNAttachmentKit",
34114
+ "declAttributes": [
34115
+ "Preconcurrency",
34116
+ "Custom",
34117
+ "AccessControl",
34118
+ "RawDocComment"
34119
+ ],
34120
+ "funcSelfKind": "NonMutating"
34121
+ },
33859
34122
  {
33860
34123
  "kind": "Function",
33861
34124
  "name": "updateMaskView",
@@ -63431,14 +63694,14 @@
63431
63694
  {
63432
63695
  "filePath": "\/Users\/mike\/source\/PaidModules\/RNAttachmentKit\/RNAttachmentKit\/ios\/RNAttachmentKit\/ZoomTransitionAnimator.swift",
63433
63696
  "kind": "FloatLiteral",
63434
- "offset": 1586,
63697
+ "offset": 3644,
63435
63698
  "length": 4,
63436
63699
  "value": "0.37"
63437
63700
  },
63438
63701
  {
63439
63702
  "filePath": "\/Users\/mike\/source\/PaidModules\/RNAttachmentKit\/RNAttachmentKit\/ios\/RNAttachmentKit\/ZoomTransitionAnimator.swift",
63440
63703
  "kind": "FloatLiteral",
63441
- "offset": 1636,
63704
+ "offset": 3694,
63442
63705
  "length": 4,
63443
63706
  "value": "0.37"
63444
63707
  },
@@ -700,6 +700,9 @@ extension RNAttachmentKit.MediaGalleryViewController : UIKit.UICollectionViewDat
700
700
  @_Concurrency.MainActor @preconcurrency public var sourceBorderCorners: QuartzCore.CACornerMask
701
701
  @_Concurrency.MainActor @preconcurrency public var sourceBackgroundColor: UIKit.UIColor
702
702
  @_Concurrency.MainActor @preconcurrency public var fadeOutOnDismiss: Swift.Bool
703
+ @_Concurrency.MainActor @preconcurrency public var sourceClipRect: CoreFoundation.CGRect?
704
+ @_Concurrency.MainActor @preconcurrency public var sourceClipInsets: UIKit.UIEdgeInsets?
705
+ @_Concurrency.MainActor @preconcurrency public func clipRect(in bounds: CoreFoundation.CGRect) -> CoreFoundation.CGRect?
703
706
  @_Concurrency.MainActor @preconcurrency public func updateMaskView()
704
707
  @_Concurrency.MainActor @preconcurrency public var openDuration: Swift.Double
705
708
  @_Concurrency.MainActor @preconcurrency public var closeDuration: Swift.Double
@@ -700,6 +700,9 @@ extension RNAttachmentKit.MediaGalleryViewController : UIKit.UICollectionViewDat
700
700
  @_Concurrency.MainActor @preconcurrency public var sourceBorderCorners: QuartzCore.CACornerMask
701
701
  @_Concurrency.MainActor @preconcurrency public var sourceBackgroundColor: UIKit.UIColor
702
702
  @_Concurrency.MainActor @preconcurrency public var fadeOutOnDismiss: Swift.Bool
703
+ @_Concurrency.MainActor @preconcurrency public var sourceClipRect: CoreFoundation.CGRect?
704
+ @_Concurrency.MainActor @preconcurrency public var sourceClipInsets: UIKit.UIEdgeInsets?
705
+ @_Concurrency.MainActor @preconcurrency public func clipRect(in bounds: CoreFoundation.CGRect) -> CoreFoundation.CGRect?
703
706
  @_Concurrency.MainActor @preconcurrency public func updateMaskView()
704
707
  @_Concurrency.MainActor @preconcurrency public var openDuration: Swift.Double
705
708
  @_Concurrency.MainActor @preconcurrency public var closeDuration: Swift.Double
@@ -6,7 +6,7 @@
6
6
  <dict>
7
7
  <key>Assets.car</key>
8
8
  <data>
9
- MRss66st77g0KhHxCBbJQfKPil4=
9
+ g6yZrbEglkdHc1mfZaxagZ5xtQU=
10
10
  </data>
11
11
  <key>Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
12
12
  <data>
@@ -30,23 +30,23 @@
30
30
  </data>
31
31
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.abi.json</key>
32
32
  <data>
33
- XiJcz37eBpQ2pHHDRY/RO3qz+pk=
33
+ 4pXl77oaqGf4kp0ccvkhQUG7h80=
34
34
  </data>
35
35
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
36
36
  <data>
37
- o+qeXvWkibrZ9RWGnGXS1Zk2hCo=
37
+ Ne9vcMLnZi2MxDGKyNnwi97bL84=
38
38
  </data>
39
39
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftdoc</key>
40
40
  <data>
41
- 9LQT2Mxe8pObSGwo/0jjiCFpR/g=
41
+ NdmsL6G2DN6mQCB2p4dZudF/Y/A=
42
42
  </data>
43
43
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftinterface</key>
44
44
  <data>
45
- o+qeXvWkibrZ9RWGnGXS1Zk2hCo=
45
+ Ne9vcMLnZi2MxDGKyNnwi97bL84=
46
46
  </data>
47
47
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftmodule</key>
48
48
  <data>
49
- P8MSKO4dJ0tUPlOG5A4NBht3Z2c=
49
+ NByxa9uw3+fv7u8xscuWgQMLqXg=
50
50
  </data>
51
51
  <key>Modules/module.modulemap</key>
52
52
  <data>
@@ -207,7 +207,7 @@
207
207
  <dict>
208
208
  <key>hash2</key>
209
209
  <data>
210
- PN8SGeEYmroH8IKhC4cAPpqrFa8xoBCtF2CRXH0MgEA=
210
+ t4fvHNhwvX9Xc+yxU1dNnVy6zn+bhryN6MxDfE4HVwY=
211
211
  </data>
212
212
  </dict>
213
213
  <key>Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib</key>
@@ -242,35 +242,35 @@
242
242
  <dict>
243
243
  <key>hash2</key>
244
244
  <data>
245
- w1u9FhYjUVclD9NbG+dzuP3TfnMaGz5Ersy/anWtrGc=
245
+ yrEFcLxuZNiJZCnTbLDvLuPuZSImZSXoqrPGP50aleg=
246
246
  </data>
247
247
  </dict>
248
248
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
249
249
  <dict>
250
250
  <key>hash2</key>
251
251
  <data>
252
- WVyRqqzjyAEDfZC3c5+a4jh7MMNZ0KvzT2ody+J4qHA=
252
+ RGuaglarcySZLYt86m9oFo7HK+zyW7IF5TrVvNGYTbQ=
253
253
  </data>
254
254
  </dict>
255
255
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftdoc</key>
256
256
  <dict>
257
257
  <key>hash2</key>
258
258
  <data>
259
- J6otW+m15cBu+OR5LwOnEgo+zLTkpncXc4tI1T3ZoOM=
259
+ L/hilWOgTXQhtenmbgE842fuflYednu2E6kp83/ckkg=
260
260
  </data>
261
261
  </dict>
262
262
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftinterface</key>
263
263
  <dict>
264
264
  <key>hash2</key>
265
265
  <data>
266
- WVyRqqzjyAEDfZC3c5+a4jh7MMNZ0KvzT2ody+J4qHA=
266
+ RGuaglarcySZLYt86m9oFo7HK+zyW7IF5TrVvNGYTbQ=
267
267
  </data>
268
268
  </dict>
269
269
  <key>Modules/RNAttachmentKit.swiftmodule/arm64-apple-ios.swiftmodule</key>
270
270
  <dict>
271
271
  <key>hash2</key>
272
272
  <data>
273
- 4iA5fzn+5j6bPuyrPrhMONFexLbj/k6hQlzXKG1sbOA=
273
+ Xg3ufTjOmjWtQUMuGn4IPlALqJ/lG8Nt2Qi0KoeYLcQ=
274
274
  </data>
275
275
  </dict>
276
276
  <key>Modules/module.modulemap</key>