Files
multi-simadmin/apps/ios/Sources/MultiSimAdmin/Theme/AIButtonStyle.swift
T

60 lines
1.7 KiB
Swift

import SwiftUI
public struct AIButtonStyle: ButtonStyle {
public enum Kind: Hashable {
case primary
case secondary
case danger
var foregroundColor: Color {
switch self {
case .primary, .danger: return .white
case .secondary: return AITheme.ink
}
}
var backgroundColor: Color {
switch self {
case .primary: return AITheme.primary
case .secondary: return AITheme.surface
case .danger: return AITheme.danger
}
}
}
public enum Size: Hashable {
case compact
case regular
case large
}
private let kind: Kind
private let size: Size
public init(kind: Kind = .secondary, size: Size = .regular) {
self.kind = kind
self.size = size
}
public func makeBody(configuration: Configuration) -> some View {
let height: CGFloat = switch size {
case .compact: AITheme.compactButtonHeight
case .large: AITheme.largeButtonHeight
case .regular: AITheme.buttonHeight
}
configuration.label
.font(.system(size: 15, weight: .semibold))
.foregroundStyle(kind.foregroundColor)
.frame(minWidth: 44, minHeight: height)
.padding(.horizontal, 14)
.background(kind.backgroundColor)
.clipShape(RoundedRectangle(cornerRadius: AITheme.buttonRadius))
.overlay {
RoundedRectangle(cornerRadius: AITheme.buttonRadius)
.strokeBorder(kind == .secondary ? AITheme.line : .clear)
}
.opacity(configuration.isPressed ? 0.78 : 1)
}
}