@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.
- package/Package.swift +214 -0
- package/README.md +10 -2
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +61 -0
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/FoundationBridge/Bundle.swift +119 -0
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Locale.swift +86 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +53 -0
- package/Sources/FoundationBridge/UITextChecker.swift +30 -0
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/FoundationBridge/UserDefaults.swift +183 -0
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +181 -0
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +221 -0
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +285 -0
- package/Sources/SwiftUI/API/App.swift +87 -0
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +237 -0
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +300 -0
- package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +92 -0
- package/Sources/SwiftUI/API/EditMode.swift +212 -0
- package/Sources/SwiftUI/API/Effects.swift +388 -0
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +439 -0
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +137 -0
- package/Sources/SwiftUI/API/Font.swift +131 -0
- package/Sources/SwiftUI/API/Gauge.swift +290 -0
- package/Sources/SwiftUI/API/Geometry.swift +89 -0
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +342 -0
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +188 -0
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
- package/Sources/SwiftUI/API/Layout.swift +220 -0
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +331 -0
- package/Sources/SwiftUI/API/Menu.swift +58 -0
- package/Sources/SwiftUI/API/Modifiers.swift +313 -0
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +386 -0
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
- package/Sources/SwiftUI/API/OnChange.swift +48 -0
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +185 -0
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +122 -0
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +517 -0
- package/Sources/SwiftUI/API/Publishers.swift +107 -0
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +84 -0
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +144 -0
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +263 -0
- package/Sources/SwiftUI/API/Tasks.swift +35 -0
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Timeline.swift +212 -0
- package/Sources/SwiftUI/API/Toolbar.swift +251 -0
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +215 -0
- package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
- package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +325 -0
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +660 -0
- package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Charts/Marks.swift +204 -0
- package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
- package/Sources/SwiftUI/Charts/Scales.swift +326 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
- package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
- package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +2 -0
- package/index.mjs +16 -0
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +30 -4
- package/sync-sources.mjs +33 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
// `import WeatherKit` for the browser. Apple's weather service answers only
|
|
2
|
+
// apps signed with the WeatherKit capability (the device asks for a token
|
|
3
|
+
// on the app's behalf); a web page has no such signature, so every request
|
|
4
|
+
// throws `WeatherError.permissionDenied`, as it does on a device for an app
|
|
5
|
+
// without the capability. The types are here so an app compiles and takes
|
|
6
|
+
// its own fallback (Apple's Food Truck keeps its placeholder forecast and a
|
|
7
|
+
// clear sky) (docs/ops-protocol.md, "Weather").
|
|
8
|
+
|
|
9
|
+
import CoreLocation
|
|
10
|
+
import Foundation
|
|
11
|
+
|
|
12
|
+
/// Why a weather request failed.
|
|
13
|
+
public enum WeatherError: LocalizedError, Sendable {
|
|
14
|
+
/// The app may not use the weather service: always, in the browser.
|
|
15
|
+
case permissionDenied
|
|
16
|
+
case unknown
|
|
17
|
+
|
|
18
|
+
public var errorDescription: String? {
|
|
19
|
+
switch self {
|
|
20
|
+
case .permissionDenied: "WeatherKit is not available in the browser."
|
|
21
|
+
case .unknown: "The weather service failed."
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// Requests weather; in the browser every request throws (see the top of this file).
|
|
27
|
+
public final class WeatherService: Sendable {
|
|
28
|
+
public static let shared = WeatherService()
|
|
29
|
+
public init() {}
|
|
30
|
+
|
|
31
|
+
public func weather(for location: CLLocation) async throws -> Weather {
|
|
32
|
+
throw WeatherError.permissionDenied
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public func weather<T>(for location: CLLocation, including dataSet: WeatherQuery<T>) async throws -> T {
|
|
36
|
+
throw WeatherError.permissionDenied
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
public func weather<T1, T2>(for location: CLLocation, including dataSet1: WeatherQuery<T1>, _ dataSet2: WeatherQuery<T2>) async throws -> (T1, T2) {
|
|
40
|
+
throw WeatherError.permissionDenied
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public func weather<T1, T2, T3>(for location: CLLocation, including dataSet1: WeatherQuery<T1>, _ dataSet2: WeatherQuery<T2>,
|
|
44
|
+
_ dataSet3: WeatherQuery<T3>) async throws -> (T1, T2, T3) {
|
|
45
|
+
throw WeatherError.permissionDenied
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public var attribution: WeatherAttribution {
|
|
49
|
+
get async throws { throw WeatherError.permissionDenied }
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// A data set to request (`.current`, `.hourly`, …).
|
|
54
|
+
public struct WeatherQuery<T>: @unchecked Sendable {
|
|
55
|
+
init() {}
|
|
56
|
+
|
|
57
|
+
public static var current: WeatherQuery<CurrentWeather> { WeatherQuery<CurrentWeather>() }
|
|
58
|
+
public static var minute: WeatherQuery<Forecast<MinuteWeather>?> { WeatherQuery<Forecast<MinuteWeather>?>() }
|
|
59
|
+
public static var hourly: WeatherQuery<Forecast<HourWeather>> { WeatherQuery<Forecast<HourWeather>>() }
|
|
60
|
+
public static var daily: WeatherQuery<Forecast<DayWeather>> { WeatherQuery<Forecast<DayWeather>>() }
|
|
61
|
+
public static var alerts: WeatherQuery<[WeatherAlert]?> { WeatherQuery<[WeatherAlert]?>() }
|
|
62
|
+
public static func hourly(startDate: Date, endDate: Date) -> WeatherQuery<Forecast<HourWeather>> { WeatherQuery<Forecast<HourWeather>>() }
|
|
63
|
+
public static func daily(startDate: Date, endDate: Date) -> WeatherQuery<Forecast<DayWeather>> { WeatherQuery<Forecast<DayWeather>>() }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// The weather at a place: now, by the minute, the hour and the day.
|
|
67
|
+
public struct Weather: Sendable {
|
|
68
|
+
public var currentWeather: CurrentWeather
|
|
69
|
+
public var minuteForecast: Forecast<MinuteWeather>?
|
|
70
|
+
public var hourlyForecast: Forecast<HourWeather>
|
|
71
|
+
public var dailyForecast: Forecast<DayWeather>
|
|
72
|
+
public var weatherAlerts: [WeatherAlert]?
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// A forecast: its entries, in time order.
|
|
76
|
+
public struct Forecast<Element: Sendable>: RandomAccessCollection, Sendable {
|
|
77
|
+
public var forecast: [Element]
|
|
78
|
+
public var startIndex: Int { forecast.startIndex }
|
|
79
|
+
public var endIndex: Int { forecast.endIndex }
|
|
80
|
+
public subscript(position: Int) -> Element { forecast[position] }
|
|
81
|
+
public var summary: String { "" }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public struct CurrentWeather: Sendable {
|
|
85
|
+
public var date: Date
|
|
86
|
+
public var condition: WeatherCondition
|
|
87
|
+
public var symbolName: String
|
|
88
|
+
public var temperature: Measurement<UnitTemperature>
|
|
89
|
+
public var apparentTemperature: Measurement<UnitTemperature>
|
|
90
|
+
public var dewPoint: Measurement<UnitTemperature>
|
|
91
|
+
public var humidity: Double
|
|
92
|
+
public var cloudCover: Double
|
|
93
|
+
public var isDaylight: Bool
|
|
94
|
+
public var visibility: Measurement<UnitLength>
|
|
95
|
+
public var wind: Wind
|
|
96
|
+
public var pressure: Measurement<UnitPressure>
|
|
97
|
+
public var uvIndex: UVIndex
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
public struct MinuteWeather: Sendable {
|
|
101
|
+
public var date: Date
|
|
102
|
+
public var precipitation: Precipitation
|
|
103
|
+
public var precipitationChance: Double
|
|
104
|
+
public var precipitationIntensity: Measurement<UnitSpeed>
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
public struct HourWeather: Sendable {
|
|
108
|
+
public var date: Date
|
|
109
|
+
public var condition: WeatherCondition
|
|
110
|
+
public var symbolName: String
|
|
111
|
+
public var temperature: Measurement<UnitTemperature>
|
|
112
|
+
public var apparentTemperature: Measurement<UnitTemperature>
|
|
113
|
+
public var humidity: Double
|
|
114
|
+
public var cloudCover: Double
|
|
115
|
+
public var isDaylight: Bool
|
|
116
|
+
public var precipitation: Precipitation
|
|
117
|
+
public var precipitationChance: Double
|
|
118
|
+
public var precipitationAmount: Measurement<UnitLength>
|
|
119
|
+
public var wind: Wind
|
|
120
|
+
public var uvIndex: UVIndex
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public struct DayWeather: Sendable {
|
|
124
|
+
public var date: Date
|
|
125
|
+
public var condition: WeatherCondition
|
|
126
|
+
public var symbolName: String
|
|
127
|
+
public var highTemperature: Measurement<UnitTemperature>
|
|
128
|
+
public var lowTemperature: Measurement<UnitTemperature>
|
|
129
|
+
public var precipitation: Precipitation
|
|
130
|
+
public var precipitationChance: Double
|
|
131
|
+
public var wind: Wind
|
|
132
|
+
public var uvIndex: UVIndex
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public struct Wind: Sendable {
|
|
136
|
+
public var compassDirection: Direction
|
|
137
|
+
public var direction: Measurement<UnitAngle>
|
|
138
|
+
public var speed: Measurement<UnitSpeed>
|
|
139
|
+
public var gust: Measurement<UnitSpeed>?
|
|
140
|
+
|
|
141
|
+
public enum Direction: String, CaseIterable, Sendable {
|
|
142
|
+
case north, northNortheast, northeast, eastNortheast, east, eastSoutheast, southeast, southSoutheast
|
|
143
|
+
case south, southSouthwest, southwest, westSouthwest, west, westNorthwest, northwest, northNorthwest
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
public struct UVIndex: Sendable {
|
|
148
|
+
public var value: Int
|
|
149
|
+
public var category: ExposureCategory
|
|
150
|
+
|
|
151
|
+
public enum ExposureCategory: String, CaseIterable, Sendable {
|
|
152
|
+
case low, moderate, high, veryHigh, extreme
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
public enum Precipitation: String, CaseIterable, Sendable, CustomStringConvertible {
|
|
157
|
+
case none, hail, mixed, rain, sleet, snow
|
|
158
|
+
|
|
159
|
+
public var description: String { rawValue.capitalized }
|
|
160
|
+
public var accessibilityDescription: String { description }
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public struct WeatherAlert: Sendable {
|
|
164
|
+
public var summary: String
|
|
165
|
+
public var detailsURL: URL
|
|
166
|
+
public var source: String
|
|
167
|
+
public var region: String?
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/// The attribution an app shows with the weather (Apple's logos and legal page).
|
|
171
|
+
public struct WeatherAttribution: Sendable {
|
|
172
|
+
public var serviceName: String
|
|
173
|
+
public var legalPageURL: URL
|
|
174
|
+
public var legalAttributionText: String
|
|
175
|
+
public var combinedMarkLightURL: URL
|
|
176
|
+
public var combinedMarkDarkURL: URL
|
|
177
|
+
public var squareMarkURL: URL
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
/// A description of the weather, with Apple's cases.
|
|
181
|
+
public enum WeatherCondition: String, CaseIterable, Codable, Hashable, Sendable, CustomStringConvertible {
|
|
182
|
+
case blizzard
|
|
183
|
+
case blowingDust
|
|
184
|
+
case blowingSnow
|
|
185
|
+
case breezy
|
|
186
|
+
case clear
|
|
187
|
+
case cloudy
|
|
188
|
+
case drizzle
|
|
189
|
+
case flurries
|
|
190
|
+
case foggy
|
|
191
|
+
case freezingDrizzle
|
|
192
|
+
case freezingRain
|
|
193
|
+
case frigid
|
|
194
|
+
case hail
|
|
195
|
+
case haze
|
|
196
|
+
case heavyRain
|
|
197
|
+
case heavySnow
|
|
198
|
+
case hot
|
|
199
|
+
case hurricane
|
|
200
|
+
case isolatedThunderstorms
|
|
201
|
+
case mostlyClear
|
|
202
|
+
case mostlyCloudy
|
|
203
|
+
case partlyCloudy
|
|
204
|
+
case rain
|
|
205
|
+
case scatteredThunderstorms
|
|
206
|
+
case sleet
|
|
207
|
+
case smoky
|
|
208
|
+
case snow
|
|
209
|
+
case strongStorms
|
|
210
|
+
case sunFlurries
|
|
211
|
+
case sunShowers
|
|
212
|
+
case thunderstorms
|
|
213
|
+
case tropicalStorm
|
|
214
|
+
case windy
|
|
215
|
+
case wintryMix
|
|
216
|
+
|
|
217
|
+
/// The condition in words (`partlyCloudy` is "Partly Cloudy").
|
|
218
|
+
public var description: String {
|
|
219
|
+
var words = ""
|
|
220
|
+
for character in rawValue {
|
|
221
|
+
if character.isUppercase { words.append(" ") }
|
|
222
|
+
words.append(character)
|
|
223
|
+
}
|
|
224
|
+
return words.prefix(1).uppercased() + words.dropFirst()
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
public var accessibilityDescription: String { description }
|
|
228
|
+
}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// `import WebKit` for the browser: `WKWebView` and the types around it, as
|
|
2
|
+
// declarations that keep their state. A web view inside the page would be an
|
|
3
|
+
// iframe, and most sites refuse to be framed (X-Frame-Options, CSP's
|
|
4
|
+
// frame-ancestors), so the shim has no renderer for one; and since there is
|
|
5
|
+
// no `UIViewRepresentable`, a UIKit view never reaches the screen anyway.
|
|
6
|
+
// What compiles: configuring a web view, `load` (the URL is recorded, nothing
|
|
7
|
+
// is fetched, no navigation delegate method is called), the history and
|
|
8
|
+
// progress properties (empty, finished), and `evaluateJavaScript`, which
|
|
9
|
+
// fails. Ice Cubes imports WebKit and uses none of it; code that does use it
|
|
10
|
+
// compiles and shows nothing.
|
|
11
|
+
|
|
12
|
+
import Foundation
|
|
13
|
+
import FoundationBridge
|
|
14
|
+
import SwiftUI
|
|
15
|
+
import UIKit
|
|
16
|
+
|
|
17
|
+
/// WebKit's errors, with Apple's codes.
|
|
18
|
+
public struct WKError: Error, Hashable, Sendable {
|
|
19
|
+
public enum Code: Int, Sendable {
|
|
20
|
+
case unknown = 1
|
|
21
|
+
case webContentProcessTerminated = 2
|
|
22
|
+
case webViewInvalidated = 3
|
|
23
|
+
case javaScriptExceptionOccurred = 4
|
|
24
|
+
case javaScriptResultTypeIsUnsupported = 5
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public let code: Code
|
|
28
|
+
public init(_ code: Code) { self.code = code }
|
|
29
|
+
|
|
30
|
+
public static let unknown = Code.unknown
|
|
31
|
+
public static let javaScriptExceptionOccurred = Code.javaScriptExceptionOccurred
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// MARK: - Configuration
|
|
35
|
+
|
|
36
|
+
/// Website data (cookies, storage): the browser's own, so both stores are the same.
|
|
37
|
+
@MainActor
|
|
38
|
+
open class WKWebsiteDataStore {
|
|
39
|
+
public let isPersistent: Bool
|
|
40
|
+
init(persistent: Bool) { isPersistent = persistent }
|
|
41
|
+
public static func `default`() -> WKWebsiteDataStore { WKWebsiteDataStore(persistent: true) }
|
|
42
|
+
public static func nonPersistent() -> WKWebsiteDataStore { WKWebsiteDataStore(persistent: false) }
|
|
43
|
+
public static func allWebsiteDataTypes() -> Set<String> { [] }
|
|
44
|
+
/// Nothing to remove: the page cannot reach another site's data.
|
|
45
|
+
open func removeData(ofTypes dataTypes: Set<String>, modifiedSince date: Date, completionHandler: @escaping @MainActor () -> Void) {
|
|
46
|
+
completionHandler()
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@MainActor
|
|
51
|
+
open class WKPreferences {
|
|
52
|
+
open var javaScriptCanOpenWindowsAutomatically = false
|
|
53
|
+
open var isFraudulentWebsiteWarningEnabled = true
|
|
54
|
+
open var minimumFontSize: CGFloat = 0
|
|
55
|
+
public init() {}
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
@MainActor
|
|
59
|
+
open class WKWebpagePreferences {
|
|
60
|
+
open var allowsContentJavaScript = true
|
|
61
|
+
public init() {}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/// A message a page's script posts to the app; none ever arrives.
|
|
65
|
+
@MainActor
|
|
66
|
+
open class WKScriptMessage {
|
|
67
|
+
public let name: String
|
|
68
|
+
public let body: Any
|
|
69
|
+
init(name: String, body: Any) {
|
|
70
|
+
self.name = name
|
|
71
|
+
self.body = body
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@MainActor
|
|
76
|
+
public protocol WKScriptMessageHandler: AnyObject {
|
|
77
|
+
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/// A script to inject into pages; kept.
|
|
81
|
+
@MainActor
|
|
82
|
+
open class WKUserScript {
|
|
83
|
+
public enum InjectionTime: Int, Sendable { case atDocumentStart, atDocumentEnd }
|
|
84
|
+
public let source: String
|
|
85
|
+
public let injectionTime: InjectionTime
|
|
86
|
+
public let isForMainFrameOnly: Bool
|
|
87
|
+
public init(source: String, injectionTime: InjectionTime, forMainFrameOnly: Bool) {
|
|
88
|
+
self.source = source
|
|
89
|
+
self.injectionTime = injectionTime
|
|
90
|
+
self.isForMainFrameOnly = forMainFrameOnly
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/// Scripts and message handlers; kept.
|
|
95
|
+
@MainActor
|
|
96
|
+
open class WKUserContentController {
|
|
97
|
+
public private(set) var userScripts: [WKUserScript] = []
|
|
98
|
+
private var handlers: [String: any WKScriptMessageHandler] = [:]
|
|
99
|
+
public init() {}
|
|
100
|
+
open func addUserScript(_ userScript: WKUserScript) { userScripts.append(userScript) }
|
|
101
|
+
open func removeAllUserScripts() { userScripts.removeAll() }
|
|
102
|
+
open func add(_ scriptMessageHandler: any WKScriptMessageHandler, name: String) { handlers[name] = scriptMessageHandler }
|
|
103
|
+
open func removeScriptMessageHandler(forName name: String) { handlers[name] = nil }
|
|
104
|
+
open func removeAllScriptMessageHandlers() { handlers.removeAll() }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@MainActor
|
|
108
|
+
open class WKWebViewConfiguration {
|
|
109
|
+
open var websiteDataStore = WKWebsiteDataStore.default()
|
|
110
|
+
open var preferences = WKPreferences()
|
|
111
|
+
open var defaultWebpagePreferences = WKWebpagePreferences()
|
|
112
|
+
open var userContentController = WKUserContentController()
|
|
113
|
+
open var allowsInlineMediaPlayback = false
|
|
114
|
+
open var mediaTypesRequiringUserActionForPlayback: WKAudiovisualMediaTypes = .all
|
|
115
|
+
open var applicationNameForUserAgent: String?
|
|
116
|
+
public init() {}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public struct WKAudiovisualMediaTypes: OptionSet, Sendable {
|
|
120
|
+
public let rawValue: UInt
|
|
121
|
+
public init(rawValue: UInt) { self.rawValue = rawValue }
|
|
122
|
+
public static let audio = WKAudiovisualMediaTypes(rawValue: 1 << 0)
|
|
123
|
+
public static let video = WKAudiovisualMediaTypes(rawValue: 1 << 1)
|
|
124
|
+
public static let all: WKAudiovisualMediaTypes = [.audio, .video]
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// MARK: - Navigation
|
|
128
|
+
|
|
129
|
+
/// One load; returned by `load` and never reported on.
|
|
130
|
+
@MainActor
|
|
131
|
+
open class WKNavigation {}
|
|
132
|
+
|
|
133
|
+
public enum WKNavigationType: Int, Sendable {
|
|
134
|
+
case linkActivated, formSubmitted, backForward, reload, formResubmitted
|
|
135
|
+
case other = -1
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public enum WKNavigationActionPolicy: Int, Sendable { case cancel, allow, download }
|
|
139
|
+
public enum WKNavigationResponsePolicy: Int, Sendable { case cancel, allow, download }
|
|
140
|
+
|
|
141
|
+
@MainActor
|
|
142
|
+
open class WKNavigationAction {
|
|
143
|
+
public let request: URLRequest
|
|
144
|
+
public let navigationType: WKNavigationType
|
|
145
|
+
init(request: URLRequest, navigationType: WKNavigationType) {
|
|
146
|
+
self.request = request
|
|
147
|
+
self.navigationType = navigationType
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/// What a web view tells about its loads. Every method is optional; none is
|
|
152
|
+
/// called, since nothing loads.
|
|
153
|
+
@MainActor
|
|
154
|
+
public protocol WKNavigationDelegate: AnyObject {
|
|
155
|
+
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping @MainActor (WKNavigationActionPolicy) -> Void)
|
|
156
|
+
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!)
|
|
157
|
+
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)
|
|
158
|
+
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: any Error)
|
|
159
|
+
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: any Error)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
extension WKNavigationDelegate {
|
|
163
|
+
public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping @MainActor (WKNavigationActionPolicy) -> Void) {
|
|
164
|
+
decisionHandler(.allow)
|
|
165
|
+
}
|
|
166
|
+
public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {}
|
|
167
|
+
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {}
|
|
168
|
+
public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: any Error) {}
|
|
169
|
+
public func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: any Error) {}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// Windows, alerts and panels a page's script asks for; never asked.
|
|
173
|
+
@MainActor
|
|
174
|
+
public protocol WKUIDelegate: AnyObject {}
|
|
175
|
+
|
|
176
|
+
// MARK: - The web view
|
|
177
|
+
|
|
178
|
+
/// A web view that keeps its state and shows nothing (see the top of this file).
|
|
179
|
+
@MainActor
|
|
180
|
+
open class WKWebView: UIView {
|
|
181
|
+
public let configuration: WKWebViewConfiguration
|
|
182
|
+
open weak var navigationDelegate: (any WKNavigationDelegate)?
|
|
183
|
+
open weak var uiDelegate: (any WKUIDelegate)?
|
|
184
|
+
open var allowsBackForwardNavigationGestures = false
|
|
185
|
+
open var allowsLinkPreview = true
|
|
186
|
+
open var customUserAgent: String?
|
|
187
|
+
open var isInspectable = false
|
|
188
|
+
/// The last URL given to `load`.
|
|
189
|
+
public private(set) var url: URL?
|
|
190
|
+
public private(set) var title: String?
|
|
191
|
+
/// Never loading: nothing is fetched.
|
|
192
|
+
public var isLoading: Bool { false }
|
|
193
|
+
public var estimatedProgress: Double { url == nil ? 0 : 1 }
|
|
194
|
+
public var canGoBack: Bool { false }
|
|
195
|
+
public var canGoForward: Bool { false }
|
|
196
|
+
public var hasOnlySecureContent: Bool { url?.scheme?.lowercased() == "https" }
|
|
197
|
+
|
|
198
|
+
public init(frame: CGRect, configuration: WKWebViewConfiguration) {
|
|
199
|
+
self.configuration = configuration
|
|
200
|
+
super.init(frame: frame)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
public convenience override init(frame: CGRect) {
|
|
204
|
+
self.init(frame: frame, configuration: WKWebViewConfiguration())
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
public required init?(coder: NSCoder) {
|
|
208
|
+
configuration = WKWebViewConfiguration()
|
|
209
|
+
super.init(coder: coder)
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/// Records the URL; nothing is fetched or shown.
|
|
213
|
+
@discardableResult
|
|
214
|
+
open func load(_ request: URLRequest) -> WKNavigation? {
|
|
215
|
+
url = request.url
|
|
216
|
+
return WKNavigation()
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
@discardableResult
|
|
220
|
+
open func loadHTMLString(_ string: String, baseURL: URL?) -> WKNavigation? {
|
|
221
|
+
url = baseURL
|
|
222
|
+
return WKNavigation()
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
@discardableResult
|
|
226
|
+
open func loadFileURL(_ URL: URL, allowingReadAccessTo readAccessURL: URL) -> WKNavigation? {
|
|
227
|
+
url = URL
|
|
228
|
+
return WKNavigation()
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@discardableResult open func reload() -> WKNavigation? { url == nil ? nil : WKNavigation() }
|
|
232
|
+
@discardableResult open func goBack() -> WKNavigation? { nil }
|
|
233
|
+
@discardableResult open func goForward() -> WKNavigation? { nil }
|
|
234
|
+
open func stopLoading() {}
|
|
235
|
+
|
|
236
|
+
/// Fails: there is no page to run the script in.
|
|
237
|
+
open func evaluateJavaScript(_ javaScriptString: String, completionHandler: (@MainActor (Any?, (any Error)?) -> Void)? = nil) {
|
|
238
|
+
completionHandler?(nil, WKError(.javaScriptExceptionOccurred))
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/// Throws `WKError.javaScriptExceptionOccurred`: there is no page to run the script in.
|
|
242
|
+
open func evaluateJavaScript(_ javaScriptString: String) async throws -> Any? {
|
|
243
|
+
throw WKError(.javaScriptExceptionOccurred)
|
|
244
|
+
}
|
|
245
|
+
}
|