@swiftbrowser/swift 0.1.0 → 0.3.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 +68 -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 +125 -10
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +100 -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 +26 -10
  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 +71 -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 +88 -12
  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 +14 -4
  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 +168 -39
  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 +86 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
  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 +46 -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 +524 -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 +41 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,220 @@
1
+ // Intent parameters, entities, enums and how they display. Shortcuts would
2
+ // fill parameters, query entities and show the display representations; in
3
+ // the browser the app sets parameters itself and the rest is kept as given.
4
+
5
+ import Foundation
6
+ import FoundationBridge
7
+ import SwiftUI
8
+ import UIKit
9
+ import UniformTypeIdentifiers
10
+
11
+ // MARK: - Parameters
12
+
13
+ /// How a parameter takes the previous action's output in Shortcuts.
14
+ public struct InputConnectionBehavior: Hashable, Sendable {
15
+ let name: String
16
+ public static let `default` = InputConnectionBehavior(name: "default")
17
+ public static let connectToPreviousIntentResult = InputConnectionBehavior(name: "connectToPreviousIntentResult")
18
+ public static let never = InputConnectionBehavior(name: "never")
19
+ }
20
+
21
+ protocol _OptionalValue { static var _none: Self { get } }
22
+ extension Optional: _OptionalValue { static var _none: Self { nil } }
23
+
24
+ /// An intent's input. It holds what the app sets (or its default). Reading
25
+ /// an unset non-optional parameter stops the app: Shortcuts would ask the
26
+ /// user for it, and the browser has no Shortcuts. Like Apple's, it is a
27
+ /// class, so copies of an intent share their parameters.
28
+ @propertyWrapper
29
+ public final class IntentParameter<Value>: @unchecked Sendable {
30
+ public let title: LocalizedStringResource
31
+ public let description: LocalizedStringResource?
32
+ public let supportedContentTypes: [UTType]
33
+ public let requestValueDialog: IntentDialog?
34
+ public let inputConnectionBehavior: InputConnectionBehavior
35
+ private var value: Value?
36
+
37
+ public init(title: LocalizedStringResource, description: LocalizedStringResource? = nil, default defaultValue: Value? = nil,
38
+ supportedContentTypes: [UTType] = [], requestValueDialog: IntentDialog? = nil,
39
+ requestDisambiguationDialog: IntentDialog? = nil,
40
+ inputConnectionBehavior: InputConnectionBehavior = .default) {
41
+ self.title = title
42
+ self.description = description
43
+ self.value = defaultValue
44
+ self.supportedContentTypes = supportedContentTypes
45
+ self.requestValueDialog = requestValueDialog
46
+ self.inputConnectionBehavior = inputConnectionBehavior
47
+ }
48
+
49
+ /// `@Parameter(title: "Count") var count = 3`.
50
+ public convenience init(wrappedValue: Value, title: LocalizedStringResource, description: LocalizedStringResource? = nil,
51
+ requestValueDialog: IntentDialog? = nil,
52
+ inputConnectionBehavior: InputConnectionBehavior = .default) {
53
+ self.init(title: title, description: description, default: wrappedValue, requestValueDialog: requestValueDialog,
54
+ inputConnectionBehavior: inputConnectionBehavior)
55
+ }
56
+
57
+ public var wrappedValue: Value {
58
+ get {
59
+ if let value { return value }
60
+ if let optional = Value.self as? _OptionalValue.Type { return optional._none as! Value }
61
+ fatalError("The intent parameter \"\(title)\" has no value: Shortcuts would ask for it, and the browser has no Shortcuts. Set it before performing the intent.")
62
+ }
63
+ set { value = newValue }
64
+ }
65
+
66
+ public var projectedValue: IntentParameter<Value> { self }
67
+ }
68
+
69
+ public typealias Parameter<Value> = IntentParameter<Value>
70
+
71
+ /// A file passed to an intent.
72
+ public struct IntentFile: Sendable {
73
+ public var data: Data
74
+ public var filename: String
75
+ public var fileURL: URL?
76
+ public var type: UTType?
77
+ public var removedOnCompletion = false
78
+
79
+ public init(data: Data, filename: String, type: UTType? = nil) {
80
+ self.data = data
81
+ self.filename = filename
82
+ self.type = type
83
+ }
84
+
85
+ /// Reads the file now.
86
+ public init(fileURL: URL, filename: String? = nil, type: UTType? = nil) {
87
+ self.data = (try? Data(contentsOf: fileURL)) ?? Data()
88
+ self.filename = filename ?? fileURL.lastPathComponent
89
+ self.fileURL = fileURL
90
+ self.type = type ?? UTType(filenameExtension: fileURL.pathExtension)
91
+ }
92
+ }
93
+
94
+ // MARK: - Display
95
+
96
+ /// How Shortcuts would show a value: a title, a subtitle and an image (kept).
97
+ public struct DisplayRepresentation: Sendable, ExpressibleByStringInterpolation {
98
+ public var title: LocalizedStringResource
99
+ public var subtitle: LocalizedStringResource?
100
+ public var image: Image?
101
+ public var synonyms: [LocalizedStringResource]
102
+
103
+ public init(title: LocalizedStringResource, subtitle: LocalizedStringResource? = nil, image: Image? = nil,
104
+ synonyms: [LocalizedStringResource] = []) {
105
+ self.title = title
106
+ self.subtitle = subtitle
107
+ self.image = image
108
+ self.synonyms = synonyms
109
+ }
110
+
111
+ public init(stringLiteral value: String) { self.init(title: LocalizedStringResource(stringLiteral: value)) }
112
+ public init(stringInterpolation: LocalizedStringResource.StringInterpolation) {
113
+ self.init(title: LocalizedStringResource(stringInterpolation: stringInterpolation))
114
+ }
115
+
116
+ /// A display image: a symbol, a catalog image, a URL or data, as given.
117
+ public struct Image: Sendable {
118
+ public enum DisplayStyle: Sendable { case `default`, circular }
119
+
120
+ public enum Source: Sendable {
121
+ case systemName(String)
122
+ case named(String)
123
+ case url(URL)
124
+ case data(Data)
125
+ }
126
+
127
+ public let source: Source
128
+ public let isTemplate: Bool?
129
+ public var displayStyle: DisplayStyle = .default
130
+ /// The tint of a symbol made with `init?(systemName:tintColor:symbolConfiguration:)`.
131
+ public private(set) var tintColor: UIColor?
132
+
133
+ public init(named name: String, isTemplate: Bool = false) { source = .named(name); self.isTemplate = isTemplate }
134
+ public init(systemName: String, isTemplate: Bool? = nil) { source = .systemName(systemName); self.isTemplate = isTemplate }
135
+ public init(url: URL, isTemplate: Bool? = nil) { source = .url(url); self.isTemplate = isTemplate }
136
+ public init(data: Data, isTemplate: Bool = false, displayStyle: DisplayStyle = .default) {
137
+ source = .data(data)
138
+ self.isTemplate = isTemplate
139
+ self.displayStyle = displayStyle
140
+ }
141
+
142
+ /// A tinted, configured symbol (the configuration is not used).
143
+ public init?(systemName: String, tintColor: UIColor?, symbolConfiguration: UIImage.SymbolConfiguration?) {
144
+ source = .systemName(systemName)
145
+ isTemplate = nil
146
+ self.tintColor = tintColor
147
+ }
148
+
149
+ /// The image as SwiftUI shows one.
150
+ public var swiftUIImage: SwiftUI.Image? {
151
+ switch source {
152
+ case .systemName(let name): SwiftUI.Image(systemName: name)
153
+ case .named(let name): SwiftUI.Image(name)
154
+ case .data(let data): UIImage(data: data).map(SwiftUI.Image.init(uiImage:))
155
+ case .url: nil
156
+ }
157
+ }
158
+ }
159
+ }
160
+
161
+ /// How Shortcuts would name a type ("Account").
162
+ public struct TypeDisplayRepresentation: Sendable, ExpressibleByStringInterpolation {
163
+ public var name: LocalizedStringResource
164
+ public var numericFormat: LocalizedStringResource?
165
+ public var synonyms: [LocalizedStringResource]
166
+
167
+ public init(name: LocalizedStringResource, numericFormat: LocalizedStringResource? = nil, synonyms: [LocalizedStringResource] = []) {
168
+ self.name = name
169
+ self.numericFormat = numericFormat
170
+ self.synonyms = synonyms
171
+ }
172
+
173
+ public init(stringLiteral value: String) { self.init(name: LocalizedStringResource(stringLiteral: value)) }
174
+ public init(stringInterpolation: LocalizedStringResource.StringInterpolation) {
175
+ self.init(name: LocalizedStringResource(stringInterpolation: stringInterpolation))
176
+ }
177
+ }
178
+
179
+ // MARK: - Entities and enums
180
+
181
+ /// A value of the app's that intents take, found through its `defaultQuery`.
182
+ /// `Sendable`, as Apple's is: an entity of a main-actor module conforms
183
+ /// without isolation.
184
+ public protocol AppEntity: Identifiable, Sendable {
185
+ associatedtype DefaultQuery: EntityQuery
186
+ static var defaultQuery: DefaultQuery { get }
187
+ static var typeDisplayRepresentation: TypeDisplayRepresentation { get }
188
+ var displayRepresentation: DisplayRepresentation { get }
189
+ }
190
+
191
+ /// Finds entities by identifier (and suggests some). Shortcuts would call
192
+ /// it; the app may too.
193
+ public protocol EntityQuery: Sendable {
194
+ associatedtype Entity: AppEntity
195
+ init()
196
+ func entities(for identifiers: [Entity.ID]) async throws -> [Entity]
197
+ func suggestedEntities() async throws -> [Entity]
198
+ func defaultResult() async -> Entity?
199
+ }
200
+
201
+ extension EntityQuery {
202
+ public func suggestedEntities() async throws -> [Entity] { [] }
203
+ public func defaultResult() async -> Entity? { nil }
204
+ }
205
+
206
+ /// A query that also finds entities by text.
207
+ public protocol EntityStringQuery: EntityQuery {
208
+ func entities(matching string: String) async throws -> [Entity]
209
+ }
210
+
211
+ /// A query whose entities can all be listed.
212
+ public protocol EnumerableEntityQuery: EntityQuery {
213
+ func allEntities() async throws -> [Entity]
214
+ }
215
+
216
+ /// An enum that intents take, with how each case displays.
217
+ public protocol AppEnum: RawRepresentable, CaseIterable, Hashable where RawValue: LosslessStringConvertible {
218
+ static var typeDisplayRepresentation: TypeDisplayRepresentation { get }
219
+ static var caseDisplayRepresentations: [Self: DisplayRepresentation] { get }
220
+ }
@@ -0,0 +1,159 @@
1
+ // App Shortcuts, and SwiftUI's controls that perform an intent.
2
+
3
+ import Foundation
4
+ import FoundationBridge
5
+ import SwiftUI
6
+
7
+ // MARK: - App Shortcuts
8
+
9
+ /// The app's App Shortcuts. Nothing reads them in the browser: there is no
10
+ /// Shortcuts app, Siri or Spotlight.
11
+ public protocol AppShortcutsProvider {
12
+ @AppShortcutsBuilder static var appShortcuts: [AppShortcut] { get }
13
+ static var shortcutTileColor: ShortcutTileColor { get }
14
+ }
15
+
16
+ extension AppShortcutsProvider {
17
+ public static var shortcutTileColor: ShortcutTileColor { .automatic }
18
+ /// Does nothing: no system index to update.
19
+ public static func updateAppShortcutParameters() {}
20
+ }
21
+
22
+ public enum ShortcutTileColor: Sendable {
23
+ case automatic, red, tangerine, orange, yellow, lime, grayGreen, teal, lightBlue, blue, navy, purple, pink, grayBlue, grayBrown
24
+ }
25
+
26
+ @resultBuilder
27
+ public enum AppShortcutsBuilder {
28
+ public static func buildExpression(_ shortcut: AppShortcut) -> [AppShortcut] { [shortcut] }
29
+ public static func buildBlock(_ components: [AppShortcut]...) -> [AppShortcut] { components.flatMap { $0 } }
30
+ public static func buildOptional(_ component: [AppShortcut]?) -> [AppShortcut] { component ?? [] }
31
+ public static func buildEither(first component: [AppShortcut]) -> [AppShortcut] { component }
32
+ public static func buildEither(second component: [AppShortcut]) -> [AppShortcut] { component }
33
+ public static func buildArray(_ components: [[AppShortcut]]) -> [AppShortcut] { components.flatMap { $0 } }
34
+ public static func buildLimitedAvailability(_ component: [AppShortcut]) -> [AppShortcut] { component }
35
+ }
36
+
37
+ /// An intent with the phrases that would run it, kept.
38
+ public struct AppShortcut: Sendable {
39
+ public let intent: any AppIntent
40
+ public let phrases: [String]
41
+ public let shortTitle: LocalizedStringResource?
42
+ public let systemImageName: String?
43
+
44
+ public init<Intent: AppIntent>(intent: Intent, phrases: [AppShortcutPhrase<Intent>],
45
+ shortTitle: LocalizedStringResource, systemImageName: String) {
46
+ self.intent = intent
47
+ self.phrases = phrases.map(\.text)
48
+ self.shortTitle = shortTitle
49
+ self.systemImageName = systemImageName
50
+ }
51
+
52
+ public init<Intent: AppIntent>(intent: Intent, phrases: [AppShortcutPhrase<Intent>]) {
53
+ self.intent = intent
54
+ self.phrases = phrases.map(\.text)
55
+ self.shortTitle = nil
56
+ self.systemImageName = nil
57
+ }
58
+ }
59
+
60
+ /// A phrase that would run an intent: "Post in \(.applicationName)".
61
+ public struct AppShortcutPhrase<Intent: AppIntent>: Sendable, ExpressibleByStringInterpolation {
62
+ /// The phrase, with `${applicationName}` and `${parameter}` placeholders as Apple writes them.
63
+ public let text: String
64
+
65
+ public init(stringLiteral value: String) { text = value }
66
+ public init(stringInterpolation: StringInterpolation) { text = stringInterpolation.text }
67
+
68
+ public struct StringInterpolation: StringInterpolationProtocol {
69
+ var text = ""
70
+ public init(literalCapacity: Int, interpolationCount: Int) {}
71
+ public mutating func appendLiteral(_ literal: String) { text += literal }
72
+ public mutating func appendInterpolation(_ token: AppShortcutPhraseToken) { text += "${\(token.name)}" }
73
+ public mutating func appendInterpolation<Value>(_ parameter: KeyPath<Intent, IntentParameter<Value>>) { text += "${parameter}" }
74
+ }
75
+ }
76
+
77
+ public struct AppShortcutPhraseToken: Sendable {
78
+ let name: String
79
+ public static let applicationName = AppShortcutPhraseToken(name: "applicationName")
80
+ }
81
+
82
+ // MARK: - Controls that perform an intent
83
+
84
+ extension Button {
85
+ /// A button that performs `intent` when tapped (in a task on the main
86
+ /// actor; a thrown error is dropped, as SwiftUI only logs it).
87
+ public init(role: ButtonRole? = nil, intent: some AppIntent, @ViewBuilder label: () -> Label) {
88
+ self.init(role: role, action: _perform(intent), label: label)
89
+ }
90
+ }
91
+
92
+ extension Button where Label == Text {
93
+ public init(_ titleKey: LocalizedStringKey, role: ButtonRole? = nil, intent: some AppIntent) {
94
+ self.init(titleKey, role: role, action: _perform(intent))
95
+ }
96
+
97
+ @_disfavoredOverload
98
+ public init<S: StringProtocol>(_ title: S, role: ButtonRole? = nil, intent: some AppIntent) {
99
+ self.init(title, role: role, action: _perform(intent))
100
+ }
101
+ }
102
+
103
+ extension Button where Label == SwiftUI.Label<Text, Image> {
104
+ public init(_ titleKey: LocalizedStringKey, systemImage: String, role: ButtonRole? = nil, intent: some AppIntent) {
105
+ self.init(titleKey, systemImage: systemImage, role: role, action: _perform(intent))
106
+ }
107
+
108
+ @_disfavoredOverload
109
+ public init<S: StringProtocol>(_ title: S, systemImage: String, role: ButtonRole? = nil, intent: some AppIntent) {
110
+ self.init(title, systemImage: systemImage, role: role, action: _perform(intent))
111
+ }
112
+ }
113
+
114
+ extension Toggle {
115
+ /// A toggle that performs `intent` when switched (the intent sets the state the binding reads).
116
+ public init(isOn: Bool, intent: some AppIntent, @ViewBuilder label: () -> Label) {
117
+ let action = _perform(intent)
118
+ self.init(isOn: Binding(get: { isOn }, set: { _ in MainActor.assumeIsolated { action() } }), label: label)
119
+ }
120
+ }
121
+
122
+ /// The action that performs `intent`.
123
+ func _perform<Intent: AppIntent>(_ intent: Intent) -> @MainActor () -> Void {
124
+ { Task { @MainActor in _ = try? await intent.perform() } }
125
+ }
126
+
127
+ // MARK: - Siri tips and Shortcuts links
128
+
129
+ /// A tip suggesting the phrase that runs an intent with Siri. There is no
130
+ /// Siri in the browser, so it draws nothing, as when iOS has nothing to suggest.
131
+ public struct SiriTipView: View {
132
+ public init(intent: some AppIntent, isVisible: Binding<Bool> = .constant(true)) {}
133
+ public var body: some View { EmptyView() }
134
+ }
135
+
136
+ /// How a `SiriTipView` is drawn; kept.
137
+ public enum SiriTipViewStyle: Sendable {
138
+ case automatic, light, dark, black
139
+ }
140
+
141
+ extension View {
142
+ public func siriTipViewStyle(_ style: SiriTipViewStyle) -> some View { self }
143
+ }
144
+
145
+ /// A button that opens the app's page in the Shortcuts app. There is no
146
+ /// Shortcuts app in the browser, so it draws nothing.
147
+ public struct ShortcutsLink: View {
148
+ public init(action: (() -> Void)? = nil) {}
149
+ public var body: some View { EmptyView() }
150
+ }
151
+
152
+ /// How a `ShortcutsLink` is drawn; kept.
153
+ public enum ShortcutsLinkStyle: Sendable {
154
+ case automatic, automaticOutline, light, lightOutline, dark, darkOutline
155
+ }
156
+
157
+ extension View {
158
+ public func shortcutsLinkStyle(_ style: ShortcutsLinkStyle) -> some View { self }
159
+ }
@@ -0,0 +1,55 @@
1
+ // `import AudioToolbox` for the browser: System Sound Services, which apps
2
+ // use for short sound effects and the vibration "sound". The page has no
3
+ // audio player for the app yet (AVFoundation is empty for the same reason),
4
+ // so a registered sound gets an ID and playing it is silent; vibration is
5
+ // silent too. Ice Cubes registers its effects (`pull`, `refresh`, …) this way.
6
+
7
+ import Foundation
8
+ // `OSStatus`, `CFURL`
9
+ @_exported import CoreFoundationTypes
10
+
11
+ public typealias SystemSoundID = UInt32
12
+
13
+ public let kAudioServicesNoError: OSStatus = 0
14
+ public let kAudioServicesBadSpecifierSizeError: OSStatus = 0x7E73697A // '!siz'
15
+ public let kAudioServicesSystemSoundUnspecifiedError: OSStatus = -1500
16
+ public let kAudioServicesSystemSoundClientTimedOutError: OSStatus = -1501
17
+
18
+ /// The "sound" that vibrates an iPhone.
19
+ public let kSystemSoundID_Vibrate: SystemSoundID = 0x00000FFF
20
+
21
+ nonisolated(unsafe) private var registered: [SystemSoundID: URL] = [:]
22
+ nonisolated(unsafe) private var nextID: SystemSoundID = 4096 + 1
23
+
24
+ /// Registers the sound file at `inFileURL` and writes its ID. The file must
25
+ /// exist; it is never played.
26
+ @discardableResult
27
+ public func AudioServicesCreateSystemSoundID(_ inFileURL: CFURL, _ outSystemSoundID: UnsafeMutablePointer<SystemSoundID>) -> OSStatus {
28
+ guard FileManager.default.fileExists(atPath: inFileURL.path) else { return kAudioServicesSystemSoundUnspecifiedError }
29
+ let id = nextID
30
+ nextID += 1
31
+ registered[id] = inFileURL
32
+ outSystemSoundID.pointee = id
33
+ return kAudioServicesNoError
34
+ }
35
+
36
+ @discardableResult
37
+ public func AudioServicesDisposeSystemSoundID(_ inSystemSoundID: SystemSoundID) -> OSStatus {
38
+ registered[inSystemSoundID] = nil
39
+ return kAudioServicesNoError
40
+ }
41
+
42
+ /// Silent: the page has no audio player for the app.
43
+ public func AudioServicesPlaySystemSound(_ inSystemSoundID: SystemSoundID) {}
44
+
45
+ /// Silent; calls `inCompletionBlock` at once.
46
+ public func AudioServicesPlaySystemSoundWithCompletion(_ inSystemSoundID: SystemSoundID, _ inCompletionBlock: (@Sendable () -> Void)?) {
47
+ inCompletionBlock?()
48
+ }
49
+
50
+ /// Silent: the browser has no haptics.
51
+ public func AudioServicesPlayAlertSound(_ inSystemSoundID: SystemSoundID) {}
52
+
53
+ public func AudioServicesPlayAlertSoundWithCompletion(_ inSystemSoundID: SystemSoundID, _ inCompletionBlock: (@Sendable () -> Void)?) {
54
+ inCompletionBlock?()
55
+ }