@swiftbrowser/swift 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/Package.swift +214 -0
  2. package/README.md +10 -2
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +61 -0
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/FoundationBridge/Bundle.swift +119 -0
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Locale.swift +86 -0
  170. package/Sources/FoundationBridge/Localization.swift +149 -0
  171. package/Sources/FoundationBridge/Locks.swift +50 -0
  172. package/Sources/FoundationBridge/Markdown.swift +527 -0
  173. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  174. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  175. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  176. package/Sources/FoundationBridge/Operation.swift +195 -0
  177. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  178. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  179. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  180. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  181. package/Sources/FoundationBridge/Selector.swift +226 -0
  182. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  183. package/Sources/FoundationBridge/Table.swift +211 -0
  184. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  185. package/Sources/FoundationBridge/Timer.swift +53 -0
  186. package/Sources/FoundationBridge/UITextChecker.swift +30 -0
  187. package/Sources/FoundationBridge/URLSession.swift +718 -0
  188. package/Sources/FoundationBridge/UserDefaults.swift +183 -0
  189. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  190. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  191. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  192. package/Sources/ImageIO/GIF.swift +72 -0
  193. package/Sources/ImageIO/ImageIO.swift +248 -0
  194. package/Sources/ImageIO/ImageTypes.swift +28 -0
  195. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  196. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  197. package/Sources/MapKit/Geometry.swift +223 -0
  198. package/Sources/MapKit/Map.swift +638 -0
  199. package/Sources/MapKit/MapView.swift +229 -0
  200. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  201. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  202. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  203. package/Sources/OSLog/OSLog.swift +6 -0
  204. package/Sources/Photos/Photos.swift +572 -0
  205. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  206. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  207. package/Sources/QuickLook/QuickLook.swift +168 -0
  208. package/Sources/SafariServices/SafariServices.swift +106 -0
  209. package/Sources/Security/Security.swift +332 -0
  210. package/Sources/StoreKit/AppStore.swift +207 -0
  211. package/Sources/StoreKit/Products.swift +280 -0
  212. package/Sources/StoreKit/RequestReview.swift +28 -0
  213. package/Sources/StoreKit/StoreKit1.swift +486 -0
  214. package/Sources/StoreKit/StoreViews.swift +428 -0
  215. package/Sources/StoreKit/Transactions.swift +197 -0
  216. package/Sources/SwiftData/Macros.swift +58 -0
  217. package/Sources/SwiftData/ModelActor.swift +38 -0
  218. package/Sources/SwiftData/ModelContainer.swift +129 -0
  219. package/Sources/SwiftData/ModelContext.swift +451 -0
  220. package/Sources/SwiftData/PersistentModel.swift +238 -0
  221. package/Sources/SwiftData/Properties.swift +261 -0
  222. package/Sources/SwiftData/Query.swift +256 -0
  223. package/Sources/SwiftData/Schema.swift +192 -0
  224. package/Sources/SwiftData/Store.swift +146 -0
  225. package/Sources/SwiftData/StringPredicates.swift +125 -0
  226. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  227. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  228. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  229. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  230. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  231. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  232. package/Sources/SwiftUI/API/Accessibility.swift +181 -0
  233. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  234. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  235. package/Sources/SwiftUI/API/Alert.swift +221 -0
  236. package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
  237. package/Sources/SwiftUI/API/Animation.swift +285 -0
  238. package/Sources/SwiftUI/API/App.swift +87 -0
  239. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  240. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  241. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  242. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  243. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  244. package/Sources/SwiftUI/API/Color.swift +237 -0
  245. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  246. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  247. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  248. package/Sources/SwiftUI/API/Commands.swift +106 -0
  249. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  250. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  251. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  252. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  253. package/Sources/SwiftUI/API/Controls.swift +300 -0
  254. package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
  255. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  256. package/Sources/SwiftUI/API/Decorations.swift +92 -0
  257. package/Sources/SwiftUI/API/EditMode.swift +212 -0
  258. package/Sources/SwiftUI/API/Effects.swift +388 -0
  259. package/Sources/SwiftUI/API/Entry.swift +8 -0
  260. package/Sources/SwiftUI/API/Environment.swift +439 -0
  261. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  262. package/Sources/SwiftUI/API/Focus.swift +137 -0
  263. package/Sources/SwiftUI/API/Font.swift +131 -0
  264. package/Sources/SwiftUI/API/Gauge.swift +290 -0
  265. package/Sources/SwiftUI/API/Geometry.swift +89 -0
  266. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  267. package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
  268. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  269. package/Sources/SwiftUI/API/Gestures.swift +342 -0
  270. package/Sources/SwiftUI/API/Glass.swift +127 -0
  271. package/Sources/SwiftUI/API/Grid.swift +188 -0
  272. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  273. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  274. package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
  275. package/Sources/SwiftUI/API/Layout.swift +220 -0
  276. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  277. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  278. package/Sources/SwiftUI/API/Lists.swift +331 -0
  279. package/Sources/SwiftUI/API/Menu.swift +58 -0
  280. package/Sources/SwiftUI/API/Modifiers.swift +313 -0
  281. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  282. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  283. package/Sources/SwiftUI/API/Navigation.swift +386 -0
  284. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  285. package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
  286. package/Sources/SwiftUI/API/OnChange.swift +48 -0
  287. package/Sources/SwiftUI/API/Path.swift +543 -0
  288. package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
  289. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  290. package/Sources/SwiftUI/API/Picker.swift +185 -0
  291. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  292. package/Sources/SwiftUI/API/Popover.swift +41 -0
  293. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  294. package/Sources/SwiftUI/API/Presentation.swift +122 -0
  295. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  296. package/Sources/SwiftUI/API/Primitives.swift +517 -0
  297. package/Sources/SwiftUI/API/Publishers.swift +107 -0
  298. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  299. package/Sources/SwiftUI/API/RowActions.swift +84 -0
  300. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  301. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  302. package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
  303. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  304. package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
  305. package/Sources/SwiftUI/API/Shape.swift +214 -0
  306. package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
  307. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  308. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  309. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  310. package/Sources/SwiftUI/API/State.swift +144 -0
  311. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  312. package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
  313. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  314. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  315. package/Sources/SwiftUI/API/Table.swift +382 -0
  316. package/Sources/SwiftUI/API/Tabs.swift +263 -0
  317. package/Sources/SwiftUI/API/Tasks.swift +35 -0
  318. package/Sources/SwiftUI/API/Text.swift +386 -0
  319. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  320. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  321. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  322. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  323. package/Sources/SwiftUI/API/Timeline.swift +212 -0
  324. package/Sources/SwiftUI/API/Toolbar.swift +251 -0
  325. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  326. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  327. package/Sources/SwiftUI/API/Video.swift +64 -0
  328. package/Sources/SwiftUI/API/View.swift +215 -0
  329. package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
  330. package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
  331. package/Sources/SwiftUI/API/Windows.swift +25 -0
  332. package/Sources/SwiftUI/Charts/Axis.swift +325 -0
  333. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  334. package/Sources/SwiftUI/Charts/Chart.swift +660 -0
  335. package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
  336. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  337. package/Sources/SwiftUI/Charts/Marks.swift +204 -0
  338. package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
  339. package/Sources/SwiftUI/Charts/Scales.swift +326 -0
  340. package/Sources/SwiftUI/Localization/Localization.swift +498 -0
  341. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  342. package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
  343. package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
  344. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  345. package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
  346. package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
  347. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  348. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  349. package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
  350. package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
  351. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  352. package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
  353. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  354. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  355. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  356. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  357. package/Sources/Symbols/Symbols.swift +25 -0
  358. package/Sources/Translation/Translation.swift +423 -0
  359. package/Sources/UIKit/Activity.swift +213 -0
  360. package/Sources/UIKit/Alerts.swift +69 -0
  361. package/Sources/UIKit/AppDelegate.swift +222 -0
  362. package/Sources/UIKit/Appearance.swift +84 -0
  363. package/Sources/UIKit/ColorConversions.swift +70 -0
  364. package/Sources/UIKit/Controls.swift +225 -0
  365. package/Sources/UIKit/Device.swift +200 -0
  366. package/Sources/UIKit/Feedback.swift +65 -0
  367. package/Sources/UIKit/Font.swift +307 -0
  368. package/Sources/UIKit/Graphics.swift +204 -0
  369. package/Sources/UIKit/HostingController.swift +185 -0
  370. package/Sources/UIKit/Identity.swift +24 -0
  371. package/Sources/UIKit/Introspectable.swift +510 -0
  372. package/Sources/UIKit/Pasteboard.swift +363 -0
  373. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  374. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  375. package/Sources/UIKit/Representable.swift +288 -0
  376. package/Sources/UIKit/SafeArea.swift +12 -0
  377. package/Sources/UIKit/SceneDelegates.swift +132 -0
  378. package/Sources/UIKit/Scenes.swift +40 -0
  379. package/Sources/UIKit/ScrollView.swift +157 -0
  380. package/Sources/UIKit/ShortcutItems.swift +67 -0
  381. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  382. package/Sources/UIKit/TargetAction.swift +123 -0
  383. package/Sources/UIKit/TextPaste.swift +161 -0
  384. package/Sources/UIKit/TextView.swift +538 -0
  385. package/Sources/UIKit/UIKit.swift +292 -0
  386. package/Sources/UIKit/UIView.swift +855 -0
  387. package/Sources/UIKit/ViewTranslation.swift +311 -0
  388. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  389. package/Sources/UserNotifications/Content.swift +370 -0
  390. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  391. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  392. package/Sources/WebKit/WebKit.swift +245 -0
  393. package/Sources/os/os.swift +376 -0
  394. package/Sources/zlib/zlib.swift +6 -0
  395. package/index.d.ts +2 -0
  396. package/index.mjs +16 -0
  397. package/manifest.d.mts +2 -0
  398. package/manifest.mjs +39 -0
  399. package/package.json +30 -4
  400. package/sync-sources.mjs +33 -0
