@swiftbrowser/swift 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (393) hide show
  1. package/Package.swift +200 -9
  2. package/README.md +7 -9
  3. package/Sources/AVFoundation/AVFoundation.swift +131 -0
  4. package/Sources/AVFoundation/Asset.swift +487 -0
  5. package/Sources/AVFoundation/AudioSession.swift +144 -0
  6. package/Sources/AVFoundation/CMTime.swift +303 -0
  7. package/Sources/AVFoundation/Capture.swift +688 -0
  8. package/Sources/AVFoundation/Player.swift +749 -0
  9. package/Sources/AVFoundation/PlayerView.swift +117 -0
  10. package/Sources/AVKit/AVKit.swift +132 -0
  11. package/Sources/Accelerate/Accelerate.swift +122 -0
  12. package/Sources/AppIntents/AppIntents.swift +144 -0
  13. package/Sources/AppIntents/Parameters.swift +220 -0
  14. package/Sources/AppIntents/Shortcuts.swift +159 -0
  15. package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
  16. package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
  17. package/Sources/AuthenticationServices/Authorization.swift +251 -0
  18. package/Sources/Charts/Charts.swift +0 -4
  19. package/Sources/Combine/AnyCancellable.swift +65 -0
  20. package/Sources/Combine/AnyPublisher.swift +148 -0
  21. package/Sources/Combine/AnySubscriber.swift +230 -0
  22. package/Sources/Combine/Cancellable.swift +35 -0
  23. package/Sources/Combine/Codable.swift +29 -0
  24. package/Sources/Combine/CombineIdentifier.swift +45 -0
  25. package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
  26. package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
  27. package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
  28. package/Sources/Combine/CurrentValueSubject.swift +252 -0
  29. package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
  30. package/Sources/Combine/Future.swift +228 -0
  31. package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
  32. package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
  33. package/Sources/Combine/Helpers/ConduitList.swift +59 -0
  34. package/Sources/Combine/Helpers/DebugHook.swift +177 -0
  35. package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
  36. package/Sources/Combine/Helpers/Locking.swift +30 -0
  37. package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
  38. package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
  39. package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
  40. package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
  41. package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
  42. package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
  43. package/Sources/Combine/Helpers/Utils.swift +30 -0
  44. package/Sources/Combine/Helpers/Violations.swift +33 -0
  45. package/Sources/Combine/ImmediateScheduler.swift +178 -0
  46. package/Sources/Combine/LICENSE +21 -0
  47. package/Sources/Combine/NotificationPublisher.swift +48 -0
  48. package/Sources/Combine/ObjectWillChange.swift +46 -0
  49. package/Sources/Combine/PassthroughSubject.swift +222 -0
  50. package/Sources/Combine/Publisher+Subscribe.swift +53 -0
  51. package/Sources/Combine/Publishers/Deferred.swift +48 -0
  52. package/Sources/Combine/Publishers/Empty.swift +54 -0
  53. package/Sources/Combine/Publishers/Fail.swift +42 -0
  54. package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
  55. package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
  56. package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
  57. package/Sources/Combine/Publishers/Just.swift +313 -0
  58. package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
  59. package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
  60. package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
  61. package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
  62. package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
  63. package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
  64. package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
  65. package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
  66. package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
  67. package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
  68. package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
  69. package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
  70. package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
  71. package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
  72. package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
  73. package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
  74. package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
  75. package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
  76. package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
  77. package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
  78. package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
  79. package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
  80. package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
  81. package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
  82. package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
  83. package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
  84. package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
  85. package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
  86. package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
  87. package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
  88. package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
  89. package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
  90. package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
  91. package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
  92. package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
  93. package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
  94. package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
  95. package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
  96. package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
  97. package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
  98. package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
  99. package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
  100. package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
  101. package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
  102. package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
  103. package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
  104. package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
  105. package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
  106. package/Sources/Combine/Publishers/Publishers.swift +13 -0
  107. package/Sources/Combine/Publishers/Record.swift +237 -0
  108. package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
  109. package/Sources/Combine/Result.swift +46 -0
  110. package/Sources/Combine/Scheduler.swift +89 -0
  111. package/Sources/Combine/Schedulers.swift +211 -0
  112. package/Sources/Combine/Subject+Void.swift +17 -0
  113. package/Sources/Combine/Subscriber+Void.swift +20 -0
  114. package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
  115. package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
  116. package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
  117. package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
  118. package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
  119. package/Sources/Combine/Subscription.swift +22 -0
  120. package/Sources/Combine/Subscriptions.swift +42 -0
  121. package/Sources/Combine/SwiftUIObservation.swift +10 -0
  122. package/Sources/Combine/_Introspection.swift +107 -0
  123. package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
  124. package/Sources/Compression/Compression.swift +365 -0
  125. package/Sources/Compression/Deflate.swift +407 -0
  126. package/Sources/Compression/Zlib.swift +179 -0
  127. package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
  128. package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
  129. package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
  130. package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
  131. package/Sources/CoreImage/CIColor.swift +41 -0
  132. package/Sources/CoreImage/CIContext.swift +31 -0
  133. package/Sources/CoreImage/CIDetector.swift +57 -0
  134. package/Sources/CoreImage/CIFilter.swift +243 -0
  135. package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
  136. package/Sources/CoreImage/CIImage.swift +162 -0
  137. package/Sources/CoreImage/QRCode.swift +393 -0
  138. package/Sources/CoreLocation/Coordinate.swift +30 -0
  139. package/Sources/CoreLocation/Location.swift +65 -0
  140. package/Sources/CoreML/Evaluation.swift +414 -0
  141. package/Sources/CoreML/FeatureValue.swift +266 -0
  142. package/Sources/CoreML/Model.swift +269 -0
  143. package/Sources/CoreML/MultiArray.swift +92 -0
  144. package/Sources/CoreML/Specification.swift +233 -0
  145. package/Sources/CoreText/CoreText.swift +64 -0
  146. package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
  147. package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
  148. package/Sources/CryptoKit/CryptoKit.swift +375 -0
  149. package/Sources/CryptoKit/Curve25519.swift +317 -0
  150. package/Sources/CryptoKit/P256.swift +321 -0
  151. package/Sources/FoundationBridge/AppStorage.swift +165 -0
  152. package/Sources/FoundationBridge/AssetResources.swift +90 -0
  153. package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
  154. package/Sources/FoundationBridge/AsyncImage.swift +116 -0
  155. package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
  156. package/Sources/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
  157. package/Sources/FoundationBridge/CombineExports.swift +8 -0
  158. package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
  159. package/Sources/FoundationBridge/Dispatch.swift +458 -0
  160. package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
  161. package/Sources/FoundationBridge/FileImporter.swift +128 -0
  162. package/Sources/FoundationBridge/FileSystem.swift +68 -0
  163. package/Sources/FoundationBridge/FoundationBridge.swift +24 -72
  164. package/Sources/FoundationBridge/HostResolution.swift +31 -0
  165. package/Sources/FoundationBridge/ItemProvider.swift +655 -0
  166. package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
  167. package/Sources/FoundationBridge/Links.swift +127 -0
  168. package/Sources/FoundationBridge/ListFormatter.swift +32 -0
  169. package/Sources/FoundationBridge/Localization.swift +149 -0
  170. package/Sources/FoundationBridge/Locks.swift +50 -0
  171. package/Sources/FoundationBridge/Markdown.swift +527 -0
  172. package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
  173. package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
  174. package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
  175. package/Sources/FoundationBridge/Operation.swift +195 -0
  176. package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
  177. package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
  178. package/Sources/FoundationBridge/SceneStorage.swift +78 -0
  179. package/Sources/FoundationBridge/SecurityExports.swift +8 -0
  180. package/Sources/FoundationBridge/Selector.swift +226 -0
  181. package/Sources/FoundationBridge/StringComparators.swift +17 -0
  182. package/Sources/FoundationBridge/Table.swift +211 -0
  183. package/Sources/FoundationBridge/TextAttributes.swift +42 -0
  184. package/Sources/FoundationBridge/Timer.swift +6 -1
  185. package/Sources/FoundationBridge/URLSession.swift +718 -0
  186. package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
  187. package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
  188. package/Sources/FoundationBridge/WebSocket.swift +187 -0
  189. package/Sources/FoundationModels/FoundationModels.swift +1098 -0
  190. package/Sources/ImageIO/GIF.swift +72 -0
  191. package/Sources/ImageIO/ImageIO.swift +248 -0
  192. package/Sources/ImageIO/ImageTypes.swift +28 -0
  193. package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
  194. package/Sources/LocalAuthentication/LAContext.swift +86 -0
  195. package/Sources/MapKit/Geometry.swift +223 -0
  196. package/Sources/MapKit/Map.swift +638 -0
  197. package/Sources/MapKit/MapView.swift +229 -0
  198. package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
  199. package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
  200. package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
  201. package/Sources/OSLog/OSLog.swift +6 -0
  202. package/Sources/Photos/Photos.swift +572 -0
  203. package/Sources/PhotosUI/PhotosPicker.swift +248 -0
  204. package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
  205. package/Sources/QuickLook/QuickLook.swift +168 -0
  206. package/Sources/SafariServices/SafariServices.swift +106 -0
  207. package/Sources/Security/Security.swift +332 -0
  208. package/Sources/StoreKit/AppStore.swift +207 -0
  209. package/Sources/StoreKit/Products.swift +280 -0
  210. package/Sources/StoreKit/RequestReview.swift +28 -0
  211. package/Sources/StoreKit/StoreKit1.swift +486 -0
  212. package/Sources/StoreKit/StoreViews.swift +428 -0
  213. package/Sources/StoreKit/Transactions.swift +197 -0
  214. package/Sources/SwiftData/Macros.swift +58 -0
  215. package/Sources/SwiftData/ModelActor.swift +38 -0
  216. package/Sources/SwiftData/ModelContainer.swift +129 -0
  217. package/Sources/SwiftData/ModelContext.swift +451 -0
  218. package/Sources/SwiftData/PersistentModel.swift +238 -0
  219. package/Sources/SwiftData/Properties.swift +261 -0
  220. package/Sources/SwiftData/Query.swift +256 -0
  221. package/Sources/SwiftData/Schema.swift +192 -0
  222. package/Sources/SwiftData/Store.swift +146 -0
  223. package/Sources/SwiftData/StringPredicates.swift +125 -0
  224. package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
  225. package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
  226. package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
  227. package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
  228. package/Sources/SwiftDataMacros/Plugin.swift +18 -0
  229. package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
  230. package/Sources/SwiftUI/API/Accessibility.swift +55 -6
  231. package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
  232. package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
  233. package/Sources/SwiftUI/API/Alert.swift +1 -1
  234. package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
  235. package/Sources/SwiftUI/API/Animation.swift +37 -5
  236. package/Sources/SwiftUI/API/App.swift +31 -1
  237. package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
  238. package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
  239. package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
  240. package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
  241. package/Sources/SwiftUI/API/Canvas.swift +337 -0
  242. package/Sources/SwiftUI/API/Color.swift +104 -28
  243. package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
  244. package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
  245. package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
  246. package/Sources/SwiftUI/API/Commands.swift +106 -0
  247. package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
  248. package/Sources/SwiftUI/API/ContentShape.swift +33 -0
  249. package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
  250. package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
  251. package/Sources/SwiftUI/API/Controls.swift +59 -27
  252. package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
  253. package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
  254. package/Sources/SwiftUI/API/Decorations.swift +1 -1
  255. package/Sources/SwiftUI/API/EditMode.swift +25 -82
  256. package/Sources/SwiftUI/API/Effects.swift +125 -10
  257. package/Sources/SwiftUI/API/Entry.swift +8 -0
  258. package/Sources/SwiftUI/API/Environment.swift +100 -9
  259. package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
  260. package/Sources/SwiftUI/API/Focus.swift +11 -3
  261. package/Sources/SwiftUI/API/Gauge.swift +26 -10
  262. package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
  263. package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
  264. package/Sources/SwiftUI/API/GestureState.swift +65 -0
  265. package/Sources/SwiftUI/API/Gestures.swift +1 -1
  266. package/Sources/SwiftUI/API/Glass.swift +127 -0
  267. package/Sources/SwiftUI/API/Grid.swift +1 -1
  268. package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
  269. package/Sources/SwiftUI/API/KeyPress.swift +54 -0
  270. package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
  271. package/Sources/SwiftUI/API/Layout.swift +71 -12
  272. package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
  273. package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
  274. package/Sources/SwiftUI/API/Lists.swift +61 -6
  275. package/Sources/SwiftUI/API/Menu.swift +8 -1
  276. package/Sources/SwiftUI/API/Modifiers.swift +88 -12
  277. package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
  278. package/Sources/SwiftUI/API/Namespace.swift +44 -0
  279. package/Sources/SwiftUI/API/Navigation.swift +24 -9
  280. package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
  281. package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
  282. package/Sources/SwiftUI/API/Path.swift +543 -0
  283. package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
  284. package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
  285. package/Sources/SwiftUI/API/Picker.swift +14 -4
  286. package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
  287. package/Sources/SwiftUI/API/Popover.swift +41 -0
  288. package/Sources/SwiftUI/API/Preferences.swift +262 -0
  289. package/Sources/SwiftUI/API/Presentation.swift +17 -4
  290. package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
  291. package/Sources/SwiftUI/API/Primitives.swift +168 -39
  292. package/Sources/SwiftUI/API/Publishers.swift +4 -4
  293. package/Sources/SwiftUI/API/Redaction.swift +75 -0
  294. package/Sources/SwiftUI/API/RowActions.swift +3 -2
  295. package/Sources/SwiftUI/API/Scenes.swift +131 -0
  296. package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
  297. package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
  298. package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
  299. package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
  300. package/Sources/SwiftUI/API/Shape.swift +214 -0
  301. package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
  302. package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
  303. package/Sources/SwiftUI/API/Sharing.swift +193 -0
  304. package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
  305. package/Sources/SwiftUI/API/State.swift +18 -1
  306. package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
  307. package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
  308. package/Sources/SwiftUI/API/TabContent.swift +841 -0
  309. package/Sources/SwiftUI/API/Table.swift +382 -0
  310. package/Sources/SwiftUI/API/Tabs.swift +148 -4
  311. package/Sources/SwiftUI/API/Tasks.swift +2 -2
  312. package/Sources/SwiftUI/API/Text.swift +386 -0
  313. package/Sources/SwiftUI/API/TextDates.swift +61 -0
  314. package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
  315. package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
  316. package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
  317. package/Sources/SwiftUI/API/Toolbar.swift +52 -16
  318. package/Sources/SwiftUI/API/Transfer.swift +145 -0
  319. package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
  320. package/Sources/SwiftUI/API/Video.swift +64 -0
  321. package/Sources/SwiftUI/API/View.swift +46 -2
  322. package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
  323. package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
  324. package/Sources/SwiftUI/API/Windows.swift +25 -0
  325. package/Sources/SwiftUI/Charts/Axis.swift +7 -1
  326. package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
  327. package/Sources/SwiftUI/Charts/Chart.swift +17 -3
  328. package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
  329. package/Sources/SwiftUI/Localization/Localization.swift +524 -0
  330. package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
  331. package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
  332. package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
  333. package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
  334. package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
  335. package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
  336. package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
  337. package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
  338. package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
  339. package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
  340. package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
  341. package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
  342. package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
  343. package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
  344. package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
  345. package/Sources/Symbols/Symbols.swift +25 -0
  346. package/Sources/Translation/Translation.swift +423 -0
  347. package/Sources/UIKit/Activity.swift +213 -0
  348. package/Sources/UIKit/Alerts.swift +69 -0
  349. package/Sources/UIKit/AppDelegate.swift +222 -0
  350. package/Sources/UIKit/Appearance.swift +84 -0
  351. package/Sources/UIKit/ColorConversions.swift +70 -0
  352. package/Sources/UIKit/Controls.swift +225 -0
  353. package/Sources/UIKit/Device.swift +200 -0
  354. package/Sources/UIKit/Feedback.swift +65 -0
  355. package/Sources/UIKit/Font.swift +307 -0
  356. package/Sources/UIKit/Graphics.swift +204 -0
  357. package/Sources/UIKit/HostingController.swift +185 -0
  358. package/Sources/UIKit/Identity.swift +24 -0
  359. package/Sources/UIKit/Introspectable.swift +510 -0
  360. package/Sources/UIKit/Pasteboard.swift +363 -0
  361. package/Sources/UIKit/PhotoAlbum.swift +81 -0
  362. package/Sources/UIKit/RemoteNotifications.swift +15 -0
  363. package/Sources/UIKit/Representable.swift +288 -0
  364. package/Sources/UIKit/SafeArea.swift +12 -0
  365. package/Sources/UIKit/SceneDelegates.swift +132 -0
  366. package/Sources/UIKit/Scenes.swift +40 -0
  367. package/Sources/UIKit/ScrollView.swift +157 -0
  368. package/Sources/UIKit/ShortcutItems.swift +67 -0
  369. package/Sources/UIKit/SymbolConfiguration.swift +124 -0
  370. package/Sources/UIKit/TargetAction.swift +123 -0
  371. package/Sources/UIKit/TextPaste.swift +161 -0
  372. package/Sources/UIKit/TextView.swift +538 -0
  373. package/Sources/UIKit/UIKit.swift +292 -0
  374. package/Sources/UIKit/UIView.swift +855 -0
  375. package/Sources/UIKit/ViewTranslation.swift +311 -0
  376. package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
  377. package/Sources/UserNotifications/Content.swift +370 -0
  378. package/Sources/UserNotifications/NotificationCenter.swift +309 -0
  379. package/Sources/WeatherKit/WeatherKit.swift +228 -0
  380. package/Sources/WebKit/WebKit.swift +245 -0
  381. package/Sources/os/os.swift +376 -0
  382. package/Sources/zlib/zlib.swift +6 -0
  383. package/index.d.ts +1 -1
  384. package/index.mjs +2 -2
  385. package/manifest.d.mts +2 -0
  386. package/manifest.mjs +41 -0
  387. package/package.json +5 -3
  388. package/sync-sources.mjs +21 -7
  389. package/Sources/FoundationLite/Common.swift +0 -3
  390. package/Sources/FoundationLite/FoundationLite.swift +0 -171
  391. package/Sources/FoundationLite/Interaction.swift +0 -146
  392. package/Sources/FoundationLite/Timer.swift +0 -48
  393. package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
