What's Changed
- Styles now support SwiftUI dynamic properties —
AsyncButtonStyleandThrowableButtonStylerefineDynamicProperty, so custom styles can use@Environment,@State, and other property wrappers directly inside the style. - Namespaced triggers —
TriggerButtonregistrations are now scoped byNamespace.ID, so identically-named button triggers no longer collide across different parts of your view hierarchy. - Better cancellation support — async tasks propagate cancellation more reliably, and the
NSProgressbridge now forwards cancellation back to the underlying progress. - Reduce Motion support — shake and pulse effects now respect the accessibility Reduce Motion setting.
- Accessibility — buttons are marked as
updatesFrequentlywhile a task is in progress. - Environment key handling simplified using
@Entryproperties (#20). - Removed
MainActor.assumeIsolatedfor cleaner concurrency.
Breaking changes
- Dropped support for Swift 5.10 — ButtonKit now requires Swift 6.0.
- Style configuration
label/buttonare now opaque views — the publictypealias Label = AnyViewandtypealias Button = AnyViewon the style configurations have been replaced with nested wrapper views (mirroring SwiftUI'sButtonStyleConfiguration.Label). Code that relied on these beingAnyViewmust now treat them as opaque views.
New Contributors
Full Changelog: 0.7.1...0.8.0