@lodev09/react-native-true-sheet 1.1.0 → 2.0.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 (33) hide show
  1. package/android/build.gradle +11 -18
  2. package/android/gradle.properties +5 -5
  3. package/android/src/main/java/com/lodev09/truesheet/TrueSheetDialog.kt +31 -8
  4. package/android/src/main/java/com/lodev09/truesheet/TrueSheetEvent.kt +22 -0
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +133 -53
  6. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +11 -13
  7. package/android/src/main/java/com/lodev09/truesheet/core/RootSheetView.kt +4 -13
  8. package/ios/Extensions/UIView+pinTo.swift +5 -0
  9. package/ios/TrueSheetEvent.swift +48 -0
  10. package/ios/TrueSheetView.swift +109 -69
  11. package/ios/TrueSheetViewController.swift +96 -31
  12. package/ios/TrueSheetViewManager.m +3 -0
  13. package/lib/commonjs/TrueSheet.js +17 -2
  14. package/lib/commonjs/TrueSheet.js.map +1 -1
  15. package/lib/module/TrueSheet.js +17 -2
  16. package/lib/module/TrueSheet.js.map +1 -1
  17. package/lib/typescript/commonjs/src/TrueSheet.d.ts +8 -0
  18. package/lib/typescript/commonjs/src/TrueSheet.d.ts.map +1 -1
  19. package/lib/typescript/commonjs/src/TrueSheet.types.d.ts +33 -5
  20. package/lib/typescript/commonjs/src/TrueSheet.types.d.ts.map +1 -1
  21. package/lib/typescript/module/src/TrueSheet.d.ts +8 -0
  22. package/lib/typescript/module/src/TrueSheet.d.ts.map +1 -1
  23. package/lib/typescript/module/src/TrueSheet.types.d.ts +33 -5
  24. package/lib/typescript/module/src/TrueSheet.types.d.ts.map +1 -1
  25. package/package.json +8 -6
  26. package/react-native-true-sheet.podspec +1 -1
  27. package/src/TrueSheet.tsx +31 -10
  28. package/src/TrueSheet.types.ts +43 -5
  29. package/android/src/main/java/com/lodev09/truesheet/events/ContainerSizeChangeEvent.kt +0 -23
  30. package/android/src/main/java/com/lodev09/truesheet/events/DismissEvent.kt +0 -16
  31. package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -16
  32. package/android/src/main/java/com/lodev09/truesheet/events/PresentEvent.kt +0 -23
  33. package/android/src/main/java/com/lodev09/truesheet/events/SizeChangeEvent.kt +0 -23
@@ -17,6 +17,9 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
17
17
  @objc var onPresent: RCTDirectEventBlock?
18
18
  @objc var onSizeChange: RCTDirectEventBlock?
19
19
  @objc var onContainerSizeChange: RCTDirectEventBlock?
20
+ @objc var onDragBegin: RCTDirectEventBlock?
21
+ @objc var onDragChange: RCTDirectEventBlock?
22
+ @objc var onDragEnd: RCTDirectEventBlock?
20
23
 
21
24
  // MARK: - React Properties
22
25
 
@@ -28,6 +31,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
28
31
  private var isPresented = false
29
32
  private var activeIndex: Int?
30
33
  private var bridge: RCTBridge?
34
+ private var eventDispatcher: (any RCTEventDispatcherProtocol)?
31
35
  private var viewController: TrueSheetViewController
32
36
 
33
37
  private var touchHandler: RCTTouchHandler
@@ -37,17 +41,13 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
37
41
  // MARK: - Content properties
38
42
 
39
43
  private var containerView: UIView?
40
-
41
44
  private var contentView: UIView?
42
45
  private var footerView: UIView?
46
+ private var scrollView: UIView?
43
47
 
44
- // Reference the bottom constraint to adjust during keyboard event
45
- private var footerViewBottomConstraint: NSLayoutConstraint?
46
-
47
- // Reference height constraint during content updates
48
- private var footerViewHeightConstraint: NSLayoutConstraint?
49
-
50
- private var scrollableTag: NSNumber?
48
+ // Bottom: Reference the bottom constraint to adjust during keyboard event
49
+ // Height: Reference height constraint during content updates
50
+ private var footerConstraints: Constraints?
51
51
 
52
52
  private var uiManager: RCTUIManager? {
53
53
  guard let uiManager = bridge?.uiManager else { return nil }
@@ -58,6 +58,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
58
58
 
59
59
  init(with bridge: RCTBridge) {
60
60
  self.bridge = bridge
61
+ eventDispatcher = bridge.eventDispatcher()
61
62
 
62
63
  viewController = TrueSheetViewController()
63
64
  touchHandler = RCTTouchHandler(bridge: bridge)
@@ -96,12 +97,23 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
96
97
 
97
98
  super.removeReactSubview(subview)
98
99
 
100
+ // Touch handler for Old Arch
99
101
  touchHandler.detach(from: subview)
102
+
103
+ // Touch handler that works in New Arch
100
104
  surfaceTouchHandler.detach(from: subview)
101
105
 
106
+ // Remove all constraints
107
+ // Fixes New Arch weird layout issue :/
108
+ containerView?.unpin()
109
+ footerView?.unpin()
110
+ contentView?.unpin()
111
+ scrollView?.unpin()
112
+
102
113
  containerView = nil
103
114
  contentView = nil
104
115
  footerView = nil
116
+ scrollView = nil
105
117
  }
106
118
 
107
119
  override func didUpdateReactSubviews() {
@@ -126,8 +138,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
126
138
  // Set footer constraints
127
139
  if let footerView {
128
140
  footerView.pinTo(view: viewController.view, from: [.left, .right, .bottom], with: 0) { constraints in
129
- self.footerViewBottomConstraint = constraints.bottom
130
- self.footerViewHeightConstraint = constraints.height
141
+ self.footerConstraints = constraints
131
142
  }
132
143
 
133
144
  // Set initial footer height
@@ -141,16 +152,14 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
141
152
  present(at: initialIndex, promise: nil, animated: initialIndexAnimated)
142
153
  }
143
154
 
144
- onMount?(nil)
155
+ dispatchEvent(name: "onMount", block: onMount, data: nil)
145
156
  }
146
157
  }
