SwiftUIKit makes its best effort to honor semver, but breaking changes can occur even in minor bumps.
This patch adds variadic component support to LinkText
and makes it possible for each link component to specify its own style.
This patch updates LinkText
to work with Swift 6, after a post 5.0 Swift concurrency change made it stop compiling.
However, since the complexity of the old LinkText
implementation couldn't be ported to strict concurrency, the new implementation has breaking changes, and uses plain Markdown for its rendering, which reduces the capability of the component.
As a positive side-effect of this change, LinkText
can now be used on all platforms.
LinkText
can now be used on all platforms.View+Conditionals
has a newsearchable(if:...)
variant.
TextFieldClearButton
now performs some actions asMainActor
.
LinkText
has been reimplemented in Markdown, and has fewer capabilities than before.
This version makes SwiftUIKit use Swift 6.
Due to the strict concurrency enforcement, this involves some breaking changes.
If some of the changes made are too strict for you, feel free to open a GitHub issue to discuss it.
-
This version renames the
master
branch tomain
. -
All previously deprecated code has been removed.
-
All static style and configurations are now computed properties.
-
Some classes apply
@MainActor
to properly handle mutable state. -
ImageCache.shared
has been removed. -
ImageService.default
has been removed. -
KeychainWrapper.shared
has been removed. -
URLOpener
has been removed, since there now are native alternatives. -
View+Geometry
has been removed.
This version adds a new storage value type and moves the gesture buttons to https://github.com/danielsaidi/GestureButton
.
StorageValue
is a new property wrapper for serializing data intoAppStorage
.
GestureButton
andScrollGestureButton
has been moved tohttps://github.com/danielsaidi/GestureButton
.
This version adds localization support, and makes more types use LocalizedStringKey
instead of String
.
This version also adds standard button types, which makes it easier to create standard button types.
Button+Init
adds a new button initializer.Button+Standard
adds new standard button types.
Label
now usedLocalizedStringKey
for its title.
View+Label
now correctly applies the provided bundle.
View.alert
now injects the context as environment object.View.label
now takes a localized string key instead of a key.View.sheet
now injects the context as environment object.View.fullScreenCover
now injects the context as environment object.
This version refactors many views to take their styles & configs as environment values, instead of injecting them in the initializer.
CircularProgressBar
now supports customizing animation.FilePicker
now supports providing a custom picker config.ImagePicker
now supports providing a custom picker config.LinkText
has new link style options, to define font weight.ListButtonGroup
is a new group view for groping many buttons.ListButtonStyle
has a new optionalpressedOpacity
init param.ListCard
now supports specifying a custom pressed scale animation.String+Replace
has a new options-based replace extension shorthand.
Color.standardListBackground
has been renamed tolistBackground
.FormInlineActionButtonStyle
has been replaced byListButtonGroup
.FormText
has been renamed toListActionRow
, and is now style-based.ListActionRow
now supports aListAction
instead of a trailing view.
DismissableView
has been deprecated due to native SwiftUI support.FormRowTitle
has been deprecated due to now being used internally.PresentationDetents
has been deprecated due to native SwiftUI support.
This version makes the list header not use a section, to avoid disclosure groups.
This version fixes a bug in the image list header extension.
This version adds a few additional utilities.
ListHeader
has a new image-specific modifier.View+Label
makes it easy to convert any view to a label.View+macOS
has a newopenAppSettings()
view extension.
ListHeader
now applies a platform-specific bottom padding.
This version deprecates ListBadgeIcon
.
ListBadgeIcon
has moved tohttps://github.com/danielsaidi/BadgeIcon
.
This version makes the ListBadgeIcon
available on macOS.
ListBadgeIcon
is now available on macOS.ListBadgeIcon
has a newappStore
badge.ListBadgeIcon
iconColor is nil by default and adaptive to the badge color.
This version adjusts the ListBadgeIcon
to behave better.
ListBadgeIcon
has new properties and render better on iOS 17.ListBadgeIcon
has new predefined types.
This patch fixes the default FormInlineButtonStyle
background in dark mode.
Color
has a newstandardRowBackground
function.
This major version bumps the deployment targets to iOS 15, tvOS 15, watchOS 8, and macOS 12. This lets us remove a lot of code for older OS versions.
This version also adds everything from SwiftKit
, which is discontinued. I don't want to manage or add two libraries, so merging them seems valid.
This version removes protocols where not needed. This means that it will no longer have a protocol and a standard implementation if not needed.
Bundle+Information
is a new extension with bundle-specific information.BundleFileFinder
is a new file service that can search for files in a bundle.Collections
is a new namespace with collection-related utilities and extensions.Commands
is a new namespace withmacOS
commands.CsvParser
is a new class that can be used to parse CSV files and strings.Date
is a new namespace with date-related extensions and utilities.DeviceIdentifier
is a new class for generating unique device IDs.iCloudDocumentSync
is a new class that can sync iCloud document changes.Keychain
is a new namespace with keychain-related utilities and services.ListAction
is a new enum with quick list action types.MimeType
is a new type that defines various MIME types.Pasteboard
is a multi-platform pasteboard typealias.String
is a new namespace with string-related utilities and extensions.URL+iCloud
adds new iCloud-specific URLs.ValidationRegex
is a struct that defines various regex-based validation expressions.
View
disableDynamicType
now applies the provided size category instead of always.medium
.
-
All previously deprecated code has been removed.
-
ActionToggle
has been removed - just useonChange(of:)
to observe the toggle state instead. -
DismissableView
now usesDismissAction
instead ofPresentationMode
. -
EdgeInsets
factory functions have been replaced with proper initializers. -
FilePicker
now requiresUTType
instead ofString
. -
FolderMonitor
has been renamed toDirectoryMonitor
. -
FolderObservable
has been renamed toDirectoryObservable
. -
FormActionButton
has been replaced with aFormActionButtonStyle
. -
FormTextButton
has been removed sinceListAction
is so easy to use. -
FormTextEditor
andFormTextField
has been removed. Use.formRowTitle(...)
instead. -
ScanCodeGenerator
has been replaced byImage
andImageRepresentable
init extensions.
This release deprecates a bunch of things in preparation for the 4.0 bump.
SwiftUIKit 4.0 will drop support for iOS 13.
MultilineSubmitViewModifier
is a new view modifier to make multiline text fields submit when return is pressed.View
has a newmultilineSubmit(...)
extension.View
has a newonMultilineSubmit(...)
extension.
ForEachPicker
no longer applies a.plain
button style.ForEachMultiPicker
no longer applies a.plain
button style.SwiftPreviewInspector
now provides a standard implementation.
MultilineText
has been deprecated.DotAnimation
has been renamed toDotLoadingAnimation
.DotAnimationText
has been renamed toDotLoadingAnimationText
.SearchBar
has been deprecated.SidebarPresenter
has been deprecated.StandardSwiftPreviewInspector
has been deprecated.Text+Markdown
has been deprecated.UIApplication+Windows
has been deprecated.View
height and width modifiers have been deprecated.View+Keyboard
has been deprecated.
FormTextField
has new multiline capabilities.
FormTextEditor
has been soft deprecated.
FormText
has a new action-based initializer.FormTextButton
is a newFormText
button view.
ImageCache.shared
has been made public.
ImageCache
is a new convenience util for caching images.ImageRepresentable
has a newjpegData(resizedToWidth:withCompressionQuality:)
extension.ListPadding
is a new view that can be used to add vertical padding to lists.
GridItem+Convenience
is a new extension withGridItem
builders.ReorderableForEach
is a new view that lets you reorder items in stacks and grids.
SidebarListRowBackgroundModifier
is a new view modifier for sidebar lists.
This version removes another deprecation.
StorageCodable
is a new protocol for persistingCodable
inAppStorage
andSceneStorage
.View+Font
extensions are now available on tvOS and watchOS as well.sidebarListRowBackground
is a newView
modifier for applying a sidebar list row background.
Persisted
is changed to soft deprecated since theRawRepresentable
AppStorage
support requires iOS 15.
- The
Printing
namespace has been deprecated and moved to the new PrintingKit.
NavigationContext
is a new observable class.Image+Resized
is a newImage
extension.
AlertProvider
has been deprecated.FullScreenCoverProvider
has been deprecated.SheetProvider
has been deprecated.
Color+Hex
has new static functions.ColorPickerBar
is a new color picker component.EditableView
is a new view protocol.ListBadgeIcon
now supports custom icon colors and icon gradients.ListHeaderIcon
is a new view.ListSectionTitle
has a newwithInsets()
init parameter.ListShelfSection
has a new style.OptionalBinding
is a new func that makes it possible to pass in optional values as a non-optional binding.View
has newprefers
extensions.ViewShadowStyle
has a new.sticker
style.
ImageRenderer
was not available to 5.7 compilers and has been removed altogether.ImageRenderer
can still be found and copied from any earlier versions of SwiftUIKit.MultilineTextField
has been deprecated.SystemColor
has been deprecated.
This release adds new support for Codable
and AppStorage
.
This release also adds new list functionality and text editor styling.
From this version, the demo application has been removed. Instead of the demo application, you can use the internal previews directly.
Array
has new extensions that make it possible to use withCodable
andAppStorage
.Dictionary
has new extensions that make it possible to use withCodable
andAppStorage
.ImageRepresentable
has new resizing tools.ListBadgeIcon
is a new view that mimics the color badge icons in System Settings.ListCard
is a new view that can be used to create cards for a list or grid.ListDragHandle
is a new view to mimic the native iOS list drag handle.ListSectionTitle
is a new view that mimics a grouped iOS section title.ListShelfSection
is a new view that can be used to create horizontally scrolling shelves in vertically scrolling lists.ProcessInfo
has a new static preview property.TextEditorStyle
lets you style aTextEditor
like aTextField
.Image+Symbol
is a newImage
initializer that serves as a shorthand for.init(systemName:)
.Image+ListBadgeIcon
is a newImage
modifier that can be used to convert an image to a color badged icon.
Persisted
has been deprecated due toAppStorageCodable
.ViewShadowStyle
now allows not specifying a shadow color.ViewShadowStyle.badge
has been redesigned to look more like a sticker.
- The undimmed presentation detents move some code to after layout to improve behavior.
UndimmedPresentationDetent
is renamed toPresentationDetentReference
.- The
.presentationDetents(undimmed:largestUndimmed:selection:)
modifier is deprecated and replaced by.presentationDetents(:largestUndimmed:selection:)
.
GestureButton
is a new view that can be used to handle multiple gestures with a single button.GestureButtonDefaults
is a new class that can be used to configure the default values for the new gesture buttons.LinkText
is a new view that lets you combine text and tappable links without Markdown.RepeatGestureTimer
is a new class that can be used to trigger a repeating action.ScrollViewGestureButton
is a variant ofGestureButton
that works within a scroll view.SwipeGestureViewModifier
is a new view modifier that exposes theView+onSwipeGesture
extension to DocC.UndimmedPresentationDetentsViewModifier
is a new view modifier that exposes theView+presentationDetents
extension to DocC.
ImageRenderer
now renders with correct scale - thanks alfredcc for this!
- The
ScrollViewHeader
has been moved to ScrollKit - https://github.com/danielsaidi/ScrollKit
FormTextField
is now available in iOS 13 as well.LinearProgressBar
is a new, style-based progress view.ListSelectItem
now supports providing a custom select indicator view.ScrollViewHeader
is a new header view with stretch and parallax support.SwiftPreviewInspector
andStandardSwiftPreviewInspector
are new types for detecting SwiftUI preview mode.UndimmedPresentationDetent
is a new enum that is used to define undimmed detents withView+PresentationDetents
.View+PresentationDetents
now supports specifying alargestUndimmed
presentation detent.
FormActionButton
now usestrue
as default value for thedimmed
modifier.FormActionButtonStyle
now lets you style more parts of the form action button.FormText
no longers forces lowercase to its title.SearchBar
no longer adds a divider below the text field.TextFieldClearButton
now animates in the clear button.
CircularProgressBar
is no longer greedy and only allocates the space it needs.
- The entire
CollectionView
namespace has been deprecated, since it's no longer needed on tvOS.
CircularProgressBarStyle
has been renamed toCircularProgressBar.Style
.ErrorAlertConvertible
has a newerrorButtonText
property to avoid the hard-coded "OK".ScanCodeGenerator
has a cleaner function name for generating a scan code.
This major version removes all previously deprecated logic to make the library tighter and cleaner.
If you need any parts of the library that have now been removed, just grab them from the previous 2.9
versions.
- The
disableDynamicType
view extension now accepts a size category. - The
ListSelectItem
now accepts a customizable checkmark icon.
- The
Documents
namespace has been removed without being previously deprecated. - The
.safeAreaInsets
environment value has been removed without being previously deprecated. - The
Views/DetailPanel
namespace has been removed without being previously deprecated. - The
UIViewWrapper
view has been removed without being previously deprecated.