Home, Settings, About UI Changes (#819)
* Home, Settings, About UI Changes * Settings Screen #808 - Updated Settings Screen according to Figma Design * Settings Screen - Suggested Changes * About Screen - UI Suggestions Updated * Updated "Load Screen" Design * Security Warning UI * RecoveryPhraseDisplay UI Updates --------- Co-authored-by: praveen <praveenkumarvattipalli@Praveens-MacBook-Pro-2.local>
This commit is contained in:
parent
78f230a768
commit
ce171563f8
|
@ -21,12 +21,18 @@ public struct HomeView: View {
|
|||
WithViewStore(store) { viewStore in
|
||||
VStack {
|
||||
balance(viewStore)
|
||||
|
||||
Spacer()
|
||||
|
||||
sendButton(viewStore)
|
||||
|
||||
receiveButton(viewStore)
|
||||
VStack {
|
||||
if viewStore.isSendButtonDisabled {
|
||||
dismissButton(viewStore)
|
||||
}else {
|
||||
sendButton(viewStore)
|
||||
}
|
||||
|
||||
receiveButton(viewStore)
|
||||
}
|
||||
.padding(EdgeInsets(top: 0.0, leading: 50.0, bottom: 0, trailing: 50.0))
|
||||
|
||||
|
||||
Button {
|
||||
viewStore.send(.updateDestination(.transactionHistory))
|
||||
|
@ -112,8 +118,19 @@ extension HomeView {
|
|||
.padding(.bottom, 30)
|
||||
.disable(
|
||||
when: viewStore.isSendButtonDisabled,
|
||||
dimmingOpacity: 0.5
|
||||
dimmingOpacity: 0.8
|
||||
)
|
||||
|
||||
}
|
||||
|
||||
func dismissButton(_ viewStore: HomeViewStore) -> some View {
|
||||
Button(action: {
|
||||
viewStore.send(.updateDestination(.send))
|
||||
}, label: {
|
||||
Text(L10n.Home.sendZec(tokenName))
|
||||
})
|
||||
.disableButtonStyle
|
||||
.padding(.bottom, 30)
|
||||
}
|
||||
|
||||
func receiveButton(_ viewStore: HomeViewStore) -> some View {
|
||||
|
@ -122,7 +139,8 @@ extension HomeView {
|
|||
}, label: {
|
||||
Text(L10n.Home.receiveZec(tokenName))
|
||||
})
|
||||
.activeButtonStyle
|
||||
.activeWhiteButtonStyle
|
||||
|
||||
.padding(.bottom, 30)
|
||||
}
|
||||
|
||||
|
|
|
@ -21,33 +21,64 @@ public struct PlainOnboardingView: View {
|
|||
public var body: some View {
|
||||
WithViewStore(store) { viewStore in
|
||||
VStack {
|
||||
VStack(alignment: .leading, spacing: 80) {
|
||||
Text(L10n.PlainOnboarding.title)
|
||||
|
||||
//Commenting Following Two text and Adding Image and Text accroding to updated Figma Design
|
||||
// VStack(alignment: .leading, spacing: 80) {
|
||||
// Text(L10n.PlainOnboarding.title)
|
||||
// .font(
|
||||
// .custom(FontFamily.Inter.regular.name, size: 34, relativeTo: .largeTitle)
|
||||
// .weight(.heavy)
|
||||
// )
|
||||
//
|
||||
// Text(L10n.PlainOnboarding.caption)
|
||||
// .font(
|
||||
// .custom(FontFamily.Inter.regular.name, size: 16, relativeTo: .body)
|
||||
// .weight(.semibold)
|
||||
// )
|
||||
// }
|
||||
// .padding(0)
|
||||
VStack(spacing: 27) {
|
||||
Image(Asset.Assets.welcomeScreenLogo.name)
|
||||
.resizable()
|
||||
.frame(width: 150, height: 150)
|
||||
Text(L10n.WelcomeScreen.description)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 34, relativeTo: .largeTitle)
|
||||
.weight(.heavy)
|
||||
)
|
||||
|
||||
Text(L10n.PlainOnboarding.caption)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 16, relativeTo: .body)
|
||||
.weight(.semibold)
|
||||
.custom(FontFamily.Inter.regular.name, size: 22)
|
||||
.weight(.regular)
|
||||
)
|
||||
.multilineTextAlignment(.center)
|
||||
.foregroundColor(.black)
|
||||
.frame(width: 277, height: 147, alignment: .top)
|
||||
Spacer()
|
||||
}
|
||||
.padding(0)
|
||||
.padding(.top, 75.0)
|
||||
|
||||
Spacer()
|
||||
|
||||
Button(L10n.PlainOnboarding.Button.createNewWallet) {
|
||||
viewStore.send(.createNewWallet, animation: .easeInOut(duration: animationDuration))
|
||||
VStack(spacing: 23) {
|
||||
Button(L10n.PlainOnboarding.Button.createNewWallet.uppercased()) {
|
||||
viewStore.send(.createNewWallet, animation: .easeInOut(duration: animationDuration))
|
||||
}
|
||||
.activeButtonStyle
|
||||
.font(
|
||||
.custom(FontFamily.Inter.medium.name, size: 14)
|
||||
.weight(.medium)
|
||||
)
|
||||
.frame(height: 70)
|
||||
|
||||
Button(L10n.PlainOnboarding.Button.restoreWallet.uppercased()) {
|
||||
viewStore.send(.importExistingWallet, animation: .easeInOut(duration: animationDuration))
|
||||
}
|
||||
.activeWhiteButtonStyle
|
||||
.font(
|
||||
.custom(FontFamily.Inter.medium.name, size: 14)
|
||||
.weight(.medium)
|
||||
)
|
||||
.frame(height: 70)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
}
|
||||
.activeButtonStyle
|
||||
.padding(EdgeInsets(top: 0.0, leading: 50.0, bottom: 0, trailing: 50.0))
|
||||
|
||||
Button(L10n.PlainOnboarding.Button.restoreWallet) {
|
||||
viewStore.send(.importExistingWallet, animation: .easeInOut(duration: animationDuration))
|
||||
}
|
||||
.frame(height: 80)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
}
|
||||
.padding(.all)
|
||||
.navigationLinkEmpty(
|
||||
|
|
|
@ -19,72 +19,92 @@ public struct RecoveryPhraseDisplayView: View {
|
|||
|
||||
public var body: some View {
|
||||
WithViewStore(self.store) { viewStore in
|
||||
VStack(alignment: .center, spacing: 0) {
|
||||
VStack(alignment: .center, spacing: 30) {
|
||||
if let groups = viewStore.phrase?.toGroups(groupSizeOverride: 2) {
|
||||
VStack(spacing: 20) {
|
||||
Text(L10n.RecoveryPhraseDisplay.title)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 20)
|
||||
.weight(.bold)
|
||||
)
|
||||
.multilineTextAlignment(.center)
|
||||
|
||||
VStack(alignment: .center, spacing: 4) {
|
||||
Text(L10n.RecoveryPhraseDisplay.description)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 16)
|
||||
)
|
||||
.padding(.horizontal, 20)
|
||||
}
|
||||
}
|
||||
.padding(.top, 0)
|
||||
.padding(.bottom, 20)
|
||||
|
||||
Spacer()
|
||||
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
ForEach(groups, id: \.startIndex) { group in
|
||||
VStack {
|
||||
HStack(alignment: .center) {
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("\(group.startIndex). \(group.words[0].data)")
|
||||
Spacer()
|
||||
|
||||
Asset.Assets.zashiLogo.image
|
||||
.resizable()
|
||||
.frame(width: 33, height: 43)
|
||||
|
||||
|
||||
VStack(alignment: .center, spacing: 10) {
|
||||
|
||||
|
||||
VStack(spacing: 10) {
|
||||
Text(L10n.RecoveryPhraseDisplay.title)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 25)
|
||||
.weight(.bold)
|
||||
)
|
||||
.multilineTextAlignment(.center)
|
||||
|
||||
VStack(alignment: .center, spacing: 4) {
|
||||
Text(L10n.RecoveryPhraseDisplay.description)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 14)
|
||||
)
|
||||
.frame(height: 100)
|
||||
.multilineTextAlignment(.center)
|
||||
.padding(.horizontal, 20)
|
||||
}
|
||||
}
|
||||
.padding(.top, 0)
|
||||
.padding(.bottom, 20)
|
||||
|
||||
VStack(alignment: .leading, spacing: 10) {
|
||||
ForEach(groups, id: \.startIndex) { group in
|
||||
VStack {
|
||||
HStack(alignment: .center) {
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("\(group.startIndex). \(group.words[0].data)")
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 16)
|
||||
)
|
||||
Spacer()
|
||||
}
|
||||
.padding(.leading, 20)
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("\(group.startIndex + 1). \(group.words[1].data)")
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 16)
|
||||
)
|
||||
Spacer()
|
||||
}
|
||||
.padding(.trailing, 20)
|
||||
}
|
||||
.padding(.leading, 20)
|
||||
HStack {
|
||||
Spacer()
|
||||
Text("\(group.startIndex + 1). \(group.words[1].data)")
|
||||
Spacer()
|
||||
}
|
||||
.padding(.trailing, 20)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
VStack {
|
||||
Button(
|
||||
action: { viewStore.send(.finishedPressed) },
|
||||
label: { Text(L10n.RecoveryPhraseDisplay.Button.wroteItDown) }
|
||||
|
||||
Text(L10n.RecoveryPhraseDisplay.subtext)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 14)
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 60)
|
||||
}
|
||||
.padding()
|
||||
Button(
|
||||
action: { viewStore.send(.finishedPressed) },
|
||||
label: { Text(L10n.RecoveryPhraseDisplay.Button.wroteItDown) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 70)
|
||||
.padding(EdgeInsets(top: 10.0, leading: 50.0, bottom: 60.0, trailing: 50.0))
|
||||
} else {
|
||||
Text(L10n.RecoveryPhraseDisplay.noWords)
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 20)
|
||||
.padding(.horizontal)
|
||||
.padding(.top, 0)
|
||||
.applyScreenBackground()
|
||||
// .padding(.bottom, 0)
|
||||
// .padding(.horizontal)
|
||||
// .padding(.top, 0)
|
||||
// .applyScreenBackground()
|
||||
}
|
||||
.navigationBarTitleDisplayMode(.inline)
|
||||
.navigationBarHidden(true)
|
||||
// .navigationBarTitleDisplayMode(.inline)
|
||||
// .navigationBarHidden(true)
|
||||
.applyScreenBackground()
|
||||
.replaceNavigationBackButton()
|
||||
}
|
||||
}
|
||||
// TODO: [#695] This should have a #DEBUG tag, but if so, it's not possible to compile this on release mode and submit it to testflight https://github.com/zcash/ZcashLightClientKit/issues/695
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Praveen kumar Vattipalli on 09/09/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import ComposableArchitecture
|
||||
import Models
|
||||
import Pasteboard
|
||||
|
||||
public typealias SecurityWarningStore = Store<SecurityWarningReducer.State, SecurityWarningReducer.Action>
|
||||
|
||||
public struct SecurityWarningReducer: ReducerProtocol {
|
||||
public struct State: Equatable {}
|
||||
|
||||
public enum Action: Equatable {
|
||||
case debugMenuStartup
|
||||
}
|
||||
|
||||
public init() {}
|
||||
|
||||
public func reduce(into state: inout State, action: Action) -> ComposableArchitecture.EffectTask<Action> {
|
||||
return .none
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Store
|
||||
|
||||
extension SecurityWarningStore {
|
||||
public static var demo = SecurityWarningStore(
|
||||
initialState: .placeholder,
|
||||
reducer: SecurityWarningReducer()
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Placeholders
|
||||
|
||||
extension SecurityWarningReducer.State {
|
||||
public static let placeholder = SecurityWarningReducer.State()
|
||||
}
|
|
@ -0,0 +1,97 @@
|
|||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Praveen kumar Vattipalli on 08/09/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import ComposableArchitecture
|
||||
import Generated
|
||||
import UIComponents
|
||||
|
||||
public struct SecurityWarningView: View {
|
||||
let store: SecurityWarningStore
|
||||
@State var isOn = false
|
||||
|
||||
public init(store: SecurityWarningStore) {
|
||||
self.store = store
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
WithViewStore(store) { viewStore in
|
||||
VStack(alignment: .leading, spacing: 45) {
|
||||
VStack(alignment: .center, spacing: 45) {
|
||||
Asset.Assets.zashiLogo.image
|
||||
.resizable()
|
||||
.frame(width: 33, height: 43)
|
||||
VStack(alignment: .center, spacing: 25) {
|
||||
Text("Security warning:")
|
||||
.font(
|
||||
.custom(FontFamily.Inter.bold.name, size: 25)
|
||||
.weight(.bold)
|
||||
)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
Text("Zashi 0.9 is a Zcash-only shielded wallet, built by Zcashers for Zcashers. The purpose of this release is primarily to test functionality and collect feedback. While Zashi has been engineered for your privacy and safety (read the privacy policy here), this release has not yet been security audited. Users are cautioned to deposit, send, and receive only small amounts of ZEC. Please click below to proceed.")
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 16)
|
||||
.weight(.regular)
|
||||
)
|
||||
.padding(.leading, 50)
|
||||
.padding(.trailing, 50)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
Toggle("I acknowledge", isOn: $isOn)
|
||||
.padding(.leading, 50)
|
||||
.toggleStyle(CheckboxToggleStyle())
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 14)
|
||||
.weight(.regular)
|
||||
)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
Button(
|
||||
action: { viewStore.send(.debugMenuStartup) },
|
||||
label: { Text("CONFIRM") }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(maxHeight: 70)
|
||||
.padding(EdgeInsets(top: 30.0, leading: 50.0, bottom: 60.0, trailing: 50.0))
|
||||
}
|
||||
.padding(.top, 0)
|
||||
.applyScreenBackground()
|
||||
.replaceNavigationBackButton()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
struct CheckboxToggleStyle: ToggleStyle {
|
||||
func makeBody(configuration: Configuration) -> some View {
|
||||
HStack {
|
||||
|
||||
RoundedRectangle(cornerRadius: 5.0)
|
||||
.stroke(lineWidth: 2)
|
||||
.frame(width: 20, height: 20)
|
||||
.cornerRadius(5.0)
|
||||
.overlay {
|
||||
Image(systemName: configuration.isOn ? "checkmark" : "")
|
||||
}
|
||||
.onTapGesture {
|
||||
withAnimation(.spring()) {
|
||||
configuration.isOn.toggle()
|
||||
}
|
||||
}
|
||||
|
||||
configuration.label
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -125,6 +125,8 @@ extension RootReducer {
|
|||
case .home, .initialization, .onboarding, .phraseDisplay, .phraseValidation, .sandbox, .updateStateAfterConfigUpdate, .alert,
|
||||
.welcome, .binding, .nukeWalletFailed, .nukeWalletSucceeded, .debug, .walletConfigLoaded, .exportLogs:
|
||||
return .none
|
||||
case .securityWarning(_):
|
||||
return .none
|
||||
}
|
||||
|
||||
return .none
|
||||
|
|
|
@ -267,7 +267,7 @@ extension RootReducer {
|
|||
return .none
|
||||
|
||||
case .home, .destination, .onboarding, .phraseDisplay, .phraseValidation, .sandbox,
|
||||
.welcome, .binding, .debug, .exportLogs, .alert:
|
||||
.welcome, .binding, .debug, .exportLogs, .securityWarning,.alert:
|
||||
return .none
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ public struct RootReducer: ReducerProtocol {
|
|||
public var onboardingState: OnboardingFlowReducer.State
|
||||
public var phraseValidationState: RecoveryPhraseValidationFlowReducer.State
|
||||
public var phraseDisplayState: RecoveryPhraseDisplayReducer.State
|
||||
public var securityWarningState: SecurityWarningReducer.State
|
||||
public var sandboxState: SandboxReducer.State
|
||||
public var storedWallet: StoredWallet?
|
||||
public var walletConfig: WalletConfig
|
||||
|
@ -52,6 +53,7 @@ public struct RootReducer: ReducerProtocol {
|
|||
onboardingState: OnboardingFlowReducer.State,
|
||||
phraseValidationState: RecoveryPhraseValidationFlowReducer.State,
|
||||
phraseDisplayState: RecoveryPhraseDisplayReducer.State,
|
||||
securityWarningState: SecurityWarningReducer.State,
|
||||
sandboxState: SandboxReducer.State,
|
||||
storedWallet: StoredWallet? = nil,
|
||||
walletConfig: WalletConfig,
|
||||
|
@ -65,6 +67,7 @@ public struct RootReducer: ReducerProtocol {
|
|||
self.onboardingState = onboardingState
|
||||
self.phraseValidationState = phraseValidationState
|
||||
self.phraseDisplayState = phraseDisplayState
|
||||
self.securityWarningState = securityWarningState
|
||||
self.sandboxState = sandboxState
|
||||
self.storedWallet = storedWallet
|
||||
self.walletConfig = walletConfig
|
||||
|
@ -84,6 +87,7 @@ public struct RootReducer: ReducerProtocol {
|
|||
case nukeWalletSucceeded
|
||||
case onboarding(OnboardingFlowReducer.Action)
|
||||
case phraseDisplay(RecoveryPhraseDisplayReducer.Action)
|
||||
case securityWarning(SecurityWarningReducer.Action)
|
||||
case phraseValidation(RecoveryPhraseValidationFlowReducer.Action)
|
||||
case sandbox(SandboxReducer.Action)
|
||||
case updateStateAfterConfigUpdate(WalletConfig)
|
||||
|
@ -138,6 +142,10 @@ public struct RootReducer: ReducerProtocol {
|
|||
Scope(state: \.welcomeState, action: /Action.welcome) {
|
||||
WelcomeReducer()
|
||||
}
|
||||
|
||||
Scope(state: \.securityWarningState, action: /Action.securityWarning) {
|
||||
SecurityWarningReducer()
|
||||
}
|
||||
|
||||
initializationReduce()
|
||||
|
||||
|
@ -328,6 +336,7 @@ extension RootReducer.State {
|
|||
phraseDisplayState: RecoveryPhraseDisplayReducer.State(
|
||||
phrase: .placeholder
|
||||
),
|
||||
securityWarningState: .placeholder,
|
||||
sandboxState: .placeholder,
|
||||
walletConfig: .default,
|
||||
welcomeState: .placeholder
|
||||
|
|
|
@ -65,6 +65,8 @@ public struct SettingsReducer: ReducerProtocol {
|
|||
case sendSupportMail
|
||||
case sendSupportMailFinished
|
||||
case updateDestination(SettingsReducer.State.Destination?)
|
||||
case privacyPolicy
|
||||
case documentation
|
||||
}
|
||||
|
||||
@Dependency(\.appVersion) var appVersion
|
||||
|
@ -118,7 +120,13 @@ public struct SettingsReducer: ReducerProtocol {
|
|||
|
||||
case .exportLogs:
|
||||
return .none
|
||||
|
||||
|
||||
case .privacyPolicy:
|
||||
return .none
|
||||
|
||||
case .documentation:
|
||||
return .none
|
||||
|
||||
case .phraseDisplay:
|
||||
state.destination = nil
|
||||
return .none
|
||||
|
|
|
@ -14,57 +14,50 @@ public struct SettingsView: View {
|
|||
|
||||
public var body: some View {
|
||||
WithViewStore(store) { viewStore in
|
||||
VStack(spacing: 40) {
|
||||
Toggle(
|
||||
L10n.Settings.crashReporting,
|
||||
isOn: viewStore.binding(\.$isCrashReportingOn)
|
||||
)
|
||||
VStack(spacing: 25) {
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.backupWalletAccessRequest) },
|
||||
label: { Text(L10n.Settings.backupWallet) }
|
||||
label: { Text(L10n.Settings.backupWallet.uppercased()) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 50)
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.exportLogs(.start)) },
|
||||
label: {
|
||||
if viewStore.exportLogsState.exportLogsDisabled {
|
||||
HStack {
|
||||
ProgressView()
|
||||
Text(L10n.Settings.exporting)
|
||||
}
|
||||
} else {
|
||||
Text(L10n.Settings.exportLogs)
|
||||
}
|
||||
}
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 50)
|
||||
.disable(
|
||||
when: viewStore.exportLogsState.exportLogsDisabled,
|
||||
dimmingOpacity: 0.5
|
||||
)
|
||||
.frame(height: 70)
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.sendSupportMail) },
|
||||
label: { Text(L10n.Settings.feedback) }
|
||||
label: { Text(L10n.Settings.feedback.uppercased()) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 50)
|
||||
|
||||
.frame(height: 70)
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.privacyPolicy) },
|
||||
label: { Text(L10n.Settings.privacyPolicy.uppercased()) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 70)
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.documentation) },
|
||||
label: { Text(L10n.Settings.documentation.uppercased()) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(height: 70)
|
||||
|
||||
Spacer()
|
||||
|
||||
Button(
|
||||
action: { viewStore.send(.updateDestination(.about)) },
|
||||
label: { Text(L10n.Settings.about) }
|
||||
label: { Text(L10n.Settings.about.uppercased()) }
|
||||
)
|
||||
.activeButtonStyle
|
||||
.frame(maxHeight: 50)
|
||||
.padding(.bottom, 50)
|
||||
}
|
||||
.padding(EdgeInsets(top: 30.0, leading: 50.0, bottom: 0, trailing: 50.0))
|
||||
.padding(.horizontal, 30)
|
||||
.navigationTitle(L10n.Settings.title)
|
||||
.navigationTitle(L10n.Settings.title.uppercased())
|
||||
.replaceNavigationBackButton()
|
||||
.applyScreenBackground()
|
||||
.navigationLinkEmpty(
|
||||
isActive: viewStore.bindingForBackupPhrase,
|
||||
|
|
|
@ -18,13 +18,44 @@ public struct About: View {
|
|||
|
||||
public var body: some View {
|
||||
WithViewStore(store) { viewStore in
|
||||
VStack {
|
||||
Text(L10n.Settings.version(viewStore.appVersion, viewStore.appBuild))
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
VStack(alignment: .leading, spacing: 45) {
|
||||
HStack(spacing: 15) {
|
||||
Asset.Assets.zashiLogo.image
|
||||
.resizable()
|
||||
.frame(width: 62, height: 81)
|
||||
|
||||
Asset.Assets.zashiLogoText.image
|
||||
.resizable()
|
||||
.frame(width: 110, height: 30)
|
||||
}
|
||||
VStack(alignment: .leading, spacing: 25) {
|
||||
Text(L10n.Settings.version(viewStore.appVersion, viewStore.appBuild))
|
||||
.font(
|
||||
.custom(FontFamily.Inter.bold.name, size: 14)
|
||||
.weight(.bold)
|
||||
)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
Text(L10n.About.description)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontDark.color)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 14)
|
||||
.weight(.regular)
|
||||
)
|
||||
}
|
||||
|
||||
.padding(.leading, 12)
|
||||
.padding(.trailing, 60)
|
||||
Spacer()
|
||||
}
|
||||
.padding(.top, 50)
|
||||
.padding(.leading, 48)
|
||||
.navigationTitle(L10n.Settings.about.uppercased())
|
||||
.font(
|
||||
.custom(FontFamily.Inter.bold.name, size: 14)
|
||||
.weight(.bold)
|
||||
)
|
||||
.applyScreenBackground()
|
||||
.replaceNavigationBackButton()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ public struct WalletEventsFlowView: View {
|
|||
walletEventsList(with: viewStore)
|
||||
}
|
||||
.navigationTitle(L10n.Transactions.title)
|
||||
.replaceNavigationBackButton()
|
||||
.listStyle(.plain)
|
||||
.onAppear { viewStore.send(.onAppear) }
|
||||
.onDisappear(perform: { viewStore.send(.onDisappear) })
|
||||
|
|
|
@ -38,3 +38,40 @@ extension WelcomeStore {
|
|||
extension WelcomeReducer.State {
|
||||
public static let placeholder = WelcomeReducer.State()
|
||||
}
|
||||
|
||||
|
||||
|
||||
///
|
||||
///
|
||||
///
|
||||
///
|
||||
public typealias WelcomeBackStore = Store<WelcomeBackReducer.State, WelcomeBackReducer.Action>
|
||||
|
||||
public struct WelcomeBackReducer: ReducerProtocol {
|
||||
public struct State: Equatable {}
|
||||
|
||||
public enum Action: Equatable {
|
||||
case debugMenuStartup
|
||||
}
|
||||
|
||||
public init() {}
|
||||
|
||||
public func reduce(into state: inout State, action: Action) -> ComposableArchitecture.EffectTask<Action> {
|
||||
return .none
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Store
|
||||
|
||||
extension WelcomeBackStore {
|
||||
public static var demo = WelcomeBackStore(
|
||||
initialState: .placeholder,
|
||||
reducer: WelcomeBackReducer()
|
||||
)
|
||||
}
|
||||
|
||||
// MARK: - Placeholders
|
||||
|
||||
extension WelcomeBackReducer.State {
|
||||
public static let placeholder = WelcomeBackReducer.State()
|
||||
}
|
||||
|
|
|
@ -13,28 +13,71 @@ import UIComponents
|
|||
public struct WelcomeView: View {
|
||||
var store: WelcomeStore
|
||||
|
||||
@State var animate: Bool = false
|
||||
|
||||
public init(store: WelcomeStore) {
|
||||
self.store = store
|
||||
}
|
||||
|
||||
public var body: some View {
|
||||
VStack(alignment: .center, spacing: 80) {
|
||||
VStack {
|
||||
Image(Asset.Assets.welcomeScreenLogo.name)
|
||||
.resizable()
|
||||
.frame(width: 150, height: 150)
|
||||
.padding(.top, 100)
|
||||
ZStack {
|
||||
ZStack {
|
||||
VStack(spacing: 27) {
|
||||
Image(Asset.Assets.welcomeScreenLogo.name)
|
||||
.resizable()
|
||||
.frame(width: 150, height: 150)
|
||||
Text(L10n.WelcomeScreen.description)
|
||||
.font(
|
||||
.custom(FontFamily.Inter.regular.name, size: 22)
|
||||
.weight(.regular)
|
||||
)
|
||||
.multilineTextAlignment(.center)
|
||||
.foregroundColor(.black)
|
||||
.frame(width: 277, height: 147, alignment: .top)
|
||||
Spacer()
|
||||
}
|
||||
.padding(.top, 75.0)
|
||||
.accessDebugMenuWithHiddenGesture {
|
||||
ViewStore(store).send(.debugMenuStartup)
|
||||
}
|
||||
}
|
||||
ZStack {
|
||||
LinearGradient(colors: [Asset.Colors.BackgroundColors.splashBGColor.color, Asset.Colors.BackgroundColors.splashBGColor.color, .clear], startPoint: .top, endPoint: .bottom)
|
||||
|
||||
VStack() {
|
||||
Spacer()
|
||||
Asset.Assets.splashBG.image
|
||||
.resizable()
|
||||
.aspectRatio(contentMode: .fit)
|
||||
|
||||
Spacer()
|
||||
.frame(height: UIScreen.main.bounds.height)
|
||||
}
|
||||
VStack(spacing: 44) {
|
||||
Asset.Assets.isolationModeLogo.image
|
||||
.resizable()
|
||||
.frame(width: 83, height: 107)
|
||||
Asset.Assets.isolationModeLogoText.image
|
||||
.frame(width: 82, height: 71)
|
||||
}
|
||||
.padding(.top, 75)
|
||||
}
|
||||
.offset(y: animate ? -(UIScreen.main.bounds.height) : 0)
|
||||
.edgesIgnoringSafeArea(.all)
|
||||
}
|
||||
}
|
||||
.accessDebugMenuWithHiddenGesture {
|
||||
ViewStore(store).send(.debugMenuStartup)
|
||||
.padding(.top, 50)
|
||||
.applyScreenBackground()
|
||||
.onAppear {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now()) {
|
||||
withAnimation(.interpolatingSpring(stiffness: 20, damping: 8)
|
||||
.speed(0.5)
|
||||
) {
|
||||
animate.toggle()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.frame(alignment: .center)
|
||||
.applyScreenBackground()
|
||||
.animation(.easeInOut, value: 3)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Previews
|
||||
|
|
|
@ -18,6 +18,11 @@ public enum L10n {
|
|||
public static func qrCodeFor(_ p1: Any) -> String {
|
||||
return L10n.tr("Localizable", "qrCodeFor", String(describing: p1), fallback: "QR Code for %@")
|
||||
}
|
||||
public enum About {
|
||||
/// Send and receive ZEC on Zashi!
|
||||
/// Zashi is a minimal-design, self-custody, ZEC-only shielded wallet that keeps your transaction history and wallet balance private. Built by Zcashers, for Zcashers. Developed and maintained by Electric Coin Co., the inventor of Zcash, Zashi features a built-in user-feedback mechanism to enable more features, more quickly.
|
||||
public static let description = L10n.tr("Localizable", "about.description", fallback: "Send and receive ZEC on Zashi! \nZashi is a minimal-design, self-custody, ZEC-only shielded wallet that keeps your transaction history and wallet balance private. Built by Zcashers, for Zcashers. Developed and maintained by Electric Coin Co., the inventor of Zcash, Zashi features a built-in user-feedback mechanism to enable more features, more quickly.")
|
||||
}
|
||||
public enum AddressDetails {
|
||||
/// Sapling Address
|
||||
public static let sa = L10n.tr("Localizable", "addressDetails.sa", fallback: "Sapling Address")
|
||||
|
@ -285,17 +290,19 @@ public enum L10n {
|
|||
public static let title = L10n.tr("Localizable", "recoveryPhraseBackupValidation.title", fallback: "Verify Your Backup")
|
||||
}
|
||||
public enum RecoveryPhraseDisplay {
|
||||
/// The following 24 words represent your funds and the security used to protect them. Back them up now!
|
||||
public static let description = L10n.tr("Localizable", "recoveryPhraseDisplay.description", fallback: "The following 24 words represent your funds and the security used to protect them. Back them up now!")
|
||||
/// The following 24 words are the keys to your funds and are the only way to recover your funds if you get locked out or get a new device. Protect your ZEC by storing this phrase in a place you trust and never share it with anyone!
|
||||
public static let description = L10n.tr("Localizable", "recoveryPhraseDisplay.description", fallback: "The following 24 words are the keys to your funds and are the only way to recover your funds if you get locked out or get a new device. Protect your ZEC by storing this phrase in a place you trust and never share it with anyone!")
|
||||
/// Oops no words
|
||||
public static let noWords = L10n.tr("Localizable", "recoveryPhraseDisplay.noWords", fallback: "Oops no words")
|
||||
/// Wallet birthday height: 1598622
|
||||
public static let subtext = L10n.tr("Localizable", "recoveryPhraseDisplay.subtext", fallback: "Wallet birthday height: 1598622")
|
||||
/// Your Secret Recovery Phrase
|
||||
public static let title = L10n.tr("Localizable", "recoveryPhraseDisplay.title", fallback: "Your Secret Recovery Phrase")
|
||||
public enum Button {
|
||||
/// Copy To Buffer
|
||||
public static let copyToBuffer = L10n.tr("Localizable", "recoveryPhraseDisplay.button.copyToBuffer", fallback: "Copy To Buffer")
|
||||
/// I wrote it down!
|
||||
public static let wroteItDown = L10n.tr("Localizable", "recoveryPhraseDisplay.button.wroteItDown", fallback: "I wrote it down!")
|
||||
/// I GOT IT!
|
||||
public static let wroteItDown = L10n.tr("Localizable", "recoveryPhraseDisplay.button.wroteItDown", fallback: "I GOT IT!")
|
||||
}
|
||||
}
|
||||
public enum RecoveryPhraseTestPreamble {
|
||||
|
@ -496,12 +503,16 @@ public enum L10n {
|
|||
public static let backupWallet = L10n.tr("Localizable", "settings.backupWallet", fallback: "Backup Wallet")
|
||||
/// Enable Crash Reporting
|
||||
public static let crashReporting = L10n.tr("Localizable", "settings.crashReporting", fallback: "Enable Crash Reporting")
|
||||
/// Documentation
|
||||
public static let documentation = L10n.tr("Localizable", "settings.documentation", fallback: "Documentation")
|
||||
/// Exporting...
|
||||
public static let exporting = L10n.tr("Localizable", "settings.exporting", fallback: "Exporting...")
|
||||
/// Export & share logs
|
||||
public static let exportLogs = L10n.tr("Localizable", "settings.exportLogs", fallback: "Export & share logs")
|
||||
/// Send us feedback!
|
||||
public static let feedback = L10n.tr("Localizable", "settings.feedback", fallback: "Send us feedback!")
|
||||
/// Send us feedback
|
||||
public static let feedback = L10n.tr("Localizable", "settings.feedback", fallback: "Send us feedback")
|
||||
/// Privacy Policy
|
||||
public static let privacyPolicy = L10n.tr("Localizable", "settings.privacyPolicy", fallback: "Privacy Policy")
|
||||
/// Settings
|
||||
public static let title = L10n.tr("Localizable", "settings.title", fallback: "Settings")
|
||||
/// Version %@ (%@)
|
||||
|
@ -700,6 +711,8 @@ public enum L10n {
|
|||
}
|
||||
}
|
||||
public enum WelcomeScreen {
|
||||
/// A no frills wallet for sending and receiving Zcash (ZEC)
|
||||
public static let description = L10n.tr("Localizable", "welcomeScreen.description", fallback: "A no frills wallet for sending and receiving Zcash (ZEC)")
|
||||
/// Just Loading, one sec
|
||||
public static let subtitle = L10n.tr("Localizable", "welcomeScreen.subtitle", fallback: "Just Loading, one sec")
|
||||
/// Powered by Zcash
|
||||
|
|
12
modules/Sources/Generated/Resources/Assets.xcassets/IsolationModeLogoText.imageset/Contents.json
vendored
Normal file
12
modules/Sources/Generated/Resources/Assets.xcassets/IsolationModeLogoText.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "IsolationModeLogoText.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 2 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 -0.012146 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
41.333328 71.000000 m
|
||||
57.393932 68.941673 l
|
||||
57.393932 1.261955 l
|
||||
41.333328 0.000000 l
|
||||
41.333328 31.217945 l
|
||||
16.400000 31.659016 l
|
||||
16.400000 1.274200 l
|
||||
0.000000 0.012253 l
|
||||
0.000000 69.100952 l
|
||||
16.412121 71.000000 l
|
||||
16.412121 41.313545 l
|
||||
41.345448 41.521832 l
|
||||
41.345448 71.000000 l
|
||||
41.333328 71.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 65.599976 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
0.000000 69.137703 m
|
||||
16.400003 71.000000 l
|
||||
16.400003 0.000000 l
|
||||
0.000000 1.261955 l
|
||||
0.000000 69.137703 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
635
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 4 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
0.000000 71.000000 m
|
||||
82.000000 71.000000 l
|
||||
82.000000 0.000000 l
|
||||
0.000000 0.000000 l
|
||||
0.000000 71.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
232
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /XObject << /X1 1 0 R >>
|
||||
/ExtGState << /E1 << /SMask << /Type /Mask
|
||||
/G 3 0 R
|
||||
/S /Alpha
|
||||
>>
|
||||
/Type /ExtGState
|
||||
>> >>
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Length 7 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
/E1 gs
|
||||
/X1 Do
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
46
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
/Resources 5 0 R
|
||||
/Contents 6 0 R
|
||||
/Parent 9 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
<< /Kids [ 8 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
<< /Pages 9 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000893 00000 n
|
||||
0000000915 00000 n
|
||||
0000001395 00000 n
|
||||
0000001417 00000 n
|
||||
0000001715 00000 n
|
||||
0000001817 00000 n
|
||||
0000001838 00000 n
|
||||
0000002011 00000 n
|
||||
0000002085 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 10 0 R
|
||||
/Size 11
|
||||
>>
|
||||
startxref
|
||||
2145
|
||||
%%EOF
|
12
modules/Sources/Generated/Resources/Assets.xcassets/isolationModeLogo.imageset/Contents.json
vendored
Normal file
12
modules/Sources/Generated/Resources/Assets.xcassets/isolationModeLogo.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Isolation_Mode.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
154
modules/Sources/Generated/Resources/Assets.xcassets/isolationModeLogo.imageset/Isolation_Mode.pdf
vendored
Normal file
154
modules/Sources/Generated/Resources/Assets.xcassets/isolationModeLogo.imageset/Isolation_Mode.pdf
vendored
Normal file
|
@ -0,0 +1,154 @@
|
|||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.494629 -2.825684 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
53.405182 5.249893 m
|
||||
52.996174 4.337357 l
|
||||
55.540451 3.196976 l
|
||||
54.300926 5.694458 l
|
||||
53.405182 5.249893 l
|
||||
h
|
||||
19.743061 20.337715 m
|
||||
19.280258 21.224174 l
|
||||
17.451040 20.269180 l
|
||||
19.334053 19.425186 l
|
||||
19.743061 20.337715 l
|
||||
h
|
||||
77.104774 50.285122 m
|
||||
77.567574 49.398663 l
|
||||
78.287605 49.774574 l
|
||||
78.067284 50.556377 l
|
||||
77.104774 50.285122 l
|
||||
h
|
||||
72.475632 66.710945 m
|
||||
73.438141 66.982201 l
|
||||
73.323631 67.388527 l
|
||||
72.952583 67.589874 l
|
||||
72.475632 66.710945 l
|
||||
h
|
||||
0.000000 106.040039 m
|
||||
0.476953 106.918968 l
|
||||
-3.794553 109.236908 l
|
||||
-0.785220 105.420822 l
|
||||
0.000000 106.040039 l
|
||||
h
|
||||
47.921436 45.271591 m
|
||||
47.136215 44.652374 l
|
||||
47.787216 43.826851 l
|
||||
48.579147 44.518322 l
|
||||
47.921436 45.271591 l
|
||||
h
|
||||
72.475632 66.710945 m
|
||||
73.136009 65.960007 l
|
||||
71.817924 67.464218 l
|
||||
72.475632 66.710945 l
|
||||
h
|
||||
39.603252 30.809586 m
|
||||
52.509438 4.805321 l
|
||||
54.300926 5.694458 l
|
||||
41.394741 31.698723 l
|
||||
39.603252 30.809586 l
|
||||
h
|
||||
53.814190 6.162422 m
|
||||
20.152071 21.250244 l
|
||||
19.334053 19.425186 l
|
||||
52.996174 4.337357 l
|
||||
53.814190 6.162422 l
|
||||
h
|
||||
20.205866 19.451256 m
|
||||
77.567574 49.398663 l
|
||||
76.641968 51.171581 l
|
||||
19.280258 21.224174 l
|
||||
20.205866 19.451256 l
|
||||
h
|
||||
78.067284 50.556377 m
|
||||
73.438141 66.982201 l
|
||||
71.513123 66.439697 l
|
||||
76.142265 50.013866 l
|
||||
78.067284 50.556377 l
|
||||
h
|
||||
72.952583 67.589874 m
|
||||
0.476953 106.918968 l
|
||||
-0.476953 105.161110 l
|
||||
71.998680 65.832016 l
|
||||
72.952583 67.589874 l
|
||||
h
|
||||
-0.785220 105.420822 m
|
||||
47.136215 44.652374 l
|
||||
48.706657 45.890808 l
|
||||
0.785220 106.659256 l
|
||||
-0.785220 105.420822 l
|
||||
h
|
||||
48.579147 44.518322 m
|
||||
73.133347 65.957672 l
|
||||
71.817924 67.464218 l
|
||||
47.263725 46.024860 l
|
||||
48.579147 44.518322 l
|
||||
h
|
||||
71.815254 67.461884 m
|
||||
19.082685 21.088654 l
|
||||
20.403437 19.586784 l
|
||||
73.136009 65.960007 l
|
||||
71.815254 67.461884 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1779
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 83.000000 107.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001869 00000 n
|
||||
0000001892 00000 n
|
||||
0000002066 00000 n
|
||||
0000002140 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2199
|
||||
%%EOF
|
12
modules/Sources/Generated/Resources/Assets.xcassets/splashBG.imageset/Contents.json
vendored
Normal file
12
modules/Sources/Generated/Resources/Assets.xcassets/splashBG.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "splashBG.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/splashBG.imageset/splashBG.png
vendored
Normal file
BIN
modules/Sources/Generated/Resources/Assets.xcassets/splashBG.imageset/splashBG.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 65 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo.imageset/Contents.json
vendored
Normal file
12
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "zashi_logo.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo.imageset/zashi_logo.png
vendored
Normal file
BIN
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo.imageset/zashi_logo.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 69 KiB |
12
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo_text.imageset/Contents.json
vendored
Normal file
12
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo_text.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "zashi_logo_text.png",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
BIN
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo_text.imageset/zashi_logo_text.png
vendored
Normal file
BIN
modules/Sources/Generated/Resources/Assets.xcassets/zashi_logo_text.imageset/zashi_logo_text.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 106 KiB |
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"colors" : [
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x20",
|
||||
"green" : "0x1F",
|
||||
"red" : "0x23"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x20",
|
||||
"green" : "0x1F",
|
||||
"red" : "0x23"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
|
@ -5,9 +5,9 @@
|
|||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0.341",
|
||||
"green" : "0.200",
|
||||
"red" : "0.149"
|
||||
"blue" : "0x00",
|
||||
"green" : "0x00",
|
||||
"red" : "0x00"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
|
|
|
@ -5,9 +5,9 @@
|
|||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x57",
|
||||
"green" : "0x33",
|
||||
"red" : "0x26"
|
||||
"blue" : "0.341",
|
||||
"green" : "0.200",
|
||||
"red" : "0.149"
|
||||
}
|
||||
},
|
||||
"idiom" : "universal"
|
||||
|
|
|
@ -5,11 +5,12 @@
|
|||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0xFC",
|
||||
"green" : "0xF7",
|
||||
"red" : "0xF2"
|
||||
"blue" : "1.000",
|
||||
"green" : "1.000",
|
||||
"red" : "1.000"
|
||||
}
|
||||
},
|
||||
"display-gamut" : "sRGB",
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
|
@ -23,16 +24,52 @@
|
|||
"color-space" : "srgb",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x52",
|
||||
"green" : "0x31",
|
||||
"red" : "0x26"
|
||||
"blue" : "0.322",
|
||||
"green" : "0.192",
|
||||
"red" : "0.149"
|
||||
}
|
||||
},
|
||||
"display-gamut" : "sRGB",
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"color" : {
|
||||
"color-space" : "display-p3",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "1.000",
|
||||
"green" : "1.000",
|
||||
"red" : "1.000"
|
||||
}
|
||||
},
|
||||
"display-gamut" : "display-P3",
|
||||
"idiom" : "universal"
|
||||
},
|
||||
{
|
||||
"appearances" : [
|
||||
{
|
||||
"appearance" : "luminosity",
|
||||
"value" : "dark"
|
||||
}
|
||||
],
|
||||
"color" : {
|
||||
"color-space" : "display-p3",
|
||||
"components" : {
|
||||
"alpha" : "1.000",
|
||||
"blue" : "0x4F",
|
||||
"green" : "0x30",
|
||||
"red" : "0x28"
|
||||
}
|
||||
},
|
||||
"display-gamut" : "display-P3",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"localizable" : true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -34,5 +34,8 @@
|
|||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
},
|
||||
"properties" : {
|
||||
"localizable" : true
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
// MARK: - Welcome Screen
|
||||
"welcomeScreen.title" = "Powered by Zcash";
|
||||
"welcomeScreen.subtitle" = "Just Loading, one sec";
|
||||
"welcomeScreen.description" = "A no frills wallet for sending and receiving Zcash (ZEC)";
|
||||
|
||||
// MARK: - Plain Onboarding Flow
|
||||
"plainOnboarding.title" = "It's time to setup your Secant, powered by Zcash, no-frills wallet.";
|
||||
|
@ -26,10 +27,11 @@
|
|||
|
||||
// MARK: - Secret Recovery Phrase Display
|
||||
"recoveryPhraseDisplay.title" = "Your Secret Recovery Phrase";
|
||||
"recoveryPhraseDisplay.description" = "The following 24 words represent your funds and the security used to protect them. Back them up now!";
|
||||
"recoveryPhraseDisplay.button.wroteItDown" = "I wrote it down!";
|
||||
"recoveryPhraseDisplay.description" = "The following 24 words are the keys to your funds and are the only way to recover your funds if you get locked out or get a new device. Protect your ZEC by storing this phrase in a place you trust and never share it with anyone!";
|
||||
"recoveryPhraseDisplay.button.wroteItDown" = "I GOT IT!";
|
||||
"recoveryPhraseDisplay.button.copyToBuffer" = "Copy To Buffer";
|
||||
"recoveryPhraseDisplay.noWords" = "Oops no words";
|
||||
"recoveryPhraseDisplay.subtext" = "Wallet birthday height: 1598622";
|
||||
|
||||
// MARK: - Recovery Phrase Backup Validation & Success/Failed
|
||||
"recoveryPhraseBackupValidation.title" = "Verify Your Backup";
|
||||
|
@ -129,8 +131,10 @@
|
|||
"settings.backupWallet" = "Backup Wallet";
|
||||
"settings.exporting" = "Exporting...";
|
||||
"settings.exportLogs" = "Export & share logs";
|
||||
"settings.feedback" = "Send us feedback!";
|
||||
"settings.feedback" = "Send us feedback";
|
||||
"settings.about" = "About";
|
||||
"settings.privacyPolicy" = "Privacy Policy";
|
||||
"settings.documentation" = "Documentation";
|
||||
"settings.version" = "Version %@ (%@)";
|
||||
"settings.title" = "Settings";
|
||||
"settings.alert.cantBackupWallet.title" = "Can't backup wallet";
|
||||
|
@ -138,6 +142,9 @@
|
|||
"settings.alert.cantSendEmail.title" = "Can't send email";
|
||||
"settings.alert.cantSendEmail.message" = "It looks like that you don't have any email account configured on your device. Therefore it's not possible to send a support email.";
|
||||
|
||||
// MARK: - About
|
||||
"about.description" = "Send and receive ZEC on Zashi! \nZashi is a minimal-design, self-custody, ZEC-only shielded wallet that keeps your transaction history and wallet balance private. Built by Zcashers, for Zcashers. Developed and maintained by Electric Coin Co., the inventor of Zcash, Zashi features a built-in user-feedback mechanism to enable more features, more quickly.";
|
||||
|
||||
// MARK: - Sync message
|
||||
"sync.message.uptodate" = "Up-To-Date";
|
||||
"sync.message.unprepared" = "Unprepared";
|
||||
|
|
|
@ -34,12 +34,18 @@ public enum Asset {
|
|||
public static let calloutBackupSucceeded = ImageAsset(name: "calloutBackupSucceeded")
|
||||
}
|
||||
public static let welcomeScreenLogo = ImageAsset(name: "WelcomeScreenLogo")
|
||||
public static let isolationModeLogo = ImageAsset(name: "isolationModeLogo")
|
||||
public static let isolationModeLogoText = ImageAsset(name: "isolationModeLogoText")
|
||||
public static let splashBG = ImageAsset(name: "splashBG")
|
||||
public static let zashiLogo = ImageAsset(name: "zashi_logo")
|
||||
public static let zashiLogoText = ImageAsset(name: "zashi_logo_text")
|
||||
}
|
||||
public enum Colors {
|
||||
public enum BackgroundColors {
|
||||
public static let numberedChip = ColorAsset(name: "numberedChip")
|
||||
public static let phraseGridDarkGray = ColorAsset(name: "phraseGridDarkGray")
|
||||
public static let red = ColorAsset(name: "red")
|
||||
public static let splashBGColor = ColorAsset(name: "splashBGColor")
|
||||
public static let staticWelcomeScreen = ColorAsset(name: "staticWelcomeScreen")
|
||||
}
|
||||
public enum Buttons {
|
||||
|
|
|
@ -15,7 +15,32 @@ extension Button {
|
|||
foregroundColor: Asset.Colors.Text.activeButtonText.color,
|
||||
background: Asset.Colors.Buttons.activeButton.color,
|
||||
pressedBackgroundColor: Asset.Colors.Buttons.activeButtonPressed.color,
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color,
|
||||
overlayColor: Asset.Colors.Text.activeButtonText.color
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
public var activeWhiteButtonStyle: some View {
|
||||
buttonStyle(
|
||||
StandardButtonStyle(
|
||||
foregroundColor: Asset.Colors.Buttons.activeButton.color,
|
||||
background: Asset.Colors.Text.activeButtonText.color,
|
||||
pressedBackgroundColor: Asset.Colors.Buttons.activeButtonPressed.color,
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color,
|
||||
overlayColor: Asset.Colors.Buttons.activeButton.color
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
public var disableButtonStyle: some View {
|
||||
buttonStyle(
|
||||
StandardButtonStyle(
|
||||
foregroundColor: Asset.Colors.Text.activeButtonText.color,
|
||||
background: Asset.Colors.Text.transactionRowSubtitle.color,
|
||||
pressedBackgroundColor: Asset.Colors.Buttons.activeButtonPressed.color,
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color,
|
||||
overlayColor: Asset.Colors.Text.activeButtonText.color
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -15,30 +15,47 @@ public struct StandardButtonStyle: ButtonStyle {
|
|||
let background: Color
|
||||
let pressedBackgroundColor: Color
|
||||
let disabledBackgroundColor: Color
|
||||
|
||||
let overlayColor: Color
|
||||
|
||||
public init(
|
||||
foregroundColor: Color,
|
||||
background: Color,
|
||||
pressedBackgroundColor: Color,
|
||||
disabledBackgroundColor: Color
|
||||
disabledBackgroundColor: Color,
|
||||
overlayColor: Color
|
||||
) {
|
||||
self.foregroundColor = foregroundColor
|
||||
self.background = background
|
||||
self.pressedBackgroundColor = pressedBackgroundColor
|
||||
self.disabledBackgroundColor = disabledBackgroundColor
|
||||
self.overlayColor = overlayColor
|
||||
}
|
||||
|
||||
public func makeBody(configuration: Configuration) -> some View {
|
||||
configuration.label
|
||||
.frame(
|
||||
minWidth: 0,
|
||||
maxWidth: .infinity,
|
||||
minHeight: 0,
|
||||
maxHeight: .infinity
|
||||
)
|
||||
.frame(height: 60)
|
||||
.foregroundColor(Asset.Colors.Mfp.fontLight.color)
|
||||
.background(Asset.Colors.Mfp.primary.color)
|
||||
ZStack {
|
||||
Rectangle()
|
||||
.frame(height: 60)
|
||||
.overlay(
|
||||
Rectangle()
|
||||
.border(Color.black)
|
||||
.foregroundColor(overlayColor)
|
||||
.offset(y: 8)
|
||||
.padding(.trailing, -10)
|
||||
.padding(.leading, 13)
|
||||
)
|
||||
configuration.label
|
||||
.frame(
|
||||
minWidth: 0,
|
||||
maxWidth: .infinity,
|
||||
minHeight: 0,
|
||||
maxHeight: .infinity
|
||||
)
|
||||
.frame(height: 60)
|
||||
.foregroundColor(foregroundColor)
|
||||
.background(background)
|
||||
.border(Color.black)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,7 +66,8 @@ private extension Button {
|
|||
foregroundColor: Asset.Colors.Text.button.color,
|
||||
background: Asset.Colors.Buttons.activeButton.color,
|
||||
pressedBackgroundColor: Asset.Colors.Buttons.activeButtonPressed.color,
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color
|
||||
disabledBackgroundColor: Asset.Colors.Buttons.activeButtonDisabled.color,
|
||||
overlayColor: Asset.Colors.Text.button.color
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
//
|
||||
// File.swift
|
||||
//
|
||||
//
|
||||
// Created by Praveen kumar Vattipalli on 02/09/23.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import Generated
|
||||
|
||||
struct CustomNavigationButton: ViewModifier {
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.navigationBarBackButtonHidden(true)
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
Button {
|
||||
dismiss()
|
||||
} label: {
|
||||
HStack {
|
||||
Image(systemName: "arrow.left")
|
||||
.foregroundColor(.black)
|
||||
Text(L10n.General.back.uppercased())
|
||||
.foregroundColor(.black)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -31,3 +31,11 @@ extension View {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
extension View {
|
||||
public func replaceNavigationBackButton () -> some View {
|
||||
self.modifier(
|
||||
CustomNavigationButton()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
0D3B01EC298DAF89007EBCDA /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 0D3B01EB298DAF89007EBCDA /* GoogleService-Info.plist */; };
|
||||
0D4E7A0926B364170058B01E /* SecantApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D4E7A0826B364170058B01E /* SecantApp.swift */; };
|
||||
0D4E7A1026B364180058B01E /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0D4E7A0F26B364180058B01E /* Preview Assets.xcassets */; };
|
||||
201F7C5A2AAB523100D12019 /* SecuirtyWarningSnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 201F7C592AAB523100D12019 /* SecuirtyWarningSnapshotTests.swift */; };
|
||||
34DA414928E439CD00F8CC61 /* sendingTransaction.json in Resources */ = {isa = PBXBuildFile; fileRef = 34DA414828E439CD00F8CC61 /* sendingTransaction.json */; };
|
||||
9E00319C2A272BB6003DFCEB /* SDKSynchronizer in Frameworks */ = {isa = PBXBuildFile; productRef = 9E00319B2A272BB6003DFCEB /* SDKSynchronizer */; };
|
||||
9E0031A42A272BC7003DFCEB /* SDKSynchronizer in Frameworks */ = {isa = PBXBuildFile; productRef = 9E0031A32A272BC7003DFCEB /* SDKSynchronizer */; };
|
||||
|
@ -118,6 +119,7 @@
|
|||
0DEF4766299EA5920032708B /* secant-mainnet-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "secant-mainnet-Info.plist"; sourceTree = "<group>"; };
|
||||
0DFE93DE272C6D4B000FCCA5 /* RecoveryPhraseBackupTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RecoveryPhraseBackupTests.swift; sourceTree = "<group>"; };
|
||||
0DFE93E5272CB6F7000FCCA5 /* RecoveryPhraseValidationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecoveryPhraseValidationTests.swift; sourceTree = "<group>"; };
|
||||
201F7C592AAB523100D12019 /* SecuirtyWarningSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecuirtyWarningSnapshotTests.swift; sourceTree = "<group>"; };
|
||||
341B30BA29B78D1000697081 /* HomeFeatureFlagTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeFeatureFlagTests.swift; sourceTree = "<group>"; };
|
||||
34429C6D28E703CD00F2B929 /* TransactionSendingSnapshotTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionSendingSnapshotTests.swift; sourceTree = "<group>"; };
|
||||
3448CB3628E485CB006ADEDB /* NotEnoughFeeSpaceSnapshots.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotEnoughFeeSpaceSnapshots.swift; sourceTree = "<group>"; };
|
||||
|
@ -311,6 +313,14 @@
|
|||
path = RecoveryPhraseValidationTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
201F7C582AAB520500D12019 /* SecurityWarningSnapshotTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
201F7C592AAB523100D12019 /* SecuirtyWarningSnapshotTests.swift */,
|
||||
);
|
||||
path = SecurityWarningSnapshotTests;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
343CF3F429BB5A14009E44DF /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -387,6 +397,7 @@
|
|||
9E391162284E3ECF0073DD9A /* SnapshotTests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
201F7C582AAB520500D12019 /* SecurityWarningSnapshotTests */,
|
||||
9E207C342966EC60003E2C9B /* AddressDetailsSnapshotTests */,
|
||||
9E94C62128AA7ECD008256E9 /* BalanceBreakdownSnapshotTests */,
|
||||
9E9ECC8B28589E150099D5A2 /* HomeSnapshotTests */,
|
||||
|
@ -934,6 +945,7 @@
|
|||
9E3451AD29C84F0E00177D16 /* TransactionAmountInputTests.swift in Sources */,
|
||||
9E3451C329C857DD00177D16 /* SettingsSnapshotTests.swift in Sources */,
|
||||
9E34519D29C8484D00177D16 /* HomeFeatureFlagTests.swift in Sources */,
|
||||
201F7C5A2AAB523100D12019 /* SecuirtyWarningSnapshotTests.swift in Sources */,
|
||||
9E3451A229C84A5300177D16 /* OnboardingFlowFeatureFlagTests.swift in Sources */,
|
||||
9E3451AC29C84F0000177D16 /* TransactionAddressInputTests.swift in Sources */,
|
||||
9E3451A429C84B3E00177D16 /* RecoveryPhraseValidationTests.swift in Sources */,
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21679"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21678"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
|
@ -17,20 +16,29 @@
|
|||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<imageView opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" insetsLayoutMarginsFromSafeArea="NO" image="WelcomeScreenLogo" translatesAutoresizingMaskIntoConstraints="NO" id="PMT-qL-kFu">
|
||||
<rect key="frame" x="132" y="148" width="150" height="150"/>
|
||||
<imageView opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" insetsLayoutMarginsFromSafeArea="NO" image="isolationModeLogo" translatesAutoresizingMaskIntoConstraints="NO" id="PMT-qL-kFu">
|
||||
<rect key="frame" x="165.5" y="157" width="83" height="107"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="150" id="MNN-qz-URJ"/>
|
||||
<constraint firstAttribute="height" constant="150" id="saZ-Pi-QsA"/>
|
||||
<constraint firstAttribute="height" constant="107" id="JJN-ha-gaV"/>
|
||||
<constraint firstAttribute="width" constant="83" id="hxG-Xl-cqi"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="isolationModeLogoText" translatesAutoresizingMaskIntoConstraints="NO" id="Jv8-PA-oy4">
|
||||
<rect key="frame" x="165.5" y="308" width="83" height="107"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="83" id="iSS-vG-qu8"/>
|
||||
<constraint firstAttribute="height" constant="107" id="lGO-At-TsX"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
|
||||
<color key="backgroundColor" name="launchScreenBcg"/>
|
||||
<color key="backgroundColor" red="0.13725490196078433" green="0.12156862745098039" blue="0.12549019607843137" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<constraints>
|
||||
<constraint firstItem="PMT-qL-kFu" firstAttribute="top" secondItem="Bcu-3y-fUS" secondAttribute="top" constant="100" id="VUR-7f-Qj5"/>
|
||||
<constraint firstItem="PMT-qL-kFu" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="bVu-ST-xoh"/>
|
||||
<constraint firstItem="Jv8-PA-oy4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="Giu-tA-9cn"/>
|
||||
<constraint firstItem="PMT-qL-kFu" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="T9s-Kb-LGF"/>
|
||||
<constraint firstItem="Jv8-PA-oy4" firstAttribute="top" secondItem="PMT-qL-kFu" secondAttribute="bottom" constant="44" id="cK1-iz-1N3"/>
|
||||
<constraint firstItem="PMT-qL-kFu" firstAttribute="top" secondItem="Bcu-3y-fUS" secondAttribute="top" constant="109" id="kRE-a5-xK4"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</viewController>
|
||||
|
@ -40,9 +48,7 @@
|
|||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="WelcomeScreenLogo" width="855" height="810"/>
|
||||
<namedColor name="launchScreenBcg">
|
||||
<color red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</namedColor>
|
||||
<image name="isolationModeLogo" width="83" height="107"/>
|
||||
<image name="isolationModeLogoText" width="82" height="71"/>
|
||||
</resources>
|
||||
</document>
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "Isolation_Mode.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
154
secant/Resources/Assets.xcassets/isolationModeLogo.imageset/Isolation_Mode.pdf
vendored
Normal file
154
secant/Resources/Assets.xcassets/isolationModeLogo.imageset/Isolation_Mode.pdf
vendored
Normal file
|
@ -0,0 +1,154 @@
|
|||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< >>
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
<< /Length 3 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 4.494629 -2.825684 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
53.405182 5.249893 m
|
||||
52.996174 4.337357 l
|
||||
55.540451 3.196976 l
|
||||
54.300926 5.694458 l
|
||||
53.405182 5.249893 l
|
||||
h
|
||||
19.743061 20.337715 m
|
||||
19.280258 21.224174 l
|
||||
17.451040 20.269180 l
|
||||
19.334053 19.425186 l
|
||||
19.743061 20.337715 l
|
||||
h
|
||||
77.104774 50.285122 m
|
||||
77.567574 49.398663 l
|
||||
78.287605 49.774574 l
|
||||
78.067284 50.556377 l
|
||||
77.104774 50.285122 l
|
||||
h
|
||||
72.475632 66.710945 m
|
||||
73.438141 66.982201 l
|
||||
73.323631 67.388527 l
|
||||
72.952583 67.589874 l
|
||||
72.475632 66.710945 l
|
||||
h
|
||||
0.000000 106.040039 m
|
||||
0.476953 106.918968 l
|
||||
-3.794553 109.236908 l
|
||||
-0.785220 105.420822 l
|
||||
0.000000 106.040039 l
|
||||
h
|
||||
47.921436 45.271591 m
|
||||
47.136215 44.652374 l
|
||||
47.787216 43.826851 l
|
||||
48.579147 44.518322 l
|
||||
47.921436 45.271591 l
|
||||
h
|
||||
72.475632 66.710945 m
|
||||
73.136009 65.960007 l
|
||||
71.817924 67.464218 l
|
||||
72.475632 66.710945 l
|
||||
h
|
||||
39.603252 30.809586 m
|
||||
52.509438 4.805321 l
|
||||
54.300926 5.694458 l
|
||||
41.394741 31.698723 l
|
||||
39.603252 30.809586 l
|
||||
h
|
||||
53.814190 6.162422 m
|
||||
20.152071 21.250244 l
|
||||
19.334053 19.425186 l
|
||||
52.996174 4.337357 l
|
||||
53.814190 6.162422 l
|
||||
h
|
||||
20.205866 19.451256 m
|
||||
77.567574 49.398663 l
|
||||
76.641968 51.171581 l
|
||||
19.280258 21.224174 l
|
||||
20.205866 19.451256 l
|
||||
h
|
||||
78.067284 50.556377 m
|
||||
73.438141 66.982201 l
|
||||
71.513123 66.439697 l
|
||||
76.142265 50.013866 l
|
||||
78.067284 50.556377 l
|
||||
h
|
||||
72.952583 67.589874 m
|
||||
0.476953 106.918968 l
|
||||
-0.476953 105.161110 l
|
||||
71.998680 65.832016 l
|
||||
72.952583 67.589874 l
|
||||
h
|
||||
-0.785220 105.420822 m
|
||||
47.136215 44.652374 l
|
||||
48.706657 45.890808 l
|
||||
0.785220 106.659256 l
|
||||
-0.785220 105.420822 l
|
||||
h
|
||||
48.579147 44.518322 m
|
||||
73.133347 65.957672 l
|
||||
71.817924 67.464218 l
|
||||
47.263725 46.024860 l
|
||||
48.579147 44.518322 l
|
||||
h
|
||||
71.815254 67.461884 m
|
||||
19.082685 21.088654 l
|
||||
20.403437 19.586784 l
|
||||
73.136009 65.960007 l
|
||||
71.815254 67.461884 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
1779
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 83.000000 107.000000 ]
|
||||
/Resources 1 0 R
|
||||
/Contents 2 0 R
|
||||
/Parent 5 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /Kids [ 4 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Pages 5 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 7
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000034 00000 n
|
||||
0000001869 00000 n
|
||||
0000001892 00000 n
|
||||
0000002066 00000 n
|
||||
0000002140 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 6 0 R
|
||||
/Size 7
|
||||
>>
|
||||
startxref
|
||||
2199
|
||||
%%EOF
|
12
secant/Resources/Assets.xcassets/isolationModeLogoText.imageset/Contents.json
vendored
Normal file
12
secant/Resources/Assets.xcassets/isolationModeLogoText.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"images" : [
|
||||
{
|
||||
"filename" : "IsolationModeLogoText.pdf",
|
||||
"idiom" : "universal"
|
||||
}
|
||||
],
|
||||
"info" : {
|
||||
"author" : "xcode",
|
||||
"version" : 1
|
||||
}
|
||||
}
|
161
secant/Resources/Assets.xcassets/isolationModeLogoText.imageset/IsolationModeLogoText.pdf
vendored
Normal file
161
secant/Resources/Assets.xcassets/isolationModeLogoText.imageset/IsolationModeLogoText.pdf
vendored
Normal file
|
@ -0,0 +1,161 @@
|
|||
%PDF-1.7
|
||||
|
||||
1 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 2 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 -0.012146 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
41.333328 71.000000 m
|
||||
57.393932 68.941673 l
|
||||
57.393932 1.261955 l
|
||||
41.333328 0.000000 l
|
||||
41.333328 31.217945 l
|
||||
16.400000 31.659016 l
|
||||
16.400000 1.274200 l
|
||||
0.000000 0.012253 l
|
||||
0.000000 69.100952 l
|
||||
16.412121 71.000000 l
|
||||
16.412121 41.313545 l
|
||||
41.345448 41.521832 l
|
||||
41.345448 71.000000 l
|
||||
41.333328 71.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 65.599976 0.000000 cm
|
||||
1.000000 1.000000 1.000000 scn
|
||||
0.000000 69.137703 m
|
||||
16.400003 71.000000 l
|
||||
16.400003 0.000000 l
|
||||
0.000000 1.261955 l
|
||||
0.000000 69.137703 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
2 0 obj
|
||||
635
|
||||
endobj
|
||||
|
||||
3 0 obj
|
||||
<< /Type /XObject
|
||||
/Length 4 0 R
|
||||
/Group << /Type /Group
|
||||
/S /Transparency
|
||||
>>
|
||||
/Subtype /Form
|
||||
/Resources << >>
|
||||
/BBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
>>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
|
||||
0.000000 0.000000 0.000000 scn
|
||||
0.000000 71.000000 m
|
||||
82.000000 71.000000 l
|
||||
82.000000 0.000000 l
|
||||
0.000000 0.000000 l
|
||||
0.000000 71.000000 l
|
||||
h
|
||||
f
|
||||
n
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
4 0 obj
|
||||
232
|
||||
endobj
|
||||
|
||||
5 0 obj
|
||||
<< /XObject << /X1 1 0 R >>
|
||||
/ExtGState << /E1 << /SMask << /Type /Mask
|
||||
/G 3 0 R
|
||||
/S /Alpha
|
||||
>>
|
||||
/Type /ExtGState
|
||||
>> >>
|
||||
>>
|
||||
endobj
|
||||
|
||||
6 0 obj
|
||||
<< /Length 7 0 R >>
|
||||
stream
|
||||
/DeviceRGB CS
|
||||
/DeviceRGB cs
|
||||
q
|
||||
/E1 gs
|
||||
/X1 Do
|
||||
Q
|
||||
|
||||
endstream
|
||||
endobj
|
||||
|
||||
7 0 obj
|
||||
46
|
||||
endobj
|
||||
|
||||
8 0 obj
|
||||
<< /Annots []
|
||||
/Type /Page
|
||||
/MediaBox [ 0.000000 0.000000 82.000000 71.000000 ]
|
||||
/Resources 5 0 R
|
||||
/Contents 6 0 R
|
||||
/Parent 9 0 R
|
||||
>>
|
||||
endobj
|
||||
|
||||
9 0 obj
|
||||
<< /Kids [ 8 0 R ]
|
||||
/Count 1
|
||||
/Type /Pages
|
||||
>>
|
||||
endobj
|
||||
|
||||
10 0 obj
|
||||
<< /Pages 9 0 R
|
||||
/Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
|
||||
xref
|
||||
0 11
|
||||
0000000000 65535 f
|
||||
0000000010 00000 n
|
||||
0000000893 00000 n
|
||||
0000000915 00000 n
|
||||
0000001395 00000 n
|
||||
0000001417 00000 n
|
||||
0000001715 00000 n
|
||||
0000001817 00000 n
|
||||
0000001838 00000 n
|
||||
0000002011 00000 n
|
||||
0000002085 00000 n
|
||||
trailer
|
||||
<< /ID [ (some) (id) ]
|
||||
/Root 10 0 R
|
||||
/Size 11
|
||||
>>
|
||||
startxref
|
||||
2145
|
||||
%%EOF
|
Loading…
Reference in New Issue