@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,226 @@
|
|
|
1
|
+
// `#selector` without the Objective-C runtime. On Apple platforms a selector
|
|
2
|
+
// names a method the runtime looks up when a message is sent. Here the
|
|
3
|
+
// staging rewrites `#selector(handle(_:))` into
|
|
4
|
+
// `Selector(Self.handle(_:), name: "handle(_:)")`: the method itself,
|
|
5
|
+
// unbound, which the selector calls on whatever target the API holds (it
|
|
6
|
+
// dispatches dynamically, so overrides are called). `@objc` is dropped from
|
|
7
|
+
// the declarations (packages/cli/src/stage.ts, `rewriteObjC`).
|
|
8
|
+
//
|
|
9
|
+
// The APIs that take a target and a selector take this `Selector`:
|
|
10
|
+
// `NotificationCenter.addObserver(_:selector:name:object:)`
|
|
11
|
+
// (NotificationCenter.swift), `Timer`'s target/selector initializers (here),
|
|
12
|
+
// and UIKit's `CADisplayLink`,
|
|
13
|
+
// `UIControl.addTarget(_:action:for:)` and gesture recognizers. Selectors
|
|
14
|
+
// made from strings (`Selector("tick")`, `NSSelectorFromString`) have a name
|
|
15
|
+
// and nothing to call.
|
|
16
|
+
|
|
17
|
+
import Foundation
|
|
18
|
+
import SwiftUI
|
|
19
|
+
|
|
20
|
+
public struct Selector: Hashable, CustomStringConvertible, ExpressibleByStringLiteral, @unchecked Sendable {
|
|
21
|
+
/// The method's name as the source spelled it; selectors compare by it.
|
|
22
|
+
public let name: String
|
|
23
|
+
let invoke: ((AnyObject, Any?) -> Void)?
|
|
24
|
+
|
|
25
|
+
public init(_ name: String) {
|
|
26
|
+
self.name = name
|
|
27
|
+
invoke = nil
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public init(stringLiteral value: String) { self.init(value) }
|
|
31
|
+
|
|
32
|
+
/// A method without arguments.
|
|
33
|
+
public init<T: AnyObject, R>(_ method: @escaping (T) -> () -> R, name: String) {
|
|
34
|
+
self.name = name
|
|
35
|
+
invoke = { target, _ in
|
|
36
|
+
guard let target = target as? T else { return }
|
|
37
|
+
_ = method(target)()
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/// A method with one argument: the sender, the notification, the timer.
|
|
42
|
+
public init<T: AnyObject, A, R>(_ method: @escaping (T) -> (A) -> R, name: String) {
|
|
43
|
+
self.name = name
|
|
44
|
+
invoke = { target, argument in
|
|
45
|
+
guard let target = target as? T, let argument = Self.cast(argument, to: A.self) else { return }
|
|
46
|
+
_ = method(target)(argument)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/// A method with two arguments (`(_:forEvent:)`); the second is nil when it can be.
|
|
51
|
+
public init<T: AnyObject, A, B, R>(_ method: @escaping (T) -> (A, B) -> R, name: String) {
|
|
52
|
+
self.name = name
|
|
53
|
+
invoke = { target, argument in
|
|
54
|
+
guard let target = target as? T, let first = Self.cast(argument, to: A.self),
|
|
55
|
+
let second = Self.cast(nil, to: B.self) else { return }
|
|
56
|
+
_ = method(target)(first, second)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/// A main-actor method, bound to the target by a closure
|
|
61
|
+
/// (`{ (target: Proxy) in target.tick }`): Swift 6 does not let a
|
|
62
|
+
/// main-actor method of a class that is not `Sendable` be named unapplied.
|
|
63
|
+
/// The page has one thread, so the target is called on the main actor.
|
|
64
|
+
public init<T: AnyObject, R>(name: String, isolated method: @escaping @MainActor (T) -> @MainActor () -> R) {
|
|
65
|
+
self.name = name
|
|
66
|
+
nonisolated(unsafe) let method = method
|
|
67
|
+
invoke = { target, _ in
|
|
68
|
+
guard let target = target as? T else { return }
|
|
69
|
+
nonisolated(unsafe) let held = target
|
|
70
|
+
MainActor.assumeIsolated { _ = method(held)() }
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
public init<T: AnyObject, A, R>(name: String, isolated method: @escaping @MainActor (T) -> @MainActor (A) -> R) {
|
|
75
|
+
self.name = name
|
|
76
|
+
nonisolated(unsafe) let method = method
|
|
77
|
+
invoke = { target, argument in
|
|
78
|
+
guard let target = target as? T, let argument = Self.cast(argument, to: A.self) else { return }
|
|
79
|
+
nonisolated(unsafe) let held = target
|
|
80
|
+
nonisolated(unsafe) let value = argument
|
|
81
|
+
MainActor.assumeIsolated { _ = method(held)(value) }
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// A method of another object than the target (`#selector(model.refresh)`): it is called as it is.
|
|
86
|
+
public init<R>(bound method: @escaping () -> R, name: String) {
|
|
87
|
+
self.name = name
|
|
88
|
+
invoke = { _, _ in _ = method() }
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
public init<A, R>(bound method: @escaping (A) -> R, name: String) {
|
|
92
|
+
self.name = name
|
|
93
|
+
invoke = { _, argument in
|
|
94
|
+
guard let argument = Self.cast(argument, to: A.self) else { return }
|
|
95
|
+
_ = method(argument)
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/// `argument` as an `A`; nil is an `A` when `A` is optional.
|
|
100
|
+
static func cast<A>(_ argument: Any?, to type: A.Type) -> A? {
|
|
101
|
+
if let argument, let value = argument as? A { return value }
|
|
102
|
+
return Optional<Any>.none as? A
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/// Whether the selector was made from a method (`#selector`), not a string.
|
|
106
|
+
public var _hasMethod: Bool { invoke != nil }
|
|
107
|
+
|
|
108
|
+
/// Calls the method on `target`; a selector made from a string calls nothing.
|
|
109
|
+
public func _perform(on target: AnyObject, with argument: Any? = nil) {
|
|
110
|
+
invoke?(target, argument)
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
public var description: String { name }
|
|
114
|
+
public static func == (lhs: Selector, rhs: Selector) -> Bool { lhs.name == rhs.name }
|
|
115
|
+
public func hash(into hasher: inout Hasher) { hasher.combine(name) }
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
extension Selector {
|
|
119
|
+
nonisolated(unsafe) private static var pointers: [String: UnsafeMutableRawPointer] = [:]
|
|
120
|
+
private static let pointersLock = NSLock()
|
|
121
|
+
|
|
122
|
+
/// One address per selector name, as the runtime's uniqued selectors
|
|
123
|
+
/// have: what `unsafeBitCast(selector, to: UnsafeRawPointer.self)` gives on
|
|
124
|
+
/// Apple platforms, usually as an associated object's key
|
|
125
|
+
/// (`objc_setAssociatedObject`, CoreFoundation.swift). The staging rewrites
|
|
126
|
+
/// that bit cast, which would trap on this struct, into this property
|
|
127
|
+
/// (packages/cli/src/stage.ts, `selectorPointers`).
|
|
128
|
+
public var _uniquePointer: UnsafeRawPointer {
|
|
129
|
+
Self.pointersLock.lock(); defer { Self.pointersLock.unlock() }
|
|
130
|
+
if let pointer = Self.pointers[name] { return UnsafeRawPointer(pointer) }
|
|
131
|
+
let pointer = UnsafeMutableRawPointer.allocate(byteCount: 1, alignment: 1)
|
|
132
|
+
Self.pointers[name] = pointer
|
|
133
|
+
return UnsafeRawPointer(pointer)
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
public func NSSelectorFromString(_ name: String) -> Selector { Selector(name) }
|
|
138
|
+
public func NSStringFromSelector(_ selector: Selector) -> String { selector.name }
|
|
139
|
+
|
|
140
|
+
extension NSObject {
|
|
141
|
+
/// Whether the Objective-C runtime finds a method for the selector: there
|
|
142
|
+
/// is no runtime to ask, so never. Code that checks before calling a
|
|
143
|
+
/// method by name (`method(for:)`, `perform(_:)`) takes its fallback.
|
|
144
|
+
public func responds(to aSelector: Selector?) -> Bool { false }
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// MARK: - Timers
|
|
148
|
+
|
|
149
|
+
extension Timer {
|
|
150
|
+
/// A timer that calls `selector` on `target` (which it keeps) each time it fires.
|
|
151
|
+
@discardableResult
|
|
152
|
+
public static func scheduledTimer(timeInterval interval: TimeInterval, target: Any, selector aSelector: Selector, userInfo: Any?, repeats: Bool) -> Timer {
|
|
153
|
+
let target = target as AnyObject
|
|
154
|
+
nonisolated(unsafe) let held = target
|
|
155
|
+
let timer = Timer(interval: interval, repeats: repeats) { timer in aSelector._perform(on: held, with: timer) }
|
|
156
|
+
timer.userInfo = userInfo
|
|
157
|
+
return timer
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/// As `scheduledTimer`; the timer runs at once (adding it to a run loop changes nothing).
|
|
161
|
+
public convenience init(timeInterval interval: TimeInterval, target: Any, selector aSelector: Selector, userInfo: Any?, repeats: Bool) {
|
|
162
|
+
let target = target as AnyObject
|
|
163
|
+
nonisolated(unsafe) let held = target
|
|
164
|
+
self.init(interval: interval, repeats: repeats) { timer in aSelector._perform(on: held, with: timer) }
|
|
165
|
+
self.userInfo = userInfo
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// MARK: - Numbers read off any object
|
|
170
|
+
|
|
171
|
+
/// What `x as? AnyObject` becomes in a file that reads a number off the
|
|
172
|
+
/// result (`(props[key] as? AnyObject)?.doubleValue`; the CLI's staging,
|
|
173
|
+
/// `numberCasts`). Objective-C finds `doubleValue` on any object at run time
|
|
174
|
+
/// and answers nil where there is none; here the members are on the values a
|
|
175
|
+
/// dictionary of `Any` holds: Swift's numbers, `Bool`, `String` and
|
|
176
|
+
/// `NSNumber`. A type's own member of the same name (`NSNumber.doubleValue`)
|
|
177
|
+
/// still wins on that type.
|
|
178
|
+
public protocol _AnyObjectValue {}
|
|
179
|
+
|
|
180
|
+
extension _AnyObjectValue {
|
|
181
|
+
var _number: Double? {
|
|
182
|
+
switch self as Any {
|
|
183
|
+
case let value as Double: value
|
|
184
|
+
case let value as Float: Double(value)
|
|
185
|
+
case let value as Int: Double(value)
|
|
186
|
+
case let value as Int8: Double(value)
|
|
187
|
+
case let value as Int16: Double(value)
|
|
188
|
+
case let value as Int32: Double(value)
|
|
189
|
+
case let value as Int64: Double(value)
|
|
190
|
+
case let value as UInt: Double(value)
|
|
191
|
+
case let value as UInt8: Double(value)
|
|
192
|
+
case let value as UInt16: Double(value)
|
|
193
|
+
case let value as UInt32: Double(value)
|
|
194
|
+
case let value as UInt64: Double(value)
|
|
195
|
+
case let value as Bool: value ? 1 : 0
|
|
196
|
+
case let value as NSNumber: value.doubleValue
|
|
197
|
+
case let value as String: Double(value)
|
|
198
|
+
default: nil
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public var doubleValue: Double? { _number }
|
|
203
|
+
public var floatValue: Float? { _number.map { Float($0) } }
|
|
204
|
+
public var intValue: Int? { _number.map { Int($0) } }
|
|
205
|
+
public var integerValue: Int? { intValue }
|
|
206
|
+
public var int64Value: Int64? { _number.map { Int64($0) } }
|
|
207
|
+
public var uintValue: UInt? { _number.map { UInt(max(0, $0)) } }
|
|
208
|
+
public var uint64Value: UInt64? { _number.map { UInt64(max(0, $0)) } }
|
|
209
|
+
public var boolValue: Bool? { _number.map { $0 != 0 } }
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
extension Double: _AnyObjectValue {}
|
|
213
|
+
extension Float: _AnyObjectValue {}
|
|
214
|
+
extension Int: _AnyObjectValue {}
|
|
215
|
+
extension Int8: _AnyObjectValue {}
|
|
216
|
+
extension Int16: _AnyObjectValue {}
|
|
217
|
+
extension Int32: _AnyObjectValue {}
|
|
218
|
+
extension Int64: _AnyObjectValue {}
|
|
219
|
+
extension UInt: _AnyObjectValue {}
|
|
220
|
+
extension UInt8: _AnyObjectValue {}
|
|
221
|
+
extension UInt16: _AnyObjectValue {}
|
|
222
|
+
extension UInt32: _AnyObjectValue {}
|
|
223
|
+
extension UInt64: _AnyObjectValue {}
|
|
224
|
+
extension Bool: _AnyObjectValue {}
|
|
225
|
+
extension String: _AnyObjectValue {}
|
|
226
|
+
extension NSNumber: _AnyObjectValue {}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// String comparators that Apple's Foundation has and the SDK's does not.
|
|
2
|
+
|
|
3
|
+
import Foundation
|
|
4
|
+
|
|
5
|
+
// MARK: - Localized string comparators
|
|
6
|
+
|
|
7
|
+
extension String.StandardComparator {
|
|
8
|
+
/// Finder-like ordering on Apple platforms (case-insensitive, numbers by
|
|
9
|
+
/// value, in the user's locale). The SDK's Foundation has only `.lexical`
|
|
10
|
+
/// off Apple platforms and builds no other comparator, so this orders as
|
|
11
|
+
/// `.lexical` does.
|
|
12
|
+
public static var localizedStandard: String.StandardComparator { .lexical }
|
|
13
|
+
|
|
14
|
+
/// The user's locale's ordering on Apple platforms; `.lexical` here (see
|
|
15
|
+
/// `localizedStandard`).
|
|
16
|
+
public static var localized: String.StandardComparator { .lexical }
|
|
17
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
// The parts of SwiftUI's `Table` that need Foundation's `KeyPathComparator`
|
|
2
|
+
// (the shim's SwiftUI has no Foundation): sortable columns, which carry the
|
|
3
|
+
// comparator their title sorts by, and the tables bound to a `sortOrder`.
|
|
4
|
+
// Tapping a sortable column's title puts its comparator first in the sort
|
|
5
|
+
// order, or reverses it when it is first already; the app sorts its rows by
|
|
6
|
+
// the binding (the table itself is in Sources/SwiftUI/API/Table.swift).
|
|
7
|
+
|
|
8
|
+
import Foundation
|
|
9
|
+
import SwiftUI
|
|
10
|
+
|
|
11
|
+
extension TableColumn where Sort == KeyPathComparator<RowValue>, Label == Text {
|
|
12
|
+
public init(_ titleKey: LocalizedStringKey, value: KeyPath<RowValue, String> & Sendable) where Content == Text {
|
|
13
|
+
self.init(_column: _TableColumn(title: Text(titleKey), sortComparator: KeyPathComparator(value)) {
|
|
14
|
+
AnyView(Text($0[keyPath: value]))
|
|
15
|
+
})
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@_disfavoredOverload
|
|
19
|
+
public init<S: StringProtocol>(_ title: S, value: KeyPath<RowValue, String> & Sendable) where Content == Text {
|
|
20
|
+
self.init(_column: _TableColumn(title: Text(String(title)), sortComparator: KeyPathComparator(value)) {
|
|
21
|
+
AnyView(Text($0[keyPath: value]))
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public init<V: Comparable>(_ titleKey: LocalizedStringKey, value: KeyPath<RowValue, V> & Sendable,
|
|
26
|
+
@ViewBuilder content: @escaping (RowValue) -> Content) {
|
|
27
|
+
self.init(_column: _TableColumn(title: Text(titleKey), sortComparator: KeyPathComparator(value)) {
|
|
28
|
+
AnyView(content($0))
|
|
29
|
+
})
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@_disfavoredOverload
|
|
33
|
+
public init<S: StringProtocol, V: Comparable>(_ title: S, value: KeyPath<RowValue, V> & Sendable,
|
|
34
|
+
@ViewBuilder content: @escaping (RowValue) -> Content) {
|
|
35
|
+
self.init(_column: _TableColumn(title: Text(String(title)), sortComparator: KeyPathComparator(value)) {
|
|
36
|
+
AnyView(content($0))
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public init<V: Comparable>(_ text: Text, value: KeyPath<RowValue, V> & Sendable, @ViewBuilder content: @escaping (RowValue) -> Content) {
|
|
41
|
+
self.init(_column: _TableColumn(title: text, sortComparator: KeyPathComparator(value)) { AnyView(content($0)) })
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/// The sort a `sortOrder` binding makes of the column titles (see the top of the file).
|
|
46
|
+
private func _tableSort<Value, Sort: SortComparator>(_ sortOrder: Binding<[Sort]>, _ columns: [_TableColumn<Value>]) -> _TableSort
|
|
47
|
+
where Sort.Compared == Value {
|
|
48
|
+
_TableSort(order: { index in
|
|
49
|
+
guard let column = columns[index].sortComparator as? KeyPathComparator<Value>,
|
|
50
|
+
let first = sortOrder.wrappedValue.first as? KeyPathComparator<Value>,
|
|
51
|
+
first.keyPath == column.keyPath else { return nil }
|
|
52
|
+
return first.order == .forward
|
|
53
|
+
}, tap: { index in
|
|
54
|
+
guard var column = columns[index].sortComparator as? KeyPathComparator<Value> else { return }
|
|
55
|
+
var order = sortOrder.wrappedValue
|
|
56
|
+
if let first = order.first as? KeyPathComparator<Value>, first.keyPath == column.keyPath {
|
|
57
|
+
column.order = first.order == .forward ? .reverse : .forward
|
|
58
|
+
}
|
|
59
|
+
order.removeAll { ($0 as? KeyPathComparator<Value>)?.keyPath == column.keyPath }
|
|
60
|
+
guard let sort = column as? Sort else { return }
|
|
61
|
+
order.insert(sort, at: 0)
|
|
62
|
+
sortOrder.wrappedValue = order
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
extension Table {
|
|
67
|
+
public init(
|
|
68
|
+
_ data: [Value], sortOrder: Binding<[KeyPathComparator<Value>]>, @TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns
|
|
69
|
+
) where Rows == TableForEachContent<[Value]> {
|
|
70
|
+
let columns = columns()
|
|
71
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
@_disfavoredOverload
|
|
75
|
+
public init<Sort: SortComparator>(
|
|
76
|
+
_ data: [Value], sortOrder: Binding<[Sort]>, @TableColumnBuilder<Value, Sort> columns: () -> Columns
|
|
77
|
+
) where Rows == TableForEachContent<[Value]>, Sort.Compared == Value {
|
|
78
|
+
let columns = columns()
|
|
79
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
@_disfavoredOverload
|
|
83
|
+
public init<Data: RandomAccessCollection, Sort: SortComparator>(
|
|
84
|
+
_ data: Data, sortOrder: Binding<[Sort]>, @TableColumnBuilder<Data.Element, Sort> columns: () -> Columns
|
|
85
|
+
) where Rows == TableForEachContent<Data>, Data.Element == Value, Sort.Compared == Value {
|
|
86
|
+
let columns = columns()
|
|
87
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
public init(
|
|
91
|
+
_ data: [Value], selection: Binding<Value.ID?>, sortOrder: Binding<[KeyPathComparator<Value>]>,
|
|
92
|
+
@TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns
|
|
93
|
+
) where Rows == TableForEachContent<[Value]> {
|
|
94
|
+
let columns = columns()
|
|
95
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
96
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@_disfavoredOverload
|
|
100
|
+
public init<Sort: SortComparator>(
|
|
101
|
+
_ data: [Value], selection: Binding<Value.ID?>, sortOrder: Binding<[Sort]>,
|
|
102
|
+
@TableColumnBuilder<Value, Sort> columns: () -> Columns
|
|
103
|
+
) where Rows == TableForEachContent<[Value]>, Sort.Compared == Value {
|
|
104
|
+
let columns = columns()
|
|
105
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
106
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@_disfavoredOverload
|
|
110
|
+
public init<Data: RandomAccessCollection, Sort: SortComparator>(
|
|
111
|
+
_ data: Data, selection: Binding<Value.ID?>, sortOrder: Binding<[Sort]>,
|
|
112
|
+
@TableColumnBuilder<Data.Element, Sort> columns: () -> Columns
|
|
113
|
+
) where Rows == TableForEachContent<Data>, Data.Element == Value, Sort.Compared == Value {
|
|
114
|
+
let columns = columns()
|
|
115
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
116
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public init(
|
|
120
|
+
_ data: [Value], selection: Binding<Set<Value.ID>>, sortOrder: Binding<[KeyPathComparator<Value>]>,
|
|
121
|
+
@TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns
|
|
122
|
+
) where Rows == TableForEachContent<[Value]> {
|
|
123
|
+
let columns = columns()
|
|
124
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
125
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
@_disfavoredOverload
|
|
129
|
+
public init<Sort: SortComparator>(
|
|
130
|
+
_ data: [Value], selection: Binding<Set<Value.ID>>, sortOrder: Binding<[Sort]>,
|
|
131
|
+
@TableColumnBuilder<Value, Sort> columns: () -> Columns
|
|
132
|
+
) where Rows == TableForEachContent<[Value]>, Sort.Compared == Value {
|
|
133
|
+
let columns = columns()
|
|
134
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
135
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
@_disfavoredOverload
|
|
139
|
+
public init<Data: RandomAccessCollection, Sort: SortComparator>(
|
|
140
|
+
_ data: Data, selection: Binding<Set<Value.ID>>, sortOrder: Binding<[Sort]>,
|
|
141
|
+
@TableColumnBuilder<Data.Element, Sort> columns: () -> Columns
|
|
142
|
+
) where Rows == TableForEachContent<Data>, Data.Element == Value, Sort.Compared == Value {
|
|
143
|
+
let columns = columns()
|
|
144
|
+
self.init(_columns: columns, rows: ForEach(data) { TableRow($0) }, selection: selection,
|
|
145
|
+
sort: _tableSort(sortOrder, columns._tableColumns))
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
public init(
|
|
149
|
+
sortOrder: Binding<[KeyPathComparator<Value>]>, @TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns, @ViewBuilder rows: () -> Rows
|
|
150
|
+
) where Rows: View {
|
|
151
|
+
let columns = columns()
|
|
152
|
+
self.init(_columns: columns, rows: rows(), sort: _tableSort(sortOrder, columns._tableColumns))
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
@_disfavoredOverload
|
|
156
|
+
public init<Sort: SortComparator>(
|
|
157
|
+
sortOrder: Binding<[Sort]>, @TableColumnBuilder<Value, Sort> columns: () -> Columns, @ViewBuilder rows: () -> Rows
|
|
158
|
+
) where Rows: View, Sort.Compared == Value {
|
|
159
|
+
let columns = columns()
|
|
160
|
+
self.init(_columns: columns, rows: rows(), sort: _tableSort(sortOrder, columns._tableColumns))
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
public init(
|
|
164
|
+
selection: Binding<Value.ID?>, sortOrder: Binding<[KeyPathComparator<Value>]>, @TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns,
|
|
165
|
+
@ViewBuilder rows: () -> Rows
|
|
166
|
+
) where Rows: View {
|
|
167
|
+
let columns = columns()
|
|
168
|
+
self.init(_columns: columns, rows: rows(), selection: selection, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
@_disfavoredOverload
|
|
172
|
+
public init<Sort: SortComparator>(
|
|
173
|
+
selection: Binding<Value.ID?>, sortOrder: Binding<[Sort]>, @TableColumnBuilder<Value, Sort> columns: () -> Columns,
|
|
174
|
+
@ViewBuilder rows: () -> Rows
|
|
175
|
+
) where Rows: View, Sort.Compared == Value {
|
|
176
|
+
let columns = columns()
|
|
177
|
+
self.init(_columns: columns, rows: rows(), selection: selection, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
public init(
|
|
181
|
+
selection: Binding<Set<Value.ID>>, sortOrder: Binding<[KeyPathComparator<Value>]>, @TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns,
|
|
182
|
+
@ViewBuilder rows: () -> Rows
|
|
183
|
+
) where Rows: View {
|
|
184
|
+
let columns = columns()
|
|
185
|
+
self.init(_columns: columns, rows: rows(), selection: selection, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
@_disfavoredOverload
|
|
189
|
+
public init<Sort: SortComparator>(
|
|
190
|
+
selection: Binding<Set<Value.ID>>, sortOrder: Binding<[Sort]>, @TableColumnBuilder<Value, Sort> columns: () -> Columns,
|
|
191
|
+
@ViewBuilder rows: () -> Rows
|
|
192
|
+
) where Rows: View, Sort.Compared == Value {
|
|
193
|
+
let columns = columns()
|
|
194
|
+
self.init(_columns: columns, rows: rows(), selection: selection, sort: _tableSort(sortOrder, columns._tableColumns))
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
public init(
|
|
198
|
+
of valueType: Value.Type, sortOrder: Binding<[KeyPathComparator<Value>]>, @TableColumnBuilder<Value, KeyPathComparator<Value>> columns: () -> Columns,
|
|
199
|
+
@ViewBuilder rows: () -> Rows
|
|
200
|
+
) where Rows: View {
|
|
201
|
+
self.init(sortOrder: sortOrder, columns: columns, rows: rows)
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
@_disfavoredOverload
|
|
205
|
+
public init<Sort: SortComparator>(
|
|
206
|
+
of valueType: Value.Type, sortOrder: Binding<[Sort]>, @TableColumnBuilder<Value, Sort> columns: () -> Columns,
|
|
207
|
+
@ViewBuilder rows: () -> Rows
|
|
208
|
+
) where Rows: View, Sort.Compared == Value {
|
|
209
|
+
self.init(sortOrder: sortOrder, columns: columns, rows: rows)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// The SwiftUI attributes of an `AttributedString`'s runs (`run.kern`,
|
|
2
|
+
// `string[range].foregroundColor = .red`, …), which `Text(_:)` draws as the
|
|
3
|
+
// matching `Text` modifiers (Links.swift). On Apple platforms they are
|
|
4
|
+
// `AttributeScopes.SwiftUIAttributes`; here they extend Foundation's scope,
|
|
5
|
+
// which is the one an attributed string's dynamic members look through.
|
|
6
|
+
|
|
7
|
+
import Foundation
|
|
8
|
+
import SwiftUI
|
|
9
|
+
|
|
10
|
+
extension AttributeScopes.FoundationAttributes {
|
|
11
|
+
public enum KernAttribute: AttributedStringKey {
|
|
12
|
+
public typealias Value = SwiftUI.CGFloat
|
|
13
|
+
public static let name = "NSKern"
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public enum TrackingAttribute: AttributedStringKey {
|
|
17
|
+
public typealias Value = SwiftUI.CGFloat
|
|
18
|
+
public static let name = "SwiftUI.Tracking"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
public enum BaselineOffsetAttribute: AttributedStringKey {
|
|
22
|
+
public typealias Value = SwiftUI.CGFloat
|
|
23
|
+
public static let name = "NSBaselineOffset"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
public enum ForegroundColorAttribute: AttributedStringKey {
|
|
27
|
+
public typealias Value = Color
|
|
28
|
+
public static let name = "SwiftUI.ForegroundColor"
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
public enum FontAttribute: AttributedStringKey {
|
|
32
|
+
public typealias Value = Font
|
|
33
|
+
public static let name = "SwiftUI.Font"
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Like the scope's own attributes, a key path names the key and its value is never read.
|
|
37
|
+
public var kern: KernAttribute { fatalError("an attribute key path is never read") }
|
|
38
|
+
public var tracking: TrackingAttribute { fatalError("an attribute key path is never read") }
|
|
39
|
+
public var baselineOffset: BaselineOffsetAttribute { fatalError("an attribute key path is never read") }
|
|
40
|
+
public var foregroundColor: ForegroundColorAttribute { fatalError("an attribute key path is never read") }
|
|
41
|
+
public var font: FontAttribute { fatalError("an attribute key path is never read") }
|
|
42
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// `Timer` and `RunLoop` for full-Foundation apps in the browser. swift-corelibs
|
|
2
|
+
// Foundation marks `RunLoop` unavailable on WASI and its `Timer` needs
|
|
3
|
+
// CFRunLoop, which the WASI build does not have (the link fails), and
|
|
4
|
+
// `Timer.publish` is Combine's anyway. These two classes have the same names;
|
|
5
|
+
// the CLI's staging gives the app `typealias Timer = FoundationBridge.Timer`
|
|
6
|
+
// and `typealias RunLoop = FoundationBridge.RunLoop`, so `Timer.publish(every:
|
|
7
|
+
// 1, on: .main, in: .common).autoconnect()` and `Timer.scheduledTimer` resolve
|
|
8
|
+
// here. Ticks come from the runtime's executor (`_IntervalPublisher` and
|
|
9
|
+
// `_ExecutorTimer` in the SwiftUI shim), so headless runs stay deterministic.
|
|
10
|
+
|
|
11
|
+
import Foundation
|
|
12
|
+
import SwiftUI
|
|
13
|
+
|
|
14
|
+
public final class RunLoop: @unchecked Sendable {
|
|
15
|
+
public struct Mode: Hashable, Sendable {
|
|
16
|
+
public let rawValue: String
|
|
17
|
+
public init(rawValue: String) { self.rawValue = rawValue }
|
|
18
|
+
public static let `default` = Mode(rawValue: "default")
|
|
19
|
+
public static let common = Mode(rawValue: "common")
|
|
20
|
+
}
|
|
21
|
+
nonisolated(unsafe) public static let main = RunLoop()
|
|
22
|
+
public static var current: RunLoop { main }
|
|
23
|
+
|
|
24
|
+
/// Timers run as soon as they are made; adding one changes nothing.
|
|
25
|
+
public func add(_ timer: Timer, forMode mode: Mode) {}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public final class Timer: @unchecked Sendable {
|
|
29
|
+
/// Emits the current date every `interval` seconds once subscribed.
|
|
30
|
+
public typealias TimerPublisher = _IntervalPublisher<Date>
|
|
31
|
+
|
|
32
|
+
public static func publish(every interval: TimeInterval, tolerance: TimeInterval? = nil, on runLoop: RunLoop = .main, in mode: RunLoop.Mode = .default, options: Never? = nil) -> TimerPublisher {
|
|
33
|
+
_IntervalPublisher(every: interval) { Date() }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private var core: _ExecutorTimer!
|
|
37
|
+
/// What the timer was made with (`scheduledTimer(timeInterval:target:selector:userInfo:repeats:)`).
|
|
38
|
+
public internal(set) var userInfo: Any?
|
|
39
|
+
|
|
40
|
+
public var isValid: Bool { core.isValid }
|
|
41
|
+
public var timeInterval: TimeInterval { core.timeInterval }
|
|
42
|
+
|
|
43
|
+
init(interval: TimeInterval, repeats: Bool, block: @escaping @Sendable (Timer) -> Void) {
|
|
44
|
+
core = _ExecutorTimer(interval: interval, repeats: repeats) { _ in block(self) }
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@discardableResult
|
|
48
|
+
public static func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: @escaping @Sendable (Timer) -> Void) -> Timer {
|
|
49
|
+
Timer(interval: interval, repeats: repeats, block: block)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public func invalidate() { core.invalidate() }
|
|
53
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// A stand-in for UIKit's `UITextChecker`, which SwiftUI apps reach through
|
|
2
|
+
// SwiftUI's re-export of UIKit (Hacking with SwiftUI's WordScramble checks
|
|
3
|
+
// spelling with it). Full-Foundation builds only (NSRange is Foundation's). The
|
|
4
|
+
// browser has no spell checker to ask, so every word
|
|
5
|
+
// passes: `rangeOfMisspelledWord` is always `NSNotFound`, `guesses` and
|
|
6
|
+
// `completions` are nil. Enough for the code to compile and run; the game
|
|
7
|
+
// just stops rejecting misspellings.
|
|
8
|
+
|
|
9
|
+
import Foundation
|
|
10
|
+
|
|
11
|
+
public final class UITextChecker: @unchecked Sendable {
|
|
12
|
+
public init() {}
|
|
13
|
+
|
|
14
|
+
/// Always "no misspelling": `NSRange(location: NSNotFound, length: 0)`.
|
|
15
|
+
public func rangeOfMisspelledWord(in stringToCheck: String, range: NSRange, startingAt startingOffset: Int,
|
|
16
|
+
wrap wrapFlag: Bool, language: String) -> NSRange {
|
|
17
|
+
NSRange(location: NSNotFound, length: 0)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public func guesses(forWordRange range: NSRange, in string: String, language: String) -> [String]? { nil }
|
|
21
|
+
public func completions(forPartialWordRange range: NSRange, in string: String, language: String) -> [String]? { nil }
|
|
22
|
+
|
|
23
|
+
public static let availableLanguages: [String] = ["en"]
|
|
24
|
+
public static func hasLearnedWord(_ word: String) -> Bool { false }
|
|
25
|
+
public static func learnWord(_ word: String) {}
|
|
26
|
+
public static func unlearnWord(_ word: String) {}
|
|
27
|
+
public func ignoreWord(_ wordToIgnore: String) {}
|
|
28
|
+
public func ignoredWords() -> [String]? { nil }
|
|
29
|
+
public func setIgnoredWords(_ words: [String]?) {}
|
|
30
|
+
}
|