@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
@@ -0,0 +1,67 @@
1
+ // Home Screen quick actions (`UIApplicationShortcutItem`). A web page has no
2
+ // Home Screen icon menu, so the items an app sets are kept and never shown,
3
+ // and no shortcut ever launches the app.
4
+
5
+ import Foundation
6
+
7
+ public final class UIApplicationShortcutIcon: Hashable, @unchecked Sendable {
8
+ public enum IconType: Int, Sendable {
9
+ case compose, play, pause, add, location, search, share, prohibit, contact, home, markLocation,
10
+ favorite, love, cloud, invitation, confirmation, mail, message, date, time, capturePhoto,
11
+ captureVideo, task, taskCompleted, alarm, bookmark, shuffle, audio, update
12
+ }
13
+
14
+ enum Source: Hashable {
15
+ case type(IconType)
16
+ case systemImage(String)
17
+ case templateImage(String)
18
+ }
19
+
20
+ let source: Source
21
+
22
+ public init(type: IconType) { source = .type(type) }
23
+ public init(systemImageName: String) { source = .systemImage(systemImageName) }
24
+ public init(templateImageName: String) { source = .templateImage(templateImageName) }
25
+
26
+ public static func == (lhs: UIApplicationShortcutIcon, rhs: UIApplicationShortcutIcon) -> Bool { lhs.source == rhs.source }
27
+ public func hash(into hasher: inout Hasher) { hasher.combine(source) }
28
+ }
29
+
30
+ public class UIApplicationShortcutItem: Hashable, @unchecked Sendable {
31
+ public let type: String
32
+ public let localizedTitle: String
33
+ public let localizedSubtitle: String?
34
+ public let icon: UIApplicationShortcutIcon?
35
+ public let userInfo: [String: any NSSecureCoding]?
36
+ public var targetContentIdentifier: Any?
37
+
38
+ public init(type: String, localizedTitle: String, localizedSubtitle: String? = nil,
39
+ icon: UIApplicationShortcutIcon? = nil, userInfo: [String: any NSSecureCoding]? = nil) {
40
+ self.type = type
41
+ self.localizedTitle = localizedTitle
42
+ self.localizedSubtitle = localizedSubtitle
43
+ self.icon = icon
44
+ self.userInfo = userInfo
45
+ }
46
+
47
+ public convenience init(type: String, localizedTitle: String) {
48
+ self.init(type: type, localizedTitle: localizedTitle, localizedSubtitle: nil, icon: nil, userInfo: nil)
49
+ }
50
+
51
+ public static func == (lhs: UIApplicationShortcutItem, rhs: UIApplicationShortcutItem) -> Bool {
52
+ lhs.type == rhs.type && lhs.localizedTitle == rhs.localizedTitle && lhs.localizedSubtitle == rhs.localizedSubtitle && lhs.icon == rhs.icon
53
+ }
54
+ public func hash(into hasher: inout Hasher) { hasher.combine(type); hasher.combine(localizedTitle) }
55
+ }
56
+
57
+ public final class UIMutableApplicationShortcutItem: UIApplicationShortcutItem, @unchecked Sendable {}
58
+
59
+ nonisolated(unsafe) private var _shortcutItems: [UIApplicationShortcutItem]? = nil
60
+
61
+ extension UIApplication {
62
+ /// Kept, never shown: the page has no Home Screen quick actions.
63
+ public var shortcutItems: [UIApplicationShortcutItem]? {
64
+ get { _shortcutItems }
65
+ set { _shortcutItems = newValue }
66
+ }
67
+ }
@@ -0,0 +1,124 @@
1
+ // UIImage's symbol configurations (point size, weight, scale, text style,
2
+ // colors) and the `UIImage(systemName:…)` initializers that take one, which
3
+ // symbol helpers such as SFSafeSymbols and App Intents' display images
4
+ // forward to. A configuration keeps its values; the image is the plain
5
+ // symbol, which the page draws at the size and color of where it is shown.
6
+
7
+ import Foundation
8
+ import SwiftUI
9
+
10
+ extension UIImage {
11
+ /// An image configuration: its traits, kept.
12
+ open class Configuration: @unchecked Sendable {
13
+ public fileprivate(set) var traitCollection: UITraitCollection?
14
+
15
+ public required init() {}
16
+
17
+ public func withTraitCollection(_ traitCollection: UITraitCollection?) -> Self {
18
+ let copy = self.copy()
19
+ copy.traitCollection = traitCollection
20
+ return copy
21
+ }
22
+
23
+ public func applying(_ otherConfiguration: UIImage.Configuration?) -> Self {
24
+ let copy = self.copy()
25
+ if let other = otherConfiguration { copy.merge(other) }
26
+ return copy
27
+ }
28
+
29
+ func copy() -> Self {
30
+ let copy = Self.init()
31
+ copy.merge(self)
32
+ return copy
33
+ }
34
+
35
+ /// Takes the values `other` sets.
36
+ func merge(_ other: Configuration) {
37
+ traitCollection = other.traitCollection ?? traitCollection
38
+ }
39
+ }
40
+
41
+ /// A symbol's configuration: point size, weight, scale, text style and colors, kept.
42
+ open class SymbolConfiguration: Configuration, @unchecked Sendable {
43
+ public private(set) var pointSize: CGFloat?
44
+ public private(set) var weight: SymbolWeight?
45
+ public private(set) var scale: SymbolScale?
46
+ public private(set) var textStyle: UIFont.TextStyle?
47
+ public private(set) var colors: [UIColor] = []
48
+ public private(set) var prefersMulticolor = false
49
+
50
+ public required init() {}
51
+
52
+ public convenience init(pointSize: CGFloat) { self.init(); self.pointSize = pointSize }
53
+ public convenience init(weight: SymbolWeight) { self.init(); self.weight = weight }
54
+ public convenience init(scale: SymbolScale) { self.init(); self.scale = scale }
55
+ public convenience init(pointSize: CGFloat, weight: SymbolWeight, scale: SymbolScale = .default) {
56
+ self.init(); self.pointSize = pointSize; self.weight = weight; self.scale = scale
57
+ }
58
+ public convenience init(textStyle: UIFont.TextStyle) { self.init(); self.textStyle = textStyle }
59
+ public convenience init(textStyle: UIFont.TextStyle, scale: SymbolScale) { self.init(); self.textStyle = textStyle; self.scale = scale }
60
+ public convenience init(font: UIFont) { self.init(); self.pointSize = font.pointSize }
61
+ public convenience init(font: UIFont, scale: SymbolScale) { self.init(); self.pointSize = font.pointSize; self.scale = scale }
62
+ public convenience init(hierarchicalColor: UIColor) { self.init(); self.colors = [hierarchicalColor] }
63
+ public convenience init(paletteColors: [UIColor]) { self.init(); self.colors = paletteColors }
64
+
65
+ public static var unspecified: SymbolConfiguration { SymbolConfiguration() }
66
+ public class func configurationPreferringMulticolor() -> SymbolConfiguration {
67
+ let configuration = SymbolConfiguration()
68
+ configuration.prefersMulticolor = true
69
+ return configuration
70
+ }
71
+ public class func configurationWithHierarchicalColor(_ color: UIColor) -> SymbolConfiguration { .init(hierarchicalColor: color) }
72
+ public class func configurationWithPaletteColors(_ colors: [UIColor]) -> SymbolConfiguration { .init(paletteColors: colors) }
73
+
74
+ public func configurationWithoutPointSizeAndWeight() -> SymbolConfiguration {
75
+ let copy = self.copy()
76
+ copy.pointSize = nil
77
+ copy.weight = nil
78
+ return copy
79
+ }
80
+
81
+ override func merge(_ other: Configuration) {
82
+ super.merge(other)
83
+ guard let other = other as? SymbolConfiguration else { return }
84
+ pointSize = other.pointSize ?? pointSize
85
+ weight = other.weight ?? weight
86
+ scale = other.scale ?? scale
87
+ textStyle = other.textStyle ?? textStyle
88
+ colors = other.colors.isEmpty ? colors : other.colors
89
+ prefersMulticolor = other.prefersMulticolor || prefersMulticolor
90
+ }
91
+
92
+ public func isEqual(to otherConfiguration: SymbolConfiguration?) -> Bool {
93
+ guard let other = otherConfiguration else { return false }
94
+ return pointSize == other.pointSize && weight == other.weight && scale == other.scale
95
+ && textStyle == other.textStyle && colors == other.colors && prefersMulticolor == other.prefersMulticolor
96
+ }
97
+ }
98
+
99
+ public enum SymbolWeight: Int, Sendable {
100
+ case unspecified = 0, ultraLight, thin, light, regular, medium, semibold, bold, heavy, black
101
+ }
102
+
103
+ public enum SymbolScale: Int, Sendable {
104
+ case `default` = -1, unspecified = 0, small, medium, large
105
+ }
106
+
107
+ /// The symbol; the configuration does not change how the page draws it.
108
+ public convenience init?(systemName name: String, withConfiguration configuration: UIImage.Configuration?) {
109
+ self.init(systemName: name)
110
+ }
111
+
112
+ public convenience init?(systemName name: String, compatibleWith traitCollection: UITraitCollection?) {
113
+ self.init(systemName: name)
114
+ }
115
+
116
+ /// The symbol; the page draws variable symbols fully filled.
117
+ public convenience init?(systemName name: String, variableValue: Double, configuration: UIImage.Configuration?) {
118
+ self.init(systemName: name)
119
+ }
120
+
121
+ public func withConfiguration(_ configuration: UIImage.Configuration) -> UIImage { self }
122
+ public func applyingSymbolConfiguration(_ configuration: UIImage.SymbolConfiguration) -> UIImage? { self }
123
+ public var symbolConfiguration: UIImage.SymbolConfiguration? { nil }
124
+ }
@@ -0,0 +1,123 @@
1
+ // UIKit's target/action APIs, with FoundationBridge's `Selector` (which the
2
+ // staging makes from `#selector`): `CADisplayLink`, which calls its target
3
+ // once a frame, and `UIControl`'s actions. The views draw nothing, but code
4
+ // that drives animation or state from them runs.
5
+
6
+ import Foundation
7
+ import FoundationBridge
8
+ import SwiftUI
9
+
10
+ /// Calls its target once a frame (60 a second, on the executor's clock)
11
+ /// while it is added to a run loop and not paused; a paused link runs no
12
+ /// timer at all. Not tied to the main actor, as on iOS (any thread may make
13
+ /// one); its target is called on the main run loop, the only one the page has.
14
+ open class CADisplayLink: @unchecked Sendable {
15
+ private let target: AnyObject
16
+ private let selector: FoundationBridge.Selector
17
+ private var timer: FoundationBridge.Timer?
18
+ /// Added to a run loop and not invalidated since.
19
+ private var isAdded = false
20
+
21
+ open var isPaused = false { didSet { if isPaused != oldValue { schedule() } } }
22
+ open var preferredFramesPerSecond = 60 { didSet { schedule() } }
23
+ open var preferredFrameRateRange = CAFrameRateRange.default
24
+ public private(set) var timestamp: CFTimeInterval = 0
25
+ public private(set) var targetTimestamp: CFTimeInterval = 0
26
+ open var duration: CFTimeInterval { 1 / Double(max(1, preferredFramesPerSecond)) }
27
+
28
+ public init(target: Any, selector sel: FoundationBridge.Selector) {
29
+ self.target = target as AnyObject
30
+ selector = sel
31
+ }
32
+
33
+ open func add(to runloop: FoundationBridge.RunLoop, forMode mode: FoundationBridge.RunLoop.Mode) {
34
+ guard !isAdded else { return }
35
+ isAdded = true
36
+ schedule()
37
+ }
38
+
39
+ open func remove(from runloop: FoundationBridge.RunLoop, forMode mode: FoundationBridge.RunLoop.Mode) { invalidate() }
40
+
41
+ open func invalidate() {
42
+ isAdded = false
43
+ schedule()
44
+ }
45
+
46
+ /// A timer while the link is added and not paused, none otherwise.
47
+ private func schedule() {
48
+ timer?.invalidate()
49
+ timer = nil
50
+ guard isAdded, !isPaused else { return }
51
+ nonisolated(unsafe) let link = self
52
+ timer = FoundationBridge.Timer.scheduledTimer(withTimeInterval: duration, repeats: true) { _ in
53
+ let now = FoundationBridge.CFAbsoluteTimeGetCurrent()
54
+ link.timestamp = now
55
+ link.targetTimestamp = now + link.duration
56
+ link.selector._perform(on: link.target, with: link)
57
+ }
58
+ }
59
+ }
60
+
61
+ /// The frame rates a display link would like.
62
+ public struct CAFrameRateRange: Hashable, Sendable {
63
+ public var minimum: Float
64
+ public var maximum: Float
65
+ public var preferred: Float?
66
+ public init(minimum: Float, maximum: Float, preferred: Float? = nil) {
67
+ self.minimum = minimum
68
+ self.maximum = maximum
69
+ self.preferred = preferred
70
+ }
71
+ public static let `default` = CAFrameRateRange(minimum: 0, maximum: 0, preferred: 0)
72
+ }
73
+
74
+ /// A control: its state and the actions its events send.
75
+ @MainActor
76
+ open class UIControl: UIView {
77
+ public struct Event: OptionSet, Hashable, Sendable {
78
+ public let rawValue: UInt
79
+ public init(rawValue: UInt) { self.rawValue = rawValue }
80
+ public static let touchDown = Event(rawValue: 1 << 0)
81
+ public static let touchDownRepeat = Event(rawValue: 1 << 1)
82
+ public static let touchDragInside = Event(rawValue: 1 << 2)
83
+ public static let touchDragOutside = Event(rawValue: 1 << 3)
84
+ public static let touchUpInside = Event(rawValue: 1 << 6)
85
+ public static let touchUpOutside = Event(rawValue: 1 << 7)
86
+ public static let touchCancel = Event(rawValue: 1 << 8)
87
+ public static let valueChanged = Event(rawValue: 1 << 12)
88
+ public static let primaryActionTriggered = Event(rawValue: 1 << 13)
89
+ public static let editingDidBegin = Event(rawValue: 1 << 16)
90
+ public static let editingChanged = Event(rawValue: 1 << 17)
91
+ public static let editingDidEnd = Event(rawValue: 1 << 18)
92
+ public static let editingDidEndOnExit = Event(rawValue: 1 << 19)
93
+ public static let allTouchEvents = Event(rawValue: 0x0000_0FFF)
94
+ public static let allEditingEvents = Event(rawValue: 0x000F_0000)
95
+ public static let allEvents = Event(rawValue: 0xFFFF_FFFF)
96
+ }
97
+
98
+ open var isEnabled = true
99
+ open var isSelected = false
100
+ open var isHighlighted = false
101
+
102
+ private var actions: [(target: AnyObject?, action: FoundationBridge.Selector, events: Event)] = []
103
+
104
+ open func addTarget(_ target: Any?, action: FoundationBridge.Selector, for controlEvents: Event) {
105
+ actions.append((target.map { $0 as AnyObject }, action, controlEvents))
106
+ }
107
+
108
+ open func removeTarget(_ target: Any?, action: FoundationBridge.Selector?, for controlEvents: Event) {
109
+ let object = target.map { $0 as AnyObject }
110
+ actions.removeAll { entry in
111
+ (object == nil || entry.target === object) && (action == nil || entry.action == action) && !entry.events.isDisjoint(with: controlEvents)
112
+ }
113
+ }
114
+
115
+ open var allTargets: Set<AnyHashable> { Set(actions.compactMap { $0.target.map { ObjectIdentifier($0) } }) }
116
+
117
+ /// Sends the actions registered for `controlEvents` (with the control as the sender).
118
+ open func sendActions(for controlEvents: Event) {
119
+ for entry in actions where !entry.events.isDisjoint(with: controlEvents) {
120
+ if let target = entry.target { entry.action._perform(on: target, with: self) }
121
+ }
122
+ }
123
+ }
@@ -0,0 +1,161 @@
1
+ // UIKit's paste customization: a text view's `pasteDelegate` may turn
2
+ // pasted items into text, attributed text, or nothing (an app that takes a
3
+ // pasted image as an attachment). In the browser the viewer pastes into the
4
+ // text area the page shows for an editable `UITextView`, and the browser
5
+ // inserts the clipboard's text itself; the edit reaches the app as any
6
+ // typing does (`textViewDidChange`). The page does not hand pasted images to
7
+ // the app yet, so the delegate is never consulted. The types are here so an
8
+ // app's delegate compiles and can be called directly (docs/ops-protocol.md,
9
+ // "Sharing and media").
10
+
11
+ import Foundation
12
+ import FoundationBridge
13
+ import SwiftUI
14
+
15
+ /// What a view accepts when something is pasted or dropped into it.
16
+ open class UIPasteConfiguration: @unchecked Sendable {
17
+ open var acceptableTypeIdentifiers: [String]
18
+
19
+ public init() { acceptableTypeIdentifiers = [] }
20
+ public init(acceptableTypeIdentifiers: [String]) { self.acceptableTypeIdentifiers = acceptableTypeIdentifiers }
21
+ public convenience init(forAccepting aClass: any NSItemProviderReading.Type) {
22
+ self.init(acceptableTypeIdentifiers: aClass.readableTypeIdentifiersForItemProvider)
23
+ }
24
+
25
+ open func addAcceptableTypeIdentifiers(_ acceptableTypeIdentifiers: [String]) {
26
+ self.acceptableTypeIdentifiers += acceptableTypeIdentifiers
27
+ }
28
+
29
+ open func addTypeIdentifiers(forAccepting aClass: any NSItemProviderReading.Type) {
30
+ acceptableTypeIdentifiers += aClass.readableTypeIdentifiersForItemProvider
31
+ }
32
+ }
33
+
34
+ /// A responder that takes pastes.
35
+ @MainActor
36
+ public protocol UIPasteConfigurationSupporting: AnyObject {
37
+ var pasteConfiguration: UIPasteConfiguration? { get set }
38
+ func paste(itemProviders: [NSItemProvider])
39
+ func canPaste(_ itemProviders: [NSItemProvider]) -> Bool
40
+ }
41
+
42
+ extension UIPasteConfigurationSupporting {
43
+ public func paste(itemProviders: [NSItemProvider]) {}
44
+ public func canPaste(_ itemProviders: [NSItemProvider]) -> Bool {
45
+ guard let types = pasteConfiguration?.acceptableTypeIdentifiers else { return false }
46
+ return itemProviders.contains { provider in types.contains { provider.hasItemConformingToTypeIdentifier($0) } }
47
+ }
48
+ }
49
+
50
+ /// A text input that takes pastes and has a paste delegate.
51
+ @MainActor
52
+ public protocol UITextPasteConfigurationSupporting: UIPasteConfigurationSupporting {
53
+ var pasteDelegate: (any UITextPasteDelegate)? { get set }
54
+ }
55
+
56
+ extension UITextView: UITextPasteConfigurationSupporting {
57
+ /// Pastes the providers' text at the selection, as the page's own paste
58
+ /// does: each provider's string (or URL) in turn.
59
+ public func paste(itemProviders: [NSItemProvider]) {
60
+ for provider in itemProviders where provider.canLoadObject(ofClass: String.self) || provider.canLoadObject(ofClass: URL.self) {
61
+ let asURL = !provider.canLoadObject(ofClass: String.self)
62
+ let insert: @Sendable (String?) -> Void = { [weak self] text in
63
+ guard let text else { return }
64
+ Task { @MainActor in self?.insertText(text) }
65
+ }
66
+ if asURL {
67
+ provider.loadObject(ofClass: URL.self) { url, _ in insert(url?.absoluteString) }
68
+ } else {
69
+ provider.loadObject(ofClass: String.self) { string, _ in insert(string) }
70
+ }
71
+ }
72
+ }
73
+ }
74
+
75
+ /// One pasted item a paste delegate transforms: it sets a result (text,
76
+ /// attributed text), none (the app took the item itself), or the default.
77
+ @MainActor
78
+ public protocol UITextPasteItem: AnyObject {
79
+ var itemProvider: NSItemProvider { get }
80
+ var localObject: Any? { get }
81
+ var defaultAttributes: [NSAttributedString.Key: Any] { get }
82
+ func setStringResult(_ string: String)
83
+ func setAttributedStringResult(_ string: NSAttributedString)
84
+ func setResult(string: String)
85
+ func setResult(attributedString: NSAttributedString)
86
+ func setNoResult()
87
+ func setDefaultResult()
88
+ }
89
+
90
+ extension UITextPasteItem {
91
+ public func setStringResult(_ string: String) { setResult(string: string) }
92
+ public func setAttributedStringResult(_ string: NSAttributedString) { setResult(attributedString: string) }
93
+ }
94
+
95
+ /// A pasted item and the result its delegate chose.
96
+ @MainActor
97
+ public final class _TextPasteItem: UITextPasteItem {
98
+ public enum Result {
99
+ case pending, string(String), attributedString(NSAttributedString), none, defaultResult
100
+ }
101
+
102
+ public let itemProvider: NSItemProvider
103
+ public let localObject: Any?
104
+ public let defaultAttributes: [NSAttributedString.Key: Any]
105
+ public private(set) var result = Result.pending
106
+
107
+ public init(itemProvider: NSItemProvider, localObject: Any? = nil, defaultAttributes: [NSAttributedString.Key: Any] = [:]) {
108
+ self.itemProvider = itemProvider
109
+ self.localObject = localObject
110
+ self.defaultAttributes = defaultAttributes
111
+ }
112
+
113
+ public func setResult(string: String) { result = .string(string) }
114
+ public func setResult(attributedString: NSAttributedString) { result = .attributedString(attributedString) }
115
+ public func setNoResult() { result = .none }
116
+ public func setDefaultResult() { result = .defaultResult }
117
+ }
118
+
119
+ /// What a text input's paste delegate is asked. Every method has a default
120
+ /// (they are optional on iOS).
121
+ @MainActor
122
+ public protocol UITextPasteDelegate: AnyObject {
123
+ func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
124
+ transform item: any UITextPasteItem)
125
+ func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
126
+ combineItemAttributedStrings itemStrings: [NSAttributedString],
127
+ for textRange: UITextRange) -> NSAttributedString
128
+ func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
129
+ performPasteOf attributedString: NSAttributedString,
130
+ to textRange: UITextRange) -> UITextRange
131
+ func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
132
+ shouldAnimatePasteOf attributedString: NSAttributedString,
133
+ to textRange: UITextRange) -> Bool
134
+ }
135
+
136
+ extension UITextPasteDelegate {
137
+ public func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
138
+ transform item: any UITextPasteItem) {
139
+ item.setDefaultResult()
140
+ }
141
+
142
+ public func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
143
+ combineItemAttributedStrings itemStrings: [NSAttributedString],
144
+ for textRange: UITextRange) -> NSAttributedString {
145
+ let combined = NSMutableAttributedString()
146
+ for string in itemStrings { combined.append(string) }
147
+ return combined
148
+ }
149
+
150
+ public func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
151
+ performPasteOf attributedString: NSAttributedString,
152
+ to textRange: UITextRange) -> UITextRange {
153
+ textRange
154
+ }
155
+
156
+ public func textPasteConfigurationSupporting(_ textPasteConfigurationSupporting: any UITextPasteConfigurationSupporting,
157
+ shouldAnimatePasteOf attributedString: NSAttributedString,
158
+ to textRange: UITextRange) -> Bool {
159
+ false
160
+ }
161
+ }