@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,181 @@
|
|
|
1
|
+
/// Scene phase, accessibility environment and text-input hints. The browser
|
|
2
|
+
/// has no assistive-technology bridge, so the accessibility modifiers are
|
|
3
|
+
/// accepted without effect and the accessibility settings read `false`
|
|
4
|
+
/// (see docs/ops-protocol.md, Phase 8).
|
|
5
|
+
|
|
6
|
+
// MARK: - Scene phase
|
|
7
|
+
|
|
8
|
+
/// Whether the app is in the foreground. The renderer reports it with the
|
|
9
|
+
/// `environment` event from the document's visibility and focus.
|
|
10
|
+
public enum ScenePhase: Comparable, Hashable, Sendable {
|
|
11
|
+
case background, inactive, active
|
|
12
|
+
|
|
13
|
+
init?(name: String) {
|
|
14
|
+
switch name {
|
|
15
|
+
case "active": self = .active
|
|
16
|
+
case "inactive": self = .inactive
|
|
17
|
+
case "background": self = .background
|
|
18
|
+
default: return nil
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
enum _ScenePhaseKey: EnvironmentKey { static let defaultValue = ScenePhase.active }
|
|
24
|
+
enum _AccessibilityFlagKey: EnvironmentKey { static let defaultValue = false }
|
|
25
|
+
|
|
26
|
+
extension EnvironmentValues {
|
|
27
|
+
/// `.active` until the renderer's `environment` event says otherwise.
|
|
28
|
+
public var scenePhase: ScenePhase {
|
|
29
|
+
get { self[_ScenePhaseKey.self] }
|
|
30
|
+
set { self[_ScenePhaseKey.self] = newValue }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public var accessibilityDifferentiateWithoutColor: Bool { self[_AccessibilityFlagKey.self] }
|
|
34
|
+
public var accessibilityVoiceOverEnabled: Bool { self[_AccessibilityFlagKey.self] }
|
|
35
|
+
public var accessibilityReduceMotion: Bool { self[_AccessibilityFlagKey.self] }
|
|
36
|
+
public var accessibilityReduceTransparency: Bool { self[_AccessibilityFlagKey.self] }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// MARK: - Accessibility modifiers (no effect)
|
|
40
|
+
|
|
41
|
+
public struct AccessibilityTraits: OptionSet, Sendable {
|
|
42
|
+
public let rawValue: UInt64
|
|
43
|
+
public init(rawValue: UInt64) { self.rawValue = rawValue }
|
|
44
|
+
|
|
45
|
+
public static let isButton = AccessibilityTraits(rawValue: 1 << 0)
|
|
46
|
+
public static let isHeader = AccessibilityTraits(rawValue: 1 << 1)
|
|
47
|
+
public static let isSelected = AccessibilityTraits(rawValue: 1 << 2)
|
|
48
|
+
public static let isLink = AccessibilityTraits(rawValue: 1 << 3)
|
|
49
|
+
public static let isSearchField = AccessibilityTraits(rawValue: 1 << 4)
|
|
50
|
+
public static let isImage = AccessibilityTraits(rawValue: 1 << 5)
|
|
51
|
+
public static let playsSound = AccessibilityTraits(rawValue: 1 << 6)
|
|
52
|
+
public static let isKeyboardKey = AccessibilityTraits(rawValue: 1 << 7)
|
|
53
|
+
public static let isStaticText = AccessibilityTraits(rawValue: 1 << 8)
|
|
54
|
+
public static let isSummaryElement = AccessibilityTraits(rawValue: 1 << 9)
|
|
55
|
+
public static let updatesFrequently = AccessibilityTraits(rawValue: 1 << 10)
|
|
56
|
+
public static let startsMediaSession = AccessibilityTraits(rawValue: 1 << 11)
|
|
57
|
+
public static let allowsDirectInteraction = AccessibilityTraits(rawValue: 1 << 12)
|
|
58
|
+
public static let causesPageTurn = AccessibilityTraits(rawValue: 1 << 13)
|
|
59
|
+
public static let isModal = AccessibilityTraits(rawValue: 1 << 14)
|
|
60
|
+
public static let isToggle = AccessibilityTraits(rawValue: 1 << 15)
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public struct AccessibilityChildBehavior: Hashable, Sendable {
|
|
64
|
+
let name: String
|
|
65
|
+
public static let ignore = AccessibilityChildBehavior(name: "ignore")
|
|
66
|
+
public static let contain = AccessibilityChildBehavior(name: "contain")
|
|
67
|
+
public static let combine = AccessibilityChildBehavior(name: "combine")
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
nonisolated extension View {
|
|
71
|
+
/// The label is not drawn; headless event scripts can address the
|
|
72
|
+
/// element by it (`tap:"Wrong"`, docs/ops-protocol.md).
|
|
73
|
+
public func accessibilityLabel(_ label: Text) -> some View {
|
|
74
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: label.content))
|
|
75
|
+
}
|
|
76
|
+
@_disfavoredOverload
|
|
77
|
+
public func accessibilityLabel<S: StringProtocol>(_ label: S) -> some View {
|
|
78
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: String(label)))
|
|
79
|
+
}
|
|
80
|
+
public func accessibilityLabel(_ labelKey: LocalizedStringKey) -> some View {
|
|
81
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: labelKey.key))
|
|
82
|
+
}
|
|
83
|
+
/// Not drawn; headless event scripts can address the element by it
|
|
84
|
+
/// (`tap:@save`, docs/ops-protocol.md), as UI tests do on iOS.
|
|
85
|
+
public func accessibilityIdentifier(_ identifier: String) -> some View {
|
|
86
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(identifier: identifier))
|
|
87
|
+
}
|
|
88
|
+
public func accessibilityHint(_ hint: Text) -> some View { self }
|
|
89
|
+
@_disfavoredOverload
|
|
90
|
+
public func accessibilityHint<S: StringProtocol>(_ hint: S) -> some View { self }
|
|
91
|
+
public func accessibilityHint(_ hintKey: LocalizedStringKey) -> some View { self }
|
|
92
|
+
public func accessibilityValue(_ value: Text) -> some View { self }
|
|
93
|
+
@_disfavoredOverload
|
|
94
|
+
public func accessibilityValue<S: StringProtocol>(_ value: S) -> some View { self }
|
|
95
|
+
public func accessibilityValue(_ valueKey: LocalizedStringKey) -> some View { self }
|
|
96
|
+
public func accessibilityHidden(_ hidden: Bool) -> some View { self }
|
|
97
|
+
public func accessibilityAddTraits(_ traits: AccessibilityTraits) -> some View { self }
|
|
98
|
+
public func accessibilityRemoveTraits(_ traits: AccessibilityTraits) -> some View { self }
|
|
99
|
+
public func accessibilityElement(children: AccessibilityChildBehavior = .ignore) -> some View { self }
|
|
100
|
+
public func accessibilitySortPriority(_ sortPriority: Double) -> some View { self }
|
|
101
|
+
public func accessibilityRespondsToUserInteraction(_ respondsToUserInteraction: Bool = true) -> some View { self }
|
|
102
|
+
public func accessibilityInputLabels(_ inputLabels: [Text]) -> some View { self }
|
|
103
|
+
public func accessibilityInputLabels<S: StringProtocol>(_ inputLabels: [S]) -> some View { self }
|
|
104
|
+
public func accessibilityInputLabels(_ inputLabelKeys: [LocalizedStringKey]) -> some View { self }
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
// MARK: - Text input hints (no effect)
|
|
108
|
+
|
|
109
|
+
/// UIKit's keyboard types; the browser shows its own keyboard.
|
|
110
|
+
public enum UIKeyboardType: Int, Hashable, Sendable {
|
|
111
|
+
case `default`, asciiCapable, numbersAndPunctuation, URL, numberPad, phonePad, namePhonePad,
|
|
112
|
+
emailAddress, decimalPad, twitter, webSearch, asciiCapableNumberPad
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/// UIKit's content types for autofill, as names.
|
|
116
|
+
public struct UITextContentType: Hashable, Sendable {
|
|
117
|
+
public let rawValue: String
|
|
118
|
+
public init(rawValue: String) { self.rawValue = rawValue }
|
|
119
|
+
|
|
120
|
+
public static let name = UITextContentType(rawValue: "name")
|
|
121
|
+
public static let givenName = UITextContentType(rawValue: "givenName")
|
|
122
|
+
public static let familyName = UITextContentType(rawValue: "familyName")
|
|
123
|
+
public static let emailAddress = UITextContentType(rawValue: "emailAddress")
|
|
124
|
+
public static let telephoneNumber = UITextContentType(rawValue: "telephoneNumber")
|
|
125
|
+
public static let username = UITextContentType(rawValue: "username")
|
|
126
|
+
public static let password = UITextContentType(rawValue: "password")
|
|
127
|
+
public static let newPassword = UITextContentType(rawValue: "newPassword")
|
|
128
|
+
public static let oneTimeCode = UITextContentType(rawValue: "oneTimeCode")
|
|
129
|
+
public static let URL = UITextContentType(rawValue: "URL")
|
|
130
|
+
public static let fullStreetAddress = UITextContentType(rawValue: "fullStreetAddress")
|
|
131
|
+
public static let postalCode = UITextContentType(rawValue: "postalCode")
|
|
132
|
+
public static let creditCardNumber = UITextContentType(rawValue: "creditCardNumber")
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public struct TextInputAutocapitalization: Hashable, Sendable {
|
|
136
|
+
let name: String
|
|
137
|
+
public static let never = TextInputAutocapitalization(name: "never")
|
|
138
|
+
public static let words = TextInputAutocapitalization(name: "words")
|
|
139
|
+
public static let sentences = TextInputAutocapitalization(name: "sentences")
|
|
140
|
+
public static let characters = TextInputAutocapitalization(name: "characters")
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
nonisolated extension View {
|
|
144
|
+
public func keyboardType(_ type: UIKeyboardType) -> some View { self }
|
|
145
|
+
public func textContentType(_ textContentType: UITextContentType?) -> some View { self }
|
|
146
|
+
public func autocorrectionDisabled(_ disable: Bool = true) -> some View { self }
|
|
147
|
+
/// The deprecated spelling of `autocorrectionDisabled(_:)`.
|
|
148
|
+
public func disableAutocorrection(_ disable: Bool?) -> some View { self }
|
|
149
|
+
public func textInputAutocapitalization(_ autocapitalization: TextInputAutocapitalization?) -> some View { self }
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// MARK: - Labels and identifiers kept for event scripts
|
|
153
|
+
|
|
154
|
+
/// An `accessibilityLabel` / `accessibilityIdentifier` carried by the
|
|
155
|
+
/// elements a view produces. It is not sent to the renderer: headless event
|
|
156
|
+
/// scripts resolve selectors against it (Sources/SwiftUI/Runtime/Replay.swift).
|
|
157
|
+
struct _AccessibilityMark: Equatable {
|
|
158
|
+
var label: String?
|
|
159
|
+
var identifier: String?
|
|
160
|
+
|
|
161
|
+
/// Fills what `self` lacks from an outer modifier's mark; the innermost wins.
|
|
162
|
+
func merged(with outer: _AccessibilityMark) -> _AccessibilityMark {
|
|
163
|
+
_AccessibilityMark(label: label ?? outer.label, identifier: identifier ?? outer.identifier)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
protocol _AccessibilityProviding: _TraitBearing {
|
|
168
|
+
var _accessibility: _AccessibilityMark { get }
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
struct _AccessibilityView<Content: View> {
|
|
172
|
+
let content: Content
|
|
173
|
+
let mark: _AccessibilityMark
|
|
174
|
+
}
|
|
175
|
+
extension _AccessibilityView: _PrimitiveView {}
|
|
176
|
+
extension _AccessibilityView: _GroupView {
|
|
177
|
+
var _children: [any View] { [content] }
|
|
178
|
+
}
|
|
179
|
+
extension _AccessibilityView: _AccessibilityProviding {
|
|
180
|
+
var _accessibility: _AccessibilityMark { mark }
|
|
181
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// More accessibility modifiers. The page has no assistive-technology bridge
|
|
2
|
+
// (see Accessibility.swift): a label still names the element for event
|
|
3
|
+
// scripts; actions, representations and the pre-iOS 14 `accessibility(…)`
|
|
4
|
+
// spellings of the other modifiers are accepted and change nothing.
|
|
5
|
+
|
|
6
|
+
public struct AccessibilityActionKind: Hashable, Sendable {
|
|
7
|
+
let name: String
|
|
8
|
+
public static let `default` = AccessibilityActionKind(name: "default")
|
|
9
|
+
public static let escape = AccessibilityActionKind(name: "escape")
|
|
10
|
+
public static let magicTap = AccessibilityActionKind(name: "magicTap")
|
|
11
|
+
public init(named name: Text) { self.name = name.content }
|
|
12
|
+
init(name: String) { self.name = name }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
nonisolated extension View {
|
|
16
|
+
public func accessibilityRepresentation<V: View>(@ViewBuilder representation: () -> V) -> some View { self }
|
|
17
|
+
|
|
18
|
+
public func accessibilityAction(_ actionKind: AccessibilityActionKind = .default,
|
|
19
|
+
_ handler: @escaping () -> Void) -> some View { self }
|
|
20
|
+
public func accessibilityAction(named name: Text, _ handler: @escaping () -> Void) -> some View { self }
|
|
21
|
+
public func accessibilityAction(named nameKey: LocalizedStringKey, _ handler: @escaping () -> Void) -> some View { self }
|
|
22
|
+
@_disfavoredOverload
|
|
23
|
+
public func accessibilityAction<S: StringProtocol>(named name: S, _ handler: @escaping () -> Void) -> some View { self }
|
|
24
|
+
|
|
25
|
+
/// The pre-iOS 14 spellings.
|
|
26
|
+
public func accessibility(label: Text) -> some View { accessibilityLabel(label) }
|
|
27
|
+
public func accessibility(hint: Text) -> some View { self }
|
|
28
|
+
public func accessibility(value: Text) -> some View { self }
|
|
29
|
+
public func accessibility(hidden: Bool) -> some View { self }
|
|
30
|
+
public func accessibility(addTraits traits: AccessibilityTraits) -> some View { self }
|
|
31
|
+
public func accessibility(removeTraits traits: AccessibilityTraits) -> some View { self }
|
|
32
|
+
public func accessibility(identifier: String) -> some View { accessibilityIdentifier(identifier) }
|
|
33
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/// `@AccessibilityFocusState` and `.accessibilityFocused`: where VoiceOver's
|
|
2
|
+
/// focus is. The page has no bridge to the browser's screen readers for the
|
|
3
|
+
/// app to move their focus, so the state is kept as the app sets it (a
|
|
4
|
+
/// `State`, like `@FocusState`'s) and moves nowhere on its own.
|
|
5
|
+
@propertyWrapper
|
|
6
|
+
public struct AccessibilityFocusState<Value: Hashable>: DynamicProperty {
|
|
7
|
+
let state: State<Value>
|
|
8
|
+
|
|
9
|
+
public init() where Value == Bool {
|
|
10
|
+
state = State(wrappedValue: false)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public init<T: Hashable>() where Value == T? {
|
|
14
|
+
state = State(wrappedValue: nil)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public init(for technologies: AccessibilityTechnologies) where Value == Bool {
|
|
18
|
+
state = State(wrappedValue: false)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public init<T: Hashable>(for technologies: AccessibilityTechnologies) where Value == T? {
|
|
22
|
+
state = State(wrappedValue: nil)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public var wrappedValue: Value {
|
|
26
|
+
get { state.wrappedValue }
|
|
27
|
+
nonmutating set { state.wrappedValue = newValue }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public var projectedValue: AccessibilityFocusState<Value>.Binding { Binding(state: state) }
|
|
31
|
+
|
|
32
|
+
/// `$focus`: what `.accessibilityFocused` takes.
|
|
33
|
+
@propertyWrapper
|
|
34
|
+
public struct Binding {
|
|
35
|
+
let state: State<Value>
|
|
36
|
+
|
|
37
|
+
public var wrappedValue: Value {
|
|
38
|
+
get { state.wrappedValue }
|
|
39
|
+
nonmutating set { state.wrappedValue = newValue }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public var projectedValue: AccessibilityFocusState<Value>.Binding { self }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
extension AccessibilityFocusState: _StateProperty {
|
|
47
|
+
var _box: any _AnyStateBox { state.box }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// The assistive technologies a focus state follows.
|
|
51
|
+
public struct AccessibilityTechnologies: OptionSet, Hashable, Sendable {
|
|
52
|
+
public let rawValue: Int
|
|
53
|
+
public init(rawValue: Int) { self.rawValue = rawValue }
|
|
54
|
+
public static let voiceOver = AccessibilityTechnologies(rawValue: 1 << 0)
|
|
55
|
+
public static let switchControl = AccessibilityTechnologies(rawValue: 1 << 1)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
nonisolated extension View {
|
|
59
|
+
/// Accepted: no screen reader's focus is moved (see `AccessibilityFocusState`).
|
|
60
|
+
public func accessibilityFocused(_ binding: AccessibilityFocusState<Bool>.Binding) -> some View { self }
|
|
61
|
+
public func accessibilityFocused<Value: Hashable>(_ binding: AccessibilityFocusState<Value>.Binding,
|
|
62
|
+
equals value: Value) -> some View { self }
|
|
63
|
+
}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/// Alerts and confirmation dialogs. Like sheets, the runtime mounts the
|
|
2
|
+
/// actions as a second child of the presenting view while `isPresented` and
|
|
3
|
+
/// emits them inside a root-level `alert` element (see docs/ops-protocol.md,
|
|
4
|
+
/// Phase 8). A tap on one of the action buttons runs its action and dismisses;
|
|
5
|
+
/// a tap on the alert's own id dismisses without an action.
|
|
6
|
+
|
|
7
|
+
/// Views that present an alert or a confirmation dialog.
|
|
8
|
+
protocol _AlertPresenting: _TraitBearing {
|
|
9
|
+
var _isPresented: Binding<Bool> { get }
|
|
10
|
+
var _base: any View { get }
|
|
11
|
+
var _alertActions: any View { get }
|
|
12
|
+
var _alertTitle: String { get }
|
|
13
|
+
/// The message `Text`'s string, or nil when there is none.
|
|
14
|
+
var _alertMessage: String? { get }
|
|
15
|
+
/// `"alert"` or `"dialog"`.
|
|
16
|
+
var _alertStyle: String { get }
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
struct _AlertView<Base: View, Actions: View> {
|
|
20
|
+
let base: Base
|
|
21
|
+
let isPresented: Binding<Bool>
|
|
22
|
+
let title: String
|
|
23
|
+
let message: String?
|
|
24
|
+
let style: String
|
|
25
|
+
let actions: Actions
|
|
26
|
+
}
|
|
27
|
+
extension _AlertView: _PrimitiveView {}
|
|
28
|
+
extension _AlertView: _GroupView {
|
|
29
|
+
// Only the base is a regular child; the runtime adds the actions while presented.
|
|
30
|
+
var _children: [any View] { [base] }
|
|
31
|
+
}
|
|
32
|
+
extension _AlertView: _AlertPresenting {
|
|
33
|
+
var _isPresented: Binding<Bool> { isPresented }
|
|
34
|
+
var _base: any View { base }
|
|
35
|
+
var _alertActions: any View { actions }
|
|
36
|
+
var _alertTitle: String { title }
|
|
37
|
+
var _alertMessage: String? { message }
|
|
38
|
+
var _alertStyle: String { style }
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// The message of an alert: the string of the first `Text` in the view, if any.
|
|
42
|
+
@MainActor
|
|
43
|
+
private func _message(of view: any View) -> String? {
|
|
44
|
+
let text = _textContent(of: view)
|
|
45
|
+
return text.isEmpty ? nil : text
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// `presenting:` forms: the alert shows while `isPresented` and the data is
|
|
49
|
+
/// non-nil, and the closures receive the data.
|
|
50
|
+
@MainActor
|
|
51
|
+
private func _presentedData<T>(_ isPresented: Binding<Bool>, _ data: T?) -> (Binding<Bool>, T?) {
|
|
52
|
+
guard data != nil else {
|
|
53
|
+
return (Binding(get: { false }, set: { if !$0 { isPresented.wrappedValue = false } }), nil)
|
|
54
|
+
}
|
|
55
|
+
return (isPresented, data)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/// Whether a confirmation dialog's title is sent. iOS hides it for
|
|
59
|
+
/// `.automatic`, so only `.visible` sends it.
|
|
60
|
+
private func _dialogTitle(_ title: String, _ visibility: Visibility) -> String {
|
|
61
|
+
visibility == .visible ? title : ""
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
extension View {
|
|
65
|
+
// MARK: Alerts
|
|
66
|
+
|
|
67
|
+
public func alert<S: StringProtocol, A: View>(_ title: S, isPresented: Binding<Bool>,
|
|
68
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
69
|
+
_AlertView(base: self, isPresented: isPresented, title: String(title), message: nil,
|
|
70
|
+
style: "alert", actions: actions())
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public func alert<S: StringProtocol, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
|
|
74
|
+
@ViewBuilder actions: () -> A,
|
|
75
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
76
|
+
_AlertView(base: self, isPresented: isPresented, title: String(title), message: _message(of: message()),
|
|
77
|
+
style: "alert", actions: actions())
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public func alert<A: View>(_ title: Text, isPresented: Binding<Bool>,
|
|
81
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
82
|
+
_AlertView(base: self, isPresented: isPresented, title: title.content, message: nil,
|
|
83
|
+
style: "alert", actions: actions())
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public func alert<A: View, M: View>(_ title: Text, isPresented: Binding<Bool>,
|
|
87
|
+
@ViewBuilder actions: () -> A,
|
|
88
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
89
|
+
_AlertView(base: self, isPresented: isPresented, title: title.content, message: _message(of: message()),
|
|
90
|
+
style: "alert", actions: actions())
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public func alert<A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
|
|
94
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
95
|
+
_AlertView(base: self, isPresented: isPresented, title: titleKey.key, message: nil,
|
|
96
|
+
style: "alert", actions: actions())
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
public func alert<A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
|
|
100
|
+
@ViewBuilder actions: () -> A,
|
|
101
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
102
|
+
_AlertView(base: self, isPresented: isPresented, title: titleKey.key, message: _message(of: message()),
|
|
103
|
+
style: "alert", actions: actions())
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/// An alert built from `data`: shown while `isPresented` and `data` is non-nil.
|
|
107
|
+
public func alert<S: StringProtocol, T, A: View>(_ title: S, isPresented: Binding<Bool>, presenting data: T?,
|
|
108
|
+
@ViewBuilder actions: (T) -> A) -> some View {
|
|
109
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
110
|
+
return _AlertView(base: self, isPresented: presented, title: String(title), message: nil,
|
|
111
|
+
style: "alert", actions: data.map(actions))
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public func alert<S: StringProtocol, T, A: View, M: View>(_ title: S, isPresented: Binding<Bool>, presenting data: T?,
|
|
115
|
+
@ViewBuilder actions: (T) -> A,
|
|
116
|
+
@ViewBuilder message: (T) -> M) -> some View {
|
|
117
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
118
|
+
return _AlertView(base: self, isPresented: presented, title: String(title),
|
|
119
|
+
message: data.flatMap { _message(of: message($0)) },
|
|
120
|
+
style: "alert", actions: data.map(actions))
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
public func alert<T, A: View>(_ title: Text, isPresented: Binding<Bool>, presenting data: T?,
|
|
124
|
+
@ViewBuilder actions: (T) -> A) -> some View {
|
|
125
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
126
|
+
return _AlertView(base: self, isPresented: presented, title: title.content, message: nil,
|
|
127
|
+
style: "alert", actions: data.map(actions))
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public func alert<T, A: View, M: View>(_ title: Text, isPresented: Binding<Bool>, presenting data: T?,
|
|
131
|
+
@ViewBuilder actions: (T) -> A,
|
|
132
|
+
@ViewBuilder message: (T) -> M) -> some View {
|
|
133
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
134
|
+
return _AlertView(base: self, isPresented: presented, title: title.content,
|
|
135
|
+
message: data.flatMap { _message(of: message($0)) },
|
|
136
|
+
style: "alert", actions: data.map(actions))
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
public func alert<T, A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>, presenting data: T?,
|
|
140
|
+
@ViewBuilder actions: (T) -> A) -> some View {
|
|
141
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
142
|
+
return _AlertView(base: self, isPresented: presented, title: titleKey.key, message: nil,
|
|
143
|
+
style: "alert", actions: data.map(actions))
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public func alert<T, A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>, presenting data: T?,
|
|
147
|
+
@ViewBuilder actions: (T) -> A,
|
|
148
|
+
@ViewBuilder message: (T) -> M) -> some View {
|
|
149
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
150
|
+
return _AlertView(base: self, isPresented: presented, title: titleKey.key,
|
|
151
|
+
message: data.flatMap { _message(of: message($0)) },
|
|
152
|
+
style: "alert", actions: data.map(actions))
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// MARK: Confirmation dialogs
|
|
156
|
+
|
|
157
|
+
public func confirmationDialog<S: StringProtocol, A: View>(_ title: S, isPresented: Binding<Bool>,
|
|
158
|
+
titleVisibility: Visibility = .automatic,
|
|
159
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
160
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(String(title), titleVisibility),
|
|
161
|
+
message: nil, style: "dialog", actions: actions())
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public func confirmationDialog<S: StringProtocol, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
|
|
165
|
+
titleVisibility: Visibility = .automatic,
|
|
166
|
+
@ViewBuilder actions: () -> A,
|
|
167
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
168
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(String(title), titleVisibility),
|
|
169
|
+
message: _message(of: message()), style: "dialog", actions: actions())
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public func confirmationDialog<A: View>(_ title: Text, isPresented: Binding<Bool>,
|
|
173
|
+
titleVisibility: Visibility = .automatic,
|
|
174
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
175
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(title.content, titleVisibility),
|
|
176
|
+
message: nil, style: "dialog", actions: actions())
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
public func confirmationDialog<A: View, M: View>(_ title: Text, isPresented: Binding<Bool>,
|
|
180
|
+
titleVisibility: Visibility = .automatic,
|
|
181
|
+
@ViewBuilder actions: () -> A,
|
|
182
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
183
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(title.content, titleVisibility),
|
|
184
|
+
message: _message(of: message()), style: "dialog", actions: actions())
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public func confirmationDialog<A: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
|
|
188
|
+
titleVisibility: Visibility = .automatic,
|
|
189
|
+
@ViewBuilder actions: () -> A) -> some View {
|
|
190
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(titleKey.key, titleVisibility),
|
|
191
|
+
message: nil, style: "dialog", actions: actions())
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
public func confirmationDialog<A: View, M: View>(_ titleKey: LocalizedStringKey, isPresented: Binding<Bool>,
|
|
195
|
+
titleVisibility: Visibility = .automatic,
|
|
196
|
+
@ViewBuilder actions: () -> A,
|
|
197
|
+
@ViewBuilder message: () -> M) -> some View {
|
|
198
|
+
_AlertView(base: self, isPresented: isPresented, title: _dialogTitle(titleKey.key, titleVisibility),
|
|
199
|
+
message: _message(of: message()), style: "dialog", actions: actions())
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public func confirmationDialog<S: StringProtocol, T, A: View>(_ title: S, isPresented: Binding<Bool>,
|
|
203
|
+
titleVisibility: Visibility = .automatic,
|
|
204
|
+
presenting data: T?,
|
|
205
|
+
@ViewBuilder actions: (T) -> A) -> some View {
|
|
206
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
207
|
+
return _AlertView(base: self, isPresented: presented, title: _dialogTitle(String(title), titleVisibility),
|
|
208
|
+
message: nil, style: "dialog", actions: data.map(actions))
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
public func confirmationDialog<S: StringProtocol, T, A: View, M: View>(_ title: S, isPresented: Binding<Bool>,
|
|
212
|
+
titleVisibility: Visibility = .automatic,
|
|
213
|
+
presenting data: T?,
|
|
214
|
+
@ViewBuilder actions: (T) -> A,
|
|
215
|
+
@ViewBuilder message: (T) -> M) -> some View {
|
|
216
|
+
let (presented, data) = _presentedData(isPresented, data)
|
|
217
|
+
return _AlertView(base: self, isPresented: presented, title: _dialogTitle(String(title), titleVisibility),
|
|
218
|
+
message: data.flatMap { _message(of: message($0)) },
|
|
219
|
+
style: "dialog", actions: data.map(actions))
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// Custom alignments (`AlignmentID`) and `.alignmentGuide`. The page lays
|
|
2
|
+
// out stacks with the built-in guides only, so a custom alignment aligns like
|
|
3
|
+
// the built-in one its default value matches (an `AlignmentID` whose
|
|
4
|
+
// `defaultValue` is the height is `.bottom`).
|
|
5
|
+
//
|
|
6
|
+
// `.alignmentGuide(g) { d in … }` moves the view's guide `g`: where a stack,
|
|
7
|
+
// a `ZStack`, a frame or an overlay aligns the view by `g`, the view's guide
|
|
8
|
+
// value, not the default (0, half or all of its width or height), meets the
|
|
9
|
+
// container's. The page knows the view's size, Swift knows the closure: the
|
|
10
|
+
// closure is evaluated at three sizes and sent as `a + b·width + c·height`,
|
|
11
|
+
// which is exact for the guides apps write (`d[.trailing] + 4`,
|
|
12
|
+
// `d.height / 2`, `-10`) and a straight-line fit for any other. The list-row
|
|
13
|
+
// separator guides are accepted and change nothing.
|
|
14
|
+
|
|
15
|
+
public protocol AlignmentID {
|
|
16
|
+
static func defaultValue(in context: ViewDimensions) -> CGFloat
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
extension HorizontalAlignment {
|
|
20
|
+
/// The built-in guide `id`'s default value matches: leading at 0, trailing at the width, else center.
|
|
21
|
+
public init(_ id: AlignmentID.Type) {
|
|
22
|
+
switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
|
|
23
|
+
case 0: self = .leading
|
|
24
|
+
case 1: self = .trailing
|
|
25
|
+
default: self = .center
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// Where a list row's separator starts: accepted, the page draws full-width separators.
|
|
30
|
+
public static let listRowSeparatorLeading = HorizontalAlignment(name: "leading")
|
|
31
|
+
public static let listRowSeparatorTrailing = HorizontalAlignment(name: "trailing")
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
extension VerticalAlignment {
|
|
35
|
+
/// The built-in guide `id`'s default value matches: top at 0, bottom at the height, else center.
|
|
36
|
+
public init(_ id: AlignmentID.Type) {
|
|
37
|
+
switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
|
|
38
|
+
case 0: self = .top
|
|
39
|
+
case 1: self = .bottom
|
|
40
|
+
default: self = .center
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
nonisolated extension View {
|
|
46
|
+
/// Moves the view's horizontal guide `g` to `computeValue(dimensions)`.
|
|
47
|
+
public func alignmentGuide(_ g: HorizontalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
|
|
48
|
+
_styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "horizontal", name: g.name, computeValue) }
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/// Moves the view's vertical guide `g` to `computeValue(dimensions)`.
|
|
52
|
+
public func alignmentGuide(_ g: VerticalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
|
|
53
|
+
_styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "vertical", name: g.name, computeValue) }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/// `{"axis", "name", "value": [a, b, c]}`: the guide is `a + b·width + c·height`,
|
|
58
|
+
/// fitted from the closure at sizes 0×0, 100×0 and 0×100.
|
|
59
|
+
func _alignmentGuideJSON(axis: String, name: String, _ computeValue: (ViewDimensions) -> CGFloat) -> _JSON {
|
|
60
|
+
let origin = computeValue(ViewDimensions(width: 0, height: 0))
|
|
61
|
+
let wide = computeValue(ViewDimensions(width: 100, height: 0))
|
|
62
|
+
let tall = computeValue(ViewDimensions(width: 0, height: 100))
|
|
63
|
+
let terms = [origin, (wide - origin) / 100, (tall - origin) / 100].map { $0.isFinite ? _round2($0 * 100) / 100 : 0 }
|
|
64
|
+
return .object(["axis": .string(axis), "name": .string(name), "value": .array(terms.map(_JSON.number))])
|
|
65
|
+
}
|