@lodev09/react-native-true-sheet 3.0.0-beta.8 → 3.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 (98) hide show
  1. package/README.md +13 -6
  2. package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +29 -33
  3. package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +3 -1
  4. package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +48 -43
  5. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +387 -88
  6. package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +22 -4
  7. package/android/src/main/java/com/lodev09/truesheet/core/RNScreensFragmentObserver.kt +0 -5
  8. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDialogObserver.kt +67 -0
  9. package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +44 -0
  10. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
  11. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
  12. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +94 -0
  13. package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
  14. package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +37 -33
  15. package/android/src/main/res/anim/true_sheet_slide_in.xml +13 -0
  16. package/android/src/main/res/anim/true_sheet_slide_out.xml +13 -0
  17. package/android/src/main/res/values/styles.xml +13 -1
  18. package/ios/TrueSheetContainerView.mm +4 -0
  19. package/ios/TrueSheetContentView.h +2 -1
  20. package/ios/TrueSheetContentView.mm +91 -11
  21. package/ios/TrueSheetView.mm +65 -41
  22. package/ios/TrueSheetViewController.h +21 -10
  23. package/ios/TrueSheetViewController.mm +330 -165
  24. package/ios/core/TrueSheetBlurView.h +24 -0
  25. package/ios/{utils/ConversionUtil.mm → core/TrueSheetBlurView.mm} +65 -3
  26. package/ios/events/TrueSheetDragEvents.h +39 -0
  27. package/ios/events/TrueSheetDragEvents.mm +62 -0
  28. package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
  29. package/ios/events/TrueSheetFocusEvents.mm +49 -0
  30. package/ios/events/TrueSheetLifecycleEvents.h +40 -0
  31. package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
  32. package/ios/events/TrueSheetStateEvents.h +35 -0
  33. package/ios/events/TrueSheetStateEvents.mm +49 -0
  34. package/ios/utils/GestureUtil.h +7 -0
  35. package/ios/utils/GestureUtil.mm +12 -0
  36. package/lib/module/TrueSheet.js +65 -12
  37. package/lib/module/TrueSheet.js.map +1 -1
  38. package/lib/module/fabric/TrueSheetViewNativeComponent.ts +15 -5
  39. package/lib/module/index.js +0 -1
  40. package/lib/module/index.js.map +1 -1
  41. package/lib/module/reanimated/ReanimatedTrueSheet.js +13 -7
  42. package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
  43. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
  44. package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
  45. package/lib/typescript/src/TrueSheet.d.ts +4 -0
  46. package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
  47. package/lib/typescript/src/TrueSheet.types.d.ts +58 -6
  48. package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
  49. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +14 -5
  50. package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
  51. package/lib/typescript/src/index.d.ts +0 -1
  52. package/lib/typescript/src/index.d.ts.map +1 -1
  53. package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
  54. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
  55. package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
  56. package/package.json +1 -1
  57. package/src/TrueSheet.tsx +80 -10
  58. package/src/TrueSheet.types.ts +65 -6
  59. package/src/__mocks__/index.js +0 -5
  60. package/src/fabric/TrueSheetViewNativeComponent.ts +15 -5
  61. package/src/index.ts +0 -1
  62. package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
  63. package/src/reanimated/ReanimatedTrueSheetProvider.tsx +11 -3
  64. package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
  65. package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
  66. package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
  67. package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
  68. package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
  69. package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
  70. package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
  71. package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
  72. package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
  73. package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
  74. package/ios/events/OnDetentChangeEvent.h +0 -28
  75. package/ios/events/OnDetentChangeEvent.mm +0 -30
  76. package/ios/events/OnDidDismissEvent.h +0 -26
  77. package/ios/events/OnDidDismissEvent.mm +0 -25
  78. package/ios/events/OnDidPresentEvent.h +0 -28
  79. package/ios/events/OnDidPresentEvent.mm +0 -30
  80. package/ios/events/OnDragBeginEvent.h +0 -28
  81. package/ios/events/OnDragBeginEvent.mm +0 -30
  82. package/ios/events/OnDragChangeEvent.h +0 -28
  83. package/ios/events/OnDragChangeEvent.mm +0 -30
  84. package/ios/events/OnDragEndEvent.h +0 -28
  85. package/ios/events/OnDragEndEvent.mm +0 -30
  86. package/ios/events/OnMountEvent.h +0 -26
  87. package/ios/events/OnMountEvent.mm +0 -25
  88. package/ios/events/OnPositionChangeEvent.mm +0 -32
  89. package/ios/events/OnWillDismissEvent.h +0 -26
  90. package/ios/events/OnWillDismissEvent.mm +0 -25
  91. package/ios/events/OnWillPresentEvent.h +0 -28
  92. package/ios/events/OnWillPresentEvent.mm +0 -30
  93. package/ios/utils/ConversionUtil.h +0 -24
  94. package/lib/module/TrueSheetGrabber.js +0 -51
  95. package/lib/module/TrueSheetGrabber.js.map +0 -1
  96. package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
  97. package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
  98. package/src/TrueSheetGrabber.tsx +0 -82
