@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,376 @@
|
|
|
1
|
+
// `ChartContent`, its result builder, the structural content types and the
|
|
2
|
+
// mark modifiers. Content resolves to `_RawMark`s (one per data point) that
|
|
3
|
+
// Chart.swift scales into the `chart` element's unit-coordinate marks.
|
|
4
|
+
|
|
5
|
+
/// The content of a `Chart`: marks, groups of marks, or a type with a `body`.
|
|
6
|
+
/// Unlike `View` it is not main-actor isolated: the runtime resolves it from
|
|
7
|
+
/// the (nonisolated) `_HostView` requirements.
|
|
8
|
+
public protocol ChartContent {
|
|
9
|
+
associatedtype Body: ChartContent
|
|
10
|
+
@ChartContentBuilder var body: Self.Body { get }
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
extension Never: @preconcurrency ChartContent {}
|
|
14
|
+
|
|
15
|
+
/// Content the resolver reads directly instead of evaluating `body`.
|
|
16
|
+
public protocol _PrimitiveChartContent: ChartContent where Body == Never {}
|
|
17
|
+
|
|
18
|
+
extension _PrimitiveChartContent {
|
|
19
|
+
public var body: Never { fatalError("\(Self.self) is primitive chart content and has no body") }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/// Internal: contributes raw marks.
|
|
23
|
+
protocol _ChartContentNode {
|
|
24
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
extension ChartContent {
|
|
28
|
+
func _collectAny(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
29
|
+
if let node = self as? any _ChartContentNode {
|
|
30
|
+
node._collect(into: &collector, modifiers: modifiers)
|
|
31
|
+
} else {
|
|
32
|
+
body._collectAny(into: &collector, modifiers: modifiers)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// MARK: - Raw marks
|
|
38
|
+
|
|
39
|
+
/// An annotation view attached to a mark.
|
|
40
|
+
struct _MarkAnnotation {
|
|
41
|
+
var position: AnnotationPosition
|
|
42
|
+
var alignment: Alignment
|
|
43
|
+
var spacing: Double
|
|
44
|
+
var content: any View
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/// Everything the modifiers set; an inner modifier overrides an outer one.
|
|
48
|
+
struct _MarkModifiers {
|
|
49
|
+
var style: (any ShapeStyle)?
|
|
50
|
+
var styleBy: _LabelledValue?
|
|
51
|
+
var symbolBy: _LabelledValue?
|
|
52
|
+
var symbol: String?
|
|
53
|
+
var symbolSize: Double?
|
|
54
|
+
var interpolation = "linear"
|
|
55
|
+
var opacity = 1.0
|
|
56
|
+
var lineWidth: Double?
|
|
57
|
+
var cornerRadius = 0.0
|
|
58
|
+
var mask: (any ChartContent)?
|
|
59
|
+
var annotations: [_MarkAnnotation] = []
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
enum _RawMarkKind: Equatable {
|
|
63
|
+
case bar, rectangle, line, area, point, rule
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/// One mark before scaling.
|
|
67
|
+
struct _RawMark {
|
|
68
|
+
var kind: _RawMarkKind
|
|
69
|
+
var x: _PlottableValue?
|
|
70
|
+
var xStart: _PlottableValue?
|
|
71
|
+
var xEnd: _PlottableValue?
|
|
72
|
+
var y: _PlottableValue?
|
|
73
|
+
var yStart: _PlottableValue?
|
|
74
|
+
var yEnd: _PlottableValue?
|
|
75
|
+
var series: _PlottableValue?
|
|
76
|
+
var width: MarkDimension?
|
|
77
|
+
var height: MarkDimension?
|
|
78
|
+
var modifiers = _MarkModifiers()
|
|
79
|
+
|
|
80
|
+
var xValues: [_PlottableValue] { [x, xStart, xEnd].compactMap { $0 } }
|
|
81
|
+
var yValues: [_PlottableValue] { [y, yStart, yEnd].compactMap { $0 } }
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
struct _ChartCollector {
|
|
85
|
+
var marks: [_RawMark] = []
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// MARK: - Structural content
|
|
89
|
+
|
|
90
|
+
public struct _EmptyChartContent {
|
|
91
|
+
public init() {}
|
|
92
|
+
}
|
|
93
|
+
extension _EmptyChartContent: _PrimitiveChartContent {}
|
|
94
|
+
extension _EmptyChartContent: _ChartContentNode {
|
|
95
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public struct _TupleChartContent<T> {
|
|
99
|
+
let children: [any ChartContent]
|
|
100
|
+
}
|
|
101
|
+
extension _TupleChartContent: _PrimitiveChartContent {}
|
|
102
|
+
extension _TupleChartContent: _ChartContentNode {
|
|
103
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
104
|
+
for child in children { child._collectAny(into: &collector, modifiers: modifiers) }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
public struct _ConditionalChartContent<TrueContent: ChartContent, FalseContent: ChartContent> {
|
|
109
|
+
enum Storage {
|
|
110
|
+
case trueContent(TrueContent)
|
|
111
|
+
case falseContent(FalseContent)
|
|
112
|
+
}
|
|
113
|
+
let storage: Storage
|
|
114
|
+
}
|
|
115
|
+
extension _ConditionalChartContent: _PrimitiveChartContent {}
|
|
116
|
+
extension _ConditionalChartContent: _ChartContentNode {
|
|
117
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
118
|
+
switch storage {
|
|
119
|
+
case .trueContent(let content): content._collectAny(into: &collector, modifiers: modifiers)
|
|
120
|
+
case .falseContent(let content): content._collectAny(into: &collector, modifiers: modifiers)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
extension Optional: ChartContent where Wrapped: ChartContent {
|
|
126
|
+
public typealias Body = Never
|
|
127
|
+
public var body: Never { fatalError("Optional is primitive chart content and has no body") }
|
|
128
|
+
}
|
|
129
|
+
extension Optional: _ChartContentNode where Wrapped: ChartContent {
|
|
130
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
131
|
+
if case .some(let content) = self { content._collectAny(into: &collector, modifiers: modifiers) }
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
public struct _ArrayChartContent<Element: ChartContent> {
|
|
136
|
+
let elements: [Element]
|
|
137
|
+
}
|
|
138
|
+
extension _ArrayChartContent: _PrimitiveChartContent {}
|
|
139
|
+
extension _ArrayChartContent: _ChartContentNode {
|
|
140
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
141
|
+
for element in elements { element._collectAny(into: &collector, modifiers: modifiers) }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/// Type-erased chart content.
|
|
146
|
+
public struct AnyChartContent {
|
|
147
|
+
let storage: any ChartContent
|
|
148
|
+
public init<C: ChartContent>(_ content: C) { storage = content }
|
|
149
|
+
}
|
|
150
|
+
extension AnyChartContent: _PrimitiveChartContent {}
|
|
151
|
+
extension AnyChartContent: _ChartContentNode {
|
|
152
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
153
|
+
storage._collectAny(into: &collector, modifiers: modifiers)
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/// `ForEach` over chart content: one mark group per element, with modifiers
|
|
158
|
+
/// applied to the `ForEach` distributed to each element's marks.
|
|
159
|
+
extension ForEach: ChartContent where Content: ChartContent {
|
|
160
|
+
public typealias Body = Never
|
|
161
|
+
public var body: Never { fatalError("ForEach is primitive chart content and has no body") }
|
|
162
|
+
}
|
|
163
|
+
extension ForEach: _ChartContentNode where Content: ChartContent {
|
|
164
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
165
|
+
for element in data { content(element)._collectAny(into: &collector, modifiers: modifiers) }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
extension ForEach where Content: ChartContent {
|
|
170
|
+
public init(_ data: Data, id: KeyPath<Data.Element, ID>,
|
|
171
|
+
@ChartContentBuilder content: @escaping (Data.Element) -> Content) {
|
|
172
|
+
self.init(_data: data, id: { $0[keyPath: id] }, content: content)
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
extension ForEach where Content: ChartContent, Data.Element: Identifiable, ID == Data.Element.ID {
|
|
177
|
+
public init(_ data: Data, @ChartContentBuilder content: @escaping (Data.Element) -> Content) {
|
|
178
|
+
self.init(_data: data, id: { $0.id }, content: content)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
extension ForEach where Content: ChartContent, Data == Range<Int>, ID == Int {
|
|
183
|
+
public init(_ data: Range<Int>, @ChartContentBuilder content: @escaping (Int) -> Content) {
|
|
184
|
+
self.init(_data: data, id: { $0 }, content: content)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// MARK: - ChartContentBuilder
|
|
189
|
+
|
|
190
|
+
@resultBuilder
|
|
191
|
+
public enum ChartContentBuilder {
|
|
192
|
+
public static func buildBlock() -> _EmptyChartContent { _EmptyChartContent() }
|
|
193
|
+
|
|
194
|
+
public static func buildBlock<Content: ChartContent>(_ content: Content) -> Content { content }
|
|
195
|
+
|
|
196
|
+
public static func buildBlock<each Content: ChartContent>(
|
|
197
|
+
_ content: repeat each Content
|
|
198
|
+
) -> _TupleChartContent<(repeat each Content)> {
|
|
199
|
+
var children: [any ChartContent] = []
|
|
200
|
+
for child in repeat each content { children.append(child) }
|
|
201
|
+
return _TupleChartContent(children: children)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
public static func buildExpression<Content: ChartContent>(_ content: Content) -> Content { content }
|
|
205
|
+
|
|
206
|
+
public static func buildOptional<Content: ChartContent>(_ content: Content?) -> Content? { content }
|
|
207
|
+
|
|
208
|
+
public static func buildEither<TrueContent: ChartContent, FalseContent: ChartContent>(
|
|
209
|
+
first: TrueContent
|
|
210
|
+
) -> _ConditionalChartContent<TrueContent, FalseContent> {
|
|
211
|
+
_ConditionalChartContent(storage: .trueContent(first))
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
public static func buildEither<TrueContent: ChartContent, FalseContent: ChartContent>(
|
|
215
|
+
second: FalseContent
|
|
216
|
+
) -> _ConditionalChartContent<TrueContent, FalseContent> {
|
|
217
|
+
_ConditionalChartContent(storage: .falseContent(second))
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
public static func buildArray<Content: ChartContent>(_ components: [Content]) -> _ArrayChartContent<Content> {
|
|
221
|
+
_ArrayChartContent(elements: components)
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
public static func buildLimitedAvailability<Content: ChartContent>(_ content: Content) -> AnyChartContent {
|
|
225
|
+
AnyChartContent(content)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
// MARK: - Modifiers
|
|
230
|
+
|
|
231
|
+
/// Content with a modifier applied to every mark beneath it.
|
|
232
|
+
public struct _ModifiedChartContent<Content: ChartContent> {
|
|
233
|
+
let content: Content
|
|
234
|
+
let transform: (inout _MarkModifiers) -> Void
|
|
235
|
+
}
|
|
236
|
+
extension _ModifiedChartContent: _PrimitiveChartContent {}
|
|
237
|
+
extension _ModifiedChartContent: _ChartContentNode {
|
|
238
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
239
|
+
// Outer modifiers run first so that the mark's own (inner) ones win.
|
|
240
|
+
var modified = modifiers
|
|
241
|
+
transform(&modified)
|
|
242
|
+
content._collectAny(into: &collector, modifiers: modified)
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/// Where an annotation sits relative to its mark (also the legend position).
|
|
247
|
+
public enum AnnotationPosition: Hashable, Sendable {
|
|
248
|
+
case automatic, top, bottom, leading, trailing, overlay
|
|
249
|
+
case topLeading, topTrailing, bottomLeading, bottomTrailing
|
|
250
|
+
|
|
251
|
+
/// The protocol's position and the alignment it implies.
|
|
252
|
+
var _resolved: (position: String, alignment: Alignment?) {
|
|
253
|
+
switch self {
|
|
254
|
+
case .automatic, .top: ("top", nil)
|
|
255
|
+
case .bottom: ("bottom", nil)
|
|
256
|
+
case .leading: ("leading", nil)
|
|
257
|
+
case .trailing: ("trailing", nil)
|
|
258
|
+
case .overlay: ("overlay", nil)
|
|
259
|
+
case .topLeading: ("top", .leading)
|
|
260
|
+
case .topTrailing: ("top", .trailing)
|
|
261
|
+
case .bottomLeading: ("bottom", .leading)
|
|
262
|
+
case .bottomTrailing: ("bottom", .trailing)
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/// How a line or area is interpolated between its points.
|
|
268
|
+
public enum InterpolationMethod: Hashable, Sendable {
|
|
269
|
+
case linear, cardinal, catmullRom, monotone, stepStart, stepCenter, stepEnd
|
|
270
|
+
|
|
271
|
+
var _name: String {
|
|
272
|
+
switch self {
|
|
273
|
+
case .linear: "linear"
|
|
274
|
+
case .cardinal: "cardinal"
|
|
275
|
+
case .catmullRom: "catmullRom"
|
|
276
|
+
case .monotone: "monotone"
|
|
277
|
+
case .stepStart: "stepStart"
|
|
278
|
+
case .stepCenter: "stepCenter"
|
|
279
|
+
case .stepEnd: "stepEnd"
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
public static func cardinal(tension: CGFloat) -> InterpolationMethod { .cardinal }
|
|
284
|
+
public static func catmullRom(alpha: CGFloat) -> InterpolationMethod { .catmullRom }
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/// The shape of a point or legend symbol.
|
|
288
|
+
public struct BasicChartSymbolShape: Hashable, Sendable {
|
|
289
|
+
let name: String
|
|
290
|
+
|
|
291
|
+
public static let circle = BasicChartSymbolShape(name: "circle")
|
|
292
|
+
public static let square = BasicChartSymbolShape(name: "square")
|
|
293
|
+
public static let triangle = BasicChartSymbolShape(name: "triangle")
|
|
294
|
+
public static let diamond = BasicChartSymbolShape(name: "diamond")
|
|
295
|
+
public static let pentagon = BasicChartSymbolShape(name: "diamond")
|
|
296
|
+
public static let cross = BasicChartSymbolShape(name: "cross")
|
|
297
|
+
public static let plus = BasicChartSymbolShape(name: "plus")
|
|
298
|
+
public static let asterisk = BasicChartSymbolShape(name: "asterisk")
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/// The symbol palette for `symbol(by:)`, in the protocol's order.
|
|
302
|
+
let _chartSymbolPalette = ["circle", "square", "triangle", "diamond", "cross", "plus", "asterisk"]
|
|
303
|
+
|
|
304
|
+
/// The color palette for `foregroundStyle(by:)`.
|
|
305
|
+
let _chartColorPalette: [Color] = [.blue, .green, .orange, .purple, .red, .teal,
|
|
306
|
+
.yellow, .pink, .indigo, .mint, .cyan, .brown]
|
|
307
|
+
|
|
308
|
+
extension ChartContent {
|
|
309
|
+
func _modified(_ transform: @escaping (inout _MarkModifiers) -> Void) -> _ModifiedChartContent<Self> {
|
|
310
|
+
_ModifiedChartContent(content: self, transform: transform)
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
public func foregroundStyle<S: ShapeStyle>(_ style: S) -> some ChartContent {
|
|
314
|
+
_modified { $0.style = style }
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
public func foregroundStyle<Value: Plottable>(by value: PlottableValue<Value>) -> some ChartContent {
|
|
318
|
+
let erased = value._erased
|
|
319
|
+
return _modified { $0.styleBy = erased }
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
public func symbol<Value: Plottable>(by value: PlottableValue<Value>) -> some ChartContent {
|
|
323
|
+
let erased = value._erased
|
|
324
|
+
return _modified { $0.symbolBy = erased }
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
public func symbol(_ shape: BasicChartSymbolShape) -> some ChartContent {
|
|
328
|
+
_modified { $0.symbol = shape.name }
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
public func symbolSize(_ area: CGFloat) -> some ChartContent {
|
|
332
|
+
// SwiftUI takes an area in points²; the protocol wants a diameter.
|
|
333
|
+
let diameter = area.squareRoot()
|
|
334
|
+
return _modified { $0.symbolSize = diameter }
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
public func symbolSize(_ size: CGSize) -> some ChartContent {
|
|
338
|
+
_modified { $0.symbolSize = min(size.width, size.height) }
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
public func interpolationMethod(_ method: InterpolationMethod) -> some ChartContent {
|
|
342
|
+
_modified { $0.interpolation = method._name }
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
public func opacity(_ opacity: Double) -> some ChartContent {
|
|
346
|
+
_modified { $0.opacity = max(0, min(1, opacity)) }
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
public func lineStyle(_ style: StrokeStyle) -> some ChartContent {
|
|
350
|
+
_modified { $0.lineWidth = style.lineWidth }
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
public func cornerRadius(_ radius: CGFloat, style: RoundedCornerStyle = .continuous) -> some ChartContent {
|
|
354
|
+
_modified { $0.cornerRadius = radius }
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
/// Clips the marks with the geometry of the first area or rectangle mark
|
|
358
|
+
/// in `content`, which is scaled like the chart's own marks.
|
|
359
|
+
public func mask<C: ChartContent>(@ChartContentBuilder _ content: () -> C) -> some ChartContent {
|
|
360
|
+
let mask = content()
|
|
361
|
+
return _modified { $0.mask = mask }
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
public func annotation<C: View>(position: AnnotationPosition = .automatic, alignment: Alignment = .center,
|
|
365
|
+
spacing: CGFloat? = nil,
|
|
366
|
+
@ViewBuilder content: () -> C) -> some ChartContent {
|
|
367
|
+
let view = content()
|
|
368
|
+
let annotation = _MarkAnnotation(position: position, alignment: alignment, spacing: spacing ?? 4, content: view)
|
|
369
|
+
return _modified { $0.annotations.append(annotation) }
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
/// Accepted for source compatibility; the shim has no accessibility tree.
|
|
373
|
+
public func accessibilityLabel(_ label: String) -> some ChartContent { self }
|
|
374
|
+
public func accessibilityValue(_ value: String) -> some ChartContent { self }
|
|
375
|
+
public func accessibilityHidden(_ hidden: Bool) -> some ChartContent { self }
|
|
376
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/// `ChartProxy`, `.chartOverlay`, `.chartBackground` and the selection
|
|
2
|
+
/// modifiers. The page lays charts out and draws their marks (Phase 7), so
|
|
3
|
+
/// the Swift side knows no plot geometry: a proxy maps no value to a
|
|
4
|
+
/// position or back (nil), and its plot frame is unknown (nil). An overlay
|
|
5
|
+
/// or background is drawn over or under the chart with that proxy. The
|
|
6
|
+
/// page reports no taps or drags on a chart, so a selection binding is
|
|
7
|
+
/// never set by the viewer.
|
|
8
|
+
|
|
9
|
+
/// Positions in a chart's plot, for overlays: unknown in the browser.
|
|
10
|
+
public struct ChartProxy {
|
|
11
|
+
init() {}
|
|
12
|
+
|
|
13
|
+
/// Nil: the plot's geometry is the page's.
|
|
14
|
+
public func position<P: Plottable>(forX value: P) -> CGFloat? { nil }
|
|
15
|
+
public func position<P: Plottable>(forY value: P) -> CGFloat? { nil }
|
|
16
|
+
public func position<X: Plottable, Y: Plottable>(for value: (x: X, y: Y)) -> CGPoint? { nil }
|
|
17
|
+
public func value<P: Plottable>(atX position: CGFloat, as type: P.Type = P.self) -> P? { nil }
|
|
18
|
+
public func value<P: Plottable>(atY position: CGFloat, as type: P.Type = P.self) -> P? { nil }
|
|
19
|
+
public func value<X: Plottable, Y: Plottable>(at location: CGPoint, as type: (X, Y).Type = (X, Y).self) -> (X, Y)? { nil }
|
|
20
|
+
/// Nil: the plot's frame is the page's.
|
|
21
|
+
public var plotFrame: Anchor<CGRect>? { nil }
|
|
22
|
+
/// Zero.
|
|
23
|
+
public var plotSize: CGSize { .zero }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
nonisolated extension View {
|
|
27
|
+
/// Draws `content` over the chart with a proxy (see the file comment).
|
|
28
|
+
public func chartOverlay<V: View>(alignment: Alignment = .center,
|
|
29
|
+
@ViewBuilder content: @escaping (ChartProxy) -> V) -> some View {
|
|
30
|
+
overlay(alignment: alignment) { content(ChartProxy()) }
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/// Draws `content` under the chart with a proxy (see the file comment).
|
|
34
|
+
public func chartBackground<V: View>(alignment: Alignment = .center,
|
|
35
|
+
@ViewBuilder content: @escaping (ChartProxy) -> V) -> some View {
|
|
36
|
+
background(alignment: alignment) { content(ChartProxy()) }
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/// Styles the chart's plot area with `content`. The page lays the plot
|
|
40
|
+
/// out inside the chart, so the plot is not a view of its own here:
|
|
41
|
+
/// `content` gets the whole chart (an overlay covers the axes too).
|
|
42
|
+
public func chartPlotStyle<Content: View>(@ViewBuilder content: @escaping (ChartPlotContent) -> Content) -> some View {
|
|
43
|
+
content(ChartPlotContent(content: AnyView(self)))
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/// Accepted: the viewer cannot select a value on the page.
|
|
47
|
+
public func chartXSelection<P: Plottable>(value: Binding<P?>) -> some View { self }
|
|
48
|
+
public func chartXSelection<P: Plottable & Comparable>(range: Binding<ClosedRange<P>?>) -> some View { self }
|
|
49
|
+
public func chartYSelection<P: Plottable>(value: Binding<P?>) -> some View { self }
|
|
50
|
+
public func chartYSelection<P: Plottable & Comparable>(range: Binding<ClosedRange<P>?>) -> some View { self }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/// The plot area `chartPlotStyle` styles: here, the whole chart (see there).
|
|
54
|
+
public struct ChartPlotContent: View {
|
|
55
|
+
let content: AnyView
|
|
56
|
+
public var body: some View { content }
|
|
57
|
+
}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// The marks: BarMark, LineMark, AreaMark, PointMark, RuleMark, RectangleMark.
|
|
2
|
+
// Each is one `_RawMark`; Chart.swift groups lines and areas by series.
|
|
3
|
+
|
|
4
|
+
/// The width (or height) of a bar or rectangle.
|
|
5
|
+
public enum MarkDimension: Equatable, Sendable {
|
|
6
|
+
/// 80 % of the band.
|
|
7
|
+
case automatic
|
|
8
|
+
/// A fraction of the band.
|
|
9
|
+
case ratio(CGFloat)
|
|
10
|
+
/// Points, centered on the value.
|
|
11
|
+
case fixed(CGFloat)
|
|
12
|
+
/// The band inset by points on each side (treated as `automatic`).
|
|
13
|
+
case inset(CGFloat)
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
extension MarkDimension: ExpressibleByFloatLiteral, ExpressibleByIntegerLiteral {
|
|
17
|
+
public init(floatLiteral value: Double) { self = .fixed(value) }
|
|
18
|
+
public init(integerLiteral value: Int) { self = .fixed(CGFloat(value)) }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/// A mark that resolves to one `_RawMark`.
|
|
22
|
+
protocol _SingleMark: _PrimitiveChartContent, _ChartContentNode {
|
|
23
|
+
var _raw: _RawMark { get }
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
extension _SingleMark {
|
|
27
|
+
func _collect(into collector: inout _ChartCollector, modifiers: _MarkModifiers) {
|
|
28
|
+
var mark = _raw
|
|
29
|
+
mark.modifiers = modifiers
|
|
30
|
+
collector.marks.append(mark)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// MARK: - BarMark
|
|
35
|
+
|
|
36
|
+
public struct BarMark {
|
|
37
|
+
let _raw: _RawMark
|
|
38
|
+
|
|
39
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>,
|
|
40
|
+
width: MarkDimension = .automatic, stacking: MarkStackingMethod = .standard) {
|
|
41
|
+
_raw = _RawMark(kind: .bar, x: x.value._plottableValue, y: y.value._plottableValue, width: width)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>,
|
|
45
|
+
width: MarkDimension = .automatic) {
|
|
46
|
+
_raw = _RawMark(kind: .bar, x: x.value._plottableValue,
|
|
47
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue, width: width)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public init<X: Plottable, Y: Plottable>(xStart: PlottableValue<X>, xEnd: PlottableValue<X>, y: PlottableValue<Y>,
|
|
51
|
+
height: MarkDimension = .automatic) {
|
|
52
|
+
_raw = _RawMark(kind: .bar, xStart: xStart.value._plottableValue, xEnd: xEnd.value._plottableValue,
|
|
53
|
+
y: y.value._plottableValue, height: height)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public init<X: Plottable>(x: PlottableValue<X>, width: MarkDimension = .automatic,
|
|
57
|
+
stacking: MarkStackingMethod = .standard) {
|
|
58
|
+
_raw = _RawMark(kind: .bar, x: x.value._plottableValue, width: width)
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public init<Y: Plottable>(y: PlottableValue<Y>, height: MarkDimension = .automatic,
|
|
62
|
+
stacking: MarkStackingMethod = .standard) {
|
|
63
|
+
_raw = _RawMark(kind: .bar, y: y.value._plottableValue, height: height)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/// Accepted for source compatibility; the shim does not stack bars.
|
|
68
|
+
public enum MarkStackingMethod: Hashable, Sendable {
|
|
69
|
+
case standard, normalized, center, unstacked
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// MARK: - LineMark
|
|
73
|
+
|
|
74
|
+
public struct LineMark {
|
|
75
|
+
let _raw: _RawMark
|
|
76
|
+
|
|
77
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>) {
|
|
78
|
+
_raw = _RawMark(kind: .line, x: x.value._plottableValue, y: y.value._plottableValue)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
public init<X: Plottable, Y: Plottable, S: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>,
|
|
82
|
+
series: PlottableValue<S>) {
|
|
83
|
+
_raw = _RawMark(kind: .line, x: x.value._plottableValue, y: y.value._plottableValue,
|
|
84
|
+
series: series.value._plottableValue)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// MARK: - AreaMark
|
|
89
|
+
|
|
90
|
+
public struct AreaMark {
|
|
91
|
+
let _raw: _RawMark
|
|
92
|
+
|
|
93
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>,
|
|
94
|
+
stacking: MarkStackingMethod = .standard) {
|
|
95
|
+
_raw = _RawMark(kind: .area, x: x.value._plottableValue, y: y.value._plottableValue)
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public init<X: Plottable, Y: Plottable, S: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>,
|
|
99
|
+
series: PlottableValue<S>,
|
|
100
|
+
stacking: MarkStackingMethod = .standard) {
|
|
101
|
+
_raw = _RawMark(kind: .area, x: x.value._plottableValue, y: y.value._plottableValue,
|
|
102
|
+
series: series.value._plottableValue)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>) {
|
|
106
|
+
_raw = _RawMark(kind: .area, x: x.value._plottableValue,
|
|
107
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue)
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
public init<X: Plottable, Y: Plottable, S: Plottable>(x: PlottableValue<X>, yStart: PlottableValue<Y>,
|
|
111
|
+
yEnd: PlottableValue<Y>, series: PlottableValue<S>) {
|
|
112
|
+
_raw = _RawMark(kind: .area, x: x.value._plottableValue,
|
|
113
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue,
|
|
114
|
+
series: series.value._plottableValue)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// MARK: - PointMark
|
|
119
|
+
|
|
120
|
+
public struct PointMark {
|
|
121
|
+
let _raw: _RawMark
|
|
122
|
+
|
|
123
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>) {
|
|
124
|
+
_raw = _RawMark(kind: .point, x: x.value._plottableValue, y: y.value._plottableValue)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// MARK: - RuleMark
|
|
129
|
+
|
|
130
|
+
public struct RuleMark {
|
|
131
|
+
let _raw: _RawMark
|
|
132
|
+
|
|
133
|
+
/// A horizontal rule across the plot.
|
|
134
|
+
public init<Y: Plottable>(y: PlottableValue<Y>) {
|
|
135
|
+
_raw = _RawMark(kind: .rule, y: y.value._plottableValue)
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/// A vertical rule across the plot.
|
|
139
|
+
public init<X: Plottable>(x: PlottableValue<X>) {
|
|
140
|
+
_raw = _RawMark(kind: .rule, x: x.value._plottableValue)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>) {
|
|
144
|
+
_raw = _RawMark(kind: .rule, x: x.value._plottableValue,
|
|
145
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public init<X: Plottable, Y: Plottable>(xStart: PlottableValue<X>, xEnd: PlottableValue<X>, y: PlottableValue<Y>) {
|
|
149
|
+
_raw = _RawMark(kind: .rule, xStart: xStart.value._plottableValue, xEnd: xEnd.value._plottableValue,
|
|
150
|
+
y: y.value._plottableValue)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// MARK: - RectangleMark
|
|
155
|
+
|
|
156
|
+
public struct RectangleMark {
|
|
157
|
+
let _raw: _RawMark
|
|
158
|
+
|
|
159
|
+
/// A band between two x values across the plot's height.
|
|
160
|
+
public init<X: Plottable>(xStart: PlottableValue<X>, xEnd: PlottableValue<X>) {
|
|
161
|
+
_raw = _RawMark(kind: .rectangle, xStart: xStart.value._plottableValue, xEnd: xEnd.value._plottableValue)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/// A band between two y values across the plot's width.
|
|
165
|
+
public init<Y: Plottable>(yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>) {
|
|
166
|
+
_raw = _RawMark(kind: .rectangle, yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public init<X: Plottable, Y: Plottable>(xStart: PlottableValue<X>, xEnd: PlottableValue<X>,
|
|
170
|
+
yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>) {
|
|
171
|
+
_raw = _RawMark(kind: .rectangle, xStart: xStart.value._plottableValue, xEnd: xEnd.value._plottableValue,
|
|
172
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue)
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, yStart: PlottableValue<Y>, yEnd: PlottableValue<Y>,
|
|
176
|
+
width: MarkDimension = .automatic) {
|
|
177
|
+
_raw = _RawMark(kind: .rectangle, x: x.value._plottableValue,
|
|
178
|
+
yStart: yStart.value._plottableValue, yEnd: yEnd.value._plottableValue, width: width)
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
public init<X: Plottable, Y: Plottable>(xStart: PlottableValue<X>, xEnd: PlottableValue<X>, y: PlottableValue<Y>,
|
|
182
|
+
height: MarkDimension = .automatic) {
|
|
183
|
+
_raw = _RawMark(kind: .rectangle, xStart: xStart.value._plottableValue, xEnd: xEnd.value._plottableValue,
|
|
184
|
+
y: y.value._plottableValue, height: height)
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
public init<X: Plottable, Y: Plottable>(x: PlottableValue<X>, y: PlottableValue<Y>,
|
|
188
|
+
width: MarkDimension = .automatic, height: MarkDimension = .automatic) {
|
|
189
|
+
_raw = _RawMark(kind: .rectangle, x: x.value._plottableValue, y: y.value._plottableValue,
|
|
190
|
+
width: width, height: height)
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
extension BarMark: _SingleMark {}
|
|
195
|
+
|
|
196
|
+
extension LineMark: _SingleMark {}
|
|
197
|
+
|
|
198
|
+
extension AreaMark: _SingleMark {}
|
|
199
|
+
|
|
200
|
+
extension PointMark: _SingleMark {}
|
|
201
|
+
|
|
202
|
+
extension RuleMark: _SingleMark {}
|
|
203
|
+
|
|
204
|
+
extension RectangleMark: _SingleMark {}
|