@swiftbrowser/swift 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +200 -9
- package/README.md +7 -9
- 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 +0 -4
- 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/{_FoundationCommon → FoundationBridge}/Bundle.swift +41 -4
- 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 +24 -72
- 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/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 +6 -1
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/{_FoundationCommon → FoundationBridge}/UserDefaults.swift +17 -4
- 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 +55 -6
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +1 -1
- package/Sources/SwiftUI/API/AlignmentGuides.swift +68 -0
- package/Sources/SwiftUI/API/Animation.swift +37 -5
- package/Sources/SwiftUI/API/App.swift +31 -1
- 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 +104 -28
- 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 +59 -27
- package/Sources/SwiftUI/API/CustomLayout.swift +49 -10
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +1 -1
- package/Sources/SwiftUI/API/EditMode.swift +25 -82
- package/Sources/SwiftUI/API/Effects.swift +125 -10
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +100 -9
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +11 -3
- package/Sources/SwiftUI/API/Gauge.swift +26 -10
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +13 -2
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +1 -1
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +1 -1
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +13 -6
- package/Sources/SwiftUI/API/Layout.swift +71 -12
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +61 -6
- package/Sources/SwiftUI/API/Menu.swift +8 -1
- package/Sources/SwiftUI/API/Modifiers.swift +88 -12
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +24 -9
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +16 -2
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +48 -31
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +14 -4
- 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 +17 -4
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +168 -39
- package/Sources/SwiftUI/API/Publishers.swift +4 -4
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +3 -2
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +3 -3
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +86 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +187 -8
- 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 +18 -1
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -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 +148 -4
- package/Sources/SwiftUI/API/Tasks.swift +2 -2
- 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/Toolbar.swift +52 -16
- 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 +46 -2
- package/Sources/SwiftUI/API/ViewModifier.swift +4 -1
- package/Sources/SwiftUI/API/VisualEffect.swift +74 -1
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +7 -1
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +17 -3
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Localization/Localization.swift +524 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +2 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +37 -1
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +76 -4
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +58 -12
- package/Sources/SwiftUI/Runtime/Reconciler.swift +10 -1
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +977 -198
- 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 +1 -1
- package/index.mjs +2 -2
- package/manifest.d.mts +2 -0
- package/manifest.mjs +41 -0
- package/package.json +5 -3
- package/sync-sources.mjs +21 -7
- package/Sources/FoundationLite/Common.swift +0 -3
- package/Sources/FoundationLite/FoundationLite.swift +0 -171
- package/Sources/FoundationLite/Interaction.swift +0 -146
- package/Sources/FoundationLite/Timer.swift +0 -48
- package/Sources/_FoundationCommon/_FoundationCommon.swift +0 -10
|
@@ -13,6 +13,7 @@ public struct Menu<Label: View, Content: View> {
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
extension Menu where Label == Text {
|
|
16
|
+
@_disfavoredOverload
|
|
16
17
|
public init<S: StringProtocol>(_ title: S, @ViewBuilder content: () -> Content) {
|
|
17
18
|
self.label = Text(title)
|
|
18
19
|
self.content = content()
|
|
@@ -20,6 +21,7 @@ extension Menu where Label == Text {
|
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
extension Menu where Label == SwiftUI.Label<Text, Image> {
|
|
24
|
+
@_disfavoredOverload
|
|
23
25
|
public init<S: StringProtocol>(_ title: S, systemImage: String, @ViewBuilder content: () -> Content) {
|
|
24
26
|
self.label = SwiftUI.Label(String(title), systemImage: systemImage)
|
|
25
27
|
self.content = content()
|
|
@@ -39,13 +41,18 @@ public struct ButtonMenuStyle: MenuStyle { public init() {} }
|
|
|
39
41
|
extension MenuStyle where Self == DefaultMenuStyle {
|
|
40
42
|
public static var automatic: DefaultMenuStyle { DefaultMenuStyle() }
|
|
41
43
|
}
|
|
44
|
+
/// A menu whose label is a borderless button (iOS 14's style, deprecated); drawn as the default.
|
|
45
|
+
public struct BorderlessButtonMenuStyle: MenuStyle { public init() {} }
|
|
46
|
+
extension MenuStyle where Self == BorderlessButtonMenuStyle {
|
|
47
|
+
public static var borderlessButton: BorderlessButtonMenuStyle { BorderlessButtonMenuStyle() }
|
|
48
|
+
}
|
|
42
49
|
extension MenuStyle where Self == ButtonMenuStyle {
|
|
43
50
|
public static var button: ButtonMenuStyle { ButtonMenuStyle() }
|
|
44
51
|
}
|
|
45
52
|
|
|
46
53
|
public enum MenuIndicatorVisibility: Hashable, Sendable { case automatic, visible, hidden }
|
|
47
54
|
|
|
48
|
-
extension View {
|
|
55
|
+
nonisolated extension View {
|
|
49
56
|
public func menuStyle<S: MenuStyle>(_ style: S) -> some View { self }
|
|
50
57
|
public func menuIndicator(_ visibility: MenuIndicatorVisibility) -> some View { self }
|
|
51
58
|
}
|
|
@@ -37,6 +37,10 @@ struct _Style: Equatable {
|
|
|
37
37
|
var background: (any ShapeStyle)?
|
|
38
38
|
var frame: Frame?
|
|
39
39
|
var cornerRadius: CGFloat?
|
|
40
|
+
/// `.clipShape(.containerRelative)`: clipped to the container's corners.
|
|
41
|
+
var clipsToContainerShape = false
|
|
42
|
+
/// `.background(_:)`: painted in the container's shape (`.containerShape`).
|
|
43
|
+
var backgroundInContainerShape = false
|
|
40
44
|
var opacity: Double?
|
|
41
45
|
var disabled: Bool?
|
|
42
46
|
var layoutPriority: Double?
|
|
@@ -88,9 +92,31 @@ public struct _StyledView<Content: View> {
|
|
|
88
92
|
let style: _Style
|
|
89
93
|
}
|
|
90
94
|
extension _StyledView: _PrimitiveView {}
|
|
95
|
+
extension _StyledView: _EnvironmentModifying {
|
|
96
|
+
/// A font with a text style or a size is the environment's `font` below
|
|
97
|
+
/// (a weight or design alone changes the font the page draws, not that).
|
|
98
|
+
func _apply(to environment: inout EnvironmentValues) {
|
|
99
|
+
if let font = style.font, font.textStyle != nil || font.size != nil { environment.font = font }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
91
102
|
extension _StyledView: _HostView {
|
|
92
103
|
var _kind: String { "styled" }
|
|
93
|
-
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
104
|
+
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
105
|
+
var resolved = style
|
|
106
|
+
// `.background()` paints the background style in context, which
|
|
107
|
+
// `.backgroundStyle(_:)` sets (the system background by default).
|
|
108
|
+
if style.background is BackgroundStyle, let contextual = environment._backgroundStyle {
|
|
109
|
+
resolved.background = contextual
|
|
110
|
+
}
|
|
111
|
+
// The container's shape (`.containerShape`): a background is painted
|
|
112
|
+
// in it, and `.clipShape(.containerRelative)` clips to it.
|
|
113
|
+
let container = environment._containerShapeRadius
|
|
114
|
+
if style.clipsToContainerShape { resolved.cornerRadius = container ?? 0 }
|
|
115
|
+
if style.backgroundInContainerShape, let container, container > 0 {
|
|
116
|
+
resolved.extras["backgroundCornerRadius"] = .number(container)
|
|
117
|
+
}
|
|
118
|
+
return .object(["style": resolved._json])
|
|
119
|
+
}
|
|
94
120
|
var _content: [any View] { [content] }
|
|
95
121
|
}
|
|
96
122
|
|
|
@@ -104,21 +130,40 @@ public struct _StyledGroup<Content: View> {
|
|
|
104
130
|
extension _StyledGroup: _PrimitiveView {}
|
|
105
131
|
extension _StyledGroup: _GroupView {
|
|
106
132
|
var _children: [any View] {
|
|
107
|
-
|
|
108
|
-
|
|
133
|
+
// A modifier on a `Section` styles its rows (the section stays a direct
|
|
134
|
+
// child of its list, which is how the layout recognizes it).
|
|
135
|
+
if let section = content as? any _SectionView { return [section._stylingRows(style)] }
|
|
136
|
+
if let group = content as? any _GroupView, group._spreads {
|
|
137
|
+
let target = _spreadTarget(group)
|
|
138
|
+
var children = target._children
|
|
139
|
+
// A view of the group that is absent (`if locked { badge }` when not
|
|
140
|
+
// locked) gets no styled element: an empty one would take a stack's
|
|
141
|
+
// spacing. Keyed children keep their places.
|
|
142
|
+
if target._keys == nil { children.removeAll(where: _rendersNothing) }
|
|
143
|
+
return children.map { _StyledView(content: AnyView($0), style: style) }
|
|
109
144
|
}
|
|
110
145
|
return [_StyledView(content: content, style: style)]
|
|
111
146
|
}
|
|
112
147
|
|
|
113
148
|
var _keys: [AnyHashable]? {
|
|
114
|
-
if let group = content as? any _GroupView, group.
|
|
115
|
-
return group._keys
|
|
149
|
+
if let group = content as? any _GroupView, group._spreads {
|
|
150
|
+
return _spreadTarget(group)._keys
|
|
116
151
|
}
|
|
117
152
|
return nil
|
|
118
153
|
}
|
|
154
|
+
|
|
155
|
+
// Asked of the content alone: a chain of modifiers asks each level once,
|
|
156
|
+
// where computing the content's children and keys at every level made
|
|
157
|
+
// the cost double with each modifier.
|
|
158
|
+
var _spreads: Bool {
|
|
159
|
+
guard let group = content as? any _GroupView, group._spreads else { return false }
|
|
160
|
+
// A styled section is one child; it keeps the section's keys.
|
|
161
|
+
if content is any _SectionView { return group._keys != nil }
|
|
162
|
+
return true
|
|
163
|
+
}
|
|
119
164
|
}
|
|
120
165
|
|
|
121
|
-
extension View {
|
|
166
|
+
nonisolated extension View {
|
|
122
167
|
func _styled(_ configure: (inout _Style) -> Void) -> _StyledGroup<Self> {
|
|
123
168
|
var style = _Style()
|
|
124
169
|
configure(&style)
|
|
@@ -139,6 +184,16 @@ extension View {
|
|
|
139
184
|
}
|
|
140
185
|
}
|
|
141
186
|
|
|
187
|
+
/// The padding a scene's content takes from its edges: 16 points on
|
|
188
|
+
/// iPhone, as `.padding()`.
|
|
189
|
+
public func scenePadding(_ edges: Edge.Set = .all) -> some View {
|
|
190
|
+
padding(edges, 16)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
public func scenePadding(_ padding: ScenePadding, edges: Edge.Set = .all) -> some View {
|
|
194
|
+
self.padding(edges, 16)
|
|
195
|
+
}
|
|
196
|
+
|
|
142
197
|
public func padding(_ length: CGFloat) -> some View {
|
|
143
198
|
padding(.all, length)
|
|
144
199
|
}
|
|
@@ -182,13 +237,20 @@ extension View {
|
|
|
182
237
|
}
|
|
183
238
|
|
|
184
239
|
/// A paint behind the view: a color, gradient or material filling its box.
|
|
240
|
+
/// Painted in the container's shape (`.containerShape`), else the box, as in SwiftUI.
|
|
185
241
|
public func background<S: ShapeStyle>(_ style: S, ignoresSafeAreaEdges edges: Edge.Set = .all) -> some View {
|
|
186
|
-
_styled {
|
|
242
|
+
_styled {
|
|
243
|
+
$0.background = style
|
|
244
|
+
$0.backgroundInContainerShape = true
|
|
245
|
+
}
|
|
187
246
|
}
|
|
188
247
|
|
|
189
248
|
/// The system background color behind the view.
|
|
190
249
|
public func background(ignoresSafeAreaEdges edges: Edge.Set = .all) -> some View {
|
|
191
|
-
_styled {
|
|
250
|
+
_styled {
|
|
251
|
+
$0.background = BackgroundStyle()
|
|
252
|
+
$0.backgroundInContainerShape = true
|
|
253
|
+
}
|
|
192
254
|
}
|
|
193
255
|
|
|
194
256
|
public func opacity(_ opacity: Double) -> some View {
|
|
@@ -227,10 +289,15 @@ extension View {
|
|
|
227
289
|
|
|
228
290
|
public func scaledToFill() -> some View { aspectRatio(nil, contentMode: .fill) }
|
|
229
291
|
|
|
230
|
-
///
|
|
231
|
-
///
|
|
232
|
-
|
|
292
|
+
/// Names the view for `ScrollViewProxy.scrollTo(_:anchor:)` inside a
|
|
293
|
+
/// `ScrollViewReader` (ScrollViewReader.swift); elsewhere it adds nothing
|
|
294
|
+
/// to the rendered tree. A changed id does not reset the view's state.
|
|
295
|
+
public func id<ID: Hashable>(_ id: ID) -> some View {
|
|
296
|
+
_IdentifiedView(content: self, id: AnyHashable(id))
|
|
297
|
+
}
|
|
233
298
|
|
|
299
|
+
/// A compositing hint; accepted for source compatibility and currently
|
|
300
|
+
/// without effect on the rendered tree.
|
|
234
301
|
public func compositingGroup() -> some View { self }
|
|
235
302
|
|
|
236
303
|
public func cornerRadius(_ radius: CGFloat, antialiased: Bool = true) -> some View {
|
|
@@ -238,6 +305,15 @@ extension View {
|
|
|
238
305
|
}
|
|
239
306
|
|
|
240
307
|
public func clipShape<S: Shape>(_ shape: S) -> some View {
|
|
241
|
-
_styled {
|
|
308
|
+
_styled {
|
|
309
|
+
$0.cornerRadius = shape._cornerRadius
|
|
310
|
+
$0.clipsToContainerShape = shape is ContainerRelativeShape
|
|
311
|
+
}
|
|
242
312
|
}
|
|
243
313
|
}
|
|
314
|
+
|
|
315
|
+
/// The kind of scene padding (`.minimum`); iPhone has one.
|
|
316
|
+
public struct ScenePadding: Equatable, Sendable {
|
|
317
|
+
public static let minimum = ScenePadding()
|
|
318
|
+
public static let navigationBar = ScenePadding()
|
|
319
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Smaller modifiers Ice Cubes uses.
|
|
2
|
+
//
|
|
3
|
+
// Drawn: `.border(_:width:)` (a stroke inside the view's box, as an
|
|
4
|
+
// overlay), `.edgesIgnoringSafeArea(_:)` (`.ignoresSafeArea(edges:)`),
|
|
5
|
+
// `.safeAreaBar(edge:…)` (iOS 26; as `.safeAreaInset`, see
|
|
6
|
+
// ScrollModifiers.swift) and `.scrollPosition(id:anchor:)` (setting the
|
|
7
|
+
// binding scrolls to the view with that `.id`, as `ScrollViewProxy.scrollTo`;
|
|
8
|
+
// scrolling by hand does not update the binding).
|
|
9
|
+
//
|
|
10
|
+
// Accepted without effect: `.buttonBorderShape(_:)` (bordered buttons stay
|
|
11
|
+
// capsules), `.truncationMode(_:)` (text truncates at its tail),
|
|
12
|
+
// `.lineSpacing(_:)` (lines keep the font's line height),
|
|
13
|
+
// `.controlGroupStyle(_:)`, `.listRowHoverEffectDisabled(_:)`,
|
|
14
|
+
// `.searchScopes(_:scopes:)` (no scope bar is drawn under the search field)
|
|
15
|
+
// and, on toolbar items, `.sharedBackgroundVisibility(_:)` and
|
|
16
|
+
// `.matchedTransitionSource(id:in:)`.
|
|
17
|
+
|
|
18
|
+
public struct ButtonBorderShape: Equatable, Sendable {
|
|
19
|
+
let name: String
|
|
20
|
+
public static let automatic = ButtonBorderShape(name: "automatic")
|
|
21
|
+
public static let capsule = ButtonBorderShape(name: "capsule")
|
|
22
|
+
public static let circle = ButtonBorderShape(name: "circle")
|
|
23
|
+
public static let roundedRectangle = ButtonBorderShape(name: "roundedRectangle")
|
|
24
|
+
public static func roundedRectangle(radius: CGFloat) -> ButtonBorderShape { .roundedRectangle }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public protocol ControlGroupStyle {}
|
|
28
|
+
public struct AutomaticControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
29
|
+
public struct MenuControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
30
|
+
public struct CompactMenuControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
31
|
+
public struct NavigationControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
32
|
+
public struct PaletteControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
33
|
+
extension ControlGroupStyle where Self == AutomaticControlGroupStyle {
|
|
34
|
+
public static var automatic: AutomaticControlGroupStyle { AutomaticControlGroupStyle() }
|
|
35
|
+
}
|
|
36
|
+
extension ControlGroupStyle where Self == MenuControlGroupStyle {
|
|
37
|
+
public static var menu: MenuControlGroupStyle { MenuControlGroupStyle() }
|
|
38
|
+
}
|
|
39
|
+
extension ControlGroupStyle where Self == CompactMenuControlGroupStyle {
|
|
40
|
+
public static var compactMenu: CompactMenuControlGroupStyle { CompactMenuControlGroupStyle() }
|
|
41
|
+
}
|
|
42
|
+
extension ControlGroupStyle where Self == NavigationControlGroupStyle {
|
|
43
|
+
public static var navigation: NavigationControlGroupStyle { NavigationControlGroupStyle() }
|
|
44
|
+
}
|
|
45
|
+
extension ControlGroupStyle where Self == PaletteControlGroupStyle {
|
|
46
|
+
public static var palette: PaletteControlGroupStyle { PaletteControlGroupStyle() }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// When a search's scope bar shows; accepted.
|
|
50
|
+
public struct SearchScopeActivation: Sendable {
|
|
51
|
+
let name: String
|
|
52
|
+
public static let automatic = SearchScopeActivation(name: "automatic")
|
|
53
|
+
public static let onTextEntry = SearchScopeActivation(name: "onTextEntry")
|
|
54
|
+
public static let onSearchPresentation = SearchScopeActivation(name: "onSearchPresentation")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
nonisolated extension View {
|
|
58
|
+
public func border<S: ShapeStyle>(_ content: S, width: CGFloat = 1) -> some View {
|
|
59
|
+
overlay { Rectangle().strokeBorder(content, lineWidth: width) }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View {
|
|
63
|
+
ignoresSafeArea(.all, edges: edges)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public func safeAreaBar<V: View>(edge: VerticalEdge, alignment: HorizontalAlignment = .center,
|
|
67
|
+
spacing: CGFloat? = nil, @ViewBuilder content: () -> V) -> some View {
|
|
68
|
+
safeAreaInset(edge: edge, alignment: alignment, spacing: spacing, content: content)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public func buttonBorderShape(_ shape: ButtonBorderShape) -> some View { self }
|
|
72
|
+
public func truncationMode(_ mode: Text.TruncationMode) -> some View { self }
|
|
73
|
+
public func lineSpacing(_ lineSpacing: CGFloat) -> some View { self }
|
|
74
|
+
public func controlGroupStyle<S: ControlGroupStyle>(_ style: S) -> some View { self }
|
|
75
|
+
public func listRowHoverEffectDisabled(_ disabled: Bool = true) -> some View { self }
|
|
76
|
+
|
|
77
|
+
public func searchScopes<V: Hashable, S: View>(_ scope: Binding<V>, @ViewBuilder scopes: () -> S) -> some View { self }
|
|
78
|
+
public func searchScopes<V: Hashable, S: View>(_ scope: Binding<V>, activation: SearchScopeActivation,
|
|
79
|
+
@ViewBuilder _ scopes: () -> S) -> some View { self }
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
extension View {
|
|
83
|
+
/// Scrolls to the view whose `.id` the binding holds whenever the binding
|
|
84
|
+
/// changes (see the top of this file).
|
|
85
|
+
public func scrollPosition<ID: Hashable>(id: Binding<ID?>, anchor: UnitPoint? = nil) -> some View {
|
|
86
|
+
ScrollViewReader { proxy in
|
|
87
|
+
self.onChange(of: id.wrappedValue) { _, target in
|
|
88
|
+
if let target { proxy.scrollTo(target, anchor: anchor) }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
extension ToolbarContent {
|
|
95
|
+
/// Accepted: toolbar items share the bar's background.
|
|
96
|
+
public nonisolated func sharedBackgroundVisibility(_ visibility: Visibility) -> Self { self }
|
|
97
|
+
|
|
98
|
+
/// Accepted (no zoom transitions on the page).
|
|
99
|
+
public nonisolated func matchedTransitionSource<ID: Hashable>(id: ID, in namespace: Namespace.ID) -> Self { self }
|
|
100
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// `@Namespace` and `.matchedGeometryEffect`. A namespace is an identifier
|
|
2
|
+
// that lasts as long as its view is mounted (its storage is a `State`), so
|
|
3
|
+
// code that passes it around or keys things by it (ButtonKit's triggers, Ice
|
|
4
|
+
// Cubes' media viewer) works. The page does not animate a view from one
|
|
5
|
+
// place to another, so `.matchedGeometryEffect` leaves the view as it is:
|
|
6
|
+
// the change happens without the shared-element animation.
|
|
7
|
+
|
|
8
|
+
/// An identifier for a group of matched views, stable while the view is mounted.
|
|
9
|
+
@propertyWrapper
|
|
10
|
+
public struct Namespace: DynamicProperty {
|
|
11
|
+
public struct ID: Hashable, Sendable {
|
|
12
|
+
let value: Int
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
nonisolated(unsafe) static var lastID = 0
|
|
16
|
+
let state: State<ID>
|
|
17
|
+
|
|
18
|
+
public init() {
|
|
19
|
+
Namespace.lastID += 1
|
|
20
|
+
state = State(wrappedValue: ID(value: Namespace.lastID))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public var wrappedValue: ID { state.wrappedValue }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
extension Namespace: _StateProperty {
|
|
27
|
+
var _box: any _AnyStateBox { state.box }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/// Which of a view's geometry `.matchedGeometryEffect` would match.
|
|
31
|
+
public struct MatchedGeometryProperties: OptionSet, Hashable, Sendable {
|
|
32
|
+
public let rawValue: UInt32
|
|
33
|
+
public init(rawValue: UInt32) { self.rawValue = rawValue }
|
|
34
|
+
public static let position = MatchedGeometryProperties(rawValue: 1)
|
|
35
|
+
public static let size = MatchedGeometryProperties(rawValue: 2)
|
|
36
|
+
public static let frame: MatchedGeometryProperties = [.position, .size]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
nonisolated extension View {
|
|
40
|
+
/// The view unchanged: the page has no shared-element animation.
|
|
41
|
+
public func matchedGeometryEffect<ID: Hashable>(id: ID, in namespace: Namespace.ID,
|
|
42
|
+
properties: MatchedGeometryProperties = .frame,
|
|
43
|
+
anchor: UnitPoint = .center, isSource: Bool = true) -> some View { self }
|
|
44
|
+
}
|
|
@@ -23,7 +23,7 @@ public struct NavigationPath: Equatable {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
protocol _NavigationStackView {
|
|
26
|
+
protocol _NavigationStackView: _TraitBearing {
|
|
27
27
|
var _root: any View { get }
|
|
28
28
|
var _pushedBox: _StateBox<[_PushedScreen]> { get }
|
|
29
29
|
/// Value-based path, when the stack was created with one.
|
|
@@ -87,7 +87,7 @@ extension _PathScreenValue: _GroupView {
|
|
|
87
87
|
var _children: [any View] { [] }
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
-
protocol _DestinationRegistering {
|
|
90
|
+
protocol _DestinationRegistering: _TraitBearing {
|
|
91
91
|
var _destinationType: ObjectIdentifier { get }
|
|
92
92
|
var _destinationTypeName: String { get }
|
|
93
93
|
func _destination(for value: Any) -> (any View)?
|
|
@@ -110,7 +110,7 @@ extension _DestinationView: _DestinationRegistering {
|
|
|
110
110
|
}
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
extension View {
|
|
113
|
+
nonisolated extension View {
|
|
114
114
|
/// Associates a destination view with values of `data`'s type pushed by
|
|
115
115
|
/// `NavigationLink(value:)` or appended to the stack's path.
|
|
116
116
|
public func navigationDestination<D: Hashable, C: View>(for data: D.Type,
|
|
@@ -119,7 +119,7 @@ extension View {
|
|
|
119
119
|
}
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
protocol _NavigationValueLinkView {
|
|
122
|
+
protocol _NavigationValueLinkView: _TraitBearing {
|
|
123
123
|
var _value: AnyHashable? { get }
|
|
124
124
|
}
|
|
125
125
|
|
|
@@ -156,7 +156,7 @@ extension _NavScreenView: _HostView {
|
|
|
156
156
|
var _content: [any View] { [content] }
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
protocol _NavigationLinkView {
|
|
159
|
+
protocol _NavigationLinkView: _TraitBearing {
|
|
160
160
|
var _destination: any View { get }
|
|
161
161
|
}
|
|
162
162
|
|
|
@@ -180,12 +180,26 @@ public struct NavigationLink<Label: View, Destination: View> {
|
|
|
180
180
|
}
|
|
181
181
|
|
|
182
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
|
|
183
196
|
public init<S: StringProtocol>(_ title: S, @ViewBuilder destination: () -> Destination) {
|
|
184
197
|
self.destination = destination()
|
|
185
198
|
self.value = nil
|
|
186
199
|
self.label = Text(title)
|
|
187
200
|
}
|
|
188
201
|
|
|
202
|
+
@_disfavoredOverload
|
|
189
203
|
public init<S: StringProtocol>(_ title: S, destination: Destination) {
|
|
190
204
|
self.destination = destination
|
|
191
205
|
self.value = nil
|
|
@@ -237,7 +251,7 @@ extension NavigationSplitViewStyle where Self == ProminentDetailNavigationSplitV
|
|
|
237
251
|
public static var prominentDetail: ProminentDetailNavigationSplitViewStyle { ProminentDetailNavigationSplitViewStyle() }
|
|
238
252
|
}
|
|
239
253
|
|
|
240
|
-
extension View {
|
|
254
|
+
nonisolated extension View {
|
|
241
255
|
public func navigationSplitViewColumnWidth(_ width: CGFloat) -> some View { self }
|
|
242
256
|
public func navigationSplitViewColumnWidth(min: CGFloat? = nil, ideal: CGFloat, max: CGFloat? = nil) -> some View { self }
|
|
243
257
|
public func navigationSplitViewStyle<S: NavigationSplitViewStyle>(_ style: S) -> some View { self }
|
|
@@ -247,7 +261,7 @@ extension View {
|
|
|
247
261
|
/// renders a `navsplit` of two stacks (regular) or one stack rooted at the
|
|
248
262
|
/// sidebar that pushes the detail while the sidebar's list selection is set
|
|
249
263
|
/// (compact). The sidebar's `List(selection:)` is found as it is reconciled.
|
|
250
|
-
protocol _NavigationSplitHost {
|
|
264
|
+
protocol _NavigationSplitHost: _TraitBearing {
|
|
251
265
|
var _sidebar: any View { get }
|
|
252
266
|
var _detail: any View { get }
|
|
253
267
|
/// Screens pushed from the compact detail (links inside it).
|
|
@@ -332,7 +346,7 @@ public enum NavigationBarItem {
|
|
|
332
346
|
}
|
|
333
347
|
}
|
|
334
348
|
|
|
335
|
-
protocol _NavigationTitleModifying {
|
|
349
|
+
protocol _NavigationTitleModifying: _TraitBearing {
|
|
336
350
|
var _title: String? { get }
|
|
337
351
|
var _displayMode: String? { get }
|
|
338
352
|
}
|
|
@@ -351,7 +365,8 @@ extension _NavigationTitleView: _NavigationTitleModifying {
|
|
|
351
365
|
var _displayMode: String? { displayMode }
|
|
352
366
|
}
|
|
353
367
|
|
|
354
|
-
extension View {
|
|
368
|
+
nonisolated extension View {
|
|
369
|
+
@_disfavoredOverload
|
|
355
370
|
public func navigationTitle<S: StringProtocol>(_ title: S) -> some View {
|
|
356
371
|
_NavigationTitleView(content: self, title: String(title), displayMode: nil)
|
|
357
372
|
}
|
|
@@ -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
|
+
}
|
|
@@ -72,6 +72,20 @@ public final class ObservableObjectPublisher {
|
|
|
72
72
|
subscribers[ObjectIdentifier(owner)] = (_WeakOwner(owner), onChange)
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
/// Combine's subscriptions (Sources/Combine/ObjectWillChange.swift):
|
|
76
|
+
/// `onChange` runs on each `send()` while the returned token is alive
|
|
77
|
+
/// and not unsubscribed.
|
|
78
|
+
public func _subscribe(_ onChange: @escaping () -> Void) -> AnyObject {
|
|
79
|
+
let token = _WeakOwner(self)
|
|
80
|
+
_subscribe(owner: token, onChange)
|
|
81
|
+
return token
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/// Ends a subscription `_subscribe(_:)` made.
|
|
85
|
+
public func _unsubscribe(_ token: AnyObject) {
|
|
86
|
+
subscribers[ObjectIdentifier(token)] = nil
|
|
87
|
+
}
|
|
88
|
+
|
|
75
89
|
static func _publisher(for object: AnyObject) -> ObservableObjectPublisher {
|
|
76
90
|
let id = ObjectIdentifier(object)
|
|
77
91
|
if let existing = registry[id], existing._owner === object { return existing }
|
|
@@ -118,7 +132,7 @@ public struct Published<Value> {
|
|
|
118
132
|
|
|
119
133
|
/// Views expose properties that observe an `ObservableObject` through this
|
|
120
134
|
/// protocol; the runtime finds them by reflection and wires invalidation.
|
|
121
|
-
protocol _ObservingProperty {
|
|
135
|
+
protocol _ObservingProperty: _RuntimeProperty {
|
|
122
136
|
/// Subscribes `onChange` to the observed object on behalf of `owner`
|
|
123
137
|
/// (the mounted view), see `ObservableObjectPublisher._subscribe`.
|
|
124
138
|
func _observe(owner: AnyObject, _ onChange: @escaping () -> Void)
|
|
@@ -271,7 +285,7 @@ extension EnvironmentObject: _ObservingProperty {
|
|
|
271
285
|
}
|
|
272
286
|
}
|
|
273
287
|
|
|
274
|
-
extension View {
|
|
288
|
+
nonisolated extension View {
|
|
275
289
|
/// Supplies `object` to every `EnvironmentObject` of its type in the subtree.
|
|
276
290
|
public func environmentObject<T: ObservableObject>(_ object: T) -> some View {
|
|
277
291
|
_EnvironmentView(content: self) { $0._setObject(object) }
|