@swiftbrowser/swift 0.0.0-stage → 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 (400) hide show
  1. package/Package.swift +214 -0
  2. package/README.md +10 -2
  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 +61 -0
  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/FoundationBridge/Bundle.swift +119 -0
  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 +29 -0
  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/Locale.swift +86 -0
  170. package/Sources/FoundationBridge/Localization.swift +149 -0
  171. package/Sources/FoundationBridge/Locks.swift +50 -0
  172. package/Sources/FoundationBridge/Markdown.swift +527 -0
  173. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  174. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  175. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  176. package/Sources/FoundationBridge/Operation.swift +195 -0
  177. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  178. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  179. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  180. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  181. package/Sources/FoundationBridge/Selector.swift +226 -0
  182. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  183. package/Sources/FoundationBridge/Table.swift +211 -0
  184. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  185. package/Sources/FoundationBridge/Timer.swift +53 -0
  186. package/Sources/FoundationBridge/UITextChecker.swift +30 -0
  187. package/Sources/FoundationBridge/URLSession.swift +718 -0
  188. package/Sources/FoundationBridge/UserDefaults.swift +183 -0
  189. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  190. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  191. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  192. package/Sources/ImageIO/GIF.swift +72 -0
  193. package/Sources/ImageIO/ImageIO.swift +248 -0
  194. package/Sources/ImageIO/ImageTypes.swift +28 -0
  195. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  196. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  197. package/Sources/MapKit/Geometry.swift +223 -0
  198. package/Sources/MapKit/Map.swift +638 -0
  199. package/Sources/MapKit/MapView.swift +229 -0
  200. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  201. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  202. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  203. package/Sources/OSLog/OSLog.swift +6 -0
  204. package/Sources/Photos/Photos.swift +572 -0
  205. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  206. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  207. package/Sources/QuickLook/QuickLook.swift +168 -0
  208. package/Sources/SafariServices/SafariServices.swift +106 -0
  209. package/Sources/Security/Security.swift +332 -0
  210. package/Sources/StoreKit/AppStore.swift +207 -0
  211. package/Sources/StoreKit/Products.swift +280 -0
  212. package/Sources/StoreKit/RequestReview.swift +28 -0
  213. package/Sources/StoreKit/StoreKit1.swift +486 -0
  214. package/Sources/StoreKit/StoreViews.swift +428 -0
  215. package/Sources/StoreKit/Transactions.swift +197 -0
  216. package/Sources/SwiftData/Macros.swift +58 -0
  217. package/Sources/SwiftData/ModelActor.swift +38 -0
  218. package/Sources/SwiftData/ModelContainer.swift +129 -0
  219. package/Sources/SwiftData/ModelContext.swift +451 -0
  220. package/Sources/SwiftData/PersistentModel.swift +238 -0
  221. package/Sources/SwiftData/Properties.swift +261 -0
  222. package/Sources/SwiftData/Query.swift +256 -0
  223. package/Sources/SwiftData/Schema.swift +192 -0
  224. package/Sources/SwiftData/Store.swift +146 -0
  225. package/Sources/SwiftData/StringPredicates.swift +125 -0
  226. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  227. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  228. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  229. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  230. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  231. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  232. package/Sources/SwiftUI/API/Accessibility.swift +181 -0
  233. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  234. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  235. package/Sources/SwiftUI/API/Alert.swift +221 -0
  236. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  237. package/Sources/SwiftUI/API/Animation.swift +285 -0
  238. package/Sources/SwiftUI/API/App.swift +87 -0
  239. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  240. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  241. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  242. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  243. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  244. package/Sources/SwiftUI/API/Color.swift +237 -0
  245. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  246. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  247. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  248. package/Sources/SwiftUI/API/Commands.swift +106 -0
  249. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  250. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  251. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  252. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  253. package/Sources/SwiftUI/API/Controls.swift +300 -0
  254. package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
  255. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  256. package/Sources/SwiftUI/API/Decorations.swift +92 -0
  257. package/Sources/SwiftUI/API/EditMode.swift +212 -0
  258. package/Sources/SwiftUI/API/Effects.swift +388 -0
  259. package/Sources/SwiftUI/API/Entry.swift +8 -0
  260. package/Sources/SwiftUI/API/Environment.swift +439 -0
  261. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  262. package/Sources/SwiftUI/API/Focus.swift +137 -0
  263. package/Sources/SwiftUI/API/Font.swift +131 -0
  264. package/Sources/SwiftUI/API/Gauge.swift +290 -0
  265. package/Sources/SwiftUI/API/Geometry.swift +89 -0
  266. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  267. package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
  268. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  269. package/Sources/SwiftUI/API/Gestures.swift +342 -0
  270. package/Sources/SwiftUI/API/Glass.swift +127 -0
  271. package/Sources/SwiftUI/API/Grid.swift +188 -0
  272. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  273. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  274. package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
  275. package/Sources/SwiftUI/API/Layout.swift +220 -0
  276. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  277. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  278. package/Sources/SwiftUI/API/Lists.swift +331 -0
  279. package/Sources/SwiftUI/API/Menu.swift +58 -0
  280. package/Sources/SwiftUI/API/Modifiers.swift +313 -0
  281. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  282. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  283. package/Sources/SwiftUI/API/Navigation.swift +386 -0
  284. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  285. package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
  286. package/Sources/SwiftUI/API/OnChange.swift +48 -0
  287. package/Sources/SwiftUI/API/Path.swift +543 -0
  288. package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
  289. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  290. package/Sources/SwiftUI/API/Picker.swift +185 -0
  291. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  292. package/Sources/SwiftUI/API/Popover.swift +41 -0
  293. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  294. package/Sources/SwiftUI/API/Presentation.swift +122 -0
  295. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  296. package/Sources/SwiftUI/API/Primitives.swift +517 -0
  297. package/Sources/SwiftUI/API/Publishers.swift +107 -0
  298. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  299. package/Sources/SwiftUI/API/RowActions.swift +84 -0
  300. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  301. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  302. package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
  303. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  304. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  305. package/Sources/SwiftUI/API/Shape.swift +214 -0
  306. package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
  307. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  308. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  309. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  310. package/Sources/SwiftUI/API/State.swift +144 -0
  311. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  312. package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
  313. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  314. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  315. package/Sources/SwiftUI/API/Table.swift +382 -0
  316. package/Sources/SwiftUI/API/Tabs.swift +263 -0
  317. package/Sources/SwiftUI/API/Tasks.swift +35 -0
  318. package/Sources/SwiftUI/API/Text.swift +386 -0
  319. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  320. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  321. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  322. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  323. package/Sources/SwiftUI/API/Timeline.swift +212 -0
  324. package/Sources/SwiftUI/API/Toolbar.swift +251 -0
  325. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  326. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  327. package/Sources/SwiftUI/API/Video.swift +64 -0
  328. package/Sources/SwiftUI/API/View.swift +215 -0
  329. package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
  330. package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
  331. package/Sources/SwiftUI/API/Windows.swift +25 -0
  332. package/Sources/SwiftUI/Charts/Axis.swift +325 -0
  333. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  334. package/Sources/SwiftUI/Charts/Chart.swift +660 -0
  335. package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
  336. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  337. package/Sources/SwiftUI/Charts/Marks.swift +204 -0
  338. package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
  339. package/Sources/SwiftUI/Charts/Scales.swift +326 -0
  340. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  341. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  342. package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
  343. package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
  344. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  345. package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
  346. package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
  347. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  348. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  349. package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
  350. package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
  351. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  352. package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
  353. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  354. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  355. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  356. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  357. package/Sources/Symbols/Symbols.swift +25 -0
  358. package/Sources/Translation/Translation.swift +423 -0
  359. package/Sources/UIKit/Activity.swift +213 -0
  360. package/Sources/UIKit/Alerts.swift +69 -0
  361. package/Sources/UIKit/AppDelegate.swift +222 -0
  362. package/Sources/UIKit/Appearance.swift +84 -0
  363. package/Sources/UIKit/ColorConversions.swift +70 -0
  364. package/Sources/UIKit/Controls.swift +225 -0
  365. package/Sources/UIKit/Device.swift +200 -0
  366. package/Sources/UIKit/Feedback.swift +65 -0
  367. package/Sources/UIKit/Font.swift +307 -0
  368. package/Sources/UIKit/Graphics.swift +204 -0
  369. package/Sources/UIKit/HostingController.swift +185 -0
  370. package/Sources/UIKit/Identity.swift +24 -0
  371. package/Sources/UIKit/Introspectable.swift +510 -0
  372. package/Sources/UIKit/Pasteboard.swift +363 -0
  373. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  374. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  375. package/Sources/UIKit/Representable.swift +288 -0
  376. package/Sources/UIKit/SafeArea.swift +12 -0
  377. package/Sources/UIKit/SceneDelegates.swift +132 -0
  378. package/Sources/UIKit/Scenes.swift +40 -0
  379. package/Sources/UIKit/ScrollView.swift +157 -0
  380. package/Sources/UIKit/ShortcutItems.swift +67 -0
  381. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  382. package/Sources/UIKit/TargetAction.swift +123 -0
  383. package/Sources/UIKit/TextPaste.swift +161 -0
  384. package/Sources/UIKit/TextView.swift +538 -0
  385. package/Sources/UIKit/UIKit.swift +292 -0
  386. package/Sources/UIKit/UIView.swift +855 -0
  387. package/Sources/UIKit/ViewTranslation.swift +311 -0
  388. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  389. package/Sources/UserNotifications/Content.swift +370 -0
  390. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  391. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  392. package/Sources/WebKit/WebKit.swift +245 -0
  393. package/Sources/os/os.swift +376 -0
  394. package/Sources/zlib/zlib.swift +6 -0
  395. package/index.d.ts +2 -0
  396. package/index.mjs +16 -0
  397. package/manifest.d.mts +2 -0
  398. package/manifest.mjs +39 -0
  399. package/package.json +30 -4
  400. package/sync-sources.mjs +33 -0
