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
|
@ -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
|
||||
|
|
|
@ -70,6 +70,7 @@ public struct AboutView: View {
|
|||
|
||||
Spacer()
|
||||
}
|
||||
.padding(.top, 20)
|
||||
.onAppear { store.send(.onAppear) }
|
||||
.zashiBack()
|
||||
.zashiTitle {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
|
|
|
@ -60,7 +60,7 @@ public struct TransactionRowView: View {
|
|||
isFailed: transaction.status == .failed
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
TransactionIdView(
|
||||
store: store,
|
||||
transaction: transaction
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 %@
|
||||
|
|
12
modules/Sources/Generated/Resources/Assets.xcassets/arrowLeftLong.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "arrowLeftLong.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/arrowLeftLong.imageset/arrowLeftLong.png
vendored
Normal file
After Width: | Height: | Size: 3.2 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/chevronRight.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "chevronRight.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/chevronRight.imageset/chevronRight.png
vendored
Normal file
After Width: | Height: | Size: 3.8 KiB |
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/coinbase.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "coinbase.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/coinbase.imageset/coinbase.png
vendored
Normal file
After Width: | Height: | Size: 14 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/currencyDollar.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "currencyDollar.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/currencyDollar.imageset/currencyDollar.png
vendored
Normal file
After Width: | Height: | Size: 10 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/downloadCloud.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "downloadCloud.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/downloadCloud.imageset/downloadCloud.png
vendored
Normal file
After Width: | Height: | Size: 12 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/key.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "key.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/key.imageset/key.png
vendored
Normal file
After Width: | Height: | Size: 10 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/messageSmile.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "messageSmile.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/messageSmile.imageset/messageSmile.png
vendored
Normal file
After Width: | Height: | Size: 15 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/server.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "server.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/server.imageset/server.png
vendored
Normal file
After Width: | Height: | Size: 11 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/icons/settings.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "settings.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/icons/settings.imageset/settings.png
vendored
Normal file
After Width: | Height: | Size: 20 KiB |
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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:";
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|