diff --git a/Sources/Styleguide/Buttons.swift b/Sources/Styleguide/Buttons.swift index 9d6f382..d7f58d5 100644 --- a/Sources/Styleguide/Buttons.swift +++ b/Sources/Styleguide/Buttons.swift @@ -20,8 +20,6 @@ public struct InfoButton: View { public struct ResetButton: View { - @Environment(\.resetButtonStyle) private var resetButtonStyle - let action: () -> Void public init(action: @escaping () -> Void) { @@ -29,7 +27,16 @@ public struct ResetButton: View { } public var body: some View { - Button("Reset") { action() } - .buttonStyle(resetButtonStyle) + Button("Reset", role: .destructive) { + action() + } + .buttonStyle(.borderedProminent) + } +} + +#Preview { + VStack { + InfoButton { } + ResetButton { } } } diff --git a/Sources/Styleguide/Styles/ButtonStyles.swift b/Sources/Styleguide/Styles/ButtonStyles.swift index 48f8153..54a7d54 100644 --- a/Sources/Styleguide/Styles/ButtonStyles.swift +++ b/Sources/Styleguide/Styles/ButtonStyles.swift @@ -3,14 +3,10 @@ import SwiftUI /// A name space for info button styles. public enum InfoButtonType { } -/// A name space for info button styles. -public enum ResetButtonType { } - - -public struct AnyButtonStyle: ButtonStyle { +public struct AnyButtonStyle: PrimitiveButtonStyle { private let _makeBody: (Configuration) -> AnyView - public init(_ style: S) { + public init(_ style: S) { self._makeBody = { configuration in AnyView(style.makeBody(configuration: configuration)) } @@ -22,7 +18,7 @@ public struct AnyButtonStyle: ButtonStyle { } -public struct DefaultInfoButtonStyle: ButtonStyle { +public struct DefaultInfoButtonStyle: PrimitiveButtonStyle { public func makeBody(configuration: Configuration) -> some View { configuration.label .buttonStyle(.plain) @@ -37,54 +33,33 @@ extension AnyButtonStyle where ButtonType == InfoButtonType { } } -public struct DefaultResetButtonStyle: ButtonStyle { +public struct DefaultResetButtonStyle: PrimitiveButtonStyle { public func makeBody(configuration: Configuration) -> some View { configuration.label .buttonStyle(.borderedProminent) } } -extension AnyButtonStyle where ButtonType == ResetButtonType { - public static var `default`: Self { - .init(DefaultResetButtonStyle()) - } -} - private struct InfoButtonStyleKey: EnvironmentKey { static var defaultValue = AnyButtonStyle.default } -private struct ResetButtonStyleKey: EnvironmentKey { - static var defaultValue = AnyButtonStyle.default -} - extension EnvironmentValues { public var infoButtonStyle: AnyButtonStyle { get { self[InfoButtonStyleKey.self] } set { self[InfoButtonStyleKey.self] = newValue } } - public var resetButtonStyle: AnyButtonStyle { - get { self[ResetButtonStyleKey.self] } - set { self[ResetButtonStyleKey.self] = newValue } - } } extension View { public func infoButtonStyle(_ style: AnyButtonStyle) -> some View { - environment(\.infoButtonStyle, AnyButtonStyle(style)) + environment(\.infoButtonStyle, style) } - public func infoButtonStyle(_ style: S) -> some View { + public func infoButtonStyle(_ style: S) -> some View { infoButtonStyle(AnyButtonStyle(style)) } - public func resetButtonStyle(_ style: AnyButtonStyle) -> some View { - environment(\.resetButtonStyle, AnyButtonStyle(style)) - } - - public func resetButtonStyle(_ style: S) -> some View { - resetButtonStyle(AnyButtonStyle(style)) - } }