@lodev09/react-native-true-sheet 3.9.0-beta.2 → 3.9.0-beta.4

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 (27) hide show
  1. package/android/build.gradle +2 -1
  2. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +5 -0
  3. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContentView.kt +21 -2
  4. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +55 -23
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +97 -38
  6. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetCoordinatorLayout.kt +30 -2
  7. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDetentCalculator.kt +2 -2
  8. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetKeyboardObserver.kt +16 -9
  9. package/android/src/main/java/com/lodev09/truesheet/utils/ViewUtils.kt +1 -0
  10. package/ios/TrueSheetView.mm +9 -2
  11. package/ios/TrueSheetViewController.mm +26 -14
  12. package/ios/core/RNScreensEventObserver.h +0 -1
  13. package/ios/core/RNScreensEventObserver.mm +43 -7
  14. package/lib/module/TrueSheet.js +17 -7
  15. package/lib/module/TrueSheet.js.map +1 -1
  16. package/lib/module/navigation/screen/useSheetScreenState.js +21 -21
  17. package/lib/module/navigation/screen/useSheetScreenState.js.map +1 -1
  18. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +3 -3
  19. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
  20. package/lib/typescript/src/TrueSheet.d.ts +2 -0
  21. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  22. package/lib/typescript/src/navigation/screen/useSheetScreenState.d.ts.map +1 -1
  23. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
  24. package/package.json +1 -1
  25. package/src/TrueSheet.tsx +22 -7
  26. package/src/navigation/screen/useSheetScreenState.ts +27 -20
  27. package/src/reanimated/ReanimatedTrueSheetProvider.tsx +5 -6
@@ -96,10 +96,11 @@ repositories {
96
96
  }
97
97
 
98
98
  def kotlin_version = getExtOrDefault("kotlinVersion")
99
+ def material_version = getExtOrDefault("materialVersion") ?: "1.12.0"
99
100
 
100
101
  dependencies {
101
102
  implementation "com.facebook.react:react-android"
102
103
  implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
103
- implementation "com.google.android.material:material:1.12.0"
104
+ implementation "com.google.android.material:material:$material_version"
104
105
  }
105
106
 
@@ -10,6 +10,7 @@ import com.facebook.react.views.view.ReactViewGroup
10
10
  interface TrueSheetContainerViewDelegate {
11
11
  val eventDispatcher: EventDispatcher?
12
12
  fun containerViewContentDidChangeSize(width: Int, height: Int)
13
+ fun containerViewContentDidScroll()
13
14
  fun containerViewHeaderDidChangeSize(width: Int, height: Int)
14
15
  fun containerViewFooterDidChangeSize(width: Int, height: Int)
15
16
  }
@@ -119,6 +120,10 @@ class TrueSheetContainerView(reactContext: ThemedReactContext) :
119
120
  delegate?.containerViewContentDidChangeSize(width, height)
120
121
  }
121
122
 
