61 lines
1.8 KiB
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)
|
|
}
|