147
158
 
148
159
  // MARK: - ViewController delegate
149
160
 
150
161
  func viewControllerKeyboardWillHide() {
151
- guard let footerViewBottomConstraint else { return }
152
-
153
- footerViewBottomConstraint.constant = 0
162
+ footerConstraints?.bottom?.constant = 0
154
163
 
155
164
  UIView.animate(withDuration: 0.3) {
156
165
  self.viewController.view.layoutIfNeeded()
@@ -158,9 +167,7 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
158
167
  }
159
168
 
160
169
  func viewControllerKeyboardWillShow(_ keyboardHeight: CGFloat) {
161
- guard let footerViewBottomConstraint else { return }
162
-
163
- footerViewBottomConstraint.constant = -keyboardHeight
170
+ footerConstraints?.bottom?.constant = -keyboardHeight
164
171
 
165
172
  UIView.animate(withDuration: 0.3) {
166
173
  self.viewController.view.layoutIfNeeded()
@@ -169,24 +176,46 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
169
176
 
170
177
  func viewControllerDidChangeWidth(_ width: CGFloat) {
171
178
  // We only pass width to JS since height is handled by the constraints
172
- onContainerSizeChange?(["width": width])
179
+ dispatchEvent(name: "onContainerSizeChange", block: onContainerSizeChange, data: ["width": width])
180
+ }
181
+
182
+ func viewControllerDidDrag(_ state: UIGestureRecognizer.State, _ height: CGFloat) {
183
+ let sizeInfo = SizeInfo(index: activeIndex ?? 0, value: height)
184
+
185
+ switch state {
186
+ case .began:
187
+ dispatchEvent(name: "onDragBegin", block: onDragBegin, data: sizeInfoData(from: sizeInfo))
188
+ case .changed:
189
+ dispatchEvent(name: "onDragChange", block: onDragChange, data: sizeInfoData(from: sizeInfo))
190
+ case .ended, .cancelled:
191
+ dispatchEvent(name: "onDragEnd", block: onDragEnd, data: sizeInfoData(from: sizeInfo))
192
+ default:
193
+ Logger.info("Drag state is not supported")
194
+ }
173
195
  }
174
196
 
175
197
  func viewControllerWillAppear() {
176
- setupScrollable()
198
+ guard let contentView, let scrollView, let containerView else {
199
+ return
200
+ }
201
+
202
+ // Add constraints to fix weirdness and support ScrollView
203
+ contentView.pinTo(view: containerView, constraints: nil)
204
+ scrollView.pinTo(view: contentView, constraints: nil)
177
205
  }
178
206
 
179
207
  func viewControllerDidDismiss() {
180
208
  isPresented = false
181
209
  activeIndex = nil
182
-
183
- onDismiss?(nil)
210
+ dispatchEvent(name: "onDismiss", block: onDismiss, data: nil)
184
211
  }
185
212
 
186
- func viewControllerSheetDidChangeSize(_ sizeInfo: SizeInfo) {
213
+ func viewControllerDidChangeSize(_ sizeInfo: SizeInfo?) {
214
+ guard let sizeInfo else { return }
215
+
187
216
  if sizeInfo.index != activeIndex {
188
217
  activeIndex = sizeInfo.index
189
- onSizeChange?(sizeInfoData(from: sizeInfo))
218
+ dispatchEvent(name: "onSizeChange", block: onSizeChange, data: sizeInfoData(from: sizeInfo))
190
219
  }
191
220
  }
192
221
 
@@ -209,29 +238,34 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
209
238
  }
210
239
 
211
240
  viewController.maxHeight = maxHeight
212
- configurePresentedSheet()
241
+
242
+ if #available(iOS 15.0, *) {
243
+ withPresentedSheet { _ in
244
+ viewController.setupSizes()
245
+ }
246
+ }
213
247
  }
214
248
 
215
249
  @objc
216
250
  func setContentHeight(_ height: NSNumber) {
217
- // Exclude bottom safe area for consistency with a Scrollable content
218
- let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow })
219
- let bottomInset = window?.safeAreaInsets.bottom ?? 0
220
-
221
- let contentHeight = CGFloat(height.floatValue) - bottomInset
251
+ let contentHeight = CGFloat(height.floatValue)
222
252
  guard viewController.contentHeight != contentHeight else {
223
253
  return
224
254
  }
225
255
 
226
256
  viewController.contentHeight = contentHeight
227
- configurePresentedSheet()
257
+
258
+ if #available(iOS 15.0, *) {
259
+ withPresentedSheet { _ in
260
+ viewController.setupSizes()
261
+ }
262
+ }
228
263
  }
229
264
 
230
265
  @objc
