1 // Copyright 2022-present 650 Industries. All rights reserved. 2 3 import SafariServices 4 import ABI49_0_0ExpoModulesCore 5 6 struct WebBrowserOptions: Record { 7 @Field 8 var readerMode: Bool = false 9 10 @Field 11 var enableBarCollapsing: Bool = false 12 13 @Field 14 var dismissButtonStyle: DismissButtonStyle = .done 15 16 @Field 17 var toolbarColor: UIColor? 18 19 @Field 20 var controlsColor: UIColor? 21 22 // Defaults to .overFullScreen to keep backwards compatibility 23 @Field 24 var presentationStyle: PresentationStyle = .overFullScreen 25 } 26 27 struct AuthSessionOptions: Record { 28 @Field 29 var preferEphemeralSession: Bool = false 30 } 31 32 enum DismissButtonStyle: String, EnumArgument { 33 case done 34 case close 35 case cancel 36 37 func toSafariDismissButtonStyle() -> SFSafariViewController.DismissButtonStyle { 38 switch self { 39 case .done: 40 return .done 41 case .close: 42 return .close 43 case .cancel: 44 return .cancel 45 } 46 } 47 } 48 49 internal enum PresentationStyle: String, EnumArgument { 50 case fullScreen 51 case pageSheet 52 case formSheet 53 case currentContext 54 case overFullScreen 55 case overCurrentContext 56 case popover 57 case none 58 case automatic 59 60 func toPresentationStyle() -> UIModalPresentationStyle { 61 switch self { 62 case .fullScreen: 63 return .fullScreen 64 case .pageSheet: 65 return .pageSheet 66 case .formSheet: 67 return .formSheet 68 case .currentContext: 69 return .currentContext 70 case .overFullScreen: 71 return .overFullScreen 72 case .overCurrentContext: 73 return .overCurrentContext 74 case .popover: 75 return .popover 76 case .none: 77 return .none 78 case .automatic: 79 if #available(iOS 13.0, *) { 80 return .automatic 81 } 82 // default prior iOS 13 83 return .fullScreen 84 } 85 } 86 } 87