WalletColors.swift (4828B)
1 /* 2 * This file is part of GNU Taler, ©2022-25 Taler Systems S.A. 3 * See LICENSE.md 4 */ 5 /** 6 * @author Marc Stibane 7 */ 8 import SwiftUI 9 10 fileprivate let grouped = true 11 12 struct FullBackground: View { 13 @AppStorage("preferredColorScheme") var preferredColorScheme: Int = 0 14 15 @available(iOS 17.0, *) 16 @MainActor 17 var liquidView : some View { 18 // Ensure we always start with a different view 19 let startDate = Date() - Double.random(in: 1...999) 20 let size = UIScreen.screenSize 21 let view = TimelineView(.animation) { timeline in 22 let elapsed = timeline.date.timeIntervalSince(startDate) 23 Rectangle() 24 .colorEffect( 25 ShaderLibrary.liquidBack( 26 .float2(size.width, size.height), 27 .float(Float(elapsed)) 28 ) 29 ) 30 } 31 return view.ignoresSafeArea() 32 } 33 34 var backgroundView: some View { 35 WalletColors().backgroundColor.ignoresSafeArea() 36 } 37 38 var body: some View { 39 if preferredColorScheme == 3, #available(iOS 17.0, *) { 40 liquidView 41 } else { 42 backgroundView 43 } 44 } 45 } 46 public struct WalletColors { 47 @AppStorage("minimalistic") private var minimalistic: Bool = false 48 49 // let tint = Color(.tintColor) 50 let gray1 = Color(.systemGray) // uncompleted 51 let gray2 = Color(.systemGray2) // disabled Fore 52 let gray3 = Color(.systemGray3) 53 let gray4 = Color(.systemGray4) 54 let gray5 = Color(.systemGray5) 55 let gray6 = Color(.systemGray6) 56 let gray7 = grouped ? Color(.tertiarySystemGroupedBackground) 57 : Color(.tertiarySystemBackground) // enabled Back 58 let gray8 = grouped ? Color(.secondarySystemGroupedBackground) 59 : Color(.secondarySystemBackground) // disabled Back 60 61 let attention = Color.red // TODO: WalletColors().errorColor 62 let confirm = Color.yellow // TODO: WalletColors().warningColor 63 64 // TODO: In Japan, negative is blue, and positive is red 65 let positive = Color.green 66 let negative = Color.red 67 68 func buttonForeColor(pressed: Bool, 69 disabled: Bool, 70 scheme: ColorScheme, 71 contrast: ColorSchemeContrast, 72 prominent: Bool = false) -> Color { 73 disabled ? gray2 74 : !prominent ? primaryAccent 75 : scheme == .dark ? primary(contrast) 76 : pressed ? gray6 : Color.white 77 } 78 79 func buttonBackColor(pressed: Bool, 80 disabled: Bool, 81 prominent: Bool = false) -> Color { 82 disabled ? gray7 83 : prominent ? primaryAccent 84 : pressed ? gray4 : gray5 85 } 86 87 func primary(_ contrast: ColorSchemeContrast = .standard) -> Color { 88 return contrast == .increased ? .primary 89 : Color("Primary") 90 } 91 92 func secondary(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast = .standard) -> Color { 93 return contrast == .increased ? .primary // WCAG AAA for any scheme 94 : minimalistic ? .secondary // not enough contrast 95 : scheme == .dark ? .secondary // WCAG AA for dark scheme 96 : Color(.darkGray) // WCAG AA for light scheme 97 } 98 99 var labelColor: Color { 100 Color(UIColor.label) 101 } 102 103 var backgroundColor: Color { 104 grouped ? Color(.systemGroupedBackground) 105 : Color(.systemBackground) 106 } 107 108 var secondaryBackground: Color { 109 Color(.secondarySystemGroupedBackground) 110 } 111 112 var sideBackgroundColor: Color { 113 gray6 114 } 115 116 func pickerSelected(_ scheme: ColorScheme, _ contrast: ColorSchemeContrast) -> Color { 117 return contrast == .increased ? (scheme == .dark ? gray3 : gray4) 118 : (scheme == .dark ? gray4 : gray5) 119 } 120 121 var pickerBackground: Color { 122 gray7 123 } 124 125 var fieldForeground: Color { // text color 126 Color.primary 127 } 128 129 var fieldBackground: Color { 130 gray8 131 } 132 133 var uncompletedColor: Color { 134 // used in TransactionRowView 135 gray1 136 } 137 138 var errorColor: Color { 139 Color("Error") 140 } 141 142 var primaryAccent: Color { 143 Color("Taler") 144 } 145 146 func pendingColor(_ incoming: Bool) -> Color { 147 incoming ? primaryAccent // Color("PendingIncoming") 148 : primary() // Color("PendingOutgoing") 149 } 150 151 func transactionColor(_ incoming: Bool) -> Color { 152 incoming ? primaryAccent // Color("Incoming") 153 : primary() // Color("Outgoing") 154 } 155 }