231
266
  func setFooterHeight(_ height: NSNumber) {
232
267
  let footerHeight = CGFloat(height.floatValue)
233
- guard let footerView, let footerViewHeightConstraint,
234
- viewController.footerHeight != footerHeight else {
268
+ guard let footerView, viewController.footerHeight != footerHeight else {
235
269
  return
236
270
  }
237
271
 
@@ -239,19 +273,28 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
239
273
 
240
274
  if footerView.subviews.first != nil {
241
275
  containerView?.bringSubviewToFront(footerView)
242
- footerViewHeightConstraint.constant = viewController.footerHeight
276
+ footerConstraints?.height?.constant = viewController.footerHeight
243
277
  } else {
244
278
  containerView?.sendSubviewToBack(footerView)
245
- footerViewHeightConstraint.constant = 0
279
+ footerConstraints?.height?.constant = 0
246
280
  }
247
281
 
248
- configurePresentedSheet()
282
+ if #available(iOS 15.0, *) {
283
+ withPresentedSheet { _ in
284
+ viewController.setupSizes()
285
+ }
286
+ }
249
287
  }
250
288
 
251
289
  @objc
252
290
  func setSizes(_ sizes: [Any]) {
253
291
  viewController.sizes = Array(sizes.prefix(3))
254
- configurePresentedSheet()
292
+
293
+ if #available(iOS 15.0, *) {
294
+ withPresentedSheet { _ in
295
+ viewController.setupSizes()
296
+ }
297
+ }
255
298
  }
256
299
 
257
300
  @objc
@@ -307,8 +350,8 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
307
350
  viewController.dimmed = dimmed
308
351
 
309
352
  if #available(iOS 15.0, *) {
310
- withPresentedSheet { sheet in
311
- viewController.setupDimmedBackground(for: sheet)
353
+ withPresentedSheet { _ in
354
+ viewController.setupDimmedBackground()
312
355
  }
313
356
  }
314
357
  }
@@ -322,22 +365,22 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
322
365
  viewController.dimmedIndex = index.intValue
323
366
 
324
367
  if #available(iOS 15.0, *) {
325
- withPresentedSheet { sheet in
326
- viewController.setupDimmedBackground(for: sheet)
368
+ withPresentedSheet { _ in
369
+ viewController.setupDimmedBackground()
327
370
  }
328
371
  }
329
372
  }
330
373
 
331
374
  @objc
332
375
  func setScrollableHandle(_ tag: NSNumber?) {
333
- scrollableTag = tag
376
+ scrollView = uiManager?.view(forReactTag: tag)
334
377
  }
335
378
 
336
379
  // MARK: - Methods
337
380
 
338
- private func sizeInfoData(from sizeInfo: SizeInfo?) -> [String: Any] {
381
+ private func sizeInfoData(from sizeInfo: SizeInfo?) -> [String: Any]? {
339
382
  guard let sizeInfo else {
340
- return ["index": 0, "value": 0.0]
383
+ return nil
341
384
  }
342
385
 
343
386
  return ["index": sizeInfo.index, "value": sizeInfo.value]
@@ -355,25 +398,14 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
355
398
  }
356
399
  }
357
400
 
