secant-ios-wallet/modules/Sources/UIComponents/Buttons/CheckboxToggleStyle.swift

61 lines
1.8 KiB
Swift

//
// CheckboxToggleStyle.swift
//
//
// Created by Lukáš Korba on 05.10.2023.
//
import SwiftUI
import Generated
public struct CheckboxToggleStyle: ToggleStyle {
@Environment(\.colorScheme) private var colorScheme
public init() { }
public func makeBody(configuration: Configuration) -> some View {
HStack {
ZStack {
if configuration.isOn {
RoundedRectangle(cornerRadius: Design.Radius._xs)
.fill(Design.Checkboxes.onBg.color(colorScheme))
.frame(width: 16, height: 16)
.overlay {
Asset.Assets.check.image
.zImage(size: 12, style: Design.Checkboxes.onFg)
}
} else {
RoundedRectangle(cornerRadius: Design.Radius._xs)
.fill(Design.Checkboxes.offBg.color(colorScheme))
.frame(width: 16, height: 16)
.background {
RoundedRectangle(cornerRadius: Design.Radius._xs)
.stroke(Design.Checkboxes.offStroke.color(colorScheme))
}
}
}
.onTapGesture {
configuration.isOn.toggle()
}
configuration.label
}
}
}
#Preview {
VStack {
BoolStateWrapper {
Toggle("toggle on", isOn: $0)
.toggleStyle(CheckboxToggleStyle())
}
BoolStateWrapper(initialValue: false) {
Toggle("toggle off", isOn: $0)
.toggleStyle(CheckboxToggleStyle())
}
}
.applyScreenBackground()
.preferredColorScheme(.dark)
}