@@ -0,0 +1,411 @@
1
+ // `import CoreGraphics` for the browser. The geometry types and `CGImage`
2
+ // are the SwiftUI shim's (re-exported, as on Apple platforms SwiftUI uses
3
+ // Core Graphics' own); this module adds what image code draws with.
4
+ //
5
+ // A `CGImage` holds no pixels: it is a recipe the page runs (a decoded file,
6
+ // then steps; Runtime/ImageSource.swift). So a `CGContext` records too.
7
+ // Drawing an image into it places that image's recipe in the context's
8
+ // rectangle (`place`), a clip to a rounded rectangle or an ellipse masks it
9
+ // (`roundedClip`), and `makeImage()` renders the context's rectangle: the
10
+ // same recipe, cut to the canvas. That covers what image libraries draw
11
+ // (decompressing, resizing, cropping, rounding corners). Only the last image
12
+ // drawn is kept, fills and strokes are not drawn, and `data` is never
13
+ // written: code that reads pixels back gets zeros. See docs/ops-protocol.md,
14
+ // "Core Graphics and Image I/O".
15
+
16
+ @_exported import typealias SwiftUI.CGFloat
17
+ @_exported import struct SwiftUI.CGPoint
18
+ @_exported import struct SwiftUI.CGSize
19
+ @_exported import struct SwiftUI.CGRect
20
+ @_exported import class SwiftUI.CGImage
21
+ @_exported import enum SwiftUI.CGLineCap
22
+ @_exported import enum SwiftUI.CGLineJoin
23
+ @_exported import struct SwiftUI.CGAffineTransform
24
+ import SwiftUI
25
+
26
+ // MARK: - Colors
27
+
28
+ /// A color space. Every bitmap here is device RGB.
29
+ public final class CGColorSpace: @unchecked Sendable {
30
+ public let name: String?
31
+ public init?(name: String) { self.name = name }
32
+ init(_name name: String) { self.name = name }
33
+
34
+ public var numberOfComponents: Int { 3 }
35
+ public var model: CGColorSpaceModel { .rgb }
36
+
37
+ public static let sRGB = "kCGColorSpaceSRGB"
38
+ public static let displayP3 = "kCGColorSpaceDisplayP3"
39
+ public static let genericRGBLinear = "kCGColorSpaceGenericRGBLinear"
40
+ public static let linearSRGB = "kCGColorSpaceLinearSRGB"
41
+ public static let extendedSRGB = "kCGColorSpaceExtendedSRGB"
42
+ public static let genericGrayGamma2_2 = "kCGColorSpaceGenericGrayGamma2_2"
43
+ }
44
+
45
+ public enum CGColorSpaceModel: Int32, Sendable {
46
+ case unknown = -1, monochrome, rgb, cmyk, lab, deviceN, indexed, pattern, XYZ
47
+ }
48
+
49
+ public func CGColorSpaceCreateDeviceRGB() -> CGColorSpace { CGColorSpace(_name: CGColorSpace.sRGB) }
50
+ public func CGColorSpaceCreateDeviceGray() -> CGColorSpace { CGColorSpace(_name: CGColorSpace.genericGrayGamma2_2) }
51
+
52
+ /// A color: RGBA components in 0…1.
53
+ public final class CGColor: @unchecked Sendable {
54
+ public let components: [CGFloat]?
55
+ public var alpha: CGFloat { components?.last ?? 1 }
56
+ public var numberOfComponents: Int { components?.count ?? 0 }
57
+ public var colorSpace: CGColorSpace? { CGColorSpaceCreateDeviceRGB() }
58
+
59
+ public init(red: CGFloat, green: CGFloat, blue: CGFloat, alpha: CGFloat) {
60
+ components = [red, green, blue, alpha]
61
+ }
62
+
63
+ public init(gray: CGFloat, alpha: CGFloat) {
64
+ components = [gray, gray, gray, alpha]
65
+ }
66
+
67
+ public init?(colorSpace: CGColorSpace, components: UnsafePointer<CGFloat>) {
68
+ self.components = Array(UnsafeBufferPointer(start: components, count: 4))
69
+ }
70
+
71
+ public func copy(alpha: CGFloat) -> CGColor? {
72
+ let c = components ?? [0, 0, 0, 1]
73
+ return CGColor(red: c[0], green: c[1], blue: c[2], alpha: alpha)
74
+ }
75
+
76
+ public static let black = CGColor(gray: 0, alpha: 1)
77
+ public static let white = CGColor(gray: 1, alpha: 1)
78
+ public static let clear = CGColor(gray: 0, alpha: 0)
79
+ }
80
+
81
+ // MARK: - Bitmap formats
82
+
83
+ /// How a bitmap stores alpha. Recorded; the page's bitmaps are premultiplied RGBA.
84
+ public enum CGImageAlphaInfo: UInt32, Sendable {
85
+ case none = 0, premultipliedLast, premultipliedFirst, last, first, noneSkipLast, noneSkipFirst, alphaOnly
86
+ }
87
+
88
+ public struct CGBitmapInfo: OptionSet, Sendable {
89
+ public let rawValue: UInt32
90
+ public init(rawValue: UInt32) { self.rawValue = rawValue }
91
+ public init(_ rawValue: UInt32) { self.rawValue = rawValue }
92
+
93
+ public static let alphaInfoMask = CGBitmapInfo(rawValue: 0x1F)
94
+ public static let floatInfoMask = CGBitmapInfo(rawValue: 0xF00)
95
+ public static let floatComponents = CGBitmapInfo(rawValue: 1 << 8)
96
+ public static let byteOrderMask = CGBitmapInfo(rawValue: 0x7000)
97
+ public static let byteOrderDefault = CGBitmapInfo([])
98
+ public static let byteOrder16Little = CGBitmapInfo(rawValue: 1 << 12)
99
+ public static let byteOrder32Little = CGBitmapInfo(rawValue: 2 << 12)
100
+ public static let byteOrder16Big = CGBitmapInfo(rawValue: 3 << 12)
101
+ public static let byteOrder32Big = CGBitmapInfo(rawValue: 4 << 12)
102
+ }
103
+
104
+ public enum CGInterpolationQuality: Int32, Sendable {
105
+ case `default` = 0, none, low, medium, high
106
+ }
107
+
108
+ public enum CGBlendMode: Int32, Sendable {
109
+ case normal = 0, multiply, screen, overlay, darken, lighten, colorDodge, colorBurn, softLight, hardLight
110
+ case difference, exclusion, hue, saturation, color, luminosity, clear, copy, sourceIn, sourceOut
111
+ case sourceAtop, destinationOver, destinationIn, destinationOut, destinationAtop, xor, plusDarker, plusLighter
112
+ }
113
+
114
+ public enum CGPathFillRule: Int, Sendable {
115
+ case winding = 0, evenOdd
116
+ }
117
+
118
+ /// Where a bitmap's bytes come from. Always empty here: the page holds the pixels.
119
+ public final class CGDataProvider: @unchecked Sendable {
120
+ public init?(data: Any) { return nil }
121
+ public var data: Any? { nil }
122
+ }
123
+
124
+ extension CGImage {
125
+ public var colorSpace: CGColorSpace? { CGColorSpaceCreateDeviceRGB() }
126
+ public var alphaInfo: CGImageAlphaInfo { .premultipliedLast }
127
+ public var bitmapInfo: CGBitmapInfo { CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue) }
128
+ public var isMask: Bool { false }
129
+ public var shouldInterpolate: Bool { true }
130
+ public var renderingIntent: CGColorRenderingIntent { .defaultIntent }
131
+ /// Nil: the pixels are the page's.
132
+ public var dataProvider: CGDataProvider? { nil }
133
+ }
134
+
135
+ public enum CGColorRenderingIntent: Int32, Sendable {
136
+ case defaultIntent = 0, absoluteColorimetric, relativeColorimetric, perceptual, saturation
137
+ }
138
+
139
+ // MARK: - Integer geometry
140
+
141
+ // Core Graphics' initializers from integers (the shim's types take CGFloat).
142
+ extension CGPoint {
143
+ public init(x: Int, y: Int) { self.init(x: CGFloat(x), y: CGFloat(y)) }
144
+ }
145
+
146
+ extension CGSize {
147
+ public init(width: Int, height: Int) { self.init(width: CGFloat(width), height: CGFloat(height)) }
148
+ }
149
+
150
+ extension CGRect {
151
+ public init(x: Int, y: Int, width: Int, height: Int) {
152
+ self.init(x: CGFloat(x), y: CGFloat(y), width: CGFloat(width), height: CGFloat(height))
153
+ }
154
+ }
155
+
156
+ // MARK: - Paths
157
+
158
+ /// A path. The shapes image code clips to are kept as such (a rectangle, a
159
+ /// rounded rectangle, an ellipse); anything else is its bounding box.
160
+ public class CGPath: @unchecked Sendable {
161
+ enum Shape: Equatable {
162
+ case rect(CGRect)
163
+ case roundedRect(CGRect, cornerWidth: CGFloat, cornerHeight: CGFloat)
164
+ case ellipse(CGRect)
165
+ }
166
+
167
+ var shapes: [Shape] = []
168
+
169
+ public init() {}
170
+
171
+ public convenience init(rect: CGRect, transform: UnsafePointer<CGAffineTransform>?) {
172
+ self.init()
173
+ shapes = [.rect(rect.applying(transform?.pointee ?? .identity))]
174
+ }
175
+
176
+ public convenience init(roundedRect rect: CGRect, cornerWidth: CGFloat, cornerHeight: CGFloat, transform: UnsafePointer<CGAffineTransform>?) {
177
+ self.init()
178
+ shapes = [.roundedRect(rect.applying(transform?.pointee ?? .identity), cornerWidth: cornerWidth, cornerHeight: cornerHeight)]
179
+ }
180
+
181
+ public convenience init(ellipseIn rect: CGRect, transform: UnsafePointer<CGAffineTransform>?) {
182
+ self.init()
183
+ shapes = [.ellipse(rect.applying(transform?.pointee ?? .identity))]
184
+ }
185
+
186
+ public var boundingBox: CGRect {
187
+ shapes.reduce(CGRect.null) { box, shape in
188
+ switch shape {
189
+ case .rect(let r), .ellipse(let r), .roundedRect(let r, _, _): box.union(r)
190
+ }
191
+ }
192
+ }
193
+
194
+ public var isEmpty: Bool { shapes.isEmpty }
195
+ }
196
+
197
+ public final class CGMutablePath: CGPath, @unchecked Sendable {
198
+ public override init() { super.init() }
199
+
200
+ public func addRect(_ rect: CGRect, transform: CGAffineTransform = .identity) { shapes.append(.rect(rect.applying(transform))) }
201
+ public func addEllipse(in rect: CGRect, transform: CGAffineTransform = .identity) { shapes.append(.ellipse(rect.applying(transform))) }
202
+ public func addRoundedRect(in rect: CGRect, cornerWidth: CGFloat, cornerHeight: CGFloat, transform: CGAffineTransform = .identity) {
203
+ shapes.append(.roundedRect(rect.applying(transform), cornerWidth: cornerWidth, cornerHeight: cornerHeight))
204
+ }
205
+ public func addPath(_ path: CGPath, transform: CGAffineTransform = .identity) { shapes += path.shapes }
206
+ public func move(to point: CGPoint, transform: CGAffineTransform = .identity) {}
207
+ public func addLine(to point: CGPoint, transform: CGAffineTransform = .identity) {}
208
+ public func closeSubpath() {}
209
+ }
210
+
211
+ // MARK: - Contexts
212
+
213
+ /// A bitmap context that records what is drawn into it as recipe steps.
214
+ public final class CGContext: @unchecked Sendable {
215
+ public let width: Int
216
+ public let height: Int
217
+ public let bitsPerComponent: Int
218
+ public let bytesPerRow: Int
219
+ public let colorSpace: CGColorSpace?
220
+ public let bitmapInfo: UInt32
221
+ public var alphaInfo: CGImageAlphaInfo { CGImageAlphaInfo(rawValue: bitmapInfo & 0x1F) ?? .premultipliedLast }
222
+ public var interpolationQuality: CGInterpolationQuality = .default
223
+ /// The bitmap's memory. The pixels are the page's, so this is never drawn
224
+ /// into: a context made without memory gets zeroed memory of its size on
225
+ /// first use, which also identifies the context to Accelerate's vImage
226
+ /// functions (they turn a convolution of it into a recipe step).
227
+ public var data: UnsafeMutableRawPointer? {
228
+ if let providedData { return providedData }
229
+ if let ownedData { return ownedData }
230
+ let size = max(1, bytesPerRow * height)
231
+ let memory = UnsafeMutableRawPointer.allocate(byteCount: size, alignment: 16)
232
+ memory.initializeMemory(as: UInt8.self, repeating: 0, count: size)
233
+ ownedData = memory
234
+ Self.registry[memory] = _WeakContext(self)
235
+ return memory
236
+ }
237
+ private let providedData: UnsafeMutableRawPointer?
238
+ private var ownedData: UnsafeMutableRawPointer?
239
+
240
+ final class _WeakContext { weak var context: CGContext?; init(_ context: CGContext) { self.context = context } }
241
+ nonisolated(unsafe) static var registry: [UnsafeMutableRawPointer: _WeakContext] = [:]
242
+
243
+ /// The context whose `data` this is, if any.
244
+ public static func _context(withData data: UnsafeMutableRawPointer?) -> CGContext? {
245
+ guard let data else { return nil }
246
+ return registry[data]?.context
247
+ }
248
+
249
+ deinit {
250
+ for memory in [providedData, ownedData].compactMap({ $0 }) where Self.registry[memory]?.context == nil || Self.registry[memory]?.context === self {
251
+ Self.registry[memory] = nil
252
+ }
253
+ ownedData?.deallocate()
254
+ }
255
+
256
+ /// The image drawn last, already placed in the canvas (y up, as Core Graphics draws).
257
+ private var content: _ImageRecipe?
258
+ /// Whether `content` is the image drawn last exactly as it was (drawn at its own size, at the origin).
259
+ private var contentIsUntouched = false
260
+ private var contentSource: CGImage?
261
+ private var ctm: CGAffineTransform = .identity
262
+ private var path: [CGPath.Shape] = []
263
+ private var clipShape: CGPath.Shape?
264
+ private var states: [(CGAffineTransform, CGPath.Shape?)] = []
265
+
266
+ public init?(data: UnsafeMutableRawPointer?, width: Int, height: Int, bitsPerComponent: Int, bytesPerRow: Int, space: CGColorSpace, bitmapInfo: UInt32) {
267
+ guard width > 0, height > 0 else { return nil }
268
+ providedData = data
269
+ self.width = width
270
+ self.height = height
271
+ self.bitsPerComponent = bitsPerComponent
272
+ self.bytesPerRow = bytesPerRow
273
+ self.colorSpace = space
274
+ self.bitmapInfo = bitmapInfo
275
+ if let data { Self.registry[data] = _WeakContext(self) }
276
+ }
277
+
278
+ var canvas: CGRect { CGRect(x: 0, y: 0, width: Double(width), height: Double(height)) }
279
+
280
+ /// Draws `image` scaled into `rect`, through the current transform and clip.
281
+ public func draw(_ image: CGImage, in rect: CGRect, byTiling: Bool = false) {
282
+ let target = rect.applying(ctm)
283
+ let source = image._recipe
284
+ let w = Double(image.width), h = Double(image.height)
285
+ guard w > 0, h > 0, target.width > 0, target.height > 0 else { return }
286
+ var recipe = source
287
+ let identity = target == CGRect(x: 0, y: 0, width: w, height: h)
288
+ if !identity {
289
+ recipe = recipe.adding(.object([
290
+ "op": .string("place"),
291
+ "sx": .number(target.width / w), "sy": .number(target.height / h),
292
+ "tx": .number(target.minX), "ty": .number(target.minY),
293
+ ]), extent: target)
294
+ }
295
+ if let clipShape { recipe = Self.clipped(recipe, to: clipShape) }
296
+ content = recipe
297
+ contentIsUntouched = identity && clipShape == nil
298
+ contentSource = image
299
+ }
300
+
301
+ static func clipped(_ recipe: _ImageRecipe, to shape: CGPath.Shape) -> _ImageRecipe {
302
+ let (rect, rx, ry): (CGRect, CGFloat, CGFloat) = switch shape {
303
+ case .rect(let r): (r, 0, 0)
304
+ case .roundedRect(let r, let cw, let ch): (r, cw, ch)
305
+ case .ellipse(let r): (r, r.width / 2, r.height / 2)
306
+ }
307
+ let extent = recipe.extent.intersection(rect)
308
+ return recipe.adding(.object([
309
+ "op": .string("roundedClip"),
310
+ "x": .number(rect.minX), "y": .number(rect.minY), "width": .number(rect.width), "height": .number(rect.height),
311
+ "rx": .number(rx), "ry": .number(ry),
312
+ ]), extent: extent.isNull ? .zero : extent)
313
+ }
314
+
315
+ /// What vImage's box convolution makes of `source`'s pixels in this
316
+ /// context: `source`'s canvas, blurred. A box of k pixels has the variance
317
+ /// of a Gaussian with σ² = (k² − 1) / 12, so each pass is a `gaussianBlur`
318
+ /// step of that radius (passes compose as their variances add). Edge
319
+ /// extension is a `clamp` first.
320
+ public func _boxConvolve(from source: CGContext, kernelWidth: Int, kernelHeight: Int, extendEdges: Bool) {
321
+ guard let sourceContent = source.content else {
322
+ content = nil
323
+ contentIsUntouched = false
324
+ contentSource = nil
325
+ return
326
+ }
327
+ let k2 = (Double(kernelWidth * kernelWidth) + Double(kernelHeight * kernelHeight)) / 2
328
+ let sigma = ((k2 - 1) / 12).squareRoot()
329
+ let canvas = source.canvas
330
+ func crop(_ r: CGRect) -> _JSON {
331
+ .object(["op": .string("crop"), "x": .number(r.minX), "y": .number(r.minY), "width": .number(r.width), "height": .number(r.height)])
332
+ }
333
+ var recipe = sourceContent.adding(crop(canvas), extent: canvas.intersection(sourceContent.extent))
334
+ if extendEdges { recipe = recipe.adding(.object(["op": .string("clamp")]), extent: .infinite) }
335
+ if sigma > 0 { recipe = recipe.adding(.object(["op": .string("gaussianBlur"), "radius": .number(sigma)]), extent: recipe.extent) }
336
+ content = recipe.adding(crop(self.canvas), extent: self.canvas)
337
+ contentIsUntouched = false
338
+ contentSource = nil
339
+ }
340
+
341
+ /// The canvas as an image: what was drawn, cut to the canvas.
342
+ public func makeImage() -> CGImage? {
343
+ guard let content else {
344
+ return CGImage(_recipe: _ImageRecipe(source: nil, extent: canvas))
345
+ }
346
+ if contentIsUntouched, let contentSource, contentSource.width == width, contentSource.height == height {
347
+ return contentSource
348
+ }
349
+ guard let rendered = content.rendered(in: canvas) else { return nil }
350
+ return CGImage(_recipe: rendered)
351
+ }
352
+
353
+ // Paths and clipping
354
+
355
+ public func addPath(_ path: CGPath) { self.path += path.shapes.map { transformed($0) } }
356
+ public func addRect(_ rect: CGRect) { path.append(.rect(rect.applying(ctm))) }
357
+ public func addEllipse(in rect: CGRect) { path.append(.ellipse(rect.applying(ctm))) }
358
+ public func beginPath() { path = [] }
359
+ public func closePath() {}
360
+ public func move(to point: CGPoint) {}
361
+ public func addLine(to point: CGPoint) {}
362
+
363
+ private func transformed(_ shape: CGPath.Shape) -> CGPath.Shape {
364
+ switch shape {
365
+ case .rect(let r): .rect(r.applying(ctm))
366
+ case .ellipse(let r): .ellipse(r.applying(ctm))
367
+ case .roundedRect(let r, let cw, let ch): .roundedRect(r.applying(ctm), cornerWidth: cw * ctm.a, cornerHeight: ch * ctm.d)
368
+ }
369
+ }
370
+
371
+ /// Clips to the current path (its first shape) and empties the path.
372
+ public func clip(using rule: CGPathFillRule = .winding) {
373
+ if let shape = path.first { clipShape = shape }
374
+ path = []
375
+ }
376
+
377
+ public func clip(to rect: CGRect) { clipShape = .rect(rect.applying(ctm)) }
378
+
379
+ // State and transforms
380
+
381
+ public func saveGState() { states.append((ctm, clipShape)) }
382
+ public func restoreGState() { if let (t, c) = states.popLast() { ctm = t; clipShape = c } }
383
+ public func translateBy(x: CGFloat, y: CGFloat) { ctm = CGAffineTransform(translationX: x, y: y).concatenating(ctm) }
384
+ public func scaleBy(x: CGFloat, y: CGFloat) { ctm = CGAffineTransform(scaleX: x, y: y).concatenating(ctm) }
385
+ public func rotate(by angle: CGFloat) { ctm = CGAffineTransform(rotationAngle: angle).concatenating(ctm) }
386
+ public func concatenate(_ transform: CGAffineTransform) { ctm = transform.concatenating(ctm) }
387
+ public var ctm_: CGAffineTransform { ctm }
388
+ public var userSpaceToDeviceSpaceTransform: CGAffineTransform { ctm }
389
+
390
+ // Painting: accepted and not drawn (the page draws bitmaps, not vector paint).
391
+
392
+ public func setFillColor(_ color: CGColor) {}
393
+ public func setStrokeColor(_ color: CGColor) {}
394
+ public func setLineWidth(_ width: CGFloat) {}
395
+ public func setLineCap(_ cap: CGLineCap) {}
396
+ public func setLineJoin(_ join: CGLineJoin) {}
397
+ public func setAlpha(_ alpha: CGFloat) {}
398
+ public func setBlendMode(_ mode: CGBlendMode) {}
399
+ public func setShouldAntialias(_ value: Bool) {}
400
+ public func setAllowsAntialiasing(_ value: Bool) {}
401
+ public func fill(_ rect: CGRect) {}
402
+ public func fill(_ rects: [CGRect]) {}
403
+ public func fillPath(using rule: CGPathFillRule = .winding) { path = [] }
404
+ public func strokePath() { path = [] }
405
+ public func stroke(_ rect: CGRect) {}
406
+ public func stroke(_ rect: CGRect, width: CGFloat) {}
407
+ public func fillEllipse(in rect: CGRect) {}
408
+ public func strokeEllipse(in rect: CGRect) {}
409
+ public func clear(_ rect: CGRect) {}
410
+ public func flush() {}
411
+ }
@@ -0,0 +1,28 @@
1
+ // SwiftUI's transforms that take Core Graphics' affine transform. On Apple
2
+ // platforms SwiftUI imports Core Graphics; here Core Graphics builds on the
3
+ // SwiftUI shim, so the conversions live on this side.
4
+
5
+ import SwiftUI
6
+
7
+ extension ProjectionTransform {
8
+ /// The affine transform as a projection: (a b 0 / c d 0 / tx ty 1).
9
+ public init(_ m: CGAffineTransform) {
10
+ self.init()
11
+ (m11, m12, m21, m22, m31, m32) = (m.a, m.b, m.c, m.d, m.tx, m.ty)
12
+ }
13
+ }
14
+
15
+ extension CGAffineTransform {
16
+ /// The affine part of a projection.
17
+ public init(_ m: ProjectionTransform) {
18
+ self.init(a: m.m11, b: m.m12, c: m.m21, d: m.m22, tx: m.m31, ty: m.m32)
19
+ }
20
+ }
21
+
22
+ nonisolated extension View {
23
+ /// Draws the view through `transform` about its top-leading corner (an
24
+ /// offset, a rotation and a scale; a shear draws untransformed).
25
+ public func transformEffect(_ transform: CGAffineTransform) -> some View {
26
+ projectionEffect(ProjectionTransform(transform))
27
+ }
28
+ }