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