@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,185 @@
1
+ // MARK: - Picker styles
2
+
3
+ public protocol PickerStyle {
4
+ var _name: String { get }
5
+ }
6
+ public struct DefaultPickerStyle: PickerStyle {
7
+ public init() {}
8
+ public var _name: String { "menu" }
9
+ }
10
+ public struct SegmentedPickerStyle: PickerStyle {
11
+ public init() {}
12
+ public var _name: String { "segmented" }
13
+ }
14
+ public struct MenuPickerStyle: PickerStyle {
15
+ public init() {}
16
+ public var _name: String { "menu" }
17
+ }
18
+ public struct InlinePickerStyle: PickerStyle {
19
+ public init() {}
20
+ public var _name: String { "inline" }
21
+ }
22
+ public struct WheelPickerStyle: PickerStyle {
23
+ public init() {}
24
+ public var _name: String { "menu" }
25
+ }
26
+ extension PickerStyle where Self == DefaultPickerStyle {
27
+ public static var automatic: DefaultPickerStyle { DefaultPickerStyle() }
28
+ }
29
+ extension PickerStyle where Self == SegmentedPickerStyle {
30
+ public static var segmented: SegmentedPickerStyle { SegmentedPickerStyle() }
31
+ }
32
+ extension PickerStyle where Self == MenuPickerStyle {
33
+ public static var menu: MenuPickerStyle { MenuPickerStyle() }
34
+ }
35
+ extension PickerStyle where Self == InlinePickerStyle {
36
+ public static var inline: InlinePickerStyle { InlinePickerStyle() }
37
+ }
38
+ extension PickerStyle where Self == WheelPickerStyle {
39
+ public static var wheel: WheelPickerStyle { WheelPickerStyle() }
40
+ }
41
+
42
+ nonisolated extension View {
43
+ public func pickerStyle<S: PickerStyle>(_ style: S) -> some View {
44
+ environment(\._pickerStyle, style._name)
45
+ }
46
+ }
47
+
48
+ enum _PickerStyleKey: EnvironmentKey { static let defaultValue = "menu" }
49
+ enum _ListStyleKey: EnvironmentKey { static let defaultValue = "insetGrouped" }
50
+
51
+ extension EnvironmentValues {
52
+ var _pickerStyle: String {
53
+ get { self[_PickerStyleKey.self] }
54
+ set { self[_PickerStyleKey.self] = newValue }
55
+ }
56
+
57
+ var _listStyle: String {
58
+ get { self[_ListStyleKey.self] }
59
+ set { self[_ListStyleKey.self] = newValue }
60
+ }
61
+ }
62
+
63
+ // MARK: - Picker
64
+
65
+ protocol _PickerHost: _TraitBearing {
66
+ var _labelView: any View { get }
67
+ var _options: any View { get }
68
+ func _selectedIndex(tags: [AnyHashable?]) -> Int
69
+ func _select(index: Int, tags: [AnyHashable?])
70
+ }
71
+
72
+ /// A control for selecting one of several options. Options are the content's
73
+ /// children; each option's label is its text, and its identity is its `tag`
74
+ /// (or its `ForEach` id).
75
+ public struct Picker<Label: View, SelectionValue: Hashable, Content: View> {
76
+ let label: any View
77
+ let selection: Binding<SelectionValue>
78
+ let content: Content
79
+
80
+ public init(selection: Binding<SelectionValue>, @ViewBuilder content: () -> Content,
81
+ @ViewBuilder label: () -> Label) {
82
+ self.label = label()
83
+ self.selection = selection
84
+ self.content = content()
85
+ }
86
+ }
87
+
88
+ extension Picker where Label == Text {
89
+ public init(_ titleKey: LocalizedStringKey, selection: Binding<SelectionValue>, @ViewBuilder content: () -> Content) {
90
+ self.label = Text(titleKey)
91
+ self.selection = selection
92
+ self.content = content()
93
+ }
94
+
95
+ @_disfavoredOverload
96
+ public init<S: StringProtocol>(_ title: S, selection: Binding<SelectionValue>,
97
+ @ViewBuilder content: () -> Content) {
98
+ self.label = Text(title)
99
+ self.selection = selection
100
+ self.content = content()
101
+ }
102
+ }
103
+
104
+ extension Picker: _PrimitiveView {}
105
+ extension Picker: _HostView {
106
+ var _kind: String { "picker" }
107
+ func _props(in environment: EnvironmentValues) -> _JSON { .object([:]) }
108
+ // Options, selection and the handler are produced by the runtime.
109
+ }
110
+ extension Picker: _PickerHost {
111
+ var _labelView: any View { label }
112
+ var _options: any View { content }
113
+
114
+ func _selectedIndex(tags: [AnyHashable?]) -> Int {
115
+ let current = AnyHashable(selection.wrappedValue)
116
+ return tags.firstIndex { $0 == current } ?? 0
117
+ }
118
+
119
+ func _select(index: Int, tags: [AnyHashable?]) {
120
+ guard index < tags.count, let tag = tags[index], let value = tag.base as? SelectionValue else { return }
121
+ selection.wrappedValue = value
122
+ }
123
+ }
124
+
125
+ /// The plain text of a label view: the first `Text` found, if any.
126
+ @MainActor
127
+ func _textContent(of view: any View) -> String {
128
+ if let text = view as? Text { return text.content }
129
+ if let text = view as? _PlainText { return text.content }
130
+ if let text = view as? _RichText { return text.text.content }
131
+ if let label = view as? any _TabItemProviding { return _textContent(of: label._tabLabel) }
132
+ if let tagged = view as? any _TagProviding { return _textContent(of: tagged._tagged) }
133
+ if let group = view as? any _GroupView {
134
+ for child in group._children {
135
+ let text = _textContent(of: child)
136
+ if !text.isEmpty { return text }
137
+ }
138
+ return ""
139
+ }
140
+ if let host = view as? any _HostView {
141
+ for child in host._content {
142
+ let text = _textContent(of: child)
143
+ if !text.isEmpty { return text }
144
+ }
145
+ return ""
146
+ }
147
+ func open<V: View>(_ view: V) -> any View { view.body }
148
+ return _textContent(of: open(view))
149
+ }
150
+
151
+ /// The first system image name in a label view, if any.
152
+ @MainActor
153
+ func _systemImage(of view: any View) -> String? {
154
+ if let image = view as? Image { return image.systemName }
155
+ if let label = view as? any _TabItemProviding { return _systemImage(of: label._tabLabel) }
156
+ if let tagged = view as? any _TagProviding { return _systemImage(of: tagged._tagged) }
157
+ if let group = view as? any _GroupView {
158
+ for child in group._children {
159
+ if let name = _systemImage(of: child) { return name }
160
+ }
161
+ return nil
162
+ }
163
+ if let host = view as? any _HostView {
164
+ for child in host._content {
165
+ if let name = _systemImage(of: child) { return name }
166
+ }
167
+ return nil
168
+ }
169
+ func open<V: View>(_ view: V) -> any View { view.body }
170
+ return _systemImage(of: open(view))
171
+ }
172
+
173
+ // MARK: - Form
174
+
175
+ /// A container for grouped controls, drawn as a grouped list.
176
+ public struct Form<Content: View> {
177
+ let content: Content
178
+ public init(@ViewBuilder content: () -> Content) { self.content = content() }
179
+ }
180
+ extension Form: _PrimitiveView {}
181
+ extension Form: _HostView {
182
+ var _kind: String { "list" }
183
+ func _props(in environment: EnvironmentValues) -> _JSON { .object(["style": .string("grouped")]) }
184
+ var _content: [any View] { [content] }
185
+ }
@@ -0,0 +1,77 @@
1
+ // Pointer and hardware-keyboard modifiers of iPad and Mac apps. The page
2
+ // shows an iPhone: there is no hover, no tooltip and no command key, so these
3
+ // are accepted and do nothing (`onHover` never calls its action, as on an
4
+ // iPhone).
5
+
6
+ public struct KeyEquivalent: Hashable, Sendable, ExpressibleByExtendedGraphemeClusterLiteral {
7
+ public let character: Character
8
+ public init(_ character: Character) { self.character = character }
9
+ public init(extendedGraphemeClusterLiteral value: Character) { character = value }
10
+
11
+ public static let upArrow = KeyEquivalent("\u{F700}")
12
+ public static let downArrow = KeyEquivalent("\u{F701}")
13
+ public static let leftArrow = KeyEquivalent("\u{F702}")
14
+ public static let rightArrow = KeyEquivalent("\u{F703}")
15
+ public static let escape = KeyEquivalent("\u{1B}")
16
+ public static let delete = KeyEquivalent("\u{8}")
17
+ public static let deleteForward = KeyEquivalent("\u{F728}")
18
+ public static let home = KeyEquivalent("\u{F729}")
19
+ public static let end = KeyEquivalent("\u{F72B}")
20
+ public static let pageUp = KeyEquivalent("\u{F72C}")
21
+ public static let pageDown = KeyEquivalent("\u{F72D}")
22
+ public static let clear = KeyEquivalent("\u{F739}")
23
+ public static let tab = KeyEquivalent("\t")
24
+ public static let space = KeyEquivalent(" ")
25
+ public static let `return` = KeyEquivalent("\r")
26
+ }
27
+
28
+ public struct EventModifiers: OptionSet, Hashable, Sendable {
29
+ public let rawValue: Int
30
+ public init(rawValue: Int) { self.rawValue = rawValue }
31
+ public static let capsLock = EventModifiers(rawValue: 1 << 0)
32
+ public static let shift = EventModifiers(rawValue: 1 << 1)
33
+ public static let control = EventModifiers(rawValue: 1 << 2)
34
+ public static let option = EventModifiers(rawValue: 1 << 3)
35
+ public static let command = EventModifiers(rawValue: 1 << 4)
36
+ public static let numericPad = EventModifiers(rawValue: 1 << 5)
37
+ public static let all: EventModifiers = [.capsLock, .shift, .control, .option, .command, .numericPad]
38
+ }
39
+
40
+ public struct KeyboardShortcut: Hashable, Sendable {
41
+ public let key: KeyEquivalent
42
+ public let modifiers: EventModifiers
43
+ public init(_ key: KeyEquivalent, modifiers: EventModifiers = .command) {
44
+ self.key = key
45
+ self.modifiers = modifiers
46
+ }
47
+ public static let defaultAction = KeyboardShortcut(.return, modifiers: [])
48
+ public static let cancelAction = KeyboardShortcut(.escape, modifiers: [])
49
+ }
50
+
51
+ nonisolated extension View {
52
+ public func keyboardShortcut(_ key: KeyEquivalent, modifiers: EventModifiers = .command) -> some View { self }
53
+ public func keyboardShortcut(_ shortcut: KeyboardShortcut) -> some View { self }
54
+ public func keyboardShortcut(_ shortcut: KeyboardShortcut?) -> some View { self }
55
+
56
+ /// Never called: an iPhone has no pointer to hover with.
57
+ public func onHover(perform action: @escaping (Bool) -> Void) -> some View { self }
58
+
59
+ /// A tooltip; the page shows none.
60
+ public func help(_ text: Text) -> some View { self }
61
+ public func help(_ textKey: LocalizedStringKey) -> some View { self }
62
+ @_disfavoredOverload
63
+ public func help<S: StringProtocol>(_ text: S) -> some View { self }
64
+ }
65
+
66
+ /// The pointer effect of an iPad; the page draws none.
67
+ public struct HoverEffect: Hashable, Sendable {
68
+ let name: String
69
+ public static let automatic = HoverEffect(name: "automatic")
70
+ public static let highlight = HoverEffect(name: "highlight")
71
+ public static let lift = HoverEffect(name: "lift")
72
+ }
73
+
74
+ nonisolated extension View {
75
+ public func hoverEffect(_ effect: HoverEffect = .automatic, isEnabled: Bool = true) -> some View { self }
76
+ public func hoverEffectDisabled(_ disabled: Bool = true) -> some View { self }
77
+ }
@@ -0,0 +1,41 @@
1
+ // `.popover`: on an iPhone (a compact width) a popover is presented as a
2
+ // sheet, so here it is one: the same `sheet` element `.sheet` makes. The
3
+ // attachment anchor and arrow edge are accepted;
4
+ // `.presentationCompactAdaptation(_:)` is accepted and changes nothing
5
+ // (a popover never draws as a bubble).
6
+
7
+ public enum PopoverAttachmentAnchor {
8
+ case rect(Anchor<CGRect>.Source)
9
+ case point(UnitPoint)
10
+ }
11
+
12
+ public struct PresentationAdaptation: Hashable, Sendable {
13
+ let name: String
14
+ public static let automatic = PresentationAdaptation(name: "automatic")
15
+ public static let none = PresentationAdaptation(name: "none")
16
+ public static let popover = PresentationAdaptation(name: "popover")
17
+ public static let sheet = PresentationAdaptation(name: "sheet")
18
+ public static let fullScreenCover = PresentationAdaptation(name: "fullScreenCover")
19
+ }
20
+
21
+ extension View {
22
+ public func popover<Content: View>(isPresented: Binding<Bool>,
23
+ attachmentAnchor: PopoverAttachmentAnchor = .rect(.bounds),
24
+ arrowEdge: Edge? = nil,
25
+ @ViewBuilder content: @escaping () -> Content) -> some View {
26
+ sheet(isPresented: isPresented, content: content)
27
+ }
28
+
29
+ public func popover<Item: Identifiable, Content: View>(item: Binding<Item?>,
30
+ attachmentAnchor: PopoverAttachmentAnchor = .rect(.bounds),
31
+ arrowEdge: Edge? = nil,
32
+ @ViewBuilder content: @escaping (Item) -> Content) -> some View {
33
+ sheet(item: item, content: content)
34
+ }
35
+ }
36
+
37
+ nonisolated extension View {
38
+ public func presentationCompactAdaptation(_ adaptation: PresentationAdaptation) -> some View { self }
39
+ public func presentationCompactAdaptation(horizontal: PresentationAdaptation,
40
+ vertical: PresentationAdaptation) -> some View { self }
41
+ }
@@ -0,0 +1,262 @@
1
+ // Preferences: values views pass up to their ancestors, the way environment
2
+ // values pass down. A view sets one with `.preference(key:value:)`; the
3
+ // reconciler combines a subtree's values with the key's `reduce` (children in
4
+ // order) after the subtree's bodies ran, and `.onPreferenceChange`,
5
+ // `.overlayPreferenceValue` and `.backgroundPreferenceValue` read the result.
6
+ // A subtree that is skipped keeps the values it produced last time.
7
+ //
8
+ // Anchors: the Swift side has no layout, so an anchor resolves against the
9
+ // size the renderer reports for the anchored view (its element carries
10
+ // `reportsSize`, like a `GeometryReader`'s), in the view's own coordinates:
11
+ // `.bounds` is `CGRect(origin: .zero, size: measured)`. Until the first
12
+ // report it is zero, and the preference updates when the size arrives.
13
+
14
+ /// A named value produced by a view, combined over a subtree with `reduce`.
15
+ public protocol PreferenceKey {
16
+ associatedtype Value
17
+ static var defaultValue: Value { get }
18
+ static func reduce(value: inout Value, nextValue: () -> Value)
19
+ }
20
+
21
+ extension PreferenceKey where Value: ExpressibleByNilLiteral {
22
+ public static var defaultValue: Value { nil }
23
+ }
24
+
25
+ /// The preference values a subtree produced, by key type.
26
+ struct _PreferenceValues {
27
+ struct Entry {
28
+ var value: Any
29
+ /// The key's `reduce`, for combining with a later sibling's value.
30
+ let reduce: (Any, Any) -> Any
31
+ }
32
+
33
+ var entries: [ObjectIdentifier: Entry] = [:]
34
+
35
+ var isEmpty: Bool { entries.isEmpty }
36
+
37
+ subscript<K: PreferenceKey>(key: K.Type) -> K.Value? {
38
+ entries[ObjectIdentifier(key)]?.value as? K.Value
39
+ }
40
+
41
+ /// The key's combined value, or its default when nothing in the subtree set it.
42
+ func value<K: PreferenceKey>(of key: K.Type) -> K.Value { self[key] ?? K.defaultValue }
43
+
44
+ mutating func set<K: PreferenceKey>(_ key: K.Type, to value: K.Value) {
45
+ entries[ObjectIdentifier(key)] = Entry(value: value) { first, next in
46
+ var combined = first as! K.Value
47
+ K.reduce(value: &combined) { next as! K.Value }
48
+ return combined
49
+ }
50
+ }
51
+
52
+ mutating func remove<K: PreferenceKey>(_ key: K.Type) {
53
+ entries[ObjectIdentifier(key)] = nil
54
+ }
55
+
56
+ /// Adds a later sibling's values: a key both set is reduced, in order.
57
+ mutating func merge(_ later: _PreferenceValues) {
58
+ for (key, entry) in later.entries {
59
+ if var existing = entries[key] {
60
+ existing.value = existing.reduce(existing.value, entry.value)
61
+ entries[key] = existing
62
+ } else {
63
+ entries[key] = entry
64
+ }
65
+ }
66
+ }
67
+ }
68
+
69
+ /// A view that changes its subtree's preference values (after its children's are combined).
70
+ protocol _PreferenceWriting: _TraitBearing {
71
+ func _write(_ values: inout _PreferenceValues, measured: CGSize)
72
+ }
73
+
74
+ /// A view that reads its subtree's combined values.
75
+ protocol _PreferenceReading: _TraitBearing {
76
+ /// Called after the subtree reconciled; `last` is what the previous call returned.
77
+ @MainActor func _read(_ values: _PreferenceValues, last: Any?) -> (keep: Any?, action: (@MainActor () -> Void)?)
78
+ }
79
+
80
+ /// A view whose element reports its laid-out size (`reportsSize`).
81
+ protocol _SizeReporting: _TraitBearing {}
82
+
83
+ /// `overlayPreferenceValue` / `backgroundPreferenceValue`: the decoration is
84
+ /// made from the base's combined value, after the base reconciled.
85
+ protocol _PreferenceValueDecorating: _TraitBearing {
86
+ var _base: any View { get }
87
+ func _decoration(from values: _PreferenceValues) -> any View
88
+ }
89
+
90
+ // MARK: - Setting
91
+
92
+ struct _PreferenceView<Content: View, Key: PreferenceKey> {
93
+ let content: Content
94
+ let value: Key.Value
95
+ }
96
+ extension _PreferenceView: _PrimitiveView, _GroupView {
97
+ var _children: [any View] { [content] }
98
+ }
99
+ extension _PreferenceView: _PreferenceWriting {
100
+ func _write(_ values: inout _PreferenceValues, measured: CGSize) { values.set(Key.self, to: value) }
101
+ }
102
+
103
+ struct _TransformPreferenceView<Content: View, Key: PreferenceKey> {
104
+ let content: Content
105
+ let transform: (inout Key.Value) -> Void
106
+ }
107
+ extension _TransformPreferenceView: _PrimitiveView, _GroupView {
108
+ var _children: [any View] { [content] }
109
+ }
110
+ extension _TransformPreferenceView: _PreferenceWriting {
111
+ func _write(_ values: inout _PreferenceValues, measured: CGSize) {
112
+ var value = values.value(of: Key.self)
113
+ transform(&value)
114
+ values.set(Key.self, to: value)
115
+ }
116
+ }
117
+
118
+ nonisolated extension View {
119
+ /// Sets the key's value for this view; it replaces what the content set for the key.
120
+ public func preference<K: PreferenceKey>(key: K.Type = K.self, value: K.Value) -> some View {
121
+ _PreferenceView<Self, K>(content: self, value: value)
122
+ }
123
+
124
+ /// Changes the key's value the content produced (its default when it set none).
125
+ public func transformPreference<K: PreferenceKey>(_ key: K.Type = K.self, _ callback: @escaping (inout K.Value) -> Void) -> some View {
126
+ _TransformPreferenceView<Self, K>(content: self, transform: callback)
127
+ }
128
+ }
129
+
130
+ // MARK: - Reading
131
+
132
+ struct _PreferenceChangeView<Content: View, Key: PreferenceKey> where Key.Value: Equatable {
133
+ let content: Content
134
+ let action: (Key.Value) -> Void
135
+ }
136
+ extension _PreferenceChangeView: _PrimitiveView, _GroupView {
137
+ var _children: [any View] { [content] }
138
+ }
139
+ extension _PreferenceChangeView: _PreferenceReading {
140
+ @MainActor func _read(_ values: _PreferenceValues, last: Any?) -> (keep: Any?, action: (@MainActor () -> Void)?) {
141
+ let value = values.value(of: Key.self)
142
+ if let last = last as? Key.Value, last == value { return (last, nil) }
143
+ let action = self.action
144
+ return (value, { action(value) })
145
+ }
146
+ }
147
+
148
+ struct _PreferenceDecorationView<Content: View, Key: PreferenceKey, Decoration: View> {
149
+ let content: Content
150
+ let decoration: (Key.Value) -> Decoration
151
+ let role: String
152
+ let alignment: Alignment
153
+ }
154
+ extension _PreferenceDecorationView: _PrimitiveView {}
155
+ extension _PreferenceDecorationView: _HostView {
156
+ var _kind: String { "decorated" }
157
+ func _props(in environment: EnvironmentValues) -> _JSON {
158
+ .object(["role": .string(role), "alignment": .string(alignment._name)])
159
+ }
160
+ var _content: [any View] { [content] }
161
+ }
162
+ extension _PreferenceDecorationView: _PreferenceValueDecorating {
163
+ var _base: any View { content }
164
+ func _decoration(from values: _PreferenceValues) -> any View { decoration(values.value(of: Key.self)) }
165
+ }
166
+
167
+ nonisolated extension View {
168
+ /// Runs `action` after a render in which the key's combined value in this
169
+ /// subtree changed (and after the first, with its initial value).
170
+ public func onPreferenceChange<K: PreferenceKey>(_ key: K.Type = K.self, perform action: @escaping (K.Value) -> Void) -> some View where K.Value: Equatable {
171
+ _PreferenceChangeView<Self, K>(content: self, action: action)
172
+ }
173
+
174
+ /// An overlay made from the key's combined value in this view.
175
+ public func overlayPreferenceValue<K: PreferenceKey, V: View>(_ key: K.Type, alignment: Alignment = .center, @ViewBuilder _ transform: @escaping (K.Value) -> V) -> some View {
176
+ _PreferenceDecorationView<Self, K, V>(content: self, decoration: transform, role: "overlay", alignment: alignment)
177
+ }
178
+
179
+ /// A background made from the key's combined value in this view.
180
+ public func backgroundPreferenceValue<K: PreferenceKey, V: View>(_ key: K.Type, alignment: Alignment = .center, @ViewBuilder _ transform: @escaping (K.Value) -> V) -> some View {
181
+ _PreferenceDecorationView<Self, K, V>(content: self, decoration: transform, role: "background", alignment: alignment)
182
+ }
183
+ }
184
+
185
+ // MARK: - Anchors
186
+
187
+ /// A geometric value of a view, resolved with a `GeometryProxy` subscript.
188
+ public struct Anchor<Value> {
189
+ let value: Value
190
+
191
+ /// How to make an anchor from a view's bounds.
192
+ public struct Source {
193
+ let resolve: (CGRect) -> Value
194
+ }
195
+ }
196
+ extension Anchor: Equatable where Value: Equatable {}
197
+ extension Anchor: Hashable where Value: Hashable {}
198
+ extension Anchor: Sendable where Value: Sendable {}
199
+
200
+ extension Anchor.Source where Value == CGRect {
201
+ public static var bounds: Anchor<CGRect>.Source { .init { $0 } }
202
+ public static func rect(_ r: CGRect) -> Anchor<CGRect>.Source { .init { _ in r } }
203
+ }
204
+
205
+ extension Anchor.Source where Value == CGPoint {
206
+ public static func point(_ p: CGPoint) -> Anchor<CGPoint>.Source { .init { _ in p } }
207
+ public static func unitPoint(_ p: UnitPoint) -> Anchor<CGPoint>.Source {
208
+ .init { CGPoint(x: $0.minX + p.x * $0.width, y: $0.minY + p.y * $0.height) }
209
+ }
210
+ public static var topLeading: Anchor<CGPoint>.Source { unitPoint(.topLeading) }
211
+ public static var top: Anchor<CGPoint>.Source { unitPoint(.top) }
212
+ public static var topTrailing: Anchor<CGPoint>.Source { unitPoint(.topTrailing) }
213
+ public static var leading: Anchor<CGPoint>.Source { unitPoint(.leading) }
214
+ public static var center: Anchor<CGPoint>.Source { unitPoint(.center) }
215
+ public static var trailing: Anchor<CGPoint>.Source { unitPoint(.trailing) }
216
+ public static var bottomLeading: Anchor<CGPoint>.Source { unitPoint(.bottomLeading) }
217
+ public static var bottom: Anchor<CGPoint>.Source { unitPoint(.bottom) }
218
+ public static var bottomTrailing: Anchor<CGPoint>.Source { unitPoint(.bottomTrailing) }
219
+ }
220
+
221
+ extension GeometryProxy {
222
+ /// The anchor's value, in the anchored view's own coordinates (see the file comment).
223
+ public subscript<T>(anchor: Anchor<T>) -> T { anchor.value }
224
+ }
225
+
226
+ struct _AnchorPreferenceView<Content: View, A, Key: PreferenceKey> {
227
+ let content: Content
228
+ let source: Anchor<A>.Source
229
+ /// Sets the value (`anchorPreference`) or changes it (`transformAnchorPreference`).
230
+ let write: (inout _PreferenceValues, Anchor<A>) -> Void
231
+ }
232
+ extension _AnchorPreferenceView: _PrimitiveView, _SizeReporting {}
233
+ extension _AnchorPreferenceView: _HostView {
234
+ var _kind: String { "zstack" }
235
+ func _props(in environment: EnvironmentValues) -> _JSON {
236
+ .object(["alignment": .string(Alignment.center._name), "reportsSize": .bool(true)])
237
+ }
238
+ var _content: [any View] { [content] }
239
+ }
240
+ extension _AnchorPreferenceView: _PreferenceWriting {
241
+ func _write(_ values: inout _PreferenceValues, measured: CGSize) {
242
+ write(&values, Anchor(value: source.resolve(CGRect(origin: .zero, size: measured))))
243
+ }
244
+ }
245
+
246
+ nonisolated extension View {
247
+ /// Sets the key's value from an anchor of this view's bounds.
248
+ public func anchorPreference<A, K: PreferenceKey>(key: K.Type = K.self, value: Anchor<A>.Source, transform: @escaping (Anchor<A>) -> K.Value) -> some View {
249
+ _AnchorPreferenceView<Self, A, K>(content: self, source: value) { values, anchor in
250
+ values.set(K.self, to: transform(anchor))
251
+ }
252
+ }
253
+
254
+ /// Changes the key's value with an anchor of this view's bounds.
255
+ public func transformAnchorPreference<A, K: PreferenceKey>(key: K.Type = K.self, value: Anchor<A>.Source, transform: @escaping (inout K.Value, Anchor<A>) -> Void) -> some View {
256
+ _AnchorPreferenceView<Self, A, K>(content: self, source: value) { values, anchor in
257
+ var current = values.value(of: K.self)
258
+ transform(&current, anchor)
259
+ values.set(K.self, to: current)
260
+ }
261
+ }
262
+ }
@@ -0,0 +1,122 @@
1
+ /// A height a sheet can rest at.
2
+ public struct PresentationDetent: Hashable, Sendable {
3
+ let name: String
4
+ public static let medium = PresentationDetent(name: "medium")
5
+ public static let large = PresentationDetent(name: "large")
6
+ /// A sheet this many points tall (`"height:<points>"`, capped at the large height).
7
+ public static func height(_ height: CGFloat) -> PresentationDetent { PresentationDetent(name: "height:\(Double(height))") }
8
+ /// A sheet this fraction of the screen tall (`"fraction:<f>"`, capped at the large height).
9
+ public static func fraction(_ fraction: CGFloat) -> PresentationDetent { PresentationDetent(name: "fraction:\(Double(fraction))") }
10
+
11
+ /// Orders detents smallest first (a height counts against an 852pt screen).
12
+ var _order: Double {
13
+ if name == "medium" { return 0.5 }
14
+ if name.hasPrefix("height:") { return (Double(name.dropFirst(7)) ?? 852) / 852 }
15
+ if name.hasPrefix("fraction:") { return Double(name.dropFirst(9)) ?? 1 }
16
+ return 1
17
+ }
18
+ }
19
+
20
+ /// Views that present a sheet. The runtime mounts the sheet content as a
21
+ /// second child and emits it as a root-level `sheet` element while presented.
22
+ protocol _SheetPresenting: _TraitBearing {
23
+ var _isPresented: Binding<Bool> { get }
24
+ var _onDismiss: (@MainActor () -> Void)? { get }
25
+ var _base: any View { get }
26
+ var _sheetContent: any View { get }
27
+ /// `.fullScreenCover`: the sheet's detents are `["full"]`.
28
+ var _fullScreen: Bool { get }
29
+ }
30
+
31
+ struct _SheetView<Base: View, Content: View> {
32
+ let base: Base
33
+ let isPresented: Binding<Bool>
34
+ let onDismiss: (@MainActor () -> Void)?
35
+ let content: Content
36
+ var fullScreen = false
37
+ }
38
+ extension _SheetView: _PrimitiveView {}
39
+ extension _SheetView: _GroupView {
40
+ // Only the base is a regular child; the runtime adds the sheet content.
41
+ var _children: [any View] { [base] }
42
+ }
43
+ extension _SheetView: _SheetPresenting {
44
+ var _isPresented: Binding<Bool> { isPresented }
45
+ var _onDismiss: (@MainActor () -> Void)? { onDismiss }
46
+ var _base: any View { base }
47
+ var _sheetContent: any View { content }
48
+ var _fullScreen: Bool { fullScreen }
49
+ }
50
+
51
+ protocol _DetentsModifying: _TraitBearing {
52
+ var _detents: [String] { get }
53
+ }
54
+
55
+ struct _DetentsView<Content: View> {
56
+ let content: Content
57
+ let detents: [String]
58
+ }
59
+ extension _DetentsView: _PrimitiveView {}
60
+ extension _DetentsView: _GroupView {
61
+ var _children: [any View] { [content] }
62
+ }
63
+ extension _DetentsView: _DetentsModifying {
64
+ var _detents: [String] { detents }
65
+ }
66
+
67
+ extension View {
68
+ /// Presents a sheet when `isPresented` is true.
69
+ public func sheet<Content: View>(isPresented: Binding<Bool>,
70
+ onDismiss: (@MainActor () -> Void)? = nil,
71
+ @ViewBuilder content: () -> Content) -> some View {
72
+ _SheetView(base: self, isPresented: isPresented, onDismiss: onDismiss, content: content())
73
+ }
74
+
75
+ /// Presents a sheet for a non-nil item; dismissing sets it back to nil.
76
+ public func sheet<Item: Identifiable, Content: View>(item: Binding<Item?>,
77
+ onDismiss: (@MainActor () -> Void)? = nil,
78
+ @ViewBuilder content: @escaping (Item) -> Content) -> some View {
79
+ let isPresented = Binding<Bool>(
80
+ get: { item.wrappedValue != nil },
81
+ set: { if !$0 { item.wrappedValue = nil } }
82
+ )
83
+ return _SheetView(base: self, isPresented: isPresented, onDismiss: onDismiss,
84
+ content: _ItemSheetContent(item: item, content: content))
85
+ }
86
+
87
+ /// Presents a sheet that fills the screen (`detents: ["full"]`).
88
+ public func fullScreenCover<Content: View>(isPresented: Binding<Bool>,
89
+ onDismiss: (@MainActor () -> Void)? = nil,
90
+ @ViewBuilder content: () -> Content) -> some View {
91
+ _SheetView(base: self, isPresented: isPresented, onDismiss: onDismiss, content: content(), fullScreen: true)
92
+ }
93
+
94
+ public func fullScreenCover<Item: Identifiable, Content: View>(item: Binding<Item?>,
95
+ onDismiss: (@MainActor () -> Void)? = nil,
96
+ @ViewBuilder content: @escaping (Item) -> Content) -> some View {
97
+ let isPresented = Binding<Bool>(
98
+ get: { item.wrappedValue != nil },
99
+ set: { if !$0 { item.wrappedValue = nil } }
100
+ )
101
+ return _SheetView(base: self, isPresented: isPresented, onDismiss: onDismiss,
102
+ content: _ItemSheetContent(item: item, content: content), fullScreen: true)
103
+ }
104
+
105
+ public func presentationDetents(_ detents: Set<PresentationDetent>) -> some View {
106
+ // Smallest first: the page presents the sheet at the first.
107
+ let sorted = detents.sorted { ($0._order, $0.name) < ($1._order, $1.name) }
108
+ return _DetentsView(content: self, detents: sorted.map(\.name))
109
+ }
110
+ }
111
+
112
+ /// The content of `.sheet(item:)`, built from the current item (empty once it is nil).
113
+ struct _ItemSheetContent<Item: Identifiable, Content: View>: View {
114
+ let item: Binding<Item?>
115
+ let content: (Item) -> Content
116
+
117
+ var body: some View {
118
+ if let value = item.wrappedValue {
119
+ content(value)
120
+ }
121
+ }
122
+ }