@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,313 @@
|
|
|
1
|
+
/// How `aspectRatio` fits content into the proposed space.
|
|
2
|
+
public enum ContentMode: Hashable, Sendable {
|
|
3
|
+
case fit, fill
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/// The style a `styled` element applies to the box around its child.
|
|
7
|
+
/// See docs/ops-protocol.md.
|
|
8
|
+
struct _Style: Equatable {
|
|
9
|
+
struct Frame: Equatable {
|
|
10
|
+
var width: CGFloat?
|
|
11
|
+
var height: CGFloat?
|
|
12
|
+
var minWidth: CGFloat?
|
|
13
|
+
var maxWidth: CGFloat?
|
|
14
|
+
var minHeight: CGFloat?
|
|
15
|
+
var maxHeight: CGFloat?
|
|
16
|
+
var alignment: Alignment = .center
|
|
17
|
+
|
|
18
|
+
var _json: _JSON {
|
|
19
|
+
func dimension(_ value: CGFloat?) -> _JSON? {
|
|
20
|
+
guard let value else { return nil }
|
|
21
|
+
return value == .infinity ? .string("infinity") : .number(value)
|
|
22
|
+
}
|
|
23
|
+
var object: [String: _JSON] = ["alignment": .string(alignment._name)]
|
|
24
|
+
if let v = dimension(width) { object["width"] = v }
|
|
25
|
+
if let v = dimension(height) { object["height"] = v }
|
|
26
|
+
if let v = dimension(minWidth) { object["minWidth"] = v }
|
|
27
|
+
if let v = dimension(maxWidth) { object["maxWidth"] = v }
|
|
28
|
+
if let v = dimension(minHeight) { object["minHeight"] = v }
|
|
29
|
+
if let v = dimension(maxHeight) { object["maxHeight"] = v }
|
|
30
|
+
return .object(object)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
var padding: EdgeInsets?
|
|
35
|
+
var font: Font?
|
|
36
|
+
var foreground: (any ShapeStyle)?
|
|
37
|
+
var background: (any ShapeStyle)?
|
|
38
|
+
var frame: Frame?
|
|
39
|
+
var cornerRadius: CGFloat?
|
|
40
|
+
/// `.clipShape(.containerRelative)`: clipped to the container's corners.
|
|
41
|
+
var clipsToContainerShape = false
|
|
42
|
+
/// `.background(_:)`: painted in the container's shape (`.containerShape`).
|
|
43
|
+
var backgroundInContainerShape = false
|
|
44
|
+
var opacity: Double?
|
|
45
|
+
var disabled: Bool?
|
|
46
|
+
var layoutPriority: Double?
|
|
47
|
+
/// `-1` clears an inherited limit (`lineLimit(nil)`).
|
|
48
|
+
var lineLimit: Int?
|
|
49
|
+
var multilineTextAlignment: TextAlignment?
|
|
50
|
+
var fixedSize: (horizontal: Bool, vertical: Bool)?
|
|
51
|
+
var transition: AnyTransition?
|
|
52
|
+
/// `.aspectRatio` / `.scaledToFit` / `.scaledToFill`; a nil ratio means the
|
|
53
|
+
/// child's ideal size decides.
|
|
54
|
+
var aspectRatio: (ratio: CGFloat?, contentMode: ContentMode)?
|
|
55
|
+
/// Hints with no layout logic in Swift (`offset`, `rotation`, `shadow`,
|
|
56
|
+
/// `badge`, `tint`, ...), passed through to the renderer by key.
|
|
57
|
+
var extras: [String: _JSON] = [:]
|
|
58
|
+
|
|
59
|
+
static func == (lhs: _Style, rhs: _Style) -> Bool { lhs._json == rhs._json }
|
|
60
|
+
|
|
61
|
+
var _json: _JSON {
|
|
62
|
+
var object: [String: _JSON] = [:]
|
|
63
|
+
if let padding { object["padding"] = padding._json }
|
|
64
|
+
if let font { object["font"] = font._json }
|
|
65
|
+
if let foreground { object["foreground"] = foreground._json }
|
|
66
|
+
if let background { object["background"] = background._json }
|
|
67
|
+
if let frame { object["frame"] = frame._json }
|
|
68
|
+
if let cornerRadius { object["cornerRadius"] = .number(cornerRadius) }
|
|
69
|
+
if let opacity { object["opacity"] = .number(opacity) }
|
|
70
|
+
if let disabled { object["disabled"] = .bool(disabled) }
|
|
71
|
+
if let layoutPriority { object["layoutPriority"] = .number(layoutPriority) }
|
|
72
|
+
if let lineLimit { object["lineLimit"] = lineLimit < 0 ? .null : .number(Double(lineLimit)) }
|
|
73
|
+
if let multilineTextAlignment { object["multilineTextAlignment"] = .string(multilineTextAlignment.name) }
|
|
74
|
+
if let fixedSize {
|
|
75
|
+
object["fixedSize"] = .object(["horizontal": .bool(fixedSize.horizontal), "vertical": .bool(fixedSize.vertical)])
|
|
76
|
+
}
|
|
77
|
+
if let transition { object["transition"] = transition._json }
|
|
78
|
+
if let aspectRatio {
|
|
79
|
+
object["aspectRatio"] = .object([
|
|
80
|
+
"ratio": aspectRatio.ratio.map(_JSON.number) ?? .null,
|
|
81
|
+
"contentMode": .string(aspectRatio.contentMode == .fit ? "fit" : "fill"),
|
|
82
|
+
])
|
|
83
|
+
}
|
|
84
|
+
for (key, value) in extras { object[key] = value }
|
|
85
|
+
return .object(object)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// The view a modifier produces. Nesting preserves modifier order.
|
|
90
|
+
public struct _StyledView<Content: View> {
|
|
91
|
+
let content: Content
|
|
92
|
+
let style: _Style
|
|
93
|
+
}
|
|
94
|
+
extension _StyledView: _PrimitiveView {}
|
|
95
|
+
extension _StyledView: _EnvironmentModifying {
|
|
96
|
+
/// A font with a text style or a size is the environment's `font` below
|
|
97
|
+
/// (a weight or design alone changes the font the page draws, not that).
|
|
98
|
+
func _apply(to environment: inout EnvironmentValues) {
|
|
99
|
+
if let font = style.font, font.textStyle != nil || font.size != nil { environment.font = font }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
extension _StyledView: _HostView {
|
|
103
|
+
var _kind: String { "styled" }
|
|
104
|
+
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
105
|
+
var resolved = style
|
|
106
|
+
// `.background()` paints the background style in context, which
|
|
107
|
+
// `.backgroundStyle(_:)` sets (the system background by default).
|
|
108
|
+
if style.background is BackgroundStyle, let contextual = environment._backgroundStyle {
|
|
109
|
+
resolved.background = contextual
|
|
110
|
+
}
|
|
111
|
+
// The container's shape (`.containerShape`): a background is painted
|
|
112
|
+
// in it, and `.clipShape(.containerRelative)` clips to it.
|
|
113
|
+
let container = environment._containerShapeRadius
|
|
114
|
+
if style.clipsToContainerShape { resolved.cornerRadius = container ?? 0 }
|
|
115
|
+
if style.backgroundInContainerShape, let container, container > 0 {
|
|
116
|
+
resolved.extras["backgroundCornerRadius"] = .number(container)
|
|
117
|
+
}
|
|
118
|
+
return .object(["style": resolved._json])
|
|
119
|
+
}
|
|
120
|
+
var _content: [any View] { [content] }
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/// A modifier applied to a group (`ForEach`, `Group`, a tuple, a conditional)
|
|
124
|
+
/// styles each of the group's views, as in SwiftUI, instead of wrapping the
|
|
125
|
+
/// group in one box. Single views still get one `styled` element.
|
|
126
|
+
public struct _StyledGroup<Content: View> {
|
|
127
|
+
let content: Content
|
|
128
|
+
let style: _Style
|
|
129
|
+
}
|
|
130
|
+
extension _StyledGroup: _PrimitiveView {}
|
|
131
|
+
extension _StyledGroup: _GroupView {
|
|
132
|
+
var _children: [any View] {
|
|
133
|
+
// A modifier on a `Section` styles its rows (the section stays a direct
|
|
134
|
+
// child of its list, which is how the layout recognizes it).
|
|
135
|
+
if let section = content as? any _SectionView { return [section._stylingRows(style)] }
|
|
136
|
+
if let group = content as? any _GroupView, group._spreads {
|
|
137
|
+
return group._children.map { _StyledView(content: AnyView($0), style: style) }
|
|
138
|
+
}
|
|
139
|
+
return [_StyledView(content: content, style: style)]
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var _keys: [AnyHashable]? {
|
|
143
|
+
if let group = content as? any _GroupView, group._spreads {
|
|
144
|
+
return group._keys
|
|
145
|
+
}
|
|
146
|
+
return nil
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Asked of the content alone: a chain of modifiers asks each level once,
|
|
150
|
+
// where computing the content's children and keys at every level made
|
|
151
|
+
// the cost double with each modifier.
|
|
152
|
+
var _spreads: Bool {
|
|
153
|
+
guard let group = content as? any _GroupView, group._spreads else { return false }
|
|
154
|
+
// A styled section is one child; it keeps the section's keys.
|
|
155
|
+
if content is any _SectionView { return group._keys != nil }
|
|
156
|
+
return true
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
nonisolated extension View {
|
|
161
|
+
func _styled(_ configure: (inout _Style) -> Void) -> _StyledGroup<Self> {
|
|
162
|
+
var style = _Style()
|
|
163
|
+
configure(&style)
|
|
164
|
+
return _StyledGroup(content: self, style: style)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// MARK: Padding
|
|
168
|
+
|
|
169
|
+
public func padding(_ edges: Edge.Set = .all, _ length: CGFloat? = nil) -> some View {
|
|
170
|
+
let amount = length ?? 16
|
|
171
|
+
return _styled {
|
|
172
|
+
$0.padding = EdgeInsets(
|
|
173
|
+
top: edges.contains(.top) ? amount : 0,
|
|
174
|
+
leading: edges.contains(.leading) ? amount : 0,
|
|
175
|
+
bottom: edges.contains(.bottom) ? amount : 0,
|
|
176
|
+
trailing: edges.contains(.trailing) ? amount : 0
|
|
177
|
+
)
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/// The padding a scene's content takes from its edges: 16 points on
|
|
182
|
+
/// iPhone, as `.padding()`.
|
|
183
|
+
public func scenePadding(_ edges: Edge.Set = .all) -> some View {
|
|
184
|
+
padding(edges, 16)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public func scenePadding(_ padding: ScenePadding, edges: Edge.Set = .all) -> some View {
|
|
188
|
+
self.padding(edges, 16)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
public func padding(_ length: CGFloat) -> some View {
|
|
192
|
+
padding(.all, length)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
public func padding(_ insets: EdgeInsets) -> some View {
|
|
196
|
+
_styled { $0.padding = insets }
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// MARK: Typography
|
|
200
|
+
|
|
201
|
+
public func font(_ font: Font?) -> some View {
|
|
202
|
+
_styled { $0.font = font }
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
public func fontWeight(_ weight: Font.Weight?) -> some View {
|
|
206
|
+
_styled { $0.font = weight.map { Font(size: nil, weight: $0, design: nil) } }
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
public func bold(_ isActive: Bool = true) -> some View {
|
|
210
|
+
_styled { $0.font = isActive ? Font(size: nil, weight: .bold, design: nil) : nil }
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// MARK: Color
|
|
214
|
+
|
|
215
|
+
public func foregroundStyle<S: ShapeStyle>(_ style: S) -> some View {
|
|
216
|
+
_styled { $0.foreground = style }
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
public func foregroundColor(_ color: Color?) -> some View {
|
|
220
|
+
_styled { $0.foreground = color }
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
/// Hierarchical foreground styles: the primary style paints everything.
|
|
224
|
+
public func foregroundStyle<S1: ShapeStyle, S2: ShapeStyle>(_ primary: S1, _ secondary: S2) -> some View {
|
|
225
|
+
_styled { $0.foreground = primary }
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
public func foregroundStyle<S1: ShapeStyle, S2: ShapeStyle, S3: ShapeStyle>(_ primary: S1, _ secondary: S2,
|
|
229
|
+
_ tertiary: S3) -> some View {
|
|
230
|
+
_styled { $0.foreground = primary }
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
/// A paint behind the view: a color, gradient or material filling its box.
|
|
234
|
+
/// Painted in the container's shape (`.containerShape`), else the box, as in SwiftUI.
|
|
235
|
+
public func background<S: ShapeStyle>(_ style: S, ignoresSafeAreaEdges edges: Edge.Set = .all) -> some View {
|
|
236
|
+
_styled {
|
|
237
|
+
$0.background = style
|
|
238
|
+
$0.backgroundInContainerShape = true
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/// The system background color behind the view.
|
|
243
|
+
public func background(ignoresSafeAreaEdges edges: Edge.Set = .all) -> some View {
|
|
244
|
+
_styled {
|
|
245
|
+
$0.background = BackgroundStyle()
|
|
246
|
+
$0.backgroundInContainerShape = true
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
public func opacity(_ opacity: Double) -> some View {
|
|
251
|
+
_styled { $0.opacity = opacity }
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// MARK: Layout
|
|
255
|
+
|
|
256
|
+
public func frame(width: CGFloat? = nil, height: CGFloat? = nil, alignment: Alignment = .center) -> some View {
|
|
257
|
+
_styled { $0.frame = _Style.Frame(width: width, height: height, alignment: alignment) }
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
public func frame(minWidth: CGFloat? = nil, idealWidth: CGFloat? = nil, maxWidth: CGFloat? = nil,
|
|
261
|
+
minHeight: CGFloat? = nil, idealHeight: CGFloat? = nil, maxHeight: CGFloat? = nil,
|
|
262
|
+
alignment: Alignment = .center) -> some View {
|
|
263
|
+
_styled {
|
|
264
|
+
$0.frame = _Style.Frame(width: idealWidth, height: idealHeight,
|
|
265
|
+
minWidth: minWidth, maxWidth: maxWidth,
|
|
266
|
+
minHeight: minHeight, maxHeight: maxHeight,
|
|
267
|
+
alignment: alignment)
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/// Constrains the view to an aspect ratio: `fit` is the largest such box
|
|
272
|
+
/// inside the proposal, `fill` the smallest covering it. A nil ratio uses
|
|
273
|
+
/// the child's ideal size (what `Image.resizable().scaledToFit()` wants).
|
|
274
|
+
public func aspectRatio(_ aspectRatio: CGFloat? = nil, contentMode: ContentMode) -> some View {
|
|
275
|
+
_styled { $0.aspectRatio = (aspectRatio, contentMode) }
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
public func aspectRatio(_ aspectRatio: CGSize, contentMode: ContentMode) -> some View {
|
|
279
|
+
_styled { $0.aspectRatio = (aspectRatio.height == 0 ? nil : aspectRatio.width / aspectRatio.height, contentMode) }
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
public func scaledToFit() -> some View { aspectRatio(nil, contentMode: .fit) }
|
|
283
|
+
|
|
284
|
+
public func scaledToFill() -> some View { aspectRatio(nil, contentMode: .fill) }
|
|
285
|
+
|
|
286
|
+
/// Names the view for `ScrollViewProxy.scrollTo(_:anchor:)` inside a
|
|
287
|
+
/// `ScrollViewReader` (ScrollViewReader.swift); elsewhere it adds nothing
|
|
288
|
+
/// to the rendered tree. A changed id does not reset the view's state.
|
|
289
|
+
public func id<ID: Hashable>(_ id: ID) -> some View {
|
|
290
|
+
_IdentifiedView(content: self, id: AnyHashable(id))
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
/// A compositing hint; accepted for source compatibility and currently
|
|
294
|
+
/// without effect on the rendered tree.
|
|
295
|
+
public func compositingGroup() -> some View { self }
|
|
296
|
+
|
|
297
|
+
public func cornerRadius(_ radius: CGFloat, antialiased: Bool = true) -> some View {
|
|
298
|
+
_styled { $0.cornerRadius = radius }
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
public func clipShape<S: Shape>(_ shape: S) -> some View {
|
|
302
|
+
_styled {
|
|
303
|
+
$0.cornerRadius = shape._cornerRadius
|
|
304
|
+
$0.clipsToContainerShape = shape is ContainerRelativeShape
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/// The kind of scene padding (`.minimum`); iPhone has one.
|
|
310
|
+
public struct ScenePadding: Equatable, Sendable {
|
|
311
|
+
public static let minimum = ScenePadding()
|
|
312
|
+
public static let navigationBar = ScenePadding()
|
|
313
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Smaller modifiers Ice Cubes uses.
|
|
2
|
+
//
|
|
3
|
+
// Drawn: `.border(_:width:)` (a stroke inside the view's box, as an
|
|
4
|
+
// overlay), `.edgesIgnoringSafeArea(_:)` (`.ignoresSafeArea(edges:)`),
|
|
5
|
+
// `.safeAreaBar(edge:…)` (iOS 26; as `.safeAreaInset`, see
|
|
6
|
+
// ScrollModifiers.swift) and `.scrollPosition(id:anchor:)` (setting the
|
|
7
|
+
// binding scrolls to the view with that `.id`, as `ScrollViewProxy.scrollTo`;
|
|
8
|
+
// scrolling by hand does not update the binding).
|
|
9
|
+
//
|
|
10
|
+
// Accepted without effect: `.buttonBorderShape(_:)` (bordered buttons stay
|
|
11
|
+
// capsules), `.truncationMode(_:)` (text truncates at its tail),
|
|
12
|
+
// `.lineSpacing(_:)` (lines keep the font's line height),
|
|
13
|
+
// `.controlGroupStyle(_:)`, `.listRowHoverEffectDisabled(_:)`,
|
|
14
|
+
// `.searchScopes(_:scopes:)` (no scope bar is drawn under the search field)
|
|
15
|
+
// and, on toolbar items, `.sharedBackgroundVisibility(_:)` and
|
|
16
|
+
// `.matchedTransitionSource(id:in:)`.
|
|
17
|
+
|
|
18
|
+
public struct ButtonBorderShape: Equatable, Sendable {
|
|
19
|
+
let name: String
|
|
20
|
+
public static let automatic = ButtonBorderShape(name: "automatic")
|
|
21
|
+
public static let capsule = ButtonBorderShape(name: "capsule")
|
|
22
|
+
public static let circle = ButtonBorderShape(name: "circle")
|
|
23
|
+
public static let roundedRectangle = ButtonBorderShape(name: "roundedRectangle")
|
|
24
|
+
public static func roundedRectangle(radius: CGFloat) -> ButtonBorderShape { .roundedRectangle }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public protocol ControlGroupStyle {}
|
|
28
|
+
public struct AutomaticControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
29
|
+
public struct MenuControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
30
|
+
public struct CompactMenuControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
31
|
+
public struct NavigationControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
32
|
+
public struct PaletteControlGroupStyle: ControlGroupStyle { public init() {} }
|
|
33
|
+
extension ControlGroupStyle where Self == AutomaticControlGroupStyle {
|
|
34
|
+
public static var automatic: AutomaticControlGroupStyle { AutomaticControlGroupStyle() }
|
|
35
|
+
}
|
|
36
|
+
extension ControlGroupStyle where Self == MenuControlGroupStyle {
|
|
37
|
+
public static var menu: MenuControlGroupStyle { MenuControlGroupStyle() }
|
|
38
|
+
}
|
|
39
|
+
extension ControlGroupStyle where Self == CompactMenuControlGroupStyle {
|
|
40
|
+
public static var compactMenu: CompactMenuControlGroupStyle { CompactMenuControlGroupStyle() }
|
|
41
|
+
}
|
|
42
|
+
extension ControlGroupStyle where Self == NavigationControlGroupStyle {
|
|
43
|
+
public static var navigation: NavigationControlGroupStyle { NavigationControlGroupStyle() }
|
|
44
|
+
}
|
|
45
|
+
extension ControlGroupStyle where Self == PaletteControlGroupStyle {
|
|
46
|
+
public static var palette: PaletteControlGroupStyle { PaletteControlGroupStyle() }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/// When a search's scope bar shows; accepted.
|
|
50
|
+
public struct SearchScopeActivation: Sendable {
|
|
51
|
+
let name: String
|
|
52
|
+
public static let automatic = SearchScopeActivation(name: "automatic")
|
|
53
|
+
public static let onTextEntry = SearchScopeActivation(name: "onTextEntry")
|
|
54
|
+
public static let onSearchPresentation = SearchScopeActivation(name: "onSearchPresentation")
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
nonisolated extension View {
|
|
58
|
+
public func border<S: ShapeStyle>(_ content: S, width: CGFloat = 1) -> some View {
|
|
59
|
+
overlay { Rectangle().strokeBorder(content, lineWidth: width) }
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public func edgesIgnoringSafeArea(_ edges: Edge.Set) -> some View {
|
|
63
|
+
ignoresSafeArea(.all, edges: edges)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
public func safeAreaBar<V: View>(edge: VerticalEdge, alignment: HorizontalAlignment = .center,
|
|
67
|
+
spacing: CGFloat? = nil, @ViewBuilder content: () -> V) -> some View {
|
|
68
|
+
safeAreaInset(edge: edge, alignment: alignment, spacing: spacing, content: content)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
public func buttonBorderShape(_ shape: ButtonBorderShape) -> some View { self }
|
|
72
|
+
public func truncationMode(_ mode: Text.TruncationMode) -> some View { self }
|
|
73
|
+
public func lineSpacing(_ lineSpacing: CGFloat) -> some View { self }
|
|
74
|
+
public func controlGroupStyle<S: ControlGroupStyle>(_ style: S) -> some View { self }
|
|
75
|
+
public func listRowHoverEffectDisabled(_ disabled: Bool = true) -> some View { self }
|
|
76
|
+
|
|
77
|
+
public func searchScopes<V: Hashable, S: View>(_ scope: Binding<V>, @ViewBuilder scopes: () -> S) -> some View { self }
|
|
78
|
+
public func searchScopes<V: Hashable, S: View>(_ scope: Binding<V>, activation: SearchScopeActivation,
|
|
79
|
+
@ViewBuilder _ scopes: () -> S) -> some View { self }
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
extension View {
|
|
83
|
+
/// Scrolls to the view whose `.id` the binding holds whenever the binding
|
|
84
|
+
/// changes (see the top of this file).
|
|
85
|
+
public func scrollPosition<ID: Hashable>(id: Binding<ID?>, anchor: UnitPoint? = nil) -> some View {
|
|
86
|
+
ScrollViewReader { proxy in
|
|
87
|
+
self.onChange(of: id.wrappedValue) { _, target in
|
|
88
|
+
if let target { proxy.scrollTo(target, anchor: anchor) }
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
extension ToolbarContent {
|
|
95
|
+
/// Accepted: toolbar items share the bar's background.
|
|
96
|
+
public nonisolated func sharedBackgroundVisibility(_ visibility: Visibility) -> Self { self }
|
|
97
|
+
|
|
98
|
+
/// Accepted (no zoom transitions on the page).
|
|
99
|
+
public nonisolated func matchedTransitionSource<ID: Hashable>(id: ID, in namespace: Namespace.ID) -> Self { self }
|
|
100
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// `@Namespace` and `.matchedGeometryEffect`. A namespace is an identifier
|
|
2
|
+
// that lasts as long as its view is mounted (its storage is a `State`), so
|
|
3
|
+
// code that passes it around or keys things by it (ButtonKit's triggers, Ice
|
|
4
|
+
// Cubes' media viewer) works. The page does not animate a view from one
|
|
5
|
+
// place to another, so `.matchedGeometryEffect` leaves the view as it is:
|
|
6
|
+
// the change happens without the shared-element animation.
|
|
7
|
+
|
|
8
|
+
/// An identifier for a group of matched views, stable while the view is mounted.
|
|
9
|
+
@propertyWrapper
|
|
10
|
+
public struct Namespace: DynamicProperty {
|
|
11
|
+
public struct ID: Hashable, Sendable {
|
|
12
|
+
let value: Int
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
nonisolated(unsafe) static var lastID = 0
|
|
16
|
+
let state: State<ID>
|
|
17
|
+
|
|
18
|
+
public init() {
|
|
19
|
+
Namespace.lastID += 1
|
|
20
|
+
state = State(wrappedValue: ID(value: Namespace.lastID))
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
public var wrappedValue: ID { state.wrappedValue }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
extension Namespace: _StateProperty {
|
|
27
|
+
var _box: any _AnyStateBox { state.box }
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/// Which of a view's geometry `.matchedGeometryEffect` would match.
|
|
31
|
+
public struct MatchedGeometryProperties: OptionSet, Hashable, Sendable {
|
|
32
|
+
public let rawValue: UInt32
|
|
33
|
+
public init(rawValue: UInt32) { self.rawValue = rawValue }
|
|
34
|
+
public static let position = MatchedGeometryProperties(rawValue: 1)
|
|
35
|
+
public static let size = MatchedGeometryProperties(rawValue: 2)
|
|
36
|
+
public static let frame: MatchedGeometryProperties = [.position, .size]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
nonisolated extension View {
|
|
40
|
+
/// The view unchanged: the page has no shared-element animation.
|
|
41
|
+
public func matchedGeometryEffect<ID: Hashable>(id: ID, in namespace: Namespace.ID,
|
|
42
|
+
properties: MatchedGeometryProperties = .frame,
|
|
43
|
+
anchor: UnitPoint = .center, isSource: Bool = true) -> some View { self }
|
|
44
|
+
}
|