@@ -0,0 +1,138 @@
1
+ // Key-value observation (`object.observe(\.property) { object, change in }`)
2
+ // without the Objective-C runtime. On Apple platforms a setter of an
3
+ // `@objc dynamic` property tells its observers; corelibs Foundation has no
4
+ // KVO at all, and its classes' setters (`Progress.completedUnitCount`) are out
5
+ // of reach. So an observation polls: once per frame (1/60 s, on the
6
+ // executor's clock, so headless runs stay deterministic) it reads the key
7
+ // path on the main actor and calls the handler when the value differs from
8
+ // the last one it saw. That is what KVO does, a frame late at most, and
9
+ // changes made and undone within one frame are not seen. Values compare with
10
+ // `==` when they are `Equatable`, by identity when they are objects, and
11
+ // otherwise by their description. `.prior` is accepted; no prior
12
+ // notification is sent. ButtonKit follows a `Progress` this way.
13
+
14
+ import Foundation
15
+ import SwiftUI
16
+
17
+ /// What an observation's change carries.
18
+ public struct NSKeyValueObservingOptions: OptionSet, Sendable, Hashable {
19
+ public let rawValue: UInt
20
+ public init(rawValue: UInt) { self.rawValue = rawValue }
21
+
22
+ /// The change carries the new value.
23
+ public static let new = NSKeyValueObservingOptions(rawValue: 1 << 0)
24
+ /// The change carries the old value.
25
+ public static let old = NSKeyValueObservingOptions(rawValue: 1 << 1)
26
+ /// The handler is called at once with the current value.
27
+ public static let initial = NSKeyValueObservingOptions(rawValue: 1 << 2)
28
+ /// Accepted; no notification is sent before a change.
29
+ public static let prior = NSKeyValueObservingOptions(rawValue: 1 << 3)
30
+ }
31
+
32
+ /// The kind of change: a polled property was always set.
33
+ public enum NSKeyValueChange: UInt, Sendable {
34
+ case setting = 1, insertion, removal, replacement
35
+ }
36
+
37
+ /// A change an observation reports.
38
+ public struct NSKeyValueObservedChange<Value> {
39
+ public typealias Kind = NSKeyValueChange
40
+ public let kind: Kind
41
+ /// The value after the change, with `.new` (or `.initial`).
42
+ public let newValue: Value?
43
+ /// The value before the change, with `.old`.
44
+ public let oldValue: Value?
45
+ public let indexes: IndexSet?
46
+ /// Always false: no prior notification is sent.
47
+ public let isPrior: Bool
48
+ }
49
+
50
+ /// An observation in progress; it ends when invalidated or released, or
51
+ /// when the observed object goes away.
52
+ public final class NSKeyValueObservation: NSObject, @unchecked Sendable {
53
+ private var timer: _ExecutorTimer?
54
+
55
+ init(timer: _ExecutorTimer) {
56
+ self.timer = timer
57
+ }
58
+
59
+ /// Stops the observation.
60
+ public func invalidate() {
61
+ timer?.invalidate()
62
+ timer = nil
63
+ }
64
+
65
+ deinit { timer?.invalidate() }
66
+ }
67
+
68
+ /// The types `observe(_:options:changeHandler:)` is offered on: every `NSObject`.
69
+ public protocol _KeyValueCodingAndObserving {}
70
+ extension NSObject: _KeyValueCodingAndObserving {}
71
+
72
+ extension _KeyValueCodingAndObserving where Self: AnyObject {
73
+ /// Calls `changeHandler` when the value at `keyPath` changes (seen by
74
+ /// polling once per frame on the main actor; see the file comment).
75
+ public func observe<Value>(_ keyPath: KeyPath<Self, Value>, options: NSKeyValueObservingOptions = [],
76
+ changeHandler: @escaping (Self, NSKeyValueObservedChange<Value>) -> Void) -> NSKeyValueObservation {
77
+ let poller = _KeyValuePoller(object: self, keyPath: keyPath, options: options, handler: changeHandler)
78
+ if options.contains(.initial) { poller.report(old: nil, new: poller.last) }
79
+ let timer = _ExecutorTimer(interval: 1.0 / 60, repeats: true) { timer in
80
+ if !poller.poll() { timer.invalidate() }
81
+ }
82
+ return NSKeyValueObservation(timer: timer)
83
+ }
84
+ }
85
+
86
+ /// One observation's state: the object (held weakly), the last value seen and the handler.
87
+ final class _KeyValuePoller<Root: AnyObject, Value>: @unchecked Sendable {
88
+ weak var object: Root?
89
+ let keyPath: KeyPath<Root, Value>
90
+ let options: NSKeyValueObservingOptions
91
+ let handler: (Root, NSKeyValueObservedChange<Value>) -> Void
92
+ var last: Value
93
+
94
+ init(object: Root, keyPath: KeyPath<Root, Value>, options: NSKeyValueObservingOptions,
95
+ handler: @escaping (Root, NSKeyValueObservedChange<Value>) -> Void) {
96
+ self.object = object
97
+ self.keyPath = keyPath
98
+ self.options = options
99
+ self.handler = handler
100
+ last = object[keyPath: keyPath]
101
+ }
102
+
103
+ /// Reads the value and reports a change; false once the object is gone.
104
+ func poll() -> Bool {
105
+ guard let object else { return false }
106
+ let value = object[keyPath: keyPath]
107
+ if !_keyValueEqual(value, last) {
108
+ let old = last
109
+ last = value
110
+ report(old: old, new: value)
111
+ }
112
+ return true
113
+ }
114
+
115
+ func report(old: Value?, new: Value) {
116
+ guard let object else { return }
117
+ handler(object, NSKeyValueObservedChange(kind: .setting,
118
+ newValue: options.contains(.new) ? new : nil,
119
+ oldValue: options.contains(.old) ? old : nil,
120
+ indexes: nil, isPrior: false))
121
+ }
122
+ }
123
+
124
+ /// Whether two observed values are the same (see the file comment).
125
+ func _keyValueEqual<Value>(_ a: Value, _ b: Value) -> Bool {
126
+ if let a = a as? any Equatable { return a._keyValueIsEqual(to: b) }
127
+ if type(of: a as Any) is AnyClass {
128
+ return (a as AnyObject) === (b as AnyObject)
129
+ }
130
+ return String(reflecting: a) == String(reflecting: b)
131
+ }
132
+
133
+ extension Equatable {
134
+ fileprivate func _keyValueIsEqual(to other: Any) -> Bool {
135
+ guard let other = other as? Self else { return false }
136
+ return self == other
137
+ }
138
+ }
@@ -0,0 +1,127 @@
1
+ // Opening URLs, and the text that holds them: `OpenURLAction` and
2
+ // `EnvironmentValues.openURL`, `Link`, and `Text(AttributedString)`. These
3
+ // need Foundation's `URL` and `AttributedString`, so they live here; the
4
+ // SwiftUI shim keeps the string-based hook a text's links call
5
+ // (`EnvironmentValues._openLink`, Text.swift).
6
+ //
7
+ // The system action opens the URL on the page: in a new tab (an `openURL`
8
+ // host request). An app that sets its own action (Ice Cubes routes mentions,
9
+ // hashtags and posts through one) gets every link tap first.
10
+
11
+ import Foundation
12
+ import SwiftUI
13
+
14
+ public struct OpenURLAction: Sendable {
15
+ public struct Result: Sendable {
16
+ enum Kind: Sendable { case handled, discarded, systemAction(URL?) }
17
+ let kind: Kind
18
+ public static let handled = Result(kind: .handled)
19
+ public static let discarded = Result(kind: .discarded)
20
+ public static let systemAction = Result(kind: .systemAction(nil))
21
+ public static func systemAction(_ url: URL) -> Result { Result(kind: .systemAction(url)) }
22
+ }
23
+
24
+ let handler: @MainActor @Sendable (URL) -> Result
25
+
26
+ public init(handler: @escaping @MainActor @Sendable (URL) -> Result) {
27
+ self.handler = handler
28
+ }
29
+
30
+ /// The page's own action: open the URL in a new tab, or hand a URL in
31
+ /// one of the app's own schemes to its `onOpenURL` handlers (OpenURLHandlers.swift).
32
+ static let system = OpenURLAction { url in
33
+ if _OpenURLHandlers.deliver(url) { return .handled }
34
+ _Runtime.shared._openLinkOnPage(url.absoluteString)
35
+ return .handled
36
+ }
37
+
38
+ @MainActor public func callAsFunction(_ url: URL) {
39
+ callAsFunction(url) { _ in }
40
+ }
41
+
42
+ @MainActor public func callAsFunction(_ url: URL, completion: @escaping (Bool) -> Void) {
43
+ switch handler(url).kind {
44
+ case .handled: completion(true)
45
+ case .discarded: completion(false)
46
+ case .systemAction(let other):
47
+ _ = Self.system.handler(other ?? url)
48
+ completion(true)
49
+ }
50
+ }
51
+ }
52
+
53
+ private struct OpenURLKey: EnvironmentKey {
54
+ static var defaultValue: OpenURLAction? { nil }
55
+ }
56
+
57
+ extension EnvironmentValues {
58
+ /// What opens a URL: a link in a `Text`, a `Link`, or a call. Setting it
59
+ /// also routes the links of the texts below to it.
60
+ public var openURL: OpenURLAction {
61
+ get { self[OpenURLKey.self] ?? .system }
62
+ set {
63
+ self[OpenURLKey.self] = newValue
64
+ _openLink = { string in
65
+ if let url = URL(string: string) { newValue(url) }
66
+ }
67
+ }
68
+ }
69
+ }
70
+
71
+ /// A control that opens a URL: its label, tinted, as a button.
72
+ public struct Link<Label: View>: View {
73
+ let destination: URL
74
+ let label: Label
75
+ @Environment(\.openURL) private var openURL
76
+
77
+ public init(destination: URL, @ViewBuilder label: () -> Label) {
78
+ self.destination = destination
79
+ self.label = label()
80
+ }
81
+
82
+ public var body: some View {
83
+ let open = openURL
84
+ let destination = destination
85
+ return Button { open(destination) } label: { label }
86
+ }
87
+ }
88
+
89
+ extension Link where Label == Text {
90
+ public init(_ titleKey: LocalizedStringKey, destination: URL) {
91
+ self.init(destination: destination) { Text(titleKey) }
92
+ }
93
+
94
+ @_disfavoredOverload
95
+ public init<S: StringProtocol>(_ title: S, destination: URL) {
96
+ self.init(destination: destination) { Text(title) }
97
+ }
98
+ }
99
+
100
+ extension Text {
101
+ /// The attributed string's runs as styled text: Markdown's emphasis as
102
+ /// bold and italic, code as monospaced, strikethrough, links (which call
103
+ /// the environment's `openURL` when tapped), and the SwiftUI attributes
104
+ /// (TextAttributes.swift).
105
+ /// Disfavored: a string literal is a `LocalizedStringKey`, not this.
106
+ @_disfavoredOverload
107
+ public init(_ attributedContent: AttributedString) {
108
+ var result: Text?
109
+ for run in attributedContent.runs {
110
+ var piece = Text(verbatim: String(attributedContent[run.range].characters))
111
+ if let intent = run.inlinePresentationIntent {
112
+ if intent.contains(.stronglyEmphasized) { piece = piece.bold() }
113
+ if intent.contains(.emphasized) { piece = piece.italic() }
114
+ if intent.contains(.code) { piece = piece.monospaced() }
115
+ if intent.contains(.strikethrough) { piece = piece.strikethrough() }
116
+ }
117
+ if let kern = run.kern { piece = piece.kerning(kern) }
118
+ if let tracking = run.tracking { piece = piece.tracking(tracking) }
119
+ if let offset = run.baselineOffset { piece = piece.baselineOffset(offset) }
120
+ if let color = run.foregroundColor { piece = piece.foregroundColor(color) }
121
+ if let font = run.font { piece = piece.font(font) }
122
+ if let link = run.link { piece = piece._link(link.absoluteString) }
123
+ result = result.map { $0 + piece } ?? piece
124
+ }
125
+ self = result ?? Text(verbatim: "")
126
+ }
127
+ }
@@ -0,0 +1,32 @@
1
+ // `ListFormatter`, which corelibs Foundation lacks: joins items into a
2
+ // phrase ("A, B, and C"). The browser build has English list patterns only,
3
+ // whatever the locale: "A", "A and B", "A, B, and C".
4
+
5
+ import Foundation
6
+
7
+ open class ListFormatter: Formatter, @unchecked Sendable {
8
+ /// Formats each item; without it, an item is its description.
9
+ open var itemFormatter: Formatter?
10
+ open var locale: Locale! = .current
11
+
12
+ /// The strings joined into a list.
13
+ open class func localizedString(byJoining strings: [String]) -> String {
14
+ switch strings.count {
15
+ case 0: return ""
16
+ case 1: return strings[0]
17
+ case 2: return "\(strings[0]) and \(strings[1])"
18
+ default: return strings.dropLast().joined(separator: ", ") + ", and " + strings[strings.count - 1]
19
+ }
20
+ }
21
+
22
+ /// The items, each formatted by `itemFormatter`, joined into a list.
23
+ open func string(from items: [Any]) -> String? {
24
+ let strings = items.map { item in itemFormatter?.string(for: item) ?? String(describing: item) }
25
+ return Self.localizedString(byJoining: strings)
26
+ }
27
+
28
+ open override func string(for obj: Any?) -> String? {
29
+ guard let items = obj as? [Any] else { return nil }
30
+ return string(from: items)
31
+ }
32
+ }
@@ -0,0 +1,149 @@
1
+ // Foundation's localized-string types that Linux's and WASI's Foundation
2
+ // lack: `LocalizedStringResource` (what App Intents titles, `Text` and
3
+ // `Tab` take), `String.LocalizationValue` and `String(localized:)`.
4
+ //
5
+ // A value is a key as Xcode writes it in a string catalog (`"%lld posts"` for
6
+ // `"\(count) posts"`) with its arguments; `String(localized:)` looks the key
7
+ // up in the app's string tables and formats it (SwiftUI's
8
+ // Localization/Localization.swift), falling back to the default value, then
9
+ // to the key itself.
10
+
11
+ import Foundation
12
+ import SwiftUI
13
+
14
+ extension String {
15
+ /// A localizable string: its key, with a specifier per interpolation, and the interpolated values.
16
+ public struct LocalizationValue: Hashable, Sendable, Codable, ExpressibleByStringInterpolation, CustomStringConvertible {
17
+ /// The key, with `%%` for a literal percent sign when it has arguments.
18
+ let key: String
19
+ let arguments: [_LocalizationArgument]
20
+
21
+ public init(_ value: String) { key = value; arguments = [] }
22
+ public init(stringLiteral value: String) { key = value; arguments = [] }
23
+ public init(stringInterpolation: StringInterpolation) {
24
+ key = stringInterpolation.key
25
+ arguments = stringInterpolation.arguments
26
+ }
27
+
28
+ /// The text unlocalized: the key with its arguments filled in.
29
+ public var description: String { _Localization.formatted(key: key, arguments: arguments) }
30
+
31
+ /// Interpolations add Foundation's specifiers: `%@` for strings, `%lld` for `Int`, `%lf` for `Double`…
32
+ public struct StringInterpolation: StringInterpolationProtocol {
33
+ var key = ""
34
+ var arguments: [_LocalizationArgument] = []
35
+ public init(literalCapacity: Int, interpolationCount: Int) {}
36
+
37
+ mutating func add(_ argument: _LocalizationArgument, _ specifier: String) {
38
+ key += specifier
39
+ arguments.append(argument)
40
+ }
41
+
42
+ public mutating func appendLiteral(_ literal: String) { key += literal.replacingOccurrences(of: "%", with: "%%") }
43
+ public mutating func appendInterpolation(_ string: String) { add(.string(string), "%@") }
44
+ public mutating func appendInterpolation<T>(_ value: T) { add(.string(String(describing: value)), "%@") }
45
+ public mutating func appendInterpolation<T: _FormatSpecifiable>(_ value: T) { add(value._localizationArgument, T._specifier) }
46
+ public mutating func appendInterpolation<T>(_ value: T, specifier: String) {
47
+ add((value as? any _FormatSpecifiable)?._localizationArgument ?? .string(String(describing: value)), specifier)
48
+ }
49
+ public mutating func appendInterpolation<F: FormatStyle>(_ value: F.FormatInput, format: F) where F.FormatOutput == String {
50
+ add(.string(format.format(value)), "%@")
51
+ }
52
+ public mutating func appendInterpolation(_ resource: LocalizedStringResource) { add(.string(String(localized: resource)), "%@") }
53
+ }
54
+ }
55
+
56
+ public init(localized keyAndValue: String.LocalizationValue, table: String? = nil, bundle: Bundle? = nil,
57
+ locale: Locale = .current, comment: StaticString? = nil) {
58
+ self = _Localization.string(key: keyAndValue.key, arguments: keyAndValue.arguments, table: table,
59
+ bundlePath: (bundle ?? .main).bundlePath)
60
+ }
61
+
62
+ public init(localized key: StaticString, defaultValue: String.LocalizationValue, table: String? = nil,
63
+ bundle: Bundle? = nil, locale: Locale = .current, comment: StaticString? = nil) {
64
+ self = _Localization.string(key: "\(key)", arguments: defaultValue.arguments, table: table,
65
+ bundlePath: (bundle ?? .main).bundlePath, defaultValue: defaultValue.key)
66
+ }
67
+
68
+ @_disfavoredOverload
69
+ public init(localized resource: LocalizedStringResource) {
70
+ let bundlePath = switch resource.bundle {
71
+ case .main: Bundle.main.bundlePath
72
+ case .atURL(let url): url.path
73
+ }
74
+ self = _Localization.string(key: resource.key, arguments: resource.defaultValue.arguments, table: resource.table,
75
+ bundlePath: bundlePath, defaultValue: resource.defaultValue.key)
76
+ }
77
+ }
78
+
79
+ /// A string to localize later, with where to find its translation.
80
+ public struct LocalizedStringResource: Hashable, Sendable, Codable, ExpressibleByStringInterpolation, CustomStringConvertible {
81
+ public typealias StringInterpolation = String.LocalizationValue.StringInterpolation
82
+
83
+ /// Where the translation lives. Every bundle is the app's in the browser.
84
+ public enum BundleDescription: Hashable, Sendable, Codable {
85
+ case main
86
+ case atURL(URL)
87
+ public static func forClass(_ aClass: AnyClass) -> BundleDescription { .main }
88
+ }
89
+
90
+ public var key: String
91
+ public var defaultValue: String.LocalizationValue
92
+ public var table: String?
93
+ public var locale: Locale
94
+ public var bundle: BundleDescription
95
+
96
+ public init(_ keyAndValue: String.LocalizationValue, table: String? = nil, locale: Locale = .current,
97
+ bundle: BundleDescription = .main, comment: StaticString? = nil) {
98
+ self.key = keyAndValue.key
99
+ self.defaultValue = keyAndValue
100
+ self.table = table
101
+ self.locale = locale
102
+ self.bundle = bundle
103
+ }
104
+
105
+ public init(_ key: StaticString, defaultValue: String.LocalizationValue, table: String? = nil,
106
+ locale: Locale = .current, bundle: BundleDescription = .main, comment: StaticString? = nil) {
107
+ self.key = "\(key)"
108
+ self.defaultValue = defaultValue
109
+ self.table = table
110
+ self.locale = locale
111
+ self.bundle = bundle
112
+ }
113
+
114
+ public init(stringLiteral value: String) { self.init(String.LocalizationValue(value)) }
115
+ public init(stringInterpolation: StringInterpolation) {
116
+ self.init(String.LocalizationValue(stringInterpolation: stringInterpolation))
117
+ }
118
+
119
+ /// The text, as `String(localized:)` resolves it.
120
+ public var description: String { String(localized: self) }
121
+ }
122
+
123
+ extension Text {
124
+ @_disfavoredOverload
125
+ public init(_ resource: LocalizedStringResource) {
126
+ self.init(verbatim: String(localized: resource))
127
+ }
128
+
129
+ /// A key from another table (`Localizable` by default) or bundle (a package's `Bundle.module`).
130
+ public init(_ key: LocalizedStringKey, tableName: String?, bundle: Bundle? = nil, comment: StaticString? = nil) {
131
+ self.init(key, _table: tableName, bundlePath: (bundle ?? .main).bundlePath)
132
+ }
133
+
134
+ public init(_ key: LocalizedStringKey, bundle: Bundle?, comment: StaticString? = nil) {
135
+ self.init(key, _table: nil, bundlePath: (bundle ?? .main).bundlePath)
136
+ }
137
+
138
+ /// A key with a comment for translators (`Text("Water", comment: "…")`).
139
+ public init(_ key: LocalizedStringKey, comment: StaticString?) {
140
+ self.init(key, _table: nil, bundlePath: Bundle.main.bundlePath)
141
+ }
142
+ }
143
+
144
+ /// `NSLocalizedString` with one of this module's bundles, which is what a
145
+ /// package's `Bundle.module` is in the browser build (Foundation's takes
146
+ /// Foundation's `Bundle`; calls without a bundle still go to it).
147
+ public func NSLocalizedString(_ key: String, tableName: String? = nil, bundle: Bundle, value: String = "", comment: String) -> String {
148
+ bundle.localizedString(forKey: key, value: value, table: tableName)
149
+ }
@@ -0,0 +1,50 @@
1
+ // Locks for code that imports only Foundation. On Apple platforms Foundation
2
+ // brings Darwin along, `os_unfair_lock` with it, so a package's
3
+ // `#if os(iOS)` branch locks with it after `import Foundation` alone
4
+ // (SwiftSoup's `Mutex`); these come from the shim's os module. On WASI, the
5
+ // libc module leaves out `pthread.h`, so a POSIX branch (`#if canImport(Darwin)
6
+ // … #else pthread_mutex_lock`) finds no functions: here are the mutex ones,
7
+ // for the page's single thread, where a lock is never contended.
8
+
9
+ @_exported import struct os.os_unfair_lock
10
+ @_exported import typealias os.os_unfair_lock_t
11
+ @_exported import typealias os.os_unfair_lock_s
12
+ @_exported import func os.os_unfair_lock_lock
13
+ @_exported import func os.os_unfair_lock_unlock
14
+ @_exported import func os.os_unfair_lock_trylock
15
+ @_exported import func os.os_unfair_lock_assert_owner
16
+ @_exported import func os.os_unfair_lock_assert_not_owner
17
+
18
+ #if os(WASI)
19
+ import WASILibc
20
+
21
+ @discardableResult
22
+ public func pthread_mutex_init(_ mutex: UnsafeMutablePointer<pthread_mutex_t>?, _ attributes: UnsafePointer<pthread_mutexattr_t>?) -> Int32 { 0 }
23
+
24
+ @discardableResult
25
+ public func pthread_mutex_destroy(_ mutex: UnsafeMutablePointer<pthread_mutex_t>?) -> Int32 { 0 }
26
+
27
+ @discardableResult
28
+ public func pthread_mutex_lock(_ mutex: UnsafeMutablePointer<pthread_mutex_t>?) -> Int32 { 0 }
29
+
30
+ @discardableResult
31
+ public func pthread_mutex_trylock(_ mutex: UnsafeMutablePointer<pthread_mutex_t>?) -> Int32 { 0 }
32
+
33
+ @discardableResult
34
+ public func pthread_mutex_unlock(_ mutex: UnsafeMutablePointer<pthread_mutex_t>?) -> Int32 { 0 }
35
+
36
+ @discardableResult
37
+ public func pthread_mutexattr_init(_ attributes: UnsafeMutablePointer<pthread_mutexattr_t>?) -> Int32 { 0 }
38
+
39
+ @discardableResult
40
+ public func pthread_mutexattr_destroy(_ attributes: UnsafeMutablePointer<pthread_mutexattr_t>?) -> Int32 { 0 }
41
+
42
+ @discardableResult
43
+ public func pthread_mutexattr_settype(_ attributes: UnsafeMutablePointer<pthread_mutexattr_t>?, _ type: Int32) -> Int32 { 0 }
44
+
45
+ /// `PTHREAD_MUTEX_RECURSIVE` and friends, which the libc module leaves out with `pthread.h`.
46
+ public var PTHREAD_MUTEX_NORMAL: Int32 { 0 }
47
+ public var PTHREAD_MUTEX_RECURSIVE: Int32 { 1 }
48
+ public var PTHREAD_MUTEX_ERRORCHECK: Int32 { 2 }
49
+ public var PTHREAD_MUTEX_DEFAULT: Int32 { 0 }
50
+ #endif