123
+ override fun contentViewDidScroll() {
124
+ delegate?.containerViewContentDidScroll()
125
+ }
126
+
122
127
  override fun headerViewDidChangeSize(width: Int, height: Int) {
123
128
  headerHeight = height
124
129
  delegate?.containerViewHeaderDidChangeSize(width, height)
@@ -10,12 +10,14 @@ import com.facebook.react.uimanager.ThemedReactContext
10
10
  import com.facebook.react.views.view.ReactViewGroup
11
11
  import com.lodev09.truesheet.core.TrueSheetKeyboardObserver
12
12
  import com.lodev09.truesheet.core.TrueSheetKeyboardObserverDelegate
13
+ import com.lodev09.truesheet.utils.isDescendantOf
13
14
 
14
15
  /**
15
16
  * Delegate interface for content view size changes
16
17
  */
17
18
  interface TrueSheetContentViewDelegate {
18
19
  fun contentViewDidChangeSize(width: Int, height: Int)
20
+ fun contentViewDidScroll()
19
21
  }
20
22
 
21
23
  /**
@@ -30,6 +32,7 @@ class TrueSheetContentView(private val reactContext: ThemedReactContext) : React
30
32
  private var lastHeight = 0
31
33
 
32
34
  private var pinnedScrollView: ScrollView? = null
35
+ private var cachedScrollView: ScrollView? = null
33
36
  private var originalScrollViewPaddingBottom: Int = 0
34
37
  private var bottomInset: Int = 0
35
38
 
@@ -66,7 +69,8 @@ class TrueSheetContentView(private val reactContext: ThemedReactContext) : React
66
69
  val scrollView = findScrollView(this)
67
70
 
68
71
  if (scrollView != pinnedScrollView) {
69
- // Restore previous scroll view's padding
72
+ // Clean up previous scroll view
73
+ pinnedScrollView?.setOnScrollChangeListener(null as View.OnScrollChangeListener?)
70
74
  pinnedScrollView?.setPadding(
71
75
  pinnedScrollView!!.paddingLeft,
72
76
  pinnedScrollView!!.paddingTop,
@@ -76,6 +80,12 @@ class TrueSheetContentView(private val reactContext: ThemedReactContext) : React
76
80
 
77
81
  pinnedScrollView = scrollView
78
82
  originalScrollViewPaddingBottom = scrollView?.paddingBottom ?: 0
83
+
84
+ scrollView?.setOnScrollChangeListener { _, _, scrollY, _, oldScrollY ->
85
+ if (scrollY != oldScrollY) {
86
+ delegate?.contentViewDidScroll()
87
+ }
88
+ }
79
89
  }
80
90
 
81
91
  scrollView?.let {
@@ -90,6 +100,7 @@ class TrueSheetContentView(private val reactContext: ThemedReactContext) : React
90
100
  }
91
101
 
92
102
  fun clearScrollable() {
103
+ pinnedScrollView?.setOnScrollChangeListener(null as View.OnScrollChangeListener?)
93
104
  pinnedScrollView?.setPadding(
94
105
  pinnedScrollView!!.paddingLeft,
95
106
  pinnedScrollView!!.paddingTop,
@@ -97,11 +108,19 @@ class TrueSheetContentView(private val reactContext: ThemedReactContext) : React
97
108
  originalScrollViewPaddingBottom
98
109
  )
99
110
  pinnedScrollView = null
111
+ cachedScrollView = null
100
112
  originalScrollViewPaddingBottom = 0
101
113
  bottomInset = 0
102
114
  }
103
115
 
104
- fun findScrollView(): ScrollView? = findScrollView(this)
116
+ fun findScrollView(): ScrollView? {
117
+ // Return cached if still valid (attached and descendant of this view)
118
+ cachedScrollView?.let {
119
+ if (it.isAttachedToWindow && it.isDescendantOf(this)) return it
120
+ cachedScrollView = null
121
+ }
122
+ return findScrollView(this as View).also { cachedScrollView = it }
123
+ }
105
124
 
106
125
  private fun findScrollView(view: View): ScrollView? {
107
126
  if (view is ScrollView) {
@@ -343,32 +343,49 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
343
343
 
344
344
  @UiThread
345
345
  fun present(detentIndex: Int, animated: Boolean = true, promiseCallback: () -> Unit) {
346
- if (!viewController.isPresented) {
347
- // Dismiss keyboard if focused view is within a sheet or if target detent will be dimmed
348
- val parentSheet = TrueSheetStackManager.getTopmostSheet()
349
- val isFocusedViewWithinSheet = parentSheet?.viewController?.isFocusedViewWithinSheet() == true
350
- val shouldDismissKeyboard = isFocusedViewWithinSheet || viewController.isDimmedAtDetentIndex(detentIndex)
351
- if (KeyboardUtils.isKeyboardVisible(reactContext) && shouldDismissKeyboard) {
352
- viewController.saveFocusedView()
353
- KeyboardUtils.dismiss(this) {
354
- post { present(detentIndex, animated, promiseCallback) }
355
- }
356
- return
357
- }
346
+ if (viewController.isPresented) {
347
+ RNLog.w(reactContext, "TrueSheet: sheet is already presented. Use resize() to change detent.")
348
+ promiseCallback()
349
+ return
350
+ }
358
351
 
359
- // Attach coordinator to the root container
360
- rootContainerView = findRootContainerView()
361
- viewController.coordinatorLayout?.let { rootContainerView?.addView(it) }
352
+ if (viewController.coordinatorLayout == null || viewController.sheetView == null) {
353
+ RNLog.w(reactContext, "TrueSheet: sheet is not ready. Ensure it is mounted before presenting.")
354
+ promiseCallback()
355
+ return
356
+ }
362
357
 
363
- // Register with observer to track sheet stack hierarchy
364
- viewController.parentSheetView = TrueSheetStackManager.registerSheet(this)
358
+ // Dismiss keyboard if focused view is within a sheet or if target detent will be dimmed
359
+ val parentSheet = TrueSheetStackManager.getTopmostSheet()
360
+ val isFocusedViewWithinSheet = parentSheet?.viewController?.isFocusedViewWithinSheet() == true
361
+ val shouldDismissKeyboard = isFocusedViewWithinSheet || viewController.isDimmedAtDetentIndex(detentIndex)
362
+ if (KeyboardUtils.isKeyboardVisible(reactContext) && shouldDismissKeyboard) {
363
+ viewController.saveFocusedView()
364
+ KeyboardUtils.dismiss(this) {
365
+ post { present(detentIndex, animated, promiseCallback) }
366
+ }
367
+ return
365
368
  }
369
+
370
+ // Attach coordinator to the root container
371
+ rootContainerView = findRootContainerView()
372
+ viewController.coordinatorLayout?.let { rootContainerView?.addView(it) }
373
+
374
+ // Register with observer to track sheet stack hierarchy
375
+ viewController.parentSheetView = TrueSheetStackManager.registerSheet(this)
376
+
366
377
  viewController.presentPromise = promiseCallback
367
378
  viewController.present(detentIndex, animated)
368
379
  }
369
380
 
370
381
  @UiThread
371
382
  fun dismiss(animated: Boolean = true, promiseCallback: () -> Unit) {
383
+ if (viewController.isBeingDismissed || !viewController.isPresented) {
384
+ RNLog.w(reactContext, "TrueSheet: sheet is already dismissed. No need to dismiss it again.")
385
+ promiseCallback()
386
+ return
387
+ }
388
+
372
389
  // Dismiss all sheets above first
373
390
  dismissStack(animated) {}
374
391
 
@@ -379,20 +396,31 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
379
396
 
380
397
  @UiThread
381
398
  fun dismissStack(animated: Boolean = true, promiseCallback: () -> Unit) {
399
+ if (viewController.isBeingDismissed || !viewController.isPresented) {
400
+ RNLog.w(reactContext, "TrueSheet: sheet is already dismissed. No need to dismiss it again.")
401
+ promiseCallback()
402
+ return
403
+ }
404
+
382
405
  val sheetsAbove = TrueSheetStackManager.getSheetsAbove(this)
383
- if (sheetsAbove.isNotEmpty()) {
384
- // Create snapshot only for topmost sheet (first in reversed list)
385
- sheetsAbove.firstOrNull()?.viewController?.createSheetSnapshot()
406
+ // Create snapshot only for topmost sheet (first in reversed list)
407
+ sheetsAbove.firstOrNull()?.viewController?.createSheetSnapshot()
386
408
 
387
- for (sheet in sheetsAbove) {
388
- sheet.viewController.dismiss(animated)
389
- }
409
+ for (sheet in sheetsAbove) {
410
+ sheet.viewController.dismiss(animated)
390
411
  }
412
+
391
413
  promiseCallback()
392
414
  }
393
415
 
394
416
  @UiThread
395
417
  fun resize(detentIndex: Int, promiseCallback: () -> Unit) {
418
+ if (!viewController.isPresented) {
419
+ RNLog.w(reactContext, "TrueSheet: Cannot resize. Sheet is not presented.")
420
+ promiseCallback()
421
+ return
422
+ }
423
+
396
424
  viewController.resizePromise = promiseCallback
397
425
  viewController.resize(detentIndex)
398
426
  }
@@ -556,6 +584,10 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
556
584
  updateSheetIfNeeded()
557
585
  }
558
586
 
587
+ override fun containerViewContentDidScroll() {
588
+ viewController.commitKeyboardDetent()
589
+ }
590
+
559
591
  override fun containerViewHeaderDidChangeSize(width: Int, height: Int) {
560
592
  updateSheetIfNeeded()
561
593
  }
@@ -173,6 +173,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
173
173
 
174
174
  // Keyboard State
175
175
  private var detentIndexBeforeKeyboard: Int = -1
176
+ private var isKeyboardDismissProgrammatic = false
176
177
  private var focusedViewBeforeBlur: View? = null
177
178
 
178
179
  // Promises
@@ -212,10 +213,6 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
212
213
  var insetAdjustment: TrueSheetInsetAdjustment = TrueSheetInsetAdjustment.AUTOMATIC
213
214
 
214
215
  var scrollable: Boolean = false
215
- set(value) {
216
- field = value
217
- coordinatorLayout?.scrollable = value
218
- }
219
216
 
220
217
  var scrollableOptions: ReadableMap? = null
221
218
 
@@ -344,7 +341,6 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
344
341
  // Create coordinator layout
345
342
  coordinatorLayout = TrueSheetCoordinatorLayout(reactContext).apply {
346
343
  delegate = this@TrueSheetViewController
347
- scrollable = this@TrueSheetViewController.scrollable
348
344
  }
349
345
 
350
346
  sheetView = TrueSheetBottomSheetView(reactContext).apply {
@@ -383,6 +379,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
383
379
  isPresentAnimating = false
384
380
  lastEmittedPositionPx = -1
385
381
  detentIndexBeforeKeyboard = -1
382
+ isKeyboardDismissProgrammatic = false
386
383
  focusedViewBeforeBlur = null
387
384
  shouldAnimatePresent = true
388
385
  }
@@ -457,7 +454,9 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
457
454
  sheetView?.let { emitChangePositionDelegate(it.top, realtime = false) }
458
455
  }
459
456
 
457
+ override val isScrollable: Boolean get() = scrollable
460
458
  override fun findScrollView(): ScrollView? = containerView?.contentView?.findScrollView()
459
+ override fun findSheetView(): TrueSheetBottomSheetView? = sheetView
461
460
 
462
461
  // =============================================================================
463
462
  // MARK: - TrueSheetDimViewDelegate
@@ -528,6 +527,8 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
528
527
  when (newState) {
529
528
  BottomSheetBehavior.STATE_DRAGGING -> handleDragBegin(sheetView)
530
529
 
530
+ BottomSheetBehavior.STATE_SETTLING -> handleSettling(sheetView)
531
+
531
532
  BottomSheetBehavior.STATE_EXPANDED,
532
533
  BottomSheetBehavior.STATE_COLLAPSED,
533
534
  BottomSheetBehavior.STATE_HALF_EXPANDED -> handleStateSettled(sheetView, newState)
@@ -581,7 +582,9 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
581
582
  val detent = detentCalculator.getDetentValueForIndex(detentInfo.index)
582
583
  delegate?.viewControllerDidDragEnd(detentInfo.index, detentInfo.position, detent)
583
584
 
584
- if (detentInfo.index != currentDetentIndex) {
585
+ // Skip detent change if keyboard inset is still active — detent mapping is unreliable.
586
+ // keyboardWillHide will recalculate detents and settle at the correct index.
587
+ if (detentInfo.index != currentDetentIndex && keyboardInset == 0) {
585
588
  currentDetentIndex = detentInfo.index
586
589
  setupDimmedBackground()
587
590
  delegate?.viewControllerDidChangeDetent(detentInfo.index, detentInfo.position, detent)
@@ -600,6 +603,10 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
600
603
  }
601
604
  }
602
605
  }
606
+
607
+ if (!isKeyboardTransitioning) {
608
+ updateDimAmount(animated = true)
609
+ }
603
610
  }
604
611
 
605
612
  // =============================================================================
@@ -654,22 +661,9 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
654
661
  // =============================================================================
655
662
 
656
663
  fun present(detentIndex: Int, animated: Boolean = true) {
657
- val coordinator = this.coordinatorLayout ?: run {
658
- RNLog.w(reactContext, "TrueSheet: No coordinator layout available. Ensure the sheet is mounted before presenting.")
659
- return
660
- }
661
-
662
- val sheet = this.sheetView ?: run {
663
- RNLog.w(reactContext, "TrueSheet: No sheet view available.")
664
- return
665
- }
666
-
667
- if (isPresented) {
668
- RNLog.w(reactContext, "TrueSheet: sheet is already presented. Use resize() to change detent.")
669
- presentPromise?.invoke()
670
- presentPromise = null
671
- return
672
- }
664
+ val coordinator = this.coordinatorLayout ?: return
665
+ val sheet = this.sheetView ?: return
666
+ if (isPresented) return
673
667
 
674
668
  shouldAnimatePresent = animated
675
669
  currentDetentIndex = detentIndex
@@ -706,11 +700,11 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
706
700
  }
707
701
 
708
702
  fun resize(detentIndex: Int) {
709
- if (!isPresented) {
710
- RNLog.w(reactContext, "TrueSheet: Cannot resize. Sheet is not presented.")
711
- resizePromise?.invoke()
712
- resizePromise = null
713
- return
703
+ if (!isPresented) return
704
+
705
+ // Commit the new index so keyboardWillHide restores to it instead of the stale one
706
+ if (detentIndexBeforeKeyboard >= 0) {
707
+ detentIndexBeforeKeyboard = detentIndex
714
708
  }
715
709
 
716
710
  setupDimmedBackground()
@@ -756,6 +750,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
756
750
  }
757
751
 
758
752
  private fun dismissKeyboard() {
753
+ isKeyboardDismissProgrammatic = true
759
754
  KeyboardUtils.dismiss(reactContext)
760
755
  }
761
756
 
@@ -807,7 +802,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
807
802
  // MARK: - Sheet Configuration
808
803
  // =============================================================================
809
804
 
810
- fun setupSheetDetents() {
805
+ fun setupSheetDetents(applyState: Boolean = true) {
811
806
  val behavior = this.behavior ?: run {
812
807
  RNLog.e(reactContext, "TrueSheet: behavior is null in setupSheetDetents")
813
808
  return
@@ -852,7 +847,7 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
852
847
 
853
848
  updateStateDimensions(expandedOffset)
854
849
 
855
- if (isPresented) {
850
+ if (isPresented && applyState) {
856
851
  setStateForDetentIndex(currentDetentIndex)
857
852
  }
858
853
 
@@ -930,8 +925,13 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
930
925
  if (!dimmed) return
931
926
  if (contentHeight == 0) return
932
927
 
933
- val keyboardOffset = if (isBeingDismissed) 0 else currentKeyboardInset
934
- val top = (sheetTop ?: sheetView?.top ?: return) + keyboardOffset
928
+ // While keyboard is active or transitioning, use the target detent position for dim
929
+ val top = if (keyboardInset > 0 || isKeyboardTransitioning) {
930
+ detentCalculator.getSheetTopForDetentIndex(currentDetentIndex)
931
+ } else {
932
+ val keyboardOffset = if (isBeingDismissed) 0 else currentKeyboardInset
933
+ (sheetTop ?: sheetView?.top ?: return) + keyboardOffset
934
+ }
935
935
 
936
936
  if (animated) {
937
937
  val targetAlpha = dimView?.calculateAlpha(
@@ -1010,28 +1010,47 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
1010
1010
  if (!shouldHandleKeyboard()) return
1011
1011
  detentIndexBeforeKeyboard = currentDetentIndex
1012
1012
  setupSheetDetents()
1013
- setStateForDetentIndex(detents.size - 1)
1013
+ currentDetentIndex = detents.size - 1
1014
+ setStateForDetentIndex(currentDetentIndex)
1015
+ updateDimAmount(animated = true)
1014
1016
  }
1015
1017
 
1016
1018
  override fun keyboardWillHide() {
1017
1019
  if (!shouldHandleKeyboard(checkFocus = false)) return
1020
+ val restoring = !isBeingDismissed && detentIndexBeforeKeyboard >= 0
1018
1021
 
1019
- setupSheetDetents()
1020
- if (!isBeingDismissed && detentIndexBeforeKeyboard >= 0) {
1021
- setStateForDetentIndex(detentIndexBeforeKeyboard)
1022
+ // Skip reconfigure during interactive keyboard dismiss (e.g. keyboardDismissMode="on-drag")
1023
+ // to prevent the sheet from jumping. keyboardDidHide will reconfigure after.
1024
+ if (restoring || isKeyboardDismissProgrammatic) {
1025
+ setupSheetDetents()
1026
+ if (restoring) {
1027
+ currentDetentIndex = detentIndexBeforeKeyboard
1028
+ setStateForDetentIndex(currentDetentIndex)
1029
+ }
1022
1030
  }
1031
+
1032
+ updateDimAmount(
1033
+ sheetTop = detentCalculator.getSheetTopForDetentIndex(currentDetentIndex),
1034
+ animated = true
1035
+ )
1023
1036
  }
1024
1037
 
1025
1038
  override fun keyboardDidHide() {
1026
1039
  if (!shouldHandleKeyboard(checkFocus = false)) return
1027
1040
  detentIndexBeforeKeyboard = -1
1041
+ isKeyboardDismissProgrammatic = false
1042
+ setupSheetDetents(applyState = false)
1028
1043
  positionFooter()
1044
+ updateDimAmount(
1045
+ sheetTop = detentCalculator.getSheetTopForDetentIndex(currentDetentIndex),
1046
+ animated = true
1047
+ )
1029
1048
  }
1030
1049
 
1031
1050
  override fun keyboardDidChangeHeight(height: Int) {
1032
- // Skip focus check if already handling keyboard (focus may be lost during hide)
1033
- val isHandlingKeyboard = detentIndexBeforeKeyboard >= 0
1034
- if (!shouldHandleKeyboard(checkFocus = !isHandlingKeyboard)) return
1051
+ // Skip focus check during active keyboard transitions (focus may be lost during hide)
1052
+ val skipFocusCheck = detentIndexBeforeKeyboard >= 0 || isKeyboardTransitioning
1053
+ if (!shouldHandleKeyboard(checkFocus = !skipFocusCheck)) return
1035
1054
  positionFooter()
1036
1055
  }
1037
1056
 
@@ -1061,15 +1080,55 @@ class TrueSheetViewController(private val reactContext: ThemedReactContext) :
1061
1080
  private fun getPositionDpForView(sheetView: View): Float =
1062
1081
  detentCalculator.getPositionDp(detentCalculator.getVisibleSheetHeight(sheetView.top))
1063
1082
 
1083
+ fun commitKeyboardDetent() {
1084
+ detentIndexBeforeKeyboard = -1
1085
+ }
1086
+
1064
1087
  private fun handleDragBegin(sheetView: View) {
1088
+ detentIndexBeforeKeyboard = -1
1089
+
1065
1090
  val position = getPositionDpForView(sheetView)
1066
1091
  val detent = detentCalculator.getDetentValueForIndex(currentDetentIndex)
1067
1092
  delegate?.viewControllerDidDragBegin(currentDetentIndex, position, detent)
1068
1093
  interactionState = InteractionState.Dragging(startTop = sheetView.top)
1069
1094
  }
1070
1095
 
1096
+ private fun handleSettling(sheetView: View) {
1097
+ if (interactionState !is InteractionState.Dragging) return
1098
+ if (keyboardInset <= 0) return
1099
+
1100
+ // After drag release, check if the sheet was dragged past the midpoint between the
1101
+ // keyboard-expanded position and a non-keyboard detent position. If so, dismiss
1102
+ // keyboard and commit to that detent.
1103
+ val maxAvailableHeight = realScreenHeight - topInset
1104
+ val keyboardHeight = minOf(detentCalculator.getDetentHeight(detents.last()), maxAvailableHeight)
1105
+ val keyboardTop = realScreenHeight - keyboardHeight
1106
+
1107
+ for (i in detents.indices) {
1108
+ val nonKeyboardHeight = minOf(detentCalculator.getDetentHeight(detents[i], includeKeyboard = false), maxAvailableHeight)
1109
+ val nonKeyboardTop = realScreenHeight - nonKeyboardHeight
1110
+ val midpoint = keyboardTop + (nonKeyboardTop - keyboardTop) / 2
1111
+
1112
+ if (sheetView.top >= midpoint) {
1113
+ // Target position matches the keyboard-expanded position — keep keyboard open
1114
+ if (nonKeyboardTop == keyboardTop) break
1115
+
1116
+ detentIndexBeforeKeyboard = -1
1117
+ currentDetentIndex = i
1118
+ dismissKeyboard()
1119
+ setupDimmedBackground()
1120
+
1121
+ val position = getPositionDpForView(sheetView)
1122
+ val detent = detentCalculator.getDetentValueForIndex(i)
1123
+ delegate?.viewControllerDidChangeDetent(i, position, detent)
1124
+ break
1125
+ }
1126
+ }
1127
+ }
1128
+
1071
1129
  private fun handleDragChange(sheetView: View) {
1072
1130
  if (interactionState !is InteractionState.Dragging) return
1131
+
1073
1132
  val position = getPositionDpForView(sheetView)
1074
1133
  val detent = detentCalculator.getDetentValueForIndex(currentDetentIndex)
1075
1134
  delegate?.viewControllerDidDragChange(currentDetentIndex, position, detent)
@@ -9,11 +9,14 @@ import android.widget.ScrollView
9
9
  import androidx.coordinatorlayout.widget.CoordinatorLayout
10
10
  import com.facebook.react.uimanager.PointerEvents
11
11
  import com.facebook.react.uimanager.ReactPointerEventsView
12
+ import com.lodev09.truesheet.utils.isDescendantOf
12
13
 
13
14
  interface TrueSheetCoordinatorLayoutDelegate {
15
+ val isScrollable: Boolean
14
16
  fun coordinatorLayoutDidLayout(changed: Boolean)
15
17
  fun coordinatorLayoutDidChangeConfiguration()
16
18
  fun findScrollView(): ScrollView?
19
+ fun findSheetView(): TrueSheetBottomSheetView?
17
20
  }
18
21
 
19
22
  /**
@@ -27,7 +30,6 @@ class TrueSheetCoordinatorLayout(context: Context) :
27
30
  ReactPointerEventsView {
28
31
 
29
32
  var delegate: TrueSheetCoordinatorLayoutDelegate? = null
30
- var scrollable: Boolean = false
31
33
 
32
34
  private val touchSlop: Int = ViewConfiguration.get(context).scaledTouchSlop
33
35
  private var dragging = false
@@ -63,6 +65,29 @@ class TrueSheetCoordinatorLayout(context: Context) :
63
65
  override val pointerEvents: PointerEvents
64
66
  get() = PointerEvents.BOX_NONE
65
67
 
68
+ /**
69
+ * Clears stale `nestedScrollingChildRef` from BottomSheetBehavior.
70
+ *
71
+ * `BottomSheetBehavior.onLayoutChild` calls `findScrollingChild()` which traverses the
72
+ * entire sheet subtree. When a child sheet with a ScrollView is dismissed, the ScrollView
73
+ * returns to this sheet's view hierarchy. `onLayoutChild` may then capture a ref to that
74
+ * ScrollView even though it doesn't belong to this sheet, blocking drag interactions.
75
+ */
76
+ private fun clearStaleNestedScrollingChildRef() {
77
+ val sheet = delegate?.findSheetView() ?: return
78
+ val behavior = sheet.behavior ?: return
79
+ try {
80
+ val field = behavior.javaClass.getDeclaredField("nestedScrollingChildRef")
81
+ field.isAccessible = true
82
+ @Suppress("UNCHECKED_CAST")
83
+ val ref = field.get(behavior) as? java.lang.ref.WeakReference<android.view.View> ?: return
84
+ val view = ref.get() ?: return
85
+ if (!view.isDescendantOf(sheet)) {
86
+ ref.clear()
87
+ }
88
+ } catch (_: Exception) {}
89
+ }
90
+
66
91
  /**
67
92
  * Intercepts touch events for ScrollViews that can't scroll (content < viewport),
68
93
  * allowing the sheet to be dragged in these cases.
@@ -71,7 +96,10 @@ class TrueSheetCoordinatorLayout(context: Context) :
71
96
  * See: https://github.com/facebook/react-native/pull/44099
72
97
  */
73
98
  override fun onInterceptTouchEvent(ev: MotionEvent): Boolean {
74
- if (!scrollable) {
99
+ if (delegate?.isScrollable != true) {
100
+ if (ev.actionMasked == MotionEvent.ACTION_DOWN) {
101
+ clearStaleNestedScrollingChildRef()
102
+ }
75
103
  return super.onInterceptTouchEvent(ev)
76
104
  }
77
105
 
@@ -39,7 +39,7 @@ class TrueSheetDetentCalculator(private val reactContext: ThemedReactContext) {
39
39
  * Calculate the height in pixels for a given detent value.
40
40
  * @param detent The detent value: -1.0 for content-fit, or 0.0-1.0 for screen fraction
41
41
  */
42
- fun getDetentHeight(detent: Double): Int {
42
+ fun getDetentHeight(detent: Double, includeKeyboard: Boolean = true): Int {
43
43
  val baseHeight = if (detent == -1.0) {
44
44
  contentHeight + headerHeight + contentBottomInset
45
45
  } else {
@@ -49,7 +49,7 @@ class TrueSheetDetentCalculator(private val reactContext: ThemedReactContext) {
49
49
  (detent * screenHeight).toInt() + contentBottomInset
50
50
  }
51
51
 
52
- val height = baseHeight + keyboardInset
52
+ val height = if (includeKeyboard) baseHeight + keyboardInset else baseHeight
53
53
  val maxAllowedHeight = screenHeight + contentBottomInset
54
54
  return maxContentHeight?.let { minOf(height, it, maxAllowedHeight) } ?: minOf(height, maxAllowedHeight)
55
55
  }
@@ -64,16 +64,23 @@ class TrueSheetKeyboardObserver(private val targetView: View, private val reactC
64
64
  }
65
65
 
66
66
  fun stop() {
67
- globalLayoutListener?.let { listener ->
68
- activityRootView?.viewTreeObserver?.removeOnGlobalLayoutListener(listener)
69
- globalLayoutListener = null
70
- }
71
- focusChangeListener?.let { listener ->
72
- activityRootView?.viewTreeObserver?.removeOnGlobalFocusChangeListener(listener)
73
- focusChangeListener = null
67
+ try {
68
+ globalLayoutListener?.let { listener ->
69
+ activityRootView?.viewTreeObserver?.let { observer ->
70
+ if (observer.isAlive) observer.removeOnGlobalLayoutListener(listener)
71
+ }
72
+ globalLayoutListener = null
73
+ }
74
+ focusChangeListener?.let { listener ->
75
+ activityRootView?.viewTreeObserver?.let { observer ->
76
+ if (observer.isAlive) observer.removeOnGlobalFocusChangeListener(listener)
77
+ }
78
+ focusChangeListener = null
79
+ }
80
+ } finally {
81
+ activityRootView = null
82
+ ViewCompat.setWindowInsetsAnimationCallback(targetView, null)
74
83
  }
75
- activityRootView = null
76
- ViewCompat.setWindowInsetsAnimationCallback(targetView, null)
77
84
  }
78
85
 
79
86
  private fun updateHeight(from: Int, to: Int, fraction: Float) {
@@ -3,6 +3,7 @@ package com.lodev09.truesheet.utils
3
3
  import android.view.View
4
4
 
5
5
  fun View.isDescendantOf(ancestor: View): Boolean {
6
+ if (!isAttachedToWindow) return false
6
7
  var current: View? = this
7
8
  while (current != null) {
8
9
  if (current === ancestor) return true
@@ -281,7 +281,7 @@ using namespace facebook::react;
281
281
  if (!_state)
282
282
  return;
283
283
 
284
- if (CGSizeEqualToSize(size, _lastStateSize))
284
+ if (fabs(size.width - _lastStateSize.width) < 0.5 && fabs(size.height - _lastStateSize.height) < 0.5)
285
285
  return;
286
286
 
287
287
  _lastStateSize = size;
@@ -291,6 +291,8 @@ using namespace facebook::react;
291
291
  stateData.containerHeight = static_cast<float>(size.height);
292
292
 
293
293
  #if REACT_NATIVE_VERSION_MINOR >= 82
294
+ // TODO: RN 0.82+ processes state updates in the same layout pass (synchronous).
295
+ // Once stable, we can drop native layout constraints in favor of synchronous Yoga layout.
294
296
  _state->updateState(std::move(stateData), facebook::react::EventQueue::UpdateMode::unstable_Immediate);
295
297
  #else
296
298
  _state->updateState(std::move(stateData));
@@ -669,7 +671,12 @@ using namespace facebook::react;
669
671
  - (void)presenterScreenWillAppear {
670
672
  if (_dismissedByNavigation && !_controller.isPresented && !_controller.isBeingPresented) {
671
673
  _dismissedByNavigation = NO;
672
- _pendingNavigationRepresent = YES;
674
+
675
+ if (self.window) {
676
+ [self presentAtIndex:_controller.activeDetentIndex animated:YES completion:nil];
677
+ } else {
678
+ _pendingNavigationRepresent = YES;
679
+ }
673
680
  }
674
681
  }
675
682
 
@@ -82,6 +82,8 @@ using namespace facebook::react;
82
82
  }
83
83
 
84
84
  - (void)dealloc {
85
+ [_transitioningTimer invalidate];
86
+ _transitioningTimer = nil;
85
87
  [[NSNotificationCenter defaultCenter] removeObserver:self];
86
88
  }
87
89
 
@@ -413,22 +415,32 @@ using namespace facebook::react;
413
415
  _transitionFakeView.frame = self.isBeingDismissed ? presentedFrame : dismissedFrame;
414
416
  [self storeResolvedPositionForIndex:self.currentDetentIndex];
415
417
 
416
- auto animation = ^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
417
- [[context containerView] addSubview:self->_transitionFakeView];
418
- self->_transitionFakeView.frame = self.isBeingDismissed ? dismissedFrame : presentedFrame;
419
-
420
- self->_transitioningTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(handleTransitionTracker)];
421
- [self->_transitioningTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
422
- };
418
+ __weak __typeof(self) weakSelf = self;
423
419
 
424
420
  [self.transitionCoordinator
425
- animateAlongsideTransition:animation
426
- completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
427
- [self->_transitioningTimer setPaused:YES];
428
- [self->_transitioningTimer invalidate];
429
- [self->_transitionFakeView removeFromSuperview];
430
- self->_isTransitioning = NO;
431
- }];
421
+ animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
422
+ __strong __typeof(weakSelf) strongSelf = weakSelf;
423
+ if (!strongSelf)
424
+ return;
425
+
426
+ [[context containerView] addSubview:strongSelf->_transitionFakeView];
427
+ strongSelf->_transitionFakeView.frame = strongSelf.isBeingDismissed ? dismissedFrame : presentedFrame;
428
+
429
+ strongSelf->_transitioningTimer = [CADisplayLink displayLinkWithTarget:strongSelf
430
+ selector:@selector(handleTransitionTracker)];
431
+ [strongSelf->_transitioningTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
432
+ }
433
+ completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
434
+ __strong __typeof(weakSelf) strongSelf = weakSelf;
435
+ if (!strongSelf)
436
+ return;
437
+
438
+ [strongSelf->_transitioningTimer setPaused:YES];
439
+ [strongSelf->_transitioningTimer invalidate];
440
+ strongSelf->_transitioningTimer = nil;
441
+ [strongSelf->_transitionFakeView removeFromSuperview];
442
+ strongSelf->_isTransitioning = NO;
443
+ }];
432
444
  }
433
445
 
434
446
  - (void)handleTransitionTracker {
@@ -34,7 +34,6 @@ NS_ASSUME_NONNULL_BEGIN
34
34
  - (void)stopObserving;
35
35
 
36
36
  - (void)capturePresenterScreenFromView:(UIView *)view;
37
- - (BOOL)shouldDismissForScreenTag:(NSInteger)screenTag;
38
37
 
39
38
  @end
40
39
 
@@ -25,6 +25,8 @@ using namespace facebook::react;
25
25
  __weak UIViewController *_parentScreenController;
26
26
  __weak UIWindow *_window;
27
27
  BOOL _dismissedByNavigation;
28
+ BOOL _pendingInteractiveDismiss;
29
+ BOOL _pendingInteractiveAppear;
28
30
  }
29
31
 
30
32
  - (instancetype)init {
@@ -60,19 +62,44 @@ using namespace facebook::react;
60
62
 
61
63
  if (auto family = event.shadowNodeFamily.lock()) {
62
64
  Tag screenTag = family->getTag();
65
+ if (![strongSelf->_screenTags containsObject:@(screenTag)]) {
66
+ return false;
67
+ }
68
+
69
+ BOOL interactive = [strongSelf isInteractiveTransition];
63
70
 
64
71
  if (event.type == "topWillDisappear") {
65
- if ([strongSelf->_screenTags containsObject:@(screenTag)]) {
66
- if ([strongSelf shouldDismissForScreenTag:screenTag]) {
67
- strongSelf->_dismissedByNavigation = YES;
68
- [strongSelf.delegate presenterScreenWillDisappear];
69
- }
72
+ if (interactive) {
73
+ strongSelf->_pendingInteractiveDismiss = YES;
74
+ } else if ([strongSelf shouldDismissForScreenTag:screenTag]) {
75
+ strongSelf->_dismissedByNavigation = YES;
76
+ [strongSelf.delegate presenterScreenWillDisappear];
77
+ }
78
+ } else if (event.type == "topDisappear") {
79
+ if (strongSelf->_pendingInteractiveDismiss) {
80
+ strongSelf->_pendingInteractiveDismiss = NO;
81
+ strongSelf->_dismissedByNavigation = YES;
82
+ [strongSelf.delegate presenterScreenWillDisappear];
70
83
  }
71
84
  } else if (event.type == "topWillAppear") {
72
- if ([strongSelf->_screenTags containsObject:@(screenTag)] && strongSelf->_dismissedByNavigation) {
85
+ if (strongSelf->_dismissedByNavigation) {
86
+ if (interactive) {
87
+ strongSelf->_pendingInteractiveAppear = YES;
88
+ } else {
89
+ strongSelf->_dismissedByNavigation = NO;
90
+ [strongSelf.delegate presenterScreenWillAppear];
91
+ }
92
+ }
93
+ strongSelf->_pendingInteractiveDismiss = NO;
94
+ } else if (event.type == "topAppear") {
95
+ if (strongSelf->_pendingInteractiveAppear) {
96
+ strongSelf->_pendingInteractiveAppear = NO;
73
97
  strongSelf->_dismissedByNavigation = NO;
74
98
  [strongSelf.delegate presenterScreenWillAppear];
75
99
  }
100
+ } else if (event.type == "topGestureCancel") {
101
+ strongSelf->_pendingInteractiveDismiss = NO;
102
+ strongSelf->_pendingInteractiveAppear = NO;
76
103
  }
77
104
  }
78
105
  return false;
@@ -99,8 +126,12 @@ using namespace facebook::react;
99
126
  _parentScreenController = nil;
100
127
  _window = view.window;
101
128
 
129
+ Class screenViewClass = NSClassFromString(@"RNSScreenView");
130
+ if (!screenViewClass)
131
+ return;
132
+
102
133
  for (UIView *current = view.superview; current; current = current.superview) {
103
- if ([NSStringFromClass([current class]) isEqualToString:@"RNSScreenView"]) {
134
+ if ([current isKindOfClass:screenViewClass]) {
104
135
  [_screenTags addObject:@(current.tag)];
105
136
 
106
137
  UIViewController *screenVC = nil;
@@ -121,6 +152,11 @@ using namespace facebook::react;
121
152
  }
122
153
  }
123
154
 
155
+ - (BOOL)isInteractiveTransition {
156
+ UINavigationController *navController = _presenterScreenController.navigationController;
157
+ return navController.transitionCoordinator.isInteractive;
158
+ }
159
+
124
160
  - (BOOL)shouldDismissForScreenTag:(NSInteger)screenTag {
125
161
  // For parent screens (not immediate presenter), check if the presenter screen is being removed
126
162
  // This handles nested stack removal case
@@ -350,20 +350,26 @@ export class TrueSheet extends PureComponent {
350
350
  // Clamp to maximum of 1
351
351
  return Math.min(1, detent);
352
352
  });
353
+
354
+ // Cache grabberOptions to avoid creating a new object every render
355
+ if (grabberOptions !== this.cachedGrabberOptions) {
356
+ this.cachedGrabberOptions = grabberOptions;
357
+ this.resolvedGrabberOptions = {
358
+ ...grabberOptions,
359
+ color: processColor(grabberOptions?.color)
360
+ };
361
+ }
353
362
  return /*#__PURE__*/_jsx(TrueSheetViewNativeComponent, {
354
363
  ...rest,
355
364
  ref: this.nativeRef,
356
- style: [StyleSheet.absoluteFill, styles.sheetView],
365
+ style: styles.sheetView,
357
366
  detents: resolvedDetents,
358
367
  backgroundBlur: backgroundBlur,
359
368
  blurOptions: blurOptions,
360
369
  backgroundColor: backgroundColor,
361
370
  cornerRadius: cornerRadius,
362
371
  grabber: grabber,
363
- grabberOptions: {
364
- ...grabberOptions,
365
- color: processColor(grabberOptions?.color)
366
- },
372
+ grabberOptions: this.resolvedGrabberOptions,
367
373
  dimmed: dimmed,
368
374
  dimmedDetentIndex: dimmedDetentIndex,
369
375
  initialDetentIndex: initialDetentIndex,
@@ -394,12 +400,12 @@ export class TrueSheet extends PureComponent {
394
400
  onDidBlur: this.onDidBlur,
395
401
  onBackPress: this.onBackPress,
396
402
  children: this.state.shouldRenderNativeView && /*#__PURE__*/_jsxs(TrueSheetContainerViewNativeComponent, {
397
- style: scrollable && StyleSheet.absoluteFill,
403
+ style: scrollable ? styles.scrollableContainer : undefined,
398
404
  children: [header && /*#__PURE__*/_jsx(TrueSheetHeaderViewNativeComponent, {
399
405
  style: [styles.header, headerStyle],
400
406
  children: /*#__PURE__*/isValidElement(header) ? header : /*#__PURE__*/createElement(header)
401
407
  }), /*#__PURE__*/_jsx(TrueSheetContentViewNativeComponent, {
402
- style: [style, scrollable && styles.scrollableContent],
408
+ style: scrollable ? [style, styles.scrollableContent] : style,
403
409
  children: children
404
410
  }), footer && /*#__PURE__*/_jsx(TrueSheetFooterViewNativeComponent, {
405
411
  style: [styles.footer, footerStyle],
@@ -411,9 +417,13 @@ export class TrueSheet extends PureComponent {
411
417
  }
412
418
  const styles = StyleSheet.create({
413
419
  sheetView: {
420
+ ...StyleSheet.absoluteFill,
414
421
  zIndex: -9999,
415
422
  pointerEvents: 'box-none'
416
423
  },
424
+ scrollableContainer: {
425
+ ...StyleSheet.absoluteFill
426
+ },
417
427
  scrollableContent: {
418
428
  flex: 1
419
429
  },
@@ -1 +1 @@
1
- {"version":3,"names":["PureComponent","createRef","isValidElement","createElement","TrueSheetViewNativeComponent","TrueSheetContainerViewNativeComponent","TrueSheetContentViewNativeComponent","TrueSheetHeaderViewNativeComponent","TrueSheetFooterViewNativeComponent","TrueSheetModule","Platform","StyleSheet","findNodeHandle","processColor","jsx","_jsx","jsxs","_jsxs","LINKING_ERROR","select","ios","default","Error","TrueSheet","displayName","instances","presentationResolver","isPresenting","constructor","props","nativeRef","validateDetents","shouldRenderImmediately","initialDetentIndex","undefined","state","shouldRenderNativeView","onMount","bind","onWillDismiss","onDidDismiss","onWillPresent","onDidPresent","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur","onBackPress","detents","length","console","warn","forEach","detent","index","detentsLength","Math","min","getInstance","name","instance","handle","nodeHandle","current","present","animated","dismiss","dismissStack","resize","dismissAll","registerInstance","unregisterInstance","event","setState","Promise","resolve","presentByRef","resizeByRef","dismissByRef","dismissStackByRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","backgroundColor","dismissible","draggable","grabber","grabberOptions","dimmed","initialDetentAnimated","dimmedDetentIndex","backgroundBlur","blurOptions","cornerRadius","maxContentHeight","maxContentWidth","anchor","anchorOffset","scrollable","scrollableOptions","pageSizing","children","style","header","headerStyle","footer","footerStyle","insetAdjustment","rest","resolvedDetents","slice","map","ref","absoluteFill","styles","sheetView","color","scrollableContent","create","zIndex","pointerEvents","flex","position","left","right"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["PureComponent","createRef","isValidElement","createElement","TrueSheetViewNativeComponent","TrueSheetContainerViewNativeComponent","TrueSheetContentViewNativeComponent","TrueSheetHeaderViewNativeComponent","TrueSheetFooterViewNativeComponent","TrueSheetModule","Platform","StyleSheet","findNodeHandle","processColor","jsx","_jsx","jsxs","_jsxs","LINKING_ERROR","select","ios","default","Error","TrueSheet","displayName","instances","presentationResolver","isPresenting","constructor","props","nativeRef","validateDetents","shouldRenderImmediately","initialDetentIndex","undefined","state","shouldRenderNativeView","onMount","bind","onWillDismiss","onDidDismiss","onWillPresent","onDidPresent","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur","onBackPress","detents","length","console","warn","forEach","detent","index","detentsLength","Math","min","getInstance","name","instance","handle","nodeHandle","current","present","animated","dismiss","dismissStack","resize","dismissAll","registerInstance","unregisterInstance","event","setState","Promise","resolve","presentByRef","resizeByRef","dismissByRef","dismissStackByRef","componentDidMount","componentDidUpdate","prevProps","componentWillUnmount","render","backgroundColor","dismissible","draggable","grabber","grabberOptions","dimmed","initialDetentAnimated","dimmedDetentIndex","backgroundBlur","blurOptions","cornerRadius","maxContentHeight","maxContentWidth","anchor","anchorOffset","scrollable","scrollableOptions","pageSizing","children","style","header","headerStyle","footer","footerStyle","insetAdjustment","rest","resolvedDetents","slice","map","cachedGrabberOptions","resolvedGrabberOptions","color","ref","styles","sheetView","scrollableContainer","scrollableContent","create","absoluteFill","zIndex","pointerEvents","flex","position","left","right"],"sourceRoot":"../../src","sources":["TrueSheet.tsx"],"mappings":";;AAAA,SACEA,aAAa,EAEbC,SAAS,EAGTC,cAAc,EACdC,aAAa,QACR,OAAO;AAoBd,OAAOC,4BAA4B,MAAM,uCAAuC;AAChF,OAAOC,qCAAqC,MAAM,gDAAgD;AAClG,OAAOC,mCAAmC,MAAM,8CAA8C;AAC9F,OAAOC,kCAAkC,MAAM,6CAA6C;AAC5F,OAAOC,kCAAkC,MAAM,6CAA6C;AAE5F,OAAOC,eAAe,MAAM,kCAA+B;AAE3D,SAASC,QAAQ,EAAEC,UAAU,EAAEC,cAAc,EAAEC,YAAY,QAAQ,cAAc;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAElF,MAAMC,aAAa,GACjB,2FAA2F,GAC3FR,QAAQ,CAACS,MAAM,CAAC;EAAEC,GAAG,EAAE,gCAAgC;EAAEC,OAAO,EAAE;AAAG,CAAC,CAAC,GACvE,sDAAsD,GACtD,+BAA+B,GAC/B,iDAAiD;AAEnD,IAAI,CAACZ,eAAe,EAAE;EACpB,MAAM,IAAIa,KAAK,CAACJ,aAAa,CAAC;AAChC;AAQA,OAAO,MAAMK,SAAS,SAASvB,aAAa,CAAiC;EAC3EwB,WAAW,GAAG,WAAW;EAOzB;AACF;AACA;EACE,OAAwBC,SAAS,GAAkC,CAAC,CAAC;;EAErE;AACF;AACA;EACUC,oBAAoB,GAAwB,IAAI;;EAExD;AACF;AACA;EACUC,YAAY,GAAY,KAAK;EAErCC,WAAWA,CAACC,KAAqB,EAAE;IACjC,KAAK,CAACA,KAAK,CAAC;IAEZ,IAAI,CAACC,SAAS,gBAAG7B,SAAS,CAAY,CAAC;IAEvC,IAAI,CAAC8B,eAAe,CAAC,CAAC;;IAEtB;IACA,MAAMC,uBAAuB,GAC3BH,KAAK,CAACI,kBAAkB,KAAKC,SAAS,IAAIL,KAAK,CAACI,kBAAkB,IAAI,CAAC;IAEzE,IAAI,CAACE,KAAK,GAAG;MACXC,sBAAsB,EAAEJ;IAC1B,CAAC;IAED,IAAI,CAACK,OAAO,GAAG,IAAI,CAACA,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC;IACtC,IAAI,CAACC,aAAa,GAAG,IAAI,CAACA,aAAa,CAACD,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACE,YAAY,GAAG,IAAI,CAACA,YAAY,CAACF,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACG,aAAa,GAAG,IAAI,CAACA,aAAa,CAACH,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACI,YAAY,GAAG,IAAI,CAACA,YAAY,CAACJ,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACK,cAAc,GAAG,IAAI,CAACA,cAAc,CAACL,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,CAACM,WAAW,GAAG,IAAI,CAACA,WAAW,CAACN,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACO,YAAY,GAAG,IAAI,CAACA,YAAY,CAACP,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACQ,SAAS,GAAG,IAAI,CAACA,SAAS,CAACR,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACS,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACT,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACU,WAAW,GAAG,IAAI,CAACA,WAAW,CAACV,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACW,UAAU,GAAG,IAAI,CAACA,UAAU,CAACX,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACY,UAAU,GAAG,IAAI,CAACA,UAAU,CAACZ,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAACa,SAAS,GAAG,IAAI,CAACA,SAAS,CAACb,IAAI,CAAC,IAAI,CAAC;IAC1C,IAAI,CAACc,WAAW,GAAG,IAAI,CAACA,WAAW,CAACd,IAAI,CAAC,IAAI,CAAC;EAChD;EAEQP,eAAeA,CAAA,EAAS;IAC9B,MAAM;MAAEsB,OAAO;MAAEpB;IAAmB,CAAC,GAAG,IAAI,CAACJ,KAAK;;IAElD;IACA,IAAIwB,OAAO,IAAIA,OAAO,CAACC,MAAM,GAAG,CAAC,EAAE;MACjCC,OAAO,CAACC,IAAI,CACV,gCAAgCH,OAAO,CAACC,MAAM,yDAChD,CAAC;IACH;;IAEA;IACA,IAAID,OAAO,EAAE;MACXA,OAAO,CAACI,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;QACjC,IAAID,MAAM,KAAK,MAAM,IAAI,OAAOA,MAAM,KAAK,QAAQ,EAAE;UACnD,IAAIA,MAAM,IAAI,CAAC,IAAIA,MAAM,GAAG,CAAC,EAAE;YAC7BH,OAAO,CAACC,IAAI,CACV,8BAA8BG,KAAK,KAAKD,MAAM,kDAChD,CAAC;UACH;QACF;MACF,CAAC,CAAC;IACJ;;IAEA;IACA,IAAIzB,kBAAkB,KAAKC,SAAS,IAAID,kBAAkB,IAAI,CAAC,EAAE;MAC/D,MAAM2B,aAAa,GAAGC,IAAI,CAACC,GAAG,CAACT,OAAO,EAAEC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;MACzD,IAAIrB,kBAAkB,IAAI2B,aAAa,EAAE;QACvC,MAAM,IAAItC,KAAK,CACb,kCAAkCW,kBAAkB,yCAAyC2B,aAAa,UAC5G,CAAC;MACH;IACF;EACF;EAEA,OAAeG,WAAWA,CAACC,IAAY,EAAE;IACvC,MAAMC,QAAQ,GAAG1C,SAAS,CAACE,SAAS,CAACuC,IAAI,CAAC;IAC1C,IAAI,CAACC,QAAQ,EAAE;MACbV,OAAO,CAACC,IAAI,CAAC,gDAAgDQ,IAAI,0BAA0B,CAAC;MAC5F;IACF;IAEA,OAAOC,QAAQ;EACjB;EAEA,IAAYC,MAAMA,CAAA,EAAW;IAC3B,MAAMC,UAAU,GAAGvD,cAAc,CAAC,IAAI,CAACkB,SAAS,CAACsC,OAAO,CAAC;IACzD,IAAID,UAAU,IAAI,IAAI,IAAIA,UAAU,KAAK,CAAC,CAAC,EAAE;MAC3C,MAAM,IAAI7C,KAAK,CAAC,+BAA+B,CAAC;IAClD;IAEA,OAAO6C,UAAU;EACnB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE,aAAoBE,OAAOA,CACzBL,IAAY,EACZL,KAAa,GAAG,CAAC,EACjBW,QAAiB,GAAG,IAAI,EACT;IACf,MAAML,QAAQ,GAAG1C,SAAS,CAACwC,WAAW,CAACC,IAAI,CAAC;IAC5C,IAAI,CAACC,QAAQ,EAAE;MACb,MAAM,IAAI3C,KAAK,CAAC,oBAAoB0C,IAAI,aAAa,CAAC;IACxD;IAEA,OAAOC,QAAQ,CAACI,OAAO,CAACV,KAAK,EAAEW,QAAQ,CAAC;EAC1C;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,aAAoBC,OAAOA,CAACP,IAAY,EAAEM,QAAiB,GAAG,IAAI,EAAiB;IACjF,MAAML,QAAQ,GAAG1C,SAAS,CAACwC,WAAW,CAACC,IAAI,CAAC;IAC5C,IAAI,CAACC,QAAQ,EAAE;MACb,MAAM,IAAI3C,KAAK,CAAC,oBAAoB0C,IAAI,aAAa,CAAC;IACxD;IAEA,OAAOC,QAAQ,CAACM,OAAO,CAACD,QAAQ,CAAC;EACnC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,aAAoBE,YAAYA,CAACR,IAAY,EAAEM,QAAiB,GAAG,IAAI,EAAiB;IACtF,MAAML,QAAQ,GAAG1C,SAAS,CAACwC,WAAW,CAACC,IAAI,CAAC;IAC5C,IAAI,CAACC,QAAQ,EAAE;MACb,MAAM,IAAI3C,KAAK,CAAC,oBAAoB0C,IAAI,aAAa,CAAC;IACxD;IAEA,OAAOC,QAAQ,CAACO,YAAY,CAACF,QAAQ,CAAC;EACxC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACE,aAAoBG,MAAMA,CAACT,IAAY,EAAEL,KAAa,EAAiB;IACrE,MAAMM,QAAQ,GAAG1C,SAAS,CAACwC,WAAW,CAACC,IAAI,CAAC;IAC5C,IAAI,CAACC,QAAQ,EAAE;MACb,MAAM,IAAI3C,KAAK,CAAC,oBAAoB0C,IAAI,aAAa,CAAC;IACxD;IAEA,OAAOC,QAAQ,CAACQ,MAAM,CAACd,KAAK,CAAC;EAC/B;;EAEA;AACF;AACA;AACA;AACA;AACA;EACE,aAAoBe,UAAUA,CAACJ,QAAiB,GAAG,IAAI,EAAiB;IACtE,OAAO7D,eAAe,EAAEiE,UAAU,CAACJ,QAAQ,CAAC;EAC9C;EAEQK,gBAAgBA,CAAA,EAAS;IAC/B,IAAI,IAAI,CAAC9C,KAAK,CAACmC,IAAI,EAAE;MACnBzC,SAAS,CAACE,SAAS,CAAC,IAAI,CAACI,KAAK,CAACmC,IAAI,CAAC,GAAG,IAAI;IAC7C;EACF;EAEQY,kBAAkBA,CAAA,EAAS;IACjC,IAAI,IAAI,CAAC/C,KAAK,CAACmC,IAAI,EAAE;MACnB,OAAOzC,SAAS,CAACE,SAAS,CAAC,IAAI,CAACI,KAAK,CAACmC,IAAI,CAAC;IAC7C;EACF;EAEQrB,cAAcA,CAACkC,KAAwB,EAAQ;IACrD,IAAI,CAAChD,KAAK,CAACc,cAAc,GAAGkC,KAAK,CAAC;EACpC;EAEQpC,aAAaA,CAACoC,KAAuB,EAAQ;IACnD,IAAI,CAAChD,KAAK,CAACY,aAAa,GAAGoC,KAAK,CAAC;EACnC;EAEQnC,YAAYA,CAACmC,KAAsB,EAAQ;IACjD,IAAI,CAAChD,KAAK,CAACa,YAAY,GAAGmC,KAAK,CAAC;EAClC;EAEQtC,aAAaA,CAACsC,KAAuB,EAAQ;IACnD,IAAI,CAAChD,KAAK,CAACU,aAAa,GAAGsC,KAAK,CAAC;EACnC;EAEQrC,YAAYA,CAACqC,KAAsB,EAAQ;IACjD;IACA;IACA,IAAI,CAAC,IAAI,CAAClD,YAAY,EAAE;MACtB,IAAI,CAACmD,QAAQ,CAAC;QAAE1C,sBAAsB,EAAE;MAAM,CAAC,CAAC;IAClD;IAEA,IAAI,CAACP,KAAK,CAACW,YAAY,GAAGqC,KAAK,CAAC;EAClC;EAEQxC,OAAOA,CAACwC,KAAiB,EAAQ;IACvC;IACA,IAAI,IAAI,CAACnD,oBAAoB,EAAE;MAC7B,IAAI,CAACA,oBAAoB,CAAC,CAAC;MAC3B,IAAI,CAACA,oBAAoB,GAAG,IAAI;IAClC;IAEA,IAAI,CAACG,KAAK,CAACQ,OAAO,GAAGwC,KAAK,CAAC;EAC7B;EAEQjC,WAAWA,CAACiC,KAAqB,EAAQ;IAC/C,IAAI,CAAChD,KAAK,CAACe,WAAW,GAAGiC,KAAK,CAAC;EACjC;EAEQhC,YAAYA,CAACgC,KAAsB,EAAQ;IACjD,IAAI,CAAChD,KAAK,CAACgB,YAAY,GAAGgC,KAAK,CAAC;EAClC;EAEQ/B,SAASA,CAAC+B,KAAmB,EAAQ;IAC3C,IAAI,CAAChD,KAAK,CAACiB,SAAS,GAAG+B,KAAK,CAAC;EAC/B;EAEQ9B,gBAAgBA,CAAC8B,KAA0B,EAAQ;IACzD,IAAI,CAAChD,KAAK,CAACkB,gBAAgB,GAAG8B,KAAK,CAAC;EACtC;EAEQ7B,WAAWA,CAAC6B,KAAqB,EAAQ;IAC/C,IAAI,CAAChD,KAAK,CAACmB,WAAW,GAAG6B,KAAK,CAAC;EACjC;EAEQ5B,UAAUA,CAAC4B,KAAoB,EAAQ;IAC7C,IAAI,CAAChD,KAAK,CAACoB,UAAU,GAAG4B,KAAK,CAAC;EAChC;EAEQ3B,UAAUA,CAAC2B,KAAoB,EAAQ;IAC7C,IAAI,CAAChD,KAAK,CAACqB,UAAU,GAAG2B,KAAK,CAAC;EAChC;EAEQ1B,SAASA,CAAC0B,KAAmB,EAAQ;IAC3C,IAAI,CAAChD,KAAK,CAACsB,SAAS,GAAG0B,KAAK,CAAC;EAC/B;EAEQzB,WAAWA,CAACyB,KAAqB,EAAQ;IAC/C,IAAI,CAAChD,KAAK,CAACuB,WAAW,GAAGyB,KAAK,CAAC;EACjC;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAaR,OAAOA,CAACV,KAAa,GAAG,CAAC,EAAEW,QAAiB,GAAG,IAAI,EAAiB;IAC/E,MAAMV,aAAa,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACjC,KAAK,CAACwB,OAAO,EAAEC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,IAAIK,KAAK,GAAG,CAAC,IAAIA,KAAK,IAAIC,aAAa,EAAE;MACvC,MAAM,IAAItC,KAAK,CACb,6BAA6BqC,KAAK,yCAAyCC,aAAa,UAC1F,CAAC;IACH;IAEA,IAAI,CAACjC,YAAY,GAAG,IAAI;;IAExB;IACA,IAAI,CAAC,IAAI,CAACQ,KAAK,CAACC,sBAAsB,EAAE;MACtC,MAAM,IAAI2C,OAAO,CAAQC,OAAO,IAAK;QACnC,IAAI,CAACtD,oBAAoB,GAAGsD,OAAO;QACnC,IAAI,CAACF,QAAQ,CAAC;UAAE1C,sBAAsB,EAAE;QAAK,CAAC,CAAC;MACjD,CAAC,CAAC;IACJ;IAEA,MAAM3B,eAAe,EAAEwE,YAAY,CAAC,IAAI,CAACf,MAAM,EAAEP,KAAK,EAAEW,QAAQ,CAAC;IACjE,IAAI,CAAC3C,YAAY,GAAG,KAAK;EAC3B;;EAEA;AACF;AACA;AACA;EACE,MAAa8C,MAAMA,CAACd,KAAa,EAAiB;IAChD,MAAMlD,eAAe,EAAEyE,WAAW,CAAC,IAAI,CAAChB,MAAM,EAAEP,KAAK,CAAC;EACxD;;EAEA;AACF;AACA;AACA;EACE,MAAaY,OAAOA,CAACD,QAAiB,GAAG,IAAI,EAAiB;IAC5D,OAAO7D,eAAe,EAAE0E,YAAY,CAAC,IAAI,CAACjB,MAAM,EAAEI,QAAQ,CAAC;EAC7D;;EAEA;AACF;AACA;AACA;AACA;EACE,MAAaE,YAAYA,CAACF,QAAiB,GAAG,IAAI,EAAiB;IACjE,OAAO7D,eAAe,EAAE2E,iBAAiB,CAAC,IAAI,CAAClB,MAAM,EAAEI,QAAQ,CAAC;EAClE;EAEAe,iBAAiBA,CAAA,EAAS;IACxB,IAAI,CAACV,gBAAgB,CAAC,CAAC;EACzB;EAEAW,kBAAkBA,CAACC,SAAyB,EAAQ;IAClD,IAAI,CAACZ,gBAAgB,CAAC,CAAC;;IAEvB;IACA,IAAIY,SAAS,CAAClC,OAAO,KAAK,IAAI,CAACxB,KAAK,CAACwB,OAAO,EAAE;MAC5C,IAAI,CAACtB,eAAe,CAAC,CAAC;IACxB;EACF;EAEAyD,oBAAoBA,CAAA,EAAS;IAC3B,IAAI,CAACZ,kBAAkB,CAAC,CAAC;;IAEzB;IACA,IAAI,CAAClD,oBAAoB,GAAG,IAAI;EAClC;EAEA+D,MAAMA,CAAA,EAAc;IAClB,MAAM;MACJpC,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;MAClBqC,eAAe;MACfC,WAAW,GAAG,IAAI;MAClBC,SAAS,GAAG,IAAI;MAChBC,OAAO,GAAG,IAAI;MACdC,cAAc;MACdC,MAAM,GAAG,IAAI;MACb9D,kBAAkB,GAAG,CAAC,CAAC;MACvB+D,qBAAqB,GAAG,IAAI;MAC5BC,iBAAiB;MACjBC,cAAc;MACdC,WAAW;MACXC,YAAY;MACZC,gBAAgB;MAChBC,eAAe;MACfC,MAAM,GAAG,QAAQ;MACjBC,YAAY;MACZC,UAAU,GAAG,KAAK;MAClBC,iBAAiB;MACjBC,UAAU,GAAG,IAAI;MACjBC,QAAQ;MACRC,KAAK;MACLC,MAAM;MACNC,WAAW;MACXC,MAAM;MACNC,WAAW;MACXC,eAAe,GAAG,WAAW;MAC7B,GAAGC;IACL,CAAC,GAAG,IAAI,CAACtF,KAAK;;IAEd;IACA,MAAMuF,eAAe,GAAG/D,OAAO,CAACgE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAACC,GAAG,CAAE5D,MAAM,IAAK;MAC1D,IAAIA,MAAM,KAAK,MAAM,IAAIA,MAAM,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;;MAEjD;MACA,IAAIA,MAAM,IAAI,CAAC,EAAE,OAAO,GAAG;;MAE3B;MACA,OAAOG,IAAI,CAACC,GAAG,CAAC,CAAC,EAAEJ,MAAM,CAAC;IAC5B,CAAC,CAAC;;IAEF;IACA,IAAIoC,cAAc,KAAK,IAAI,CAACyB,oBAAoB,EAAE;MAChD,IAAI,CAACA,oBAAoB,GAAGzB,cAAc;MAC1C,IAAI,CAAC0B,sBAAsB,GAAG;QAC5B,GAAG1B,cAAc;QACjB2B,KAAK,EAAE5G,YAAY,CAACiF,cAAc,EAAE2B,KAAK;MAC3C,CAAC;IACH;IAEA,oBACE1G,IAAA,CAACX,4BAA4B;MAAA,GACvB+G,IAAI;MACRO,GAAG,EAAE,IAAI,CAAC5F,SAAU;MACpB+E,KAAK,EAAEc,MAAM,CAACC,SAAU;MACxBvE,OAAO,EAAE+D,eAAgB;MACzBlB,cAAc,EAAEA,cAAe;MAC/BC,WAAW,EAAEA,WAAY;MACzBT,eAAe,EAAEA,eAAgB;MACjCU,YAAY,EAAEA,YAAa;MAC3BP,OAAO,EAAEA,OAAQ;MACjBC,cAAc,EAAE,IAAI,CAAC0B,sBAAuB;MAC5CzB,MAAM,EAAEA,MAAO;MACfE,iBAAiB,EAAEA,iBAAkB;MACrChE,kBAAkB,EAAEA,kBAAmB;MACvC+D,qBAAqB,EAAEA,qBAAsB;MAC7CL,WAAW,EAAEA,WAAY;MACzBC,SAAS,EAAEA,SAAU;MACrBS,gBAAgB,EAAEA,gBAAiB;MACnCC,eAAe,EAAEA,eAAgB;MACjCC,MAAM,EAAEA,MAAO;MACfC,YAAY,EAAEA,YAAa;MAC3BC,UAAU,EAAEA,UAAW;MACvBC,iBAAiB,EAAEA,iBAAkB;MACrCC,UAAU,EAAEA,UAAW;MACvBO,eAAe,EAAEA,eAAgB;MACjC7E,OAAO,EAAE,IAAI,CAACA,OAAQ;MACtBI,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,YAAY,EAAE,IAAI,CAACA,YAAa;MAChCH,aAAa,EAAE,IAAI,CAACA,aAAc;MAClCC,YAAY,EAAE,IAAI,CAACA,YAAa;MAChCG,cAAc,EAAE,IAAI,CAACA,cAAe;MACpCC,WAAW,EAAE,IAAI,CAACA,WAAY;MAC9BC,YAAY,EAAE,IAAI,CAACA,YAAa;MAChCC,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BC,gBAAgB,EAAE,IAAI,CAACA,gBAAiB;MACxCC,WAAW,EAAE,IAAI,CAACA,WAAY;MAC9BC,UAAU,EAAE,IAAI,CAACA,UAAW;MAC5BC,UAAU,EAAE,IAAI,CAACA,UAAW;MAC5BC,SAAS,EAAE,IAAI,CAACA,SAAU;MAC1BC,WAAW,EAAE,IAAI,CAACA,WAAY;MAAAwD,QAAA,EAE7B,IAAI,CAACzE,KAAK,CAACC,sBAAsB,iBAChCnB,KAAA,CAACZ,qCAAqC;QACpCwG,KAAK,EAAEJ,UAAU,GAAGkB,MAAM,CAACE,mBAAmB,GAAG3F,SAAU;QAAA0E,QAAA,GAE1DE,MAAM,iBACL/F,IAAA,CAACR,kCAAkC;UAACsG,KAAK,EAAE,CAACc,MAAM,CAACb,MAAM,EAAEC,WAAW,CAAE;UAAAH,QAAA,EACrE,aAAA1G,cAAc,CAAC4G,MAAM,CAAC,GAAGA,MAAM,gBAAG3G,aAAa,CAAC2G,MAAM;QAAC,CACtB,CACrC,eACD/F,IAAA,CAACT,mCAAmC;UAClCuG,KAAK,EAAEJ,UAAU,GAAG,CAACI,KAAK,EAAEc,MAAM,CAACG,iBAAiB,CAAC,GAAGjB,KAAM;UAAAD,QAAA,EAE7DA;QAAQ,CAC0B,CAAC,EACrCI,MAAM,iBACLjG,IAAA,CAACP,kCAAkC;UAACqG,KAAK,EAAE,CAACc,MAAM,CAACX,MAAM,EAAEC,WAAW,CAAE;UAAAL,QAAA,EACrE,aAAA1G,cAAc,CAAC8G,MAAM,CAAC,GAAGA,MAAM,gBAAG7G,aAAa,CAAC6G,MAAM;QAAC,CACtB,CACrC;MAAA,CACoC;IACxC,CAC2B,CAAC;EAEnC;AACF;AAEA,MAAMW,MAAM,GAAGhH,UAAU,CAACoH,MAAM,CAAC;EAC/BH,SAAS,EAAE;IACT,GAAGjH,UAAU,CAACqH,YAAY;IAC1BC,MAAM,EAAE,CAAC,IAAI;IACbC,aAAa,EAAE;EACjB,CAAC;EACDL,mBAAmB,EAAE;IACnB,GAAGlH,UAAU,CAACqH;EAChB,CAAC;EACDF,iBAAiB,EAAE;IACjBK,IAAI,EAAE;EACR,CAAC;EACDrB,MAAM,EAAE;IACNoB,aAAa,EAAE;EACjB,CAAC;EACDlB,MAAM,EAAE;IACNkB,aAAa,EAAE,UAAU;IACzBE,QAAQ,EAAE,UAAU;IACpBC,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE;EACT;AACF,CAAC,CAAC","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { useEffect, useRef } from 'react';
3
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
4
4
  import { TrueSheetActions } from "../TrueSheetRouter.js";
5
5
  export const useSheetScreenState = props => {
6
6
  const {
@@ -28,41 +28,41 @@ export const useSheetScreenState = props => {
28
28
  }
29
29
  ref.current?.resize(detentIndex);
30
30
  }, [detentIndex, resizeKey]);
31
- const emitEvent = (type, data) => {
31
+ const emitEvent = useCallback((type, data) => {
32
32
  emit({
33
33
  type,
34
34
  target: routeKey,
35
35
  data
36
36
  });
37
- };
38
- const onDidDismiss = () => {
37
+ }, [emit, routeKey]);
38
+ const onDidDismiss = useCallback(() => {
39
39
  emitEvent('sheetDidDismiss', undefined);
40
40
  isDismissedRef.current = true;
41
- // Remove route from state (works for both programmatic and user-initiated dismiss)
42
41
  navigation.dispatch({
43
42
  ...TrueSheetActions.remove(),
44
43
  source: routeKey
45
44
  });
46
- };
45
+ }, [emitEvent, navigation, routeKey]);
46
+ const eventHandlers = useMemo(() => ({
47
+ onWillPresent: e => emitEvent('sheetWillPresent', e.nativeEvent),
48
+ onDidPresent: e => emitEvent('sheetDidPresent', e.nativeEvent),
49
+ onWillDismiss: _e => emitEvent('sheetWillDismiss', undefined),
50
+ onDidDismiss,
51
+ onDetentChange: e => emitEvent('sheetDetentChange', e.nativeEvent),
52
+ onDragBegin: e => emitEvent('sheetDragBegin', e.nativeEvent),
53
+ onDragChange: e => emitEvent('sheetDragChange', e.nativeEvent),
54
+ onDragEnd: e => emitEvent('sheetDragEnd', e.nativeEvent),
55
+ onPositionChange: e => emitEvent('sheetPositionChange', e.nativeEvent),
56
+ onWillFocus: _e => emitEvent('sheetWillFocus', undefined),
57
+ onDidFocus: _e => emitEvent('sheetDidFocus', undefined),
58
+ onWillBlur: _e => emitEvent('sheetWillBlur', undefined),
59
+ onDidBlur: _e => emitEvent('sheetDidBlur', undefined)
60
+ }), [emitEvent, onDidDismiss]);
47
61
  return {
48
62
  ref,
49
63
  initialDetentIndex: initialDetentIndexRef.current,
50
64
  emitEvent,
51
- eventHandlers: {
52
- onWillPresent: e => emitEvent('sheetWillPresent', e.nativeEvent),
53
- onDidPresent: e => emitEvent('sheetDidPresent', e.nativeEvent),
54
- onWillDismiss: _e => emitEvent('sheetWillDismiss', undefined),
55
- onDidDismiss,
56
- onDetentChange: e => emitEvent('sheetDetentChange', e.nativeEvent),
57
- onDragBegin: e => emitEvent('sheetDragBegin', e.nativeEvent),
58
- onDragChange: e => emitEvent('sheetDragChange', e.nativeEvent),
59
- onDragEnd: e => emitEvent('sheetDragEnd', e.nativeEvent),
60
- onPositionChange: e => emitEvent('sheetPositionChange', e.nativeEvent),
61
- onWillFocus: _e => emitEvent('sheetWillFocus', undefined),
62
- onDidFocus: _e => emitEvent('sheetDidFocus', undefined),
63
- onWillBlur: _e => emitEvent('sheetWillBlur', undefined),
64
- onDidBlur: _e => emitEvent('sheetDidBlur', undefined)
65
- }
65
+ eventHandlers
66
66
  };
67
67
  };
68
68
  //# sourceMappingURL=useSheetScreenState.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","TrueSheetActions","useSheetScreenState","props","detentIndex","resizeKey","closing","navigation","routeKey","emit","ref","isDismissedRef","isFirstRenderRef","initialDetentIndexRef","current","dismiss","resize","emitEvent","type","data","target","onDidDismiss","undefined","dispatch","remove","source","initialDetentIndex","eventHandlers","onWillPresent","e","nativeEvent","onDidPresent","onWillDismiss","_e","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur"],"sourceRoot":"../../../../src","sources":["navigation/screen/useSheetScreenState.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","TrueSheetActions","useSheetScreenState","props","detentIndex","resizeKey","closing","navigation","routeKey","emit","ref","isDismissedRef","isFirstRenderRef","initialDetentIndexRef","current","dismiss","resize","emitEvent","type","data","target","onDidDismiss","undefined","dispatch","remove","source","eventHandlers","onWillPresent","e","nativeEvent","onDidPresent","onWillDismiss","_e","onDetentChange","onDragBegin","onDragChange","onDragEnd","onPositionChange","onWillFocus","onDidFocus","onWillBlur","onDidBlur","initialDetentIndex"],"sourceRoot":"../../../../src","sources":["navigation/screen/useSheetScreenState.ts"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import { createContext, useContext } from 'react';
3
+ import { createContext, useContext, useMemo } from 'react';
4
4
  import { useWindowDimensions } from 'react-native';
5
5
  import { useSharedValue } from 'react-native-reanimated';
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
@@ -31,11 +31,11 @@ export const ReanimatedTrueSheetProvider = ({
31
31
  const animatedPosition = useSharedValue(height);
32
32
  const animatedIndex = useSharedValue(-1);
33
33
  const animatedDetent = useSharedValue(0);
34
- const value = {
34
+ const value = useMemo(() => ({
35
35
  animatedPosition,
36
36
  animatedIndex,
37
37
  animatedDetent
38
- };
38
+ }), [animatedPosition, animatedIndex, animatedDetent]);
39
39
  return /*#__PURE__*/_jsx(ReanimatedTrueSheetContext.Provider, {
40
40
  value: value,
41
41
  children: children
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","useWindowDimensions","useSharedValue","jsx","_jsx","ReanimatedTrueSheetContext","ReanimatedTrueSheetProvider","children","height","animatedPosition","animatedIndex","animatedDetent","value","Provider","useReanimatedTrueSheet","context","Error"],"sourceRoot":"../../../src","sources":["reanimated/ReanimatedTrueSheetProvider.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAwB,OAAO;AACjE,SAASC,mBAAmB,QAAQ,cAAc;AAClD,SAASC,cAAc,QAA0B,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmB3E,MAAMC,0BAA0B,gBAAGN,aAAa,CAAyC,IAAI,CAAC;AAM9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,2BAA2B,GAAGA,CAAC;EAAEC;AAA2C,CAAC,KAAK;EAC7F,MAAM;IAAEC;EAAO,CAAC,GAAGP,mBAAmB,CAAC,CAAC;EACxC,MAAMQ,gBAAgB,GAAGP,cAAc,CAACM,MAAM,CAAC;EAC/C,MAAME,aAAa,GAAGR,cAAc,CAAC,CAAC,CAAC,CAAC;EACxC,MAAMS,cAAc,GAAGT,cAAc,CAAC,CAAC,CAAC;EAExC,MAAMU,KAAsC,GAAG;IAC7CH,gBAAgB;IAChBC,aAAa;IACbC;EACF,CAAC;EAED,oBACEP,IAAA,CAACC,0BAA0B,CAACQ,QAAQ;IAACD,KAAK,EAAEA,KAAM;IAAAL,QAAA,EAC/CA;EAAQ,CAC0B,CAAC;AAE1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,sBAAsB,GAAGA,CAAA,KAAuC;EAC3E,MAAMC,OAAO,GAAGf,UAAU,CAACK,0BAA0B,CAAC;EAEtD,IAAI,CAACU,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,4EAA4E,GAC1E,2EACJ,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","useMemo","useWindowDimensions","useSharedValue","jsx","_jsx","ReanimatedTrueSheetContext","ReanimatedTrueSheetProvider","children","height","animatedPosition","animatedIndex","animatedDetent","value","Provider","useReanimatedTrueSheet","context","Error"],"sourceRoot":"../../../src","sources":["reanimated/ReanimatedTrueSheetProvider.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAwB,OAAO;AAC1E,SAASC,mBAAmB,QAAQ,cAAc;AAClD,SAASC,cAAc,QAA0B,yBAAyB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAmB3E,MAAMC,0BAA0B,gBAAGP,aAAa,CAAyC,IAAI,CAAC;AAM9F;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMQ,2BAA2B,GAAGA,CAAC;EAAEC;AAA2C,CAAC,KAAK;EAC7F,MAAM;IAAEC;EAAO,CAAC,GAAGP,mBAAmB,CAAC,CAAC;EACxC,MAAMQ,gBAAgB,GAAGP,cAAc,CAACM,MAAM,CAAC;EAC/C,MAAME,aAAa,GAAGR,cAAc,CAAC,CAAC,CAAC,CAAC;EACxC,MAAMS,cAAc,GAAGT,cAAc,CAAC,CAAC,CAAC;EAExC,MAAMU,KAAK,GAAGZ,OAAO,CACnB,OAAO;IAAES,gBAAgB;IAAEC,aAAa;IAAEC;EAAe,CAAC,CAAC,EAC3D,CAACF,gBAAgB,EAAEC,aAAa,EAAEC,cAAc,CAClD,CAAC;EAED,oBACEP,IAAA,CAACC,0BAA0B,CAACQ,QAAQ;IAACD,KAAK,EAAEA,KAAM;IAAAL,QAAA,EAC/CA;EAAQ,CAC0B,CAAC;AAE1C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMO,sBAAsB,GAAGA,CAAA,KAAuC;EAC3E,MAAMC,OAAO,GAAGhB,UAAU,CAACM,0BAA0B,CAAC;EAEtD,IAAI,CAACU,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CACb,4EAA4E,GAC1E,2EACJ,CAAC;EACH;EAEA,OAAOD,OAAO;AAChB,CAAC","ignoreList":[]}
@@ -6,6 +6,8 @@ interface TrueSheetState {
6
6
  export declare class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
7
7
  displayName: string;
8
8
  private readonly nativeRef;
9
+ private cachedGrabberOptions;
10
+ private resolvedGrabberOptions;
9
11
  /**
10
12
  * Map of sheet names against their instances.
11
13
  */
@@ -1 +1 @@
1
- {"version":3,"file":"TrueSheet.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,cAAc,EAgBf,MAAM,mBAAmB,CAAC;AAwB3B,UAAU,cAAc;IACtB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,SAAU,SAAQ,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC;IAC1E,WAAW,SAAe;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAEtE;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAA6B;IAEzD;;OAEG;IACH,OAAO,CAAC,YAAY,CAAkB;gBAE1B,KAAK,EAAE,cAAc;IAgCjC,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,KAAK,MAAM,GAOjB;IAED;;;;;;;OAOG;WACiB,OAAO,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAShB;;;;;;OAMG;WACiB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF;;;;;;OAMG;WACiB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASvF;;;;;;OAMG;WACiB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;;OAKG;WACiB,UAAU,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAInB;;;;OAIG;IACU,OAAO,CAAC,KAAK,GAAE,MAAU,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhF;;;OAGG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;OAGG;IACU,OAAO,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;;OAIG;IACU,YAAY,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IASnD,oBAAoB,IAAI,IAAI;IAO5B,MAAM,IAAI,SAAS;CA8GpB"}
1
+ {"version":3,"file":"TrueSheet.d.ts","sourceRoot":"","sources":["../../../src/TrueSheet.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAGb,KAAK,SAAS,EAIf,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,cAAc,EAgBf,MAAM,mBAAmB,CAAC;AAwB3B,UAAU,cAAc;IACtB,sBAAsB,EAAE,OAAO,CAAC;CACjC;AAED,qBAAa,SAAU,SAAQ,aAAa,CAAC,cAAc,EAAE,cAAc,CAAC;IAC1E,WAAW,SAAe;IAE1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD,OAAO,CAAC,oBAAoB,CAA+C;IAC3E,OAAO,CAAC,sBAAsB,CAAsC;IAEpE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAqC;IAEtE;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAA6B;IAEzD;;OAEG;IACH,OAAO,CAAC,YAAY,CAAkB;gBAE1B,KAAK,EAAE,cAAc;IAgCjC,OAAO,CAAC,eAAe;IAkCvB,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,KAAK,MAAM,GAOjB;IAED;;;;;;;OAOG;WACiB,OAAO,CACzB,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAU,EACjB,QAAQ,GAAE,OAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IAShB;;;;;;OAMG;WACiB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASlF;;;;;;OAMG;WACiB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IASvF;;;;;;OAMG;WACiB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAStE;;;;;OAKG;WACiB,UAAU,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvE,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,OAAO;IAUf,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,UAAU;IAIlB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAInB;;;;OAIG;IACU,OAAO,CAAC,KAAK,GAAE,MAAU,EAAE,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBhF;;;OAGG;IACU,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;;OAGG;IACU,OAAO,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D;;;;OAIG;IACU,YAAY,CAAC,QAAQ,GAAE,OAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,iBAAiB,IAAI,IAAI;IAIzB,kBAAkB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IASnD,oBAAoB,IAAI,IAAI;IAO5B,MAAM,IAAI,SAAS;CAsHpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSheetScreenState.d.ts","sourceRoot":"","sources":["../../../../../src/navigation/screen/useSheetScreenState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,KAAK,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEjD,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB;;;sBAwBzD,MAAM,2BAA2B,QACjC,sBAAsB,GAAG,0BAA0B,GAAG,SAAS;;2BAqBhD,gBAAgB;0BACjB,eAAe;4BACb,gBAAgB;;4BAEhB,iBAAiB;yBACpB,cAAc;0BACb,eAAe;uBAClB,YAAY;8BACL,mBAAmB;0BACvB,cAAc;yBACf,aAAa;yBACb,aAAa;wBACd,YAAY;;CAGjC,CAAC"}
1
+ {"version":3,"file":"useSheetScreenState.d.ts","sourceRoot":"","sources":["../../../../../src/navigation/screen/useSheetScreenState.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EACV,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,cAAc,EACd,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,0BAA0B,EAC1B,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,KAAK,MAAM,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEjD,UAAU,wBAAwB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,uBAAuB,CAAC,aAAa,CAAC,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,mBAAmB,GAAI,OAAO,wBAAwB;;;sBAyBvD,MAAM,2BAA2B,QACjC,sBAAsB,GAAG,0BAA0B,GAAG,SAAS;;2BAmBlD,gBAAgB;0BACjB,eAAe;4BACb,gBAAgB;;4BAEhB,iBAAiB;yBACpB,cAAc;0BACb,eAAe;uBAClB,YAAY;8BACL,mBAAmB;0BACvB,cAAc;yBACf,aAAa;yBACb,aAAa;wBACd,YAAY;;CAWjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ReanimatedTrueSheetProvider.d.ts","sourceRoot":"","sources":["../../../../src/reanimated/ReanimatedTrueSheetProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElE,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC;;;OAGG;IACH,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAID,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,GAAI,cAAc,gCAAgC,4CAiBzF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,QAAO,+BAWzC,CAAC"}
1
+ {"version":3,"file":"ReanimatedTrueSheetProvider.d.ts","sourceRoot":"","sources":["../../../../src/reanimated/ReanimatedTrueSheetProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAsC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE3E,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3E,MAAM,WAAW,+BAA+B;IAC9C;;OAEG;IACH,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC;;;OAGG;IACH,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC;;;OAGG;IACH,cAAc,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAID,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,GAAI,cAAc,gCAAgC,4CAgBzF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,sBAAsB,QAAO,+BAWzC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodev09/react-native-true-sheet",
3
- "version": "3.9.0-beta.2",
3
+ "version": "3.9.0-beta.4",
4
4
  "description": "The true native bottom sheet experience for your React Native Apps.",
5
5
  "source": "./src/index.ts",
6
6
  "main": "./lib/module/index.js",
package/src/TrueSheet.tsx CHANGED
@@ -58,6 +58,9 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
58
58
 
59
59
  private readonly nativeRef: RefObject<NativeRef | null>;
60
60
 
61
+ private cachedGrabberOptions: TrueSheetProps['grabberOptions'] | undefined;
62
+ private resolvedGrabberOptions: Record<string, unknown> | undefined;
63
+
61
64
  /**
62
65
  * Map of sheet names against their instances.
63
66
  */
@@ -436,21 +439,27 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
436
439
  return Math.min(1, detent);
437
440
  });
438
441
 
442
+ // Cache grabberOptions to avoid creating a new object every render
443
+ if (grabberOptions !== this.cachedGrabberOptions) {
444
+ this.cachedGrabberOptions = grabberOptions;
445
+ this.resolvedGrabberOptions = {
446
+ ...grabberOptions,
447
+ color: processColor(grabberOptions?.color),
448
+ };
449
+ }
450
+
439
451
  return (
440
452
  <TrueSheetViewNativeComponent
441
453
  {...rest}
442
454
  ref={this.nativeRef}
443
- style={[StyleSheet.absoluteFill, styles.sheetView]}
455
+ style={styles.sheetView}
444
456
  detents={resolvedDetents}
445
457
  backgroundBlur={backgroundBlur}
446
458
  blurOptions={blurOptions}
447
459
  backgroundColor={backgroundColor}
448
460
  cornerRadius={cornerRadius}
449
461
  grabber={grabber}
450
- grabberOptions={{
451
- ...grabberOptions,
452
- color: processColor(grabberOptions?.color),
453
- }}
462
+ grabberOptions={this.resolvedGrabberOptions}
454
463
  dimmed={dimmed}
455
464
  dimmedDetentIndex={dimmedDetentIndex}
456
465
  initialDetentIndex={initialDetentIndex}
@@ -482,14 +491,16 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
482
491
  onBackPress={this.onBackPress}
483
492
  >
484
493
  {this.state.shouldRenderNativeView && (
485
- <TrueSheetContainerViewNativeComponent style={scrollable && StyleSheet.absoluteFill}>
494
+ <TrueSheetContainerViewNativeComponent
495
+ style={scrollable ? styles.scrollableContainer : undefined}
496
+ >
486
497
  {header && (
487
498
  <TrueSheetHeaderViewNativeComponent style={[styles.header, headerStyle]}>
488
499
  {isValidElement(header) ? header : createElement(header)}
489
500
  </TrueSheetHeaderViewNativeComponent>
490
501
  )}
491
502
  <TrueSheetContentViewNativeComponent
492
- style={[style, scrollable && styles.scrollableContent]}
503
+ style={scrollable ? [style, styles.scrollableContent] : style}
493
504
  >
494
505
  {children}
495
506
  </TrueSheetContentViewNativeComponent>
@@ -507,9 +518,13 @@ export class TrueSheet extends PureComponent<TrueSheetProps, TrueSheetState> {
507
518
 
508
519
  const styles = StyleSheet.create({
509
520
  sheetView: {
521
+ ...StyleSheet.absoluteFill,
510
522
  zIndex: -9999,
511
523
  pointerEvents: 'box-none',
512
524
  },
525
+ scrollableContainer: {
526
+ ...StyleSheet.absoluteFill,
527
+ },
513
528
  scrollableContent: {
514
529
  flex: 1,
515
530
  },
@@ -1,4 +1,4 @@
1
- import { useEffect, useRef } from 'react';
1
+ import { useCallback, useEffect, useMemo, useRef } from 'react';
2
2
 
3
3
  import { TrueSheet } from '../../TrueSheet';
4
4
  import type {
@@ -59,29 +59,28 @@ export const useSheetScreenState = (props: UseSheetScreenStateProps) => {
59
59
  ref.current?.resize(detentIndex);
60
60
  }, [detentIndex, resizeKey]);
61
61
 
62
- const emitEvent = (
63
- type: keyof TrueSheetNavigationEventMap,
64
- data: DetentInfoEventPayload | PositionChangeEventPayload | undefined
65
- ) => {
66
- emit({
67
- type,
68
- target: routeKey,
69
- data,
70
- } as Parameters<EmitFn>[0]);
71
- };
62
+ const emitEvent = useCallback(
63
+ (
64
+ type: keyof TrueSheetNavigationEventMap,
65
+ data: DetentInfoEventPayload | PositionChangeEventPayload | undefined
66
+ ) => {
67
+ emit({
68
+ type,
69
+ target: routeKey,
70
+ data,
71
+ } as Parameters<EmitFn>[0]);
72
+ },
73
+ [emit, routeKey]
74
+ );
72
75
 
73
- const onDidDismiss = () => {
76
+ const onDidDismiss = useCallback(() => {
74
77
  emitEvent('sheetDidDismiss', undefined);
75
78
  isDismissedRef.current = true;
76
- // Remove route from state (works for both programmatic and user-initiated dismiss)
77
79
  navigation.dispatch({ ...TrueSheetActions.remove(), source: routeKey });
78
- };
80
+ }, [emitEvent, navigation, routeKey]);
79
81
 
80
- return {
81
- ref,
82
- initialDetentIndex: initialDetentIndexRef.current,
83
- emitEvent,
84
- eventHandlers: {
82
+ const eventHandlers = useMemo(
83
+ () => ({
85
84
  onWillPresent: (e: WillPresentEvent) => emitEvent('sheetWillPresent', e.nativeEvent),
86
85
  onDidPresent: (e: DidPresentEvent) => emitEvent('sheetDidPresent', e.nativeEvent),
87
86
  onWillDismiss: (_e: WillDismissEvent) => emitEvent('sheetWillDismiss', undefined),
@@ -95,6 +94,14 @@ export const useSheetScreenState = (props: UseSheetScreenStateProps) => {
95
94
  onDidFocus: (_e: DidFocusEvent) => emitEvent('sheetDidFocus', undefined),
96
95
  onWillBlur: (_e: WillBlurEvent) => emitEvent('sheetWillBlur', undefined),
97
96
  onDidBlur: (_e: DidBlurEvent) => emitEvent('sheetDidBlur', undefined),
98
- },
97
+ }),
98
+ [emitEvent, onDidDismiss]
99
+ );
100
+
101
+ return {
102
+ ref,
103
+ initialDetentIndex: initialDetentIndexRef.current,
104
+ emitEvent,
105
+ eventHandlers,
99
106
  };
100
107
  };
@@ -1,4 +1,4 @@
1
- import { createContext, useContext, type ReactNode } from 'react';
1
+ import { createContext, useContext, useMemo, type ReactNode } from 'react';
2
2
  import { useWindowDimensions } from 'react-native';
3
3
  import { useSharedValue, type SharedValue } from 'react-native-reanimated';
4
4
 
@@ -48,11 +48,10 @@ export const ReanimatedTrueSheetProvider = ({ children }: ReanimatedTrueSheetPro
48
48
  const animatedIndex = useSharedValue(-1);
49
49
  const animatedDetent = useSharedValue(0);
50
50
 
51
- const value: ReanimatedTrueSheetContextValue = {
52
- animatedPosition,
53
- animatedIndex,
54
- animatedDetent,
55
- };
51
+ const value = useMemo<ReanimatedTrueSheetContextValue>(
52
+ () => ({ animatedPosition, animatedIndex, animatedDetent }),
53
+ [animatedPosition, animatedIndex, animatedDetent]
54
+ );
56
55
 
57
56
  return (
58
57
  <ReanimatedTrueSheetContext.Provider value={value}>