@lodev09/react-native-true-sheet 3.10.0-beta.2 → 3.10.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.
- package/README.md +11 -1
- package/android/src/main/java/com/lodev09/truesheet/core/TrueSheetGrabberView.kt +3 -1
- package/ios/TrueSheetContainerView.h +4 -3
- package/ios/TrueSheetContainerView.mm +25 -10
- package/ios/TrueSheetContentView.mm +9 -9
- package/ios/TrueSheetFooterView.h +6 -0
- package/ios/TrueSheetFooterView.mm +1 -0
- package/ios/TrueSheetView.mm +8 -8
- package/ios/TrueSheetViewController.h +4 -3
- package/ios/TrueSheetViewController.mm +17 -9
- package/ios/core/TrueSheetBlurView.h +2 -1
- package/ios/core/TrueSheetBlurView.mm +1 -1
- package/ios/utils/BlurUtil.h +2 -1
- package/ios/utils/BlurUtil.mm +2 -2
- package/lib/module/navigation/createTrueSheetNavigator.js +6 -2
- package/lib/module/navigation/createTrueSheetNavigator.js.map +1 -1
- package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts +1 -1
- package/lib/typescript/src/navigation/createTrueSheetNavigator.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/navigation/createTrueSheetNavigator.tsx +4 -0
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# React Native
|
|
1
|
+
# React Native TrueSheet
|
|
2
2
|
|
|
3
3
|
[](https://github.com/lodev09/react-native-true-sheet/actions/workflows/checks.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/@lodev09/react-native-true-sheet)
|
|
@@ -98,6 +98,16 @@ export const App = () => {
|
|
|
98
98
|
}
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
+
## AI Skills
|
|
102
|
+
|
|
103
|
+
Skills are reusable AI capabilities that give your AI coding agent knowledge about TrueSheet. With the right skill loaded, your agent can pick the right patterns, avoid common mistakes, and generate correct code without you having to explain the library every time.
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
npx skills add lodev09/react-native-true-sheet
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
This will install the **TrueSheet Usage** skill into your project.
|
|
110
|
+
|
|
101
111
|
## That map is awesome!
|
|
102
112
|
|
|
103
113
|
Yes it is! Checkout [`@lugg/maps`](https://github.com/lugg/maps), a universal maps library for React Native that I'm developing at [Lugg](https://lugg.com).
|
|
@@ -11,6 +11,7 @@ import android.view.View
|
|
|
11
11
|
import android.view.accessibility.AccessibilityNodeInfo
|
|
12
12
|
import android.widget.FrameLayout
|
|
13
13
|
import androidx.core.graphics.ColorUtils
|
|
14
|
+
import androidx.core.view.ViewCompat
|
|
14
15
|
import com.facebook.react.uimanager.PixelUtil.dpToPx
|
|
15
16
|
|
|
16
17
|
/**
|
|
@@ -131,12 +132,13 @@ class TrueSheetGrabberView(context: Context, private val options: GrabberOptions
|
|
|
131
132
|
}
|
|
132
133
|
|
|
133
134
|
fun updateAccessibilityValue(index: Int, detentCount: Int) {
|
|
134
|
-
|
|
135
|
+
val description: CharSequence? = when {
|
|
135
136
|
index < 0 || detentCount <= 0 -> null
|
|
136
137
|
index >= detentCount - 1 -> "Expanded"
|
|
137
138
|
index == 0 -> "Collapsed"
|
|
138
139
|
else -> "Detent ${index + 1} of $detentCount"
|
|
139
140
|
}
|
|
141
|
+
ViewCompat.setStateDescription(this, description)
|
|
140
142
|
}
|
|
141
143
|
|
|
142
144
|
private fun getAdaptiveColor(baseColor: Int? = null): Int {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
#import <React/RCTViewComponentView.h>
|
|
12
12
|
#import <UIKit/UIKit.h>
|
|
13
|
+
#import <react/renderer/components/TrueSheetSpec/Props.h>
|
|
13
14
|
|
|
14
15
|
NS_ASSUME_NONNULL_BEGIN
|
|
15
16
|
|
|
@@ -17,8 +18,8 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
17
18
|
|
|
18
19
|
@property (nonatomic, assign) CGFloat keyboardScrollOffset;
|
|
19
20
|
@property (nonatomic, assign) BOOL scrollingExpandsSheet;
|
|
20
|
-
@property (nonatomic, assign)
|
|
21
|
-
@property (nonatomic, assign)
|
|
21
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewTopScrollEdgeEffect topScrollEdgeEffect;
|
|
22
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewBottomScrollEdgeEffect bottomScrollEdgeEffect;
|
|
22
23
|
|
|
23
24
|
@end
|
|
24
25
|
|
|
@@ -48,7 +49,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
48
49
|
/**
|
|
49
50
|
* Inset adjustment mode for scrollable content
|
|
50
51
|
*/
|
|
51
|
-
@property (nonatomic, assign)
|
|
52
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewInsetAdjustment insetAdjustment;
|
|
52
53
|
|
|
53
54
|
/**
|
|
54
55
|
* Options for scrollable behavior
|
|
@@ -35,15 +35,17 @@ using namespace facebook::react;
|
|
|
35
35
|
if (self = [super init]) {
|
|
36
36
|
_keyboardScrollOffset = 0;
|
|
37
37
|
_scrollingExpandsSheet = YES;
|
|
38
|
-
_topScrollEdgeEffect =
|
|
39
|
-
_bottomScrollEdgeEffect =
|
|
38
|
+
_topScrollEdgeEffect = TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
39
|
+
_bottomScrollEdgeEffect = TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
40
40
|
}
|
|
41
41
|
return self;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
@end
|
|
45
45
|
|
|
46
|
-
@interface TrueSheetContainerView () <TrueSheetContentViewDelegate,
|
|
46
|
+
@interface TrueSheetContainerView () <TrueSheetContentViewDelegate,
|
|
47
|
+
TrueSheetHeaderViewDelegate,
|
|
48
|
+
TrueSheetFooterViewDelegate>
|
|
47
49
|
@end
|
|
48
50
|
|
|
49
51
|
@implementation TrueSheetContainerView {
|
|
@@ -111,7 +113,7 @@ using namespace facebook::react;
|
|
|
111
113
|
- (void)setupScrollable {
|
|
112
114
|
if (_scrollableSet && _contentView) {
|
|
113
115
|
CGFloat bottomInset = 0;
|
|
114
|
-
if (_insetAdjustment ==
|
|
116
|
+
if (_insetAdjustment == TrueSheetViewInsetAdjustment::Automatic) {
|
|
115
117
|
bottomInset = [WindowUtil keyWindow].safeAreaInsets.bottom;
|
|
116
118
|
}
|
|
117
119
|
[_contentView setupScrollable:_scrollableEnabled bottomInset:bottomInset];
|
|
@@ -127,13 +129,13 @@ using namespace facebook::react;
|
|
|
127
129
|
return;
|
|
128
130
|
}
|
|
129
131
|
|
|
130
|
-
|
|
131
|
-
_scrollableOptions ? _scrollableOptions.topScrollEdgeEffect :
|
|
132
|
-
|
|
133
|
-
|
|
132
|
+
auto topEffect =
|
|
133
|
+
_scrollableOptions ? _scrollableOptions.topScrollEdgeEffect : TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
134
|
+
auto bottomEffect =
|
|
135
|
+
_scrollableOptions ? _scrollableOptions.bottomScrollEdgeEffect : TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
134
136
|
|
|
135
|
-
BOOL topHidden = topEffect ==
|
|
136
|
-
BOOL bottomHidden = bottomEffect ==
|
|
137
|
+
BOOL topHidden = topEffect == TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
138
|
+
BOOL bottomHidden = bottomEffect == TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
137
139
|
|
|
138
140
|
RCTScrollViewComponentView *scrollViewComponent = [_contentView findScrollView];
|
|
139
141
|
UIScrollView *scrollView = scrollViewComponent.scrollView;
|
|
@@ -176,6 +178,7 @@ using namespace facebook::react;
|
|
|
176
178
|
return;
|
|
177
179
|
}
|
|
178
180
|
_footerView = (TrueSheetFooterView *)childComponentView;
|
|
181
|
+
_footerView.delegate = self;
|
|
179
182
|
}
|
|
180
183
|
}
|
|
181
184
|
|
|
@@ -192,6 +195,7 @@ using namespace facebook::react;
|
|
|
192
195
|
}
|
|
193
196
|
|
|
194
197
|
if ([childComponentView isKindOfClass:[TrueSheetFooterView class]]) {
|
|
198
|
+
_footerView.delegate = nil;
|
|
195
199
|
_footerView = nil;
|
|
196
200
|
}
|
|
197
201
|
|
|
@@ -222,6 +226,17 @@ using namespace facebook::react;
|
|
|
222
226
|
|
|
223
227
|
- (void)headerViewDidChangeSize:(CGSize)newSize {
|
|
224
228
|
[self.delegate containerViewHeaderDidChangeSize:newSize];
|
|
229
|
+
if (@available(iOS 26.0, *)) {
|
|
230
|
+
[self setupEdgeInteractions];
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
#pragma mark - TrueSheetFooterViewDelegate
|
|
235
|
+
|
|
236
|
+
- (void)footerViewDidChangeSize:(CGSize)newSize {
|
|
237
|
+
if (@available(iOS 26.0, *)) {
|
|
238
|
+
[self setupEdgeInteractions];
|
|
239
|
+
}
|
|
225
240
|
}
|
|
226
241
|
|
|
227
242
|
#pragma mark - Keyboard Observer
|
|
@@ -211,32 +211,32 @@ using namespace facebook::react;
|
|
|
211
211
|
|
|
212
212
|
if (@available(iOS 26.0, *)) {
|
|
213
213
|
UIScrollView *scrollView = _pinnedScrollView.scrollView;
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
options ? options.bottomScrollEdgeEffect : (NSInteger)TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
214
|
+
auto topEffect = options ? options.topScrollEdgeEffect : TrueSheetViewTopScrollEdgeEffect::Hidden;
|
|
215
|
+
auto bottomEffect = options ? options.bottomScrollEdgeEffect : TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
217
216
|
|
|
218
217
|
[self applyEdgeEffect:topEffect toEdge:scrollView.topEdgeEffect];
|
|
219
|
-
[self applyEdgeEffect:bottomEffect toEdge:scrollView.bottomEdgeEffect];
|
|
218
|
+
[self applyEdgeEffect:(TrueSheetViewTopScrollEdgeEffect)bottomEffect toEdge:scrollView.bottomEdgeEffect];
|
|
220
219
|
}
|
|
221
220
|
#endif
|
|
222
221
|
}
|
|
223
222
|
|
|
224
223
|
#if RNTS_IPHONE_OS_VERSION_AVAILABLE(26_0)
|
|
225
|
-
- (void)applyEdgeEffect:(
|
|
224
|
+
- (void)applyEdgeEffect:(TrueSheetViewTopScrollEdgeEffect)effect
|
|
225
|
+
toEdge:(UIScrollEdgeEffect *)edgeEffect API_AVAILABLE(ios(26.0)) {
|
|
226
226
|
switch (effect) {
|
|
227
|
-
case
|
|
227
|
+
case TrueSheetViewTopScrollEdgeEffect::Automatic:
|
|
228
228
|
edgeEffect.hidden = NO;
|
|
229
229
|
edgeEffect.style = UIScrollEdgeEffectStyle.automaticStyle;
|
|
230
230
|
break;
|
|
231
|
-
case
|
|
231
|
+
case TrueSheetViewTopScrollEdgeEffect::Hard:
|
|
232
232
|
edgeEffect.hidden = NO;
|
|
233
233
|
edgeEffect.style = UIScrollEdgeEffectStyle.hardStyle;
|
|
234
234
|
break;
|
|
235
|
-
case
|
|
235
|
+
case TrueSheetViewTopScrollEdgeEffect::Soft:
|
|
236
236
|
edgeEffect.hidden = NO;
|
|
237
237
|
edgeEffect.style = UIScrollEdgeEffectStyle.softStyle;
|
|
238
238
|
break;
|
|
239
|
-
case
|
|
239
|
+
case TrueSheetViewTopScrollEdgeEffect::Hidden:
|
|
240
240
|
edgeEffect.hidden = YES;
|
|
241
241
|
break;
|
|
242
242
|
}
|
|
@@ -17,9 +17,15 @@
|
|
|
17
17
|
|
|
18
18
|
NS_ASSUME_NONNULL_BEGIN
|
|
19
19
|
|
|
20
|
+
@protocol TrueSheetFooterViewDelegate <NSObject>
|
|
21
|
+
@optional
|
|
22
|
+
- (void)footerViewDidChangeSize:(CGSize)size;
|
|
23
|
+
@end
|
|
24
|
+
|
|
20
25
|
@interface TrueSheetFooterView : RCTViewComponentView <TrueSheetKeyboardObserverDelegate>
|
|
21
26
|
|
|
22
27
|
@property (nonatomic, weak, nullable) TrueSheetKeyboardObserver *keyboardObserver;
|
|
28
|
+
@property (nonatomic, weak, nullable) id<TrueSheetFooterViewDelegate> delegate;
|
|
23
29
|
|
|
24
30
|
- (void)setupConstraintsWithHeight:(CGFloat)height;
|
|
25
31
|
|
package/ios/TrueSheetView.mm
CHANGED
|
@@ -51,7 +51,7 @@ using namespace facebook::react;
|
|
|
51
51
|
UIView *_snapshotView;
|
|
52
52
|
CGSize _lastStateSize;
|
|
53
53
|
NSInteger _initialDetentIndex;
|
|
54
|
-
|
|
54
|
+
TrueSheetViewInsetAdjustment _insetAdjustment;
|
|
55
55
|
BOOL _scrollable;
|
|
56
56
|
ScrollableOptions *_scrollableOptions;
|
|
57
57
|
BOOL _initialDetentAnimated;
|
|
@@ -185,7 +185,7 @@ using namespace facebook::react;
|
|
|
185
185
|
_controller.backgroundColor = RCTUIColorFromSharedColor(newProps.backgroundColor);
|
|
186
186
|
|
|
187
187
|
// Blur tint
|
|
188
|
-
_controller.backgroundBlur =
|
|
188
|
+
_controller.backgroundBlur = newProps.backgroundBlur;
|
|
189
189
|
|
|
190
190
|
// Blur options
|
|
191
191
|
const auto &blurOpts = newProps.blurOptions;
|
|
@@ -202,7 +202,7 @@ using namespace facebook::react;
|
|
|
202
202
|
_controller.maxContentWidth = newProps.maxContentWidth != 0.0 ? @(newProps.maxContentWidth) : nil;
|
|
203
203
|
|
|
204
204
|
// Anchor
|
|
205
|
-
_controller.anchor =
|
|
205
|
+
_controller.anchor = newProps.anchor;
|
|
206
206
|
|
|
207
207
|
_controller.grabber = newProps.grabber;
|
|
208
208
|
|
|
@@ -245,11 +245,11 @@ using namespace facebook::react;
|
|
|
245
245
|
|
|
246
246
|
const auto &scrollableOpts = newProps.scrollableOptions;
|
|
247
247
|
BOOL scrollingExpandsSheet = scrollableOpts.scrollingExpandsSheet;
|
|
248
|
-
|
|
249
|
-
|
|
248
|
+
auto topEdgeEffect = scrollableOpts.topScrollEdgeEffect;
|
|
249
|
+
auto bottomEdgeEffect = scrollableOpts.bottomScrollEdgeEffect;
|
|
250
250
|
BOOL hasScrollableOptions = scrollableOpts.keyboardScrollOffset > 0 || !scrollingExpandsSheet ||
|
|
251
|
-
topEdgeEffect !=
|
|
252
|
-
bottomEdgeEffect !=
|
|
251
|
+
topEdgeEffect != TrueSheetViewTopScrollEdgeEffect::Hidden ||
|
|
252
|
+
bottomEdgeEffect != TrueSheetViewBottomScrollEdgeEffect::Hidden;
|
|
253
253
|
|
|
254
254
|
if (hasScrollableOptions) {
|
|
255
255
|
ScrollableOptions *options = [[ScrollableOptions alloc] init];
|
|
@@ -264,7 +264,7 @@ using namespace facebook::react;
|
|
|
264
264
|
|
|
265
265
|
_controller.scrollingExpandsSheet = scrollingExpandsSheet;
|
|
266
266
|
|
|
267
|
-
_insetAdjustment =
|
|
267
|
+
_insetAdjustment = newProps.insetAdjustment;
|
|
268
268
|
_controller.insetAdjustment = _insetAdjustment;
|
|
269
269
|
|
|
270
270
|
[self setupScrollable];
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
//
|
|
8
8
|
|
|
9
9
|
#import <UIKit/UIKit.h>
|
|
10
|
+
#import <react/renderer/components/TrueSheetSpec/Props.h>
|
|
10
11
|
#import "core/TrueSheetDetentCalculator.h"
|
|
11
12
|
#import "core/TrueSheetGrabberView.h"
|
|
12
13
|
|
|
@@ -63,12 +64,12 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
63
64
|
@property (nonatomic, assign) BOOL draggable;
|
|
64
65
|
@property (nonatomic, assign) BOOL dimmed;
|
|
65
66
|
@property (nonatomic, strong, nullable) NSNumber *dimmedDetentIndex;
|
|
66
|
-
@property (nonatomic, assign)
|
|
67
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewBackgroundBlur backgroundBlur;
|
|
67
68
|
@property (nonatomic, strong, nullable) NSNumber *blurIntensity;
|
|
68
69
|
@property (nonatomic, assign) BOOL blurInteraction;
|
|
69
70
|
@property (nonatomic, assign) BOOL pageSizing;
|
|
70
|
-
@property (nonatomic, assign)
|
|
71
|
-
@property (nonatomic, assign)
|
|
71
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewAnchor anchor;
|
|
72
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewInsetAdjustment insetAdjustment;
|
|
72
73
|
@property (nonatomic, assign) BOOL scrollingExpandsSheet;
|
|
73
74
|
@property (nonatomic, assign) BOOL dismissible;
|
|
74
75
|
@property (nonatomic, assign) BOOL isPresented;
|
|
@@ -87,7 +87,7 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
87
87
|
_isTrackingPositionFromLayout = NO;
|
|
88
88
|
|
|
89
89
|
_blurInteraction = YES;
|
|
90
|
-
_insetAdjustment =
|
|
90
|
+
_insetAdjustment = TrueSheetViewInsetAdjustment::Automatic;
|
|
91
91
|
_detentCalculator = [[TrueSheetDetentCalculator alloc] init];
|
|
92
92
|
_detentCalculator.delegate = self;
|
|
93
93
|
}
|
|
@@ -128,7 +128,7 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
128
128
|
}
|
|
129
129
|
|
|
130
130
|
- (CGFloat)detentBottomAdjustmentForHeight:(CGFloat)height {
|
|
131
|
-
if (_insetAdjustment ==
|
|
131
|
+
if (_insetAdjustment == TrueSheetViewInsetAdjustment::Automatic) {
|
|
132
132
|
return 0;
|
|
133
133
|
}
|
|
134
134
|
|
|
@@ -200,6 +200,8 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
200
200
|
- (void)viewWillAppear:(BOOL)animated {
|
|
201
201
|
[super viewWillAppear:animated];
|
|
202
202
|
|
|
203
|
+
_blurView.alpha = 1;
|
|
204
|
+
|
|
203
205
|
if (!_isPresented) {
|
|
204
206
|
UIViewController *presenter = self.presentingViewController;
|
|
205
207
|
if ([presenter isKindOfClass:[TrueSheetViewController class]]) {
|
|
@@ -475,6 +477,12 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
475
477
|
if (self.currentPosition >= self.screenHeight) {
|
|
476
478
|
CGFloat position = fmax(_lastEmittedPositionState.position, layerPosition);
|
|
477
479
|
|
|
480
|
+
// Hide blur at the end of dismiss to prevent UIVisualEffectView
|
|
481
|
+
// from causing a flicker/flash at the bottom edge of the sheet.
|
|
482
|
+
if (self.screenHeight - position < 1) {
|
|
483
|
+
_blurView.alpha = 0;
|
|
484
|
+
}
|
|
485
|
+
|
|
478
486
|
[self emitWillDismissEvents];
|
|
479
487
|
[self emitChangePositionDelegateWithPosition:position realtime:YES debug:@"transition out"];
|
|
480
488
|
|
|
@@ -717,16 +725,16 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
717
725
|
}
|
|
718
726
|
|
|
719
727
|
- (void)setupBackground {
|
|
720
|
-
|
|
728
|
+
auto effectiveBackgroundBlur = self.backgroundBlur;
|
|
721
729
|
if (@available(iOS 26.0, *)) {
|
|
722
730
|
// iOS 26+ has default liquid glass effect
|
|
723
|
-
} else if (effectiveBackgroundBlur ==
|
|
724
|
-
effectiveBackgroundBlur =
|
|
731
|
+
} else if (effectiveBackgroundBlur == TrueSheetViewBackgroundBlur::None && !self.backgroundColor) {
|
|
732
|
+
effectiveBackgroundBlur = TrueSheetViewBackgroundBlur::SystemMaterial;
|
|
725
733
|
}
|
|
726
734
|
|
|
727
|
-
BOOL hasBlur = effectiveBackgroundBlur !=
|
|
735
|
+
BOOL hasBlur = effectiveBackgroundBlur != TrueSheetViewBackgroundBlur::None;
|
|
728
736
|
|
|
729
|
-
_blurView.backgroundBlur = hasBlur ? effectiveBackgroundBlur :
|
|
737
|
+
_blurView.backgroundBlur = hasBlur ? effectiveBackgroundBlur : TrueSheetViewBackgroundBlur::None;
|
|
730
738
|
_blurView.blurIntensity = self.blurIntensity;
|
|
731
739
|
_blurView.blurInteraction = self.blurInteraction;
|
|
732
740
|
[_blurView applyBlurEffect];
|
|
@@ -825,7 +833,7 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
825
833
|
}
|
|
826
834
|
|
|
827
835
|
- (BOOL)isAnchored {
|
|
828
|
-
return self.anchor ==
|
|
836
|
+
return self.anchor == TrueSheetViewAnchor::Left || self.anchor == TrueSheetViewAnchor::Right;
|
|
829
837
|
}
|
|
830
838
|
|
|
831
839
|
- (void)setupAnchorViewInView:(UIView *)parentView {
|
|
@@ -846,7 +854,7 @@ static BOOL TrueSheetPositionStateEquals(TrueSheetPositionState a, TrueSheetPosi
|
|
|
846
854
|
[parentView addSubview:_anchorView];
|
|
847
855
|
|
|
848
856
|
NSLayoutAnchor *horizontalAnchor =
|
|
849
|
-
self.anchor ==
|
|
857
|
+
self.anchor == TrueSheetViewAnchor::Right ? parentView.trailingAnchor : parentView.leadingAnchor;
|
|
850
858
|
|
|
851
859
|
[NSLayoutConstraint activateConstraints:@[
|
|
852
860
|
[_anchorView.bottomAnchor constraintEqualToAnchor:parentView.bottomAnchor],
|
|
@@ -7,12 +7,13 @@
|
|
|
7
7
|
//
|
|
8
8
|
|
|
9
9
|
#import <UIKit/UIKit.h>
|
|
10
|
+
#import <react/renderer/components/TrueSheetSpec/Props.h>
|
|
10
11
|
|
|
11
12
|
NS_ASSUME_NONNULL_BEGIN
|
|
12
13
|
|
|
13
14
|
@interface TrueSheetBlurView : UIVisualEffectView
|
|
14
15
|
|
|
15
|
-
@property (nonatomic, assign)
|
|
16
|
+
@property (nonatomic, assign) facebook::react::TrueSheetViewBackgroundBlur backgroundBlur;
|
|
16
17
|
@property (nonatomic, strong, nullable) NSNumber *blurIntensity;
|
|
17
18
|
@property (nonatomic, assign) BOOL blurInteraction;
|
|
18
19
|
|
|
@@ -48,7 +48,7 @@ using namespace facebook::react;
|
|
|
48
48
|
- (void)applyBlurEffect {
|
|
49
49
|
self.userInteractionEnabled = self.blurInteraction;
|
|
50
50
|
|
|
51
|
-
if (self.backgroundBlur ==
|
|
51
|
+
if (self.backgroundBlur == TrueSheetViewBackgroundBlur::None) {
|
|
52
52
|
[self clearAnimator];
|
|
53
53
|
self.effect = nil;
|
|
54
54
|
return;
|
package/ios/utils/BlurUtil.h
CHANGED
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
#ifdef RCT_NEW_ARCH_ENABLED
|
|
10
10
|
|
|
11
11
|
#import <UIKit/UIKit.h>
|
|
12
|
+
#import <react/renderer/components/TrueSheetSpec/Props.h>
|
|
12
13
|
|
|
13
14
|
NS_ASSUME_NONNULL_BEGIN
|
|
14
15
|
|
|
15
16
|
@interface BlurUtil : NSObject
|
|
16
17
|
|
|
17
|
-
+ (UIBlurEffectStyle)blurEffectStyleFromEnum:(
|
|
18
|
+
+ (UIBlurEffectStyle)blurEffectStyleFromEnum:(facebook::react::TrueSheetViewBackgroundBlur)blur;
|
|
18
19
|
|
|
19
20
|
@end
|
|
20
21
|
|
package/ios/utils/BlurUtil.mm
CHANGED
|
@@ -16,8 +16,8 @@ using namespace facebook::react;
|
|
|
16
16
|
|
|
17
17
|
@implementation BlurUtil
|
|
18
18
|
|
|
19
|
-
+ (UIBlurEffectStyle)blurEffectStyleFromEnum:(
|
|
20
|
-
switch (
|
|
19
|
+
+ (UIBlurEffectStyle)blurEffectStyleFromEnum:(TrueSheetViewBackgroundBlur)blur {
|
|
20
|
+
switch (blur) {
|
|
21
21
|
case TrueSheetViewBackgroundBlur::Dark:
|
|
22
22
|
return UIBlurEffectStyleDark;
|
|
23
23
|
case TrueSheetViewBackgroundBlur::ExtraLight:
|
|
@@ -8,8 +8,10 @@ const TrueSheetNavigator = ({
|
|
|
8
8
|
id,
|
|
9
9
|
initialRouteName,
|
|
10
10
|
children,
|
|
11
|
+
layout,
|
|
11
12
|
screenListeners,
|
|
12
|
-
screenOptions
|
|
13
|
+
screenOptions,
|
|
14
|
+
screenLayout
|
|
13
15
|
}) => {
|
|
14
16
|
const {
|
|
15
17
|
state,
|
|
@@ -20,8 +22,10 @@ const TrueSheetNavigator = ({
|
|
|
20
22
|
id,
|
|
21
23
|
initialRouteName,
|
|
22
24
|
children,
|
|
25
|
+
layout,
|
|
23
26
|
screenListeners,
|
|
24
|
-
screenOptions
|
|
27
|
+
screenOptions,
|
|
28
|
+
screenLayout
|
|
25
29
|
});
|
|
26
30
|
return /*#__PURE__*/_jsx(NavigationContent, {
|
|
27
31
|
children: /*#__PURE__*/_jsx(TrueSheetView, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createNavigatorFactory","useNavigationBuilder","TrueSheetRouter","TrueSheetView","jsx","_jsx","TrueSheetNavigator","id","initialRouteName","children","screenListeners","screenOptions","state","descriptors","navigation","NavigationContent","createTrueSheetNavigator","config"],"sourceRoot":"../../../src","sources":["navigation/createTrueSheetNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAKtBC,oBAAoB,QACf,0BAA0B;AAEjC,SAASC,eAAe,QAAqC,sBAAmB;AAChF,SAASC,aAAa,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUhD,MAAMC,kBAAkB,GAAGA,CAAC;EAC1BC,EAAE;EACFC,gBAAgB;EAChBC,QAAQ;EACRC,eAAe;EACfC;AACuB,CAAC,KAAK;EAC7B,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,
|
|
1
|
+
{"version":3,"names":["createNavigatorFactory","useNavigationBuilder","TrueSheetRouter","TrueSheetView","jsx","_jsx","TrueSheetNavigator","id","initialRouteName","children","layout","screenListeners","screenOptions","screenLayout","state","descriptors","navigation","NavigationContent","createTrueSheetNavigator","config"],"sourceRoot":"../../../src","sources":["navigation/createTrueSheetNavigator.tsx"],"mappings":";;AAAA,SACEA,sBAAsB,EAKtBC,oBAAoB,QACf,0BAA0B;AAEjC,SAASC,eAAe,QAAqC,sBAAmB;AAChF,SAASC,aAAa,QAAQ,oBAAiB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAUhD,MAAMC,kBAAkB,GAAGA,CAAC;EAC1BC,EAAE;EACFC,gBAAgB;EAChBC,QAAQ;EACRC,MAAM;EACNC,eAAe;EACfC,aAAa;EACbC;AACuB,CAAC,KAAK;EAC7B,MAAM;IAAEC,KAAK;IAAEC,WAAW;IAAEC,UAAU;IAAEC;EAAkB,CAAC,GAAGhB,oBAAoB,CAMhFC,eAAe,EAAE;IACjBK,EAAE;IACFC,gBAAgB;IAChBC,QAAQ;IACRC,MAAM;IACNC,eAAe;IACfC,aAAa;IACbC;EACF,CAAC,CAAC;EAEF,oBACER,IAAA,CAACY,iBAAiB;IAAAR,QAAA,eAChBJ,IAAA,CAACF,aAAa;MAACW,KAAK,EAAEA,KAAM;MAACE,UAAU,EAAEA,UAAW;MAACD,WAAW,EAAEA;IAAY,CAAE;EAAC,CAChE,CAAC;AAExB,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMG,wBAAwB,GAgBnCC,MAAe,IACqB;EACpC,OAAOnB,sBAAsB,CAACM,kBAAkB,CAAC,CAACa,MAAM,CAAC;AAC3D,CAAC","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type NavigatorTypeBagBase, type ParamListBase, type StaticConfig, type TypedNavigator } from '@react-navigation/native';
|
|
2
2
|
import type { TrueSheetNavigationEventMap, TrueSheetNavigationOptions, TrueSheetNavigationProp, TrueSheetNavigationState, TrueSheetNavigatorProps } from './types';
|
|
3
|
-
declare const TrueSheetNavigator: ({ id, initialRouteName, children, screenListeners, screenOptions, }: TrueSheetNavigatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
declare const TrueSheetNavigator: ({ id, initialRouteName, children, layout, screenListeners, screenOptions, screenLayout, }: TrueSheetNavigatorProps) => import("react/jsx-runtime").JSX.Element;
|
|
4
4
|
/**
|
|
5
5
|
* Creates a TrueSheet navigator.
|
|
6
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTrueSheetNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigation/createTrueSheetNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAEV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,kBAAkB,GAAI,
|
|
1
|
+
{"version":3,"file":"createTrueSheetNavigator.d.ts","sourceRoot":"","sources":["../../../../src/navigation/createTrueSheetNavigator.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAEV,2BAA2B,EAC3B,0BAA0B,EAC1B,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,SAAS,CAAC;AAEjB,QAAA,MAAM,kBAAkB,GAAI,2FAQzB,uBAAuB,4CAsBzB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,wBAAwB,GACnC,KAAK,CAAC,SAAS,SAAS,aAAa,EACrC,KAAK,CAAC,WAAW,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EACxD,KAAK,CAAC,OAAO,SAAS,oBAAoB,GAAG;IAC3C,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;IACzB,KAAK,EAAE,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAC3C,aAAa,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,EAAE,2BAA2B,CAAC;IACtC,cAAc,EAAE,GACb,SAAS,IAAI,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,EAAE,WAAW,CAAC,GAC3F,CAAC;IACF,SAAS,EAAE,OAAO,kBAAkB,CAAC;CACtC,EACD,KAAK,CAAC,MAAM,SAAS,YAAY,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,EAElE,SAAS,MAAM,KACd,cAAc,CAAC,OAAO,EAAE,MAAM,CAEhC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodev09/react-native-true-sheet",
|
|
3
|
-
"version": "3.10.0-beta.
|
|
3
|
+
"version": "3.10.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",
|
|
@@ -89,14 +89,14 @@
|
|
|
89
89
|
"@eslint/js": "^9.35.0",
|
|
90
90
|
"@evilmartians/lefthook": "^2.0.4",
|
|
91
91
|
"@gorhom/bottom-sheet": "^5.2.8",
|
|
92
|
-
"@react-native/babel-preset": "^0.
|
|
93
|
-
"@react-native/eslint-config": "^0.
|
|
92
|
+
"@react-native/babel-preset": "^0.83.4",
|
|
93
|
+
"@react-native/eslint-config": "^0.83.4",
|
|
94
94
|
"@react-navigation/native": "^7.1.6",
|
|
95
95
|
"@release-it/conventional-changelog": "^10.0.1",
|
|
96
96
|
"@testing-library/react-native": "^13.3.3",
|
|
97
97
|
"@types/babel__core": "^7",
|
|
98
98
|
"@types/jest": "^29.5.14",
|
|
99
|
-
"@types/react": "19.
|
|
99
|
+
"@types/react": "~19.2.10",
|
|
100
100
|
"commitlint": "^19.8.1",
|
|
101
101
|
"del-cli": "^6.0.0",
|
|
102
102
|
"eslint": "^9.35.0",
|
|
@@ -105,20 +105,20 @@
|
|
|
105
105
|
"jest": "^29.7.0",
|
|
106
106
|
"nanoid": "^5.1.5",
|
|
107
107
|
"prettier": "^3.0.3",
|
|
108
|
-
"react": "19.
|
|
109
|
-
"react-native": "0.
|
|
108
|
+
"react": "19.2.0",
|
|
109
|
+
"react-native": "0.83.4",
|
|
110
110
|
"react-native-builder-bob": "^0.40.15",
|
|
111
|
-
"react-native-reanimated": "
|
|
112
|
-
"react-native-worklets": "
|
|
113
|
-
"react-test-renderer": "19.
|
|
111
|
+
"react-native-reanimated": "4.2.1",
|
|
112
|
+
"react-native-worklets": "0.7.2",
|
|
113
|
+
"react-test-renderer": "19.2.0",
|
|
114
114
|
"release-it": "^19.0.4",
|
|
115
115
|
"turbo": "^2.5.6",
|
|
116
116
|
"typescript": "^5.9.2"
|
|
117
117
|
},
|
|
118
118
|
"resolutions": {
|
|
119
|
-
"@types/react": "19.
|
|
120
|
-
"react-native-reanimated": "
|
|
121
|
-
"react-native-worklets": "
|
|
119
|
+
"@types/react": "~19.2.10",
|
|
120
|
+
"react-native-reanimated": "4.2.1",
|
|
121
|
+
"react-native-worklets": "0.7.2"
|
|
122
122
|
},
|
|
123
123
|
"peerDependencies": {
|
|
124
124
|
"@gorhom/bottom-sheet": ">=5",
|
|
@@ -22,8 +22,10 @@ const TrueSheetNavigator = ({
|
|
|
22
22
|
id,
|
|
23
23
|
initialRouteName,
|
|
24
24
|
children,
|
|
25
|
+
layout,
|
|
25
26
|
screenListeners,
|
|
26
27
|
screenOptions,
|
|
28
|
+
screenLayout,
|
|
27
29
|
}: TrueSheetNavigatorProps) => {
|
|
28
30
|
const { state, descriptors, navigation, NavigationContent } = useNavigationBuilder<
|
|
29
31
|
TrueSheetNavigationState<ParamListBase>,
|
|
@@ -35,8 +37,10 @@ const TrueSheetNavigator = ({
|
|
|
35
37
|
id,
|
|
36
38
|
initialRouteName,
|
|
37
39
|
children,
|
|
40
|
+
layout,
|
|
38
41
|
screenListeners,
|
|
39
42
|
screenOptions,
|
|
43
|
+
screenLayout,
|
|
40
44
|
});
|
|
41
45
|
|
|
42
46
|
return (
|