@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,199 @@
|
|
|
1
|
+
/// `VStackLayout`, `HStackLayout`, `ZStackLayout` and `AnyLayout` (iOS 16):
|
|
2
|
+
/// the stacks as `Layout` values, so that a view can switch its layout
|
|
3
|
+
/// (`let layout = isCompact ? AnyLayout(VStackLayout()) : AnyLayout(HStackLayout())`).
|
|
4
|
+
///
|
|
5
|
+
/// Used as a container (`VStackLayout(spacing: 0) { … }`), a stack layout is
|
|
6
|
+
/// the stack itself: the same `vstack` / `hstack` / `zstack` element, laid out
|
|
7
|
+
/// by the page. `AnyLayout` does the same for a stack it wraps, and is a
|
|
8
|
+
/// custom `layout` element (Phase 6) for any other layout. Switching an
|
|
9
|
+
/// `AnyLayout` between kinds rebuilds its content (approximation: SwiftUI
|
|
10
|
+
/// keeps the children's state and animates them to their new places).
|
|
11
|
+
///
|
|
12
|
+
/// Their `Layout` methods compute the stacks in Swift too, for a custom
|
|
13
|
+
/// layout that delegates to one: subviews get the proposal (a vertical
|
|
14
|
+
/// stack's height and a horizontal stack's width shared evenly), are placed
|
|
15
|
+
/// one after the other `spacing` apart (8 by default) and aligned across
|
|
16
|
+
/// the axis.
|
|
17
|
+
|
|
18
|
+
public struct VStackLayout: Layout {
|
|
19
|
+
public var alignment: HorizontalAlignment
|
|
20
|
+
public var spacing: CGFloat?
|
|
21
|
+
|
|
22
|
+
public init(alignment: HorizontalAlignment = .center, spacing: CGFloat? = nil) {
|
|
23
|
+
self.alignment = alignment
|
|
24
|
+
self.spacing = spacing
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
public static var layoutProperties: LayoutProperties {
|
|
28
|
+
var properties = LayoutProperties()
|
|
29
|
+
properties.stackOrientation = .vertical
|
|
30
|
+
return properties
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
public func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
|
|
34
|
+
let sizes = _stackSizes(subviews, proposal: proposal, vertical: true)
|
|
35
|
+
let gap = spacing ?? 8
|
|
36
|
+
return CGSize(width: sizes.map(\.width).max() ?? 0,
|
|
37
|
+
height: sizes.map(\.height).reduce(0, +) + gap * CGFloat(max(0, sizes.count - 1)))
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
|
|
41
|
+
let sizes = _stackSizes(subviews, proposal: proposal, vertical: true)
|
|
42
|
+
var y = bounds.minY
|
|
43
|
+
for (subview, size) in zip(subviews, sizes) {
|
|
44
|
+
let x: CGFloat = switch alignment.name {
|
|
45
|
+
case "leading": bounds.minX
|
|
46
|
+
case "trailing": bounds.maxX - size.width
|
|
47
|
+
default: bounds.midX - size.width / 2
|
|
48
|
+
}
|
|
49
|
+
subview.place(at: CGPoint(x: x, y: y), anchor: .topLeading, proposal: ProposedViewSize(size))
|
|
50
|
+
y += size.height + (spacing ?? 8)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/// The stack itself: a `VStack` of the content.
|
|
55
|
+
public func callAsFunction<V: View>(@ViewBuilder _ content: () -> V) -> some View {
|
|
56
|
+
VStack(alignment: alignment, spacing: spacing, content: content)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
public struct HStackLayout: Layout {
|
|
61
|
+
public var alignment: VerticalAlignment
|
|
62
|
+
public var spacing: CGFloat?
|
|
63
|
+
|
|
64
|
+
public init(alignment: VerticalAlignment = .center, spacing: CGFloat? = nil) {
|
|
65
|
+
self.alignment = alignment
|
|
66
|
+
self.spacing = spacing
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public static var layoutProperties: LayoutProperties {
|
|
70
|
+
var properties = LayoutProperties()
|
|
71
|
+
properties.stackOrientation = .horizontal
|
|
72
|
+
return properties
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
|
|
76
|
+
let sizes = _stackSizes(subviews, proposal: proposal, vertical: false)
|
|
77
|
+
let gap = spacing ?? 8
|
|
78
|
+
return CGSize(width: sizes.map(\.width).reduce(0, +) + gap * CGFloat(max(0, sizes.count - 1)),
|
|
79
|
+
height: sizes.map(\.height).max() ?? 0)
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
|
|
83
|
+
let sizes = _stackSizes(subviews, proposal: proposal, vertical: false)
|
|
84
|
+
var x = bounds.minX
|
|
85
|
+
for (subview, size) in zip(subviews, sizes) {
|
|
86
|
+
let y: CGFloat = switch alignment.name {
|
|
87
|
+
case "top": bounds.minY
|
|
88
|
+
case "bottom": bounds.maxY - size.height
|
|
89
|
+
default: bounds.midY - size.height / 2
|
|
90
|
+
}
|
|
91
|
+
subview.place(at: CGPoint(x: x, y: y), anchor: .topLeading, proposal: ProposedViewSize(size))
|
|
92
|
+
x += size.width + (spacing ?? 8)
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/// The stack itself: an `HStack` of the content.
|
|
97
|
+
public func callAsFunction<V: View>(@ViewBuilder _ content: () -> V) -> some View {
|
|
98
|
+
HStack(alignment: alignment, spacing: spacing, content: content)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
public struct ZStackLayout: Layout {
|
|
103
|
+
public var alignment: Alignment
|
|
104
|
+
|
|
105
|
+
public init(alignment: Alignment = .center) {
|
|
106
|
+
self.alignment = alignment
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
public func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) -> CGSize {
|
|
110
|
+
let sizes = subviews.map { $0.sizeThatFits(proposal) }
|
|
111
|
+
return CGSize(width: sizes.map(\.width).max() ?? 0, height: sizes.map(\.height).max() ?? 0)
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
public func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout ()) {
|
|
115
|
+
for subview in subviews {
|
|
116
|
+
let size = subview.sizeThatFits(proposal)
|
|
117
|
+
let x: CGFloat = switch alignment.horizontal.name {
|
|
118
|
+
case "leading": bounds.minX
|
|
119
|
+
case "trailing": bounds.maxX - size.width
|
|
120
|
+
default: bounds.midX - size.width / 2
|
|
121
|
+
}
|
|
122
|
+
let y: CGFloat = switch alignment.vertical.name {
|
|
123
|
+
case "top": bounds.minY
|
|
124
|
+
case "bottom": bounds.maxY - size.height
|
|
125
|
+
default: bounds.midY - size.height / 2
|
|
126
|
+
}
|
|
127
|
+
subview.place(at: CGPoint(x: x, y: y), anchor: .topLeading, proposal: ProposedViewSize(size))
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/// The stack itself: a `ZStack` of the content.
|
|
132
|
+
public func callAsFunction<V: View>(@ViewBuilder _ content: () -> V) -> some View {
|
|
133
|
+
ZStack(alignment: alignment, content: content)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/// Each subview's size along a stack: the proposal's length along the axis
|
|
138
|
+
/// shared evenly, the full proposal across it.
|
|
139
|
+
func _stackSizes(_ subviews: LayoutSubviews, proposal: ProposedViewSize, vertical: Bool) -> [CGSize] {
|
|
140
|
+
let count = CGFloat(max(1, subviews.count))
|
|
141
|
+
let share: ProposedViewSize = vertical
|
|
142
|
+
? ProposedViewSize(width: proposal.width, height: proposal.height.map { $0 / count })
|
|
143
|
+
: ProposedViewSize(width: proposal.width.map { $0 / count }, height: proposal.height)
|
|
144
|
+
return subviews.map { $0.sizeThatFits(share) }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/// A layout chosen at run time.
|
|
148
|
+
public struct AnyLayout: Layout {
|
|
149
|
+
let base: any Layout
|
|
150
|
+
|
|
151
|
+
public init<L: Layout>(_ layout: L) {
|
|
152
|
+
if let any = layout as? AnyLayout { base = any.base } else { base = layout }
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
public typealias Cache = _AnyLayoutCache
|
|
156
|
+
|
|
157
|
+
public static var layoutProperties: LayoutProperties { LayoutProperties() }
|
|
158
|
+
|
|
159
|
+
public func makeCache(subviews: Subviews) -> Cache {
|
|
160
|
+
func make<L: Layout>(_ layout: L) -> Any { layout.makeCache(subviews: subviews) }
|
|
161
|
+
return _AnyLayoutCache(value: make(base))
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
public func updateCache(_ cache: inout Cache, subviews: Subviews) {
|
|
165
|
+
cache = makeCache(subviews: subviews)
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public func sizeThatFits(proposal: ProposedViewSize, subviews: Subviews, cache: inout Cache) -> CGSize {
|
|
169
|
+
func size<L: Layout>(_ layout: L) -> CGSize {
|
|
170
|
+
var typed = cache.value as! L.Cache
|
|
171
|
+
defer { cache.value = typed }
|
|
172
|
+
return layout.sizeThatFits(proposal: proposal, subviews: subviews, cache: &typed)
|
|
173
|
+
}
|
|
174
|
+
return size(base)
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
public func placeSubviews(in bounds: CGRect, proposal: ProposedViewSize, subviews: Subviews, cache: inout Cache) {
|
|
178
|
+
func place<L: Layout>(_ layout: L) {
|
|
179
|
+
var typed = cache.value as! L.Cache
|
|
180
|
+
layout.placeSubviews(in: bounds, proposal: proposal, subviews: subviews, cache: &typed)
|
|
181
|
+
cache.value = typed
|
|
182
|
+
}
|
|
183
|
+
place(base)
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/// The wrapped stack's own element for a stack layout, else a `layout` element.
|
|
187
|
+
public func callAsFunction<V: View>(@ViewBuilder _ content: () -> V) -> some View {
|
|
188
|
+
let content = content()
|
|
189
|
+
if let stack = base as? VStackLayout { return AnyView(stack { content }) }
|
|
190
|
+
if let stack = base as? HStackLayout { return AnyView(stack { content }) }
|
|
191
|
+
if let stack = base as? ZStackLayout { return AnyView(stack { content }) }
|
|
192
|
+
return AnyView(_LayoutView(layout: self, content: content))
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/// `AnyLayout`'s cache: the wrapped layout's.
|
|
197
|
+
public struct _AnyLayoutCache {
|
|
198
|
+
var value: Any
|
|
199
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/// Marker protocol matching SwiftUI's, so user code that constrains on it compiles.
|
|
2
|
+
public protocol DynamicProperty {
|
|
3
|
+
mutating func update()
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
extension DynamicProperty {
|
|
7
|
+
public mutating func update() {}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
/// Type-erased access to a `State` box, used by the runtime to carry storage
|
|
11
|
+
/// across re-renders and to observe mutations.
|
|
12
|
+
protocol _AnyStateBox: AnyObject {
|
|
13
|
+
var _anyValue: Any { get set }
|
|
14
|
+
var _onChange: (() -> Void)? { get set }
|
|
15
|
+
/// Shares the persistent storage of a box from a previous render, so that
|
|
16
|
+
/// closures captured earlier keep writing to the live value.
|
|
17
|
+
func _adopt(_ previous: any _AnyStateBox)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/// Views expose their `State` properties to the runtime through this protocol.
|
|
21
|
+
protocol _StateProperty: _RuntimeProperty {
|
|
22
|
+
var _box: any _AnyStateBox { get }
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/// The persistent value behind a `State`; survives the view struct being
|
|
26
|
+
/// recreated because every box for the same mounted view shares it.
|
|
27
|
+
final class _StateStorage<Value> {
|
|
28
|
+
var value: Value {
|
|
29
|
+
didSet { onChange?() }
|
|
30
|
+
}
|
|
31
|
+
var onChange: (() -> Void)?
|
|
32
|
+
|
|
33
|
+
init(_ value: Value) { self.value = value }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
final class _StateBox<Value>: _AnyStateBox {
|
|
37
|
+
var storage: _StateStorage<Value>
|
|
38
|
+
|
|
39
|
+
var value: Value {
|
|
40
|
+
get { storage.value }
|
|
41
|
+
set { storage.value = newValue }
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
var _onChange: (() -> Void)? {
|
|
45
|
+
get { storage.onChange }
|
|
46
|
+
set { storage.onChange = newValue }
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
init(_ value: Value) { storage = _StateStorage(value) }
|
|
50
|
+
|
|
51
|
+
var _anyValue: Any {
|
|
52
|
+
get { storage.value }
|
|
53
|
+
set { storage.value = newValue as! Value }
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
func _adopt(_ previous: any _AnyStateBox) {
|
|
57
|
+
guard let previous = previous as? _StateBox<Value> else { return }
|
|
58
|
+
storage = previous.storage
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/// A property wrapper that reads and writes a value managed by the runtime.
|
|
63
|
+
///
|
|
64
|
+
/// A view struct is recreated every time its parent's body runs; the runtime
|
|
65
|
+
/// finds `State` properties by reflection and moves the previous values into
|
|
66
|
+
/// the new struct, so the value persists for as long as the view stays mounted.
|
|
67
|
+
@propertyWrapper
|
|
68
|
+
public struct State<Value>: DynamicProperty {
|
|
69
|
+
let box: _StateBox<Value>
|
|
70
|
+
|
|
71
|
+
public init(wrappedValue: Value) {
|
|
72
|
+
box = _StateBox(wrappedValue)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public init(initialValue: Value) {
|
|
76
|
+
self.init(wrappedValue: initialValue)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
public var wrappedValue: Value {
|
|
80
|
+
get { box.value }
|
|
81
|
+
nonmutating set { box.value = newValue }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
public var projectedValue: Binding<Value> {
|
|
85
|
+
let box = self.box
|
|
86
|
+
return Binding(get: { box.value }, set: { box.value = $0 })
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
extension State where Value: ExpressibleByNilLiteral {
|
|
91
|
+
public init() { self.init(wrappedValue: nil) }
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
extension State: _StateProperty {
|
|
95
|
+
var _box: any _AnyStateBox { box }
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/// A two-way connection to a value owned elsewhere.
|
|
99
|
+
@propertyWrapper
|
|
100
|
+
@dynamicMemberLookup
|
|
101
|
+
public struct Binding<Value>: DynamicProperty {
|
|
102
|
+
let getter: () -> Value
|
|
103
|
+
let setter: (Value) -> Void
|
|
104
|
+
/// What the binding points at, for a binding the runtime re-creates on
|
|
105
|
+
/// every pass (a node's edit mode); nil for every other binding, which
|
|
106
|
+
/// then never compares equal (see `_Sameness`).
|
|
107
|
+
let identity: _RuntimeKey?
|
|
108
|
+
|
|
109
|
+
public init(get: @escaping () -> Value, set: @escaping (Value) -> Void) {
|
|
110
|
+
getter = get
|
|
111
|
+
setter = set
|
|
112
|
+
identity = nil
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
init(identity: _RuntimeKey, get: @escaping () -> Value, set: @escaping (Value) -> Void) {
|
|
116
|
+
getter = get
|
|
117
|
+
setter = set
|
|
118
|
+
self.identity = identity
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
public static func constant(_ value: Value) -> Binding<Value> {
|
|
122
|
+
Binding(get: { value }, set: { _ in })
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
public var wrappedValue: Value {
|
|
126
|
+
get { getter() }
|
|
127
|
+
nonmutating set { setter(newValue) }
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public var projectedValue: Binding<Value> { self }
|
|
131
|
+
|
|
132
|
+
/// The binding itself: what a `$name` closure parameter (`ForEach($items) { $item in … }`)
|
|
133
|
+
/// is made from. It must be declared in the type for the compiler to find it.
|
|
134
|
+
public init(projectedValue: Binding<Value>) {
|
|
135
|
+
self = projectedValue
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
public subscript<Subject>(dynamicMember keyPath: WritableKeyPath<Value, Subject>) -> Binding<Subject> {
|
|
139
|
+
Binding<Subject>(
|
|
140
|
+
get: { self.wrappedValue[keyPath: keyPath] },
|
|
141
|
+
set: { self.wrappedValue[keyPath: keyPath] = $0 }
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
|
|
3
|
+
// Smaller SwiftUI API that Ice Cubes' status rows and composer use.
|
|
4
|
+
|
|
5
|
+
extension LocalizedStringKey.StringInterpolation {
|
|
6
|
+
/// `"Closes in \(date, style: .timer)"`: the date formatted as
|
|
7
|
+
/// `Text(date, style:)` formats it, when the text is made (TextDates.swift).
|
|
8
|
+
public mutating func appendInterpolation(_ date: Date, style: Text.DateStyle) {
|
|
9
|
+
_append(.string(Text._format(date, style: style, now: Date())), specifier: "%@")
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
extension AnyTransition {
|
|
14
|
+
/// Moves in from `edge` while fading in, and out toward the opposite edge
|
|
15
|
+
/// while fading out (iOS 16).
|
|
16
|
+
public static func push(from edge: Edge) -> AnyTransition {
|
|
17
|
+
let opposite: Edge = switch edge {
|
|
18
|
+
case .top: .bottom
|
|
19
|
+
case .bottom: .top
|
|
20
|
+
case .leading: .trailing
|
|
21
|
+
case .trailing: .leading
|
|
22
|
+
}
|
|
23
|
+
return .asymmetric(insertion: .move(edge: edge).combined(with: .opacity),
|
|
24
|
+
removal: .move(edge: opposite).combined(with: .opacity))
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/// Space between toolbar items (iOS 26), which separates Liquid Glass
|
|
29
|
+
/// groups. The page lays a placement's items out in a row of its own, so the
|
|
30
|
+
/// spacer adds nothing.
|
|
31
|
+
nonisolated public struct ToolbarSpacer: ToolbarContent {
|
|
32
|
+
public init(_ sizing: SpacerSizing = .flexible, placement: ToolbarItemPlacement = .automatic) {}
|
|
33
|
+
nonisolated public var _toolbarItems: [any View] { [] }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/// How much room a `ToolbarSpacer` takes.
|
|
37
|
+
public struct SpacerSizing: Hashable, Sendable {
|
|
38
|
+
let name: String
|
|
39
|
+
public static let flexible = SpacerSizing(name: "flexible")
|
|
40
|
+
public static let fixed = SpacerSizing(name: "fixed")
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
nonisolated extension View {
|
|
44
|
+
/// Accepted: the actions are for assistive technologies the page does not bridge.
|
|
45
|
+
public func accessibilityActions<Content: View>(@ViewBuilder _ content: () -> Content) -> some View { self }
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// The view's tint as a style (`.foregroundStyle(.tint)`): the nearest
|
|
49
|
+
/// `.tint(_:)`, else the accent color, resolved by the page.
|
|
50
|
+
public struct TintShapeStyle: ShapeStyle, Hashable {
|
|
51
|
+
public init() {}
|
|
52
|
+
public var _json: _JSON { .object(["name": .string("tint")]) }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
extension ShapeStyle where Self == TintShapeStyle {
|
|
56
|
+
public static var tint: TintShapeStyle { TintShapeStyle() }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
private struct _DefaultMinListRowHeightKey: EnvironmentKey {
|
|
60
|
+
static var defaultValue: CGFloat { 44 }
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private struct _DefaultMinListHeaderHeightKey: EnvironmentKey {
|
|
64
|
+
static var defaultValue: CGFloat? { nil }
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
extension EnvironmentValues {
|
|
68
|
+
/// A list row's minimum height, 44 by default: the page sizes a `List`'s
|
|
69
|
+
/// rows to their content, at least this (the list's `minRowHeight` prop).
|
|
70
|
+
public var defaultMinListRowHeight: CGFloat {
|
|
71
|
+
get { self[_DefaultMinListRowHeightKey.self] }
|
|
72
|
+
set { self[_DefaultMinListRowHeightKey.self] = newValue }
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// A list section header's minimum height; recorded.
|
|
76
|
+
public var defaultMinListHeaderHeight: CGFloat? {
|
|
77
|
+
get { self[_DefaultMinListHeaderHeightKey.self] }
|
|
78
|
+
set { self[_DefaultMinListHeaderHeightKey.self] = newValue }
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
extension GeometryProxy {
|
|
83
|
+
/// Zero: the page does not report the safe area to Swift.
|
|
84
|
+
public var safeAreaInsets: EdgeInsets { EdgeInsets() }
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
nonisolated extension View {
|
|
88
|
+
/// The navigation title from a localized key (the key's text: no string tables are loaded).
|
|
89
|
+
public func navigationTitle(_ titleKey: LocalizedStringKey) -> some View {
|
|
90
|
+
navigationTitle(Text(titleKey))
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
extension Font {
|
|
95
|
+
/// The same font: digits keep their proportional widths on the page.
|
|
96
|
+
public func monospacedDigit() -> Font { self }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
nonisolated extension View {
|
|
100
|
+
/// The sheet's detents with the one `selection` names first, so the page
|
|
101
|
+
/// presents the sheet at it (the page reports no resizing: the binding
|
|
102
|
+
/// changes only when the app sets it).
|
|
103
|
+
public func presentationDetents(_ detents: Set<PresentationDetent>, selection: Binding<PresentationDetent>) -> some View {
|
|
104
|
+
let sorted = detents.sorted { ($0._order, $0.name) < ($1._order, $1.name) }
|
|
105
|
+
let selected = selection.wrappedValue
|
|
106
|
+
let ordered = sorted.contains(selected) ? [selected] + sorted.filter { $0 != selected } : sorted
|
|
107
|
+
return _DetentsView(content: self, detents: ordered.map(\.name))
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
extension SearchFieldPlacement {
|
|
112
|
+
/// When the navigation bar's search field shows.
|
|
113
|
+
public enum NavigationBarDrawerDisplayMode: Hashable, Sendable {
|
|
114
|
+
case automatic, always
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/// The search field in the navigation bar's drawer; the page always shows it there.
|
|
118
|
+
public static func navigationBarDrawer(displayMode: NavigationBarDrawerDisplayMode) -> SearchFieldPlacement {
|
|
119
|
+
.navigationBarDrawer
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// The line cap of a stroke (CoreGraphics' `CGLineCap`).
|
|
2
|
+
public enum CGLineCap: Int32, Hashable, Sendable {
|
|
3
|
+
case butt, round, square
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/// The line join of a stroke (CoreGraphics' `CGLineJoin`).
|
|
7
|
+
public enum CGLineJoin: Int32, Hashable, Sendable {
|
|
8
|
+
case miter, round, bevel
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/// How a line is stroked. Charts read `lineWidth`; the other fields are kept
|
|
12
|
+
/// for source compatibility.
|
|
13
|
+
public struct StrokeStyle: Equatable, Sendable {
|
|
14
|
+
public var lineWidth: CGFloat
|
|
15
|
+
public var lineCap: CGLineCap
|
|
16
|
+
public var lineJoin: CGLineJoin
|
|
17
|
+
public var miterLimit: CGFloat
|
|
18
|
+
public var dash: [CGFloat]
|
|
19
|
+
public var dashPhase: CGFloat
|
|
20
|
+
|
|
21
|
+
public init(lineWidth: CGFloat = 1, lineCap: CGLineCap = .butt, lineJoin: CGLineJoin = .miter,
|
|
22
|
+
miterLimit: CGFloat = 10, dash: [CGFloat] = [], dashPhase: CGFloat = 0) {
|
|
23
|
+
self.lineWidth = lineWidth
|
|
24
|
+
self.lineCap = lineCap
|
|
25
|
+
self.lineJoin = lineJoin
|
|
26
|
+
self.miterLimit = miterLimit
|
|
27
|
+
self.dash = dash
|
|
28
|
+
self.dashPhase = dashPhase
|
|
29
|
+
}
|
|
30
|
+
}
|