@@ -0,0 +1,181 @@
1
+ /// Scene phase, accessibility environment and text-input hints. The browser
2
+ /// has no assistive-technology bridge, so the accessibility modifiers are
3
+ /// accepted without effect and the accessibility settings read `false`
4
+ /// (see docs/ops-protocol.md, Phase 8).
5
+
6
+ // MARK: - Scene phase
7
+
8
+ /// Whether the app is in the foreground. The renderer reports it with the
9
+ /// `environment` event from the document's visibility and focus.
10
+ public enum ScenePhase: Comparable, Hashable, Sendable {
11
+ case background, inactive, active
12
+
13
+ init?(name: String) {
14
+ switch name {
15
+ case "active": self = .active
16
+ case "inactive": self = .inactive
17
+ case "background": self = .background
18
+ default: return nil
19
+ }
20
+ }
21
+ }
22
+
23
+ enum _ScenePhaseKey: EnvironmentKey { static let defaultValue = ScenePhase.active }
24
+ enum _AccessibilityFlagKey: EnvironmentKey { static let defaultValue = false }
25
+
26
+ extension EnvironmentValues {
27
+ /// `.active` until the renderer's `environment` event says otherwise.
28
+ public var scenePhase: ScenePhase {
29
+ get { self[_ScenePhaseKey.self] }
30
+ set { self[_ScenePhaseKey.self] = newValue }
31
+ }
32
+
33
+ public var accessibilityDifferentiateWithoutColor: Bool { self[_AccessibilityFlagKey.self] }
34
+ public var accessibilityVoiceOverEnabled: Bool { self[_AccessibilityFlagKey.self] }
35
+ public var accessibilityReduceMotion: Bool { self[_AccessibilityFlagKey.self] }
36
+ public var accessibilityReduceTransparency: Bool { self[_AccessibilityFlagKey.self] }
37
+ }
38
+
39
+ // MARK: - Accessibility modifiers (no effect)
40
+
41
+ public struct AccessibilityTraits: OptionSet, Sendable {
42
+ public let rawValue: UInt64
43
+ public init(rawValue: UInt64) { self.rawValue = rawValue }
44
+
45
+ public static let isButton = AccessibilityTraits(rawValue: 1 << 0)
46
+ public static let isHeader = AccessibilityTraits(rawValue: 1 << 1)
47
+ public static let isSelected = AccessibilityTraits(rawValue: 1 << 2)
48
+ public static let isLink = AccessibilityTraits(rawValue: 1 << 3)
49
+ public static let isSearchField = AccessibilityTraits(rawValue: 1 << 4)
50
+ public static let isImage = AccessibilityTraits(rawValue: 1 << 5)
51
+ public static let playsSound = AccessibilityTraits(rawValue: 1 << 6)
52
+ public static let isKeyboardKey = AccessibilityTraits(rawValue: 1 << 7)
53
+ public static let isStaticText = AccessibilityTraits(rawValue: 1 << 8)
54
+ public static let isSummaryElement = AccessibilityTraits(rawValue: 1 << 9)
55
+ public static let updatesFrequently = AccessibilityTraits(rawValue: 1 << 10)
56
+ public static let startsMediaSession = AccessibilityTraits(rawValue: 1 << 11)
57
+ public static let allowsDirectInteraction = AccessibilityTraits(rawValue: 1 << 12)
58
+ public static let causesPageTurn = AccessibilityTraits(rawValue: 1 << 13)
59
+ public static let isModal = AccessibilityTraits(rawValue: 1 << 14)
60
+ public static let isToggle = AccessibilityTraits(rawValue: 1 << 15)
61
+ }
62
+
63
+ public struct AccessibilityChildBehavior: Hashable, Sendable {
64
+ let name: String
65
+ public static let ignore = AccessibilityChildBehavior(name: "ignore")
66
+ public static let contain = AccessibilityChildBehavior(name: "contain")
67
+ public static let combine = AccessibilityChildBehavior(name: "combine")
68
+ }
69
+
70
+ nonisolated extension View {
71
+ /// The label is not drawn; headless event scripts can address the
72
+ /// element by it (`tap:"Wrong"`, docs/ops-protocol.md).
73
+ public func accessibilityLabel(_ label: Text) -> some View {
74
+ _AccessibilityView(content: self, mark: _AccessibilityMark(label: label.content))
75
+ }
76
+ @_disfavoredOverload
77
+ public func accessibilityLabel<S: StringProtocol>(_ label: S) -> some View {
78
+ _AccessibilityView(content: self, mark: _AccessibilityMark(label: String(label)))
79
+ }
80
+ public func accessibilityLabel(_ labelKey: LocalizedStringKey) -> some View {
81
+ _AccessibilityView(content: self, mark: _AccessibilityMark(label: labelKey.key))
82
+ }
83
+ /// Not drawn; headless event scripts can address the element by it
84
+ /// (`tap:@save`, docs/ops-protocol.md), as UI tests do on iOS.
85
+ public func accessibilityIdentifier(_ identifier: String) -> some View {
86
+ _AccessibilityView(content: self, mark: _AccessibilityMark(identifier: identifier))
87
+ }
88
+ public func accessibilityHint(_ hint: Text) -> some View { self }
89
+ @_disfavoredOverload
90
+ public func accessibilityHint<S: StringProtocol>(_ hint: S) -> some View { self }
91
+ public func accessibilityHint(_ hintKey: LocalizedStringKey) -> some View { self }
92
+ public func accessibilityValue(_ value: Text) -> some View { self }
93
+ @_disfavoredOverload
94
+ public func accessibilityValue<S: StringProtocol>(_ value: S) -> some View { self }
95
+ public func accessibilityValue(_ valueKey: LocalizedStringKey) -> some View { self }
96
+ public func accessibilityHidden(_ hidden: Bool) -> some View { self }
97
+ public func accessibilityAddTraits(_ traits: AccessibilityTraits) -> some View { self }
98
+ public func accessibilityRemoveTraits(_ traits: AccessibilityTraits) -> some View { self }
99
+ public func accessibilityElement(children: AccessibilityChildBehavior = .ignore) -> some View { self }
100
+ public func accessibilitySortPriority(_ sortPriority: Double) -> some View { self }
101
+ public func accessibilityRespondsToUserInteraction(_ respondsToUserInteraction: Bool = true) -> some View { self }
102
+ public func accessibilityInputLabels(_ inputLabels: [Text]) -> some View { self }
103
+ public func accessibilityInputLabels<S: StringProtocol>(_ inputLabels: [S]) -> some View { self }
104
+ public func accessibilityInputLabels(_ inputLabelKeys: [LocalizedStringKey]) -> some View { self }
105
+ }
106
+
107
+ // MARK: - Text input hints (no effect)
108
+
109
+ /// UIKit's keyboard types; the browser shows its own keyboard.
110
+ public enum UIKeyboardType: Int, Hashable, Sendable {
111
+ case `default`, asciiCapable, numbersAndPunctuation, URL, numberPad, phonePad, namePhonePad,
112
+ emailAddress, decimalPad, twitter, webSearch, asciiCapableNumberPad
113
+ }
114
+
115
+ /// UIKit's content types for autofill, as names.
116
+ public struct UITextContentType: Hashable, Sendable {
117
+ public let rawValue: String
118
+ public init(rawValue: String) { self.rawValue = rawValue }
119
+
120
+ public static let name = UITextContentType(rawValue: "name")
121
+ public static let givenName = UITextContentType(rawValue: "givenName")
122
+ public static let familyName = UITextContentType(rawValue: "familyName")
123
+ public static let emailAddress = UITextContentType(rawValue: "emailAddress")
124
+ public static let telephoneNumber = UITextContentType(rawValue: "telephoneNumber")
125
+ public static let username = UITextContentType(rawValue: "username")
126
+ public static let password = UITextContentType(rawValue: "password")
127
+ public static let newPassword = UITextContentType(rawValue: "newPassword")
128
+ public static let oneTimeCode = UITextContentType(rawValue: "oneTimeCode")
129
+ public static let URL = UITextContentType(rawValue: "URL")
130
+ public static let fullStreetAddress = UITextContentType(rawValue: "fullStreetAddress")
131
+ public static let postalCode = UITextContentType(rawValue: "postalCode")
132
+ public static let creditCardNumber = UITextContentType(rawValue: "creditCardNumber")
133
+ }
134
+
135
+ public struct TextInputAutocapitalization: Hashable, Sendable {
136
+ let name: String
137
+ public static let never = TextInputAutocapitalization(name: "never")
138
+ public static let words = TextInputAutocapitalization(name: "words")
139
+ public static let sentences = TextInputAutocapitalization(name: "sentences")
140
+ public static let characters = TextInputAutocapitalization(name: "characters")
141
+ }
142
+
143
+ nonisolated extension View {
144
+ public func keyboardType(_ type: UIKeyboardType) -> some View { self }
145
+ public func textContentType(_ textContentType: UITextContentType?) -> some View { self }
146
+ public func autocorrectionDisabled(_ disable: Bool = true) -> some View { self }
147
+ /// The deprecated spelling of `autocorrectionDisabled(_:)`.
148
+ public func disableAutocorrection(_ disable: Bool?) -> some View { self }
149
+ public func textInputAutocapitalization(_ autocapitalization: TextInputAutocapitalization?) -> some View { self }
150
+ }
151
+
152
+ // MARK: - Labels and identifiers kept for event scripts
153
+
154
+ /// An `accessibilityLabel` / `accessibilityIdentifier` carried by the
155
+ /// elements a view produces. It is not sent to the renderer: headless event
156
+ /// scripts resolve selectors against it (Sources/SwiftUI/Runtime/Replay.swift).
157
+ struct _AccessibilityMark: Equatable {
158
+ var label: String?
159
+ var identifier: String?
160
+
161
+ /// Fills what `self` lacks from an outer modifier's mark; the innermost wins.
162
+ func merged(with outer: _AccessibilityMark) -> _AccessibilityMark {
163
+ _AccessibilityMark(label: label ?? outer.label, identifier: identifier ?? outer.identifier)
164
+ }
165
+ }
166
+
167
+ protocol _AccessibilityProviding: _TraitBearing {
168
+ var _accessibility: _AccessibilityMark { get }
169
+ }
170
+
171
+ struct _AccessibilityView<Content: View> {
172
+ let content: Content
173
+ let mark: _AccessibilityMark
174
+ }
175
+ extension _AccessibilityView: _PrimitiveView {}
176
+ extension _AccessibilityView: _GroupView {
177
+ var _children: [any View] { [content] }
178
+ }
179
+ extension _AccessibilityView: _AccessibilityProviding {
180
+ var _accessibility: _AccessibilityMark { mark }
181
+ }
@@ -0,0 +1,33 @@
1
+ // More accessibility modifiers. The page has no assistive-technology bridge
2
+ // (see Accessibility.swift): a label still names the element for event
3
+ // scripts; actions, representations and the pre-iOS 14 `accessibility(…)`
4
+ // spellings of the other modifiers are accepted and change nothing.
5
+
6
+ public struct AccessibilityActionKind: Hashable, Sendable {
7
+ let name: String
8
+ public static let `default` = AccessibilityActionKind(name: "default")
9
+ public static let escape = AccessibilityActionKind(name: "escape")
10
+ public static let magicTap = AccessibilityActionKind(name: "magicTap")
11
+ public init(named name: Text) { self.name = name.content }
12
+ init(name: String) { self.name = name }
13
+ }
14
+
15
+ nonisolated extension View {
16
+ public func accessibilityRepresentation<V: View>(@ViewBuilder representation: () -> V) -> some View { self }
17
+
18
+ public func accessibilityAction(_ actionKind: AccessibilityActionKind = .default,
19
+ _ handler: @escaping () -> Void) -> some View { self }
20
+ public func accessibilityAction(named name: Text, _ handler: @escaping () -> Void) -> some View { self }
21
+ public func accessibilityAction(named nameKey: LocalizedStringKey, _ handler: @escaping () -> Void) -> some View { self }
22
+ @_disfavoredOverload
23
+ public func accessibilityAction<S: StringProtocol>(named name: S, _ handler: @escaping () -> Void) -> some View { self }
24
+
25
+ /// The pre-iOS 14 spellings.
26
+ public func accessibility(label: Text) -> some View { accessibilityLabel(label) }
27
+ public func accessibility(hint: Text) -> some View { self }
28
+ public func accessibility(value: Text) -> some View { self }
29
+ public func accessibility(hidden: Bool) -> some View { self }
30
+ public func accessibility(addTraits traits: AccessibilityTraits) -> some View { self }
31
+ public func accessibility(removeTraits traits: AccessibilityTraits) -> some View { self }
32
+ public func accessibility(identifier: String) -> some View { accessibilityIdentifier(identifier) }
33
+ }
@@ -0,0 +1,63 @@
1
+ /// `@AccessibilityFocusState` and `.accessibilityFocused`: where VoiceOver's
2
+ /// focus is. The page has no bridge to the browser's screen readers for the
3
+ /// app to move their focus, so the state is kept as the app sets it (a
4
+ /// `State`, like `@FocusState`'s) and moves nowhere on its own.
5
+ @propertyWrapper
6
+ public struct AccessibilityFocusState<Value: Hashable>: DynamicProperty {
7
+ let state: State<Value>
8
+
9
+ public init() where Value == Bool {
10
+ state = State(wrappedValue: false)
11
+ }
12
+
13
+ public init<T: Hashable>() where Value == T? {
14
+ state = State(wrappedValue: nil)
15
+ }
16
+
17
+ public init(for technologies: AccessibilityTechnologies) where Value == Bool {
18
+ state = State(wrappedValue: false)
19
+ }
20
+
21
+ public init<T: Hashable>(for technologies: AccessibilityTechnologies) where Value == T? {
22
+ state = State(wrappedValue: nil)
23
+ }
24
+
25
+ public var wrappedValue: Value {
26
+ get { state.wrappedValue }
27
+ nonmutating set { state.wrappedValue = newValue }
28
+ }
29
+
30
+ public var projectedValue: AccessibilityFocusState<Value>.Binding { Binding(state: state) }
31
+
32
+ /// `$focus`: what `.accessibilityFocused` takes.
33
+ @propertyWrapper
34
+ public struct Binding {
35
+ let state: State<Value>
36
+
37
+ public var wrappedValue: Value {
38
+ get { state.wrappedValue }
39
+ nonmutating set { state.wrappedValue = newValue }
40
+ }
41
+
42
+ public var projectedValue: AccessibilityFocusState<Value>.Binding { self }
43
+ }
44
+ }
45
+
46
+ extension AccessibilityFocusState: _StateProperty {
47
+ var _box: any _AnyStateBox { state.box }
48
+ }
49
+
50
+ /// The assistive technologies a focus state follows.
51
+ public struct AccessibilityTechnologies: OptionSet, Hashable, Sendable {
52
+ public let rawValue: Int
53
+ public init(rawValue: Int) { self.rawValue = rawValue }
54
+ public static let voiceOver = AccessibilityTechnologies(rawValue: 1 << 0)
55
+ public static let switchControl = AccessibilityTechnologies(rawValue: 1 << 1)
56
+ }
57
+
58
+ nonisolated extension View {
59
+ /// Accepted: no screen reader's focus is moved (see `AccessibilityFocusState`).
60
+ public func accessibilityFocused(_ binding: AccessibilityFocusState<Bool>.Binding) -> some View { self }
61
+ public func accessibilityFocused<Value: Hashable>(_ binding: AccessibilityFocusState<Value>.Binding,
62
+ equals value: Value) -> some View { self }
63
+ }
@@ -0,0 +1,221 @@
1
+ /// Alerts and confirmation dialogs. Like sheets, the runtime mounts the
2
+ /// actions as a second child of the presenting view while `isPresented` and
3
+ /// emits them inside a root-level `alert` element (see docs/ops-protocol.md,
4
+ /// Phase 8). A tap on one of the action buttons runs its action and dismisses;
5
+ /// a tap on the alert's own id dismisses without an action.
6
+
7
+ /// Views that present an alert or a confirmation dialog.
8
+ protocol _AlertPresenting: _TraitBearing {
9
+ var _isPresented: Binding<Bool> { get }
10
+ var _base: any View { get }
11
+ var _alertActions: any View { get }
12
+ var _alertTitle: String { get }
13
+ /// The message `Text`'s string, or nil when there is none.
14
+ var _alertMessage: String? { get }
15
+ /// `"alert"` or `"dialog"`.
16
+ var _alertStyle: String { get }
17
+ }
18
+
19
+ struct _AlertView<Base: View, Actions: View> {
20
+ let base: Base
21
+ let isPresented: Binding<Bool>
22
+ let title: String
23
+ let message: String?
24
+ let style: String
25
+ let actions: Actions
26
+ }
27
+ extension _AlertView: _PrimitiveView {}
28
+ extension _AlertView: _GroupView {
29
+ // Only the base is a regular child; the runtime adds the actions while presented.
30
+ var _children: [any View] { [base] }
31
+ }
32
+ extension _AlertView: _AlertPresenting {
33
+ var _isPresented: Binding<Bool> { isPresented }
34
+ var _base: any View { base }
35
+ var _alertActions: any View { actions }
36
+ var _alertTitle: String { title }
37
+ var _alertMessage: String? { message }
38
+ var _alertStyle: String { style }
39
+ }
40
+
41
+ /// The message of an alert: the string of the first `Text` in the view, if any.
42
+ @MainActor
43
+ private func _message(of view: any View) -> String? {
44
+ let text = _textContent(of: view)
45
+ return text.isEmpty ? nil : text
46
+ }
47
+
48
+ /// `presenting:` forms: the alert shows while `isPresented` and the data is
49
+ /// non-nil, and the closures receive the data.
50
+ @MainActor
51
+ private func _presentedData<T>(_ isPresented: Binding<Bool>, _ data: T?) -> (Binding<Bool>, T?) {
52
+ guard data != nil else {
53
+ return (Binding(get: { false }, set: { if !$0 { isPresented.wrappedValue = false } }), nil)
54
+ }
55
+ return (isPresented, data)
56
+ }
57
+
58
+ /// Whether a confirmation dialog's title is sent. iOS hides it for
59
+ /// `.automatic`, so only `.visible` sends it.
60
+ private func _dialogTitle(_ title: String, _ visibility: Visibility) -> String {
61
+ visibility == .visible ? title : ""
62
+ }
63
+
64
+ extension View {
65
+ // MARK: Alerts
66
+
67
+ public func alert<S: StringProtocol, A: View>(_ title: S, isPresented: Binding<Bool>,
68
+ @ViewBuilder actions: () -> A) -> some View {
69
+ _AlertView(base: self, isPresented: isPresented, title: String(title), message: nil,
70
+ style: "alert", actions: actions())
71
+ }
72
+
73
+ public func alert<S: StringProtocol, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
74
+ @ViewBuilder actions: () -> A,
75
+ @ViewBuilder message: () -> M) -> some View {
76
+ _AlertView(base: self, isPresented: isPresented, title: String(title), message: _message(of: message()),
77
+ style: "alert", actions: actions())
78
+ }
79
+
80
+ public func alert<A: View>(_ title: Text, isPresented: Binding<Bool>,
81
+ @ViewBuilder actions: () -> A) -> some View {
82
+ _AlertView(base: self, isPresented: isPresented, title: title.content, message: nil,
83
+ style: "alert", actions: actions())
84
+ }
85
+
86
+ public func alert<A: View, M: View>(_ title: Text, isPresented: Binding<Bool>,
87
+ @ViewBuilder actions: () -> A,
88
+ @ViewBuilder message: () -> M) -> some View {
89
+ _AlertView(base: self, isPresented: isPresented, title: title.content, message: _message(of: message()),
90
+ style: "alert", actions: actions())
91
+ }
92
+
93
+ public func alert<A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
94
+ @ViewBuilder actions: () -> A) -> some View {
95
+ _AlertView(base: self, isPresented: isPresented, title: titleKey.key, message: nil,
96
+ style: "alert", actions: actions())
97
+ }
98
+
99
+ public func alert<A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
100
+ @ViewBuilder actions: () -> A,
101
+ @ViewBuilder message: () -> M) -> some View {
102
+ _AlertView(base: self, isPresented: isPresented, title: titleKey.key, message: _message(of: message()),
103
+ style: "alert", actions: actions())
104
+ }
105
+
106
+ /// An alert built from `data`: shown while `isPresented` and `data` is non-nil.
107
+ public func alert<S: StringProtocol, T, A: View>(_ title: S, isPresented: Binding<Bool>, presenting data: T?,
108
+ @ViewBuilder actions: (T) -> A) -> some View {
109
+ let (presented, data) = _presentedData(isPresented, data)
110
+ return _AlertView(base: self, isPresented: presented, title: String(title), message: nil,
111
+ style: "alert", actions: data.map(actions))
112
+ }
113
+
114
+ public func alert<S: StringProtocol, T, A: View, M: View>(_ title: S, isPresented: Binding<Bool>, presenting data: T?,
115
+ @ViewBuilder actions: (T) -> A,
116
+ @ViewBuilder message: (T) -> M) -> some View {
117
+ let (presented, data) = _presentedData(isPresented, data)
118
+ return _AlertView(base: self, isPresented: presented, title: String(title),
119
+ message: data.flatMap { _message(of: message($0)) },
120
+ style: "alert", actions: data.map(actions))
121
+ }
122
+
123
+ public func alert<T, A: View>(_ title: Text, isPresented: Binding<Bool>, presenting data: T?,
124
+ @ViewBuilder actions: (T) -> A) -> some View {
125
+ let (presented, data) = _presentedData(isPresented, data)
126
+ return _AlertView(base: self, isPresented: presented, title: title.content, message: nil,
127
+ style: "alert", actions: data.map(actions))
128
+ }
129
+
130
+ public func alert<T, A: View, M: View>(_ title: Text, isPresented: Binding<Bool>, presenting data: T?,
131
+ @ViewBuilder actions: (T) -> A,
132
+ @ViewBuilder message: (T) -> M) -> some View {
133
+ let (presented, data) = _presentedData(isPresented, data)
134
+ return _AlertView(base: self, isPresented: presented, title: title.content,
135
+ message: data.flatMap { _message(of: message($0)) },
136
+ style: "alert", actions: data.map(actions))
137
+ }
138
+
139
+ public func alert<T, A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>, presenting data: T?,
140
+ @ViewBuilder actions: (T) -> A) -> some View {
141
+ let (presented, data) = _presentedData(isPresented, data)
142
+ return _AlertView(base: self, isPresented: presented, title: titleKey.key, message: nil,
143
+ style: "alert", actions: data.map(actions))
144
+ }
145
+
146
+ public func alert<T, A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>, presenting data: T?,
147
+ @ViewBuilder actions: (T) -> A,
148
+ @ViewBuilder message: (T) -> M) -> some View {
149
+ let (presented, data) = _presentedData(isPresented, data)
150
+ return _AlertView(base: self, isPresented: presented, title: titleKey.key,
151
+ message: data.flatMap { _message(of: message($0)) },
152
+ style: "alert", actions: data.map(actions))
153
+ }
154
+
155
+ // MARK: Confirmation dialogs
156
+
157
+ public func confirmationDialog<S: StringProtocol, A: View>(_ title: S, isPresented: Binding<Bool>,
158
+ titleVisibility: Visibility = .automatic,
159
+ @ViewBuilder actions: () -> A) -> some View {
160
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(String(title), titleVisibility),
161
+ message: nil, style: "dialog", actions: actions())
162
+ }
163
+
164
+ public func confirmationDialog<S: StringProtocol, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
165
+ titleVisibility: Visibility = .automatic,
166
+ @ViewBuilder actions: () -> A,
167
+ @ViewBuilder message: () -> M) -> some View {
168
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(String(title), titleVisibility),
169
+ message: _message(of: message()), style: "dialog", actions: actions())
170
+ }
171
+
172
+ public func confirmationDialog<A: View>(_ title: Text, isPresented: Binding<Bool>,
173
+ titleVisibility: Visibility = .automatic,
174
+ @ViewBuilder actions: () -> A) -> some View {
175
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(title.content, titleVisibility),
176
+ message: nil, style: "dialog", actions: actions())
177
+ }
178
+
179
+ public func confirmationDialog<A: View, M: View>(_ title: Text, isPresented: Binding<Bool>,
180
+ titleVisibility: Visibility = .automatic,
181
+ @ViewBuilder actions: () -> A,
182
+ @ViewBuilder message: () -> M) -> some View {
183
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(title.content, titleVisibility),
184
+ message: _message(of: message()), style: "dialog", actions: actions())
185
+ }
186
+
187
+ public func confirmationDialog<A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
188
+ titleVisibility: Visibility = .automatic,
189
+ @ViewBuilder actions: () -> A) -> some View {
190
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(titleKey.key, titleVisibility),
191
+ message: nil, style: "dialog", actions: actions())
192
+ }
193
+
194
+ public func confirmationDialog<A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
195
+ titleVisibility: Visibility = .automatic,
196
+ @ViewBuilder actions: () -> A,
197
+ @ViewBuilder message: () -> M) -> some View {
198
+ _AlertView(base: self, isPresented: isPresented, title: _dialogTitle(titleKey.key, titleVisibility),
199
+ message: _message(of: message()), style: "dialog", actions: actions())
200
+ }
201
+
202
+ public func confirmationDialog<S: StringProtocol, T, A: View>(_ title: S, isPresented: Binding<Bool>,
203
+ titleVisibility: Visibility = .automatic,
204
+ presenting data: T?,
205
+ @ViewBuilder actions: (T) -> A) -> some View {
206
+ let (presented, data) = _presentedData(isPresented, data)
207
+ return _AlertView(base: self, isPresented: presented, title: _dialogTitle(String(title), titleVisibility),
208
+ message: nil, style: "dialog", actions: data.map(actions))
209
+ }
210
+
211
+ public func confirmationDialog<S: StringProtocol, T, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
212
+ titleVisibility: Visibility = .automatic,
213
+ presenting data: T?,
214
+ @ViewBuilder actions: (T) -> A,
215
+ @ViewBuilder message: (T) -> M) -> some View {
216
+ let (presented, data) = _presentedData(isPresented, data)
217
+ return _AlertView(base: self, isPresented: presented, title: _dialogTitle(String(title), titleVisibility),
218
+ message: data.flatMap { _message(of: message($0)) },
219
+ style: "dialog", actions: data.map(actions))
220
+ }
221
+ }
@@ -0,0 +1,65 @@
1
+ // Custom alignments (`AlignmentID`) and `.alignmentGuide`. The page lays
2
+ // out stacks with the built-in guides only, so a custom alignment aligns like
3
+ // the built-in one its default value matches (an `AlignmentID` whose
4
+ // `defaultValue` is the height is `.bottom`).
5
+ //
6
+ // `.alignmentGuide(g) { d in … }` moves the view's guide `g`: where a stack,
7
+ // a `ZStack`, a frame or an overlay aligns the view by `g`, the view's guide
8
+ // value, not the default (0, half or all of its width or height), meets the
9
+ // container's. The page knows the view's size, Swift knows the closure: the
10
+ // closure is evaluated at three sizes and sent as `a + b·width + c·height`,
11
+ // which is exact for the guides apps write (`d[.trailing] + 4`,
12
+ // `d.height / 2`, `-10`) and a straight-line fit for any other. The list-row
13
+ // separator guides are accepted and change nothing.
14
+
15
+ public protocol AlignmentID {
16
+ static func defaultValue(in context: ViewDimensions) -> CGFloat
17
+ }
18
+
19
+ extension HorizontalAlignment {
20
+ /// The built-in guide `id`'s default value matches: leading at 0, trailing at the width, else center.
21
+ public init(_ id: AlignmentID.Type) {
22
+ switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
23
+ case 0: self = .leading
24
+ case 1: self = .trailing
25
+ default: self = .center
26
+ }
27
+ }
28
+
29
+ /// Where a list row's separator starts: accepted, the page draws full-width separators.
30
+ public static let listRowSeparatorLeading = HorizontalAlignment(name: "leading")
31
+ public static let listRowSeparatorTrailing = HorizontalAlignment(name: "trailing")
32
+ }
33
+
34
+ extension VerticalAlignment {
35
+ /// The built-in guide `id`'s default value matches: top at 0, bottom at the height, else center.
36
+ public init(_ id: AlignmentID.Type) {
37
+ switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
38
+ case 0: self = .top
39
+ case 1: self = .bottom
40
+ default: self = .center
41
+ }
42
+ }
43
+ }
44
+
45
+ nonisolated extension View {
46
+ /// Moves the view's horizontal guide `g` to `computeValue(dimensions)`.
47
+ public func alignmentGuide(_ g: HorizontalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
48
+ _styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "horizontal", name: g.name, computeValue) }
49
+ }
50
+
51
+ /// Moves the view's vertical guide `g` to `computeValue(dimensions)`.
52
+ public func alignmentGuide(_ g: VerticalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
53
+ _styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "vertical", name: g.name, computeValue) }
54
+ }
55
+ }
56
+
57
+ /// `{"axis", "name", "value": [a, b, c]}`: the guide is `a + b·width + c·height`,
58
+ /// fitted from the closure at sizes 0×0, 100×0 and 0×100.
59
+ func _alignmentGuideJSON(axis: String, name: String, _ computeValue: (ViewDimensions) -> CGFloat) -> _JSON {
60
+ let origin = computeValue(ViewDimensions(width: 0, height: 0))
61
+ let wide = computeValue(ViewDimensions(width: 100, height: 0))
62
+ let tall = computeValue(ViewDimensions(width: 0, height: 100))
63
+ let terms = [origin, (wide - origin) / 100, (tall - origin) / 100].map { $0.isFinite ? _round2($0 * 100) / 100 : 0 }
64
+ return .object(["axis": .string(axis), "name": .string(name), "value": .array(terms.map(_JSON.number))])
65
+ }