package/README.md CHANGED
@@ -10,11 +10,11 @@ The true native bottom sheet experience for your React Native Apps. 💩
10
10
  ## Features
11
11
 
12
12
  * ⚡ **Powered by Fabric** - Built on React Native's new architecture for maximum performance
13
+ * 🚀 **Native** - Implemented in the native realm
13
14
  * 🎯 **Type-safe** - Full TypeScript support with Codegen-generated native interfaces
14
- * 🚀 **Blazing fast** - Direct C++ communication, no bridge overhead
15
- * 🎨 **Native** - Implemented in the native realm
16
15
  * ♿ **Accessible** - Native accessibility and screen reader support out of the box
17
- * 🔄 **Imperative API** - Asynchronus `ref` [methods](https://sheet.lodev09.com/reference/methods#ref-methods)
16
+ * 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/props#events)
17
+ * 🪟 **Liquid Glass** - iOS 26+ Liquid Glass support out of the box. Featured in [Expo Blog](https://expo.dev/blog/how-to-create-apple-maps-style-liquid-glass-sheets)
18
18
 
19
19
  ## Installation
20
20
 
@@ -24,13 +24,20 @@ The true native bottom sheet experience for your React Native Apps. 💩
24
24
 
25
25
  ### Prerequisites
26
26
 
27
- - React Native >= 0.81
28
- - New Architecture enabled (`RCT_NEW_ARCH_ENABLED=1` for iOS, `newArchEnabled=true` for Android)
27
+ - React Native >= 0.76 (Expo SDK 52+)
28
+ - New Architecture enabled (default in RN 0.76+)
29
29
 
30
- ### Install
30
+ ### Expo
31
+
32
+ ```sh
33
+ npx expo install @lodev09/react-native-true-sheet
34
+ ```
35
+
36
+ ### Bare React Native
31
37
 
32
38
  ```sh
33
39
  yarn add @lodev09/react-native-true-sheet
40
+ cd ios && pod install
34
41
  ```
35
42
 
36
43
  ## Documentation
@@ -2,7 +2,6 @@ package com.lodev09.truesheet
2
2
 
3
3
  import android.annotation.SuppressLint
4
4
  import android.view.View
5
- import androidx.core.view.isNotEmpty
6
5
  import com.facebook.react.uimanager.ThemedReactContext
7
6
  import com.facebook.react.views.view.ReactViewGroup
8
7
 
@@ -25,30 +24,9 @@ class TrueSheetContainerView(reactContext: ThemedReactContext) :
25
24
 
26
25
  var delegate: TrueSheetContainerViewDelegate? = null
27
26
 
28
- val contentView: TrueSheetContentView?
29
- get() = if (isNotEmpty() && getChildAt(0) is TrueSheetContentView) {
30
- getChildAt(0) as TrueSheetContentView
31
- } else {
32
- null
33
- }
34
-
35
- val headerView: TrueSheetHeaderView?
36
- get() {
37
- for (i in 0 until childCount) {
38
- val child = getChildAt(i)
39
- if (child is TrueSheetHeaderView) return child
40
- }
41
- return null
42
- }
43
-
44
- val footerView: TrueSheetFooterView?
45
- get() {
46
- for (i in 0 until childCount) {
47
- val child = getChildAt(i)
48
- if (child is TrueSheetFooterView) return child
49
- }
50
- return null
51
- }
27
+ var contentView: TrueSheetContentView? = null
28
+ var headerView: TrueSheetHeaderView? = null
29
+ var footerView: TrueSheetFooterView? = null
52
30
 
53
31
  var contentHeight: Int = 0
54
32
  var headerHeight: Int = 0
@@ -64,24 +42,42 @@ class TrueSheetContainerView(reactContext: ThemedReactContext) :
64
42
  super.addView(child, index)
65
43
 
66
44
  when (child) {
67
- is TrueSheetContentView -> child.delegate = this
68
- is TrueSheetHeaderView -> child.delegate = this
69
- is TrueSheetFooterView -> child.delegate = this
45
+ is TrueSheetContentView -> {
46
+ child.delegate = this
47
+ contentView = child
48
+ }
49
+
50
+ is TrueSheetHeaderView -> {
51
+ child.delegate = this
52
+ headerView = child
53
+ }
54
+
55
+ is TrueSheetFooterView -> {
56
+ child.delegate = this
57
+ footerView = child
58
+ }
70
59
  }
71
60
  }
72
61
 
73
62
  override fun removeViewAt(index: Int) {
74
- val view = getChildAt(index)
75
-
76
- when (view) {
77
- is TrueSheetContentView -> view.delegate = null
63
+ when (val view = getChildAt(index)) {
64
+ is TrueSheetContentView -> {
65
+ view.delegate = null
66
+ contentView = null
67
+ contentViewDidChangeSize(0, 0)
68
+ }
78
69
 
79
70
  is TrueSheetHeaderView -> {
80
71
  view.delegate = null
72
+ headerView = null
81
73
  headerViewDidChangeSize(0, 0)
82
74
  }
83
75
 
84
- is TrueSheetFooterView -> view.delegate = null
76
+ is TrueSheetFooterView -> {
77
+ view.delegate = null
78
+ footerView = null
79
+ footerViewDidChangeSize(0, 0)
80
+ }
85
81
  }
86
82
 
87
83
  super.removeViewAt(index)
@@ -8,6 +8,7 @@ import com.facebook.react.bridge.ReactMethod
8
8
  import com.facebook.react.module.annotations.ReactModule
9
9
  import com.facebook.react.turbomodule.core.interfaces.TurboModule
10
10
  import com.facebook.react.uimanager.UIManagerHelper
11
+ import com.lodev09.truesheet.core.TrueSheetDialogObserver
11
12
  import java.util.concurrent.ConcurrentHashMap
12
13
 
13
14
  /**
@@ -27,10 +28,11 @@ class TrueSheetModule(reactContext: ReactApplicationContext) :
27
28
 
28
29
  override fun invalidate() {
29
30
  super.invalidate()
30
- // Clear all registered views on module invalidation
31
+ // Clear all registered views and observer on module invalidation
31
32
  synchronized(viewRegistry) {
32
33
  viewRegistry.clear()
33
34
  }
35
+ TrueSheetDialogObserver.clear()
34
36
  }
35
37
 
36
38
  /**
@@ -13,16 +13,8 @@ import com.facebook.react.uimanager.ThemedReactContext
13
13
  import com.facebook.react.uimanager.UIManagerHelper
14
14
  import com.facebook.react.uimanager.events.EventDispatcher
15
15
  import com.facebook.react.views.view.ReactViewGroup
16
- import com.lodev09.truesheet.events.DetentChangeEvent
17
- import com.lodev09.truesheet.events.DidDismissEvent
18
- import com.lodev09.truesheet.events.DidPresentEvent
19
- import com.lodev09.truesheet.events.DragBeginEvent
20
- import com.lodev09.truesheet.events.DragChangeEvent
21
- import com.lodev09.truesheet.events.DragEndEvent
22
- import com.lodev09.truesheet.events.MountEvent
23
- import com.lodev09.truesheet.events.PositionChangeEvent
24
- import com.lodev09.truesheet.events.WillDismissEvent
25
- import com.lodev09.truesheet.events.WillPresentEvent
16
+ import com.lodev09.truesheet.core.TrueSheetDialogObserver
17
+ import com.lodev09.truesheet.events.*
26
18
 
27
19
  /**
28
20
  * Main TrueSheet host view that manages the sheet dialog and dispatches events to JavaScript.
@@ -35,7 +27,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
35
27
  TrueSheetViewControllerDelegate,
36
28
  TrueSheetContainerViewDelegate {
37
29
 
38
- private val viewController: TrueSheetViewController = TrueSheetViewController(reactContext)
30
+ internal val viewController: TrueSheetViewController = TrueSheetViewController(reactContext)
39
31
 
40
32
  private val containerView: TrueSheetContainerView?
41
33
  get() = viewController.getChildAt(0) as? TrueSheetContainerView
@@ -90,17 +82,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
90
82
  TrueSheetModule.registerView(this, id)
91
83
  }
92
84
 
93
- override fun onDetachedFromWindow() {
94
- super.onDetachedFromWindow()
95
-
96
- // Don't unregister if we have active modals - we need the view for recovery
97
- if (viewController.hasActiveModals()) {
98
- return
99
- }
100
-
101
- onDropInstance()
102
- }
103
-
104
85
  /**
105
86
  * Called by the manager after all properties are set.
106
87
  * Reconfigures the sheet if it's currently presented.
@@ -151,6 +132,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
151
132
  fun onDropInstance() {
152
133
  reactContext.removeLifecycleEventListener(this)
153
134
  TrueSheetModule.unregisterView(id)
135
+ TrueSheetDialogObserver.removeSheet(this)
154
136
 
155
137
  if (viewController.isPresented) {
156
138
  viewController.dismiss()
@@ -171,14 +153,14 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
171
153
 
172
154
  // ==================== TrueSheetViewControllerDelegate Implementation ====================
173
155
 
174
- override fun viewControllerWillPresent(index: Int, position: Float) {
156
+ override fun viewControllerWillPresent(index: Int, position: Float, detent: Float) {
175
157
  val surfaceId = UIManagerHelper.getSurfaceId(this)
176
- eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position))
158
+ eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position, detent))
177
159
  }
178
160
 
179
- override fun viewControllerDidPresent(index: Int, position: Float) {
161
+ override fun viewControllerDidPresent(index: Int, position: Float, detent: Float) {
180
162
  val surfaceId = UIManagerHelper.getSurfaceId(this)
181
- eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position))
163
+ eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position, detent))
182
164
 
183
165
  // Enable touch event dispatching to React Native
184
166
  viewController.eventDispatcher = eventDispatcher
@@ -194,40 +176,62 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
194
176
  containerView?.footerView?.eventDispatcher = null
195
177
  }
196
178
 
197
- override fun viewControllerDidDismiss() {
179
+ override fun viewControllerDidDismiss(hadParent: Boolean) {
198
180
  val surfaceId = UIManagerHelper.getSurfaceId(this)
199
181
  eventDispatcher?.dispatchEvent(DidDismissEvent(surfaceId, id))
182
+
183
+ TrueSheetDialogObserver.onSheetDidDismiss(this, hadParent)
200
184
  }
201
185
 
202
- override fun viewControllerDidChangeDetent(index: Int, position: Float) {
186
+ override fun viewControllerDidChangeDetent(index: Int, position: Float, detent: Float) {
203
187
  val surfaceId = UIManagerHelper.getSurfaceId(this)
204
- eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position))
188
+ eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position, detent))
205
189
  }
206
190
 
207
- override fun viewControllerDidDragBegin(index: Int, position: Float) {
191
+ override fun viewControllerDidDragBegin(index: Int, position: Float, detent: Float) {
208
192
  val surfaceId = UIManagerHelper.getSurfaceId(this)
209
- eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position))
193
+ eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position, detent))
210
194
  }
211
195
 
212
- override fun viewControllerDidDragChange(index: Int, position: Float) {
196
+ override fun viewControllerDidDragChange(index: Int, position: Float, detent: Float) {
213
197
  val surfaceId = UIManagerHelper.getSurfaceId(this)
214
- eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position))
198
+ eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position, detent))
215
199
  }
216
200
 
217
- override fun viewControllerDidDragEnd(index: Int, position: Float) {
201
+ override fun viewControllerDidDragEnd(index: Int, position: Float, detent: Float) {
218
202
  val surfaceId = UIManagerHelper.getSurfaceId(this)
219
- eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position))
203
+ eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position, detent))
220
204
  }
221
205
 
222
- override fun viewControllerDidChangePosition(index: Int, position: Float, transitioning: Boolean) {
206
+ override fun viewControllerDidChangePosition(index: Float, position: Float, detent: Float, realtime: Boolean) {
223
207
  val surfaceId = UIManagerHelper.getSurfaceId(this)
224
- eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position, transitioning))
208
+ eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position, detent, realtime))
225
209
  }
226
210
 
227
211
  override fun viewControllerDidChangeSize(width: Int, height: Int) {
228
212
  updateState(width, height)
229
213
  }
230
214
 
215
+ override fun viewControllerWillFocus() {
216
+ val surfaceId = UIManagerHelper.getSurfaceId(this)
217
+ eventDispatcher?.dispatchEvent(WillFocusEvent(surfaceId, id))
218
+ }
219
+
220
+ override fun viewControllerDidFocus() {
221
+ val surfaceId = UIManagerHelper.getSurfaceId(this)
222
+ eventDispatcher?.dispatchEvent(FocusEvent(surfaceId, id))
223
+ }
224
+
225
+ override fun viewControllerWillBlur() {
226
+ val surfaceId = UIManagerHelper.getSurfaceId(this)
227
+ eventDispatcher?.dispatchEvent(WillBlurEvent(surfaceId, id))
228
+ }
229
+
230
+ override fun viewControllerDidBlur() {
231
+ val surfaceId = UIManagerHelper.getSurfaceId(this)
232
+ eventDispatcher?.dispatchEvent(BlurEvent(surfaceId, id))
233
+ }
234
+
231
235
  // ==================== Property Setters (forward to controller) ====================
232
236
 
233
237
  fun setMaxHeight(height: Int) {
@@ -269,6 +273,10 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
269
273
  viewController.dismissible = dismissible
270
274
  }
271
275
 
276
+ fun setDraggable(draggable: Boolean) {
277
+ viewController.draggable = draggable
278
+ }
279
+
272
280
  fun setGrabber(grabber: Boolean) {
273
281
  viewController.grabber = grabber
274
282
  }
@@ -276,9 +284,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
276
284
  fun setDetents(newDetents: MutableList<Double>) {
277
285
  viewController.detents = newDetents
278
286
  }
279
-
280
- fun setBlurTint(tint: String?) {}
281
-
282
287
  fun setEdgeToEdgeFullScreen(edgeToEdgeFullScreen: Boolean) {
283
288
  viewController.edgeToEdgeFullScreen = edgeToEdgeFullScreen
284
289
  }
@@ -303,6 +308,9 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
303
308
 
304
309
  @UiThread
305
310
  fun present(detentIndex: Int, animated: Boolean = true, promiseCallback: () -> Unit) {
311
+ if (!viewController.isPresented) {
312
+ viewController.parentSheetView = TrueSheetDialogObserver.onSheetWillPresent(this, detentIndex)
313
+ }
306
314
  viewController.presentPromise = promiseCallback
307
315
  viewController.present(detentIndex, animated)
308
316
  }
@@ -336,9 +344,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
336
344
 
337
345
  override fun containerViewHeaderDidChangeSize(width: Int, height: Int) {
338
346
  updateSheetIfNeeded()
339
- // Update state for scroll view behavior to work correctly with header
340
- val sheetHeight = TrueSheetViewController.getEffectiveSheetHeight(viewController.height, height)
341
- updateState(viewController.width, sheetHeight)
342
347
  }
343
348
 
344
349
  override fun containerViewFooterDidChangeSize(width: Int, height: Int) {