@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,220 @@
|
|
|
1
|
+
// Intent parameters, entities, enums and how they display. Shortcuts would
|
|
2
|
+
// fill parameters, query entities and show the display representations; in
|
|
3
|
+
// the browser the app sets parameters itself and the rest is kept as given.
|
|
4
|
+
|
|
5
|
+
import Foundation
|
|
6
|
+
import FoundationBridge
|
|
7
|
+
import SwiftUI
|
|
8
|
+
import UIKit
|
|
9
|
+
import UniformTypeIdentifiers
|
|
10
|
+
|
|
11
|
+
// MARK: - Parameters
|
|
12
|
+
|
|
13
|
+
/// How a parameter takes the previous action's output in Shortcuts.
|
|
14
|
+
public struct InputConnectionBehavior: Hashable, Sendable {
|
|
15
|
+
let name: String
|
|
16
|
+
public static let `default` = InputConnectionBehavior(name: "default")
|
|
17
|
+
public static let connectToPreviousIntentResult = InputConnectionBehavior(name: "connectToPreviousIntentResult")
|
|
18
|
+
public static let never = InputConnectionBehavior(name: "never")
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
protocol _OptionalValue { static var _none: Self { get } }
|
|
22
|
+
extension Optional: _OptionalValue { static var _none: Self { nil } }
|
|
23
|
+
|
|
24
|
+
/// An intent's input. It holds what the app sets (or its default). Reading
|
|
25
|
+
/// an unset non-optional parameter stops the app: Shortcuts would ask the
|
|
26
|
+
/// user for it, and the browser has no Shortcuts. Like Apple's, it is a
|
|
27
|
+
/// class, so copies of an intent share their parameters.
|
|
28
|
+
@propertyWrapper
|
|
29
|
+
public final class IntentParameter<Value>: @unchecked Sendable {
|
|
30
|
+
public let title: LocalizedStringResource
|
|
31
|
+
public let description: LocalizedStringResource?
|
|
32
|
+
public let supportedContentTypes: [UTType]
|
|
33
|
+
public let requestValueDialog: IntentDialog?
|
|
34
|
+
public let inputConnectionBehavior: InputConnectionBehavior
|
|
35
|
+
private var value: Value?
|
|
36
|
+
|
|
37
|
+
public init(title: LocalizedStringResource, description: LocalizedStringResource? = nil, default defaultValue: Value? = nil,
|
|
38
|
+
supportedContentTypes: [UTType] = [], requestValueDialog: IntentDialog? = nil,
|
|
39
|
+
requestDisambiguationDialog: IntentDialog? = nil,
|
|
40
|
+
inputConnectionBehavior: InputConnectionBehavior = .default) {
|
|
41
|
+
self.title = title
|
|
42
|
+
self.description = description
|
|
43
|
+
self.value = defaultValue
|
|
44
|
+
self.supportedContentTypes = supportedContentTypes
|
|
45
|
+
self.requestValueDialog = requestValueDialog
|
|
46
|
+
self.inputConnectionBehavior = inputConnectionBehavior
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// `@Parameter(title: "Count") var count = 3`.
|
|
50
|
+
public convenience init(wrappedValue: Value, title: LocalizedStringResource, description: LocalizedStringResource? = nil,
|
|
51
|
+
requestValueDialog: IntentDialog? = nil,
|
|
52
|
+
inputConnectionBehavior: InputConnectionBehavior = .default) {
|
|
53
|
+
self.init(title: title, description: description, default: wrappedValue, requestValueDialog: requestValueDialog,
|
|
54
|
+
inputConnectionBehavior: inputConnectionBehavior)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public var wrappedValue: Value {
|
|
58
|
+
get {
|
|
59
|
+
if let value { return value }
|
|
60
|
+
if let optional = Value.self as? _OptionalValue.Type { return optional._none as! Value }
|
|
61
|
+
fatalError("The intent parameter \"\(title)\" has no value: Shortcuts would ask for it, and the browser has no Shortcuts. Set it before performing the intent.")
|
|
62
|
+
}
|
|
63
|
+
set { value = newValue }
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public var projectedValue: IntentParameter<Value> { self }
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public typealias Parameter<Value> = IntentParameter<Value>
|
|
70
|
+
|
|
71
|
+
/// A file passed to an intent.
|
|
72
|
+
public struct IntentFile: Sendable {
|
|
73
|
+
public var data: Data
|
|
74
|
+
public var filename: String
|
|
75
|
+
public var fileURL: URL?
|
|
76
|
+
public var type: UTType?
|
|
77
|
+
public var removedOnCompletion = false
|
|
78
|
+
|
|
79
|
+
public init(data: Data, filename: String, type: UTType? = nil) {
|
|
80
|
+
self.data = data
|
|
81
|
+
self.filename = filename
|
|
82
|
+
self.type = type
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// Reads the file now.
|
|
86
|
+
public init(fileURL: URL, filename: String? = nil, type: UTType? = nil) {
|
|
87
|
+
self.data = (try? Data(contentsOf: fileURL)) ?? Data()
|
|
88
|
+
self.filename = filename ?? fileURL.lastPathComponent
|
|
89
|
+
self.fileURL = fileURL
|
|
90
|
+
self.type = type ?? UTType(filenameExtension: fileURL.pathExtension)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// MARK: - Display
|
|
95
|
+
|
|
96
|
+
/// How Shortcuts would show a value: a title, a subtitle and an image (kept).
|
|
97
|
+
public struct DisplayRepresentation: Sendable, ExpressibleByStringInterpolation {
|
|
98
|
+
public var title: LocalizedStringResource
|
|
99
|
+
public var subtitle: LocalizedStringResource?
|
|
100
|
+
public var image: Image?
|
|
101
|
+
public var synonyms: [LocalizedStringResource]
|
|
102
|
+
|
|
103
|
+
public init(title: LocalizedStringResource, subtitle: LocalizedStringResource? = nil, image: Image? = nil,
|
|
104
|
+
synonyms: [LocalizedStringResource] = []) {
|
|
105
|
+
self.title = title
|
|
106
|
+
self.subtitle = subtitle
|
|
107
|
+
self.image = image
|
|
108
|
+
self.synonyms = synonyms
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
public init(stringLiteral value: String) { self.init(title: LocalizedStringResource(stringLiteral: value)) }
|
|
112
|
+
public init(stringInterpolation: LocalizedStringResource.StringInterpolation) {
|
|
113
|
+
self.init(title: LocalizedStringResource(stringInterpolation: stringInterpolation))
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/// A display image: a symbol, a catalog image, a URL or data, as given.
|
|
117
|
+
public struct Image: Sendable {
|
|
118
|
+
public enum DisplayStyle: Sendable { case `default`, circular }
|
|
119
|
+
|
|
120
|
+
public enum Source: Sendable {
|
|
121
|
+
case systemName(String)
|
|
122
|
+
case named(String)
|
|
123
|
+
case url(URL)
|
|
124
|
+
case data(Data)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
public let source: Source
|
|
128
|
+
public let isTemplate: Bool?
|
|
129
|
+
public var displayStyle: DisplayStyle = .default
|
|
130
|
+
/// The tint of a symbol made with `init?(systemName:tintColor:symbolConfiguration:)`.
|
|
131
|
+
public private(set) var tintColor: UIColor?
|
|
132
|
+
|
|
133
|
+
public init(named name: String, isTemplate: Bool = false) { source = .named(name); self.isTemplate = isTemplate }
|
|
134
|
+
public init(systemName: String, isTemplate: Bool? = nil) { source = .systemName(systemName); self.isTemplate = isTemplate }
|
|
135
|
+
public init(url: URL, isTemplate: Bool? = nil) { source = .url(url); self.isTemplate = isTemplate }
|
|
136
|
+
public init(data: Data, isTemplate: Bool = false, displayStyle: DisplayStyle = .default) {
|
|
137
|
+
source = .data(data)
|
|
138
|
+
self.isTemplate = isTemplate
|
|
139
|
+
self.displayStyle = displayStyle
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/// A tinted, configured symbol (the configuration is not used).
|
|
143
|
+
public init?(systemName: String, tintColor: UIColor?, symbolConfiguration: UIImage.SymbolConfiguration?) {
|
|
144
|
+
source = .systemName(systemName)
|
|
145
|
+
isTemplate = nil
|
|
146
|
+
self.tintColor = tintColor
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/// The image as SwiftUI shows one.
|
|
150
|
+
public var swiftUIImage: SwiftUI.Image? {
|
|
151
|
+
switch source {
|
|
152
|
+
case .systemName(let name): SwiftUI.Image(systemName: name)
|
|
153
|
+
case .named(let name): SwiftUI.Image(name)
|
|
154
|
+
case .data(let data): UIImage(data: data).map(SwiftUI.Image.init(uiImage:))
|
|
155
|
+
case .url: nil
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/// How Shortcuts would name a type ("Account").
|
|
162
|
+
public struct TypeDisplayRepresentation: Sendable, ExpressibleByStringInterpolation {
|
|
163
|
+
public var name: LocalizedStringResource
|
|
164
|
+
public var numericFormat: LocalizedStringResource?
|
|
165
|
+
public var synonyms: [LocalizedStringResource]
|
|
166
|
+
|
|
167
|
+
public init(name: LocalizedStringResource, numericFormat: LocalizedStringResource? = nil, synonyms: [LocalizedStringResource] = []) {
|
|
168
|
+
self.name = name
|
|
169
|
+
self.numericFormat = numericFormat
|
|
170
|
+
self.synonyms = synonyms
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
public init(stringLiteral value: String) { self.init(name: LocalizedStringResource(stringLiteral: value)) }
|
|
174
|
+
public init(stringInterpolation: LocalizedStringResource.StringInterpolation) {
|
|
175
|
+
self.init(name: LocalizedStringResource(stringInterpolation: stringInterpolation))
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// MARK: - Entities and enums
|
|
180
|
+
|
|
181
|
+
/// A value of the app's that intents take, found through its `defaultQuery`.
|
|
182
|
+
/// `Sendable`, as Apple's is: an entity of a main-actor module conforms
|
|
183
|
+
/// without isolation.
|
|
184
|
+
public protocol AppEntity: Identifiable, Sendable {
|
|
185
|
+
associatedtype DefaultQuery: EntityQuery
|
|
186
|
+
static var defaultQuery: DefaultQuery { get }
|
|
187
|
+
static var typeDisplayRepresentation: TypeDisplayRepresentation { get }
|
|
188
|
+
var displayRepresentation: DisplayRepresentation { get }
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/// Finds entities by identifier (and suggests some). Shortcuts would call
|
|
192
|
+
/// it; the app may too.
|
|
193
|
+
public protocol EntityQuery: Sendable {
|
|
194
|
+
associatedtype Entity: AppEntity
|
|
195
|
+
init()
|
|
196
|
+
func entities(for identifiers: [Entity.ID]) async throws -> [Entity]
|
|
197
|
+
func suggestedEntities() async throws -> [Entity]
|
|
198
|
+
func defaultResult() async -> Entity?
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
extension EntityQuery {
|
|
202
|
+
public func suggestedEntities() async throws -> [Entity] { [] }
|
|
203
|
+
public func defaultResult() async -> Entity? { nil }
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/// A query that also finds entities by text.
|
|
207
|
+
public protocol EntityStringQuery: EntityQuery {
|
|
208
|
+
func entities(matching string: String) async throws -> [Entity]
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
/// A query whose entities can all be listed.
|
|
212
|
+
public protocol EnumerableEntityQuery: EntityQuery {
|
|
213
|
+
func allEntities() async throws -> [Entity]
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/// An enum that intents take, with how each case displays.
|
|
217
|
+
public protocol AppEnum: RawRepresentable, CaseIterable, Hashable where RawValue: LosslessStringConvertible {
|
|
218
|
+
static var typeDisplayRepresentation: TypeDisplayRepresentation { get }
|
|
219
|
+
static var caseDisplayRepresentations: [Self: DisplayRepresentation] { get }
|
|
220
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// App Shortcuts, and SwiftUI's controls that perform an intent.
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
import FoundationBridge
|
|
5
|
+
import SwiftUI
|
|
6
|
+
|
|
7
|
+
// MARK: - App Shortcuts
|
|
8
|
+
|
|
9
|
+
/// The app's App Shortcuts. Nothing reads them in the browser: there is no
|
|
10
|
+
/// Shortcuts app, Siri or Spotlight.
|
|
11
|
+
public protocol AppShortcutsProvider {
|
|
12
|
+
@AppShortcutsBuilder static var appShortcuts: [AppShortcut] { get }
|
|
13
|
+
static var shortcutTileColor: ShortcutTileColor { get }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
extension AppShortcutsProvider {
|
|
17
|
+
public static var shortcutTileColor: ShortcutTileColor { .automatic }
|
|
18
|
+
/// Does nothing: no system index to update.
|
|
19
|
+
public static func updateAppShortcutParameters() {}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public enum ShortcutTileColor: Sendable {
|
|
23
|
+
case automatic, red, tangerine, orange, yellow, lime, grayGreen, teal, lightBlue, blue, navy, purple, pink, grayBlue, grayBrown
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@resultBuilder
|
|
27
|
+
public enum AppShortcutsBuilder {
|
|
28
|
+
public static func buildExpression(_ shortcut: AppShortcut) -> [AppShortcut] { [shortcut] }
|
|
29
|
+
public static func buildBlock(_ components: [AppShortcut]...) -> [AppShortcut] { components.flatMap { $0 } }
|
|
30
|
+
public static func buildOptional(_ component: [AppShortcut]?) -> [AppShortcut] { component ?? [] }
|
|
31
|
+
public static func buildEither(first component: [AppShortcut]) -> [AppShortcut] { component }
|
|
32
|
+
public static func buildEither(second component: [AppShortcut]) -> [AppShortcut] { component }
|
|
33
|
+
public static func buildArray(_ components: [[AppShortcut]]) -> [AppShortcut] { components.flatMap { $0 } }
|
|
34
|
+
public static func buildLimitedAvailability(_ component: [AppShortcut]) -> [AppShortcut] { component }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/// An intent with the phrases that would run it, kept.
|
|
38
|
+
public struct AppShortcut: Sendable {
|
|
39
|
+
public let intent: any AppIntent
|
|
40
|
+
public let phrases: [String]
|
|
41
|
+
public let shortTitle: LocalizedStringResource?
|
|
42
|
+
public let systemImageName: String?
|
|
43
|
+
|
|
44
|
+
public init<Intent: AppIntent>(intent: Intent, phrases: [AppShortcutPhrase<Intent>],
|
|
45
|
+
shortTitle: LocalizedStringResource, systemImageName: String) {
|
|
46
|
+
self.intent = intent
|
|
47
|
+
self.phrases = phrases.map(\.text)
|
|
48
|
+
self.shortTitle = shortTitle
|
|
49
|
+
self.systemImageName = systemImageName
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public init<Intent: AppIntent>(intent: Intent, phrases: [AppShortcutPhrase<Intent>]) {
|
|
53
|
+
self.intent = intent
|
|
54
|
+
self.phrases = phrases.map(\.text)
|
|
55
|
+
self.shortTitle = nil
|
|
56
|
+
self.systemImageName = nil
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// A phrase that would run an intent: "Post in \(.applicationName)".
|
|
61
|
+
public struct AppShortcutPhrase<Intent: AppIntent>: Sendable, ExpressibleByStringInterpolation {
|
|
62
|
+
/// The phrase, with `${applicationName}` and `${parameter}` placeholders as Apple writes them.
|
|
63
|
+
public let text: String
|
|
64
|
+
|
|
65
|
+
public init(stringLiteral value: String) { text = value }
|
|
66
|
+
public init(stringInterpolation: StringInterpolation) { text = stringInterpolation.text }
|
|
67
|
+
|
|
68
|
+
public struct StringInterpolation: StringInterpolationProtocol {
|
|
69
|
+
var text = ""
|
|
70
|
+
public init(literalCapacity: Int, interpolationCount: Int) {}
|
|
71
|
+
public mutating func appendLiteral(_ literal: String) { text += literal }
|
|
72
|
+
public mutating func appendInterpolation(_ token: AppShortcutPhraseToken) { text += "${\(token.name)}" }
|
|
73
|
+
public mutating func appendInterpolation<Value>(_ parameter: KeyPath<Intent, IntentParameter<Value>>) { text += "${parameter}" }
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public struct AppShortcutPhraseToken: Sendable {
|
|
78
|
+
let name: String
|
|
79
|
+
public static let applicationName = AppShortcutPhraseToken(name: "applicationName")
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// MARK: - Controls that perform an intent
|
|
83
|
+
|
|
84
|
+
extension Button {
|
|
85
|
+
/// A button that performs `intent` when tapped (in a task on the main
|
|
86
|
+
/// actor; a thrown error is dropped, as SwiftUI only logs it).
|
|
87
|
+
public init(role: ButtonRole? = nil, intent: some AppIntent, @ViewBuilder label: () -> Label) {
|
|
88
|
+
self.init(role: role, action: _perform(intent), label: label)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
extension Button where Label == Text {
|
|
93
|
+
public init(_ titleKey: LocalizedStringKey, role: ButtonRole? = nil, intent: some AppIntent) {
|
|
94
|
+
self.init(titleKey, role: role, action: _perform(intent))
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@_disfavoredOverload
|
|
98
|
+
public init<S: StringProtocol>(_ title: S, role: ButtonRole? = nil, intent: some AppIntent) {
|
|
99
|
+
self.init(title, role: role, action: _perform(intent))
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
extension Button where Label == SwiftUI.Label<Text, Image> {
|
|
104
|
+
public init(_ titleKey: LocalizedStringKey, systemImage: String, role: ButtonRole? = nil, intent: some AppIntent) {
|
|
105
|
+
self.init(titleKey, systemImage: systemImage, role: role, action: _perform(intent))
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
@_disfavoredOverload
|
|
109
|
+
public init<S: StringProtocol>(_ title: S, systemImage: String, role: ButtonRole? = nil, intent: some AppIntent) {
|
|
110
|
+
self.init(title, systemImage: systemImage, role: role, action: _perform(intent))
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
extension Toggle {
|
|
115
|
+
/// A toggle that performs `intent` when switched (the intent sets the state the binding reads).
|
|
116
|
+
public init(isOn: Bool, intent: some AppIntent, @ViewBuilder label: () -> Label) {
|
|
117
|
+
let action = _perform(intent)
|
|
118
|
+
self.init(isOn: Binding(get: { isOn }, set: { _ in MainActor.assumeIsolated { action() } }), label: label)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// The action that performs `intent`.
|
|
123
|
+
func _perform<Intent: AppIntent>(_ intent: Intent) -> @MainActor () -> Void {
|
|
124
|
+
{ Task { @MainActor in _ = try? await intent.perform() } }
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// MARK: - Siri tips and Shortcuts links
|
|
128
|
+
|
|
129
|
+
/// A tip suggesting the phrase that runs an intent with Siri. There is no
|
|
130
|
+
/// Siri in the browser, so it draws nothing, as when iOS has nothing to suggest.
|
|
131
|
+
public struct SiriTipView: View {
|
|
132
|
+
public init(intent: some AppIntent, isVisible: Binding<Bool> = .constant(true)) {}
|
|
133
|
+
public var body: some View { EmptyView() }
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/// How a `SiriTipView` is drawn; kept.
|
|
137
|
+
public enum SiriTipViewStyle: Sendable {
|
|
138
|
+
case automatic, light, dark, black
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
extension View {
|
|
142
|
+
public func siriTipViewStyle(_ style: SiriTipViewStyle) -> some View { self }
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// A button that opens the app's page in the Shortcuts app. There is no
|
|
146
|
+
/// Shortcuts app in the browser, so it draws nothing.
|
|
147
|
+
public struct ShortcutsLink: View {
|
|
148
|
+
public init(action: (() -> Void)? = nil) {}
|
|
149
|
+
public var body: some View { EmptyView() }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/// How a `ShortcutsLink` is drawn; kept.
|
|
153
|
+
public enum ShortcutsLinkStyle: Sendable {
|
|
154
|
+
case automatic, automaticOutline, light, lightOutline, dark, darkOutline
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
extension View {
|
|
158
|
+
public func shortcutsLinkStyle(_ style: ShortcutsLinkStyle) -> some View { self }
|
|
159
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// `import AudioToolbox` for the browser: System Sound Services, which apps
|
|
2
|
+
// use for short sound effects and the vibration "sound". The page has no
|
|
3
|
+
// audio player for the app yet (AVFoundation is empty for the same reason),
|
|
4
|
+
// so a registered sound gets an ID and playing it is silent; vibration is
|
|
5
|
+
// silent too. Ice Cubes registers its effects (`pull`, `refresh`, …) this way.
|
|
6
|
+
|
|
7
|
+
import Foundation
|
|
8
|
+
// `OSStatus`, `CFURL`
|
|
9
|
+
@_exported import CoreFoundationTypes
|
|
10
|
+
|
|
11
|
+
public typealias SystemSoundID = UInt32
|
|
12
|
+
|
|
13
|
+
public let kAudioServicesNoError: OSStatus = 0
|
|
14
|
+
public let kAudioServicesBadSpecifierSizeError: OSStatus = 0x7E73697A // '!siz'
|
|
15
|
+
public let kAudioServicesSystemSoundUnspecifiedError: OSStatus = -1500
|
|
16
|
+
public let kAudioServicesSystemSoundClientTimedOutError: OSStatus = -1501
|
|
17
|
+
|
|
18
|
+
/// The "sound" that vibrates an iPhone.
|
|
19
|
+
public let kSystemSoundID_Vibrate: SystemSoundID = 0x00000FFF
|
|
20
|
+
|
|
21
|
+
nonisolated(unsafe) private var registered: [SystemSoundID: URL] = [:]
|
|
22
|
+
nonisolated(unsafe) private var nextID: SystemSoundID = 4096 + 1
|
|
23
|
+
|
|
24
|
+
/// Registers the sound file at `inFileURL` and writes its ID. The file must
|
|
25
|
+
/// exist; it is never played.
|
|
26
|
+
@discardableResult
|
|
27
|
+
public func AudioServicesCreateSystemSoundID(_ inFileURL: CFURL, _ outSystemSoundID: UnsafeMutablePointer<SystemSoundID>) -> OSStatus {
|
|
28
|
+
guard FileManager.default.fileExists(atPath: inFileURL.path) else { return kAudioServicesSystemSoundUnspecifiedError }
|
|
29
|
+
let id = nextID
|
|
30
|
+
nextID += 1
|
|
31
|
+
registered[id] = inFileURL
|
|
32
|
+
outSystemSoundID.pointee = id
|
|
33
|
+
return kAudioServicesNoError
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@discardableResult
|
|
37
|
+
public func AudioServicesDisposeSystemSoundID(_ inSystemSoundID: SystemSoundID) -> OSStatus {
|
|
38
|
+
registered[inSystemSoundID] = nil
|
|
39
|
+
return kAudioServicesNoError
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/// Silent: the page has no audio player for the app.
|
|
43
|
+
public func AudioServicesPlaySystemSound(_ inSystemSoundID: SystemSoundID) {}
|
|
44
|
+
|
|
45
|
+
/// Silent; calls `inCompletionBlock` at once.
|
|
46
|
+
public func AudioServicesPlaySystemSoundWithCompletion(_ inSystemSoundID: SystemSoundID, _ inCompletionBlock: (@Sendable () -> Void)?) {
|
|
47
|
+
inCompletionBlock?()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// Silent: the browser has no haptics.
|
|
51
|
+
public func AudioServicesPlayAlertSound(_ inSystemSoundID: SystemSoundID) {}
|
|
52
|
+
|
|
53
|
+
public func AudioServicesPlayAlertSoundWithCompletion(_ inSystemSoundID: SystemSoundID, _ inCompletionBlock: (@Sendable () -> Void)?) {
|
|
54
|
+
inCompletionBlock?()
|
|
55
|
+
}
|