@lodev09/react-native-true-sheet 3.0.0-beta.9 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -6
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetContainerView.kt +29 -33
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetModule.kt +3 -1
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetView.kt +53 -43
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewController.kt +390 -89
- package/android/src/main/java/com/lodev09/truesheet/TrueSheetViewManager.kt +42 -4
- package/android/src/main/java/com/lodev09/truesheet/core/RNScreensFragmentObserver.kt +0 -5
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetDialogObserver.kt +67 -0
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +70 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetDragEvents.kt +71 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetFocusEvents.kt +65 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetLifecycleEvents.kt +94 -0
- package/android/src/main/java/com/lodev09/truesheet/events/TrueSheetStateEvents.kt +56 -0
- package/android/src/main/java/com/lodev09/truesheet/utils/ScreenUtils.kt +37 -33
- package/android/src/main/res/anim/true_sheet_slide_in.xml +13 -0
- package/android/src/main/res/anim/true_sheet_slide_out.xml +13 -0
- package/android/src/main/res/values/styles.xml +13 -1
- package/common/cpp/react/renderer/components/TrueSheetSpec/TrueSheetViewShadowNode.cpp +5 -3
- package/ios/TrueSheetContainerView.mm +4 -0
- package/ios/TrueSheetContentView.h +2 -1
- package/ios/TrueSheetContentView.mm +91 -11
- package/ios/TrueSheetView.mm +94 -41
- package/ios/TrueSheetViewController.h +22 -10
- package/ios/TrueSheetViewController.mm +360 -173
- package/ios/core/TrueSheetBlurView.h +26 -0
- package/ios/{utils/ConversionUtil.mm → core/TrueSheetBlurView.mm} +64 -3
- package/ios/core/TrueSheetGrabberView.h +42 -0
- package/ios/core/TrueSheetGrabberView.mm +107 -0
- package/ios/events/TrueSheetDragEvents.h +39 -0
- package/ios/events/TrueSheetDragEvents.mm +62 -0
- package/ios/events/{OnPositionChangeEvent.h → TrueSheetFocusEvents.h} +8 -5
- package/ios/events/TrueSheetFocusEvents.mm +49 -0
- package/ios/events/TrueSheetLifecycleEvents.h +40 -0
- package/ios/events/TrueSheetLifecycleEvents.mm +71 -0
- package/ios/events/TrueSheetStateEvents.h +35 -0
- package/ios/events/TrueSheetStateEvents.mm +49 -0
- package/ios/utils/GestureUtil.h +7 -0
- package/ios/utils/GestureUtil.mm +12 -0
- package/lib/module/TrueSheet.js +72 -12
- package/lib/module/TrueSheet.js.map +1 -1
- package/lib/module/fabric/TrueSheetViewNativeComponent.ts +28 -5
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheet.js +13 -7
- package/lib/module/reanimated/ReanimatedTrueSheet.js.map +1 -1
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js +4 -2
- package/lib/module/reanimated/ReanimatedTrueSheetProvider.js.map +1 -1
- package/lib/typescript/src/TrueSheet.d.ts +4 -0
- package/lib/typescript/src/TrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/TrueSheet.types.d.ts +105 -6
- package/lib/typescript/src/TrueSheet.types.d.ts.map +1 -1
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts +25 -5
- package/lib/typescript/src/fabric/TrueSheetViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +0 -1
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheet.d.ts.map +1 -1
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts +8 -2
- package/lib/typescript/src/reanimated/ReanimatedTrueSheetProvider.d.ts.map +1 -1
- package/package.json +8 -2
- package/src/TrueSheet.tsx +87 -10
- package/src/TrueSheet.types.ts +114 -6
- package/src/__mocks__/index.js +0 -5
- package/src/fabric/TrueSheetViewNativeComponent.ts +28 -5
- package/src/index.ts +0 -1
- package/src/reanimated/ReanimatedTrueSheet.tsx +12 -7
- package/src/reanimated/ReanimatedTrueSheetProvider.tsx +11 -3
- package/android/src/main/java/com/lodev09/truesheet/events/DetentChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DidDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/DidPresentEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragBeginEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragChangeEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/DragEndEvent.kt +0 -26
- package/android/src/main/java/com/lodev09/truesheet/events/MountEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/PositionChangeEvent.kt +0 -32
- package/android/src/main/java/com/lodev09/truesheet/events/WillDismissEvent.kt +0 -20
- package/android/src/main/java/com/lodev09/truesheet/events/WillPresentEvent.kt +0 -26
- package/ios/events/OnDetentChangeEvent.h +0 -28
- package/ios/events/OnDetentChangeEvent.mm +0 -30
- package/ios/events/OnDidDismissEvent.h +0 -26
- package/ios/events/OnDidDismissEvent.mm +0 -25
- package/ios/events/OnDidPresentEvent.h +0 -28
- package/ios/events/OnDidPresentEvent.mm +0 -30
- package/ios/events/OnDragBeginEvent.h +0 -28
- package/ios/events/OnDragBeginEvent.mm +0 -30
- package/ios/events/OnDragChangeEvent.h +0 -28
- package/ios/events/OnDragChangeEvent.mm +0 -30
- package/ios/events/OnDragEndEvent.h +0 -28
- package/ios/events/OnDragEndEvent.mm +0 -30
- package/ios/events/OnMountEvent.h +0 -26
- package/ios/events/OnMountEvent.mm +0 -25
- package/ios/events/OnPositionChangeEvent.mm +0 -32
- package/ios/events/OnWillDismissEvent.h +0 -26
- package/ios/events/OnWillDismissEvent.mm +0 -25
- package/ios/events/OnWillPresentEvent.h +0 -28
- package/ios/events/OnWillPresentEvent.mm +0 -30
- package/ios/utils/ConversionUtil.h +0 -24
- package/lib/module/TrueSheetGrabber.js +0 -51
- package/lib/module/TrueSheetGrabber.js.map +0 -1
- package/lib/typescript/src/TrueSheetGrabber.d.ts +0 -39
- package/lib/typescript/src/TrueSheetGrabber.d.ts.map +0 -1
- package/src/TrueSheetGrabber.tsx +0 -82
package/README.md
CHANGED
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
[](https://github.com/lodev09/react-native-true-sheet/actions/workflows/ci.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/@lodev09/react-native-true-sheet)
|
|
5
5
|
|
|
6
|
+
> [!NOTE]
|
|
7
|
+
> 🎉 **Version 3.0 is here!** Completely rebuilt for Fabric with new features like automatic ScrollView detection, native headers/footers, sheet stacking, and more. [Read the announcement](https://sheet.lodev09.com/blog/release-3-0)
|
|
8
|
+
|
|
6
9
|
The true native bottom sheet experience for your React Native Apps. 💩
|
|
7
10
|
|
|
8
11
|
<img alt="React Native True Sheet - IOS" src="docs/static/img/preview-ios.gif" width="300" height="600" /><img alt="React Native True Sheet - Android" src="docs/static/img/preview-android.gif" width="300" height="600" />
|
|
@@ -10,11 +13,11 @@ The true native bottom sheet experience for your React Native Apps. 💩
|
|
|
10
13
|
## Features
|
|
11
14
|
|
|
12
15
|
* ⚡ **Powered by Fabric** - Built on React Native's new architecture for maximum performance
|
|
16
|
+
* 🚀 **Native** - Implemented in the native realm
|
|
13
17
|
* 🎯 **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
18
|
* ♿ **Accessible** - Native accessibility and screen reader support out of the box
|
|
17
|
-
* 🔄 **
|
|
19
|
+
* 🔄 **Flexible API** - Use [imperative methods](https://sheet.lodev09.com/reference/methods#ref-methods) or [lifecycle events](https://sheet.lodev09.com/reference/props#events)
|
|
20
|
+
* 🪟 **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
21
|
|
|
19
22
|
## Installation
|
|
20
23
|
|
|
@@ -24,13 +27,20 @@ The true native bottom sheet experience for your React Native Apps. 💩
|
|
|
24
27
|
|
|
25
28
|
### Prerequisites
|
|
26
29
|
|
|
27
|
-
- React Native >= 0.
|
|
28
|
-
- New Architecture enabled (
|
|
30
|
+
- React Native >= 0.76 (Expo SDK 52+)
|
|
31
|
+
- New Architecture enabled (default in RN 0.76+)
|
|
32
|
+
|
|
33
|
+
### Expo
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npx expo install @lodev09/react-native-true-sheet
|
|
37
|
+
```
|
|
29
38
|
|
|
30
|
-
###
|
|
39
|
+
### Bare React Native
|
|
31
40
|
|
|
32
41
|
```sh
|
|
33
42
|
yarn add @lodev09/react-native-true-sheet
|
|
43
|
+
cd ios && pod install
|
|
34
44
|
```
|
|
35
45
|
|
|
36
46
|
## 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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
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 ->
|
|
68
|
-
|
|
69
|
-
|
|
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
|
-
|
|
77
|
-
|
|
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 ->
|
|
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,9 @@ 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.
|
|
17
|
-
import com.lodev09.truesheet.
|
|
18
|
-
import com.lodev09.truesheet.events
|
|
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.GrabberOptions
|
|
17
|
+
import com.lodev09.truesheet.core.TrueSheetDialogObserver
|
|
18
|
+
import com.lodev09.truesheet.events.*
|
|
26
19
|
|
|
27
20
|
/**
|
|
28
21
|
* Main TrueSheet host view that manages the sheet dialog and dispatches events to JavaScript.
|
|
@@ -35,7 +28,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
35
28
|
TrueSheetViewControllerDelegate,
|
|
36
29
|
TrueSheetContainerViewDelegate {
|
|
37
30
|
|
|
38
|
-
|
|
31
|
+
internal val viewController: TrueSheetViewController = TrueSheetViewController(reactContext)
|
|
39
32
|
|
|
40
33
|
private val containerView: TrueSheetContainerView?
|
|
41
34
|
get() = viewController.getChildAt(0) as? TrueSheetContainerView
|
|
@@ -90,17 +83,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
90
83
|
TrueSheetModule.registerView(this, id)
|
|
91
84
|
}
|
|
92
85
|
|
|
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
86
|
/**
|
|
105
87
|
* Called by the manager after all properties are set.
|
|
106
88
|
* Reconfigures the sheet if it's currently presented.
|
|
@@ -151,6 +133,7 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
151
133
|
fun onDropInstance() {
|
|
152
134
|
reactContext.removeLifecycleEventListener(this)
|
|
153
135
|
TrueSheetModule.unregisterView(id)
|
|
136
|
+
TrueSheetDialogObserver.removeSheet(this)
|
|
154
137
|
|
|
155
138
|
if (viewController.isPresented) {
|
|
156
139
|
viewController.dismiss()
|
|
@@ -171,14 +154,14 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
171
154
|
|
|
172
155
|
// ==================== TrueSheetViewControllerDelegate Implementation ====================
|
|
173
156
|
|
|
174
|
-
override fun viewControllerWillPresent(index: Int, position: Float) {
|
|
157
|
+
override fun viewControllerWillPresent(index: Int, position: Float, detent: Float) {
|
|
175
158
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
176
|
-
eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position))
|
|
159
|
+
eventDispatcher?.dispatchEvent(WillPresentEvent(surfaceId, id, index, position, detent))
|
|
177
160
|
}
|
|
178
161
|
|
|
179
|
-
override fun viewControllerDidPresent(index: Int, position: Float) {
|
|
162
|
+
override fun viewControllerDidPresent(index: Int, position: Float, detent: Float) {
|
|
180
163
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
181
|
-
eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position))
|
|
164
|
+
eventDispatcher?.dispatchEvent(DidPresentEvent(surfaceId, id, index, position, detent))
|
|
182
165
|
|
|
183
166
|
// Enable touch event dispatching to React Native
|
|
184
167
|
viewController.eventDispatcher = eventDispatcher
|
|
@@ -194,40 +177,62 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
194
177
|
containerView?.footerView?.eventDispatcher = null
|
|
195
178
|
}
|
|
196
179
|
|
|
197
|
-
override fun viewControllerDidDismiss() {
|
|
180
|
+
override fun viewControllerDidDismiss(hadParent: Boolean) {
|
|
198
181
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
199
182
|
eventDispatcher?.dispatchEvent(DidDismissEvent(surfaceId, id))
|
|
183
|
+
|
|
184
|
+
TrueSheetDialogObserver.onSheetDidDismiss(this, hadParent)
|
|
200
185
|
}
|
|
201
186
|
|
|
202
|
-
override fun viewControllerDidChangeDetent(index: Int, position: Float) {
|
|
187
|
+
override fun viewControllerDidChangeDetent(index: Int, position: Float, detent: Float) {
|
|
203
188
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
204
|
-
eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position))
|
|
189
|
+
eventDispatcher?.dispatchEvent(DetentChangeEvent(surfaceId, id, index, position, detent))
|
|
205
190
|
}
|
|
206
191
|
|
|
207
|
-
override fun viewControllerDidDragBegin(index: Int, position: Float) {
|
|
192
|
+
override fun viewControllerDidDragBegin(index: Int, position: Float, detent: Float) {
|
|
208
193
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
209
|
-
eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position))
|
|
194
|
+
eventDispatcher?.dispatchEvent(DragBeginEvent(surfaceId, id, index, position, detent))
|
|
210
195
|
}
|
|
211
196
|
|
|
212
|
-
override fun viewControllerDidDragChange(index: Int, position: Float) {
|
|
197
|
+
override fun viewControllerDidDragChange(index: Int, position: Float, detent: Float) {
|
|
213
198
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
214
|
-
eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position))
|
|
199
|
+
eventDispatcher?.dispatchEvent(DragChangeEvent(surfaceId, id, index, position, detent))
|
|
215
200
|
}
|
|
216
201
|
|
|
217
|
-
override fun viewControllerDidDragEnd(index: Int, position: Float) {
|
|
202
|
+
override fun viewControllerDidDragEnd(index: Int, position: Float, detent: Float) {
|
|
218
203
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
219
|
-
eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position))
|
|
204
|
+
eventDispatcher?.dispatchEvent(DragEndEvent(surfaceId, id, index, position, detent))
|
|
220
205
|
}
|
|
221
206
|
|
|
222
|
-
override fun viewControllerDidChangePosition(index:
|
|
207
|
+
override fun viewControllerDidChangePosition(index: Float, position: Float, detent: Float, realtime: Boolean) {
|
|
223
208
|
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
224
|
-
eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position,
|
|
209
|
+
eventDispatcher?.dispatchEvent(PositionChangeEvent(surfaceId, id, index, position, detent, realtime))
|
|
225
210
|
}
|
|
226
211
|
|
|
227
212
|
override fun viewControllerDidChangeSize(width: Int, height: Int) {
|
|
228
213
|
updateState(width, height)
|
|
229
214
|
}
|
|
230
215
|
|
|
216
|
+
override fun viewControllerWillFocus() {
|
|
217
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
218
|
+
eventDispatcher?.dispatchEvent(WillFocusEvent(surfaceId, id))
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
override fun viewControllerDidFocus() {
|
|
222
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
223
|
+
eventDispatcher?.dispatchEvent(FocusEvent(surfaceId, id))
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
override fun viewControllerWillBlur() {
|
|
227
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
228
|
+
eventDispatcher?.dispatchEvent(WillBlurEvent(surfaceId, id))
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
override fun viewControllerDidBlur() {
|
|
232
|
+
val surfaceId = UIManagerHelper.getSurfaceId(this)
|
|
233
|
+
eventDispatcher?.dispatchEvent(BlurEvent(surfaceId, id))
|
|
234
|
+
}
|
|
235
|
+
|
|
231
236
|
// ==================== Property Setters (forward to controller) ====================
|
|
232
237
|
|
|
233
238
|
fun setMaxHeight(height: Int) {
|
|
@@ -269,16 +274,21 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
269
274
|
viewController.dismissible = dismissible
|
|
270
275
|
}
|
|
271
276
|
|
|
277
|
+
fun setDraggable(draggable: Boolean) {
|
|
278
|
+
viewController.draggable = draggable
|
|
279
|
+
}
|
|
280
|
+
|
|
272
281
|
fun setGrabber(grabber: Boolean) {
|
|
273
282
|
viewController.grabber = grabber
|
|
274
283
|
}
|
|
275
284
|
|
|
285
|
+
fun setGrabberOptions(options: GrabberOptions?) {
|
|
286
|
+
viewController.grabberOptions = options
|
|
287
|
+
}
|
|
288
|
+
|
|
276
289
|
fun setDetents(newDetents: MutableList<Double>) {
|
|
277
290
|
viewController.detents = newDetents
|
|
278
291
|
}
|
|
279
|
-
|
|
280
|
-
fun setBlurTint(tint: String?) {}
|
|
281
|
-
|
|
282
292
|
fun setEdgeToEdgeFullScreen(edgeToEdgeFullScreen: Boolean) {
|
|
283
293
|
viewController.edgeToEdgeFullScreen = edgeToEdgeFullScreen
|
|
284
294
|
}
|
|
@@ -303,6 +313,9 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
303
313
|
|
|
304
314
|
@UiThread
|
|
305
315
|
fun present(detentIndex: Int, animated: Boolean = true, promiseCallback: () -> Unit) {
|
|
316
|
+
if (!viewController.isPresented) {
|
|
317
|
+
viewController.parentSheetView = TrueSheetDialogObserver.onSheetWillPresent(this, detentIndex)
|
|
318
|
+
}
|
|
306
319
|
viewController.presentPromise = promiseCallback
|
|
307
320
|
viewController.present(detentIndex, animated)
|
|
308
321
|
}
|
|
@@ -336,9 +349,6 @@ class TrueSheetView(private val reactContext: ThemedReactContext) :
|
|
|
336
349
|
|
|
337
350
|
override fun containerViewHeaderDidChangeSize(width: Int, height: Int) {
|
|
338
351
|
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
352
|
}
|
|
343
353
|
|
|
344
354
|
override fun containerViewFooterDidChangeSize(width: Int, height: Int) {
|