@swiftbrowser/swift 0.1.0 → 0.2.0

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.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +105 -7
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +93 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +3 -2
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +67 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +80 -10
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +11 -2
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +164 -37
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +10 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +39 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,510 @@
1
+ // UIKit's scroll views, text inputs, controls, windows, view controllers and
2
+ // presentation controllers, as declarations. SwiftUI-Introspect (the real
3
+ // package, built against the shim) types its closures with them: on iOS
4
+ // SwiftUI draws a `List` with a `UICollectionView`, a `TextField` with a
5
+ // `UITextField`, and the library finds that object next to its own probe
6
+ // view controller and hands it to the app. In the browser no UIKit object is
7
+ // under a SwiftUI view, so the search finds nothing and nothing is handed
8
+ // over, but the closures, and code that customizes these classes, have to
9
+ // compile.
10
+ // Like the views in UIView.swift they keep their state and draw nothing.
11
+
12
+ import Foundation
13
+ import FoundationBridge
14
+ import SwiftUI
15
+
16
+ // MARK: - Scroll views
17
+
18
+ // `UIScrollView` is in ScrollView.swift (a representable's is drawn).
19
+
20
+ /// A table view (SwiftUI's `List` up to iOS 15).
21
+ @MainActor
22
+ open class UITableView: UIScrollView {
23
+ public enum Style: Int, Sendable { case plain, grouped, insetGrouped }
24
+
25
+ open var style: Style = .plain
26
+ open var rowHeight: CGFloat = 44
27
+ open var backgroundView: UIView?
28
+ open var separatorColor: UIColor?
29
+ open var allowsSelection = true
30
+
31
+ open func reloadData() {}
32
+ }
33
+
34
+ /// A collection view (SwiftUI's `List` from iOS 16).
35
+ @MainActor
36
+ open class UICollectionView: UIScrollView {
37
+ open var backgroundView: UIView?
38
+ open var allowsSelection = true
39
+
40
+ open func reloadData() {}
41
+ }
42
+
43
+ /// A table view's row.
44
+ @MainActor
45
+ open class UITableViewCell: UIView {
46
+ public let contentView = UIView()
47
+ open var backgroundView: UIView?
48
+ open var selectedBackgroundView: UIView?
49
+ }
50
+
51
+ /// A collection view's cell.
52
+ @MainActor
53
+ open class UICollectionViewCell: UIView {
54
+ public let contentView = UIView()
55
+ open var backgroundView: UIView?
56
+ open var selectedBackgroundView: UIView?
57
+ }
58
+
59
+ // MARK: - Text
60
+
61
+ /// A one-line text field.
62
+ @MainActor
63
+ open class UITextField: UIControl {
64
+ open var text: String?
65
+ open var placeholder: String?
66
+ open var font: UIFont?
67
+ open var textColor: UIColor?
68
+ open var isSecureTextEntry = false
69
+ open var keyboardType: UIKeyboardType = .default
70
+ public private(set) var isFirstResponder = false
71
+
72
+ @discardableResult open func becomeFirstResponder() -> Bool {
73
+ isFirstResponder = true
74
+ return true
75
+ }
76
+
77
+ @discardableResult open func resignFirstResponder() -> Bool {
78
+ isFirstResponder = false
79
+ return true
80
+ }
81
+ }
82
+
83
+ // `UITextView` is in TextView.swift (a representable's is drawn and edited).
84
+
85
+ /// A search bar (`.searchable`).
86
+ @MainActor
87
+ open class UISearchBar: UIView {
88
+ open var text: String?
89
+ open var placeholder: String?
90
+ public let searchTextField = UITextField()
91
+ }
92
+
93
+ // MARK: - Controls
94
+
95
+ /// A switch (`Toggle`).
96
+ @MainActor
97
+ open class UISwitch: UIControl {
98
+ open var isOn = false
99
+ open var onTintColor: UIColor?
100
+
101
+ open func setOn(_ on: Bool, animated: Bool) { isOn = on }
102
+ }
103
+
104
+ /// A slider (`Slider`).
105
+ @MainActor
106
+ open class UISlider: UIControl {
107
+ open var value: Float = 0
108
+ open var minimumValue: Float = 0
109
+ open var maximumValue: Float = 1
110
+ open var minimumTrackTintColor: UIColor?
111
+ open var maximumTrackTintColor: UIColor?
112
+
113
+ open func setValue(_ value: Float, animated: Bool) { self.value = value }
114
+ }
115
+
116
+ /// A stepper (`Stepper`).
117
+ @MainActor
118
+ open class UIStepper: UIControl {
119
+ open var value: Double = 0
120
+ open var minimumValue: Double = 0
121
+ open var maximumValue: Double = 100
122
+ open var stepValue: Double = 1
123
+ }
124
+
125
+ /// A date picker (`DatePicker`).
126
+ @MainActor
127
+ open class UIDatePicker: UIControl {
128
+ open var date = Date()
129
+ open var minimumDate: Date?
130
+ open var maximumDate: Date?
131
+ open var minuteInterval = 1
132
+ }
133
+
134
+ /// A segmented control (`Picker` with the segmented style).
135
+ @MainActor
136
+ open class UISegmentedControl: UIControl {
137
+ open var selectedSegmentIndex = -1
138
+ open var numberOfSegments: Int { 0 }
139
+ open var selectedSegmentTintColor: UIColor?
140
+ }
141
+
142
+ /// A wheel picker (`Picker` with the wheel style).
143
+ @MainActor
144
+ open class UIPickerView: UIView {
145
+ open func reloadAllComponents() {}
146
+ open func selectedRow(inComponent component: Int) -> Int { -1 }
147
+ }
148
+
149
+ /// A progress bar (`ProgressView` with the linear style).
150
+ @MainActor
151
+ open class UIProgressView: UIView {
152
+ open var progress: Float = 0
153
+ open var progressTintColor: UIColor?
154
+ open var trackTintColor: UIColor?
155
+
156
+ open func setProgress(_ progress: Float, animated: Bool) { self.progress = progress }
157
+ }
158
+
159
+ /// A color well (`ColorPicker`).
160
+ @MainActor
161
+ open class UIColorWell: UIControl {
162
+ open var selectedColor: UIColor?
163
+ open var supportsAlpha = true
164
+ open var title: String?
165
+ }
166
+
167
+ /// A page control (the dots of a `TabView` with the page style).
168
+ @MainActor
169
+ open class UIPageControl: UIControl {
170
+ open var numberOfPages = 0
171
+ open var currentPage = 0
172
+ open var hidesForSinglePage = false
173
+ open var pageIndicatorTintColor: UIColor?
174
+ open var currentPageIndicatorTintColor: UIColor?
175
+ }
176
+
177
+ // MARK: - Bars and windows
178
+
179
+ /// A navigation controller's bar.
180
+ @MainActor
181
+ open class UINavigationBar: UIView {
182
+ open var prefersLargeTitles = false
183
+ open var isTranslucent = true
184
+ open var barTintColor: UIColor?
185
+ }
186
+
187
+ /// A tab bar controller's bar.
188
+ @MainActor
189
+ open class UITabBar: UIView {
190
+ open var isTranslucent = true
191
+ open var barTintColor: UIColor?
192
+ open var unselectedItemTintColor: UIColor?
193
+ }
194
+
195
+ /// A window and its root view controller.
196
+ @MainActor
197
+ open class UIWindow: UIView {
198
+ open var rootViewController: UIViewController?
199
+ public private(set) var isKeyWindow = false
200
+ /// The scene the window belongs to; the page's one scene when made from it.
201
+ open weak var windowScene: UIWindowScene?
202
+
203
+ /// A window in `windowScene`. It is kept and never drawn: SwiftUI draws the page.
204
+ public convenience init(windowScene: UIWindowScene) {
205
+ self.init(frame: .zero)
206
+ self.windowScene = windowScene
207
+ }
208
+
209
+ open func makeKeyAndVisible() {
210
+ isKeyWindow = true
211
+ isHidden = false
212
+ }
213
+
214
+ open func makeKey() { isKeyWindow = true }
215
+ open func resignKey() { isKeyWindow = false }
216
+ }
217
+
218
+ // MARK: - View controllers
219
+
220
+ /// The status bar's style: dark content, light content, or whichever suits the interface style.
221
+ public enum UIStatusBarStyle: Int, Sendable {
222
+ case `default` = 0
223
+ case lightContent = 1
224
+ case darkContent = 3
225
+ }
226
+
227
+ /// A view controller: its view (made on first use), children and
228
+ /// presentations, kept. Nothing reaches the screen.
229
+ @MainActor
230
+ open class UIViewController {
231
+ open var title: String?
232
+ open var overrideUserInterfaceStyle: UIUserInterfaceStyle = .unspecified
233
+ open var modalPresentationStyle: UIModalPresentationStyle = .automatic
234
+ open var preferredContentSize: CGSize = .zero
235
+ /// Kept: a representable's view is laid out in the SwiftUI safe area.
236
+ open var additionalSafeAreaInsets: UIEdgeInsets = .zero
237
+ /// The status bar is the page's (the phone frame draws its own): these are asked, and not used.
238
+ open var preferredStatusBarStyle: UIStatusBarStyle { .default }
239
+ open var prefersStatusBarHidden: Bool { false }
240
+ open func setNeedsStatusBarAppearanceUpdate() {}
241
+ /// Asked, and not used: the page stays portrait.
242
+ open var supportedInterfaceOrientations: UIInterfaceOrientationMask { .allButUpsideDown }
243
+ open var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation { .portrait }
244
+ open var shouldAutorotate: Bool { true }
245
+ /// Not called: the page's taps reach buttons and SwiftUI views (Controls.swift).
246
+ open func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {}
247
+ open func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {}
248
+ open func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {}
249
+ open func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {}
250
+ public private(set) weak var parent: UIViewController?
251
+ public private(set) var children: [UIViewController] = []
252
+ public private(set) weak var presentingViewController: UIViewController?
253
+ public private(set) var presentedViewController: UIViewController?
254
+ private var loadedView: UIView?
255
+ /// Set while a `UIViewControllerRepresentable` shows the controller: its
256
+ /// environment's `dismiss` (Representable.swift).
257
+ var _representableDismiss: (() -> Void)?
258
+
259
+ public init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: FoundationBridge.Bundle?) {}
260
+
261
+ public convenience init() { self.init(nibName: nil, bundle: nil) }
262
+
263
+ public required init?(coder: NSCoder) {}
264
+
265
+ /// The root view, made by `loadView()` (then `viewDidLoad()`) the first time it is read.
266
+ open var view: UIView! {
267
+ get {
268
+ if loadedView == nil {
269
+ loadView()
270
+ if loadedView == nil { loadedView = UIView() }
271
+ viewDidLoad()
272
+ }
273
+ return loadedView
274
+ }
275
+ set { loadedView = newValue }
276
+ }
277
+
278
+ public var viewIfLoaded: UIView? { loadedView }
279
+ public var isViewLoaded: Bool { loadedView != nil }
280
+
281
+ open func loadView() { loadedView = UIView() }
282
+ open func loadViewIfNeeded() { _ = view }
283
+ open func viewDidLoad() {}
284
+ open func viewWillAppear(_ animated: Bool) {}
285
+ open func viewDidAppear(_ animated: Bool) {}
286
+ open func viewWillDisappear(_ animated: Bool) {}
287
+ open func viewDidDisappear(_ animated: Bool) {}
288
+ open func viewWillLayoutSubviews() {}
289
+ open func viewDidLayoutSubviews() {}
290
+
291
+ open func addChild(_ childController: UIViewController) {
292
+ childController.removeFromParent()
293
+ children.append(childController)
294
+ childController.parent = self
295
+ }
296
+
297
+ open func removeFromParent() {
298
+ parent?.children.removeAll { $0 === self }
299
+ parent = nil
300
+ }
301
+
302
+ open func willMove(toParent parent: UIViewController?) {}
303
+ open func didMove(toParent parent: UIViewController?) {}
304
+
305
+ /// Records the presentation, and tells the presented controller it
306
+ /// appeared (SafariServices' controller opens its tab then); nothing is shown.
307
+ open func present(_ viewControllerToPresent: UIViewController, animated flag: Bool, completion: (() -> Void)? = nil) {
308
+ presentedViewController = viewControllerToPresent
309
+ viewControllerToPresent.presentingViewController = self
310
+ viewControllerToPresent.viewWillAppear(flag)
311
+ viewControllerToPresent.viewDidAppear(flag)
312
+ completion?()
313
+ }
314
+
315
+ /// Kept: the page never rotates or resizes a controller's view this way.
316
+ open func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {}
317
+
318
+ open func dismiss(animated flag: Bool, completion: (() -> Void)? = nil) {
319
+ if presentedViewController == nil, presentingViewController == nil, let dismissRepresentable = _representableDismiss {
320
+ // Shown by a representable: dismiss the SwiftUI presentation it is in, as on iOS.
321
+ dismissRepresentable()
322
+ completion?()
323
+ return
324
+ }
325
+ let dismissed: UIViewController?
326
+ if let presented = presentedViewController {
327
+ presented.presentingViewController = nil
328
+ presentedViewController = nil
329
+ dismissed = presented
330
+ } else {
331
+ presentingViewController?.presentedViewController = nil
332
+ presentingViewController = nil
333
+ dismissed = self
334
+ }
335
+ dismissed?.viewWillDisappear(flag)
336
+ dismissed?.viewDidDisappear(flag)
337
+ completion?()
338
+ }
339
+
340
+ private func nearest<Controller: UIViewController>(_ type: Controller.Type) -> Controller? {
341
+ var current = parent
342
+ while let controller = current {
343
+ if let match = controller as? Controller { return match }
344
+ current = controller.parent
345
+ }
346
+ return nil
347
+ }
348
+
349
+ open var navigationController: UINavigationController? { nearest(UINavigationController.self) }
350
+ open var tabBarController: UITabBarController? { nearest(UITabBarController.self) }
351
+ open var splitViewController: UISplitViewController? { nearest(UISplitViewController.self) }
352
+
353
+ /// Nothing is presented through a presentation controller in the browser.
354
+ open var presentationController: UIPresentationController? { nil }
355
+ open var sheetPresentationController: UISheetPresentationController? { nil }
356
+ open var popoverPresentationController: UIPopoverPresentationController? { nil }
357
+ }
358
+
359
+ public enum UIModalPresentationStyle: Int, Sendable {
360
+ case fullScreen = 0, pageSheet, formSheet, currentContext, custom, overFullScreen, overCurrentContext, popover
361
+ case none = -1
362
+ case automatic = -2
363
+ }
364
+
365
+ /// A navigation stack of view controllers.
366
+ @MainActor
367
+ open class UINavigationController: UIViewController {
368
+ public let navigationBar = UINavigationBar()
369
+ open var isNavigationBarHidden = false
370
+
371
+ open var viewControllers: [UIViewController] {
372
+ get { children }
373
+ set {
374
+ for child in children { child.removeFromParent() }
375
+ for controller in newValue { addChild(controller) }
376
+ }
377
+ }
378
+
379
+ open var topViewController: UIViewController? { children.last }
380
+ /// What is showing: a controller the top one presents, else the top one.
381
+ open var visibleViewController: UIViewController? { topViewController?.presentedViewController ?? topViewController }
382
+
383
+ public convenience init(rootViewController: UIViewController) {
384
+ self.init(nibName: nil, bundle: nil)
385
+ addChild(rootViewController)
386
+ }
387
+
388
+ open func pushViewController(_ viewController: UIViewController, animated: Bool) {
389
+ addChild(viewController)
390
+ }
391
+
392
+ @discardableResult
393
+ open func popViewController(animated: Bool) -> UIViewController? {
394
+ guard children.count > 1, let top = children.last else { return nil }
395
+ top.removeFromParent()
396
+ return top
397
+ }
398
+
399
+ open func setNavigationBarHidden(_ hidden: Bool, animated: Bool) { isNavigationBarHidden = hidden }
400
+ }
401
+
402
+ /// Tabs of view controllers.
403
+ @MainActor
404
+ open class UITabBarController: UIViewController {
405
+ public let tabBar = UITabBar()
406
+ open var selectedIndex = 0
407
+
408
+ open var viewControllers: [UIViewController]? {
409
+ get { children }
410
+ set {
411
+ for child in children { child.removeFromParent() }
412
+ for controller in newValue ?? [] { addChild(controller) }
413
+ }
414
+ }
415
+
416
+ open var selectedViewController: UIViewController? {
417
+ children.indices.contains(selectedIndex) ? children[selectedIndex] : nil
418
+ }
419
+ }
420
+
421
+ /// Columns of view controllers (`NavigationSplitView`).
422
+ @MainActor
423
+ open class UISplitViewController: UIViewController {
424
+ open var preferredPrimaryColumnWidthFraction: CGFloat = 0.4
425
+ open var presentsWithGesture = true
426
+
427
+ open var viewControllers: [UIViewController] {
428
+ get { children }
429
+ set {
430
+ for child in children { child.removeFromParent() }
431
+ for controller in newValue { addChild(controller) }
432
+ }
433
+ }
434
+ }
435
+
436
+ // MARK: - Presentation controllers
437
+
438
+ /// What presents a view controller (a sheet, a full-screen cover, a popover).
439
+ @MainActor
440
+ open class UIPresentationController {
441
+ public let presentedViewController: UIViewController
442
+ public let presentingViewController: UIViewController?
443
+ open weak var delegate: (any UIAdaptivePresentationControllerDelegate)?
444
+
445
+ public init(presentedViewController: UIViewController, presenting presentingViewController: UIViewController?) {
446
+ self.presentedViewController = presentedViewController
447
+ self.presentingViewController = presentingViewController
448
+ }
449
+ }
450
+
451
+ /// A sheet's presentation controller.
452
+ @MainActor
453
+ open class UISheetPresentationController: UIPresentationController {
454
+ open var prefersGrabberVisible = false
455
+ open var preferredCornerRadius: CGFloat?
456
+ open var prefersScrollingExpandsWhenScrolledToEdge = true
457
+ /// The heights the sheet may rest at; kept (nothing is shown).
458
+ open var detents: [Detent] = [.large()]
459
+ open var selectedDetentIdentifier: Detent.Identifier?
460
+ open var largestUndimmedDetentIdentifier: Detent.Identifier?
461
+ open var prefersEdgeAttachedInCompactHeight = false
462
+ open var widthFollowsPreferredContentSizeWhenEdgeAttached = false
463
+
464
+ open func animateChanges(_ changes: () -> Void) { changes() }
465
+
466
+ /// A height a sheet rests at.
467
+ @MainActor
468
+ public final class Detent {
469
+ public struct Identifier: RawRepresentable, Hashable, Sendable {
470
+ public let rawValue: String
471
+ public init(rawValue: String) { self.rawValue = rawValue }
472
+ public init(_ rawValue: String) { self.rawValue = rawValue }
473
+ public static let medium = Identifier("com.apple.UIKit.medium")
474
+ public static let large = Identifier("com.apple.UIKit.large")
475
+ }
476
+
477
+ public let identifier: Identifier
478
+ let resolver: ((any UISheetPresentationControllerDetentResolutionContext) -> CGFloat?)?
479
+
480
+ init(identifier: Identifier, resolver: ((any UISheetPresentationControllerDetentResolutionContext) -> CGFloat?)?) {
481
+ self.identifier = identifier
482
+ self.resolver = resolver
483
+ }
484
+
485
+ public static func medium() -> Detent { Detent(identifier: .medium, resolver: nil) }
486
+ public static func large() -> Detent { Detent(identifier: .large, resolver: nil) }
487
+
488
+ public static func custom(identifier: Identifier? = nil, resolver: @escaping (any UISheetPresentationControllerDetentResolutionContext) -> CGFloat?) -> Detent {
489
+ Detent(identifier: identifier ?? Identifier(UUID().uuidString), resolver: resolver)
490
+ }
491
+
492
+ /// The height of a detent that is not custom: nil (resolved by the system).
493
+ public static let systemDetentValue: CGFloat? = nil
494
+ }
495
+ }
496
+
497
+ /// What a custom detent's resolver is told: the largest height a sheet may have.
498
+ @MainActor
499
+ public protocol UISheetPresentationControllerDetentResolutionContext {
500
+ var containerTraitCollection: UITraitCollection { get }
501
+ var maximumDetentValue: CGFloat { get }
502
+ }
503
+
504
+ /// A popover's presentation controller.
505
+ @MainActor
506
+ open class UIPopoverPresentationController: UIPresentationController {
507
+ open var sourceView: UIView?
508
+ open var sourceRect: CGRect = .zero
509
+ open var backgroundColor: UIColor?
510
+ }