Merge pull request #1346 from LukasKorba/1337-update-UI-of-the-Settings-and-Advanced-Settings-screens

[#1337] update UI of the Settings and Advanced Settings screens
This commit is contained in:
Lukas Korba 2024-09-09 09:32:45 +02:00 committed by GitHub
commit ad74a81e4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
45 changed files with 836 additions and 137 deletions

View File

@ -6,6 +6,9 @@ directly impact users rather than highlighting other crucial architectural updat
## [Unreleased]
### Changed
- Design of the Settings and Advanced Settings screens.
## 1.1.5 build 1 (2024-08-22)
### Fixed

View File

@ -70,6 +70,7 @@ public struct AboutView: View {
Spacer()
}
.padding(.top, 20)
.onAppear { store.send(.onAppear) }
.zashiBack()
.zashiTitle {

View File

@ -86,7 +86,7 @@ public struct CurrencyConversionSetupView: View {
.padding(20)
.background {
RoundedRectangle(cornerRadius: 12)
.stroke(Asset.Colors.CurrencyConversion.outline.color)
.stroke(Asset.Colors.V2.strokeSecondary.color)
}
}
}

View File

@ -25,14 +25,62 @@ public struct AdvancedSettingsView: View {
public var body: some View {
WithPerceptionTracking {
VStack {
Button(L10n.Settings.recoveryPhrase.uppercased()) {
store.send(.protectedAccessRequest(.backupPhrase))
VStack(spacing: 0) {
List {
Group {
SettingsRow(
icon: Asset.Assets.Icons.key.image,
title: L10n.Settings.recoveryPhrase
) {
store.send(.protectedAccessRequest(.backupPhrase))
}
SettingsRow(
icon: Asset.Assets.Icons.downloadCloud.image,
title: L10n.Settings.exportPrivateData
) {
store.send(.protectedAccessRequest(.privateDataConsent))
}
SettingsRow(
icon: Asset.Assets.Icons.server.image,
title: L10n.Settings.chooseServer
) {
store.send(.updateDestination(.serverSetup))
}
SettingsRow(
icon: Asset.Assets.Icons.currencyDollar.image,
title: L10n.CurrencyConversion.title
) {
store.send(.updateDestination(.currencyConversionSetup))
}
if store.inAppBrowserURL != nil {
SettingsRow(
icon: Asset.Assets.Icons.coinbase.image,
iconTint: Asset.Colors.Settings.coinbaseTint.color,
iconBcg: Asset.Colors.Settings.coinbaseBcg.color,
title: L10n.Settings.buyZecCB,
divider: false
) {
store.send(.buyZecTapped)
}
}
}
.listRowInsets(EdgeInsets())
.listRowBackground(Asset.Colors.shade97.color)
.listRowSeparator(.hidden)
}
.zcashStyle()
.padding(.vertical, 25)
.padding(.top, 40)
.padding(.horizontal, 70)
.padding(.top, 24)
.padding(.horizontal, 4)
.walletStatusPanel()
.sheet(isPresented: $store.isInAppBrowserOn) {
if let urlStr = store.inAppBrowserURL, let url = URL(string: urlStr) {
InAppBrowserView(url: url)
}
}
.onAppear { store.send(.onAppear) }
.navigationLinkEmpty(
isActive: store.bindingForBackupPhrase,
destination: {
@ -63,76 +111,51 @@ public struct AdvancedSettingsView: View {
CurrencyConversionSetupView(store: store.currencyConversionSetupStore())
}
)
Button(L10n.Settings.exportPrivateData.uppercased()) {
store.send(.protectedAccessRequest(.privateDataConsent))
}
.zcashStyle()
.padding(.bottom, 25)
.padding(.horizontal, 70)
Button(L10n.Settings.chooseServer.uppercased()) {
store.send(.updateDestination(.serverSetup))
}
.zcashStyle()
.padding(.bottom, 25)
.padding(.horizontal, 70)
Button(L10n.CurrencyConversion.title.uppercased()) {
store.send(.updateDestination(.currencyConversionSetup))
}
.zcashStyle()
.padding(.bottom, store.inAppBrowserURL == nil ? 0 : 25)
.padding(.horizontal, 70)
if store.inAppBrowserURL != nil {
Button {
store.send(.buyZecTapped)
} label: {
HStack(spacing: 5) {
Text(L10n.Settings.buyZec.uppercased())
Asset.Assets.Partners.cbLogo.image
.renderingMode(.template)
.resizable()
.frame(width: 78, height: 14)
.padding(.bottom, 2)
}
}
.zcashStyle()
.padding(.horizontal, 70)
}
Spacer()
Button(L10n.Settings.deleteZashi.uppercased()) {
store.send(.protectedAccessRequest(.deleteWallet))
}
.zcashStyle()
.padding(.bottom, 20)
.padding(.horizontal, 70)
Text(L10n.Settings.deleteZashiWarning)
.font(.custom(FontFamily.Inter.medium.name, size: 11))
.padding(.bottom, 50)
.padding(.horizontal, 20)
}
.walletStatusPanel()
.sheet(isPresented: $store.isInAppBrowserOn) {
if let urlStr = store.inAppBrowserURL, let url = URL(string: urlStr) {
InAppBrowserView(url: url)
HStack(spacing: 0) {
Asset.Assets.infoOutline.image
.renderingMode(.template)
.resizable()
.frame(width: 20, height: 20)
.padding(.trailing, 12)
Text(L10n.Settings.deleteZashiWarning)
.font(.custom(FontFamily.Inter.regular.name, size: 12))
}
.foregroundColor(Asset.Colors.V2.textTertiary.color)
.padding(.bottom, 20)
Button {
store.send(.protectedAccessRequest(.deleteWallet))
} label: {
Text(L10n.Settings.deleteZashi)
.font(.custom(FontFamily.Inter.semiBold.name, size: 16))
.foregroundColor(Asset.Colors.V2.btnDestroyFg.color)
.frame(height: 24)
.frame(maxWidth: .infinity)
.padding(.vertical, 12)
.background {
RoundedRectangle(cornerRadius: 12)
.fill(Asset.Colors.V2.btnDestroyBcg.color)
.overlay {
RoundedRectangle(cornerRadius: 12)
.stroke(Asset.Colors.V2.btnDestroyBorder.color)
}
}
}
.padding(.horizontal, 24)
.padding(.bottom, 24)
}
.onAppear { store.send(.onAppear) }
}
.navigationBarTitleDisplayMode(.inline)
.applyScreenBackground()
.listStyle(.plain)
.navigationBarTitleDisplayMode(.inline)
.zashiBack()
.zashiTitle {
Asset.Assets.zashiTitle.image
.renderingMode(.template)
.resizable()
.frame(width: 62, height: 17)
.foregroundColor(Asset.Colors.primary.color)
Text(L10n.Settings.advanced.uppercased())
.font(.custom(FontFamily.Archivo.bold.name, size: 14))
}
}
}

View File

@ -0,0 +1,78 @@
//
// SettingsRow.swift
// Zashi
//
// Created by Lukáš Korba on 22.08.2024.
//
import SwiftUI
import Generated
public struct SettingsRow: View {
var icon: Image
var iconTint: Color
var iconBcg: Color
var title: String
var divider: Bool
var action: () -> Void
init(
icon: Image,
iconTint: Color = Asset.Colors.V2.textPrimary.color,
iconBcg: Color = Asset.Colors.V2.bgTertiary.color,
title: String,
divider: Bool = true,
action: @escaping () -> Void
) {
self.icon = icon
self.iconTint = iconTint
self.iconBcg = iconBcg
self.title = title
self.divider = divider
self.action = action
}
public var body: some View {
Button {
action()
} label: {
VStack(spacing: 0) {
HStack(spacing: 0) {
icon
.renderingMode(.template)
.resizable()
.frame(width: 20, height: 20)
.foregroundColor(iconTint)
.padding(10)
.background {
Circle()
.fill(iconBcg)
}
.padding(.trailing, 16)
Text(title)
.font(.custom(FontFamily.Archivo.semiBold.name, size: 16))
.foregroundColor(Asset.Colors.V2.textPrimary.color)
Spacer(minLength: 2)
Asset.Assets.chevronRight.image
.renderingMode(.template)
.resizable()
.frame(width: 20, height: 20)
.foregroundColor(Asset.Colors.V2.textQuaternary.color)
}
.padding(.horizontal, 20)
if divider {
Asset.Colors.V2.divider.color
.frame(height: 1)
.padding(.top, 12)
}
}
}
.padding(.top, 12)
.background(Asset.Colors.background.color)
}
}

View File

@ -16,14 +16,38 @@ public struct SettingsView: View {
}
public var body: some View {
VStack {
WithViewStore(store, observe: { $0 }) { viewStore in
Button(L10n.Settings.feedback.uppercased()) {
viewStore.send(.sendSupportMail)
WithViewStore(store, observe: { $0 }) { viewStore in
VStack {
List {
Group {
SettingsRow(
icon: Asset.Assets.Icons.settings.image,
title: L10n.Settings.advanced
) {
viewStore.send(.updateDestination(.advanced))
}
SettingsRow(
icon: Asset.Assets.infoOutline.image,
title: L10n.Settings.about
) {
viewStore.send(.updateDestination(.about))
}
SettingsRow(
icon: Asset.Assets.Icons.messageSmile.image,
title: L10n.Settings.feedback,
divider: false
) {
viewStore.send(.sendSupportMail)
}
}
.listRowInsets(EdgeInsets())
.listRowBackground(Asset.Colors.shade97.color)
.listRowSeparator(.hidden)
}
.zcashStyle()
.padding(.vertical, 25)
.padding(.top, 40)
.padding(.top, 24)
.padding(.horizontal, 4)
.navigationLinkEmpty(
isActive: viewStore.bindingForAbout,
destination: {
@ -39,20 +63,6 @@ public struct SettingsView: View {
.onAppear {
viewStore.send(.onAppear)
}
Button(L10n.Settings.advanced.uppercased()) {
viewStore.send(.updateDestination(.advanced))
}
.zcashStyle()
.padding(.bottom, 25)
Spacer()
Button(L10n.Settings.about.uppercased()) {
viewStore.send(.updateDestination(.about))
}
.zcashStyle()
.padding(.bottom, 40)
if let supportData = viewStore.supportData {
UIMailDialogView(
@ -65,22 +75,33 @@ public struct SettingsView: View {
// so frame is set to 0 to not break SwiftUIs layout
.frame(width: 0, height: 0)
}
Spacer()
Asset.Assets.zashiTitle.image
.renderingMode(.template)
.resizable()
.frame(width: 73, height: 20)
.foregroundColor(Asset.Colors.primary.color)
.padding(.bottom, 16)
Text(L10n.Settings.version(viewStore.appVersion, viewStore.appBuild))
.font(.custom(FontFamily.Archivo.regular.name, size: 16))
.foregroundColor(Asset.Colors.V2.textPrimary.color)
.padding(.bottom, 24)
}
.padding(.horizontal, 70)
}
.navigationBarTitleDisplayMode(.inline)
.applyScreenBackground()
.listStyle(.plain)
.navigationBarTitleDisplayMode(.inline)
.alert(store: store.scope(
state: \.$alert,
action: { .alert($0) }
))
.zashiBack()
.zashiTitle {
Asset.Assets.zashiTitle.image
.renderingMode(.template)
.resizable()
.frame(width: 62, height: 17)
.foregroundColor(Asset.Colors.primary.color)
Text(L10n.Settings.title.uppercased())
.font(.custom(FontFamily.Archivo.bold.name, size: 14))
}
.walletStatusPanel()
}

View File

@ -60,7 +60,7 @@ public struct TransactionRowView: View {
isFailed: transaction.status == .failed
)
}
TransactionIdView(
store: store,
transaction: transaction

View File

@ -91,7 +91,7 @@ public struct WalletBalancesView: View {
if store.isExchangeRateFeatureOn {
if store.currencyConversion == nil && !store.isExchangeRateStale {
HStack(spacing: 8) {
Text("Loading")
Text(L10n.General.loading)
.font(.custom(FontFamily.Inter.semiBold.name, size: 14))
.foregroundColor(Asset.Colors.primary.color)

View File

@ -186,6 +186,8 @@ public enum L10n {
public static let hideBalancesMost = L10n.tr("Localizable", "general.hideBalancesMost", fallback: "-----")
/// -----
public static let hideBalancesMostStandalone = L10n.tr("Localizable", "general.hideBalancesMostStandalone", fallback: "-----")
/// Loading
public static let loading = L10n.tr("Localizable", "general.loading", fallback: "Loading")
/// Max
public static let max = L10n.tr("Localizable", "general.max", fallback: "Max")
/// Next
@ -617,26 +619,34 @@ public enum L10n {
}
}
public enum Settings {
/// About
public static let about = L10n.tr("Localizable", "settings.about", fallback: "About")
/// Advanced
public static let advanced = L10n.tr("Localizable", "settings.advanced", fallback: "Advanced")
/// Buy ZEC with
public static let buyZec = L10n.tr("Localizable", "settings.buyZec", fallback: "Buy ZEC with")
/// Choose a server
public static let chooseServer = L10n.tr("Localizable", "settings.chooseServer", fallback: "Choose a server")
/// About Us
public static let about = L10n.tr("Localizable", "settings.about", fallback: "About Us")
/// Advanced Settings
public static let advanced = L10n.tr("Localizable", "settings.advanced", fallback: "Advanced Settings")
/// Buy ZEC with Coinbase
public static let buyZecCB = L10n.tr("Localizable", "settings.buyZecCB", fallback: "Buy ZEC with Coinbase")
/// Choose a Server
public static let chooseServer = L10n.tr("Localizable", "settings.chooseServer", fallback: "Choose a Server")
/// Currency Conversion
public static let currencyConversion = L10n.tr("Localizable", "settings.currencyConversion", fallback: "Currency Conversion")
/// Delete Zashi
public static let deleteZashi = L10n.tr("Localizable", "settings.deleteZashi", fallback: "Delete Zashi")
/// (You will be asked to confirm on next screen)
public static let deleteZashiWarning = L10n.tr("Localizable", "settings.deleteZashiWarning", fallback: "(You will be asked to confirm on next screen)")
/// You will be asked to confirm on the next screen
public static let deleteZashiWarning = L10n.tr("Localizable", "settings.deleteZashiWarning", fallback: "You will be asked to confirm on the next screen")
/// Export logs only
public static let exportLogsOnly = L10n.tr("Localizable", "settings.exportLogsOnly", fallback: "Export logs only")
/// Export private data
public static let exportPrivateData = L10n.tr("Localizable", "settings.exportPrivateData", fallback: "Export private data")
/// Send us feedback
public static let feedback = L10n.tr("Localizable", "settings.feedback", fallback: "Send us feedback")
/// Export Private Data
public static let exportPrivateData = L10n.tr("Localizable", "settings.exportPrivateData", fallback: "Export Private Data")
/// Send Us Feedback
public static let feedback = L10n.tr("Localizable", "settings.feedback", fallback: "Send Us Feedback")
/// Recovery Phrase
public static let recoveryPhrase = L10n.tr("Localizable", "settings.recoveryPhrase", fallback: "Recovery Phrase")
/// Settings
public static let title = L10n.tr("Localizable", "settings.title", fallback: "Settings")
/// Version %@ (%@)
public static func version(_ p1: Any, _ p2: Any) -> String {
return L10n.tr("Localizable", "settings.version", String(describing: p1), String(describing: p2), fallback: "Version %@ (%@)")
}
public enum Alert {
public enum CantSendEmail {
/// Copy %@

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "arrowLeftLong.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "chevronRight.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "coinbase.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "currencyDollar.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "downloadCloud.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "key.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "messageSmile.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "server.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -0,0 +1,12 @@
{
"images" : [
{
"filename" : "settings.png",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

View File

@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0x52",
"red" : "0x00"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,20 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0xFF",
"red" : "0xFF"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0xFF",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x1F",
"red" : "0x23"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE6",
"green" : "0xEB",
"red" : "0xEB"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x43",
"green" : "0x42",
"red" : "0x45"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xFF",
"green" : "0xFF",
"red" : "0xFF"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x1F",
"green" : "0x1F",
"red" : "0x52"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x9B",
"green" : "0xA2",
"red" : "0xFD"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x18",
"green" : "0x20",
"red" : "0x91"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x2D",
"red" : "0xD9"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE2",
"green" : "0xE4",
"red" : "0xFE"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xF5",
"green" : "0xF7",
"red" : "0xF7"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x31",
"green" : "0x30",
"red" : "0x34"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE6",
"green" : "0xEB",
"red" : "0xEB"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x43",
"green" : "0x42",
"red" : "0x45"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x20",
"green" : "0x1F",
"red" : "0x23"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xE8",
"green" : "0xE8",
"red" : "0xE8"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x6F",
"green" : "0x81",
"red" : "0x87"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xA6",
"green" : "0xA5",
"red" : "0xA7"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -0,0 +1,38 @@
{
"colors" : [
{
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0x5D",
"green" : "0x6C",
"red" : "0x71"
}
},
"idiom" : "universal"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "dark"
}
],
"color" : {
"color-space" : "extended-srgb",
"components" : {
"alpha" : "1.000",
"blue" : "0xBC",
"green" : "0xBB",
"red" : "0xBD"
}
},
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@ -153,19 +153,22 @@ Zashi is a minimal-design, self-custody, ZEC-only shielded wallet that keeps you
"whatsNew.version" = "Zashi Version %@";
// MARK: - Settings
"settings.feedback" = "Send us feedback";
"settings.advanced" = "Advanced";
"settings.about" = "About";
"settings.title" = "Settings";
"settings.advanced" = "Advanced Settings";
"settings.about" = "About Us";
"settings.feedback" = "Send Us Feedback";
"settings.recoveryPhrase" = "Recovery Phrase";
"settings.exportPrivateData" = "Export private data";
"settings.chooseServer" = "Choose a server";
"settings.exportPrivateData" = "Export Private Data";
"settings.exportLogsOnly" = "Export logs only";
"settings.chooseServer" = "Choose a Server";
"settings.currencyConversion" = "Currency Conversion";
"settings.buyZecCB" = "Buy ZEC with Coinbase";
"settings.deleteZashi" = "Delete Zashi";
"settings.deleteZashiWarning" = "(You will be asked to confirm on next screen)";
"settings.deleteZashiWarning" = "You will be asked to confirm on the next screen";
"settings.version" = "Version %@ (%@)";
"settings.alert.cantSendEmail.title" = "Oh, no!";
"settings.alert.cantSendEmail.message" = "It looks like you don't have a default email app configured on your device. Copy the address below, and use your favorite email client to send us a message.";
"settings.alert.cantSendEmail.copyEmail" = "Copy %@";
"settings.buyZec" = "Buy ZEC with";
// MARK: - Private Data Consent
"privateDataConsent.title" = "Consent for Exporting Private Data";
@ -195,6 +198,7 @@ Sharing this private data is irrevocable — once you have shared this private d
"general.cancel" = "Cancel";
"general.success" = "Success";
"general.unknown" = "Unknown";
"general.loading" = "Loading";
"general.done" = "Done";
"general.save" = "Save";
"balance.availableTitle" = "Available Balance:";

View File

@ -32,9 +32,11 @@ public enum Asset {
public static let welcomeScreenLogo = ImageAsset(name: "WelcomeScreenLogo")
public static let zashiLogo = ImageAsset(name: "ZashiLogo")
public static let alertIcon = ImageAsset(name: "alertIcon")
public static let arrowLeftLong = ImageAsset(name: "arrowLeftLong")
public static let buttonCloseX = ImageAsset(name: "buttonCloseX")
public static let check = ImageAsset(name: "check")
public static let chevronDown = ImageAsset(name: "chevronDown")
public static let chevronRight = ImageAsset(name: "chevronRight")
public static let coinsSwap = ImageAsset(name: "coinsSwap")
public static let convertIcon = ImageAsset(name: "convertIcon")
public static let copy = ImageAsset(name: "copy")
@ -42,6 +44,15 @@ public enum Asset {
public static let eyeOn = ImageAsset(name: "eyeOn")
public static let flyReceivedFilled = ImageAsset(name: "flyReceivedFilled")
public static let gridTile = ImageAsset(name: "gridTile")
public enum Icons {
public static let coinbase = ImageAsset(name: "coinbase")
public static let currencyDollar = ImageAsset(name: "currencyDollar")
public static let downloadCloud = ImageAsset(name: "downloadCloud")
public static let key = ImageAsset(name: "key")
public static let messageSmile = ImageAsset(name: "messageSmile")
public static let server = ImageAsset(name: "server")
public static let settings = ImageAsset(name: "settings")
}
public static let infoCircle = ImageAsset(name: "infoCircle")
public static let infoOutline = ImageAsset(name: "infoOutline")
public static let rateIcons = ImageAsset(name: "rateIcons")
@ -100,6 +111,10 @@ public enum Asset {
public static let saveButtonDisabledText = ColorAsset(name: "saveButtonDisabledText")
public static let subtitle = ColorAsset(name: "subtitle")
}
public enum Settings {
public static let coinbaseBcg = ColorAsset(name: "coinbaseBcg")
public static let coinbaseTint = ColorAsset(name: "coinbaseTint")
}
public static let background = ColorAsset(name: "background")
public static let btnDarkShade = ColorAsset(name: "btnDarkShade")
public static let btnLabelShade = ColorAsset(name: "btnLabelShade")
@ -128,8 +143,18 @@ public enum Asset {
public static let splash = ColorAsset(name: "splash")
public static let syncProgresBcg = ColorAsset(name: "syncProgresBcg")
public enum V2 {
public static let bgPrimary = ColorAsset(name: "bgPrimary")
public static let bgTertiary = ColorAsset(name: "bgTertiary")
public static let btnDestroyBcg = ColorAsset(name: "btnDestroyBcg")
public static let btnDestroyBorder = ColorAsset(name: "btnDestroyBorder")
public static let btnDestroyFg = ColorAsset(name: "btnDestroyFg")
public static let divider = ColorAsset(name: "divider")
public static let exchangeRateBcg = ColorAsset(name: "exchangeRateBcg")
public static let exchangeRateBorder = ColorAsset(name: "exchangeRateBorder")
public static let strokeSecondary = ColorAsset(name: "strokeSecondary")
public static let textPrimary = ColorAsset(name: "textPrimary")
public static let textQuaternary = ColorAsset(name: "textQuaternary")
public static let textTertiary = ColorAsset(name: "textTertiary")
public enum Tooltips {
public static let bcg = ColorAsset(name: "bcg")
public static let shadow = ColorAsset(name: "shadow")

View File

@ -33,20 +33,14 @@ struct ZashiBackModifier: ViewModifier {
}
} label: {
HStack {
Image(systemName: "arrow.backward")
Asset.Assets.arrowLeftLong.image
.resizable()
.renderingMode(.template)
.frame(width: 10, height: 10)
.frame(width: 24, height: 24)
.foregroundColor(invertedColors ? Asset.Colors.secondary.color : Asset.Colors.primary.color)
Text(L10n.General.back.uppercased())
.foregroundColor(
disabled
? Asset.Colors.shade72.color
: invertedColors ? Asset.Colors.secondary.color : Asset.Colors.primary.color
)
.font(.custom(FontFamily.Inter.regular.name, size: 14))
}
.padding(.trailing, 24)
.padding(8)
}
.disabled(disabled)
}

View File

@ -185,8 +185,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-composable-architecture",
"state" : {
"revision" : "b432441cbc11a38c678312bad1a01138a7cd64e0",
"version" : "1.13.0"
"revision" : "121b6080697b5457ac63e37d2f2d97cf5acd999a",
"version" : "1.13.1"
}
},
{
@ -210,7 +210,7 @@
{
"identity" : "swift-custom-dump",
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-custom-dump",
"location" : "https://github.com/pointfreeco/swift-custom-dump.git",
"state" : {
"revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1",
"version" : "1.3.3"
@ -221,8 +221,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-dependencies",
"state" : {
"revision" : "d7472be6b3c89251ce4c0db07d32405b43426781",
"version" : "1.3.7"
"revision" : "21660b042cd8fd0bdd45cc39050cacd4e91a63a4",
"version" : "1.3.8"
}
},
{
@ -257,8 +257,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/pointfreeco/swift-navigation",
"state" : {
"revision" : "339ba3e305dc727b5baa6ddb476430a842167d4e",
"version" : "2.0.5"
"revision" : "70321c441d51b0b893c3abbf79687f550a027fde",
"version" : "2.0.6"
}
},
{