@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,64 @@
1
+ /// The `video` element (docs/ops-protocol.md, "Video and audio"): an HTML
2
+ /// `<video>` the page plays. The shim's SwiftUI has no video view of its own;
3
+ /// AVFoundation builds one on this (`AVPlayer`'s views: AVKit's
4
+ /// `VideoPlayer`, an `AVPlayerLayer` in a UIKit view), with the props worked
5
+ /// out from the player and a handler for the page's `video` events.
6
+ ///
7
+ /// Public so the frameworks above SwiftUI can emit the element; apps never
8
+ /// name it.
9
+ public struct _VideoElement {
10
+ let props: _JSON
11
+ let handler: (_JSON) -> Void
12
+
13
+ /// `props` are the element's (see the protocol document); `handler`
14
+ /// receives each `video` event whole (`{"type": "video", "id", "event", …}`).
15
+ public init(props: _JSON, handler: @escaping (_JSON) -> Void) {
16
+ self.props = props
17
+ self.handler = handler
18
+ }
19
+ }
20
+ extension _VideoElement: _PrimitiveView {}
21
+ extension _VideoElement: _HostView {
22
+ var _kind: String { "video" }
23
+ func _props(in environment: EnvironmentValues) -> _JSON { props }
24
+ var _handler: ((_JSON) -> Void)? { handler }
25
+ }
26
+
27
+ extension _Runtime {
28
+ /// The `response` fields for a headless `media` request (AVFoundation's
29
+ /// files and probes, QuickLook's previews): a `file` gets a stand-in URL,
30
+ /// a `probe` the `duration` / `width` / `height` of the `SB_RESPONSES`
31
+ /// entry whose `url` (exact) or `prefix` matches and that has a
32
+ /// `duration`, an `open` finds no tab to open (`opened: false`).
33
+ nonisolated static func _headlessMedia(params: _JSON, fixtures: [_JSON], serial: Int) -> [String: _JSON] {
34
+ guard case .object(let request) = params, case .string(let action)? = request["action"] else {
35
+ return ["error": .string("malformed request")]
36
+ }
37
+ switch action {
38
+ case "file":
39
+ return ["value": .object(["url": .string("blob:headless/\(serial)")])]
40
+ case "release":
41
+ return ["value": .object([:])]
42
+ case "open":
43
+ return ["value": .object(["opened": .bool(false)])]
44
+ case "probe":
45
+ guard case .string(let url)? = request["url"] else { return ["error": .string("malformed request")] }
46
+ let fixture = fixtures.first { item in
47
+ guard case .object(let fields) = item, fields["duration"] != nil else { return false }
48
+ if case .string(let exact)? = fields["url"], exact == url { return true }
49
+ if case .string(let prefix)? = fields["prefix"], url.hasPrefix(prefix) { return true }
50
+ return false
51
+ }
52
+ guard case .object(let fields)? = fixture else {
53
+ return ["error": .string("headless: no SB_RESPONSES entry with a duration for \(url)")]
54
+ }
55
+ return ["value": .object([
56
+ "duration": fields["duration"] ?? .null,
57
+ "width": fields["width"] ?? .number(0),
58
+ "height": fields["height"] ?? .number(0),
59
+ ])]
60
+ default:
61
+ return ["error": .string("headless: unknown media action \(action)")]
62
+ }
63
+ }
64
+ }
@@ -0,0 +1,215 @@
1
+ /// A type that represents part of your app's user interface.
2
+ ///
3
+ /// Mirrors SwiftUI's declaration, including main-actor isolation, so that a
4
+ /// type conforming to `View` in its primary declaration is main-actor
5
+ /// isolated on every platform.
6
+ @MainActor @preconcurrency
7
+ public protocol View {
8
+ associatedtype Body: View
9
+ @ViewBuilder var body: Self.Body { get }
10
+ }
11
+
12
+ extension Never: View {
13
+ public typealias Body = Never
14
+ public var body: Never { fatalError("Never has no body") }
15
+ }
16
+
17
+ /// Views the runtime renders directly instead of evaluating `body`.
18
+ public protocol _PrimitiveView: View where Body == Never {}
19
+
20
+ extension _PrimitiveView {
21
+ public var body: Never {
22
+ fatalError("\(Self.self) is a primitive view and has no body")
23
+ }
24
+ }
25
+
26
+ /// A view whose only job is to contribute other views to its parent.
27
+ /// Tuples, optionals, conditionals, `Group`, `AnyView` and `ForEach` are groups.
28
+ protocol _GroupView: _TraitBearing {
29
+ var _children: [any View] { get }
30
+ /// Stable identities for `_children`, when the group is keyed (`ForEach`).
31
+ var _keys: [AnyHashable]? { get }
32
+ /// Whether the group is more than a wrapper of one view: it has other
33
+ /// than one child, or keys. A modifier applied to such a group applies
34
+ /// to each of its children (`_StyledGroup`).
35
+ var _spreads: Bool { get }
36
+ }
37
+
38
+ extension _GroupView {
39
+ var _keys: [AnyHashable]? { nil }
40
+ var _spreads: Bool { _keys != nil || _children.count != 1 }
41
+ }
42
+
43
+ /// A view that becomes an element in the render tree (see docs/ops-protocol.md).
44
+ protocol _HostView: _TraitBearing {
45
+ var _kind: String { get }
46
+ func _props(in environment: EnvironmentValues) -> _JSON
47
+ var _content: [any View] { get }
48
+ /// Receives the event payload (`.null` for a tap).
49
+ var _handler: ((_JSON) -> Void)? { get }
50
+ }
51
+
52
+ extension _HostView {
53
+ var _content: [any View] { [] }
54
+ var _handler: ((_JSON) -> Void)? { nil }
55
+ }
56
+
57
+ // MARK: - ViewBuilder
58
+
59
+ @resultBuilder
60
+ public enum ViewBuilder {
61
+ public static func buildBlock() -> EmptyView { EmptyView() }
62
+
63
+ public static func buildBlock<Content: View>(_ content: Content) -> Content { content }
64
+
65
+ public static func buildBlock<each Content: View>(
66
+ _ content: repeat each Content
67
+ ) -> TupleView<(repeat each Content)> {
68
+ var children: [any View] = []
69
+ for child in repeat each content { children.append(child) }
70
+ return TupleView((repeat each content), children: children)
71
+ }
72
+
73
+ public static func buildExpression<Content: View>(_ content: Content) -> Content { content }
74
+
75
+ public static func buildOptional<Content: View>(_ content: Content?) -> Content? { content }
76
+
77
+ public static func buildEither<TrueContent: View, FalseContent: View>(
78
+ first: TrueContent
79
+ ) -> _ConditionalContent<TrueContent, FalseContent> {
80
+ _ConditionalContent(storage: .trueContent(first))
81
+ }
82
+
83
+ public static func buildEither<TrueContent: View, FalseContent: View>(
84
+ second: FalseContent
85
+ ) -> _ConditionalContent<TrueContent, FalseContent> {
86
+ _ConditionalContent(storage: .falseContent(second))
87
+ }
88
+
89
+ public static func buildLimitedAvailability<Content: View>(_ content: Content) -> AnyView {
90
+ AnyView(content)
91
+ }
92
+ }
93
+
94
+ // MARK: - Structural views
95
+
96
+ public struct EmptyView: Sendable {
97
+ public init() {}
98
+ }
99
+ extension EmptyView: _PrimitiveView {}
100
+ extension EmptyView: _GroupView {
101
+ var _children: [any View] { [] }
102
+ }
103
+
104
+ public struct TupleView<T> {
105
+ public var value: T
106
+ let children: [any View]
107
+
108
+ init(_ value: T, children: [any View]) {
109
+ self.value = value
110
+ self.children = children
111
+ }
112
+ }
113
+ extension TupleView: _PrimitiveView {}
114
+ extension TupleView: _GroupView {
115
+ var _children: [any View] { children }
116
+ }
117
+
118
+ public struct _ConditionalContent<TrueContent: View, FalseContent: View> {
119
+ enum Storage {
120
+ case trueContent(TrueContent)
121
+ case falseContent(FalseContent)
122
+ }
123
+ let storage: Storage
124
+ }
125
+ extension _ConditionalContent: _PrimitiveView {}
126
+ extension _ConditionalContent: _GroupView {
127
+ var _children: [any View] {
128
+ switch storage {
129
+ case .trueContent(let view): [view]
130
+ case .falseContent(let view): [view]
131
+ }
132
+ }
133
+ }
134
+
135
+ extension Optional: View where Wrapped: View {
136
+ public typealias Body = Never
137
+ public var body: Never { fatalError("Optional is a primitive view and has no body") }
138
+ }
139
+ // Unconditional: the marker only lets the trait lookups run (ViewTraits.swift).
140
+ extension Optional: _TraitBearing {}
141
+ extension Optional: _GroupView where Wrapped: View {
142
+ var _children: [any View] {
143
+ switch self {
144
+ case .some(let view): [view]
145
+ case .none: []
146
+ }
147
+ }
148
+ }
149
+
150
+ /// A type-erased view.
151
+ public struct AnyView {
152
+ let storage: any View
153
+
154
+ public init<V: View>(_ view: V) { storage = view }
155
+ public init<V: View>(erasing view: V) { storage = view }
156
+ }
157
+ extension AnyView: _PrimitiveView {}
158
+ extension AnyView: _GroupView {
159
+ var _children: [any View] { [storage] }
160
+ }
161
+
162
+ /// Collects views without affecting layout.
163
+ public struct Group<Content: View> {
164
+ let content: Content
165
+ public init(@ViewBuilder content: () -> Content) { self.content = content() }
166
+ }
167
+ extension Group: _PrimitiveView {}
168
+ extension Group: _GroupView {
169
+ var _children: [any View] { [content] }
170
+ }
171
+
172
+ /// A view that computes views on demand from a collection, keyed by identity.
173
+ /// `Content` is unconstrained so that the same type can produce chart content
174
+ /// (`ForEach` inside a `Chart`, see Charts/ChartContent.swift); the `View`
175
+ /// conformance applies when `Content` is a view.
176
+ public struct ForEach<Data: RandomAccessCollection, ID: Hashable, Content> {
177
+ public let data: Data
178
+ let id: (Data.Element) -> ID
179
+ let content: (Data.Element) -> Content
180
+
181
+ init(_data data: Data, id: @escaping (Data.Element) -> ID, content: @escaping (Data.Element) -> Content) {
182
+ self.data = data
183
+ self.id = id
184
+ self.content = content
185
+ }
186
+ }
187
+
188
+ extension ForEach where Content: View {
189
+ public init(_ data: Data, id: KeyPath<Data.Element, ID>,
190
+ @ViewBuilder content: @escaping (Data.Element) -> Content) {
191
+ self.init(_data: data, id: { $0[keyPath: id] }, content: content)
192
+ }
193
+ }
194
+
195
+ extension ForEach where Content: View, Data.Element: Identifiable, ID == Data.Element.ID {
196
+ public init(_ data: Data, @ViewBuilder content: @escaping (Data.Element) -> Content) {
197
+ self.init(_data: data, id: { $0.id }, content: content)
198
+ }
199
+ }
200
+
201
+ extension ForEach where Content: View, Data == Range<Int>, ID == Int {
202
+ public init(_ data: Range<Int>, @ViewBuilder content: @escaping (Int) -> Content) {
203
+ self.init(_data: data, id: { $0 }, content: content)
204
+ }
205
+ }
206
+
207
+ extension ForEach: View where Content: View {
208
+ public typealias Body = Never
209
+ }
210
+ extension ForEach: _PrimitiveView where Content: View {}
211
+ extension ForEach: _TraitBearing {}
212
+ extension ForEach: _GroupView where Content: View {
213
+ var _children: [any View] { data.map { content($0) } }
214
+ var _keys: [AnyHashable]? { data.map { AnyHashable(id($0)) } }
215
+ }
@@ -0,0 +1,43 @@
1
+ /// A reusable modifier: `body(content:)` wraps the view it is applied to.
2
+ /// `@State` and `@Environment` properties declared on a modifier are managed
3
+ /// by the runtime like a view's (it reflects into the modifier of a
4
+ /// `ModifiedContent`).
5
+ @MainActor @preconcurrency
6
+ public protocol ViewModifier {
7
+ associatedtype Body: View
8
+ typealias Content = _ViewModifier_Content<Self>
9
+ @ViewBuilder func body(content: Content) -> Body
10
+ }
11
+
12
+ /// The view a modifier's `body(content:)` receives: the modified view, erased.
13
+ public struct _ViewModifier_Content<Modifier: ViewModifier> {
14
+ let view: AnyView
15
+ }
16
+ extension _ViewModifier_Content: _PrimitiveView {}
17
+ extension _ViewModifier_Content: _GroupView {
18
+ var _children: [any View] { [view] }
19
+ }
20
+
21
+ /// A view with a `ViewModifier` applied.
22
+ public struct ModifiedContent<Content: View, Modifier: ViewModifier>: View {
23
+ public var content: Content
24
+ public var modifier: Modifier
25
+
26
+ public init(content: Content, modifier: Modifier) {
27
+ self.content = content
28
+ self.modifier = modifier
29
+ }
30
+
31
+ public var body: some View {
32
+ modifier.body(content: _ViewModifier_Content(view: AnyView(content)))
33
+ }
34
+ }
35
+
36
+ nonisolated extension View {
37
+ @MainActor
38
+ public func modifier<M: ViewModifier>(_ modifier: M) -> ModifiedContent<Self, M> {
39
+ ModifiedContent(content: self, modifier: modifier)
40
+ }
41
+ }
42
+
43
+ extension ModifiedContent: _HoldsModifier {}
@@ -0,0 +1,155 @@
1
+ /// `.visualEffect { content, proxy in … }` (docs/ops-protocol.md, "Phase 12").
2
+ /// The closure's effects (offset, scale, rotation, opacity, blur, …) apply as
3
+ /// the matching view modifiers. The proxy is empty: the browser does not
4
+ /// report a view's frame on every scroll step, so an effect that reads
5
+ /// `proxy.frame(in: .global)` sees a zero rectangle and the view renders
6
+ /// without that part of the effect. Compile-level support, honestly limited.
7
+
8
+ public protocol VisualEffect {}
9
+
10
+ /// The chained effects, as style changes on the content.
11
+ protocol _VisualEffectChaining {
12
+ var _effects: [(inout _Style) -> Void] { get }
13
+ }
14
+
15
+ public struct EmptyVisualEffect: VisualEffect, _VisualEffectChaining {
16
+ var _effects: [(inout _Style) -> Void] { [] }
17
+ public init() {}
18
+ }
19
+
20
+ public struct _VisualEffectChain: VisualEffect, _VisualEffectChaining {
21
+ var _effects: [(inout _Style) -> Void]
22
+ }
23
+
24
+ extension VisualEffect {
25
+ func _adding(_ effect: @escaping (inout _Style) -> Void) -> _VisualEffectChain {
26
+ _VisualEffectChain(_effects: ((self as? _VisualEffectChaining)?._effects ?? []) + [effect])
27
+ }
28
+
29
+ public func offset(x: CGFloat = 0, y: CGFloat = 0) -> _VisualEffectChain {
30
+ _adding { $0.extras["offset"] = .object(["x": .number(x), "y": .number(y)]) }
31
+ }
32
+ public func offset(_ offset: CGSize) -> _VisualEffectChain { self.offset(x: offset.width, y: offset.height) }
33
+ public func scaleEffect(_ scale: CGFloat, anchor: UnitPoint = .center) -> _VisualEffectChain {
34
+ scaleEffect(x: scale, y: scale, anchor: anchor)
35
+ }
36
+ public func scaleEffect(_ scale: CGSize, anchor: UnitPoint = .center) -> _VisualEffectChain {
37
+ scaleEffect(x: scale.width, y: scale.height, anchor: anchor)
38
+ }
39
+ public func scaleEffect(x: CGFloat = 1, y: CGFloat = 1, anchor: UnitPoint = .center) -> _VisualEffectChain {
40
+ _adding {
41
+ $0.extras["scale"] = .object(["x": .number(x), "y": .number(y)])
42
+ $0.extras["scaleAnchor"] = anchor._json
43
+ }
44
+ }
45
+ public func rotationEffect(_ angle: Angle, anchor: UnitPoint = .center) -> _VisualEffectChain {
46
+ _adding {
47
+ $0.extras["rotation"] = .number(angle.degrees)
48
+ $0.extras["rotationAnchor"] = anchor._json
49
+ }
50
+ }
51
+ public func rotation3DEffect(_ angle: Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat),
52
+ anchor: UnitPoint = .center, anchorZ: CGFloat = 0,
53
+ perspective: CGFloat = 1) -> _VisualEffectChain {
54
+ _adding {
55
+ $0.extras["rotation3D"] = .object([
56
+ "angle": .number(angle.degrees),
57
+ "axis": .object(["x": .number(axis.x), "y": .number(axis.y), "z": .number(axis.z)]),
58
+ "anchor": anchor._json,
59
+ "perspective": .number(perspective),
60
+ ])
61
+ }
62
+ }
63
+ public func opacity(_ opacity: Double) -> _VisualEffectChain { _adding { $0.opacity = opacity } }
64
+ public func blur(radius: CGFloat, opaque: Bool = false) -> _VisualEffectChain { _adding { $0.extras["blur"] = .number(radius) } }
65
+ /// Accepted; the renderer has no filter for these yet.
66
+ public func brightness(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
67
+ public func contrast(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
68
+ public func saturation(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
69
+ public func grayscale(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
70
+ public func hueRotation(_ angle: Angle) -> _VisualEffectChain { _adding { _ in } }
71
+ public func colorEffect<S: ShapeStyle>(_ shader: S) -> _VisualEffectChain { _adding { _ in } }
72
+ }
73
+
74
+ nonisolated extension View {
75
+ public func visualEffect(_ effect: @escaping (EmptyVisualEffect, GeometryProxy) -> some VisualEffect) -> some View {
76
+ let result = effect(EmptyVisualEffect(), GeometryProxy(size: .zero))
77
+ let effects = (result as? _VisualEffectChaining)?._effects ?? []
78
+ return _styled { style in
79
+ for apply in effects { apply(&style) }
80
+ }
81
+ }
82
+ }
83
+
84
+ // MARK: - Scroll transitions
85
+
86
+ /// Where a view is in its scroll view, for `.scrollTransition`: about to
87
+ /// enter at the top leading edge, fully visible (`identity`), or leaving at
88
+ /// the bottom trailing edge.
89
+ public enum ScrollTransitionPhase: Hashable, Sendable {
90
+ case topLeading, identity, bottomTrailing
91
+
92
+ public var isIdentity: Bool { self == .identity }
93
+
94
+ /// -1 at the top leading edge, 0 when visible, 1 at the bottom trailing edge.
95
+ public var value: Double {
96
+ switch self {
97
+ case .topLeading: -1
98
+ case .identity: 0
99
+ case .bottomTrailing: 1
100
+ }
101
+ }
102
+ }
103
+
104
+ /// When a scroll transition applies its effect; accepted.
105
+ public struct ScrollTransitionConfiguration: Sendable {
106
+ public static let identity = ScrollTransitionConfiguration()
107
+ public static func animated(_ animation: Animation = .default) -> ScrollTransitionConfiguration { .init() }
108
+ public static let animated = ScrollTransitionConfiguration()
109
+ public static func interactive(timingCurve: UnitCurve = .easeInOut) -> ScrollTransitionConfiguration { .init() }
110
+ public static let interactive = ScrollTransitionConfiguration()
111
+ public func threshold(_ threshold: ScrollTransitionConfiguration.Threshold) -> ScrollTransitionConfiguration { self }
112
+ public func animation(_ animation: Animation) -> ScrollTransitionConfiguration { self }
113
+
114
+ public struct Threshold: Sendable {
115
+ public static let visible = Threshold()
116
+ public static let hidden = Threshold()
117
+ public static var centered: Threshold { Threshold() }
118
+ public static func visible(_ amount: Double) -> Threshold { Threshold() }
119
+ public func interpolated(towards other: Threshold, amount: Double) -> Threshold { self }
120
+ public func inset(by distance: Double) -> Threshold { self }
121
+ }
122
+ }
123
+
124
+ nonisolated extension View {
125
+ /// The effect for a view as it scrolls in and out. The browser does not
126
+ /// report where a view is on every scroll step, so the view shows the
127
+ /// effect of the `identity` phase: as it is when fully visible.
128
+ public func scrollTransition(_ configuration: ScrollTransitionConfiguration = .interactive, axis: Axis? = nil,
129
+ transition: @escaping (EmptyVisualEffect, ScrollTransitionPhase) -> some VisualEffect) -> some View {
130
+ let result = transition(EmptyVisualEffect(), .identity)
131
+ let effects = (result as? _VisualEffectChaining)?._effects ?? []
132
+ return _styled { style in
133
+ for apply in effects { apply(&style) }
134
+ }
135
+ }
136
+
137
+ public func scrollTransition(topLeading: ScrollTransitionConfiguration, bottomTrailing: ScrollTransitionConfiguration, axis: Axis? = nil,
138
+ transition: @escaping (EmptyVisualEffect, ScrollTransitionPhase) -> some VisualEffect) -> some View {
139
+ scrollTransition(topLeading, axis: axis, transition: transition)
140
+ }
141
+ }
142
+
143
+ /// A timing curve over 0…1 (iOS 17), as scroll transitions take; the
144
+ /// browser's transitions do not use it.
145
+ public struct UnitCurve: Hashable, Sendable {
146
+ let name: String
147
+ public static let linear = UnitCurve(name: "linear")
148
+ public static let easeIn = UnitCurve(name: "easeIn")
149
+ public static let easeOut = UnitCurve(name: "easeOut")
150
+ public static let easeInOut = UnitCurve(name: "easeInOut")
151
+ public static let circularEaseIn = UnitCurve(name: "circularEaseIn")
152
+ public static let circularEaseOut = UnitCurve(name: "circularEaseOut")
153
+ public static let circularEaseInOut = UnitCurve(name: "circularEaseInOut")
154
+ public static func bezier(startControlPoint: UnitPoint, endControlPoint: UnitPoint) -> UnitCurve { UnitCurve(name: "bezier") }
155
+ }
@@ -0,0 +1,25 @@
1
+ // Scene windows: `@Environment(\.openWindow)`, `\.dismissWindow` and
2
+ // `\.supportsMultipleWindows`. The page is the app's one window, so it
3
+ // reports no support for more, opening a window does nothing, and dismissing
4
+ // one does nothing either.
5
+
6
+ /// Opens a window of a `WindowGroup`. Does nothing: the page is one window.
7
+ public struct OpenWindowAction: Sendable {
8
+ @MainActor public func callAsFunction(id: String) {}
9
+ @MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(value: D) {}
10
+ @MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(id: String, value: D) {}
11
+ }
12
+
13
+ /// Dismisses a window. Does nothing: the page is one window.
14
+ public struct DismissWindowAction: Sendable {
15
+ @MainActor public func callAsFunction() {}
16
+ @MainActor public func callAsFunction(id: String) {}
17
+ @MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(value: D) {}
18
+ }
19
+
20
+ extension EnvironmentValues {
21
+ public var openWindow: OpenWindowAction { OpenWindowAction() }
22
+ public var dismissWindow: DismissWindowAction { DismissWindowAction() }
23
+ /// False: the page is one window.
24
+ public var supportsMultipleWindows: Bool { false }
25
+ }