@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,386 @@
|
|
|
1
|
+
/// A screen pushed onto a `NavigationStack`.
|
|
2
|
+
struct _PushedScreen {
|
|
3
|
+
let view: any View
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/// A type-erased list of values pushed onto a navigation stack.
|
|
7
|
+
public struct NavigationPath: Equatable {
|
|
8
|
+
var values: [AnyHashable] = []
|
|
9
|
+
|
|
10
|
+
public init() {}
|
|
11
|
+
|
|
12
|
+
public init<S: Sequence>(_ elements: S) where S.Element: Hashable {
|
|
13
|
+
values = elements.map { AnyHashable($0) }
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public var count: Int { values.count }
|
|
17
|
+
public var isEmpty: Bool { values.isEmpty }
|
|
18
|
+
|
|
19
|
+
public mutating func append<V: Hashable>(_ value: V) { values.append(AnyHashable(value)) }
|
|
20
|
+
|
|
21
|
+
public mutating func removeLast(_ k: Int = 1) {
|
|
22
|
+
values.removeLast(min(k, values.count))
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
protocol _NavigationStackView: _TraitBearing {
|
|
27
|
+
var _root: any View { get }
|
|
28
|
+
var _pushedBox: _StateBox<[_PushedScreen]> { get }
|
|
29
|
+
/// Value-based path, when the stack was created with one.
|
|
30
|
+
var _path: _PathBinding? { get }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Reads and writes a navigation path of any element type as `AnyHashable`s.
|
|
34
|
+
struct _PathBinding {
|
|
35
|
+
let get: () -> [AnyHashable]
|
|
36
|
+
let set: ([AnyHashable]) -> Void
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// A view that displays a root view and lets you push views onto it.
|
|
40
|
+
public struct NavigationStack<Data, Content: View> {
|
|
41
|
+
let root: Content
|
|
42
|
+
let path: _PathBinding?
|
|
43
|
+
@State var pushed: [_PushedScreen] = []
|
|
44
|
+
|
|
45
|
+
public init(@ViewBuilder root: () -> Content) where Data == NavigationPath {
|
|
46
|
+
self.root = root()
|
|
47
|
+
self.path = nil
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public init(path: Binding<NavigationPath>, @ViewBuilder root: () -> Content) where Data == NavigationPath {
|
|
51
|
+
self.root = root()
|
|
52
|
+
self.path = _PathBinding(
|
|
53
|
+
get: { path.wrappedValue.values },
|
|
54
|
+
set: { path.wrappedValue.values = $0 }
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
public init<Element: Hashable>(path: Binding<[Element]>, @ViewBuilder root: () -> Content)
|
|
59
|
+
where Data == [Element] {
|
|
60
|
+
self.root = root()
|
|
61
|
+
self.path = _PathBinding(
|
|
62
|
+
get: { path.wrappedValue.map { AnyHashable($0) } },
|
|
63
|
+
set: { path.wrappedValue = $0.compactMap { $0.base as? Element } }
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
extension NavigationStack: _PrimitiveView {}
|
|
68
|
+
extension NavigationStack: _HostView {
|
|
69
|
+
var _kind: String { "navstack" }
|
|
70
|
+
func _props(in environment: EnvironmentValues) -> _JSON { .object([:]) }
|
|
71
|
+
// Children are produced by the runtime from `pushed`.
|
|
72
|
+
}
|
|
73
|
+
extension NavigationStack: _NavigationStackView {
|
|
74
|
+
var _root: any View { root }
|
|
75
|
+
var _pushedBox: _StateBox<[_PushedScreen]> { _pushed.box }
|
|
76
|
+
var _path: _PathBinding? { path }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// A pushed screen whose view is resolved from a value through the enclosing
|
|
80
|
+
/// stack's `navigationDestination(for:)` registrations.
|
|
81
|
+
struct _PathScreenValue {
|
|
82
|
+
let value: AnyHashable
|
|
83
|
+
}
|
|
84
|
+
extension _PathScreenValue: _PrimitiveView {}
|
|
85
|
+
extension _PathScreenValue: _GroupView {
|
|
86
|
+
// Resolved by the runtime through the stack's registrations.
|
|
87
|
+
var _children: [any View] { [] }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
protocol _DestinationRegistering: _TraitBearing {
|
|
91
|
+
var _destinationType: ObjectIdentifier { get }
|
|
92
|
+
var _destinationTypeName: String { get }
|
|
93
|
+
func _destination(for value: Any) -> (any View)?
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
struct _DestinationView<Content: View, Value: Hashable, Destination: View> {
|
|
97
|
+
let content: Content
|
|
98
|
+
let builder: (Value) -> Destination
|
|
99
|
+
}
|
|
100
|
+
extension _DestinationView: _PrimitiveView {}
|
|
101
|
+
extension _DestinationView: _GroupView {
|
|
102
|
+
var _children: [any View] { [content] }
|
|
103
|
+
}
|
|
104
|
+
extension _DestinationView: _DestinationRegistering {
|
|
105
|
+
var _destinationType: ObjectIdentifier { ObjectIdentifier(Value.self) }
|
|
106
|
+
var _destinationTypeName: String { String(describing: Value.self) }
|
|
107
|
+
func _destination(for value: Any) -> (any View)? {
|
|
108
|
+
guard let value = value as? Value else { return nil }
|
|
109
|
+
return builder(value)
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
nonisolated extension View {
|
|
114
|
+
/// Associates a destination view with values of `data`'s type pushed by
|
|
115
|
+
/// `NavigationLink(value:)` or appended to the stack's path.
|
|
116
|
+
public func navigationDestination<D: Hashable, C: View>(for data: D.Type,
|
|
117
|
+
@ViewBuilder destination: @escaping (D) -> C) -> some View {
|
|
118
|
+
_DestinationView(content: self, builder: destination)
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
protocol _NavigationValueLinkView: _TraitBearing {
|
|
123
|
+
var _value: AnyHashable? { get }
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
extension NavigationLink where Destination == Never {
|
|
127
|
+
/// A link that pushes `value` onto the enclosing stack's path.
|
|
128
|
+
public init<P: Hashable>(value: P?, @ViewBuilder label: () -> Label) {
|
|
129
|
+
self.destination = nil
|
|
130
|
+
self.value = value.map { AnyHashable($0) }
|
|
131
|
+
self.label = label()
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
extension NavigationLink where Label == Text, Destination == Never {
|
|
136
|
+
public init<S: StringProtocol, P: Hashable>(_ title: S, value: P?) {
|
|
137
|
+
self.destination = nil
|
|
138
|
+
self.value = value.map { AnyHashable($0) }
|
|
139
|
+
self.label = Text(title)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
extension NavigationLink: _NavigationValueLinkView {
|
|
144
|
+
var _value: AnyHashable? { value }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/// One screen of a navigation stack. Created by the runtime, never by apps.
|
|
148
|
+
struct _NavScreenView {
|
|
149
|
+
let content: any View
|
|
150
|
+
let depth: Int
|
|
151
|
+
}
|
|
152
|
+
extension _NavScreenView: _PrimitiveView {}
|
|
153
|
+
extension _NavScreenView: _HostView {
|
|
154
|
+
var _kind: String { "navscreen" }
|
|
155
|
+
func _props(in environment: EnvironmentValues) -> _JSON { .object(["depth": .number(Double(depth))]) }
|
|
156
|
+
var _content: [any View] { [content] }
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
protocol _NavigationLinkView: _TraitBearing {
|
|
160
|
+
var _destination: any View { get }
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/// A control that pushes its destination onto the enclosing navigation stack.
|
|
164
|
+
public struct NavigationLink<Label: View, Destination: View> {
|
|
165
|
+
let destination: Destination?
|
|
166
|
+
let value: AnyHashable?
|
|
167
|
+
let label: Label
|
|
168
|
+
|
|
169
|
+
public init(@ViewBuilder destination: () -> Destination, @ViewBuilder label: () -> Label) {
|
|
170
|
+
self.destination = destination()
|
|
171
|
+
self.value = nil
|
|
172
|
+
self.label = label()
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public init(destination: Destination, @ViewBuilder label: () -> Label) {
|
|
176
|
+
self.destination = destination
|
|
177
|
+
self.value = nil
|
|
178
|
+
self.label = label()
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
extension NavigationLink where Label == Text {
|
|
183
|
+
public init(_ titleKey: LocalizedStringKey, @ViewBuilder destination: () -> Destination) {
|
|
184
|
+
self.destination = destination()
|
|
185
|
+
self.value = nil
|
|
186
|
+
self.label = Text(titleKey)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
public init(_ titleKey: LocalizedStringKey, destination: Destination) {
|
|
190
|
+
self.destination = destination
|
|
191
|
+
self.value = nil
|
|
192
|
+
self.label = Text(titleKey)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@_disfavoredOverload
|
|
196
|
+
public init<S: StringProtocol>(_ title: S, @ViewBuilder destination: () -> Destination) {
|
|
197
|
+
self.destination = destination()
|
|
198
|
+
self.value = nil
|
|
199
|
+
self.label = Text(title)
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
@_disfavoredOverload
|
|
203
|
+
public init<S: StringProtocol>(_ title: S, destination: Destination) {
|
|
204
|
+
self.destination = destination
|
|
205
|
+
self.value = nil
|
|
206
|
+
self.label = Text(title)
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
extension NavigationLink: _PrimitiveView {}
|
|
210
|
+
extension NavigationLink: _HostView {
|
|
211
|
+
var _kind: String { "navlink" }
|
|
212
|
+
/// `selected` marks the row of a `List(selection:)` whose value is the
|
|
213
|
+
/// current selection (see docs/ops-protocol.md, Phase 7); omitted otherwise.
|
|
214
|
+
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
215
|
+
if let value, let selection = environment._listSelection, selection.get() == value {
|
|
216
|
+
return .object(["selected": .bool(true)])
|
|
217
|
+
}
|
|
218
|
+
return .object([:])
|
|
219
|
+
}
|
|
220
|
+
var _content: [any View] { [label] }
|
|
221
|
+
// The handler is supplied by the runtime, which knows the enclosing stack.
|
|
222
|
+
}
|
|
223
|
+
extension NavigationLink: _NavigationLinkView {
|
|
224
|
+
var _destination: any View { destination ?? EmptyView() }
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// MARK: - NavigationSplitView
|
|
228
|
+
|
|
229
|
+
/// Which columns of a `NavigationSplitView` are shown. Accepted for source
|
|
230
|
+
/// compatibility; the shim shows the sidebar and the detail (see below).
|
|
231
|
+
public struct NavigationSplitViewVisibility: Hashable, Sendable {
|
|
232
|
+
let name: String
|
|
233
|
+
public static let automatic = NavigationSplitViewVisibility(name: "automatic")
|
|
234
|
+
public static let all = NavigationSplitViewVisibility(name: "all")
|
|
235
|
+
public static let doubleColumn = NavigationSplitViewVisibility(name: "doubleColumn")
|
|
236
|
+
public static let detailOnly = NavigationSplitViewVisibility(name: "detailOnly")
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// `.navigationSplitViewStyle`: accepted for source compatibility.
|
|
240
|
+
public protocol NavigationSplitViewStyle {}
|
|
241
|
+
public struct AutomaticNavigationSplitViewStyle: NavigationSplitViewStyle { public init() {} }
|
|
242
|
+
public struct BalancedNavigationSplitViewStyle: NavigationSplitViewStyle { public init() {} }
|
|
243
|
+
public struct ProminentDetailNavigationSplitViewStyle: NavigationSplitViewStyle { public init() {} }
|
|
244
|
+
extension NavigationSplitViewStyle where Self == AutomaticNavigationSplitViewStyle {
|
|
245
|
+
public static var automatic: AutomaticNavigationSplitViewStyle { AutomaticNavigationSplitViewStyle() }
|
|
246
|
+
}
|
|
247
|
+
extension NavigationSplitViewStyle where Self == BalancedNavigationSplitViewStyle {
|
|
248
|
+
public static var balanced: BalancedNavigationSplitViewStyle { BalancedNavigationSplitViewStyle() }
|
|
249
|
+
}
|
|
250
|
+
extension NavigationSplitViewStyle where Self == ProminentDetailNavigationSplitViewStyle {
|
|
251
|
+
public static var prominentDetail: ProminentDetailNavigationSplitViewStyle { ProminentDetailNavigationSplitViewStyle() }
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
nonisolated extension View {
|
|
255
|
+
public func navigationSplitViewColumnWidth(_ width: CGFloat) -> some View { self }
|
|
256
|
+
public func navigationSplitViewColumnWidth(min: CGFloat? = nil, ideal: CGFloat, max: CGFloat? = nil) -> some View { self }
|
|
257
|
+
public func navigationSplitViewStyle<S: NavigationSplitViewStyle>(_ style: S) -> some View { self }
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/// The runtime's view of a split view (see Runtime.swift): by size class it
|
|
261
|
+
/// renders a `navsplit` of two stacks (regular) or one stack rooted at the
|
|
262
|
+
/// sidebar that pushes the detail while the sidebar's list selection is set
|
|
263
|
+
/// (compact). The sidebar's `List(selection:)` is found as it is reconciled.
|
|
264
|
+
protocol _NavigationSplitHost: _TraitBearing {
|
|
265
|
+
var _sidebar: any View { get }
|
|
266
|
+
var _detail: any View { get }
|
|
267
|
+
/// Screens pushed from the compact detail (links inside it).
|
|
268
|
+
var _pushedBox: _StateBox<[_PushedScreen]> { get }
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/// A two-column navigation interface: a sidebar whose list selection drives
|
|
272
|
+
/// the detail column. The optional middle `content` column is treated as part
|
|
273
|
+
/// of the detail and not shown.
|
|
274
|
+
public struct NavigationSplitView<Sidebar: View, Content: View, Detail: View> {
|
|
275
|
+
let sidebar: Sidebar
|
|
276
|
+
let detail: Detail
|
|
277
|
+
@State var pushed: [_PushedScreen] = []
|
|
278
|
+
|
|
279
|
+
public init(@ViewBuilder sidebar: () -> Sidebar, @ViewBuilder detail: () -> Detail) where Content == EmptyView {
|
|
280
|
+
self.sidebar = sidebar()
|
|
281
|
+
self.detail = detail()
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
public init(@ViewBuilder sidebar: () -> Sidebar, @ViewBuilder content: () -> Content,
|
|
285
|
+
@ViewBuilder detail: () -> Detail) {
|
|
286
|
+
self.sidebar = sidebar()
|
|
287
|
+
_ = content()
|
|
288
|
+
self.detail = detail()
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/// The visibility binding is accepted and ignored.
|
|
292
|
+
public init(columnVisibility: Binding<NavigationSplitViewVisibility>,
|
|
293
|
+
@ViewBuilder sidebar: () -> Sidebar, @ViewBuilder detail: () -> Detail) where Content == EmptyView {
|
|
294
|
+
self.sidebar = sidebar()
|
|
295
|
+
self.detail = detail()
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
public init(columnVisibility: Binding<NavigationSplitViewVisibility>,
|
|
299
|
+
@ViewBuilder sidebar: () -> Sidebar, @ViewBuilder content: () -> Content,
|
|
300
|
+
@ViewBuilder detail: () -> Detail) {
|
|
301
|
+
self.sidebar = sidebar()
|
|
302
|
+
_ = content()
|
|
303
|
+
self.detail = detail()
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
extension NavigationSplitView: _PrimitiveView {}
|
|
307
|
+
extension NavigationSplitView: _HostView {
|
|
308
|
+
var _kind: String { "navsplit" }
|
|
309
|
+
func _props(in environment: EnvironmentValues) -> _JSON { .object([:]) }
|
|
310
|
+
// Children are produced by the runtime from the size class.
|
|
311
|
+
}
|
|
312
|
+
extension NavigationSplitView: _NavigationSplitHost {
|
|
313
|
+
var _sidebar: any View { sidebar }
|
|
314
|
+
var _detail: any View { detail }
|
|
315
|
+
var _pushedBox: _StateBox<[_PushedScreen]> { _pushed.box }
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/// Marks the sidebar subtree of a split view: value links there select
|
|
319
|
+
/// instead of pushing, and the sidebar's `List(selection:)` registers its
|
|
320
|
+
/// binding with the split view's node (`split`) as it is reconciled.
|
|
321
|
+
struct _SplitSidebarView {
|
|
322
|
+
let content: any View
|
|
323
|
+
unowned let split: _MountedNode
|
|
324
|
+
}
|
|
325
|
+
extension _SplitSidebarView: _PrimitiveView {}
|
|
326
|
+
extension _SplitSidebarView: _GroupView {
|
|
327
|
+
var _children: [any View] { [content] }
|
|
328
|
+
}
|
|
329
|
+
extension _SplitSidebarView: _EnvironmentModifying {
|
|
330
|
+
func _apply(to environment: inout EnvironmentValues) { environment._splitSidebar = true }
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
// MARK: - Titles
|
|
334
|
+
|
|
335
|
+
public enum NavigationBarItem {
|
|
336
|
+
public enum TitleDisplayMode: Hashable, Sendable {
|
|
337
|
+
case automatic, inline, large
|
|
338
|
+
|
|
339
|
+
var name: String {
|
|
340
|
+
switch self {
|
|
341
|
+
case .automatic: "automatic"
|
|
342
|
+
case .inline: "inline"
|
|
343
|
+
case .large: "large"
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
protocol _NavigationTitleModifying: _TraitBearing {
|
|
350
|
+
var _title: String? { get }
|
|
351
|
+
var _displayMode: String? { get }
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
struct _NavigationTitleView<Content: View> {
|
|
355
|
+
let content: Content
|
|
356
|
+
let title: String?
|
|
357
|
+
let displayMode: String?
|
|
358
|
+
}
|
|
359
|
+
extension _NavigationTitleView: _PrimitiveView {}
|
|
360
|
+
extension _NavigationTitleView: _GroupView {
|
|
361
|
+
var _children: [any View] { [content] }
|
|
362
|
+
}
|
|
363
|
+
extension _NavigationTitleView: _NavigationTitleModifying {
|
|
364
|
+
var _title: String? { title }
|
|
365
|
+
var _displayMode: String? { displayMode }
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
nonisolated extension View {
|
|
369
|
+
@_disfavoredOverload
|
|
370
|
+
public func navigationTitle<S: StringProtocol>(_ title: S) -> some View {
|
|
371
|
+
_NavigationTitleView(content: self, title: String(title), displayMode: nil)
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
public func navigationTitle(_ title: Text) -> some View {
|
|
375
|
+
_NavigationTitleView(content: self, title: title._content, displayMode: nil)
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
/// An editable title (iOS 16): the browser shows the bound value and does not edit it.
|
|
379
|
+
public func navigationTitle(_ title: Binding<String>) -> some View {
|
|
380
|
+
_NavigationTitleView(content: self, title: title.wrappedValue, displayMode: nil)
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
public func navigationBarTitleDisplayMode(_ mode: NavigationBarItem.TitleDisplayMode) -> some View {
|
|
384
|
+
_NavigationTitleView(content: self, title: nil, displayMode: mode.name)
|
|
385
|
+
}
|
|
386
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/// `navigationDestination(isPresented:destination:)` (iOS 16) and
|
|
2
|
+
/// `navigationDestination(item:destination:)` (iOS 17): a destination shown
|
|
3
|
+
/// while a binding says so. The runtime pushes only screens a link or a path
|
|
4
|
+
/// names, so here the destination is presented as a sheet, in a navigation
|
|
5
|
+
/// stack of its own (an approximation: it slides up instead of in, and is
|
|
6
|
+
/// dismissed by swiping it down or with a Back button in its bar). Dismissing
|
|
7
|
+
/// it sets `isPresented` to false, or `item` to nil, as popping does on iOS.
|
|
8
|
+
nonisolated extension View {
|
|
9
|
+
@MainActor
|
|
10
|
+
public func navigationDestination<V: View>(isPresented: Binding<Bool>, @ViewBuilder destination: () -> V) -> some View {
|
|
11
|
+
sheet(isPresented: isPresented) {
|
|
12
|
+
_PresentedDestination(isPresented: isPresented) { destination() }
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
@MainActor
|
|
17
|
+
public func navigationDestination<D: Hashable, C: View>(item: Binding<D?>,
|
|
18
|
+
@ViewBuilder destination: @escaping (D) -> C) -> some View {
|
|
19
|
+
let isPresented = Binding<Bool>(
|
|
20
|
+
get: { item.wrappedValue != nil },
|
|
21
|
+
set: { if !$0 { item.wrappedValue = nil } }
|
|
22
|
+
)
|
|
23
|
+
return sheet(isPresented: isPresented) {
|
|
24
|
+
_PresentedDestination(isPresented: isPresented) {
|
|
25
|
+
if let value = item.wrappedValue { destination(value) }
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// A presented destination: its own stack with a Back button.
|
|
32
|
+
struct _PresentedDestination<Content: View>: View {
|
|
33
|
+
let isPresented: Binding<Bool>
|
|
34
|
+
let content: Content
|
|
35
|
+
|
|
36
|
+
init(isPresented: Binding<Bool>, @ViewBuilder content: () -> Content) {
|
|
37
|
+
self.isPresented = isPresented
|
|
38
|
+
self.content = content()
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var body: some View {
|
|
42
|
+
NavigationStack {
|
|
43
|
+
content
|
|
44
|
+
.toolbar {
|
|
45
|
+
ToolbarItem(placement: .topBarLeading) {
|
|
46
|
+
Button {
|
|
47
|
+
isPresented.wrappedValue = false
|
|
48
|
+
} label: {
|
|
49
|
+
Label("Back", systemImage: "chevron.backward")
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|