#import #import #import "RNSEnums.h" #import "RNSScreenContainer.h" #if RCT_NEW_ARCH_ENABLED #import #else #import #endif // RCT_NEW_ARCH_ENABLED NS_ASSUME_NONNULL_BEGIN #ifdef RCT_NEW_ARCH_ENABLED namespace react = facebook::react; #endif // RCT_NEW_ARCH_ENABLED @interface RCTConvert (RNSScreen) + (RNSScreenStackPresentation)RNSScreenStackPresentation:(id)json; + (RNSScreenStackAnimation)RNSScreenStackAnimation:(id)json; #if !TARGET_OS_TV + (RNSStatusBarStyle)RNSStatusBarStyle:(id)json; + (UIStatusBarAnimation)UIStatusBarAnimation:(id)json; + (UIInterfaceOrientationMask)UIInterfaceOrientationMask:(id)json; #endif @end @class RNSScreenView; @interface RNSScreen : UIViewController - (instancetype)initWithView:(UIView *)view; - (UIViewController *)findChildVCForConfigAndTrait:(RNSWindowTrait)trait includingModals:(BOOL)includingModals; - (void)notifyFinishTransitioning; - (RNSScreenView *)screenView; #ifdef RCT_NEW_ARCH_ENABLED - (void)setViewToSnapshot:(UIView *)snapshot; - (void)resetViewToScreen; #endif @end @class RNSScreenStackHeaderConfig; @interface RNSScreenView : #ifdef RCT_NEW_ARCH_ENABLED RCTViewComponentView #else RCTView #endif @property (nonatomic) BOOL fullScreenSwipeEnabled; @property (nonatomic) BOOL gestureEnabled; @property (nonatomic) BOOL hasStatusBarHiddenSet; @property (nonatomic) BOOL hasStatusBarStyleSet; @property (nonatomic) BOOL hasStatusBarAnimationSet; @property (nonatomic) BOOL hasHomeIndicatorHiddenSet; @property (nonatomic) BOOL hasOrientationSet; @property (nonatomic) RNSScreenStackAnimation stackAnimation; @property (nonatomic) RNSScreenStackPresentation stackPresentation; @property (nonatomic) RNSScreenSwipeDirection swipeDirection; @property (nonatomic) RNSScreenReplaceAnimation replaceAnimation; @property (nonatomic, retain) NSNumber *transitionDuration; @property (nonatomic, readonly) BOOL dismissed; @property (nonatomic) BOOL hideKeyboardOnSwipe; @property (nonatomic) BOOL customAnimationOnSwipe; @property (nonatomic) BOOL preventNativeDismiss; @property (nonatomic, retain) RNSScreen *controller; @property (nonatomic, copy) NSDictionary *gestureResponseDistance; @property (nonatomic) int activityState; @property (weak, nonatomic) UIView *reactSuperview; #if !TARGET_OS_TV @property (nonatomic) RNSStatusBarStyle statusBarStyle; @property (nonatomic) UIStatusBarAnimation statusBarAnimation; @property (nonatomic) UIInterfaceOrientationMask screenOrientation; @property (nonatomic) BOOL statusBarHidden; @property (nonatomic) BOOL homeIndicatorHidden; // Props controlling UISheetPresentationController @property (nonatomic) RNSScreenDetentType sheetAllowedDetents; @property (nonatomic) RNSScreenDetentType sheetLargestUndimmedDetent; @property (nonatomic) BOOL sheetGrabberVisible; @property (nonatomic) CGFloat sheetCornerRadius; @property (nonatomic) BOOL sheetExpandsWhenScrolledToEdge; #endif // !TARGET_OS_TV #ifdef RCT_NEW_ARCH_ENABLED // we recreate the behavior of `reactSetFrame` on new architecture @property (nonatomic) react::LayoutMetrics oldLayoutMetrics; @property (nonatomic) react::LayoutMetrics newLayoutMetrics; @property (weak, nonatomic) RNSScreenStackHeaderConfig *config; @property (nonatomic, readonly) BOOL hasHeaderConfig; #else @property (nonatomic, copy) RCTDirectEventBlock onAppear; @property (nonatomic, copy) RCTDirectEventBlock onDisappear; @property (nonatomic, copy) RCTDirectEventBlock onDismissed; @property (nonatomic, copy) RCTDirectEventBlock onWillAppear; @property (nonatomic, copy) RCTDirectEventBlock onWillDisappear; @property (nonatomic, copy) RCTDirectEventBlock onNativeDismissCancelled; @property (nonatomic, copy) RCTDirectEventBlock onTransitionProgress; @property (nonatomic, copy) RCTDirectEventBlock onGestureCancel; #endif // RCT_NEW_ARCH_ENABLED - (void)notifyFinishTransitioning; #ifdef RCT_NEW_ARCH_ENABLED - (void)notifyWillAppear; - (void)notifyWillDisappear; - (void)notifyAppear; - (void)notifyDisappear; - (void)updateBounds; - (void)notifyDismissedWithCount:(int)dismissCount; - (instancetype)initWithFrame:(CGRect)frame; #endif - (void)notifyTransitionProgress:(double)progress closing:(BOOL)closing goingForward:(BOOL)goingForward; - (void)notifyDismissCancelledWithDismissCount:(int)dismissCount; - (BOOL)isModal; /// Looks for header configuration in instance's `reactSubviews` and returns it. If not present returns `nil`. - (RNSScreenStackHeaderConfig *_Nullable)findHeaderConfig; @end @interface UIView (RNSScreen) - (UIViewController *)parentViewController; @end @interface RNSScreenManager : RCTViewManager @end NS_ASSUME_NONNULL_END