@swiftbrowser/swift 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +105 -7
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +93 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +3 -2
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +67 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +80 -10
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +11 -2
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +164 -37
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +105 -7
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +10 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +39 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
package/Package.swift CHANGED
@@ -1,8 +1,11 @@
1
1
  // swift-tools-version: 6.0
2
- // The SwiftBrowser Swift package as @swiftbrowser/cli ships it: the SwiftUI
3
- // shim, Swift Charts, FoundationLite and FoundationBridge, library products only. `Sources/` is
4
- // copied from the repository's Sources/ at `npm pack` time (sync-sources.mjs);
5
- // in a repository checkout the CLI uses the repository's own Package.swift.
2
+ // The SwiftBrowser Swift package as @swiftbrowser/cli ships it: every library
3
+ // of the repository's Package.swift (the SwiftUI shim, Charts, SwiftData,
4
+ // FoundationBridge and the framework and package stand-ins), library products
5
+ // only. Generated from that manifest by sync-sources.mjs (manifest.mjs), which
6
+ // also copies the targets' Sources/ in at `npm pack` time; in a repository
7
+ // checkout the CLI uses the repository's own Package.swift.
8
+ import CompilerPluginSupport
6
9
  import PackageDescription
7
10
 
8
11
  let package = Package(
@@ -10,14 +13,202 @@ let package = Package(
10
13
  products: [
11
14
  .library(name: "SwiftUI", targets: ["SwiftUI"]),
12
15
  .library(name: "Charts", targets: ["Charts"]),
13
- .library(name: "FoundationLite", targets: ["FoundationLite"]),
14
16
  .library(name: "FoundationBridge", targets: ["FoundationBridge"]),
17
+ .library(name: "SwiftData", targets: ["SwiftData"]),
18
+ .library(name: "StoreKit", targets: ["StoreKit"]),
19
+ .library(name: "CoreLocation", targets: ["CoreLocation"]),
20
+ .library(name: "MapKit", targets: ["MapKit"]),
21
+ .library(name: "WeatherKit", targets: ["WeatherKit"]),
22
+ .library(name: "LocalAuthentication", targets: ["LocalAuthentication"]),
23
+ .library(name: "CoreML", targets: ["CoreML"]),
24
+ .library(name: "PhotosUI", targets: ["PhotosUI"]),
25
+ .library(name: "UniformTypeIdentifiers", targets: ["UniformTypeIdentifiers"]),
26
+ .library(name: "CoreImage", targets: ["CoreImage"]),
27
+ .library(name: "UserNotifications", targets: ["UserNotifications"]),
28
+ .library(name: "UIKit", targets: ["UIKit"]),
29
+ .library(name: "CoreGraphics", targets: ["CoreGraphics"]),
30
+ .library(name: "ImageIO", targets: ["ImageIO"]),
31
+ .library(name: "CryptoKit", targets: ["CryptoKit"]),
32
+ .library(name: "os", targets: ["os"]),
33
+ .library(name: "OSLog", targets: ["OSLog"]),
34
+ .library(name: "Security", targets: ["Security"]),
35
+ .library(name: "Accelerate", targets: ["Accelerate"]),
36
+ .library(name: "CommonCrypto", targets: ["CommonCrypto"]),
37
+ .library(name: "MobileCoreServices", targets: ["MobileCoreServices"]),
38
+ .library(name: "Combine", targets: ["Combine"]),
39
+ .library(name: "AppIntents", targets: ["AppIntents"]),
40
+ .library(name: "CoreHaptics", targets: ["CoreHaptics"]),
41
+ .library(name: "NaturalLanguage", targets: ["NaturalLanguage"]),
42
+ .library(name: "Compression", targets: ["Compression"]),
43
+ .library(name: "zlib", targets: ["zlib"]),
44
+ .library(name: "CoreText", targets: ["CoreText"]),
45
+ .library(name: "AVFoundation", targets: ["AVFoundation"]),
46
+ .library(name: "AudioToolbox", targets: ["AudioToolbox"]),
47
+ .library(name: "Symbols", targets: ["Symbols"]),
48
+ .library(name: "QuickLook", targets: ["QuickLook"]),
49
+ .library(name: "AVKit", targets: ["AVKit"]),
50
+ .library(name: "AuthenticationServices", targets: ["AuthenticationServices"]),
51
+ .library(name: "SafariServices", targets: ["SafariServices"]),
52
+ .library(name: "WebKit", targets: ["WebKit"]),
53
+ .library(name: "CoreTransferable", targets: ["CoreTransferable"]),
54
+ .library(name: "Photos", targets: ["Photos"]),
55
+ .library(name: "LinkPresentation", targets: ["LinkPresentation"]),
56
+ .library(name: "Translation", targets: ["Translation"]),
57
+ .library(name: "FoundationModels", targets: ["FoundationModels"]),
58
+ ],
59
+ // SwiftData's macros (`@Model`, `#Predicate`) build against swift-syntax.
60
+ // 604.0.0 is the release SwiftPM has prebuilt for Swift 6.4, so a macro
61
+ // build takes seconds instead of compiling swift-syntax (minutes). SwiftPM
62
+ // uses the prebuilt only for a macro that depends on swift-syntax alone.
63
+ // SwiftUI links the macros too, for `@Entry`.
64
+ dependencies: [
65
+ .package(url: "https://github.com/swiftlang/swift-syntax.git", "604.0.0"..<"605.0.0"),
15
66
  ],
16
67
  targets: [
17
- .target(name: "SwiftUI", path: "Sources/SwiftUI"),
18
- .target(name: "_FoundationCommon", dependencies: ["SwiftUI"], path: "Sources/_FoundationCommon"),
19
- .target(name: "FoundationLite", dependencies: ["SwiftUI", "_FoundationCommon"], path: "Sources/FoundationLite"),
20
- .target(name: "FoundationBridge", dependencies: ["SwiftUI", "_FoundationCommon"], path: "Sources/FoundationBridge"),
68
+ // API-compatible subset of SwiftUI plus the runtime that turns a view
69
+ // tree into render ops. Builds for Wasm and natively on Linux.
70
+ // SwiftDataMacros also expands SwiftUI's `@Entry`. It re-exports
71
+ // CoreTransferable (`Transferable`, `ShareLink`'s items), as on iOS.
72
+ .target(name: "SwiftUI", dependencies: ["SwiftDataMacros", "CoreTransferable"], path: "Sources/SwiftUI"),
73
+
74
+ // What apps need from Foundation that swift-corelibs Foundation does
75
+ // not have on WASI: Timer and RunLoop, a persisting UserDefaults, a
76
+ // Bundle over the staged resources, URLSession over fetch, AsyncImage,
77
+ // the viewer's Locale. Staged in by the CLI next to `import SwiftUI`.
78
+ .target(name: "FoundationBridge", dependencies: ["SwiftUI", "Security", "os", "CoreFoundationTypes"], path: "Sources/FoundationBridge"),
79
+
80
+ // Swift Charts. The chart types live in the SwiftUI target (they use
81
+ // its internal runtime protocols); this target re-exports SwiftUI and
82
+ // adds `Date: Plottable` and `DateBins`.
21
83
  .target(name: "Charts", dependencies: ["SwiftUI"], path: "Sources/Charts"),
84
+
85
+ // SwiftData over the browser's IndexedDB: `@Model`, `ModelContainer`,
86
+ // `ModelContext`, `@Query`. Models live in memory; the store is handed
87
+ // in at launch and every save goes back to the page as a `swiftdata`
88
+ // op (docs/ops-protocol.md, "Phase 18").
89
+ .target(name: "SwiftData", dependencies: ["SwiftUI", "SwiftDataMacros"], path: "Sources/SwiftData"),
90
+ .macro(
91
+ name: "SwiftDataMacros",
92
+ dependencies: [
93
+ .product(name: "SwiftSyntax", package: "swift-syntax"),
94
+ .product(name: "SwiftSyntaxMacros", package: "swift-syntax"),
95
+ .product(name: "SwiftSyntaxBuilder", package: "swift-syntax"),
96
+ .product(name: "SwiftDiagnostics", package: "swift-syntax"),
97
+ .product(name: "SwiftCompilerPlugin", package: "swift-syntax"),
98
+ // Nothing else in the published manifest (packages/swift, what
99
+ // apps build), or SwiftPM compiles swift-syntax there instead
100
+ // of using its prebuilt. Compiled from source after this
101
+ // package's OSLog module, swift-syntax logs through it
102
+ // (`canImport(OSLog)`) and the macro must link it: the CLI sets
103
+ // SWIFT_BUILD_SCRIPT_ENVIRONMENT, which turns that logging off
104
+ // (toolchain.ts). This repository's own builds always compile
105
+ // swift-syntax (SwiftDataTests links the macro target), so in its
106
+ // Package.swift the macro also links os, whichever of the two
107
+ // builds first (a line manifest.mjs leaves out of the published one).
108
+ ],
109
+ path: "Sources/SwiftDataMacros"
110
+ ),
111
+
112
+ // Stand-ins for Apple frameworks apps import for one or two calls:
113
+ // StoreKit's review request (a no-op), Core Location's coordinate type
114
+ // and a LocalAuthentication context that always succeeds. Linked only
115
+ // into apps that import them (packages/cli/src/stage.ts).
116
+ .target(name: "StoreKit", dependencies: ["SwiftUI", "UIKit"], path: "Sources/StoreKit"),
117
+ .target(name: "CoreLocation", path: "Sources/CoreLocation"),
118
+ // MapKit's SwiftUI map and value types, drawn without map data, and
119
+ // UIKit's `MKMapView`, which draws that map at its region (Sources/MapKit).
120
+ .target(name: "MapKit", dependencies: ["SwiftUI", "UIKit", "CoreLocation"], path: "Sources/MapKit"),
121
+ // WeatherKit's service and types; every request throws, as for an app
122
+ // without the capability (Sources/WeatherKit).
123
+ .target(name: "WeatherKit", dependencies: ["CoreLocation"], path: "Sources/WeatherKit"),
124
+ .target(name: "LocalAuthentication", path: "Sources/LocalAuthentication"),
125
+ // PhotosUI's `PhotosPicker` over the page's file chooser (a `pickFiles`
126
+ // host request; docs/ops-protocol.md, "Photos picker"), and the
127
+ // `UTType`s its items report.
128
+ .target(name: "PhotosUI", dependencies: ["SwiftUI", "UniformTypeIdentifiers", "Photos"], path: "Sources/PhotosUI"),
129
+ .target(name: "UniformTypeIdentifiers", path: "Sources/UniformTypeIdentifiers"),
130
+
131
+ // Core ML for the models Create ML makes from tables (linear and
132
+ // logistic regressions, boosted trees, their pipelines): the CLI
133
+ // compiles each .mlmodel into the class Xcode generates, with the model
134
+ // embedded, and this target evaluates it. Linked only into apps that
135
+ // have a model or import CoreML (packages/cli/src/coreml.ts).
136
+ .target(name: "CoreML", path: "Sources/CoreML"),
137
+
138
+ // Core Image's built-in filters and QR code generator as recipes the
139
+ // page runs on the decoded pixels (`UIImage` and `CGImage` are the
140
+ // shim's, as SwiftUI re-exports them on iOS). Linked only into apps
141
+ // that import it, like the stand-ins above.
142
+ .target(name: "CoreImage", dependencies: ["SwiftUI"], path: "Sources/CoreImage"),
143
+
144
+ // UserNotifications over the browser's Notification API, scheduled with
145
+ // the executor's timers while the page is open; it talks to the page
146
+ // through host requests (docs/ops-protocol.md, "Notifications").
147
+ .target(name: "UserNotifications", dependencies: ["SwiftUI"], path: "Sources/UserNotifications"),
148
+
149
+ // The Apple frameworks under SwiftUI that packages build on, as far as
150
+ // image and utility code uses them: UIKit's UIImage and UIColor, Core
151
+ // Graphics contexts and Image I/O sources over the shim's image
152
+ // recipes, CryptoKit's hashes, and os's locks and logs
153
+ // (docs/ops-protocol.md, "Core Graphics and Image I/O").
154
+ .target(name: "CoreGraphics", dependencies: ["SwiftUI"], path: "Sources/CoreGraphics"),
155
+ .target(name: "ImageIO", dependencies: ["CoreGraphics", "SwiftUI", "CoreFoundationTypes"], path: "Sources/ImageIO"),
156
+ // UIKit re-exports UserNotifications, as iOS's does (`UNUserNotificationCenter` with `import UIKit`).
157
+ .target(name: "UIKit", dependencies: ["CoreGraphics", "ImageIO", "CoreImage", "SwiftUI", "FoundationBridge", "UserNotifications"], path: "Sources/UIKit"),
158
+ .target(name: "CryptoKit", path: "Sources/CryptoKit"),
159
+ .target(name: "os", path: "Sources/os"),
160
+ .target(name: "OSLog", dependencies: ["os"], path: "Sources/OSLog"),
161
+ // The keychain's SecItem functions over a file in the app's home.
162
+ // Core Foundation's types, which Security, Image I/O, Audio Toolbox and
163
+ // FoundationBridge re-export (the name CoreFoundation is the Linux toolchain's).
164
+ .target(name: "CoreFoundationTypes", path: "Sources/CoreFoundationTypes"),
165
+ .target(name: "Security", dependencies: ["CoreFoundationTypes"], path: "Sources/Security"),
166
+ // Frameworks Ice Cubes' packages import: App Intents' types (Shortcuts
167
+ // has nothing to run them), haptics and sound (the browser has neither
168
+ // engine), natural-language detection, and zlib-style compression.
169
+ .target(name: "AppIntents", dependencies: ["SwiftUI", "FoundationBridge", "UIKit", "UniformTypeIdentifiers"], path: "Sources/AppIntents"),
170
+ .target(name: "CoreHaptics", dependencies: ["FoundationBridge"], path: "Sources/CoreHaptics"),
171
+ .target(name: "NaturalLanguage", dependencies: ["FoundationBridge"], path: "Sources/NaturalLanguage"),
172
+ .target(name: "Compression", path: "Sources/Compression"),
173
+ // `import zlib` re-exports Compression, where zlib's inflate API lives;
174
+ // Core Text has the font manager's registration (which loads nothing).
175
+ .target(name: "zlib", dependencies: ["Compression"], path: "Sources/zlib"),
176
+ .target(name: "CoreText", dependencies: ["CoreFoundationTypes"], path: "Sources/CoreText"),
177
+ // vImage's box convolutions: a recipe step for Core Graphics contexts, computed for real memory.
178
+ .target(name: "Accelerate", dependencies: ["CoreGraphics", "SwiftUI"], path: "Sources/Accelerate"),
179
+ // CommonCrypto's digest functions over CryptoKit's hashes; MobileCoreServices
180
+ // re-exports UniformTypeIdentifiers with the old kUTType constants.
181
+ .target(name: "CommonCrypto", dependencies: ["CryptoKit"], path: "Sources/CommonCrypto"),
182
+ .target(name: "MobileCoreServices", dependencies: ["UniformTypeIdentifiers"], path: "Sources/MobileCoreServices"),
183
+ // OpenCombine as the module Combine, with the SwiftUI shim's ObservableObject (Sources/Combine/SwiftUIObservation.swift);
184
+ // FoundationBridge's DispatchQueue and RunLoop are its schedulers (Sources/Combine/Schedulers.swift).
185
+ .target(name: "Combine", dependencies: ["SwiftUI", "FoundationBridge"], path: "Sources/Combine", exclude: ["LICENSE"],
186
+ swiftSettings: [.define("WASI"), .swiftLanguageMode(.v5)]),
187
+ // Video and audio over the page's media elements (docs/ops-protocol.md,
188
+ // "Video and audio"): players, assets and Core Media's times, and the
189
+ // `video` element their views draw (`AVPlayerLayer` is a UIKit layer).
190
+ .target(name: "AVFoundation", dependencies: ["AudioToolbox", "FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/AVFoundation"),
191
+ // System sounds: registered, never played (no page-side audio yet).
192
+ .target(name: "AudioToolbox", dependencies: ["CoreFoundationTypes"], path: "Sources/AudioToolbox"),
193
+ // SF Symbols' effect types, declared in SwiftUI (which re-exports them on iOS).
194
+ .target(name: "Symbols", dependencies: ["SwiftUI"], path: "Sources/Symbols"),
195
+ // Quick Look previews open the file in a new tab (a `media` host request).
196
+ .target(name: "QuickLook", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/QuickLook"),
197
+ .target(name: "AVKit", dependencies: ["AVFoundation", "UIKit", "SwiftUI"], path: "Sources/AVKit"),
198
+ // Signing in and web pages: the sign-in window is a popup whose
199
+ // redirect comes back through the page's callback page (docs/ops-protocol.md,
200
+ // "Signing in"), Safari's sheet a new tab, and a web view keeps its state.
201
+ .target(name: "AuthenticationServices", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/AuthenticationServices"),
202
+ .target(name: "SafariServices", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/SafariServices"),
203
+ .target(name: "WebKit", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/WebKit"),
204
+ // Sharing and media: `Transferable` and its representations (under
205
+ // SwiftUI, which re-exports it), the photo library (which PhotosUI
206
+ // re-exports), link previews.
207
+ .target(name: "CoreTransferable", dependencies: ["UniformTypeIdentifiers"], path: "Sources/CoreTransferable"),
208
+ .target(name: "Photos", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/Photos"),
209
+ .target(name: "LinkPresentation", dependencies: ["FoundationBridge", "UIKit", "SwiftUI"], path: "Sources/LinkPresentation"),
210
+ // Apple Intelligence: translation and the on-device language model.
211
+ .target(name: "Translation", dependencies: ["FoundationBridge", "SwiftUI"], path: "Sources/Translation"),
212
+ .target(name: "FoundationModels", dependencies: ["FoundationBridge", "SwiftUI"], path: "Sources/FoundationModels"),
22
213
  ]
23
214
  )
package/README.md CHANGED
@@ -1,13 +1,11 @@
1
1
  # @swiftbrowser/swift
2
2
 
3
- The SwiftBrowser Swift package (the `SwiftUI` shim, `Charts`, `FoundationLite`
4
- for lean builds, `FoundationBridge` for full-Foundation builds and the
5
- `_FoundationCommon` they share) packaged for npm, so that `@swiftbrowser/cli` builds apps
6
- against exactly the shim version it was released with. The CLI's generated
7
- staging package depends on it by path (`swiftPackagePath()`).
3
+ The SwiftBrowser Swift package (the `SwiftUI` shim, `Charts`, `SwiftData` and
4
+ `FoundationBridge`, the browser's Foundation glue) packaged for npm, so that
5
+ `@swiftbrowser/cli` builds apps against exactly the shim version it was
6
+ released with. The CLI's generated staging package depends on it by path
7
+ (`swiftPackagePath()`).
8
8
 
9
9
  In a repository checkout `Sources/` is not here; `swiftPackagePath()` then
10
- points at the repository root, whose package also declares the example
11
- executables (so an app named like one of them, `Counter` say, needs this
12
- package synced: `node packages/swift/sync-sources.mjs`). `npm pack` copies the
13
- sources in (`prepack`).
10
+ points at the repository root, whose package declares the same libraries.
11
+ `npm pack` copies the sources in (`prepack`).
@@ -0,0 +1,131 @@
1
+ // `import AVFoundation` for the browser: playback over the page's media
2
+ // elements (docs/ops-protocol.md, "Video and audio").
3
+ //
4
+ // - `AVPlayer` (and `AVQueuePlayer`, `AVPlayerLooper`) is state that outlives
5
+ // views: the item, the rate, mute and volume, the last seek, the position
6
+ // the page last reported. The views that show it (AVKit's `VideoPlayer`,
7
+ // an `AVPlayerLayer` in a UIKit view, `AVPlayerViewController`) each draw a
8
+ // `video` element whose props are worked out from that state, and the
9
+ // page's `video` events (ready, time, status, ended, error, and what the
10
+ // viewer did with the native controls) come back to the player, which
11
+ // updates itself, calls its time observers and posts AVFoundation's
12
+ // notifications through the bridge's `NotificationCenter`.
13
+ // - A player plays only while a view shows it: the newest view attached to a
14
+ // player plays it, the others show it paused and muted. A player shown
15
+ // nowhere keeps its rate and position and plays nothing.
16
+ // - Assets are URLs. Remote, data and blob URLs go to the page as they are;
17
+ // a file URL (the app's bundle, home or temporary directory) is read and
18
+ // handed to the page as a blob (a `media` host request). `load(.duration)`
19
+ // asks the page to read the file's metadata (a `media` probe).
20
+ // - `AVAudioSession` keeps its category and mode and succeeds: the browser
21
+ // mixes audio as it does. `AVAssetImageGenerator` fails (Swift holds no
22
+ // decoded frames), and `AVAssetExportSession` copies the file as it is,
23
+ // as `AVAssetExportPresetPassthrough` does, whatever the preset.
24
+ //
25
+ // As on iOS, it brings AudioToolbox (System Sound Services) and Core Media's
26
+ // time types (CMTime.swift) along.
27
+ @_exported import AudioToolbox
28
+ @_exported import Foundation
29
+ import FoundationBridge
30
+ import SwiftUI
31
+ import struct SwiftUI.CGSize
32
+ import struct SwiftUI.CGRect
33
+ import UIKit
34
+
35
+ /// AVFoundation's error domain, for the errors this module reports as `NSError`.
36
+ public let AVFoundationErrorDomain = "AVFoundationErrorDomain"
37
+
38
+ /// AVFoundation's errors (the codes the shim reports).
39
+ public struct AVError: Error, Hashable, Sendable, CustomStringConvertible {
40
+ public enum Code: Int, Sendable {
41
+ case unknown = -11800
42
+ case outOfMemory = -11801
43
+ case decodeFailed = -11821
44
+ case fileFormatNotRecognized = -11828
45
+ case fileFailedToParse = -11829
46
+ case noDataCaptured = -11805
47
+ case operationNotSupportedForAsset = -11838
48
+ case failedToLoadMediaData = -11849
49
+ case contentIsUnavailable = -11863
50
+ case exportFailed = -11820
51
+ }
52
+
53
+ public let code: Code
54
+ /// What the page or the shim said went wrong.
55
+ public let message: String
56
+
57
+ public init(_ code: Code, message: String = "") {
58
+ self.code = code
59
+ self.message = message
60
+ }
61
+
62
+ public static var unknown: Code { .unknown }
63
+ public static var decodeFailed: Code { .decodeFailed }
64
+ public static var fileFormatNotRecognized: Code { .fileFormatNotRecognized }
65
+ public static var operationNotSupportedForAsset: Code { .operationNotSupportedForAsset }
66
+ public static var failedToLoadMediaData: Code { .failedToLoadMediaData }
67
+ public static var contentIsUnavailable: Code { .contentIsUnavailable }
68
+
69
+ public var errorCode: Int { code.rawValue }
70
+ public var localizedDescription: String { message.isEmpty ? "The operation could not be completed" : message }
71
+ public var description: String { "AVError(\(code), \"\(message)\")" }
72
+
73
+ public static func == (lhs: AVError, rhs: AVError) -> Bool { lhs.code == rhs.code && lhs.message == rhs.message }
74
+ public func hash(into hasher: inout Hasher) { hasher.combine(code) }
75
+ }
76
+
77
+ /// `catch AVError.decodeFailed`-style matching on the code.
78
+ public func ~= (code: AVError.Code, error: any Error) -> Bool {
79
+ (error as? AVError)?.code == code
80
+ }
81
+
82
+ /// A media type of a track.
83
+ public struct AVMediaType: RawRepresentable, Hashable, Sendable {
84
+ public let rawValue: String
85
+ public init(rawValue: String) { self.rawValue = rawValue }
86
+ public init(_ rawValue: String) { self.rawValue = rawValue }
87
+ public static let video = AVMediaType("vide")
88
+ public static let audio = AVMediaType("soun")
89
+ public static let text = AVMediaType("text")
90
+ public static let closedCaption = AVMediaType("clcp")
91
+ public static let subtitle = AVMediaType("sbtl")
92
+ public static let timecode = AVMediaType("tmcd")
93
+ public static let metadata = AVMediaType("meta")
94
+ public static let muxed = AVMediaType("muxx")
95
+ }
96
+
97
+ /// A container format, by its uniform type identifier.
98
+ public struct AVFileType: RawRepresentable, Hashable, Sendable {
99
+ public let rawValue: String
100
+ public init(rawValue: String) { self.rawValue = rawValue }
101
+ public init(_ rawValue: String) { self.rawValue = rawValue }
102
+ public static let mov = AVFileType("com.apple.quicktime-movie")
103
+ public static let mp4 = AVFileType("public.mpeg-4")
104
+ public static let m4v = AVFileType("com.apple.m4v-video")
105
+ public static let m4a = AVFileType("com.apple.m4a-audio")
106
+ public static let mp3 = AVFileType("public.mp3")
107
+ public static let wav = AVFileType("com.microsoft.waveform-audio")
108
+ public static let aiff = AVFileType("public.aiff-audio")
109
+ public static let caf = AVFileType("com.apple.coreaudio-format")
110
+ public static let heic = AVFileType("public.heic")
111
+ public static let jpg = AVFileType("public.jpeg")
112
+ }
113
+
114
+ /// The media type the page should be told for a file, from its extension.
115
+ func _mimeType(forPathExtension pathExtension: String) -> String {
116
+ switch pathExtension.lowercased() {
117
+ case "mp4", "mpeg4": "video/mp4"
118
+ case "m4v": "video/x-m4v"
119
+ case "mov", "qt": "video/quicktime"
120
+ case "webm": "video/webm"
121
+ case "ogv": "video/ogg"
122
+ case "mp3": "audio/mpeg"
123
+ case "m4a", "aac": "audio/mp4"
124
+ case "wav": "audio/wav"
125
+ case "aif", "aiff": "audio/aiff"
126
+ case "caf": "audio/x-caf"
127
+ case "oga", "ogg", "opus": "audio/ogg"
128
+ case "gif": "image/gif"
129
+ default: "application/octet-stream"
130
+ }
131
+ }