@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,331 @@
|
|
|
1
|
+
// MARK: - List
|
|
2
|
+
|
|
3
|
+
public protocol ListStyle {
|
|
4
|
+
var _name: String { get }
|
|
5
|
+
}
|
|
6
|
+
public struct DefaultListStyle: ListStyle {
|
|
7
|
+
public init() {}
|
|
8
|
+
public var _name: String { "insetGrouped" }
|
|
9
|
+
}
|
|
10
|
+
public struct PlainListStyle: ListStyle {
|
|
11
|
+
public init() {}
|
|
12
|
+
public var _name: String { "plain" }
|
|
13
|
+
}
|
|
14
|
+
public struct InsetGroupedListStyle: ListStyle {
|
|
15
|
+
public init() {}
|
|
16
|
+
public var _name: String { "insetGrouped" }
|
|
17
|
+
}
|
|
18
|
+
public struct GroupedListStyle: ListStyle {
|
|
19
|
+
public init() {}
|
|
20
|
+
public var _name: String { "grouped" }
|
|
21
|
+
}
|
|
22
|
+
extension ListStyle where Self == DefaultListStyle {
|
|
23
|
+
public static var automatic: DefaultListStyle { DefaultListStyle() }
|
|
24
|
+
}
|
|
25
|
+
extension ListStyle where Self == PlainListStyle {
|
|
26
|
+
public static var plain: PlainListStyle { PlainListStyle() }
|
|
27
|
+
}
|
|
28
|
+
extension ListStyle where Self == InsetGroupedListStyle {
|
|
29
|
+
public static var insetGrouped: InsetGroupedListStyle { InsetGroupedListStyle() }
|
|
30
|
+
}
|
|
31
|
+
extension ListStyle where Self == GroupedListStyle {
|
|
32
|
+
public static var grouped: GroupedListStyle { GroupedListStyle() }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
nonisolated extension View {
|
|
36
|
+
public func listStyle<S: ListStyle>(_ style: S) -> some View {
|
|
37
|
+
environment(\._listStyle, style._name)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// A `List(selection:)` binding with its value type erased. Rows read it from
|
|
42
|
+
/// the environment (`_listSelection`): a `NavigationLink(value:)` row whose
|
|
43
|
+
/// value equals `get()` is the selected row, and in a `NavigationSplitView`
|
|
44
|
+
/// sidebar tapping such a row calls `set` instead of pushing.
|
|
45
|
+
struct _ListSelection {
|
|
46
|
+
let get: () -> AnyHashable?
|
|
47
|
+
let set: (AnyHashable?) -> Void
|
|
48
|
+
/// Whether the row with this value is selected.
|
|
49
|
+
let contains: (AnyHashable) -> Bool
|
|
50
|
+
/// Adds or removes a value (a `Set` selection; for an optional, selects or clears).
|
|
51
|
+
let toggle: (AnyHashable) -> Void
|
|
52
|
+
/// Whether a `.tag` / link value is of the selection's value type.
|
|
53
|
+
let accepts: (AnyHashable) -> Bool
|
|
54
|
+
/// `Set<Value>` selections toggle on tap; `Value?` selections set.
|
|
55
|
+
let isMultiple: Bool
|
|
56
|
+
/// The whole current selection, for the identity below.
|
|
57
|
+
let snapshot: () -> AnyHashable
|
|
58
|
+
/// Set by the runtime: the list and the selection the pass carried, so the
|
|
59
|
+
/// environments of two passes compare equal while the selection is unchanged
|
|
60
|
+
/// (the binding is re-created by every pass; see `_Sameness`).
|
|
61
|
+
var identity: _RuntimeKey?
|
|
62
|
+
|
|
63
|
+
init<Value: Hashable>(_ binding: Binding<Value?>) {
|
|
64
|
+
get = { binding.wrappedValue.map { AnyHashable($0) } }
|
|
65
|
+
set = { binding.wrappedValue = $0?.base as? Value }
|
|
66
|
+
contains = { binding.wrappedValue.map { AnyHashable($0) } == $0 }
|
|
67
|
+
toggle = { value in
|
|
68
|
+
if binding.wrappedValue.map({ AnyHashable($0) }) == value {
|
|
69
|
+
binding.wrappedValue = nil
|
|
70
|
+
} else {
|
|
71
|
+
binding.wrappedValue = value.base as? Value
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
accepts = { $0.base is Value }
|
|
75
|
+
isMultiple = false
|
|
76
|
+
snapshot = { AnyHashable(binding.wrappedValue) }
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/// `get` / `set` reduce a multiple selection to one value: the first of the set.
|
|
80
|
+
init<Value: Hashable>(_ binding: Binding<Set<Value>>) {
|
|
81
|
+
get = { binding.wrappedValue.first.map { AnyHashable($0) } }
|
|
82
|
+
set = { value in
|
|
83
|
+
if let value = value?.base as? Value {
|
|
84
|
+
binding.wrappedValue = [value]
|
|
85
|
+
} else {
|
|
86
|
+
binding.wrappedValue = []
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
contains = { value in
|
|
90
|
+
guard let value = value.base as? Value else { return false }
|
|
91
|
+
return binding.wrappedValue.contains(value)
|
|
92
|
+
}
|
|
93
|
+
toggle = { value in
|
|
94
|
+
guard let value = value.base as? Value else { return }
|
|
95
|
+
if binding.wrappedValue.contains(value) {
|
|
96
|
+
binding.wrappedValue.remove(value)
|
|
97
|
+
} else {
|
|
98
|
+
binding.wrappedValue.insert(value)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
accepts = { $0.base is Value }
|
|
102
|
+
isMultiple = true
|
|
103
|
+
snapshot = { AnyHashable(binding.wrappedValue) }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/// Lists that carry a selection binding; the runtime puts it in the rows' environment.
|
|
108
|
+
protocol _ListSelectionProviding: _TraitBearing {
|
|
109
|
+
var _selection: _ListSelection? { get }
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
enum _ListSelectionKey: EnvironmentKey { static var defaultValue: _ListSelection? { nil } }
|
|
113
|
+
enum _SplitSidebarKey: EnvironmentKey { static let defaultValue = false }
|
|
114
|
+
|
|
115
|
+
extension EnvironmentValues {
|
|
116
|
+
/// The enclosing `List(selection:)`'s binding, for its rows.
|
|
117
|
+
var _listSelection: _ListSelection? {
|
|
118
|
+
get { self[_ListSelectionKey.self] }
|
|
119
|
+
set { self[_ListSelectionKey.self] = newValue }
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/// True inside a `NavigationSplitView`'s sidebar, where value links select
|
|
123
|
+
/// instead of pushing.
|
|
124
|
+
var _splitSidebar: Bool {
|
|
125
|
+
get { self[_SplitSidebarKey.self] }
|
|
126
|
+
set { self[_SplitSidebarKey.self] = newValue }
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
public struct List<Content: View> {
|
|
131
|
+
let content: Content
|
|
132
|
+
let selection: _ListSelection?
|
|
133
|
+
/// `.refreshable`: true while the action runs.
|
|
134
|
+
@State var refreshing = false
|
|
135
|
+
|
|
136
|
+
public init(@ViewBuilder content: () -> Content) {
|
|
137
|
+
self.content = content()
|
|
138
|
+
self.selection = nil
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
public init<Value: Hashable>(selection: Binding<Value?>, @ViewBuilder content: () -> Content) {
|
|
142
|
+
self.content = content()
|
|
143
|
+
self.selection = _ListSelection(selection)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
public init<Value: Hashable>(selection: Binding<Set<Value>>, @ViewBuilder content: () -> Content) {
|
|
147
|
+
self.content = content()
|
|
148
|
+
self.selection = _ListSelection(selection)
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
extension List {
|
|
153
|
+
public init<Data: RandomAccessCollection, ID: Hashable, RowContent: View>(
|
|
154
|
+
_ data: Data, id: KeyPath<Data.Element, ID>,
|
|
155
|
+
@ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
156
|
+
) where Content == ForEach<Data, ID, RowContent> {
|
|
157
|
+
self.content = ForEach(data, id: id, content: rowContent)
|
|
158
|
+
self.selection = nil
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
public init<Data: RandomAccessCollection, RowContent: View>(
|
|
162
|
+
_ data: Data, @ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
163
|
+
) where Data.Element: Identifiable, Content == ForEach<Data, Data.Element.ID, RowContent> {
|
|
164
|
+
self.content = ForEach(data, content: rowContent)
|
|
165
|
+
self.selection = nil
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
public init<Data: RandomAccessCollection, ID: Hashable, Value: Hashable, RowContent: View>(
|
|
169
|
+
_ data: Data, id: KeyPath<Data.Element, ID>, selection: Binding<Value?>,
|
|
170
|
+
@ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
171
|
+
) where Content == ForEach<Data, ID, RowContent> {
|
|
172
|
+
self.content = ForEach(data, id: id, content: rowContent)
|
|
173
|
+
self.selection = _ListSelection(selection)
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
public init<Data: RandomAccessCollection, Value: Hashable, RowContent: View>(
|
|
177
|
+
_ data: Data, selection: Binding<Value?>,
|
|
178
|
+
@ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
179
|
+
) where Data.Element: Identifiable, Content == ForEach<Data, Data.Element.ID, RowContent> {
|
|
180
|
+
self.content = ForEach(data, content: rowContent)
|
|
181
|
+
self.selection = _ListSelection(selection)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
public init<Data: RandomAccessCollection, ID: Hashable, Value: Hashable, RowContent: View>(
|
|
185
|
+
_ data: Data, id: KeyPath<Data.Element, ID>, selection: Binding<Set<Value>>,
|
|
186
|
+
@ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
187
|
+
) where Content == ForEach<Data, ID, RowContent> {
|
|
188
|
+
self.content = ForEach(data, id: id, content: rowContent)
|
|
189
|
+
self.selection = _ListSelection(selection)
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
public init<Data: RandomAccessCollection, Value: Hashable, RowContent: View>(
|
|
193
|
+
_ data: Data, selection: Binding<Set<Value>>,
|
|
194
|
+
@ViewBuilder rowContent: @escaping (Data.Element) -> RowContent
|
|
195
|
+
) where Data.Element: Identifiable, Content == ForEach<Data, Data.Element.ID, RowContent> {
|
|
196
|
+
self.content = ForEach(data, content: rowContent)
|
|
197
|
+
self.selection = _ListSelection(selection)
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
extension List: _PrimitiveView {}
|
|
201
|
+
extension List: _HostView {
|
|
202
|
+
var _kind: String { "list" }
|
|
203
|
+
/// `editing` (the environment's edit mode) and `refreshable` / `refreshing`
|
|
204
|
+
/// (`.refreshable`) are present only when true / when refreshable.
|
|
205
|
+
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
206
|
+
var props: [String: _JSON] = ["style": .string(environment._listStyle)]
|
|
207
|
+
if environment.editMode?.wrappedValue.isEditing == true { props["editing"] = .bool(true) }
|
|
208
|
+
_refresh(in: environment).addProps(to: &props)
|
|
209
|
+
// `.scrollDismissesKeyboard` (ScrollModifiers.swift).
|
|
210
|
+
if environment._scrollDismissesKeyboard { props["dismissesKeyboard"] = .bool(true) }
|
|
211
|
+
// `.scrollContentBackground(.hidden)` (ScrollViewReader.swift).
|
|
212
|
+
if environment._scrollContentBackground == .hidden { props["background"] = .string("hidden") }
|
|
213
|
+
// `.environment(\.defaultMinListRowHeight, 1)`: rows as short as their content.
|
|
214
|
+
if environment.defaultMinListRowHeight != 44 { props["minRowHeight"] = .number(Double(max(0, environment.defaultMinListRowHeight))) }
|
|
215
|
+
return .object(props)
|
|
216
|
+
}
|
|
217
|
+
var _content: [any View] { [content] }
|
|
218
|
+
var _handler: ((_JSON) -> Void)? { nil }
|
|
219
|
+
|
|
220
|
+
func _refresh(in environment: EnvironmentValues) -> _Refresh {
|
|
221
|
+
_Refresh(action: environment._refreshAction, refreshing: $refreshing)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
extension List: _Refreshing {}
|
|
225
|
+
|
|
226
|
+
/// `List` and `ScrollView`: hosts whose `refresh` handler the runtime takes
|
|
227
|
+
/// from `_refresh(in:)` (the handler depends on the environment).
|
|
228
|
+
protocol _Refreshing: _TraitBearing {
|
|
229
|
+
func _refresh(in environment: EnvironmentValues) -> _Refresh
|
|
230
|
+
}
|
|
231
|
+
extension List: _ListSelectionProviding {
|
|
232
|
+
var _selection: _ListSelection? { selection }
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// MARK: - Section
|
|
236
|
+
|
|
237
|
+
public struct Section<Content: View> {
|
|
238
|
+
let header: String?
|
|
239
|
+
let footer: String?
|
|
240
|
+
let content: Content
|
|
241
|
+
/// Modifiers applied to the section itself (`Section { … }.disabled(x)`)
|
|
242
|
+
/// style each of its rows, as in SwiftUI, instead of boxing the section
|
|
243
|
+
/// (a `styled` around a `section` is not a section to the list layout).
|
|
244
|
+
var rowStyles: [_Style] = []
|
|
245
|
+
|
|
246
|
+
public init(@ViewBuilder content: () -> Content) {
|
|
247
|
+
self.header = nil
|
|
248
|
+
self.footer = nil
|
|
249
|
+
self.content = content()
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
/// A header from a localized key.
|
|
253
|
+
public init(_ titleKey: LocalizedStringKey, @ViewBuilder content: () -> Content) {
|
|
254
|
+
self.header = titleKey.key
|
|
255
|
+
self.footer = nil
|
|
256
|
+
self.content = content()
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@_disfavoredOverload
|
|
260
|
+
public init<S: StringProtocol>(_ title: S, @ViewBuilder content: () -> Content) {
|
|
261
|
+
self.header = String(title)
|
|
262
|
+
self.footer = nil
|
|
263
|
+
self.content = content()
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/// Only `Text` headers and footers are supported; their content becomes the title.
|
|
267
|
+
public init(@ViewBuilder content: () -> Content, @ViewBuilder header: () -> Text) {
|
|
268
|
+
self.header = header().content
|
|
269
|
+
self.footer = nil
|
|
270
|
+
self.content = content()
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
public init(@ViewBuilder content: () -> Content, @ViewBuilder footer: () -> Text) {
|
|
274
|
+
self.header = nil
|
|
275
|
+
self.footer = footer().content
|
|
276
|
+
self.content = content()
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
public init(@ViewBuilder content: () -> Content, @ViewBuilder header: () -> Text,
|
|
280
|
+
@ViewBuilder footer: () -> Text) {
|
|
281
|
+
self.header = header().content
|
|
282
|
+
self.footer = footer().content
|
|
283
|
+
self.content = content()
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/// A header or footer that is a `Text` (or an optional one) is a string
|
|
287
|
+
/// prop, as above; any other view is a `sectionheader` / `sectionfooter`
|
|
288
|
+
/// child (SectionSupplements.swift).
|
|
289
|
+
var headerView: (any View)?
|
|
290
|
+
var footerView: (any View)?
|
|
291
|
+
}
|
|
292
|
+
/// Lets pickers look through sections for their options, and modifiers
|
|
293
|
+
/// style a section's rows.
|
|
294
|
+
protocol _SectionView: _TraitBearing {
|
|
295
|
+
var _sectionContent: any View { get }
|
|
296
|
+
func _stylingRows(_ style: _Style) -> any View
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
extension Section: _SectionView {
|
|
300
|
+
var _sectionContent: any View { content }
|
|
301
|
+
func _stylingRows(_ style: _Style) -> any View {
|
|
302
|
+
var copy = self
|
|
303
|
+
copy.rowStyles.append(style)
|
|
304
|
+
return copy
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
extension Section: _PrimitiveView {}
|
|
309
|
+
extension Section: _HostView {
|
|
310
|
+
var _kind: String { "section" }
|
|
311
|
+
func _props(in environment: EnvironmentValues) -> _JSON {
|
|
312
|
+
.object(["header": header.map(_JSON.string) ?? .null, "footer": footer.map(_JSON.string) ?? .null])
|
|
313
|
+
}
|
|
314
|
+
var _content: [any View] {
|
|
315
|
+
// Each style distributes over the rows (`_StyledGroup`); a second one
|
|
316
|
+
// wraps the already styled rows again.
|
|
317
|
+
var view: any View = content
|
|
318
|
+
for style in rowStyles { view = _styledGroup(view, style) }
|
|
319
|
+
// View headers and footers come first and last, outside the row styles.
|
|
320
|
+
var children: [any View] = [view]
|
|
321
|
+
if let headerView { children.insert(_SectionSupplement(kind: "sectionheader", content: headerView), at: 0) }
|
|
322
|
+
if let footerView { children.append(_SectionSupplement(kind: "sectionfooter", content: footerView)) }
|
|
323
|
+
return children
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/// `_StyledGroup(content: view, style: style)` for an existential view.
|
|
328
|
+
func _styledGroup(_ view: any View, _ style: _Style) -> any View {
|
|
329
|
+
func open<V: View>(_ content: V) -> any View { _StyledGroup(content: content, style: style) }
|
|
330
|
+
return open(view)
|
|
331
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/// A button that shows its content as a menu. The renderer lays out only the
|
|
2
|
+
/// label (the first child, wrapped in a `zstack` so it is always one element)
|
|
3
|
+
/// and lists the remaining children (buttons, inline pickers, dividers,
|
|
4
|
+
/// sections) in a popover when tapped.
|
|
5
|
+
public struct Menu<Label: View, Content: View> {
|
|
6
|
+
let label: Label
|
|
7
|
+
let content: Content
|
|
8
|
+
|
|
9
|
+
public init(@ViewBuilder content: () -> Content, @ViewBuilder label: () -> Label) {
|
|
10
|
+
self.content = content()
|
|
11
|
+
self.label = label()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
extension Menu where Label == Text {
|
|
16
|
+
@_disfavoredOverload
|
|
17
|
+
public init<S: StringProtocol>(_ title: S, @ViewBuilder content: () -> Content) {
|
|
18
|
+
self.label = Text(title)
|
|
19
|
+
self.content = content()
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
extension Menu where Label == SwiftUI.Label<Text, Image> {
|
|
24
|
+
@_disfavoredOverload
|
|
25
|
+
public init<S: StringProtocol>(_ title: S, systemImage: String, @ViewBuilder content: () -> Content) {
|
|
26
|
+
self.label = SwiftUI.Label(String(title), systemImage: systemImage)
|
|
27
|
+
self.content = content()
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
extension Menu: _PrimitiveView {}
|
|
32
|
+
extension Menu: _HostView {
|
|
33
|
+
var _kind: String { "menu" }
|
|
34
|
+
func _props(in environment: EnvironmentValues) -> _JSON { .object([:]) }
|
|
35
|
+
var _content: [any View] { [ZStack { label }, content] }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public protocol MenuStyle {}
|
|
39
|
+
public struct DefaultMenuStyle: MenuStyle { public init() {} }
|
|
40
|
+
public struct ButtonMenuStyle: MenuStyle { public init() {} }
|
|
41
|
+
extension MenuStyle where Self == DefaultMenuStyle {
|
|
42
|
+
public static var automatic: DefaultMenuStyle { DefaultMenuStyle() }
|
|
43
|
+
}
|
|
44
|
+
/// A menu whose label is a borderless button (iOS 14's style, deprecated); drawn as the default.
|
|
45
|
+
public struct BorderlessButtonMenuStyle: MenuStyle { public init() {} }
|
|
46
|
+
extension MenuStyle where Self == BorderlessButtonMenuStyle {
|
|
47
|
+
public static var borderlessButton: BorderlessButtonMenuStyle { BorderlessButtonMenuStyle() }
|
|
48
|
+
}
|
|
49
|
+
extension MenuStyle where Self == ButtonMenuStyle {
|
|
50
|
+
public static var button: ButtonMenuStyle { ButtonMenuStyle() }
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public enum MenuIndicatorVisibility: Hashable, Sendable { case automatic, visible, hidden }
|
|
54
|
+
|
|
55
|
+
nonisolated extension View {
|
|
56
|
+
public func menuStyle<S: MenuStyle>(_ style: S) -> some View { self }
|
|
57
|
+
public func menuIndicator(_ visibility: MenuIndicatorVisibility) -> some View { self }
|
|
58
|
+
}
|