@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,342 @@
1
+ /// Gestures: `DragGesture`, `LongPressGesture` and `TapGesture`, attached with
2
+ /// `.gesture` (and its `highPriority` / `simultaneous` twins, which the shim
3
+ /// treats identically). A drag or long press becomes a `gesture` element
4
+ /// whose child is the content; the renderer tracks pointers on it and sends
5
+ /// `drag` / `longpress` events (see docs/ops-protocol.md, Phase 8). A plain
6
+ /// tap gesture is the Phase 6 `tapgesture` element.
7
+
8
+ /// Which gestures of a subtree a `.gesture` modifier competes with. Accepted
9
+ /// for source compatibility; the renderer resolves the innermost control.
10
+ public struct GestureMask: OptionSet, Sendable {
11
+ public let rawValue: UInt
12
+ public init(rawValue: UInt) { self.rawValue = rawValue }
13
+ public static let none = GestureMask([])
14
+ public static let gesture = GestureMask(rawValue: 1)
15
+ public static let subviews = GestureMask(rawValue: 2)
16
+ public static let all: GestureMask = [.gesture, .subviews]
17
+ }
18
+
19
+ /// What the renderer must track for a gesture and what to do with its events.
20
+ /// Combined gestures (`sequenced`, `simultaneously`) merge their configurations.
21
+ public struct _GestureConfig: Sendable {
22
+ var drag = false
23
+ var longPress = false
24
+ var minimumDistance: CGFloat = 10
25
+ var minimumDuration: Double = 0.5
26
+ var onDragChanged: [@MainActor (DragGesture.Value) -> Void] = []
27
+ var onDragEnded: [@MainActor (DragGesture.Value) -> Void] = []
28
+ var onLongPressChanged: [@MainActor (Bool) -> Void] = []
29
+ var onLongPressEnded: [@MainActor (Bool) -> Void] = []
30
+ var onTap: [@MainActor () -> Void] = []
31
+
32
+ func merged(with other: _GestureConfig) -> _GestureConfig {
33
+ var result = self
34
+ result.drag = drag || other.drag
35
+ result.longPress = longPress || other.longPress
36
+ result.minimumDistance = drag && other.drag ? min(minimumDistance, other.minimumDistance)
37
+ : (other.drag ? other.minimumDistance : minimumDistance)
38
+ result.minimumDuration = longPress && other.longPress ? min(minimumDuration, other.minimumDuration)
39
+ : (other.longPress ? other.minimumDuration : minimumDuration)
40
+ result.onDragChanged += other.onDragChanged
41
+ result.onDragEnded += other.onDragEnded
42
+ result.onLongPressChanged += other.onLongPressChanged
43
+ result.onLongPressEnded += other.onLongPressEnded
44
+ result.onTap += other.onTap
45
+ return result
46
+ }
47
+ }
48
+
49
+ /// A gesture the renderer recognizes. `Value` is what the callbacks receive.
50
+ public protocol Gesture {
51
+ associatedtype Value
52
+ var _config: _GestureConfig { get }
53
+ /// Adds callbacks for the gesture's changed / ended phases to a config
54
+ /// (each gesture type knows which lists its `Value` belongs in).
55
+ static func _adding(to config: _GestureConfig,
56
+ changed: (@MainActor (Value) -> Void)?,
57
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig
58
+ }
59
+
60
+ extension Gesture {
61
+ public func onChanged(_ action: @escaping @MainActor (Value) -> Void) -> _ModifiedGesture<Self> {
62
+ _ModifiedGesture(_config: Self._adding(to: _config, changed: action, ended: nil))
63
+ }
64
+
65
+ public func onEnded(_ action: @escaping @MainActor (Value) -> Void) -> _ModifiedGesture<Self> {
66
+ _ModifiedGesture(_config: Self._adding(to: _config, changed: nil, ended: action))
67
+ }
68
+
69
+ /// Both gestures are recognized; the shim does not order them.
70
+ public func sequenced<Other: Gesture>(before other: Other) -> _CombinedGesture<Self, Other> {
71
+ _CombinedGesture(_config: _config.merged(with: other._config))
72
+ }
73
+
74
+ public func simultaneously<Other: Gesture>(with other: Other) -> _CombinedGesture<Self, Other> {
75
+ _CombinedGesture(_config: _config.merged(with: other._config))
76
+ }
77
+
78
+ public func exclusively<Other: Gesture>(before other: Other) -> _CombinedGesture<Self, Other> {
79
+ _CombinedGesture(_config: _config.merged(with: other._config))
80
+ }
81
+ }
82
+
83
+ /// A gesture with `onChanged` / `onEnded` callbacks attached; keeps the base
84
+ /// gesture's `Value` so further callbacks can be chained.
85
+ public struct _ModifiedGesture<Base: Gesture>: Gesture {
86
+ public typealias Value = Base.Value
87
+ public let _config: _GestureConfig
88
+
89
+ public static func _adding(to config: _GestureConfig,
90
+ changed: (@MainActor (Value) -> Void)?,
91
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig {
92
+ Base._adding(to: config, changed: changed, ended: ended)
93
+ }
94
+ }
95
+
96
+ /// Two gestures combined. Its `Value` is never produced: attach callbacks to
97
+ /// the parts before combining them.
98
+ public struct _CombinedGesture<First: Gesture, Second: Gesture>: Gesture {
99
+ public typealias Value = Void
100
+ public let _config: _GestureConfig
101
+
102
+ public static func _adding(to config: _GestureConfig,
103
+ changed: (@MainActor (Value) -> Void)?,
104
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig {
105
+ config
106
+ }
107
+ }
108
+
109
+ // MARK: - DragGesture
110
+
111
+ public struct DragGesture: Gesture {
112
+ /// The drag so far. Coordinates are in the gesture element's own box
113
+ /// (`coordinateSpace` is accepted and ignored). `predictedEnd…` project
114
+ /// the velocity a quarter second ahead.
115
+ public struct Value: Equatable, Sendable {
116
+ public var location: CGPoint
117
+ public var startLocation: CGPoint
118
+ public var translation: CGSize
119
+ public var velocity: CGSize
120
+
121
+ public init(location: CGPoint = .zero, startLocation: CGPoint = .zero,
122
+ translation: CGSize = .zero, velocity: CGSize = .zero) {
123
+ self.location = location
124
+ self.startLocation = startLocation
125
+ self.translation = translation
126
+ self.velocity = velocity
127
+ }
128
+
129
+ public var predictedEndLocation: CGPoint {
130
+ CGPoint(x: location.x + velocity.width / 4, y: location.y + velocity.height / 4)
131
+ }
132
+
133
+ public var predictedEndTranslation: CGSize {
134
+ CGSize(width: translation.width + velocity.width / 4, height: translation.height + velocity.height / 4)
135
+ }
136
+ }
137
+
138
+ public var minimumDistance: CGFloat
139
+ public var coordinateSpace: CoordinateSpace
140
+
141
+ public init(minimumDistance: CGFloat = 10, coordinateSpace: CoordinateSpace = .local) {
142
+ self.minimumDistance = minimumDistance
143
+ self.coordinateSpace = coordinateSpace
144
+ }
145
+
146
+ public var _config: _GestureConfig {
147
+ var config = _GestureConfig()
148
+ config.drag = true
149
+ config.minimumDistance = minimumDistance
150
+ return config
151
+ }
152
+
153
+ public static func _adding(to config: _GestureConfig,
154
+ changed: (@MainActor (Value) -> Void)?,
155
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig {
156
+ var config = config
157
+ if let changed { config.onDragChanged.append(changed) }
158
+ if let ended { config.onDragEnded.append(ended) }
159
+ return config
160
+ }
161
+ }
162
+
163
+ // MARK: - LongPressGesture
164
+
165
+ /// `Value` is `true` once the press is recognized. The renderer reports only
166
+ /// the recognition, so `onChanged(true)` and `onEnded(true)` fire together.
167
+ public struct LongPressGesture: Gesture {
168
+ public typealias Value = Bool
169
+ public var minimumDuration: Double
170
+ public var maximumDistance: CGFloat
171
+
172
+ public init(minimumDuration: Double = 0.5, maximumDistance: CGFloat = 10) {
173
+ self.minimumDuration = minimumDuration
174
+ self.maximumDistance = maximumDistance
175
+ }
176
+
177
+ public var _config: _GestureConfig {
178
+ var config = _GestureConfig()
179
+ config.longPress = true
180
+ config.minimumDuration = minimumDuration
181
+ return config
182
+ }
183
+
184
+ public static func _adding(to config: _GestureConfig,
185
+ changed: (@MainActor (Value) -> Void)?,
186
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig {
187
+ var config = config
188
+ if let changed { config.onLongPressChanged.append(changed) }
189
+ if let ended { config.onLongPressEnded.append(ended) }
190
+ return config
191
+ }
192
+ }
193
+
194
+ // MARK: - TapGesture
195
+
196
+ /// A tap; `count` is accepted and ignored (every tap is reported).
197
+ public struct TapGesture: Gesture {
198
+ public typealias Value = Void
199
+ public var count: Int
200
+
201
+ public init(count: Int = 1) { self.count = count }
202
+
203
+ public var _config: _GestureConfig { _GestureConfig() }
204
+
205
+ public static func _adding(to config: _GestureConfig,
206
+ changed: (@MainActor (Value) -> Void)?,
207
+ ended: (@MainActor (Value) -> Void)?) -> _GestureConfig {
208
+ var config = config
209
+ if let ended { config.onTap.append { ended(()) } }
210
+ return config
211
+ }
212
+ }
213
+
214
+ // MARK: - The element
215
+
216
+ /// The `gesture` element: props say what to track, the handler parses the
217
+ /// renderer's `drag` / `longpress` events. A `cancelled` drag ends the
218
+ /// gesture with its last value (`onEnded` runs), so state the app resets in
219
+ /// `onEnded` is reset.
220
+ struct _GestureHost {
221
+ let content: any View
222
+ let config: _GestureConfig
223
+ }
224
+ extension _GestureHost: _PrimitiveView {}
225
+ extension _GestureHost: _HostView {
226
+ var _kind: String { "gesture" }
227
+ func _props(in environment: EnvironmentValues) -> _JSON {
228
+ .object([
229
+ "drag": .bool(config.drag),
230
+ "longPress": .bool(config.longPress),
231
+ "minimumDistance": .number(config.minimumDistance),
232
+ "minimumDuration": .number(config.minimumDuration),
233
+ ])
234
+ }
235
+ var _content: [any View] { [content] }
236
+ var _handler: ((_JSON) -> Void)? {
237
+ let config = self.config
238
+ return { payload in
239
+ guard case .object(let fields) = payload, case .string(let type)? = fields["type"] else { return }
240
+ MainActor.assumeIsolated {
241
+ switch type {
242
+ case "drag":
243
+ let value = DragGesture.Value(fields)
244
+ let phase: String = if case .string(let p)? = fields["phase"] { p } else { "changed" }
245
+ switch phase {
246
+ case "began", "changed":
247
+ for action in config.onDragChanged { action(value) }
248
+ case "ended", "cancelled":
249
+ for action in config.onDragEnded { action(value) }
250
+ default:
251
+ break
252
+ }
253
+ case "longpress":
254
+ for action in config.onLongPressChanged { action(true) }
255
+ for action in config.onLongPressEnded { action(true) }
256
+ default:
257
+ break
258
+ }
259
+ }
260
+ }
261
+ }
262
+ }
263
+
264
+ extension DragGesture.Value {
265
+ /// Parses a `drag` event's fields; absent fields are zero.
266
+ init(_ fields: [String: _JSON]) {
267
+ func point(_ key: String) -> CGPoint {
268
+ guard case .object(let o)? = fields[key] else { return .zero }
269
+ return CGPoint(x: _number(o["x"]), y: _number(o["y"]))
270
+ }
271
+ func size(_ key: String) -> CGSize {
272
+ guard case .object(let o)? = fields[key] else { return .zero }
273
+ return CGSize(width: _number(o["width"]), height: _number(o["height"]))
274
+ }
275
+ self.init(location: point("location"), startLocation: point("startLocation"),
276
+ translation: size("translation"), velocity: size("velocity"))
277
+ }
278
+ }
279
+
280
+ private func _number(_ json: _JSON?) -> Double {
281
+ if case .number(let n)? = json { return n }
282
+ return 0
283
+ }
284
+
285
+ /// `.gesture(_:)`: the content under a `gesture` element when the gesture
286
+ /// drags or long-presses, under a `tapgesture` when it taps, both when it does
287
+ /// both, and plain when the gesture has no callbacks.
288
+ struct _GestureView<Content: View> {
289
+ let content: Content
290
+ let config: _GestureConfig
291
+ }
292
+ extension _GestureView: _PrimitiveView {}
293
+ extension _GestureView: _GroupView {
294
+ var _children: [any View] {
295
+ var inner: any View = content
296
+ if !config.onTap.isEmpty {
297
+ let taps = config.onTap
298
+ inner = _TapGestureView(content: AnyView(inner)) { for action in taps { action() } }
299
+ }
300
+ if config.drag || config.longPress {
301
+ return [_GestureHost(content: inner, config: config)]
302
+ }
303
+ return [inner]
304
+ }
305
+ }
306
+
307
+ nonisolated extension View {
308
+ public func gesture<G: Gesture>(_ gesture: G, including mask: GestureMask = .all) -> some View {
309
+ _GestureView(content: self, config: gesture._config)
310
+ }
311
+
312
+ public func highPriorityGesture<G: Gesture>(_ gesture: G, including mask: GestureMask = .all) -> some View {
313
+ _GestureView(content: self, config: gesture._config)
314
+ }
315
+
316
+ public func simultaneousGesture<G: Gesture>(_ gesture: G, including mask: GestureMask = .all) -> some View {
317
+ _GestureView(content: self, config: gesture._config)
318
+ }
319
+
320
+ /// `onPressingChanged` is told `true` then `false` around `action`, when
321
+ /// the press is recognized (the renderer reports no earlier touch-down).
322
+ public func onLongPressGesture(minimumDuration: Double = 0.5, maximumDistance: CGFloat = 10,
323
+ perform action: @escaping @MainActor () -> Void,
324
+ onPressingChanged: (@MainActor (Bool) -> Void)? = nil) -> some View {
325
+ var config = _GestureConfig()
326
+ config.longPress = true
327
+ config.minimumDuration = minimumDuration
328
+ config.onLongPressEnded = [{ _ in
329
+ onPressingChanged?(true)
330
+ action()
331
+ onPressingChanged?(false)
332
+ }]
333
+ return _GestureView(content: self, config: config)
334
+ }
335
+
336
+ public func onLongPressGesture(minimumDuration: Double = 0.5, maximumDistance: CGFloat = 10,
337
+ pressing: (@MainActor (Bool) -> Void)?,
338
+ perform action: @escaping @MainActor () -> Void) -> some View {
339
+ onLongPressGesture(minimumDuration: minimumDuration, maximumDistance: maximumDistance,
340
+ perform: action, onPressingChanged: pressing)
341
+ }
342
+ }
@@ -0,0 +1,127 @@
1
+ // iOS 26 Liquid Glass. The page has no refracting glass, so a glass effect
2
+ // is approximated by what it looks like at rest: a translucent material
3
+ // (`regularMaterial`, `ultraThinMaterial` for `.clear`) filling the given
4
+ // shape behind the view, under the glass's tint when it has one. The
5
+ // `interactive` response to touches (the glass swelling under a finger),
6
+ // the merging of nearby glass shapes in a `GlassEffectContainer` and the
7
+ // morphing between `glassEffectID`s are not drawn: containers lay their
8
+ // content out as given and ids are accepted. The glass button styles draw
9
+ // as the bordered ones (`.glass` as `.bordered`, `.glassProminent` as
10
+ // `.borderedProminent`).
11
+
12
+ /// The material of a glass effect.
13
+ public struct Glass: Equatable, Sendable {
14
+ enum Variant: Equatable, Sendable {
15
+ case regular, clear, identity
16
+ }
17
+
18
+ let variant: Variant
19
+ let tintColor: Color?
20
+ let isInteractive: Bool
21
+
22
+ /// Glass over ordinary content.
23
+ public static let regular = Glass(variant: .regular, tintColor: nil, isInteractive: false)
24
+ /// More transparent glass, for media-rich backgrounds.
25
+ public static let clear = Glass(variant: .clear, tintColor: nil, isInteractive: false)
26
+ /// No glass at all: the view draws as if the effect were not applied.
27
+ public static let identity = Glass(variant: .identity, tintColor: nil, isInteractive: false)
28
+
29
+ /// Tinted glass: the color is laid over the material.
30
+ public func tint(_ color: Color?) -> Glass {
31
+ Glass(variant: variant, tintColor: color, isInteractive: isInteractive)
32
+ }
33
+
34
+ /// Accepted; the page's glass does not react to touches.
35
+ public func interactive(_ isEnabled: Bool = true) -> Glass {
36
+ Glass(variant: variant, tintColor: tintColor, isInteractive: isEnabled)
37
+ }
38
+
39
+ var material: Material { variant == .clear ? .ultraThinMaterial : .regularMaterial }
40
+ }
41
+
42
+ /// The glass behind a view: the material, then the tint, in the shape.
43
+ struct _GlassEffectView<Content: View, S: Shape> {
44
+ let content: Content
45
+ let glass: Glass
46
+ let shape: S
47
+ }
48
+ extension _GlassEffectView: View {
49
+ var body: some View {
50
+ if glass.variant == .identity {
51
+ content
52
+ } else if let tint = glass.tintColor {
53
+ content.background(tint, in: shape).background(glass.material, in: shape)
54
+ } else {
55
+ content.background(glass.material, in: shape)
56
+ }
57
+ }
58
+ }
59
+
60
+ nonisolated extension View {
61
+ /// Draws Liquid Glass behind the view in `shape` (a capsule by default);
62
+ /// see the top of this file for the approximation.
63
+ public func glassEffect<S: Shape>(_ glass: Glass = .regular, in shape: S = Capsule()) -> some View {
64
+ _GlassEffectView(content: self, glass: glass, shape: shape)
65
+ }
66
+
67
+ public func glassEffect(_ glass: Glass = .regular, isEnabled: Bool) -> some View {
68
+ _GlassEffectView(content: self, glass: isEnabled ? glass : .identity, shape: Capsule())
69
+ }
70
+
71
+ /// Accepted: glass shapes keep their own outlines (no morphing between ids).
72
+ public func glassEffectID<ID: Hashable & Sendable>(_ id: ID?, in namespace: Namespace.ID) -> some View { self }
73
+
74
+ /// Accepted: glass shapes keep their own outlines (no union is drawn).
75
+ public func glassEffectUnion<ID: Hashable & Sendable>(id: ID?, namespace: Namespace.ID) -> some View { self }
76
+
77
+ /// Accepted: glass appears and disappears with the view's own transition.
78
+ public func glassEffectTransition(_ transition: GlassEffectTransition) -> some View { self }
79
+ }
80
+
81
+ /// How glass appears and disappears; accepted (see `glassEffectTransition`).
82
+ public struct GlassEffectTransition: Equatable, Sendable {
83
+ let name: String
84
+ public static let matchedGeometry = GlassEffectTransition(name: "matchedGeometry")
85
+ public static func matchedGeometry(properties: MatchedGeometryProperties = .frame,
86
+ anchor: UnitPoint = .center) -> GlassEffectTransition { .matchedGeometry }
87
+ public static let materialize = GlassEffectTransition(name: "materialize")
88
+ public static let identity = GlassEffectTransition(name: "identity")
89
+ }
90
+
91
+ /// Groups glass shapes so they can merge on iOS; here it lays its content
92
+ /// out as given (a group: the content's views are its parent's children).
93
+ public struct GlassEffectContainer<Content: View> {
94
+ let content: Content
95
+
96
+ public init(spacing: CGFloat? = nil, @ViewBuilder content: () -> Content) {
97
+ self.content = content()
98
+ }
99
+ }
100
+ extension GlassEffectContainer: _PrimitiveView {}
101
+ extension GlassEffectContainer: _GroupView {
102
+ var _children: [any View] { [content] }
103
+ }
104
+
105
+ // MARK: - Glass button styles
106
+
107
+ /// `.buttonStyle(.glass)`: drawn as `.bordered` (a gray capsule).
108
+ public struct GlassButtonStyle: PrimitiveButtonStyle {
109
+ public init() {}
110
+ public init(_ glass: Glass) {}
111
+ public var _name: String { "bordered" }
112
+ }
113
+
114
+ /// `.buttonStyle(.glassProminent)`: drawn as `.borderedProminent` (a tinted capsule).
115
+ public struct GlassProminentButtonStyle: PrimitiveButtonStyle {
116
+ public init() {}
117
+ public var _name: String { "borderedProminent" }
118
+ }
119
+
120
+ extension PrimitiveButtonStyle where Self == GlassButtonStyle {
121
+ public static var glass: GlassButtonStyle { GlassButtonStyle() }
122
+ public static func glass(_ glass: Glass) -> GlassButtonStyle { GlassButtonStyle(glass) }
123
+ }
124
+
125
+ extension PrimitiveButtonStyle where Self == GlassProminentButtonStyle {
126
+ public static var glassProminent: GlassProminentButtonStyle { GlassProminentButtonStyle() }
127
+ }
@@ -0,0 +1,188 @@
1
+ // Grid containers. The renderer lays them out; the Swift side sends the
2
+ // configuration and the children. See docs/ops-protocol.md (Phase 6).
3
+
4
+ // MARK: - Grid / GridRow
5
+
6
+ /// A two-dimensional layout of rows (`GridRow`) and columns.
7
+ public struct Grid<Content: View> {
8
+ let alignment: Alignment
9
+ let horizontalSpacing: CGFloat?
10
+ let verticalSpacing: CGFloat?
11
+ let content: Content
12
+
13
+ public init(alignment: Alignment = .center, horizontalSpacing: CGFloat? = nil,
14
+ verticalSpacing: CGFloat? = nil, @ViewBuilder content: () -> Content) {
15
+ self.alignment = alignment
16
+ self.horizontalSpacing = horizontalSpacing
17
+ self.verticalSpacing = verticalSpacing
18
+ self.content = content()
19
+ }
20
+ }
21
+ extension Grid: _PrimitiveView {}
22
+ extension Grid: _HostView {
23
+ var _kind: String { "grid" }
24
+ func _props(in environment: EnvironmentValues) -> _JSON {
25
+ .object([
26
+ "horizontalSpacing": horizontalSpacing.map(_JSON.number) ?? .null,
27
+ "verticalSpacing": verticalSpacing.map(_JSON.number) ?? .null,
28
+ "alignment": .string(alignment._name),
29
+ ])
30
+ }
31
+ var _content: [any View] { [content] }
32
+ }
33
+
34
+ /// One row of a `Grid`; each child is a cell.
35
+ public struct GridRow<Content: View> {
36
+ let alignment: VerticalAlignment?
37
+ let content: Content
38
+
39
+ public init(alignment: VerticalAlignment? = nil, @ViewBuilder content: () -> Content) {
40
+ self.alignment = alignment
41
+ self.content = content()
42
+ }
43
+ }
44
+ extension GridRow: _PrimitiveView {}
45
+ extension GridRow: _HostView {
46
+ var _kind: String { "gridrow" }
47
+ func _props(in environment: EnvironmentValues) -> _JSON {
48
+ // Baseline alignments are approximated as `center` (see VerticalAlignment).
49
+ .object(["alignment": alignment.map { .string($0.name) } ?? .null])
50
+ }
51
+ var _content: [any View] { [content] }
52
+ }
53
+
54
+ /// A `styled` element carrying grid cell hints. `_Style` lives in
55
+ /// Modifiers.swift; this view is protocol-identical for the host.
56
+ struct _GridCellHintView<Content: View> {
57
+ let content: Content
58
+ let style: [String: _JSON]
59
+ }
60
+ extension _GridCellHintView: _PrimitiveView {}
61
+ extension _GridCellHintView: _HostView {
62
+ var _kind: String { "styled" }
63
+ func _props(in environment: EnvironmentValues) -> _JSON { .object(["style": .object(style)]) }
64
+ var _content: [any View] { [content] }
65
+ }
66
+
67
+ nonisolated extension View {
68
+ /// Makes the cell span `count` columns of its `GridRow`.
69
+ public func gridCellColumns(_ count: Int) -> some View {
70
+ _GridCellHintView(content: self, style: ["gridCellColumns": .number(Double(count))])
71
+ }
72
+
73
+ /// Where the cell's content sits when the cell is larger than the content.
74
+ public func gridCellAnchor(_ anchor: UnitPoint) -> some View {
75
+ _GridCellHintView(content: self, style: ["gridCellAnchor": .object(["x": .number(anchor.x), "y": .number(anchor.y)])])
76
+ }
77
+
78
+ /// Accepted for source compatibility; the renderer aligns columns by the grid's alignment.
79
+ public func gridColumnAlignment(_ guide: HorizontalAlignment) -> some View { self }
80
+
81
+ /// Accepted for source compatibility; cells are sized by their content.
82
+ public func gridCellUnsizedAxes(_ axes: Axis.Set) -> some View { self }
83
+ }
84
+
85
+ // MARK: - GridItem
86
+
87
+ /// A column of a `LazyVGrid` (or a row of a `LazyHGrid`).
88
+ public struct GridItem: Sendable {
89
+ public enum Size: Sendable {
90
+ case fixed(CGFloat)
91
+ case flexible(minimum: CGFloat = 10, maximum: CGFloat = .infinity)
92
+ case adaptive(minimum: CGFloat, maximum: CGFloat = .infinity)
93
+ }
94
+
95
+ public var size: Size
96
+ public var spacing: CGFloat?
97
+ public var alignment: Alignment?
98
+
99
+ public init(_ size: Size = .flexible(), spacing: CGFloat? = nil, alignment: Alignment? = nil) {
100
+ self.size = size
101
+ self.spacing = spacing
102
+ self.alignment = alignment
103
+ }
104
+
105
+ var _json: _JSON {
106
+ func bound(_ value: CGFloat) -> _JSON { value == .infinity ? .string("infinity") : .number(value) }
107
+ let size: _JSON = switch self.size {
108
+ case .fixed(let value):
109
+ .object(["kind": .string("fixed"), "value": .number(value)])
110
+ case .flexible(let minimum, let maximum):
111
+ .object(["kind": .string("flexible"), "minimum": .number(minimum), "maximum": bound(maximum)])
112
+ case .adaptive(let minimum, let maximum):
113
+ .object(["kind": .string("adaptive"), "minimum": .number(minimum), "maximum": bound(maximum)])
114
+ }
115
+ return .object([
116
+ "size": size,
117
+ "spacing": spacing.map(_JSON.number) ?? .null,
118
+ "alignment": alignment.map { .string($0._name) } ?? .null,
119
+ ])
120
+ }
121
+ }
122
+
123
+ /// Views a lazy grid keeps pinned while scrolling. Accepted for source
124
+ /// compatibility; the renderer does not pin.
125
+ public struct PinnedScrollableViews: OptionSet, Sendable {
126
+ public let rawValue: UInt32
127
+ public init(rawValue: UInt32) { self.rawValue = rawValue }
128
+ public static let sectionHeaders = PinnedScrollableViews(rawValue: 1 << 0)
129
+ public static let sectionFooters = PinnedScrollableViews(rawValue: 1 << 1)
130
+ }
131
+
132
+ // MARK: - LazyVGrid / LazyHGrid
133
+
134
+ /// A grid that grows vertically, filling the given columns row by row.
135
+ public struct LazyVGrid<Content: View> {
136
+ let columns: [GridItem]
137
+ let alignment: HorizontalAlignment
138
+ let spacing: CGFloat?
139
+ let content: Content
140
+
141
+ public init(columns: [GridItem], alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil,
142
+ pinnedViews: PinnedScrollableViews = .init(), @ViewBuilder content: () -> Content) {
143
+ self.columns = columns
144
+ self.alignment = alignment
145
+ self.spacing = spacing
146
+ self.content = content()
147
+ }
148
+ }
149
+ extension LazyVGrid: _PrimitiveView {}
150
+ extension LazyVGrid: _HostView {
151
+ var _kind: String { "lazyvgrid" }
152
+ func _props(in environment: EnvironmentValues) -> _JSON {
153
+ .object([
154
+ "columns": .array(columns.map(\._json)),
155
+ "spacing": spacing.map(_JSON.number) ?? .null,
156
+ "alignment": .string(alignment.name),
157
+ ])
158
+ }
159
+ var _content: [any View] { [content] }
160
+ }
161
+
162
+ /// A grid that grows horizontally, filling the given rows column by column.
163
+ public struct LazyHGrid<Content: View> {
164
+ let rows: [GridItem]
165
+ let alignment: VerticalAlignment
166
+ let spacing: CGFloat?
167
+ let content: Content
168
+
169
+ public init(rows: [GridItem], alignment: VerticalAlignment = .center, spacing: CGFloat? = nil,
170
+ pinnedViews: PinnedScrollableViews = .init(), @ViewBuilder content: () -> Content) {
171
+ self.rows = rows
172
+ self.alignment = alignment
173
+ self.spacing = spacing
174
+ self.content = content()
175
+ }
176
+ }
177
+ extension LazyHGrid: _PrimitiveView {}
178
+ extension LazyHGrid: _HostView {
179
+ var _kind: String { "lazyhgrid" }
180
+ func _props(in environment: EnvironmentValues) -> _JSON {
181
+ .object([
182
+ "rows": .array(rows.map(\._json)),
183
+ "spacing": spacing.map(_JSON.number) ?? .null,
184
+ "alignment": .string(alignment.name),
185
+ ])
186
+ }
187
+ var _content: [any View] { [content] }
188
+ }