358
- /// Fully reconfigure the sheet. Use during size prop changes.
359
- func configurePresentedSheet() {
360
- if isPresented {
361
- viewController.configureSheet(at: activeIndex ?? 0, nil)
362
- }
363
- }
364
-
365
- func setupScrollable() {
366
- guard let contentView, let containerView, let scrollableTag else {
367
- return
368
- }
369
-
370
- let scrollView = uiManager?.view(forReactTag: scrollableTag)
371
-
372
- // Add constraints to fix weirdness and support ScrollView
373
- if let scrollView {
374
- contentView.pinTo(view: containerView, constraints: nil)
375
- scrollView.pinTo(view: contentView, constraints: nil)
376
- }
401
+ func dispatchEvent(name: String, block: RCTDirectEventBlock?, data: [String: Any]?) {
402
+ // eventDispatcher doesn't work in New Arch so we need to call it directly :/
403
+ // we needed eventDispatcher for Reanimated to work on old arch.
404
+ #if RCT_NEW_ARCH_ENABLED
405
+ block?(data)
406
+ #else
407
+ eventDispatcher?.send(TrueSheetEvent(viewTag: reactTag, name: name, data: data))
408
+ #endif
377
409
  }
378
410
 
379
411
  func dismiss(promise: Promise) {
@@ -400,19 +432,27 @@ class TrueSheetView: UIView, RCTInvalidating, TrueSheetViewControllerDelegate {
400
432
  return
401
433
  }
402
434
 
403
- viewController.configureSheet(at: index) { sizeInfo in
404
- // Trigger onSizeChange event when size is changed while presenting
405
- if self.isPresented {
406
- self.viewControllerSheetDidChangeSize(sizeInfo)
435
+ if isPresented {
436
+ withPresentedSheet { sheet in
437
+ sheet.selectedDetentIdentifier = viewController.detentIdentifierForIndex(index)
438
+
439
+ // Trigger onSizeChange event when size is changed while presenting
440
+ viewControllerDidChangeSize(self.viewController.currentSizeInfo)
407
441
  promise?.resolve(nil)
408
- } else {
442
+ }
443
+ } else {
444
+ viewController.prepareForPresentation(at: index) {
409
445
  // Keep track of the active index
410
446
  self.activeIndex = index
411
447
  self.isPresented = true
412
448
 
413
449
  rvc.present(self.viewController, animated: animated) {
414
- let data = self.sizeInfoData(from: sizeInfo)
415
- self.onPresent?(data)
450
+ if #available(iOS 15.0, *) {
451
+ self.viewController.observeDrag()
452
+ }
453
+
454
+ let data = self.sizeInfoData(from: self.viewController.currentSizeInfo)
455
+ self.dispatchEvent(name: "onPresent", block: self.onPresent, data: data)
416
456
  promise?.resolve(nil)
417
457
  }
418
458
  }
@@ -18,10 +18,11 @@ struct SizeInfo {
18
18
  protocol TrueSheetViewControllerDelegate: AnyObject {
19
19
  func viewControllerDidChangeWidth(_ width: CGFloat)
20
20
  func viewControllerDidDismiss()
21
- func viewControllerSheetDidChangeSize(_ sizeInfo: SizeInfo)
21
+ func viewControllerDidChangeSize(_ sizeInfo: SizeInfo?)
22
22
  func viewControllerWillAppear()
23
23
  func viewControllerKeyboardWillShow(_ keyboardHeight: CGFloat)
24
24
  func viewControllerKeyboardWillHide()
25
+ func viewControllerDidDrag(_ state: UIPanGestureRecognizer.State, _ height: CGFloat)
25
26
  }
26
27
 
27
28
  // MARK: - TrueSheetViewController
@@ -31,7 +32,11 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
31
32
 
32
33
  weak var delegate: TrueSheetViewControllerDelegate?
33
34
 
34
- var backgroundView: UIVisualEffectView
35
+ /// The bottomInset of the sheet.
36
+ /// We will be excluding these on height calculation for conistency with scrollable content.
37
+ private var bottomInset: CGFloat
38
+ private var backgroundView: UIVisualEffectView
39
+
35
40
  var lastViewWidth: CGFloat = 0
36
41
  var detentValues: [String: SizeInfo] = [:]
37
42
 
@@ -49,11 +54,23 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
49
54
  var dimmed = true
50
55
  var dimmedIndex: Int? = 0
51
56
 
57
+ var currentSizeInfo: SizeInfo? {
58
+ guard #available(iOS 15.0, *), let sheet = sheetPresentationController,
59
+ let rawValue = sheet.selectedDetentIdentifier?.rawValue else {
60
+ return nil
61
+ }
62
+
63
+ return detentValues[rawValue]
64
+ }
65
+
52
66
  // MARK: - Setup
53
67
 
54
68
  init() {
55
69
  backgroundView = UIVisualEffectView()
56
70
 
71
+ let window = UIApplication.shared.windows.first(where: { $0.isKeyWindow })
72
+ bottomInset = window?.safeAreaInsets.bottom ?? 0
73
+
57
74
  super.init(nibName: nil, bundle: nil)
58
75
 
59
76
  backgroundView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
@@ -76,7 +93,7 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
76
93
  func sheetPresentationControllerDidChangeSelectedDetentIdentifier(_ sheet: UISheetPresentationController) {
77
94
  if let rawValue = sheet.selectedDetentIdentifier?.rawValue,
78
95
  let sizeInfo = detentValues[rawValue] {
79
- delegate?.viewControllerSheetDidChangeSize(sizeInfo)
96
+ delegate?.viewControllerDidChangeSize(sizeInfo)
80
97
  }
81
98
  }
82
99
 
@@ -96,6 +113,18 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
96
113
  )
97
114
  }
98
115
 
116
+ @objc
117
+ func handlePanGesture(_ gesture: UIPanGestureRecognizer) {
118
+ guard let view = gesture.view else { return }
119
+
120
+ // Calculate visible height
121
+ let screenHeight = UIScreen.main.bounds.height
122
+ let sheetY = view.frame.origin.y
123
+ let height = screenHeight - bottomInset - sheetY
124
+
125
+ delegate?.viewControllerDidDrag(gesture.state, height)
126
+ }
127
+
99
128
  @objc
100
129
  private func keyboardWillShow(_ notification: Notification) {
101
130
  guard let keyboardSize = (notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? NSValue)?.cgRectValue else {
@@ -146,7 +175,11 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
146
175
  /// Setup dimmed sheet.
147
176
  /// `dimmedIndex` will further customize the dimming behavior.
148
177
  @available(iOS 15.0, *)
149
- func setupDimmedBackground(for sheet: UISheetPresentationController) {
178
+ func setupDimmedBackground() {
179
+ guard let sheet = sheetPresentationController else {
180
+ return
181
+ }
182
+
150
183
  if dimmed, dimmedIndex == 0 {
151
184
  sheet.largestUndimmedDetentIdentifier = nil
152
185
  } else {
@@ -162,49 +195,81 @@ class TrueSheetViewController: UIViewController, UISheetPresentationControllerDe
162
195
  }
163
196
  }
164
197
 
165
- /// Prepares the view controller for sheet presentation
166
- func configureSheet(at index: Int = 0, _ completion: ((SizeInfo) -> Void)?) {
167
- let defaultSizeInfo = SizeInfo(index: index, value: view.bounds.height)
168
-
169
- guard #available(iOS 15.0, *), let sheet = sheetPresentationController else {
170
- completion?(defaultSizeInfo)
198
+ /// Setup sheet detents by sizes.
199
+ @available(iOS 15.0, *)
200
+ func setupSizes() {
201
+ guard let sheet = sheetPresentationController else {
171
202
  return
172
203
  }
173
204
 
205
+ // Configure detents
174
206
  detentValues = [:]
175
-
176
207
  var detents: [UISheetPresentationController.Detent] = []
177
208
 
178
209
  for (index, size) in sizes.enumerated() {
179
- let detent = detentFor(size, with: contentHeight + footerHeight, with: maxHeight) { id, value in
210
+ // Exclude bottom safe area for consistency with a Scrollable content
211
+ let adjustedContentHeight = contentHeight - bottomInset
212
+ let detent = detentFor(size, with: adjustedContentHeight + footerHeight, with: maxHeight) { id, value in
180
213
  self.detentValues[id] = SizeInfo(index: index, value: value)
181
214
  }
182
215
 
183
216
  detents.append(detent)
184
217
  }
185
218
 
186
- sheet.animateChanges {
187
- sheet.detents = detents
188
- sheet.prefersEdgeAttachedInCompactHeight = true
189
- sheet.prefersGrabberVisible = grabber
190
- sheet.preferredCornerRadius = cornerRadius
191
- sheet.delegate = self
192
-
193
- var identifier: UISheetPresentationController.Detent.Identifier = .medium
194
-
195
- if sheet.detents.indices.contains(index) {
196
- let detent = sheet.detents[index]
197
- if #available(iOS 16.0, *) {
198
- identifier = detent.identifier
199
- } else if detent == .large() {
200
- identifier = .large
201
- }
219
+ sheet.detents = detents
220
+ }
221
+
222
+ /// Get the detent identifier for a given index
223
+ @available(iOS 15.0, *)
224
+ func detentIdentifierForIndex(_ index: Int) -> UISheetPresentationController.Detent.Identifier {
225
+ guard let sheet = sheetPresentationController else {
226
+ return .medium
227
+ }
228
+
229
+ var identifier = UISheetPresentationController.Detent.Identifier.medium
230
+ if sheet.detents.indices.contains(index) {
231
+ let detent = sheet.detents[index]
232
+ if #available(iOS 16.0, *) {
233
+ identifier = detent.identifier
234
+ } else if detent == .large() {
235
+ identifier = .large
202
236
  }
237
+ }
203
238
 
204
- setupDimmedBackground(for: sheet)
239
+ return identifier
240
+ }
205
241
 
206
- sheet.selectedDetentIdentifier = identifier
207
- completion?(detentValues[identifier.rawValue] ?? defaultSizeInfo)
242
+ /// Observe while the sheet is being dragged.
243
+ @available(iOS 15.0, *)
244
+ func observeDrag() {
245
+ guard let sheet = sheetPresentationController,
246
+ let presentedView = sheet.presentedView else {
247
+ return
208
248
  }
249
+
250
+ for recognizer in presentedView.gestureRecognizers ?? [] {
251
+ if let panGesture = recognizer as? UIPanGestureRecognizer {
252
+ panGesture.addTarget(self, action: #selector(handlePanGesture(_:)))
253
+ }
254
+ }
255
+ }
256
+
257
+ /// Prepares the view controller for sheet presentation
258
+ func prepareForPresentation(at index: Int = 0, _ completion: (() -> Void)?) {
259
+ guard #available(iOS 15.0, *), let sheet = sheetPresentationController else {
260
+ completion?()
261
+ return
262
+ }
263
+
264
+ setupSizes()
265
+ setupDimmedBackground()
266
+
267
+ sheet.delegate = self
268
+ sheet.prefersEdgeAttachedInCompactHeight = true
269
+ sheet.prefersGrabberVisible = grabber
270
+ sheet.preferredCornerRadius = cornerRadius
271
+ sheet.selectedDetentIdentifier = detentIdentifierForIndex(index)
272
+
273
+ completion?()
209
274
  }
210
275
  }
@@ -27,6 +27,9 @@ RCT_EXPORT_VIEW_PROPERTY(onMount, RCTDirectEventBlock)
27
27
  RCT_EXPORT_VIEW_PROPERTY(onPresent, RCTDirectEventBlock)
28
28
  RCT_EXPORT_VIEW_PROPERTY(onDismiss, RCTDirectEventBlock)
29
29
  RCT_EXPORT_VIEW_PROPERTY(onSizeChange, RCTDirectEventBlock)
30
+ RCT_EXPORT_VIEW_PROPERTY(onDragBegin, RCTDirectEventBlock)
31
+ RCT_EXPORT_VIEW_PROPERTY(onDragChange, RCTDirectEventBlock)
32
+ RCT_EXPORT_VIEW_PROPERTY(onDragEnd, RCTDirectEventBlock)
30
33
  RCT_EXPORT_VIEW_PROPERTY(onContainerSizeChange, RCTDirectEventBlock)
31
34
 
32
35
  // Properties
@@ -32,6 +32,9 @@ class TrueSheet extends _react.PureComponent {
32
32
  this.onDismiss = this.onDismiss.bind(this);
33
33
  this.onPresent = this.onPresent.bind(this);
34
34
  this.onSizeChange = this.onSizeChange.bind(this);
35
+ this.onDragBegin = this.onDragBegin.bind(this);
36
+ this.onDragChange = this.onDragChange.bind(this);
37
+ this.onDragEnd = this.onDragEnd.bind(this);
35
38
  this.onContentLayout = this.onContentLayout.bind(this);
36
39
  this.onFooterLayout = this.onFooterLayout.bind(this);
37
40
  this.onContainerSizeChange = this.onContainerSizeChange.bind(this);
@@ -96,7 +99,7 @@ class TrueSheet extends _react.PureComponent {
96
99
  });
97
100
  }
98
101
  onSizeChange(event) {
99
- this.props.onSizeChange?.(event.nativeEvent);
102
+ this.props.onSizeChange?.(event);
100
103
  }
101
104
  onContainerSizeChange(event) {
102
105
  this.setState({
@@ -105,7 +108,7 @@ class TrueSheet extends _react.PureComponent {
105
108
  });
106
109
  }
107
110
  onPresent(event) {
108
- this.props.onPresent?.(event.nativeEvent);
111
+ this.props.onPresent?.(event);
109
112
  }
110
113
  onFooterLayout(event) {
111
114
  this.setState({
@@ -123,6 +126,15 @@ class TrueSheet extends _react.PureComponent {
123
126
  onMount() {
124
127
  this.props.onMount?.();
125
128
  }
129
+ onDragBegin(event) {
130
+ this.props.onDragBegin?.(event);
131
+ }
132
+ onDragChange(event) {
133
+ this.props.onDragChange?.(event);
134
+ }
135
+ onDragEnd(event) {
136
+ this.props.onDragEnd?.(event);
137
+ }
126
138
 
127
139
  /**
128
140
  * Present the sheet. Optionally accepts a size `index`.
@@ -200,6 +212,9 @@ class TrueSheet extends _react.PureComponent {
200
212
  onPresent: this.onPresent,
201
213
  onDismiss: this.onDismiss,
202
214
  onSizeChange: this.onSizeChange,
215
+ onDragBegin: this.onDragBegin,
216
+ onDragChange: this.onDragChange,
217
+ onDragEnd: this.onDragEnd,
203
218
  onContainerSizeChange: this.onContainerSizeChange,
204
219
  children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
205
220
  collapsable: false,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_TrueSheetModule","_TrueSheetGrabber","_TrueSheetFooter","_jsxRuntime","NATIVE_COMPONENT_NAME","LINKING_ERROR","Platform","select","ios","default","TrueSheetNativeView","requireNativeComponent","Error","TrueSheet","PureComponent","displayName","handles","constructor","props","ref","createRef","onMount","bind","onDismiss","onPresent","onSizeChange","onContentLayout","onFooterLayout","onContainerSizeChange","state","containerWidth","undefined","containerHeight","contentHeight","footerHeight","scrollableHandle","getHandle","name","handle","console","warn","present","index","TrueSheetModule","dismiss","resize","nodeHandle","findNodeHandle","current","updateState","scrollRef","setState","event","nativeEvent","width","height","layout","componentDidMount","sizes","length","componentDidUpdate","render","backgroundColor","dismissible","grabber","dimmed","initialIndexAnimated","edgeToEdge","keyboardMode","initialIndex","dimmedIndex","grabberProps","blurTint","cornerRadius","maxHeight","FooterComponent","style","contentContainerStyle","children","rest","jsx","$nativeSheet","background","processColor","jsxs","View","collapsable","overflow","android","onLayout","TrueSheetFooter","Component","OS","TrueSheetGrabber","visible","exports","position","left","zIndex"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAcA,IAAAE,gBAAA,GAAAF,OAAA;AACA,IAAAG,iBAAA,GAAAH,OAAA;AACA,IAAAI,gBAAA,GAAAJ,OAAA;AAAmD,IAAAK,WAAA,GAAAL,OAAA;AAEnD,MAAMM,qBAAqB,GAAG,eAAe;AAC7C,MAAMC,aAAa,GACjB,2FAA2F,GAC3FC,qBAAQ,CAACC,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B;AA0BjC,MAAMC,mBAAmB,GAAG,IAAAC,mCAAsB,EAA2BP,qBAAqB,CAAC;AAEnG,IAAI,CAACM,mBAAmB,EAAE;EACxB,MAAM,IAAIE,KAAK,CAACP,aAAa,CAAC;AAChC;AAEO,MAAMQ,SAAS,SAASC,oBAAa,CAAiC;EAC3EC,WAAW,GAAG,WAAW;EAIzB;AACF;AACA;EACE,OAAwBC,OAAO,GAA+B,CAAC,CAAC;EAEhEC,WAAWA,CAACC,KAAqB,EAAE;IACjC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,GAAG,gBAAG,IAAAC,gBAAS,EAAY,CAAC;IAEjC,IAAI,CAACC,OAAO,GAAG,IAAI,CAACA,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC;IACtC,IAAI,CAACC,SAAS,GAAG,IAAI,CAACA,SAAS,CAACD,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACE,SAAS,GAAG,IAAI,CAACA,SAAS,CAACF,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACG,YAAY,GAAG,IAAI,CAACA,YAAY,CAACH,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACI,eAAe,GAAG,IAAI,CAACA,eAAe,CAACJ,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACK,cAAc,GAAG,IAAI,CAACA,cAAc,CAACL,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACM,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACN,IAAI,CAAC,IAAI,CAAC;IAElE,IAAI,CAACO,KAAK,GAAG;MACXC,cAAc,EAAEC,SAAS;MACzBC,eAAe,EAAED,SAAS;MAC1BE,aAAa,EAAEF,SAAS;MACxBG,YAAY,EAAEH,SAAS;MACvBI,gBAAgB,EAAE;IACpB,CAAC;EACH;EAEA,OAAeC,SAASA,CAACC,IAAY,EAAE;IACrC,MAAMC,MAAM,GAAGzB,SAAS,CAACG,OAAO,CAACqB,IAAI,CAAC;IACtC,IAAI,CAACC,MAAM,EAAE;MACXC,OAAO,CAACC,IAAI,CAAC,uCAAuCH,IAAI,0BAA0B,CAAC;MACnF;IACF;IAEA,OAAOC,MAAM;EACf;;EAEA;AACF;AACA;AACA;EACE,aAAoBG,OAAOA,CAACJ,IAAY,EAAEK,KAAa,GAAG,CAAC,EAAE;IAC3D,MAAMJ,MAAM,GAAGzB,SAAS,CAACuB,SAAS,CAACC,IAAI,CAAC;IACxC,IAAI,CAACC,MAAM,EAAE;IAEb,MAAMK,gCAAe,CAACF,OAAO,CAACH,MAAM,EAAEI,KAAK,CAAC;EAC9C;;EAEA;AACF;AACA;AACA;EACE,aAAoBE,OAAOA,CAACP,IAAY,EAAE;IACxC,MAAMC,MAAM,GAAGzB,SAAS,CAACuB,SAAS,CAACC,IAAI,CAAC;IACxC,IAAI,CAACC,MAAM,EAAE;IAEb,MAAMK,gCAAe,CAACC,OAAO,CAACN,MAAM,CAAC;EACvC;;EAEA;AACF;AACA;AACA;EACE,aAAoBO,MAAMA,CAACR,IAAY,EAAEK,KAAa,EAAE;IACtD,MAAM7B,SAAS,CAAC4B,OAAO,CAACJ,IAAI,EAAEK,KAAK,CAAC;EACtC;EAEA,IAAYJ,MAAMA,CAAA,EAAW;IAC3B,MAAMQ,UAAU,GAAG,IAAAC,2BAAc,EAAC,IAAI,CAAC5B,GAAG,CAAC6B,OAAO,CAAC;IACnD,IAAIF,UAAU,IAAI,IAAI,IAAIA,UAAU,KAAK,CAAC,CAAC,EAAE;MAC3C,MAAM,IAAIlC,KAAK,CAAC,+BAA+B,CAAC;IAClD;IAEA,OAAOkC,UAAU;EACnB;EAEQG,WAAWA,CAAA,EAAS;IAC1B,MAAMd,gBAAgB,GAAG,IAAI,CAACjB,KAAK,CAACgC,SAAS,EAAEF,OAAO,GAClD,IAAAD,2BAAc,EAAC,IAAI,CAAC7B,KAAK,CAACgC,SAAS,CAACF,OAAO,CAAC,GAC5C,IAAI;IAER,IAAI,IAAI,CAAC9B,KAAK,CAACmB,IAAI,EAAE;MACnBxB,SAAS,CAACG,OAAO,CAAC,IAAI,CAACE,KAAK,CAACmB,IAAI,CAAC,GAAG,IAAI,CAACC,MAAM;IAClD;IAEA,IAAI,CAACa,QAAQ,CAAC;MACZhB;IACF,CAAC,CAAC;EACJ;EAEQV,YAAYA,CAAC2B,KAAsB,EAAQ;IACjD,IAAI,CAAClC,KAAK,CAACO,YAAY,GAAG2B,KAAK,CAACC,WAAW,CAAC;EAC9C;EAEQzB,qBAAqBA,CAACwB,KAA+B,EAAQ;IACnE,IAAI,CAACD,QAAQ,CAAC;MACZrB,cAAc,EAAEsB,KAAK,CAACC,WAAW,CAACC,KAAK;MACvCtB,eAAe,EAAEoB,KAAK,CAACC,WAAW,CAACE;IACrC,CAAC,CAAC;EACJ;EAEQ/B,SAASA,CAAC4B,KAAsB,EAAQ;IAC9C,IAAI,CAAClC,KAAK,CAACM,SAAS,GAAG4B,KAAK,CAACC,WAAW,CAAC;EAC3C;EAEQ1B,cAAcA,CAACyB,KAAwB,EAAQ;IACrD,IAAI,CAACD,QAAQ,CAAC;MACZjB,YAAY,EAAEkB,KAAK,CAACC,WAAW,CAACG,MAAM,CAACD;IACzC,CAAC,CAAC;EACJ;EAEQ7B,eAAeA,CAAC0B,KAAwB,EAAQ;IACtD,IAAI,CAACD,QAAQ,CAAC;MACZlB,aAAa,EAAEmB,KAAK,CAACC,WAAW,CAACG,MAAM,CAACD;IAC1C,CAAC,CAAC;EACJ;EAEQhC,SAASA,CAAA,EAAS;IACxB,IAAI,CAACL,KAAK,CAACK,SAAS,GAAG,CAAC;EAC1B;EAEQF,OAAOA,CAAA,EAAS;IACtB,IAAI,CAACH,KAAK,CAACG,OAAO,GAAG,CAAC;EACxB;;EAEA;AACF;AACA;AACA;EACE,MAAaoB,OAAOA,CAACC,KAAa,GAAG,CAAC,EAAiB;IACrD,MAAMC,gCAAe,CAACF,OAAO,CAAC,IAAI,CAACH,MAAM,EAAEI,KAAK,CAAC;EACnD;;EAEA;AACF;AACA;AACA;EACE,MAAaG,MAAMA,CAACH,KAAa,EAAiB;IAChD,MAAM,IAAI,CAACD,OAAO,CAACC,KAAK,CAAC;EAC3B;;EAEA;AACF;AACA;EACE,MAAaE,OAAOA,CAAA,EAAkB;IACpC,MAAMD,gCAAe,CAACC,OAAO,CAAC,IAAI,CAACN,MAAM,CAAC;EAC5C;EAEAmB,iBAAiBA,CAAA,EAAS;IACxB,IAAI,IAAI,CAACvC,KAAK,CAACwC,KAAK,IAAI,IAAI,CAACxC,KAAK,CAACwC,KAAK,CAACC,MAAM,GAAG,CAAC,EAAE;MACnDpB,OAAO,CAACC,IAAI,CACV,+GACF,CAAC;IACH;IAEA,IAAI,CAACS,WAAW,CAAC,CAAC;EACpB;EAEAW,kBAAkBA,CAAA,EAAS;IACzB,IAAI,CAACX,WAAW,CAAC,CAAC;EACpB;EAEAY,MAAMA,CAAA,EAAc;IAClB,MAAM;MACJH,KAAK,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC;MAC3BI,eAAe,GAAG,OAAO;MACzBC,WAAW,GAAG,IAAI;MAClBC,OAAO,GAAG,IAAI;MACdC,MAAM,GAAG,IAAI;MACbC,oBAAoB,GAAG,IAAI;MAC3BC,UAAU,GAAG,KAAK;MAClBC,YAAY,GAAG,QAAQ;MACvBC,YAAY;MACZC,WAAW;MACXC,YAAY;MACZC,QAAQ;MACRC,YAAY;MACZC,SAAS;MACTC,eAAe;MACfC,KAAK;MACLC,qBAAqB;MACrBC,QAAQ;MACR,GAAGC;IACL,CAAC,GAAG,IAAI,CAAC7D,KAAK;IAEd,oBACE,IAAAf,WAAA,CAAA6E,GAAA,EAACtE,mBAAmB;MAClBS,GAAG,EAAE,IAAI,CAACA,GAAI;MACdyD,KAAK,EAAEK,YAAa;MACpB9C,gBAAgB,EAAE,IAAI,CAACN,KAAK,CAACM,gBAAiB;MAC9CuB,KAAK,EAAEA,KAAM;MACbc,QAAQ,EAAEA,QAAS;MACnBU,UAAU,EAAE,IAAAC,yBAAY,EAACrB,eAAe,CAAE;MAC1CW,YAAY,EAAEA,YAAa;MAC3BxC,aAAa,EAAE,IAAI,CAACJ,KAAK,CAACI,aAAc;MACxCC,YAAY,EAAE,IAAI,CAACL,KAAK,CAACK,YAAa;MACtC8B,OAAO,EAAEA,OAAQ;MACjBC,MAAM,EAAEA,MAAO;MACfK,WAAW,EAAEA,WAAY;MACzBH,UAAU,EAAEA,UAAW;MACvBE,YAAY,EAAEA,YAAa;MAC3BH,oBAAoB,EAAEA,oBAAqB;MAC3CE,YAAY,EAAEA,YAAa;MAC3BL,WAAW,EAAEA,WAAY;MACzBW,SAAS,EAAEA,SAAU;MACrBrD,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBG,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BD,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BE,YAAY,EAAE,IAAI,CAACA,YAAa;MAChCG,qBAAqB,EAAE,IAAI,CAACA,qBAAsB;MAAAkD,QAAA,eAElD,IAAA3E,WAAA,CAAAiF,IAAA,EAACrF,YAAA,CAAAsF,IAAI;QACHC,WAAW,EAAE,KAAM;QACnBV,KAAK,EAAE,CACL;UACEW,QAAQ,EAAEjF,qBAAQ,CAACC,MAAM,CAAC;YAAEC,GAAG,EAAEuB,SAAS;YAAEyD,OAAO,EAAE;UAAS,CAAC,CAAC;UAEhE;UACA;UACAlC,KAAK,EAAE,IAAI,CAACzB,KAAK,CAACC,cAAc;UAChCyB,MAAM,EAAE,IAAI,CAAC1B,KAAK,CAACG;QACrB,CAAC,EACD4C,KAAK,CACL;QAAA,GACEG,IAAI;QAAAD,QAAA,gBAER,IAAA3E,WAAA,CAAA6E,GAAA,EAACjF,YAAA,CAAAsF,IAAI;UAACC,WAAW,EAAE,KAAM;UAACG,QAAQ,EAAE,IAAI,CAAC/D,eAAgB;UAACkD,KAAK,EAAEC,qBAAsB;UAAAC,QAAA,EACpFA;QAAQ,CACL,CAAC,eACP,IAAA3E,WAAA,CAAA6E,GAAA,EAACjF,YAAA,CAAAsF,IAAI;UAACC,WAAW,EAAE,KAAM;UAACG,QAAQ,EAAE,IAAI,CAAC9D,cAAe;UAAAmD,QAAA,eACtD,IAAA3E,WAAA,CAAA6E,GAAA,EAAC9E,gBAAA,CAAAwF,eAAe;YAACC,SAAS,EAAEhB;UAAgB,CAAE;QAAC,CAC3C,CAAC,EACNrE,qBAAQ,CAACsF,EAAE,KAAK,SAAS,iBAAI,IAAAzF,WAAA,CAAA6E,GAAA,EAAC/E,iBAAA,CAAA4F,gBAAgB;UAACC,OAAO,EAAE9B,OAAQ;UAAA,GAAKO;QAAY,CAAG,CAAC;MAAA,CAClF;IAAC,CACY,CAAC;EAE1B;AACF;AAACwB,OAAA,CAAAlF,SAAA,GAAAA,SAAA;AAED,MAAMoE,YAAuB,GAAG;EAC9Be,QAAQ,EAAE,UAAU;EACpB1C,KAAK,EAAE,MAAM;EACb2C,IAAI,EAAE,CAAC,IAAI;EACXC,MAAM,EAAE,CAAC;AACX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_TrueSheetModule","_TrueSheetGrabber","_TrueSheetFooter","_jsxRuntime","NATIVE_COMPONENT_NAME","LINKING_ERROR","Platform","select","ios","default","TrueSheetNativeView","requireNativeComponent","Error","TrueSheet","PureComponent","displayName","handles","constructor","props","ref","createRef","onMount","bind","onDismiss","onPresent","onSizeChange","onDragBegin","onDragChange","onDragEnd","onContentLayout","onFooterLayout","onContainerSizeChange","state","containerWidth","undefined","containerHeight","contentHeight","footerHeight","scrollableHandle","getHandle","name","handle","console","warn","present","index","TrueSheetModule","dismiss","resize","nodeHandle","findNodeHandle","current","updateState","scrollRef","setState","event","nativeEvent","width","height","layout","componentDidMount","sizes","length","componentDidUpdate","render","backgroundColor","dismissible","grabber","dimmed","initialIndexAnimated","edgeToEdge","keyboardMode","initialIndex","dimmedIndex","grabberProps","blurTint","cornerRadius","maxHeight","FooterComponent","style","contentContainerStyle","children","rest","jsx","$nativeSheet","background","processColor","jsxs","View","collapsable","overflow","android","onLayout","TrueSheetFooter","Component","OS","TrueSheetGrabber","visible","exports","position","left","zIndex"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":"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","ignoreList":[]}