@swiftbrowser/swift 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Package.swift +214 -0
- package/README.md +10 -2
- package/Sources/AVFoundation/AVFoundation.swift +131 -0
- package/Sources/AVFoundation/Asset.swift +487 -0
- package/Sources/AVFoundation/AudioSession.swift +144 -0
- package/Sources/AVFoundation/CMTime.swift +303 -0
- package/Sources/AVFoundation/Capture.swift +688 -0
- package/Sources/AVFoundation/Player.swift +749 -0
- package/Sources/AVFoundation/PlayerView.swift +117 -0
- package/Sources/AVKit/AVKit.swift +132 -0
- package/Sources/Accelerate/Accelerate.swift +122 -0
- package/Sources/AppIntents/AppIntents.swift +144 -0
- package/Sources/AppIntents/Parameters.swift +220 -0
- package/Sources/AppIntents/Shortcuts.swift +159 -0
- package/Sources/AudioToolbox/AudioToolbox.swift +55 -0
- package/Sources/AuthenticationServices/AuthenticationServices.swift +257 -0
- package/Sources/AuthenticationServices/Authorization.swift +251 -0
- package/Sources/Charts/Charts.swift +61 -0
- package/Sources/Combine/AnyCancellable.swift +65 -0
- package/Sources/Combine/AnyPublisher.swift +148 -0
- package/Sources/Combine/AnySubscriber.swift +230 -0
- package/Sources/Combine/Cancellable.swift +35 -0
- package/Sources/Combine/Codable.swift +29 -0
- package/Sources/Combine/CombineIdentifier.swift +45 -0
- package/Sources/Combine/Concurrency/ConcurrencyHelpers.swift +24 -0
- package/Sources/Combine/Concurrency/Future+Concurrency.swift +136 -0
- package/Sources/Combine/Concurrency/GENERATED-Publisher+Concurrency.swift +397 -0
- package/Sources/Combine/CurrentValueSubject.swift +252 -0
- package/Sources/Combine/CustomCombineIdentifierConvertible.swift +28 -0
- package/Sources/Combine/Future.swift +228 -0
- package/Sources/Combine/GENERATED-RootProtocols.swift +426 -0
- package/Sources/Combine/Helpers/ConduitBase.swift +40 -0
- package/Sources/Combine/Helpers/ConduitList.swift +59 -0
- package/Sources/Combine/Helpers/DebugHook.swift +177 -0
- package/Sources/Combine/Helpers/FilterProducer.swift +174 -0
- package/Sources/Combine/Helpers/Locking.swift +30 -0
- package/Sources/Combine/Helpers/PartialCompletion.swift +26 -0
- package/Sources/Combine/Helpers/ReduceProducer.swift +249 -0
- package/Sources/Combine/Helpers/SubjectSubscriber.swift +96 -0
- package/Sources/Combine/Helpers/SubscriberTap.swift +69 -0
- package/Sources/Combine/Helpers/SubscriptionStatus.swift +33 -0
- package/Sources/Combine/Helpers/SubscriptionTap.swift +33 -0
- package/Sources/Combine/Helpers/Utils.swift +30 -0
- package/Sources/Combine/Helpers/Violations.swift +33 -0
- package/Sources/Combine/ImmediateScheduler.swift +178 -0
- package/Sources/Combine/LICENSE +21 -0
- package/Sources/Combine/NotificationPublisher.swift +48 -0
- package/Sources/Combine/ObjectWillChange.swift +46 -0
- package/Sources/Combine/PassthroughSubject.swift +222 -0
- package/Sources/Combine/Publisher+Subscribe.swift +53 -0
- package/Sources/Combine/Publishers/Deferred.swift +48 -0
- package/Sources/Combine/Publishers/Empty.swift +54 -0
- package/Sources/Combine/Publishers/Fail.swift +42 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Catch.swift +673 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.Encode.swift +388 -0
- package/Sources/Combine/Publishers/GENERATED-Publishers.MapKeyPath.swift +384 -0
- package/Sources/Combine/Publishers/Just.swift +313 -0
- package/Sources/Combine/Publishers/Optional.Publisher.swift +315 -0
- package/Sources/Combine/Publishers/Publishers.AllSatisfy.swift +217 -0
- package/Sources/Combine/Publishers/Publishers.AssertNoFailure.swift +158 -0
- package/Sources/Combine/Publishers/Publishers.Autoconnect.swift +193 -0
- package/Sources/Combine/Publishers/Publishers.Breakpoint.swift +231 -0
- package/Sources/Combine/Publishers/Publishers.Buffer.swift +356 -0
- package/Sources/Combine/Publishers/Publishers.Collect.swift +102 -0
- package/Sources/Combine/Publishers/Publishers.CollectByCount.swift +195 -0
- package/Sources/Combine/Publishers/Publishers.CompactMap.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.Comparison.swift +371 -0
- package/Sources/Combine/Publishers/Publishers.Concatenate.swift +474 -0
- package/Sources/Combine/Publishers/Publishers.Contains.swift +293 -0
- package/Sources/Combine/Publishers/Publishers.Count.swift +87 -0
- package/Sources/Combine/Publishers/Publishers.Debounce.swift +332 -0
- package/Sources/Combine/Publishers/Publishers.Delay.swift +269 -0
- package/Sources/Combine/Publishers/Publishers.Drop.swift +155 -0
- package/Sources/Combine/Publishers/Publishers.DropUntilOutput.swift +283 -0
- package/Sources/Combine/Publishers/Publishers.DropWhile.swift +378 -0
- package/Sources/Combine/Publishers/Publishers.Filter.swift +248 -0
- package/Sources/Combine/Publishers/Publishers.First.swift +261 -0
- package/Sources/Combine/Publishers/Publishers.FlatMap.swift +533 -0
- package/Sources/Combine/Publishers/Publishers.HandleEvents.swift +260 -0
- package/Sources/Combine/Publishers/Publishers.IgnoreOutput.swift +109 -0
- package/Sources/Combine/Publishers/Publishers.Last.swift +252 -0
- package/Sources/Combine/Publishers/Publishers.MakeConnectable.swift +82 -0
- package/Sources/Combine/Publishers/Publishers.Map.swift +351 -0
- package/Sources/Combine/Publishers/Publishers.MapError.swift +140 -0
- package/Sources/Combine/Publishers/Publishers.MeasureInterval.swift +187 -0
- package/Sources/Combine/Publishers/Publishers.Multicast.swift +284 -0
- package/Sources/Combine/Publishers/Publishers.Output.swift +241 -0
- package/Sources/Combine/Publishers/Publishers.PrefixUntilOutput.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.PrefixWhile.swift +176 -0
- package/Sources/Combine/Publishers/Publishers.Print.swift +206 -0
- package/Sources/Combine/Publishers/Publishers.ReceiveOn.swift +227 -0
- package/Sources/Combine/Publishers/Publishers.Reduce.swift +204 -0
- package/Sources/Combine/Publishers/Publishers.RemoveDuplicates.swift +264 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceEmpty.swift +201 -0
- package/Sources/Combine/Publishers/Publishers.ReplaceError.swift +211 -0
- package/Sources/Combine/Publishers/Publishers.Retry.swift +274 -0
- package/Sources/Combine/Publishers/Publishers.Scan.swift +331 -0
- package/Sources/Combine/Publishers/Publishers.Sequence.swift +437 -0
- package/Sources/Combine/Publishers/Publishers.SetFailureType.swift +120 -0
- package/Sources/Combine/Publishers/Publishers.Share.swift +104 -0
- package/Sources/Combine/Publishers/Publishers.SubscribeOn.swift +197 -0
- package/Sources/Combine/Publishers/Publishers.SwitchToLatest.swift +444 -0
- package/Sources/Combine/Publishers/Publishers.Throttle.swift +359 -0
- package/Sources/Combine/Publishers/Publishers.Timeout.swift +301 -0
- package/Sources/Combine/Publishers/Publishers.Zip.swift +720 -0
- package/Sources/Combine/Publishers/Publishers.swift +13 -0
- package/Sources/Combine/Publishers/Record.swift +237 -0
- package/Sources/Combine/Publishers/Result.Publisher.swift +337 -0
- package/Sources/Combine/Result.swift +46 -0
- package/Sources/Combine/Scheduler.swift +89 -0
- package/Sources/Combine/Schedulers.swift +211 -0
- package/Sources/Combine/Subject+Void.swift +17 -0
- package/Sources/Combine/Subscriber+Void.swift +20 -0
- package/Sources/Combine/Subscribers/Subscribers.Assign.swift +175 -0
- package/Sources/Combine/Subscribers/Subscribers.Completion.swift +90 -0
- package/Sources/Combine/Subscribers/Subscribers.Demand.swift +476 -0
- package/Sources/Combine/Subscribers/Subscribers.Sink.swift +206 -0
- package/Sources/Combine/Subscribers/Subscribers.swift +9 -0
- package/Sources/Combine/Subscription.swift +22 -0
- package/Sources/Combine/Subscriptions.swift +42 -0
- package/Sources/Combine/SwiftUIObservation.swift +10 -0
- package/Sources/Combine/_Introspection.swift +107 -0
- package/Sources/CommonCrypto/CommonCrypto.swift +80 -0
- package/Sources/Compression/Compression.swift +365 -0
- package/Sources/Compression/Deflate.swift +407 -0
- package/Sources/Compression/Zlib.swift +179 -0
- package/Sources/CoreFoundationTypes/CoreFoundationTypes.swift +101 -0
- package/Sources/CoreGraphics/CoreGraphics.swift +411 -0
- package/Sources/CoreGraphics/ProjectionTransforms.swift +28 -0
- package/Sources/CoreHaptics/CoreHaptics.swift +399 -0
- package/Sources/CoreImage/CIColor.swift +41 -0
- package/Sources/CoreImage/CIContext.swift +31 -0
- package/Sources/CoreImage/CIDetector.swift +57 -0
- package/Sources/CoreImage/CIFilter.swift +243 -0
- package/Sources/CoreImage/CIFilterBuiltins.swift +136 -0
- package/Sources/CoreImage/CIImage.swift +162 -0
- package/Sources/CoreImage/QRCode.swift +393 -0
- package/Sources/CoreLocation/Coordinate.swift +30 -0
- package/Sources/CoreLocation/Location.swift +65 -0
- package/Sources/CoreML/Evaluation.swift +414 -0
- package/Sources/CoreML/FeatureValue.swift +266 -0
- package/Sources/CoreML/Model.swift +269 -0
- package/Sources/CoreML/MultiArray.swift +92 -0
- package/Sources/CoreML/Specification.swift +233 -0
- package/Sources/CoreText/CoreText.swift +64 -0
- package/Sources/CoreTransferable/CoreTransferable.swift +606 -0
- package/Sources/CryptoKit/ChaChaPoly.swift +258 -0
- package/Sources/CryptoKit/CryptoKit.swift +375 -0
- package/Sources/CryptoKit/Curve25519.swift +317 -0
- package/Sources/CryptoKit/P256.swift +321 -0
- package/Sources/FoundationBridge/AppStorage.swift +165 -0
- package/Sources/FoundationBridge/AssetResources.swift +90 -0
- package/Sources/FoundationBridge/AsyncBytes.swift +128 -0
- package/Sources/FoundationBridge/AsyncImage.swift +116 -0
- package/Sources/FoundationBridge/AttributedStrings.swift +16 -0
- package/Sources/FoundationBridge/Bundle.swift +119 -0
- package/Sources/FoundationBridge/CombineExports.swift +8 -0
- package/Sources/FoundationBridge/CoreFoundation.swift +77 -0
- package/Sources/FoundationBridge/Dispatch.swift +458 -0
- package/Sources/FoundationBridge/EnvironmentFoundation.swift +41 -0
- package/Sources/FoundationBridge/FileImporter.swift +128 -0
- package/Sources/FoundationBridge/FileSystem.swift +68 -0
- package/Sources/FoundationBridge/FoundationBridge.swift +29 -0
- package/Sources/FoundationBridge/HostResolution.swift +31 -0
- package/Sources/FoundationBridge/ItemProvider.swift +655 -0
- package/Sources/FoundationBridge/KeyValueObserving.swift +138 -0
- package/Sources/FoundationBridge/Links.swift +127 -0
- package/Sources/FoundationBridge/ListFormatter.swift +32 -0
- package/Sources/FoundationBridge/Locale.swift +86 -0
- package/Sources/FoundationBridge/Localization.swift +149 -0
- package/Sources/FoundationBridge/Locks.swift +50 -0
- package/Sources/FoundationBridge/Markdown.swift +527 -0
- package/Sources/FoundationBridge/MeasurementFormat.swift +95 -0
- package/Sources/FoundationBridge/NotificationCenter.swift +154 -0
- package/Sources/FoundationBridge/OpenURLHandlers.swift +60 -0
- package/Sources/FoundationBridge/Operation.swift +195 -0
- package/Sources/FoundationBridge/ProcessInfo.swift +32 -0
- package/Sources/FoundationBridge/RelativeDateTimeFormatter.swift +136 -0
- package/Sources/FoundationBridge/SceneStorage.swift +78 -0
- package/Sources/FoundationBridge/SecurityExports.swift +8 -0
- package/Sources/FoundationBridge/Selector.swift +226 -0
- package/Sources/FoundationBridge/StringComparators.swift +17 -0
- package/Sources/FoundationBridge/Table.swift +211 -0
- package/Sources/FoundationBridge/TextAttributes.swift +42 -0
- package/Sources/FoundationBridge/Timer.swift +53 -0
- package/Sources/FoundationBridge/UITextChecker.swift +30 -0
- package/Sources/FoundationBridge/URLSession.swift +718 -0
- package/Sources/FoundationBridge/UserDefaults.swift +183 -0
- package/Sources/FoundationBridge/WebAuthRedirects.swift +227 -0
- package/Sources/FoundationBridge/WebSocket.swift +187 -0
- package/Sources/FoundationModels/FoundationModels.swift +1098 -0
- package/Sources/ImageIO/GIF.swift +72 -0
- package/Sources/ImageIO/ImageIO.swift +248 -0
- package/Sources/ImageIO/ImageTypes.swift +28 -0
- package/Sources/LinkPresentation/LinkPresentation.swift +249 -0
- package/Sources/LocalAuthentication/LAContext.swift +86 -0
- package/Sources/MapKit/Geometry.swift +223 -0
- package/Sources/MapKit/Map.swift +638 -0
- package/Sources/MapKit/MapView.swift +229 -0
- package/Sources/MobileCoreServices/MobileCoreServices.swift +28 -0
- package/Sources/NaturalLanguage/LanguageIdentifier.swift +317 -0
- package/Sources/NaturalLanguage/NaturalLanguage.swift +135 -0
- package/Sources/OSLog/OSLog.swift +6 -0
- package/Sources/Photos/Photos.swift +572 -0
- package/Sources/PhotosUI/PhotosPicker.swift +248 -0
- package/Sources/PhotosUI/PhotosPickerItem.swift +261 -0
- package/Sources/QuickLook/QuickLook.swift +168 -0
- package/Sources/SafariServices/SafariServices.swift +106 -0
- package/Sources/Security/Security.swift +332 -0
- package/Sources/StoreKit/AppStore.swift +207 -0
- package/Sources/StoreKit/Products.swift +280 -0
- package/Sources/StoreKit/RequestReview.swift +28 -0
- package/Sources/StoreKit/StoreKit1.swift +486 -0
- package/Sources/StoreKit/StoreViews.swift +428 -0
- package/Sources/StoreKit/Transactions.swift +197 -0
- package/Sources/SwiftData/Macros.swift +58 -0
- package/Sources/SwiftData/ModelActor.swift +38 -0
- package/Sources/SwiftData/ModelContainer.swift +129 -0
- package/Sources/SwiftData/ModelContext.swift +451 -0
- package/Sources/SwiftData/PersistentModel.swift +238 -0
- package/Sources/SwiftData/Properties.swift +261 -0
- package/Sources/SwiftData/Query.swift +256 -0
- package/Sources/SwiftData/Schema.swift +192 -0
- package/Sources/SwiftData/Store.swift +146 -0
- package/Sources/SwiftData/StringPredicates.swift +125 -0
- package/Sources/SwiftDataMacros/EntryMacro.swift +82 -0
- package/Sources/SwiftDataMacros/GenerableMacro.swift +183 -0
- package/Sources/SwiftDataMacros/ModelActorMacro.swift +46 -0
- package/Sources/SwiftDataMacros/ModelMacro.swift +260 -0
- package/Sources/SwiftDataMacros/Plugin.swift +18 -0
- package/Sources/SwiftDataMacros/PredicateMacro.swift +1244 -0
- package/Sources/SwiftUI/API/Accessibility.swift +181 -0
- package/Sources/SwiftUI/API/AccessibilityExtras.swift +33 -0
- package/Sources/SwiftUI/API/AccessibilityFocus.swift +63 -0
- package/Sources/SwiftUI/API/Alert.swift +221 -0
- package/Sources/SwiftUI/API/AlignmentGuides.swift +65 -0
- package/Sources/SwiftUI/API/Animation.swift +285 -0
- package/Sources/SwiftUI/API/App.swift +87 -0
- package/Sources/SwiftUI/API/BindingCollections.swift +35 -0
- package/Sources/SwiftUI/API/BindingForEach.swift +27 -0
- package/Sources/SwiftUI/API/Bitmaps.swift +254 -0
- package/Sources/SwiftUI/API/ButtonStyles.swift +96 -0
- package/Sources/SwiftUI/API/Canvas.swift +337 -0
- package/Sources/SwiftUI/API/Color.swift +237 -0
- package/Sources/SwiftUI/API/ColorEffects.swift +52 -0
- package/Sources/SwiftUI/API/ColorPickerAndLabeledContent.swift +138 -0
- package/Sources/SwiftUI/API/ColorSpaces.swift +161 -0
- package/Sources/SwiftUI/API/Commands.swift +106 -0
- package/Sources/SwiftUI/API/ContainerBackground.swift +28 -0
- package/Sources/SwiftUI/API/ContentShape.swift +33 -0
- package/Sources/SwiftUI/API/ContentSizeCategory.swift +35 -0
- package/Sources/SwiftUI/API/ContentUnavailable.swift +101 -0
- package/Sources/SwiftUI/API/Controls.swift +300 -0
- package/Sources/SwiftUI/API/CustomLayout.swift +442 -0
- package/Sources/SwiftUI/API/CustomToolbarContent.swift +46 -0
- package/Sources/SwiftUI/API/Decorations.swift +92 -0
- package/Sources/SwiftUI/API/EditMode.swift +212 -0
- package/Sources/SwiftUI/API/Effects.swift +388 -0
- package/Sources/SwiftUI/API/Entry.swift +8 -0
- package/Sources/SwiftUI/API/Environment.swift +439 -0
- package/Sources/SwiftUI/API/EnvironmentSendable.swift +6 -0
- package/Sources/SwiftUI/API/Focus.swift +137 -0
- package/Sources/SwiftUI/API/Font.swift +131 -0
- package/Sources/SwiftUI/API/Gauge.swift +290 -0
- package/Sources/SwiftUI/API/Geometry.swift +89 -0
- package/Sources/SwiftUI/API/GeometryEffects.swift +232 -0
- package/Sources/SwiftUI/API/GeometryReader.swift +135 -0
- package/Sources/SwiftUI/API/GestureState.swift +65 -0
- package/Sources/SwiftUI/API/Gestures.swift +342 -0
- package/Sources/SwiftUI/API/Glass.swift +127 -0
- package/Sources/SwiftUI/API/Grid.swift +188 -0
- package/Sources/SwiftUI/API/GroupBoxAndControlGroup.swift +130 -0
- package/Sources/SwiftUI/API/KeyPress.swift +54 -0
- package/Sources/SwiftUI/API/LabelStyle.swift +124 -0
- package/Sources/SwiftUI/API/Layout.swift +220 -0
- package/Sources/SwiftUI/API/LazyStacks.swift +49 -0
- package/Sources/SwiftUI/API/LegacyAlert.swift +97 -0
- package/Sources/SwiftUI/API/Lists.swift +331 -0
- package/Sources/SwiftUI/API/Menu.swift +58 -0
- package/Sources/SwiftUI/API/Modifiers.swift +313 -0
- package/Sources/SwiftUI/API/MoreModifiers.swift +100 -0
- package/Sources/SwiftUI/API/Namespace.swift +44 -0
- package/Sources/SwiftUI/API/Navigation.swift +386 -0
- package/Sources/SwiftUI/API/NavigationDestinationBindings.swift +55 -0
- package/Sources/SwiftUI/API/ObservableObject.swift +293 -0
- package/Sources/SwiftUI/API/OnChange.swift +48 -0
- package/Sources/SwiftUI/API/Path.swift +543 -0
- package/Sources/SwiftUI/API/Phase8Controls.swift +411 -0
- package/Sources/SwiftUI/API/PhaseAnimator.swift +130 -0
- package/Sources/SwiftUI/API/Picker.swift +185 -0
- package/Sources/SwiftUI/API/PointerAndKeyboard.swift +77 -0
- package/Sources/SwiftUI/API/Popover.swift +41 -0
- package/Sources/SwiftUI/API/Preferences.swift +262 -0
- package/Sources/SwiftUI/API/Presentation.swift +122 -0
- package/Sources/SwiftUI/API/PresentationExtras.swift +60 -0
- package/Sources/SwiftUI/API/Primitives.swift +517 -0
- package/Sources/SwiftUI/API/Publishers.swift +107 -0
- package/Sources/SwiftUI/API/Redaction.swift +75 -0
- package/Sources/SwiftUI/API/RowActions.swift +84 -0
- package/Sources/SwiftUI/API/Scenes.swift +131 -0
- package/Sources/SwiftUI/API/ScrollModifiers.swift +132 -0
- package/Sources/SwiftUI/API/ScrollTargets.swift +104 -0
- package/Sources/SwiftUI/API/ScrollViewReader.swift +144 -0
- package/Sources/SwiftUI/API/SectionSupplements.swift +96 -0
- package/Sources/SwiftUI/API/Shape.swift +214 -0
- package/Sources/SwiftUI/API/ShapeStyle.swift +409 -0
- package/Sources/SwiftUI/API/ShapeTrim.swift +78 -0
- package/Sources/SwiftUI/API/Sharing.swift +193 -0
- package/Sources/SwiftUI/API/StackLayouts.swift +199 -0
- package/Sources/SwiftUI/API/State.swift +144 -0
- package/Sources/SwiftUI/API/StatusGaps.swift +121 -0
- package/Sources/SwiftUI/API/StrokeStyle.swift +30 -0
- package/Sources/SwiftUI/API/SymbolEffects.swift +203 -0
- package/Sources/SwiftUI/API/TabContent.swift +841 -0
- package/Sources/SwiftUI/API/Table.swift +382 -0
- package/Sources/SwiftUI/API/Tabs.swift +263 -0
- package/Sources/SwiftUI/API/Tasks.swift +35 -0
- package/Sources/SwiftUI/API/Text.swift +386 -0
- package/Sources/SwiftUI/API/TextDates.swift +61 -0
- package/Sources/SwiftUI/API/TextDecorations.swift +52 -0
- package/Sources/SwiftUI/API/TextFieldAxis.swift +103 -0
- package/Sources/SwiftUI/API/TextFieldCommit.swift +52 -0
- package/Sources/SwiftUI/API/Timeline.swift +212 -0
- package/Sources/SwiftUI/API/Toolbar.swift +251 -0
- package/Sources/SwiftUI/API/Transfer.swift +145 -0
- package/Sources/SwiftUI/API/UnevenRoundedRectangle.swift +66 -0
- package/Sources/SwiftUI/API/Video.swift +64 -0
- package/Sources/SwiftUI/API/View.swift +215 -0
- package/Sources/SwiftUI/API/ViewModifier.swift +43 -0
- package/Sources/SwiftUI/API/VisualEffect.swift +155 -0
- package/Sources/SwiftUI/API/Windows.swift +25 -0
- package/Sources/SwiftUI/Charts/Axis.swift +325 -0
- package/Sources/SwiftUI/Charts/AxisFormatsAndRanges.swift +68 -0
- package/Sources/SwiftUI/Charts/Chart.swift +660 -0
- package/Sources/SwiftUI/Charts/ChartContent.swift +376 -0
- package/Sources/SwiftUI/Charts/ChartProxy.swift +57 -0
- package/Sources/SwiftUI/Charts/Marks.swift +204 -0
- package/Sources/SwiftUI/Charts/Plottable.swift +99 -0
- package/Sources/SwiftUI/Charts/Scales.swift +326 -0
- package/Sources/SwiftUI/Localization/Localization.swift +498 -0
- package/Sources/SwiftUI/Localization/PluralRules.swift +127 -0
- package/Sources/SwiftUI/Runtime/Executor.swift +85 -0
- package/Sources/SwiftUI/Runtime/Exports.swift +101 -0
- package/Sources/SwiftUI/Runtime/ImageSource.swift +310 -0
- package/Sources/SwiftUI/Runtime/JSON.swift +143 -0
- package/Sources/SwiftUI/Runtime/JSONParser.swift +443 -0
- package/Sources/SwiftUI/Runtime/LazyRows.swift +99 -0
- package/Sources/SwiftUI/Runtime/Measurements.swift +140 -0
- package/Sources/SwiftUI/Runtime/Ops.swift +152 -0
- package/Sources/SwiftUI/Runtime/Reconciler.swift +219 -0
- package/Sources/SwiftUI/Runtime/Replay.swift +382 -0
- package/Sources/SwiftUI/Runtime/Runtime.swift +2146 -0
- package/Sources/SwiftUI/Runtime/Sameness.swift +152 -0
- package/Sources/SwiftUI/Runtime/ViewPath.swift +89 -0
- package/Sources/SwiftUI/Runtime/ViewTraits.swift +175 -0
- package/Sources/SwiftUI/Runtime/WebAuthHeadless.swift +49 -0
- package/Sources/Symbols/Symbols.swift +25 -0
- package/Sources/Translation/Translation.swift +423 -0
- package/Sources/UIKit/Activity.swift +213 -0
- package/Sources/UIKit/Alerts.swift +69 -0
- package/Sources/UIKit/AppDelegate.swift +222 -0
- package/Sources/UIKit/Appearance.swift +84 -0
- package/Sources/UIKit/ColorConversions.swift +70 -0
- package/Sources/UIKit/Controls.swift +225 -0
- package/Sources/UIKit/Device.swift +200 -0
- package/Sources/UIKit/Feedback.swift +65 -0
- package/Sources/UIKit/Font.swift +307 -0
- package/Sources/UIKit/Graphics.swift +204 -0
- package/Sources/UIKit/HostingController.swift +185 -0
- package/Sources/UIKit/Identity.swift +24 -0
- package/Sources/UIKit/Introspectable.swift +510 -0
- package/Sources/UIKit/Pasteboard.swift +363 -0
- package/Sources/UIKit/PhotoAlbum.swift +81 -0
- package/Sources/UIKit/RemoteNotifications.swift +15 -0
- package/Sources/UIKit/Representable.swift +288 -0
- package/Sources/UIKit/SafeArea.swift +12 -0
- package/Sources/UIKit/SceneDelegates.swift +132 -0
- package/Sources/UIKit/Scenes.swift +40 -0
- package/Sources/UIKit/ScrollView.swift +157 -0
- package/Sources/UIKit/ShortcutItems.swift +67 -0
- package/Sources/UIKit/SymbolConfiguration.swift +124 -0
- package/Sources/UIKit/TargetAction.swift +123 -0
- package/Sources/UIKit/TextPaste.swift +161 -0
- package/Sources/UIKit/TextView.swift +538 -0
- package/Sources/UIKit/UIKit.swift +292 -0
- package/Sources/UIKit/UIView.swift +855 -0
- package/Sources/UIKit/ViewTranslation.swift +311 -0
- package/Sources/UniformTypeIdentifiers/UTType.swift +196 -0
- package/Sources/UserNotifications/Content.swift +370 -0
- package/Sources/UserNotifications/NotificationCenter.swift +309 -0
- package/Sources/WeatherKit/WeatherKit.swift +228 -0
- package/Sources/WebKit/WebKit.swift +245 -0
- package/Sources/os/os.swift +376 -0
- package/Sources/zlib/zlib.swift +6 -0
- package/index.d.ts +2 -0
- package/index.mjs +16 -0
- package/manifest.d.mts +2 -0
- package/manifest.mjs +39 -0
- package/package.json +30 -4
- package/sync-sources.mjs +33 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/// The `video` element (docs/ops-protocol.md, "Video and audio"): an HTML
|
|
2
|
+
/// `<video>` the page plays. The shim's SwiftUI has no video view of its own;
|
|
3
|
+
/// AVFoundation builds one on this (`AVPlayer`'s views: AVKit's
|
|
4
|
+
/// `VideoPlayer`, an `AVPlayerLayer` in a UIKit view), with the props worked
|
|
5
|
+
/// out from the player and a handler for the page's `video` events.
|
|
6
|
+
///
|
|
7
|
+
/// Public so the frameworks above SwiftUI can emit the element; apps never
|
|
8
|
+
/// name it.
|
|
9
|
+
public struct _VideoElement {
|
|
10
|
+
let props: _JSON
|
|
11
|
+
let handler: (_JSON) -> Void
|
|
12
|
+
|
|
13
|
+
/// `props` are the element's (see the protocol document); `handler`
|
|
14
|
+
/// receives each `video` event whole (`{"type": "video", "id", "event", …}`).
|
|
15
|
+
public init(props: _JSON, handler: @escaping (_JSON) -> Void) {
|
|
16
|
+
self.props = props
|
|
17
|
+
self.handler = handler
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
extension _VideoElement: _PrimitiveView {}
|
|
21
|
+
extension _VideoElement: _HostView {
|
|
22
|
+
var _kind: String { "video" }
|
|
23
|
+
func _props(in environment: EnvironmentValues) -> _JSON { props }
|
|
24
|
+
var _handler: ((_JSON) -> Void)? { handler }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
extension _Runtime {
|
|
28
|
+
/// The `response` fields for a headless `media` request (AVFoundation's
|
|
29
|
+
/// files and probes, QuickLook's previews): a `file` gets a stand-in URL,
|
|
30
|
+
/// a `probe` the `duration` / `width` / `height` of the `SB_RESPONSES`
|
|
31
|
+
/// entry whose `url` (exact) or `prefix` matches and that has a
|
|
32
|
+
/// `duration`, an `open` finds no tab to open (`opened: false`).
|
|
33
|
+
nonisolated static func _headlessMedia(params: _JSON, fixtures: [_JSON], serial: Int) -> [String: _JSON] {
|
|
34
|
+
guard case .object(let request) = params, case .string(let action)? = request["action"] else {
|
|
35
|
+
return ["error": .string("malformed request")]
|
|
36
|
+
}
|
|
37
|
+
switch action {
|
|
38
|
+
case "file":
|
|
39
|
+
return ["value": .object(["url": .string("blob:headless/\(serial)")])]
|
|
40
|
+
case "release":
|
|
41
|
+
return ["value": .object([:])]
|
|
42
|
+
case "open":
|
|
43
|
+
return ["value": .object(["opened": .bool(false)])]
|
|
44
|
+
case "probe":
|
|
45
|
+
guard case .string(let url)? = request["url"] else { return ["error": .string("malformed request")] }
|
|
46
|
+
let fixture = fixtures.first { item in
|
|
47
|
+
guard case .object(let fields) = item, fields["duration"] != nil else { return false }
|
|
48
|
+
if case .string(let exact)? = fields["url"], exact == url { return true }
|
|
49
|
+
if case .string(let prefix)? = fields["prefix"], url.hasPrefix(prefix) { return true }
|
|
50
|
+
return false
|
|
51
|
+
}
|
|
52
|
+
guard case .object(let fields)? = fixture else {
|
|
53
|
+
return ["error": .string("headless: no SB_RESPONSES entry with a duration for \(url)")]
|
|
54
|
+
}
|
|
55
|
+
return ["value": .object([
|
|
56
|
+
"duration": fields["duration"] ?? .null,
|
|
57
|
+
"width": fields["width"] ?? .number(0),
|
|
58
|
+
"height": fields["height"] ?? .number(0),
|
|
59
|
+
])]
|
|
60
|
+
default:
|
|
61
|
+
return ["error": .string("headless: unknown media action \(action)")]
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/// A type that represents part of your app's user interface.
|
|
2
|
+
///
|
|
3
|
+
/// Mirrors SwiftUI's declaration, including main-actor isolation, so that a
|
|
4
|
+
/// type conforming to `View` in its primary declaration is main-actor
|
|
5
|
+
/// isolated on every platform.
|
|
6
|
+
@MainActor @preconcurrency
|
|
7
|
+
public protocol View {
|
|
8
|
+
associatedtype Body: View
|
|
9
|
+
@ViewBuilder var body: Self.Body { get }
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
extension Never: View {
|
|
13
|
+
public typealias Body = Never
|
|
14
|
+
public var body: Never { fatalError("Never has no body") }
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/// Views the runtime renders directly instead of evaluating `body`.
|
|
18
|
+
public protocol _PrimitiveView: View where Body == Never {}
|
|
19
|
+
|
|
20
|
+
extension _PrimitiveView {
|
|
21
|
+
public var body: Never {
|
|
22
|
+
fatalError("\(Self.self) is a primitive view and has no body")
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/// A view whose only job is to contribute other views to its parent.
|
|
27
|
+
/// Tuples, optionals, conditionals, `Group`, `AnyView` and `ForEach` are groups.
|
|
28
|
+
protocol _GroupView: _TraitBearing {
|
|
29
|
+
var _children: [any View] { get }
|
|
30
|
+
/// Stable identities for `_children`, when the group is keyed (`ForEach`).
|
|
31
|
+
var _keys: [AnyHashable]? { get }
|
|
32
|
+
/// Whether the group is more than a wrapper of one view: it has other
|
|
33
|
+
/// than one child, or keys. A modifier applied to such a group applies
|
|
34
|
+
/// to each of its children (`_StyledGroup`).
|
|
35
|
+
var _spreads: Bool { get }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
extension _GroupView {
|
|
39
|
+
var _keys: [AnyHashable]? { nil }
|
|
40
|
+
var _spreads: Bool { _keys != nil || _children.count != 1 }
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/// A view that becomes an element in the render tree (see docs/ops-protocol.md).
|
|
44
|
+
protocol _HostView: _TraitBearing {
|
|
45
|
+
var _kind: String { get }
|
|
46
|
+
func _props(in environment: EnvironmentValues) -> _JSON
|
|
47
|
+
var _content: [any View] { get }
|
|
48
|
+
/// Receives the event payload (`.null` for a tap).
|
|
49
|
+
var _handler: ((_JSON) -> Void)? { get }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
extension _HostView {
|
|
53
|
+
var _content: [any View] { [] }
|
|
54
|
+
var _handler: ((_JSON) -> Void)? { nil }
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// MARK: - ViewBuilder
|
|
58
|
+
|
|
59
|
+
@resultBuilder
|
|
60
|
+
public enum ViewBuilder {
|
|
61
|
+
public static func buildBlock() -> EmptyView { EmptyView() }
|
|
62
|
+
|
|
63
|
+
public static func buildBlock<Content: View>(_ content: Content) -> Content { content }
|
|
64
|
+
|
|
65
|
+
public static func buildBlock<each Content: View>(
|
|
66
|
+
_ content: repeat each Content
|
|
67
|
+
) -> TupleView<(repeat each Content)> {
|
|
68
|
+
var children: [any View] = []
|
|
69
|
+
for child in repeat each content { children.append(child) }
|
|
70
|
+
return TupleView((repeat each content), children: children)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public static func buildExpression<Content: View>(_ content: Content) -> Content { content }
|
|
74
|
+
|
|
75
|
+
public static func buildOptional<Content: View>(_ content: Content?) -> Content? { content }
|
|
76
|
+
|
|
77
|
+
public static func buildEither<TrueContent: View, FalseContent: View>(
|
|
78
|
+
first: TrueContent
|
|
79
|
+
) -> _ConditionalContent<TrueContent, FalseContent> {
|
|
80
|
+
_ConditionalContent(storage: .trueContent(first))
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public static func buildEither<TrueContent: View, FalseContent: View>(
|
|
84
|
+
second: FalseContent
|
|
85
|
+
) -> _ConditionalContent<TrueContent, FalseContent> {
|
|
86
|
+
_ConditionalContent(storage: .falseContent(second))
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public static func buildLimitedAvailability<Content: View>(_ content: Content) -> AnyView {
|
|
90
|
+
AnyView(content)
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// MARK: - Structural views
|
|
95
|
+
|
|
96
|
+
public struct EmptyView: Sendable {
|
|
97
|
+
public init() {}
|
|
98
|
+
}
|
|
99
|
+
extension EmptyView: _PrimitiveView {}
|
|
100
|
+
extension EmptyView: _GroupView {
|
|
101
|
+
var _children: [any View] { [] }
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
public struct TupleView<T> {
|
|
105
|
+
public var value: T
|
|
106
|
+
let children: [any View]
|
|
107
|
+
|
|
108
|
+
init(_ value: T, children: [any View]) {
|
|
109
|
+
self.value = value
|
|
110
|
+
self.children = children
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
extension TupleView: _PrimitiveView {}
|
|
114
|
+
extension TupleView: _GroupView {
|
|
115
|
+
var _children: [any View] { children }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
public struct _ConditionalContent<TrueContent: View, FalseContent: View> {
|
|
119
|
+
enum Storage {
|
|
120
|
+
case trueContent(TrueContent)
|
|
121
|
+
case falseContent(FalseContent)
|
|
122
|
+
}
|
|
123
|
+
let storage: Storage
|
|
124
|
+
}
|
|
125
|
+
extension _ConditionalContent: _PrimitiveView {}
|
|
126
|
+
extension _ConditionalContent: _GroupView {
|
|
127
|
+
var _children: [any View] {
|
|
128
|
+
switch storage {
|
|
129
|
+
case .trueContent(let view): [view]
|
|
130
|
+
case .falseContent(let view): [view]
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
extension Optional: View where Wrapped: View {
|
|
136
|
+
public typealias Body = Never
|
|
137
|
+
public var body: Never { fatalError("Optional is a primitive view and has no body") }
|
|
138
|
+
}
|
|
139
|
+
// Unconditional: the marker only lets the trait lookups run (ViewTraits.swift).
|
|
140
|
+
extension Optional: _TraitBearing {}
|
|
141
|
+
extension Optional: _GroupView where Wrapped: View {
|
|
142
|
+
var _children: [any View] {
|
|
143
|
+
switch self {
|
|
144
|
+
case .some(let view): [view]
|
|
145
|
+
case .none: []
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// A type-erased view.
|
|
151
|
+
public struct AnyView {
|
|
152
|
+
let storage: any View
|
|
153
|
+
|
|
154
|
+
public init<V: View>(_ view: V) { storage = view }
|
|
155
|
+
public init<V: View>(erasing view: V) { storage = view }
|
|
156
|
+
}
|
|
157
|
+
extension AnyView: _PrimitiveView {}
|
|
158
|
+
extension AnyView: _GroupView {
|
|
159
|
+
var _children: [any View] { [storage] }
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/// Collects views without affecting layout.
|
|
163
|
+
public struct Group<Content: View> {
|
|
164
|
+
let content: Content
|
|
165
|
+
public init(@ViewBuilder content: () -> Content) { self.content = content() }
|
|
166
|
+
}
|
|
167
|
+
extension Group: _PrimitiveView {}
|
|
168
|
+
extension Group: _GroupView {
|
|
169
|
+
var _children: [any View] { [content] }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/// A view that computes views on demand from a collection, keyed by identity.
|
|
173
|
+
/// `Content` is unconstrained so that the same type can produce chart content
|
|
174
|
+
/// (`ForEach` inside a `Chart`, see Charts/ChartContent.swift); the `View`
|
|
175
|
+
/// conformance applies when `Content` is a view.
|
|
176
|
+
public struct ForEach<Data: RandomAccessCollection, ID: Hashable, Content> {
|
|
177
|
+
public let data: Data
|
|
178
|
+
let id: (Data.Element) -> ID
|
|
179
|
+
let content: (Data.Element) -> Content
|
|
180
|
+
|
|
181
|
+
init(_data data: Data, id: @escaping (Data.Element) -> ID, content: @escaping (Data.Element) -> Content) {
|
|
182
|
+
self.data = data
|
|
183
|
+
self.id = id
|
|
184
|
+
self.content = content
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
extension ForEach where Content: View {
|
|
189
|
+
public init(_ data: Data, id: KeyPath<Data.Element, ID>,
|
|
190
|
+
@ViewBuilder content: @escaping (Data.Element) -> Content) {
|
|
191
|
+
self.init(_data: data, id: { $0[keyPath: id] }, content: content)
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
extension ForEach where Content: View, Data.Element: Identifiable, ID == Data.Element.ID {
|
|
196
|
+
public init(_ data: Data, @ViewBuilder content: @escaping (Data.Element) -> Content) {
|
|
197
|
+
self.init(_data: data, id: { $0.id }, content: content)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
extension ForEach where Content: View, Data == Range<Int>, ID == Int {
|
|
202
|
+
public init(_ data: Range<Int>, @ViewBuilder content: @escaping (Int) -> Content) {
|
|
203
|
+
self.init(_data: data, id: { $0 }, content: content)
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
extension ForEach: View where Content: View {
|
|
208
|
+
public typealias Body = Never
|
|
209
|
+
}
|
|
210
|
+
extension ForEach: _PrimitiveView where Content: View {}
|
|
211
|
+
extension ForEach: _TraitBearing {}
|
|
212
|
+
extension ForEach: _GroupView where Content: View {
|
|
213
|
+
var _children: [any View] { data.map { content($0) } }
|
|
214
|
+
var _keys: [AnyHashable]? { data.map { AnyHashable(id($0)) } }
|
|
215
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/// A reusable modifier: `body(content:)` wraps the view it is applied to.
|
|
2
|
+
/// `@State` and `@Environment` properties declared on a modifier are managed
|
|
3
|
+
/// by the runtime like a view's (it reflects into the modifier of a
|
|
4
|
+
/// `ModifiedContent`).
|
|
5
|
+
@MainActor @preconcurrency
|
|
6
|
+
public protocol ViewModifier {
|
|
7
|
+
associatedtype Body: View
|
|
8
|
+
typealias Content = _ViewModifier_Content<Self>
|
|
9
|
+
@ViewBuilder func body(content: Content) -> Body
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/// The view a modifier's `body(content:)` receives: the modified view, erased.
|
|
13
|
+
public struct _ViewModifier_Content<Modifier: ViewModifier> {
|
|
14
|
+
let view: AnyView
|
|
15
|
+
}
|
|
16
|
+
extension _ViewModifier_Content: _PrimitiveView {}
|
|
17
|
+
extension _ViewModifier_Content: _GroupView {
|
|
18
|
+
var _children: [any View] { [view] }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// A view with a `ViewModifier` applied.
|
|
22
|
+
public struct ModifiedContent<Content: View, Modifier: ViewModifier>: View {
|
|
23
|
+
public var content: Content
|
|
24
|
+
public var modifier: Modifier
|
|
25
|
+
|
|
26
|
+
public init(content: Content, modifier: Modifier) {
|
|
27
|
+
self.content = content
|
|
28
|
+
self.modifier = modifier
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public var body: some View {
|
|
32
|
+
modifier.body(content: _ViewModifier_Content(view: AnyView(content)))
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
nonisolated extension View {
|
|
37
|
+
@MainActor
|
|
38
|
+
public func modifier<M: ViewModifier>(_ modifier: M) -> ModifiedContent<Self, M> {
|
|
39
|
+
ModifiedContent(content: self, modifier: modifier)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
extension ModifiedContent: _HoldsModifier {}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/// `.visualEffect { content, proxy in … }` (docs/ops-protocol.md, "Phase 12").
|
|
2
|
+
/// The closure's effects (offset, scale, rotation, opacity, blur, …) apply as
|
|
3
|
+
/// the matching view modifiers. The proxy is empty: the browser does not
|
|
4
|
+
/// report a view's frame on every scroll step, so an effect that reads
|
|
5
|
+
/// `proxy.frame(in: .global)` sees a zero rectangle and the view renders
|
|
6
|
+
/// without that part of the effect. Compile-level support, honestly limited.
|
|
7
|
+
|
|
8
|
+
public protocol VisualEffect {}
|
|
9
|
+
|
|
10
|
+
/// The chained effects, as style changes on the content.
|
|
11
|
+
protocol _VisualEffectChaining {
|
|
12
|
+
var _effects: [(inout _Style) -> Void] { get }
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public struct EmptyVisualEffect: VisualEffect, _VisualEffectChaining {
|
|
16
|
+
var _effects: [(inout _Style) -> Void] { [] }
|
|
17
|
+
public init() {}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public struct _VisualEffectChain: VisualEffect, _VisualEffectChaining {
|
|
21
|
+
var _effects: [(inout _Style) -> Void]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
extension VisualEffect {
|
|
25
|
+
func _adding(_ effect: @escaping (inout _Style) -> Void) -> _VisualEffectChain {
|
|
26
|
+
_VisualEffectChain(_effects: ((self as? _VisualEffectChaining)?._effects ?? []) + [effect])
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public func offset(x: CGFloat = 0, y: CGFloat = 0) -> _VisualEffectChain {
|
|
30
|
+
_adding { $0.extras["offset"] = .object(["x": .number(x), "y": .number(y)]) }
|
|
31
|
+
}
|
|
32
|
+
public func offset(_ offset: CGSize) -> _VisualEffectChain { self.offset(x: offset.width, y: offset.height) }
|
|
33
|
+
public func scaleEffect(_ scale: CGFloat, anchor: UnitPoint = .center) -> _VisualEffectChain {
|
|
34
|
+
scaleEffect(x: scale, y: scale, anchor: anchor)
|
|
35
|
+
}
|
|
36
|
+
public func scaleEffect(_ scale: CGSize, anchor: UnitPoint = .center) -> _VisualEffectChain {
|
|
37
|
+
scaleEffect(x: scale.width, y: scale.height, anchor: anchor)
|
|
38
|
+
}
|
|
39
|
+
public func scaleEffect(x: CGFloat = 1, y: CGFloat = 1, anchor: UnitPoint = .center) -> _VisualEffectChain {
|
|
40
|
+
_adding {
|
|
41
|
+
$0.extras["scale"] = .object(["x": .number(x), "y": .number(y)])
|
|
42
|
+
$0.extras["scaleAnchor"] = anchor._json
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
public func rotationEffect(_ angle: Angle, anchor: UnitPoint = .center) -> _VisualEffectChain {
|
|
46
|
+
_adding {
|
|
47
|
+
$0.extras["rotation"] = .number(angle.degrees)
|
|
48
|
+
$0.extras["rotationAnchor"] = anchor._json
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
public func rotation3DEffect(_ angle: Angle, axis: (x: CGFloat, y: CGFloat, z: CGFloat),
|
|
52
|
+
anchor: UnitPoint = .center, anchorZ: CGFloat = 0,
|
|
53
|
+
perspective: CGFloat = 1) -> _VisualEffectChain {
|
|
54
|
+
_adding {
|
|
55
|
+
$0.extras["rotation3D"] = .object([
|
|
56
|
+
"angle": .number(angle.degrees),
|
|
57
|
+
"axis": .object(["x": .number(axis.x), "y": .number(axis.y), "z": .number(axis.z)]),
|
|
58
|
+
"anchor": anchor._json,
|
|
59
|
+
"perspective": .number(perspective),
|
|
60
|
+
])
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
public func opacity(_ opacity: Double) -> _VisualEffectChain { _adding { $0.opacity = opacity } }
|
|
64
|
+
public func blur(radius: CGFloat, opaque: Bool = false) -> _VisualEffectChain { _adding { $0.extras["blur"] = .number(radius) } }
|
|
65
|
+
/// Accepted; the renderer has no filter for these yet.
|
|
66
|
+
public func brightness(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
|
|
67
|
+
public func contrast(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
|
|
68
|
+
public func saturation(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
|
|
69
|
+
public func grayscale(_ amount: Double) -> _VisualEffectChain { _adding { _ in } }
|
|
70
|
+
public func hueRotation(_ angle: Angle) -> _VisualEffectChain { _adding { _ in } }
|
|
71
|
+
public func colorEffect<S: ShapeStyle>(_ shader: S) -> _VisualEffectChain { _adding { _ in } }
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
nonisolated extension View {
|
|
75
|
+
public func visualEffect(_ effect: @escaping (EmptyVisualEffect, GeometryProxy) -> some VisualEffect) -> some View {
|
|
76
|
+
let result = effect(EmptyVisualEffect(), GeometryProxy(size: .zero))
|
|
77
|
+
let effects = (result as? _VisualEffectChaining)?._effects ?? []
|
|
78
|
+
return _styled { style in
|
|
79
|
+
for apply in effects { apply(&style) }
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// MARK: - Scroll transitions
|
|
85
|
+
|
|
86
|
+
/// Where a view is in its scroll view, for `.scrollTransition`: about to
|
|
87
|
+
/// enter at the top leading edge, fully visible (`identity`), or leaving at
|
|
88
|
+
/// the bottom trailing edge.
|
|
89
|
+
public enum ScrollTransitionPhase: Hashable, Sendable {
|
|
90
|
+
case topLeading, identity, bottomTrailing
|
|
91
|
+
|
|
92
|
+
public var isIdentity: Bool { self == .identity }
|
|
93
|
+
|
|
94
|
+
/// -1 at the top leading edge, 0 when visible, 1 at the bottom trailing edge.
|
|
95
|
+
public var value: Double {
|
|
96
|
+
switch self {
|
|
97
|
+
case .topLeading: -1
|
|
98
|
+
case .identity: 0
|
|
99
|
+
case .bottomTrailing: 1
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/// When a scroll transition applies its effect; accepted.
|
|
105
|
+
public struct ScrollTransitionConfiguration: Sendable {
|
|
106
|
+
public static let identity = ScrollTransitionConfiguration()
|
|
107
|
+
public static func animated(_ animation: Animation = .default) -> ScrollTransitionConfiguration { .init() }
|
|
108
|
+
public static let animated = ScrollTransitionConfiguration()
|
|
109
|
+
public static func interactive(timingCurve: UnitCurve = .easeInOut) -> ScrollTransitionConfiguration { .init() }
|
|
110
|
+
public static let interactive = ScrollTransitionConfiguration()
|
|
111
|
+
public func threshold(_ threshold: ScrollTransitionConfiguration.Threshold) -> ScrollTransitionConfiguration { self }
|
|
112
|
+
public func animation(_ animation: Animation) -> ScrollTransitionConfiguration { self }
|
|
113
|
+
|
|
114
|
+
public struct Threshold: Sendable {
|
|
115
|
+
public static let visible = Threshold()
|
|
116
|
+
public static let hidden = Threshold()
|
|
117
|
+
public static var centered: Threshold { Threshold() }
|
|
118
|
+
public static func visible(_ amount: Double) -> Threshold { Threshold() }
|
|
119
|
+
public func interpolated(towards other: Threshold, amount: Double) -> Threshold { self }
|
|
120
|
+
public func inset(by distance: Double) -> Threshold { self }
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
nonisolated extension View {
|
|
125
|
+
/// The effect for a view as it scrolls in and out. The browser does not
|
|
126
|
+
/// report where a view is on every scroll step, so the view shows the
|
|
127
|
+
/// effect of the `identity` phase: as it is when fully visible.
|
|
128
|
+
public func scrollTransition(_ configuration: ScrollTransitionConfiguration = .interactive, axis: Axis? = nil,
|
|
129
|
+
transition: @escaping (EmptyVisualEffect, ScrollTransitionPhase) -> some VisualEffect) -> some View {
|
|
130
|
+
let result = transition(EmptyVisualEffect(), .identity)
|
|
131
|
+
let effects = (result as? _VisualEffectChaining)?._effects ?? []
|
|
132
|
+
return _styled { style in
|
|
133
|
+
for apply in effects { apply(&style) }
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public func scrollTransition(topLeading: ScrollTransitionConfiguration, bottomTrailing: ScrollTransitionConfiguration, axis: Axis? = nil,
|
|
138
|
+
transition: @escaping (EmptyVisualEffect, ScrollTransitionPhase) -> some VisualEffect) -> some View {
|
|
139
|
+
scrollTransition(topLeading, axis: axis, transition: transition)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/// A timing curve over 0…1 (iOS 17), as scroll transitions take; the
|
|
144
|
+
/// browser's transitions do not use it.
|
|
145
|
+
public struct UnitCurve: Hashable, Sendable {
|
|
146
|
+
let name: String
|
|
147
|
+
public static let linear = UnitCurve(name: "linear")
|
|
148
|
+
public static let easeIn = UnitCurve(name: "easeIn")
|
|
149
|
+
public static let easeOut = UnitCurve(name: "easeOut")
|
|
150
|
+
public static let easeInOut = UnitCurve(name: "easeInOut")
|
|
151
|
+
public static let circularEaseIn = UnitCurve(name: "circularEaseIn")
|
|
152
|
+
public static let circularEaseOut = UnitCurve(name: "circularEaseOut")
|
|
153
|
+
public static let circularEaseInOut = UnitCurve(name: "circularEaseInOut")
|
|
154
|
+
public static func bezier(startControlPoint: UnitPoint, endControlPoint: UnitPoint) -> UnitCurve { UnitCurve(name: "bezier") }
|
|
155
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// Scene windows: `@Environment(\.openWindow)`, `\.dismissWindow` and
|
|
2
|
+
// `\.supportsMultipleWindows`. The page is the app's one window, so it
|
|
3
|
+
// reports no support for more, opening a window does nothing, and dismissing
|
|
4
|
+
// one does nothing either.
|
|
5
|
+
|
|
6
|
+
/// Opens a window of a `WindowGroup`. Does nothing: the page is one window.
|
|
7
|
+
public struct OpenWindowAction: Sendable {
|
|
8
|
+
@MainActor public func callAsFunction(id: String) {}
|
|
9
|
+
@MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(value: D) {}
|
|
10
|
+
@MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(id: String, value: D) {}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/// Dismisses a window. Does nothing: the page is one window.
|
|
14
|
+
public struct DismissWindowAction: Sendable {
|
|
15
|
+
@MainActor public func callAsFunction() {}
|
|
16
|
+
@MainActor public func callAsFunction(id: String) {}
|
|
17
|
+
@MainActor public func callAsFunction<D: Decodable & Encodable & Hashable>(value: D) {}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
extension EnvironmentValues {
|
|
21
|
+
public var openWindow: OpenWindowAction { OpenWindowAction() }
|
|
22
|
+
public var dismissWindow: DismissWindowAction { DismissWindowAction() }
|
|
23
|
+
/// False: the page is one window.
|
|
24
|
+
public var supportsMultipleWindows: Bool { false }
|
|
25
|
+
}
|