@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,232 @@
|
|
|
1
|
+
/// `Animatable`, `GeometryEffect`, `ProjectionTransform` and `AnimatableModifier`.
|
|
2
|
+
///
|
|
3
|
+
/// SwiftUI animates a type's `animatableData` by interpolating it frame by
|
|
4
|
+
/// frame and evaluating the view (or effect) at each step. The browser
|
|
5
|
+
/// animates the styles a pass sends (Phase 3), not Swift values, so here a
|
|
6
|
+
/// modifier or effect is evaluated at its final `animatableData` only: the
|
|
7
|
+
/// page animates the change between the transform the old value gave and the
|
|
8
|
+
/// one the new value gives. An effect whose start and end look the same (a
|
|
9
|
+
/// shake that returns to rest after each whole unit) does not move.
|
|
10
|
+
///
|
|
11
|
+
/// A `GeometryEffect`'s `effectValue(size:)` is asked with a zero size: the
|
|
12
|
+
/// Swift side does not know the view's laid-out size (as for `.visualEffect`'s
|
|
13
|
+
/// proxy). Its transform is drawn as an offset, a rotation and a scale about
|
|
14
|
+
/// the view's top-leading corner, the origin SwiftUI's projection uses; a
|
|
15
|
+
/// shear and the perspective row are not drawn.
|
|
16
|
+
|
|
17
|
+
// MARK: - Vector arithmetic
|
|
18
|
+
|
|
19
|
+
/// A value SwiftUI can interpolate: it adds, subtracts and scales.
|
|
20
|
+
public protocol VectorArithmetic: AdditiveArithmetic {
|
|
21
|
+
mutating func scale(by rhs: Double)
|
|
22
|
+
var magnitudeSquared: Double { get }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
extension VectorArithmetic {
|
|
26
|
+
/// The value scaled by `rhs`.
|
|
27
|
+
public func scaled(by rhs: Double) -> Self {
|
|
28
|
+
var copy = self
|
|
29
|
+
copy.scale(by: rhs)
|
|
30
|
+
return copy
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// The value `amount` of the way from `self` to `other`.
|
|
34
|
+
public func interpolated(towards other: Self, amount: Double) -> Self {
|
|
35
|
+
self + (other - self).scaled(by: amount)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
extension Double: VectorArithmetic {
|
|
40
|
+
public mutating func scale(by rhs: Double) { self *= rhs }
|
|
41
|
+
public var magnitudeSquared: Double { self * self }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
extension Float: VectorArithmetic {
|
|
45
|
+
public mutating func scale(by rhs: Double) { self *= Float(rhs) }
|
|
46
|
+
public var magnitudeSquared: Double { Double(self * self) }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// No animatable data: the default of an `Animatable` type.
|
|
50
|
+
public struct EmptyAnimatableData: VectorArithmetic, Hashable, Sendable {
|
|
51
|
+
public init() {}
|
|
52
|
+
public static var zero: EmptyAnimatableData { EmptyAnimatableData() }
|
|
53
|
+
public static func + (lhs: Self, rhs: Self) -> Self { lhs }
|
|
54
|
+
public static func - (lhs: Self, rhs: Self) -> Self { lhs }
|
|
55
|
+
public mutating func scale(by rhs: Double) {}
|
|
56
|
+
public var magnitudeSquared: Double { 0 }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/// Two animatable values interpolated together.
|
|
60
|
+
public struct AnimatablePair<First: VectorArithmetic, Second: VectorArithmetic>: VectorArithmetic {
|
|
61
|
+
public var first: First
|
|
62
|
+
public var second: Second
|
|
63
|
+
|
|
64
|
+
public init(_ first: First, _ second: Second) {
|
|
65
|
+
self.first = first
|
|
66
|
+
self.second = second
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public static var zero: Self { Self(.zero, .zero) }
|
|
70
|
+
public static func + (lhs: Self, rhs: Self) -> Self { Self(lhs.first + rhs.first, lhs.second + rhs.second) }
|
|
71
|
+
public static func - (lhs: Self, rhs: Self) -> Self { Self(lhs.first - rhs.first, lhs.second - rhs.second) }
|
|
72
|
+
public mutating func scale(by rhs: Double) {
|
|
73
|
+
first.scale(by: rhs)
|
|
74
|
+
second.scale(by: rhs)
|
|
75
|
+
}
|
|
76
|
+
public var magnitudeSquared: Double { first.magnitudeSquared + second.magnitudeSquared }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
extension AnimatablePair: Equatable {}
|
|
80
|
+
extension AnimatablePair: Sendable where First: Sendable, Second: Sendable {}
|
|
81
|
+
|
|
82
|
+
// MARK: - Animatable
|
|
83
|
+
|
|
84
|
+
/// A type whose `animatableData` SwiftUI interpolates. In the browser a
|
|
85
|
+
/// modifier or effect is evaluated at the final value (see the file comment);
|
|
86
|
+
/// a custom `Shape` sends its path along the way (Shape.swift).
|
|
87
|
+
public protocol Animatable {
|
|
88
|
+
associatedtype AnimatableData: VectorArithmetic = EmptyAnimatableData
|
|
89
|
+
var animatableData: AnimatableData { get set }
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
extension Animatable where AnimatableData == EmptyAnimatableData {
|
|
93
|
+
public var animatableData: EmptyAnimatableData {
|
|
94
|
+
get { EmptyAnimatableData() }
|
|
95
|
+
set {}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
extension CGPoint: Animatable {
|
|
100
|
+
public var animatableData: AnimatablePair<CGFloat, CGFloat> {
|
|
101
|
+
get { AnimatablePair(x, y) }
|
|
102
|
+
set { (x, y) = (newValue.first, newValue.second) }
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
extension CGSize: Animatable {
|
|
107
|
+
public var animatableData: AnimatablePair<CGFloat, CGFloat> {
|
|
108
|
+
get { AnimatablePair(width, height) }
|
|
109
|
+
set { (width, height) = (newValue.first, newValue.second) }
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
extension CGRect: Animatable {
|
|
114
|
+
public var animatableData: AnimatablePair<CGPoint.AnimatableData, CGSize.AnimatableData> {
|
|
115
|
+
get { AnimatablePair(origin.animatableData, size.animatableData) }
|
|
116
|
+
set { (origin.animatableData, size.animatableData) = (newValue.first, newValue.second) }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/// A modifier whose `animatableData` is interpolated (deprecated in SwiftUI
|
|
121
|
+
/// for `Animatable` & `ViewModifier`). Its body runs with the final value.
|
|
122
|
+
public protocol AnimatableModifier: Animatable, ViewModifier {}
|
|
123
|
+
|
|
124
|
+
// MARK: - Projection transforms
|
|
125
|
+
|
|
126
|
+
/// A 3×3 projective transform, applied to row vectors as in Core Animation:
|
|
127
|
+
/// (x, y, 1) × m.
|
|
128
|
+
public struct ProjectionTransform: Equatable, Sendable {
|
|
129
|
+
public var m11: CGFloat = 1, m12: CGFloat = 0, m13: CGFloat = 0
|
|
130
|
+
public var m21: CGFloat = 0, m22: CGFloat = 1, m23: CGFloat = 0
|
|
131
|
+
public var m31: CGFloat = 0, m32: CGFloat = 0, m33: CGFloat = 1
|
|
132
|
+
|
|
133
|
+
/// The identity.
|
|
134
|
+
public init() {}
|
|
135
|
+
|
|
136
|
+
public var isIdentity: Bool { self == ProjectionTransform() }
|
|
137
|
+
/// Whether the perspective column is (0, 0, 1).
|
|
138
|
+
public var isAffine: Bool { m13 == 0 && m23 == 0 && m33 == 1 }
|
|
139
|
+
|
|
140
|
+
/// The transform of `self` followed by `rhs`.
|
|
141
|
+
public func concatenating(_ rhs: ProjectionTransform) -> ProjectionTransform {
|
|
142
|
+
var r = ProjectionTransform()
|
|
143
|
+
r.m11 = m11 * rhs.m11 + m12 * rhs.m21 + m13 * rhs.m31
|
|
144
|
+
r.m12 = m11 * rhs.m12 + m12 * rhs.m22 + m13 * rhs.m32
|
|
145
|
+
r.m13 = m11 * rhs.m13 + m12 * rhs.m23 + m13 * rhs.m33
|
|
146
|
+
r.m21 = m21 * rhs.m11 + m22 * rhs.m21 + m23 * rhs.m31
|
|
147
|
+
r.m22 = m21 * rhs.m12 + m22 * rhs.m22 + m23 * rhs.m32
|
|
148
|
+
r.m23 = m21 * rhs.m13 + m22 * rhs.m23 + m23 * rhs.m33
|
|
149
|
+
r.m31 = m31 * rhs.m11 + m32 * rhs.m21 + m33 * rhs.m31
|
|
150
|
+
r.m32 = m31 * rhs.m12 + m32 * rhs.m22 + m33 * rhs.m32
|
|
151
|
+
r.m33 = m31 * rhs.m13 + m32 * rhs.m23 + m33 * rhs.m33
|
|
152
|
+
return r
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/// The offset, rotation (radians) and scale whose composition about the
|
|
156
|
+
/// origin, scale first, gives the affine part; nil for a shear.
|
|
157
|
+
var _decomposed: (tx: CGFloat, ty: CGFloat, angle: CGFloat, sx: CGFloat, sy: CGFloat)? {
|
|
158
|
+
let sx = (m11 * m11 + m12 * m12).squareRoot()
|
|
159
|
+
guard sx > 0 else { return nil }
|
|
160
|
+
let angle = _atan2(m12, m11)
|
|
161
|
+
let sy = (m11 * m22 - m12 * m21) / sx
|
|
162
|
+
// Without a shear the second row is the first turned a quarter, scaled by sy / sx.
|
|
163
|
+
let expected21 = -m12 / sx * sy, expected22 = m11 / sx * sy
|
|
164
|
+
guard abs(m21 - expected21) < 1e-9, abs(m22 - expected22) < 1e-9 else { return nil }
|
|
165
|
+
return (m31, m32, angle, sx, sy)
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/// atan2 without Foundation (the shim does not import it).
|
|
170
|
+
func _atan2(_ y: CGFloat, _ x: CGFloat) -> CGFloat {
|
|
171
|
+
if x == 0 { return y > 0 ? .pi / 2 : (y < 0 ? -.pi / 2 : 0) }
|
|
172
|
+
var angle = _atan(y / x)
|
|
173
|
+
if x < 0 { angle += y >= 0 ? .pi : -.pi }
|
|
174
|
+
return angle
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
/// atan by argument reduction (|z| ≤ tan(π/12)) and its series.
|
|
178
|
+
func _atan(_ z: CGFloat) -> CGFloat {
|
|
179
|
+
if z < 0 { return -_atan(-z) }
|
|
180
|
+
if z > 1 { return .pi / 2 - _atan(1 / z) }
|
|
181
|
+
let tan15 = 0.2679491924311227
|
|
182
|
+
if z > tan15 {
|
|
183
|
+
// atan(z) = π/6 + atan((z√3 − 1) / (z + √3))
|
|
184
|
+
let root3 = 1.7320508075688772
|
|
185
|
+
return .pi / 6 + _atan((z * root3 - 1) / (z + root3))
|
|
186
|
+
}
|
|
187
|
+
var term = z, sum = z
|
|
188
|
+
let z2 = z * z
|
|
189
|
+
for n in 1..<12 {
|
|
190
|
+
term *= -z2
|
|
191
|
+
sum += term / CGFloat(2 * n + 1)
|
|
192
|
+
}
|
|
193
|
+
return sum
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
nonisolated extension View {
|
|
197
|
+
/// Draws the view through `transform` (its affine part: offset, rotation
|
|
198
|
+
/// and scale about the top-leading corner; a shear draws untransformed).
|
|
199
|
+
public func projectionEffect(_ transform: ProjectionTransform) -> some View {
|
|
200
|
+
_styled { style in
|
|
201
|
+
guard !transform.isIdentity, let parts = transform._decomposed else { return }
|
|
202
|
+
// Differences below a billionth of a point (sin(4π)) are rounding, not movement.
|
|
203
|
+
let negligible = 1e-9
|
|
204
|
+
if abs(parts.tx) > negligible || abs(parts.ty) > negligible {
|
|
205
|
+
style.extras["offset"] = .object(["x": .number(parts.tx), "y": .number(parts.ty)])
|
|
206
|
+
}
|
|
207
|
+
if abs(parts.angle) > negligible {
|
|
208
|
+
style.extras["rotation"] = .number(parts.angle * 180 / .pi)
|
|
209
|
+
style.extras["rotationAnchor"] = UnitPoint.topLeading._json
|
|
210
|
+
}
|
|
211
|
+
if abs(parts.sx - 1) > negligible || abs(parts.sy - 1) > negligible {
|
|
212
|
+
style.extras["scale"] = .object(["x": .number(parts.sx), "y": .number(parts.sy)])
|
|
213
|
+
style.extras["scaleAnchor"] = UnitPoint.topLeading._json
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
// MARK: - Geometry effects
|
|
220
|
+
|
|
221
|
+
/// A modifier that moves its view with a projection transform. Its body
|
|
222
|
+
/// draws `effectValue(size:)` (asked with a zero size, at the final
|
|
223
|
+
/// `animatableData`; see the file comment).
|
|
224
|
+
public protocol GeometryEffect: Animatable, ViewModifier {
|
|
225
|
+
func effectValue(size: CGSize) -> ProjectionTransform
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
extension GeometryEffect {
|
|
229
|
+
public func body(content: Content) -> some View {
|
|
230
|
+
content.projectionEffect(effectValue(size: .zero))
|
|
231
|
+
}
|
|
232
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// CoreGraphics types, provided by the shim because browser builds have no
|
|
2
|
+
// Foundation (see Geometry.swift).
|
|
3
|
+
|
|
4
|
+
public struct CGPoint: Equatable, Hashable, Sendable {
|
|
5
|
+
public var x: CGFloat
|
|
6
|
+
public var y: CGFloat
|
|
7
|
+
public init(x: CGFloat, y: CGFloat) { self.x = x; self.y = y }
|
|
8
|
+
public init() { self.init(x: 0, y: 0) }
|
|
9
|
+
public static let zero = CGPoint()
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/// A normalized point in a view's bounds; `(0, 0)` is top leading.
|
|
13
|
+
public struct UnitPoint: Equatable, Hashable, Sendable {
|
|
14
|
+
public var x: CGFloat
|
|
15
|
+
public var y: CGFloat
|
|
16
|
+
|
|
17
|
+
public init(x: CGFloat, y: CGFloat) {
|
|
18
|
+
self.x = x
|
|
19
|
+
self.y = y
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public init() { self.init(x: 0, y: 0) }
|
|
23
|
+
|
|
24
|
+
public static let zero = UnitPoint(x: 0, y: 0)
|
|
25
|
+
public static let center = UnitPoint(x: 0.5, y: 0.5)
|
|
26
|
+
public static let leading = UnitPoint(x: 0, y: 0.5)
|
|
27
|
+
public static let trailing = UnitPoint(x: 1, y: 0.5)
|
|
28
|
+
public static let top = UnitPoint(x: 0.5, y: 0)
|
|
29
|
+
public static let bottom = UnitPoint(x: 0.5, y: 1)
|
|
30
|
+
public static let topLeading = UnitPoint(x: 0, y: 0)
|
|
31
|
+
public static let topTrailing = UnitPoint(x: 1, y: 0)
|
|
32
|
+
public static let bottomLeading = UnitPoint(x: 0, y: 1)
|
|
33
|
+
public static let bottomTrailing = UnitPoint(x: 1, y: 1)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public struct CGSize: Equatable, Hashable, Sendable {
|
|
37
|
+
public var width: CGFloat
|
|
38
|
+
public var height: CGFloat
|
|
39
|
+
public init(width: CGFloat, height: CGFloat) { self.width = width; self.height = height }
|
|
40
|
+
public init() { self.init(width: 0, height: 0) }
|
|
41
|
+
public static let zero = CGSize()
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public struct CGRect: Equatable, Hashable, Sendable {
|
|
45
|
+
public var origin: CGPoint
|
|
46
|
+
public var size: CGSize
|
|
47
|
+
public init(origin: CGPoint, size: CGSize) { self.origin = origin; self.size = size }
|
|
48
|
+
public init(x: CGFloat, y: CGFloat, width: CGFloat, height: CGFloat) {
|
|
49
|
+
self.init(origin: CGPoint(x: x, y: y), size: CGSize(width: width, height: height))
|
|
50
|
+
}
|
|
51
|
+
public init() { self.init(origin: .zero, size: .zero) }
|
|
52
|
+
public static let zero = CGRect()
|
|
53
|
+
public var minX: CGFloat { origin.x }
|
|
54
|
+
public var minY: CGFloat { origin.y }
|
|
55
|
+
public var midX: CGFloat { origin.x + size.width / 2 }
|
|
56
|
+
public var midY: CGFloat { origin.y + size.height / 2 }
|
|
57
|
+
public var maxX: CGFloat { origin.x + size.width }
|
|
58
|
+
public var maxY: CGFloat { origin.y + size.height }
|
|
59
|
+
public var width: CGFloat { size.width }
|
|
60
|
+
public var height: CGFloat { size.height }
|
|
61
|
+
public var isEmpty: Bool { size.width <= 0 || size.height <= 0 }
|
|
62
|
+
|
|
63
|
+
/// Shrinks the rectangle by `dx` on each horizontal side and `dy` on each vertical side.
|
|
64
|
+
public func insetBy(dx: CGFloat, dy: CGFloat) -> CGRect {
|
|
65
|
+
CGRect(x: origin.x + dx, y: origin.y + dy, width: size.width - 2 * dx, height: size.height - 2 * dy)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public func offsetBy(dx: CGFloat, dy: CGFloat) -> CGRect {
|
|
69
|
+
CGRect(origin: CGPoint(x: origin.x + dx, y: origin.y + dy), size: size)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public func contains(_ point: CGPoint) -> Bool {
|
|
73
|
+
point.x >= minX && point.x < maxX && point.y >= minY && point.y < maxY
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/// The size the renderer laid a `GeometryReader` out at.
|
|
78
|
+
public struct GeometryProxy {
|
|
79
|
+
public let size: CGSize
|
|
80
|
+
|
|
81
|
+
public func frame(in coordinateSpace: CoordinateSpace) -> CGRect {
|
|
82
|
+
CGRect(origin: .zero, size: size)
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// The bounds of the space named `coordinateSpace` around this view (iOS
|
|
86
|
+
/// 17), as the view sees them. The browser reports a view's own size
|
|
87
|
+
/// only, so there are none (nil, as outside such a space).
|
|
88
|
+
public func bounds(of coordinateSpace: CoordinateSpace) -> CGRect? {
|
|
89
|
+
coordinateSpace == .local ? CGRect(origin: .zero, size: size) : nil
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public enum CoordinateSpace: Hashable {
|
|
94
|
+
case global, local
|
|
95
|
+
case named(AnyHashable)
|
|
96
|
+
|
|
97
|
+
public var isGlobal: Bool { self == .global }
|
|
98
|
+
public var isLocal: Bool { self == .local }
|
|
99
|
+
|
|
100
|
+
/// The nearest scroll view's space (iOS 17).
|
|
101
|
+
public static var scrollView: CoordinateSpace { .named("_SwiftBrowser.scrollView") }
|
|
102
|
+
public static func scrollView(axis: Axis) -> CoordinateSpace { scrollView }
|
|
103
|
+
}
|
|
104
|
+
/// `AnyHashable` is not `Sendable`; names are value types in practice.
|
|
105
|
+
extension CoordinateSpace: @unchecked Sendable {}
|
|
106
|
+
|
|
107
|
+
nonisolated extension View {
|
|
108
|
+
/// Names a coordinate space; accepted for source compatibility (geometry
|
|
109
|
+
/// is always reported in the view's own box).
|
|
110
|
+
public func coordinateSpace<T: Hashable>(name: T) -> some View { self }
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
protocol _GeometryReading: _TraitBearing {
|
|
114
|
+
func _content(for size: CGSize) -> any View
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// A container that reports its size to its content. The size arrives from
|
|
118
|
+
/// the renderer after layout, so the content renders once at zero size and
|
|
119
|
+
/// again with the real size.
|
|
120
|
+
public struct GeometryReader<Content: View> {
|
|
121
|
+
let content: (GeometryProxy) -> Content
|
|
122
|
+
|
|
123
|
+
public init(@ViewBuilder content: @escaping (GeometryProxy) -> Content) {
|
|
124
|
+
self.content = content
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
extension GeometryReader: _PrimitiveView {}
|
|
128
|
+
extension GeometryReader: _HostView {
|
|
129
|
+
var _kind: String { "geometry" }
|
|
130
|
+
func _props(in environment: EnvironmentValues) -> _JSON { .object([:]) }
|
|
131
|
+
// The runtime produces the content from the last reported size.
|
|
132
|
+
}
|
|
133
|
+
extension GeometryReader: _GeometryReading {
|
|
134
|
+
func _content(for size: CGSize) -> any View { content(GeometryProxy(size: size)) }
|
|
135
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// `@GestureState` and `Gesture.updating(_:body:)`: state that a gesture
|
|
2
|
+
// sets while it runs and that returns to its initial value when it ends. It
|
|
3
|
+
// is stored like `@State` (so it survives re-renders and a change re-renders
|
|
4
|
+
// the view); `updating` sets it from the gesture's changed events and resets
|
|
5
|
+
// it on the ended event. The transaction the body may set is ignored, and a
|
|
6
|
+
// cancelled gesture resets like an ended one.
|
|
7
|
+
|
|
8
|
+
@propertyWrapper
|
|
9
|
+
public struct GestureState<Value>: DynamicProperty {
|
|
10
|
+
let state: State<Value>
|
|
11
|
+
let initial: Value
|
|
12
|
+
|
|
13
|
+
public init(wrappedValue: Value) {
|
|
14
|
+
state = State(wrappedValue: wrappedValue)
|
|
15
|
+
initial = wrappedValue
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public init(initialValue: Value) {
|
|
19
|
+
self.init(wrappedValue: initialValue)
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
public init(wrappedValue: Value, resetTransaction: Transaction) {
|
|
23
|
+
self.init(wrappedValue: wrappedValue)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public init(wrappedValue: Value, reset: @escaping (Value, inout Transaction) -> Void) {
|
|
27
|
+
self.init(wrappedValue: wrappedValue)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public var wrappedValue: Value { state.wrappedValue }
|
|
31
|
+
|
|
32
|
+
public var projectedValue: GestureState<Value> { self }
|
|
33
|
+
|
|
34
|
+
/// Sets the stored value (`updating`'s body result).
|
|
35
|
+
func _set(_ value: Value) { state.wrappedValue = value }
|
|
36
|
+
|
|
37
|
+
func _reset() { state.wrappedValue = initial }
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
extension GestureState where Value: ExpressibleByNilLiteral {
|
|
41
|
+
public init(resetTransaction: Transaction = Transaction()) {
|
|
42
|
+
self.init(wrappedValue: nil)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
extension GestureState: _StateProperty {
|
|
47
|
+
var _box: any _AnyStateBox { state.box }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
extension Gesture {
|
|
51
|
+
/// Runs `body` with each changed value to update `state`, which returns
|
|
52
|
+
/// to its initial value when the gesture ends.
|
|
53
|
+
@MainActor
|
|
54
|
+
public func updating<State>(_ state: GestureState<State>,
|
|
55
|
+
body: @escaping (Value, inout State, inout Transaction) -> Void) -> _ModifiedGesture<Self> {
|
|
56
|
+
let changed: @MainActor (Value) -> Void = { value in
|
|
57
|
+
var current = state.wrappedValue
|
|
58
|
+
var transaction = Transaction()
|
|
59
|
+
body(value, ¤t, &transaction)
|
|
60
|
+
state._set(current)
|
|
61
|
+
}
|
|
62
|
+
let ended: @MainActor (Value) -> Void = { _ in state._reset() }
|
|
63
|
+
return _ModifiedGesture(_config: Self._adding(to: _config, changed: changed, ended: ended))
|
|
64
|
+
}
|
|
65
|
+
}
|