@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
|
@@ -67,22 +67,38 @@ public struct AccessibilityChildBehavior: Hashable, Sendable {
|
|
|
67
67
|
public static let combine = AccessibilityChildBehavior(name: "combine")
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
extension View {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
public func accessibilityLabel(_
|
|
70
|
+
nonisolated extension View {
|
|
71
|
+
/// The label is not drawn; headless event scripts can address the
|
|
72
|
+
/// element by it (`tap:"Wrong"`, docs/ops-protocol.md).
|
|
73
|
+
public func accessibilityLabel(_ label: Text) -> some View {
|
|
74
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: label.content))
|
|
75
|
+
}
|
|
76
|
+
@_disfavoredOverload
|
|
77
|
+
public func accessibilityLabel<S: StringProtocol>(_ label: S) -> some View {
|
|
78
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: String(label)))
|
|
79
|
+
}
|
|
80
|
+
public func accessibilityLabel(_ labelKey: LocalizedStringKey) -> some View {
|
|
81
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(label: labelKey.key))
|
|
82
|
+
}
|
|
83
|
+
/// Not drawn; headless event scripts can address the element by it
|
|
84
|
+
/// (`tap:@save`, docs/ops-protocol.md), as UI tests do on iOS.
|
|
85
|
+
public func accessibilityIdentifier(_ identifier: String) -> some View {
|
|
86
|
+
_AccessibilityView(content: self, mark: _AccessibilityMark(identifier: identifier))
|
|
87
|
+
}
|
|
74
88
|
public func accessibilityHint(_ hint: Text) -> some View { self }
|
|
89
|
+
@_disfavoredOverload
|
|
75
90
|
public func accessibilityHint<S: StringProtocol>(_ hint: S) -> some View { self }
|
|
76
91
|
public func accessibilityHint(_ hintKey: LocalizedStringKey) -> some View { self }
|
|
77
92
|
public func accessibilityValue(_ value: Text) -> some View { self }
|
|
93
|
+
@_disfavoredOverload
|
|
78
94
|
public func accessibilityValue<S: StringProtocol>(_ value: S) -> some View { self }
|
|
79
95
|
public func accessibilityValue(_ valueKey: LocalizedStringKey) -> some View { self }
|
|
80
96
|
public func accessibilityHidden(_ hidden: Bool) -> some View { self }
|
|
81
97
|
public func accessibilityAddTraits(_ traits: AccessibilityTraits) -> some View { self }
|
|
82
98
|
public func accessibilityRemoveTraits(_ traits: AccessibilityTraits) -> some View { self }
|
|
83
|
-
public func accessibilityIdentifier(_ identifier: String) -> some View { self }
|
|
84
99
|
public func accessibilityElement(children: AccessibilityChildBehavior = .ignore) -> some View { self }
|
|
85
100
|
public func accessibilitySortPriority(_ sortPriority: Double) -> some View { self }
|
|
101
|
+
public func accessibilityRespondsToUserInteraction(_ respondsToUserInteraction: Bool = true) -> some View { self }
|
|
86
102
|
public func accessibilityInputLabels(_ inputLabels: [Text]) -> some View { self }
|
|
87
103
|
public func accessibilityInputLabels<S: StringProtocol>(_ inputLabels: [S]) -> some View { self }
|
|
88
104
|
public func accessibilityInputLabels(_ inputLabelKeys: [LocalizedStringKey]) -> some View { self }
|
|
@@ -124,9 +140,42 @@ public struct TextInputAutocapitalization: Hashable, Sendable {
|
|
|
124
140
|
public static let characters = TextInputAutocapitalization(name: "characters")
|
|
125
141
|
}
|
|
126
142
|
|
|
127
|
-
extension View {
|
|
143
|
+
nonisolated extension View {
|
|
128
144
|
public func keyboardType(_ type: UIKeyboardType) -> some View { self }
|
|
129
145
|
public func textContentType(_ textContentType: UITextContentType?) -> some View { self }
|
|
130
146
|
public func autocorrectionDisabled(_ disable: Bool = true) -> some View { self }
|
|
147
|
+
/// The deprecated spelling of `autocorrectionDisabled(_:)`.
|
|
148
|
+
public func disableAutocorrection(_ disable: Bool?) -> some View { self }
|
|
131
149
|
public func textInputAutocapitalization(_ autocapitalization: TextInputAutocapitalization?) -> some View { self }
|
|
132
150
|
}
|
|
151
|
+
|
|
152
|
+
// MARK: - Labels and identifiers kept for event scripts
|
|
153
|
+
|
|
154
|
+
/// An `accessibilityLabel` / `accessibilityIdentifier` carried by the
|
|
155
|
+
/// elements a view produces. It is not sent to the renderer: headless event
|
|
156
|
+
/// scripts resolve selectors against it (Sources/SwiftUI/Runtime/Replay.swift).
|
|
157
|
+
struct _AccessibilityMark: Equatable {
|
|
158
|
+
var label: String?
|
|
159
|
+
var identifier: String?
|
|
160
|
+
|
|
161
|
+
/// Fills what `self` lacks from an outer modifier's mark; the innermost wins.
|
|
162
|
+
func merged(with outer: _AccessibilityMark) -> _AccessibilityMark {
|
|
163
|
+
_AccessibilityMark(label: label ?? outer.label, identifier: identifier ?? outer.identifier)
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
protocol _AccessibilityProviding: _TraitBearing {
|
|
168
|
+
var _accessibility: _AccessibilityMark { get }
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
struct _AccessibilityView<Content: View> {
|
|
172
|
+
let content: Content
|
|
173
|
+
let mark: _AccessibilityMark
|
|
174
|
+
}
|
|
175
|
+
extension _AccessibilityView: _PrimitiveView {}
|
|
176
|
+
extension _AccessibilityView: _GroupView {
|
|
177
|
+
var _children: [any View] { [content] }
|
|
178
|
+
}
|
|
179
|
+
extension _AccessibilityView: _AccessibilityProviding {
|
|
180
|
+
var _accessibility: _AccessibilityMark { mark }
|
|
181
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// More accessibility modifiers. The page has no assistive-technology bridge
|
|
2
|
+
// (see Accessibility.swift): a label still names the element for event
|
|
3
|
+
// scripts; actions, representations and the pre-iOS 14 `accessibility(…)`
|
|
4
|
+
// spellings of the other modifiers are accepted and change nothing.
|
|
5
|
+
|
|
6
|
+
public struct AccessibilityActionKind: Hashable, Sendable {
|
|
7
|
+
let name: String
|
|
8
|
+
public static let `default` = AccessibilityActionKind(name: "default")
|
|
9
|
+
public static let escape = AccessibilityActionKind(name: "escape")
|
|
10
|
+
public static let magicTap = AccessibilityActionKind(name: "magicTap")
|
|
11
|
+
public init(named name: Text) { self.name = name.content }
|
|
12
|
+
init(name: String) { self.name = name }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
nonisolated extension View {
|
|
16
|
+
public func accessibilityRepresentation<V: View>(@ViewBuilder representation: () -> V) -> some View { self }
|
|
17
|
+
|
|
18
|
+
public func accessibilityAction(_ actionKind: AccessibilityActionKind = .default,
|
|
19
|
+
_ handler: @escaping () -> Void) -> some View { self }
|
|
20
|
+
public func accessibilityAction(named name: Text, _ handler: @escaping () -> Void) -> some View { self }
|
|
21
|
+
public func accessibilityAction(named nameKey: LocalizedStringKey, _ handler: @escaping () -> Void) -> some View { self }
|
|
22
|
+
@_disfavoredOverload
|
|
23
|
+
public func accessibilityAction<S: StringProtocol>(named name: S, _ handler: @escaping () -> Void) -> some View { self }
|
|
24
|
+
|
|
25
|
+
/// The pre-iOS 14 spellings.
|
|
26
|
+
public func accessibility(label: Text) -> some View { accessibilityLabel(label) }
|
|
27
|
+
public func accessibility(hint: Text) -> some View { self }
|
|
28
|
+
public func accessibility(value: Text) -> some View { self }
|
|
29
|
+
public func accessibility(hidden: Bool) -> some View { self }
|
|
30
|
+
public func accessibility(addTraits traits: AccessibilityTraits) -> some View { self }
|
|
31
|
+
public func accessibility(removeTraits traits: AccessibilityTraits) -> some View { self }
|
|
32
|
+
public func accessibility(identifier: String) -> some View { accessibilityIdentifier(identifier) }
|
|
33
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/// `@AccessibilityFocusState` and `.accessibilityFocused`: where VoiceOver's
|
|
2
|
+
/// focus is. The page has no bridge to the browser's screen readers for the
|
|
3
|
+
/// app to move their focus, so the state is kept as the app sets it (a
|
|
4
|
+
/// `State`, like `@FocusState`'s) and moves nowhere on its own.
|
|
5
|
+
@propertyWrapper
|
|
6
|
+
public struct AccessibilityFocusState<Value: Hashable>: DynamicProperty {
|
|
7
|
+
let state: State<Value>
|
|
8
|
+
|
|
9
|
+
public init() where Value == Bool {
|
|
10
|
+
state = State(wrappedValue: false)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public init<T: Hashable>() where Value == T? {
|
|
14
|
+
state = State(wrappedValue: nil)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public init(for technologies: AccessibilityTechnologies) where Value == Bool {
|
|
18
|
+
state = State(wrappedValue: false)
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public init<T: Hashable>(for technologies: AccessibilityTechnologies) where Value == T? {
|
|
22
|
+
state = State(wrappedValue: nil)
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public var wrappedValue: Value {
|
|
26
|
+
get { state.wrappedValue }
|
|
27
|
+
nonmutating set { state.wrappedValue = newValue }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public var projectedValue: AccessibilityFocusState<Value>.Binding { Binding(state: state) }
|
|
31
|
+
|
|
32
|
+
/// `$focus`: what `.accessibilityFocused` takes.
|
|
33
|
+
@propertyWrapper
|
|
34
|
+
public struct Binding {
|
|
35
|
+
let state: State<Value>
|
|
36
|
+
|
|
37
|
+
public var wrappedValue: Value {
|
|
38
|
+
get { state.wrappedValue }
|
|
39
|
+
nonmutating set { state.wrappedValue = newValue }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public var projectedValue: AccessibilityFocusState<Value>.Binding { self }
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
extension AccessibilityFocusState: _StateProperty {
|
|
47
|
+
var _box: any _AnyStateBox { state.box }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// The assistive technologies a focus state follows.
|
|
51
|
+
public struct AccessibilityTechnologies: OptionSet, Hashable, Sendable {
|
|
52
|
+
public let rawValue: Int
|
|
53
|
+
public init(rawValue: Int) { self.rawValue = rawValue }
|
|
54
|
+
public static let voiceOver = AccessibilityTechnologies(rawValue: 1 << 0)
|
|
55
|
+
public static let switchControl = AccessibilityTechnologies(rawValue: 1 << 1)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
nonisolated extension View {
|
|
59
|
+
/// Accepted: no screen reader's focus is moved (see `AccessibilityFocusState`).
|
|
60
|
+
public func accessibilityFocused(_ binding: AccessibilityFocusState<Bool>.Binding) -> some View { self }
|
|
61
|
+
public func accessibilityFocused<Value: Hashable>(_ binding: AccessibilityFocusState<Value>.Binding,
|
|
62
|
+
equals value: Value) -> some View { self }
|
|
63
|
+
}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
/// a tap on the alert's own id dismisses without an action.
|
|
6
6
|
|
|
7
7
|
/// Views that present an alert or a confirmation dialog.
|
|
8
|
-
protocol _AlertPresenting {
|
|
8
|
+
protocol _AlertPresenting: _TraitBearing {
|
|
9
9
|
var _isPresented: Binding<Bool> { get }
|
|
10
10
|
var _base: any View { get }
|
|
11
11
|
var _alertActions: any View { get }
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Custom alignments (`AlignmentID`) and `.alignmentGuide`. The page lays
|
|
2
|
+
// out stacks with the built-in guides only, so a custom alignment aligns like
|
|
3
|
+
// the built-in one its default value matches (an `AlignmentID` whose
|
|
4
|
+
// `defaultValue` is the height is `.bottom`).
|
|
5
|
+
//
|
|
6
|
+
// `.alignmentGuide(g) { d in … }` moves the view's guide `g`: where a stack,
|
|
7
|
+
// a `ZStack`, a frame or an overlay aligns the view by `g`, the view's guide
|
|
8
|
+
// value, not the default (0, half or all of its width or height), meets the
|
|
9
|
+
// container's. The page knows the view's size, Swift knows the closure: the
|
|
10
|
+
// closure is evaluated at three sizes and sent as `a + b·width + c·height`,
|
|
11
|
+
// which is exact for the guides apps write (`d[.trailing] + 4`,
|
|
12
|
+
// `d.height / 2`, `-10`) and a straight-line fit for any other. The list-row
|
|
13
|
+
// separator guides are accepted and change nothing.
|
|
14
|
+
|
|
15
|
+
public protocol AlignmentID {
|
|
16
|
+
static func defaultValue(in context: ViewDimensions) -> CGFloat
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
extension HorizontalAlignment {
|
|
20
|
+
/// The built-in guide `id`'s default value matches: leading at 0, trailing at the width, else center.
|
|
21
|
+
public init(_ id: AlignmentID.Type) {
|
|
22
|
+
switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
|
|
23
|
+
case 0: self = .leading
|
|
24
|
+
case 1: self = .trailing
|
|
25
|
+
default: self = .center
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/// Where a list row's separator starts: accepted, the page draws full-width
|
|
30
|
+
/// separators. A guide of its own, which no stack or frame aligns by: as
|
|
31
|
+
/// `.leading`, Ice Cubes' `.alignmentGuide(.listRowSeparatorLeading) { _ in -100 }`
|
|
32
|
+
/// moved its embedded posts 100 points right in their leading `VStack`.
|
|
33
|
+
public static let listRowSeparatorLeading = HorizontalAlignment(name: "listRowSeparatorLeading")
|
|
34
|
+
public static let listRowSeparatorTrailing = HorizontalAlignment(name: "listRowSeparatorTrailing")
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
extension VerticalAlignment {
|
|
38
|
+
/// The built-in guide `id`'s default value matches: top at 0, bottom at the height, else center.
|
|
39
|
+
public init(_ id: AlignmentID.Type) {
|
|
40
|
+
switch id.defaultValue(in: ViewDimensions(width: 1, height: 1)) {
|
|
41
|
+
case 0: self = .top
|
|
42
|
+
case 1: self = .bottom
|
|
43
|
+
default: self = .center
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
nonisolated extension View {
|
|
49
|
+
/// Moves the view's horizontal guide `g` to `computeValue(dimensions)`.
|
|
50
|
+
public func alignmentGuide(_ g: HorizontalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
|
|
51
|
+
_styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "horizontal", name: g.name, computeValue) }
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// Moves the view's vertical guide `g` to `computeValue(dimensions)`.
|
|
55
|
+
public func alignmentGuide(_ g: VerticalAlignment, computeValue: @escaping (ViewDimensions) -> CGFloat) -> some View {
|
|
56
|
+
_styled { $0.extras["alignmentGuide"] = _alignmentGuideJSON(axis: "vertical", name: g.name, computeValue) }
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// `{"axis", "name", "value": [a, b, c]}`: the guide is `a + b·width + c·height`,
|
|
61
|
+
/// fitted from the closure at sizes 0×0, 100×0 and 0×100.
|
|
62
|
+
func _alignmentGuideJSON(axis: String, name: String, _ computeValue: (ViewDimensions) -> CGFloat) -> _JSON {
|
|
63
|
+
let origin = computeValue(ViewDimensions(width: 0, height: 0))
|
|
64
|
+
let wide = computeValue(ViewDimensions(width: 100, height: 0))
|
|
65
|
+
let tall = computeValue(ViewDimensions(width: 0, height: 100))
|
|
66
|
+
let terms = [origin, (wide - origin) / 100, (tall - origin) / 100].map { $0.isFinite ? _round2($0 * 100) / 100 : 0 }
|
|
67
|
+
return .object(["axis": .string(axis), "name": .string(name), "value": .array(terms.map(_JSON.number))])
|
|
68
|
+
}
|
|
@@ -108,8 +108,9 @@ extension Binding {
|
|
|
108
108
|
let setter = self.setter
|
|
109
109
|
return Binding(get: getter) { value in
|
|
110
110
|
// Bindings are written from the main actor (event handlers, bodies).
|
|
111
|
-
MainActor.assumeIsolated { _Runtime.shared.beginTransaction(animation) }
|
|
111
|
+
let outer = MainActor.assumeIsolated { _Runtime.shared.beginTransaction(animation) }
|
|
112
112
|
setter(value)
|
|
113
|
+
MainActor.assumeIsolated { _Runtime.shared.endTransaction(outer) }
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
116
|
}
|
|
@@ -118,8 +119,23 @@ extension Binding {
|
|
|
118
119
|
@MainActor
|
|
119
120
|
public func withAnimation<Result>(_ animation: Animation? = .default,
|
|
120
121
|
_ body: () throws -> Result) rethrows -> Result {
|
|
121
|
-
_Runtime.shared.
|
|
122
|
-
|
|
122
|
+
try _Runtime.shared.runInTransaction(animation, body)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/// Runs `body` in `transaction`: its animation (none when it disables
|
|
126
|
+
/// animations) animates the view changes `body` causes.
|
|
127
|
+
@MainActor
|
|
128
|
+
public func withTransaction<Result>(_ transaction: Transaction, _ body: () throws -> Result) rethrows -> Result {
|
|
129
|
+
try _Runtime.shared.runInTransaction(transaction.disablesAnimations ? nil : transaction.animation, body)
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/// `withTransaction` with one property of a fresh transaction set.
|
|
133
|
+
@MainActor
|
|
134
|
+
public func withTransaction<Result, Value>(_ keyPath: WritableKeyPath<Transaction, Value>, _ value: Value,
|
|
135
|
+
_ body: () throws -> Result) rethrows -> Result {
|
|
136
|
+
var transaction = Transaction()
|
|
137
|
+
transaction[keyPath: keyPath] = value
|
|
138
|
+
return try withTransaction(transaction, body)
|
|
123
139
|
}
|
|
124
140
|
|
|
125
141
|
// MARK: - Transitions
|
|
@@ -169,6 +185,11 @@ public struct AnyTransition: Sendable {
|
|
|
169
185
|
AnyTransition(parts: [Part(kind: "scale", scale: scale)])
|
|
170
186
|
}
|
|
171
187
|
|
|
188
|
+
/// iOS 17's spelling, `.scale(0.5)`.
|
|
189
|
+
public static func scale(_ scale: Double, anchor: UnitPoint = .center) -> AnyTransition {
|
|
190
|
+
AnyTransition(parts: [Part(kind: "scale", scale: scale)])
|
|
191
|
+
}
|
|
192
|
+
|
|
172
193
|
/// Slides in from / out to the given offset (points).
|
|
173
194
|
public static func offset(x: CGFloat = 0, y: CGFloat = 0) -> AnyTransition {
|
|
174
195
|
AnyTransition(parts: [Part(kind: "offset", offset: CGSize(width: x, height: y))])
|
|
@@ -212,7 +233,7 @@ extension Edge {
|
|
|
212
233
|
// MARK: - Modifiers
|
|
213
234
|
|
|
214
235
|
/// Views whose subtree animates when `value` changes.
|
|
215
|
-
protocol _AnimatedView {
|
|
236
|
+
protocol _AnimatedView: _TraitBearing {
|
|
216
237
|
var _animation: Animation? { get }
|
|
217
238
|
/// Whether the tracked value differs from a previously stored one.
|
|
218
239
|
func _changed(since previous: Any?) -> Bool
|
|
@@ -240,7 +261,7 @@ extension _AnimationView: _AnimatedView {
|
|
|
240
261
|
}
|
|
241
262
|
}
|
|
242
263
|
|
|
243
|
-
extension View {
|
|
264
|
+
nonisolated extension View {
|
|
244
265
|
/// Animates changes to this view whenever `value` changes.
|
|
245
266
|
public func animation<V: Equatable>(_ animation: Animation?, value: V) -> some View {
|
|
246
267
|
_AnimationView(content: self, animation: animation, value: value)
|
|
@@ -251,3 +272,14 @@ extension View {
|
|
|
251
272
|
_styled { $0.transition = transition }
|
|
252
273
|
}
|
|
253
274
|
}
|
|
275
|
+
|
|
276
|
+
// MARK: - Transaction
|
|
277
|
+
|
|
278
|
+
/// The context of a state change. Accepted where SwiftUI takes one
|
|
279
|
+
/// (`AsyncImage(url:transaction:content:)`); the renderer animates what
|
|
280
|
+
/// `withAnimation` asked for, so the value itself is not consulted.
|
|
281
|
+
public struct Transaction: Sendable {
|
|
282
|
+
public var animation: Animation?
|
|
283
|
+
public var disablesAnimations: Bool = false
|
|
284
|
+
public init(animation: Animation? = nil) { self.animation = animation }
|
|
285
|
+
}
|
|
@@ -9,7 +9,7 @@ extension Never: Scene {}
|
|
|
9
9
|
|
|
10
10
|
/// Scenes the runtime can mount directly.
|
|
11
11
|
protocol _RootScene {
|
|
12
|
-
var _rootView: any View { get }
|
|
12
|
+
@MainActor var _rootView: any View { get }
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@resultBuilder
|
|
@@ -39,6 +39,36 @@ extension WindowGroup: _RootScene {
|
|
|
39
39
|
var _rootView: any View { content }
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
/// A scene whose root view is wrapped in a view modifier: how another module
|
|
43
|
+
/// adds a scene modifier (SwiftData's `.modelContainer`) that applies to the
|
|
44
|
+
/// whole window's content.
|
|
45
|
+
public struct _RootModifiedScene<Content: Scene, Modifier: ViewModifier> {
|
|
46
|
+
let content: Content
|
|
47
|
+
let modifier: Modifier
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
extension _RootModifiedScene: Scene {
|
|
51
|
+
public typealias Body = Never
|
|
52
|
+
public var body: Never { fatalError("_RootModifiedScene is a primitive scene") }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
extension _RootModifiedScene: _RootScene {
|
|
56
|
+
var _rootView: any View {
|
|
57
|
+
guard let root = content as? any _RootScene else {
|
|
58
|
+
fatalError("\(Content.self) is not a scene the runtime can present. Use WindowGroup.")
|
|
59
|
+
}
|
|
60
|
+
func wrap<V: View>(_ view: V) -> any View { view.modifier(modifier) }
|
|
61
|
+
return wrap(root._rootView)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
extension Scene {
|
|
66
|
+
/// Applies `modifier` to the scene's root view.
|
|
67
|
+
public func _modifyingRootView<M: ViewModifier>(_ modifier: M) -> _RootModifiedScene<Self, M> {
|
|
68
|
+
_RootModifiedScene(content: self, modifier: modifier)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
42
72
|
/// The structure and behavior of an app. Mark the conforming type `@main`.
|
|
43
73
|
@MainActor @preconcurrency
|
|
44
74
|
public protocol App {
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// A binding to a mutable collection is a collection of bindings to its
|
|
2
|
+
// elements, as in SwiftUI (iOS 15): `$items.isEmpty`, `$items.count` and
|
|
3
|
+
// `$items[0]` read and write through the binding to the whole collection.
|
|
4
|
+
|
|
5
|
+
extension Binding: Sequence where Value: MutableCollection {
|
|
6
|
+
public typealias Element = Binding<Value.Element>
|
|
7
|
+
public typealias Iterator = IndexingIterator<Binding<Value>>
|
|
8
|
+
public typealias SubSequence = Slice<Binding<Value>>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
extension Binding: Collection where Value: MutableCollection {
|
|
12
|
+
public typealias Index = Value.Index
|
|
13
|
+
public typealias Indices = Value.Indices
|
|
14
|
+
|
|
15
|
+
public var startIndex: Value.Index { wrappedValue.startIndex }
|
|
16
|
+
public var endIndex: Value.Index { wrappedValue.endIndex }
|
|
17
|
+
public var indices: Value.Indices { wrappedValue.indices }
|
|
18
|
+
|
|
19
|
+
public func index(after i: Value.Index) -> Value.Index { wrappedValue.index(after: i) }
|
|
20
|
+
|
|
21
|
+
public func formIndex(after i: inout Value.Index) { wrappedValue.formIndex(after: &i) }
|
|
22
|
+
|
|
23
|
+
public subscript(position: Value.Index) -> Binding<Value.Element> {
|
|
24
|
+
let whole = self
|
|
25
|
+
return Binding<Value.Element>(get: { whole.wrappedValue[position] }, set: { whole.wrappedValue[position] = $0 })
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
extension Binding: BidirectionalCollection where Value: BidirectionalCollection, Value: MutableCollection {
|
|
30
|
+
public func index(before i: Value.Index) -> Value.Index { wrappedValue.index(before: i) }
|
|
31
|
+
|
|
32
|
+
public func formIndex(before i: inout Value.Index) { wrappedValue.formIndex(before: &i) }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
extension Binding: RandomAccessCollection where Value: RandomAccessCollection, Value: MutableCollection {}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/// `ForEach($items) { $item in … }` (iOS 15): a row per element, each with a
|
|
2
|
+
/// binding to its element (`Binding(projectedValue:)`, in State.swift, lets
|
|
3
|
+
/// the closure take its parameter as `$item`). Plus the older
|
|
4
|
+
/// `Picker(selection:label:content:)`.
|
|
5
|
+
|
|
6
|
+
extension ForEach where Content: View {
|
|
7
|
+
/// A row per element of the bound collection, identified by its `id`.
|
|
8
|
+
public init<C: MutableCollection & RandomAccessCollection>(
|
|
9
|
+
_ data: Binding<C>, @ViewBuilder content: @escaping (Binding<C.Element>) -> Content
|
|
10
|
+
) where Data == [Binding<C.Element>], C.Element: Identifiable, ID == C.Element.ID {
|
|
11
|
+
self.init(_data: data.map { $0 }, id: { $0.wrappedValue.id }, content: content)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/// A row per element of the bound collection, identified by `id`.
|
|
15
|
+
public init<C: MutableCollection & RandomAccessCollection>(
|
|
16
|
+
_ data: Binding<C>, id: KeyPath<C.Element, ID>, @ViewBuilder content: @escaping (Binding<C.Element>) -> Content
|
|
17
|
+
) where Data == [Binding<C.Element>] {
|
|
18
|
+
self.init(_data: data.map { $0 }, id: { $0.wrappedValue[keyPath: id] }, content: content)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
extension Picker {
|
|
23
|
+
/// The pre-iOS 16 form, with the label first.
|
|
24
|
+
public init(selection: Binding<SelectionValue>, label: Label, @ViewBuilder content: () -> Content) {
|
|
25
|
+
self.init(selection: selection, content: content, label: { label })
|
|
26
|
+
}
|
|
27
|
+
}
|