From 40e5580cf48c5a8c69ce8d16dd519d0ab2f3243a Mon Sep 17 00:00:00 2001 From: Alexandre Van de Sande Date: Fri, 3 Apr 2015 18:04:50 -0300 Subject: [PATCH] finished all main presale steps --- cmd/mist/assets/qml/Wizard.qml | 1956 +++++++++++++++++++- cmd/mist/assets/wizard/icon-correct.png | Bin 0 -> 1657 bytes cmd/mist/assets/wizard/icon-correct@2x.png | Bin 0 -> 3103 bytes cmd/mist/assets/wizard/icon-wrong.png | Bin 0 -> 1624 bytes cmd/mist/assets/wizard/icon-wrong@2x.png | Bin 0 -> 3234 bytes cmd/mist/assets/wizard/print icon.png | Bin 0 -> 572 bytes cmd/mist/assets/wizard/print icon@2x.png | Bin 0 -> 1195 bytes 7 files changed, 1914 insertions(+), 42 deletions(-) create mode 100644 cmd/mist/assets/wizard/icon-correct.png create mode 100644 cmd/mist/assets/wizard/icon-correct@2x.png create mode 100644 cmd/mist/assets/wizard/icon-wrong.png create mode 100644 cmd/mist/assets/wizard/icon-wrong@2x.png create mode 100644 cmd/mist/assets/wizard/print icon.png create mode 100644 cmd/mist/assets/wizard/print icon@2x.png diff --git a/cmd/mist/assets/qml/Wizard.qml b/cmd/mist/assets/qml/Wizard.qml index 3846f89f6c..e422548f75 100644 --- a/cmd/mist/assets/qml/Wizard.qml +++ b/cmd/mist/assets/qml/Wizard.qml @@ -1,6 +1,10 @@ // Button.qml import QtQuick 2.0 import QtGraphicalEffects 1.0 +import QtQuick.Controls 1.3 +import QtQuick.Controls.Styles 1.3 +import QtQuick.Layouts 1.1 +import QtQuick.Dialogs 1.1 Rectangle { @@ -21,10 +25,10 @@ Rectangle { anchors.left: parent.left anchors.top: parent.top anchors.right: parent.right - height: 280 + height: 600 gradient: Gradient { - GradientStop { position: 0.0; color: "#E7E0F4" } + GradientStop { position: 0.0; color: "#F4F0FC" } GradientStop { position: 1.0; color: "#FFFFFF" } } } @@ -48,7 +52,8 @@ Rectangle { width: 144 height: 56 x: 135 - y: 120 + y: 610 + opacity: 0.2 } Rectangle { @@ -70,15 +75,16 @@ Rectangle { width: 344 height: 376 x: 25 - y: 190 + y: 510 visible: false + opacity: 0 } FastBlur { id: icebergBlur anchors.fill: iceberg source: iceberg - radius: 32 + radius: 1 transparentBorder: true } @@ -88,7 +94,7 @@ Rectangle { width: 344 height: 376 x: 25 - y: 190 + y: 510 visible: false } @@ -97,9 +103,10 @@ Rectangle { width: 344 height: 376 x: 25 - y: 190 + y: 510 source: icebergFront - radius: 32 + radius: 0 + opacity: 1.0 transparentBorder: true visible: true } @@ -116,6 +123,12 @@ Rectangle { } } + + /********************/ + /* STATES */ + /********************/ + + states: [ State { name: "State-Initial" @@ -151,24 +164,21 @@ Rectangle { opacity: 0.0 x: 600 } + PropertyChanges { + target: skyGradient + height: 280 + } }, State { name: "State-0" PropertyChanges { target: iceberg - opacity: 0.0 - width: 344 - height: 376 x: 25 y: 190 } PropertyChanges { target: icebergFrontBlur - opacity: 1.0 - radius: 0 - width: 344 - height: 376 x: 25 y: 190 } @@ -187,30 +197,20 @@ Rectangle { opacity: 1.0 x: 500 } + PropertyChanges { + target: skyGradient + height: 280 + } }, State { name: "State-Presale-01" PropertyChanges { target: iceberg - opacity: 0.0 - width: 344 - height: 376 - x: 25 - y: 510 + x: 19 } PropertyChanges { target: icebergFrontBlur - opacity: 1.0 - radius: 0 - width: 344 - height: 376 - x: 25 - y: 510 - } - PropertyChanges { - target: icebergBlur - opacity: 1.0 - radius: 0 + x: 17 } PropertyChanges { target: mistTitle @@ -220,15 +220,143 @@ Rectangle { PropertyChanges { target: step0 opacity: 0.0 - x: 500 + x: 1000 } + PropertyChanges { + target: stepPresale1 + visible: true + opacity: 1 + } + }, + State { + name: "State-Invitation-01" PropertyChanges { - target: skyGradient - height: 600 + target: iceberg + x: 19 + } + PropertyChanges { + target: icebergFrontBlur + x: 17 + } + PropertyChanges { + target: mistTitle + y: 610 + opacity: 0.2 + } + PropertyChanges { + target: step0 + opacity: 0.0 + x: 1000 + } + PropertyChanges { + target: stepInvitation1 + visible: true + opacity: 1 + } + }, + State { + name: "State-Presale-02" + PropertyChanges { + target: iceberg + opacity: 0.0 + x: 13 + } + PropertyChanges { + target: icebergFrontBlur + x: 9 } PropertyChanges { target: stepPresale1 visible: true + opacity: 0 + } + PropertyChanges { + target: stepPresale2 + visible: true + opacity: 1 + } + }, + State { + name: "State-Presale-03" + PropertyChanges { + target: iceberg + x: 7 + } + PropertyChanges { + target: icebergFrontBlur + x: 1 + } + PropertyChanges { + target: stepPresale2 + visible: true + opacity: 0 + } + PropertyChanges { + target: stepPresale3 + visible: true + opacity: 1 + } + }, + State { + name: "State-Presale-04" + PropertyChanges { + target: iceberg + x: 1 + } + PropertyChanges { + target: icebergFrontBlur + x: -7 + } + PropertyChanges { + target: stepPresale3 + visible: true + opacity: 0 + } + PropertyChanges { + target: stepPresale4 + visible: true + opacity: 1 + } + }, + State { + name: "State-Presale-05" + PropertyChanges { + target: iceberg + x: -5 + } + PropertyChanges { + target: icebergFrontBlur + x: -15 + } + PropertyChanges { + target: stepPresale4 + visible: true + opacity: 0 + } + PropertyChanges { + target: stepPresale5 + visible: true + opacity: 1 + } + }, + State { + name: "State-Presale-06" + PropertyChanges { + target: iceberg + x: -11 + } + PropertyChanges { + target: icebergFrontBlur + x: -23 + } + PropertyChanges { + target: stepPresale5 + visible: true + opacity: 0 + } + PropertyChanges { + target: stepPresale6 + visible: true opacity: 1 } } @@ -278,7 +406,7 @@ Rectangle { } }, Transition { - // from: "State-0"; to: "State-Presale-01" + from: "State-0"; to: "State-Presale-01" PropertyAnimation { target: skyGradient @@ -311,6 +439,129 @@ Rectangle { easing.type: Easing.InOutQuart } + }, + Transition { + from: "State-0"; to: "State-Invitation-01" + + PropertyAnimation { + target: skyGradient + properties: "height" + duration: 1000 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: step0 + properties: "opacity, x" + duration: 1000 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: iceberg + properties: "x, y" + duration: 1000 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: icebergFrontBlur + properties: "x, y" + duration: 1000 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: mistTitle + properties: "opacity, y" + duration: 1500 + easing.type: Easing.InOutQuart + } + + }, + Transition { + from: "State-Presale-01"; to: "State-0" + + PropertyAnimation { + target: skyGradient + properties: "height" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: step0 + properties: "opacity, x" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: iceberg + properties: "x, y" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: icebergFrontBlur + properties: "x, y" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: mistTitle + properties: "opacity, y" + duration: 750 + easing.type: Easing.InOutQuart + } + + }, + Transition { + from: "State-Invitation-01"; to: "State-0" + + PropertyAnimation { + target: skyGradient + properties: "height" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: step0 + properties: "opacity, x" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: iceberg + properties: "x, y" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: icebergFrontBlur + properties: "x, y" + duration: 500 + easing.type: Easing.InOutQuart + } + PropertyAnimation { + target: mistTitle + properties: "opacity, y" + duration: 750 + easing.type: Easing.InOutQuart + } + + }, + Transition { + // all others + + PropertyAnimation { + target: iceberg + properties: "x, y" + duration: 2000 + easing.type: Easing.InOutCubic + } + PropertyAnimation { + target: icebergFrontBlur + properties: "x, y" + duration: 2000 + easing.type: Easing.InOutCubic + } + + } ] @@ -320,13 +571,13 @@ Rectangle { Rectangle { id: step0 - x: 500 + x: 1000 y: 0 width: 475 height: 670 color: "transparent" + opacity: 0 - Text { text: "Mist is a Navigator for Ethereum, a decentralized" font.family: sourceSansPro.name @@ -388,7 +639,7 @@ Rectangle { MouseArea { anchors.fill: parent onClicked: { - //wizardWindow.state = "State-1" + wizardWindow.state = "State-Invitation-01" } } } @@ -512,6 +763,13 @@ Rectangle { } + + /********************/ + /* PRESALE 01 */ + /********************/ + + + Rectangle { id: stepPresale1 anchors.fill: parent @@ -520,7 +778,7 @@ Rectangle { visible: false - Behavior on opacity { PropertyAnimation { duration: 2000 } } + Behavior on opacity { PropertyAnimation { duration: 500 } } Rectangle { // Content @@ -538,9 +796,7 @@ Rectangle { y: 90 } Text { - text: "When you bought ether, you were given a wallet file with a name similar to 
wallet-SOMEADDRESS.json. - -Find it and drag it to this box." + text: "When you bought ether, you were given a wallet file with a name similar to 
wallet-SOMEADDRESS.json. \n \nFind it and drag it to this box." font.family: sourceSansPro.name font.weight: Font.Light font.pixelSize: 18 @@ -629,6 +885,1622 @@ Find it and drag it to this box." } } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-02"; + } + + } } } + + + + + /********************/ + /* PRESALE 02 */ + /********************/ + + + + + + Rectangle { + id: stepPresale2 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + Text { + text: "Choose a new Passphrase" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 30 + color: "#57637B" + x: 0 + y: 90 + } + Text { + text: "We will now create a new wallet to store securely your funds. Create a new passphrase to lock this wallet. You’ll need to type it everytime you want to make a new transfer." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + width: 450 + color: "#57637B" + x: 0 + y: 150 + } + + + + TextField { + y: 240 + height: 90 + width: 400 + placeholderText: "Type a Passphrase" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 30 + font.italic: true + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + echoMode: TextInput.Password + + style: TextFieldStyle { + background: Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + } + } + + } + + TextField { + y: 360 + height: 90 + width: 400 + placeholderText: "Type it again" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 30 + font.italic: true + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + echoMode: TextInput.Password + + style: TextFieldStyle { + background: Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + } + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-01"; + console.log( "state-0 bak") + } + + } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-03"; + } + + } + } + } + + + + + /********************/ + /* PRESALE 03 */ + /********************/ + + + + Rectangle { + id: stepPresale3 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + ColumnLayout { + Text { + text: "Write these magic words down" + font.family: sourceSansPro.name + font.weight: Font.Light + verticalAlignment: Text.AlignBottom + font.pixelSize: 30 + color: "#57637B" + Layout.minimumHeight: 120 + } + + Rectangle { + color: "transparent" + width: 450 + height: 80 + + Text { + anchors.fill: parent + text: "It might look like a weird little poem works but it a security key that allows you to instant recover all your funds." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + } + + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 220 + height: 300 + width: 540 + + TextEdit { + id: magicWordsText + x: 20 + y: 20 + width: 400 + height: 260 + text: "proof adjust second surge \nshrimp arrive tunnel spare \ncoral man stand column \n \nfox sheriff ketchup arrest \nnews abstract pioneer inner \ninside come benefit feed" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 22 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignTop + focus: false + color: "#AAA0A0" + } + + Rectangle { + width: 90 + height: 30 + x: 430 + y: 40 + color: "transparent" + + Image { + source: "../wizard/print icon.png" + width: 40 + height: 40 + anchors.verticalCenter: parent.top + anchors.horizontalCenter: parent.horizontalCenter + } + + Text { + text: "PRINT WORDS" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + color: "#4A90E2" + anchors.verticalCenter: parent.bottom + anchors.horizontalCenter: parent.horizontalCenter + } + } + + } + + + RowLayout { + MouseArea { + height: 30 + width: 90 + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + Text { + id: englishTab + text: "English" + anchors.fill: parent + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#555F72" + font.pixelSize: 18 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + magicWordsText.text = "proof adjust second surge \nshrimp arrive tunnel spare \ncoral man stand column \n \nfox sheriff ketchup arrest \nnews abstract pioneer inner \ninside come benefit feed"; + + englishTab.color = "#555F72"; + shortAlienTab.color = "#4A90E2"; + simpleChineseTab.color = "#4A90E2"; + japaneseTab.color = "#4A90E2"; + spanishTab.color = "#4A90E2"; + } + } + MouseArea { + height: 30 + Layout.minimumWidth: 90 + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + Text { + id: shortAlienTab + text: "Short Alien" + anchors.fill: parent + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + font.pixelSize: 18 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + magicWordsText.text = "alajog wor uw uwuriw giwnin \nkowbu enlan ojimow puwvoj \njolgag wilrad zijhuw zad"; + + englishTab.color = "#4A90E2"; + shortAlienTab.color = "#555F72"; + simpleChineseTab.color = "#4A90E2"; + japaneseTab.color = "#4A90E2"; + spanishTab.color = "#4A90E2"; + } + } + MouseArea { + height: 30 + Layout.minimumWidth: 160 + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + Text { + id: simpleChineseTab + text: "Simplified Chinese" + anchors.fill: parent + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + font.pixelSize: 18 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + magicWordsText.text = "是在不了\n有和人这\n中大为上\n个国我以\n要他时来\n用们生到"; + + englishTab.color = "#4A90E2"; + shortAlienTab.color = "#4A90E2"; + simpleChineseTab.color = "#555F72"; + japaneseTab.color = "#4A90E2"; + spanishTab.color = "#4A90E2"; + } + + } + + MouseArea { + height: 30 + Layout.minimumWidth: 90 + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + Text { + id: japaneseTab + text: "Japanese" + anchors.fill: parent + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + font.pixelSize: 18 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + magicWordsText.text = " あいこくしん あいさつ あいだ あおぞら \nあかちゃん あきる あけがた あける \nあこがれる あさい あさひ あしあと \n\nあじわう あずかる あずき あそぶ \nあたえる あたためる あたりまえ あたる \nあつい あつかう あっしゅく あつまり"; + + englishTab.color = "#4A90E2"; + shortAlienTab.color = "#4A90E2"; + simpleChineseTab.color = "#4A90E2"; + japaneseTab.color = "#555F72"; + spanishTab.color = "#4A90E2"; + } + + } + MouseArea { + height: 30 + Layout.minimumWidth: 90 + + Rectangle { + anchors.fill: parent + color: "transparent" + } + + Text { + id: spanishTab + text: "Spanish" + anchors.fill: parent + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + font.pixelSize: 18 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + magicWordsText.text = "parcela rico bebida pauta \npasta torpedo yoga médula \ninfiel manso dureza tronco \n\nrancho mente útil retorno \npasta médula pauta yoga \nbebida manso tronco dureza"; + + englishTab.color = "#4A90E2"; + shortAlienTab.color = "#4A90E2"; + simpleChineseTab.color = "#4A90E2"; + japaneseTab.color = "#4A90E2"; + spanishTab.color = "#555F72"; + } + + } + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-02"; + } + + } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-04"; + } + + } + } + } + + + + /********************/ + /* PRESALE 04 */ + /********************/ + + + + Rectangle { + id: stepPresale4 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + ColumnLayout { + + spacing: 20 + + Text { + text: "Type the magic words again" + font.family: sourceSansPro.name + font.weight: Font.Light + verticalAlignment: Text.AlignBottom + font.pixelSize: 30 + color: "#57637B" + Layout.minimumHeight: 120 + } + + Rectangle { + color: "transparent" + width: 450 + height: 80 + + Text { + anchors.fill: parent + text: "We do this to ensure you have the exact words. As soon as you finish this, keep that paper in a secure place, it’s the only way to securely recover your funds if something happens to this computer." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + } + + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 220 + height: 220 + width: 540 + + TextEdit { + id: typeMagicWords + x: 20 + y: 20 + width: 400 + height: 180 + text: "" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 22 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignTop + focus: false + color: "#AAA0A0" + + onTextChanged: { + if (typeMagicWords.text == "proof adjust second surge") { + iconPositiveFeedback.visible = true; + iconNegativeFeedback.visible = false; + nextButton03.visible = true; + } else if (typeMagicWords.text.length > 24) { + iconPositiveFeedback.visible = false; + iconNegativeFeedback.visible = true; + nextButton03.visible = false; + } else { + iconPositiveFeedback.visible = false; + iconNegativeFeedback.visible = false; + nextButton03.visible = false; + } + + } + } + } + + RowLayout { + id: iconPositiveFeedback + spacing: 20 + visible: false + + Image { + source: "../wizard/icon-correct.png" + width: 34 + height: 34 + } + + Text { + text: "Yep, you've got them right" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + verticalAlignment: Text.AlignBottom + font.pixelSize: 16 + color: "#679137" + } + } + + RowLayout { + id: iconNegativeFeedback + spacing: 20 + visible: false + + Image { + source: "../wizard/icon-wrong.png" + width: 34 + height: 34 + } + + Text { + text: "Wrong words. Keep trying." + font.family: sourceSansPro.name + font.weight: Font.SemiBold + verticalAlignment: Text.AlignBottom + font.pixelSize: 16 + color: "#D0021B" + } + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-03"; + } + + } + + MouseArea { + id: nextButton03 + // visible: false + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-05"; + } + + } // MouseArea + } // Bottom Buttons + }// End State + + + + /********************/ + /* PRESALE 05 */ + /********************/ + + + + Rectangle { + id: stepPresale5 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + Column { + + spacing: 20 + + Text { + text: "Signup for secondary confirmation service" + font.family: sourceSansPro.name + font.weight: Font.Light + verticalAlignment: Text.AlignBottom + font.pixelSize: 30 + color: "#57637B" + height: 120 + } + + Rectangle { + color: "transparent" + width: 450 + height: 80 + + Text { + anchors.fill: parent + text: "For security measures, any transaction that goes over a daily limit of 1000 ethers will require a secondary authentication. You will be able to create new wallets with custom limits as soon as you start mist." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + } + + + ScrollView { + width: parent.width + height: 300 + + Column { + spacing: 20 + + ExclusiveGroup { id: secondFactorAuth } + + Rectangle { + height: 20 + width: 100 + color: "transparent" + // QML is a definite improvement over table layout and transparent gifs.. + } + Rectangle { + height: radioSecAuthOption01.checked ? 220 : 30 + width: 500 + color: "transparent" + anchors.topMargin: 100 + + RadioButton { + id: radioSecAuthOption01 + exclusiveGroup: secondFactorAuth + + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 9 + //border.color: control.activeFocus ? "darkblue" : "gray" + border.color: "#E9E0E0" + color: "#F5EEEE" + border.width: 4 + + Rectangle { + anchors.fill: parent + visible: control.checked + color: "#4A90E2" + radius: 9 + anchors.margins: 4 + } + } + label: Text { + text: "FIRST PROVIDER" + font.pixelSize: 14 + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + x: 10 + y: -8 + } + } + } + + Text { + x: 30 + y: 8 + text: "Some site that we are partnering with" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + color: "#57637B" + + } + + Rectangle { + visible: radioSecAuthOption01.checked + width: 400 + height: 190 + y: 40 + x: 20 + color: "transparent" + + Text { + id: link_Text + + text: '

1) Create an account in example.com

2) Go to Settings > 2FA > Ethereum

3) Copy this code on the API KEY field:

' + onLinkActivated: Qt.openUrlExternally(link) + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 100 + width: 300 + height: 50 + + TextEdit { + anchors.fill: parent + text: "a8f5f167f44f4964e6c998dee827110c56831c0fa…" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + focus: true + color: "#5AA3E8" + } + } + } + } + + + Rectangle { + height: radioSecAuthOption02.checked ? 220 : 30 + width: 500 + color: "transparent" + anchors.topMargin: 100 + + RadioButton { + id: radioSecAuthOption02 + exclusiveGroup: secondFactorAuth + + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 9 + //border.color: control.activeFocus ? "darkblue" : "gray" + border.color: "#E9E0E0" + color: "#F5EEEE" + border.width: 4 + + Rectangle { + anchors.fill: parent + visible: control.checked + color: "#4A90E2" + radius: 9 + anchors.margins: 4 + } + } + label: Text { + text: "SECOND PROVIDER" + font.pixelSize: 14 + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + x: 10 + y: -8 + } + } + } + + Text { + x: 30 + y: 8 + text: "Another nice we recommend" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + color: "#57637B" + } + + Rectangle { + visible: radioSecAuthOption02.checked + width: 400 + height: 190 + y: 40 + x: 20 + color: "transparent" + + Text { + text: '

1) Create an account in example.com

2) Go to Settings > 2FA > Ethereum

3) Copy this code on the API KEY field:

' + onLinkActivated: Qt.openUrlExternally(link) + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 100 + width: 300 + height: 50 + + TextEdit { + anchors.fill: parent + text: "a8f5f167f44f4964e6c998dee827110c56831c0fa…" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + focus: true + color: "#5AA3E8" + } + } + } + } + + + Rectangle { + height: radioSecAuthOption03.checked ? 220 : 30 + width: 500 + color: "transparent" + anchors.topMargin: 100 + + RadioButton { + id: radioSecAuthOption03 + exclusiveGroup: secondFactorAuth + + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 9 + border.color: "#E9E0E0" + color: "#F5EEEE" + border.width: 4 + + Rectangle { + anchors.fill: parent + visible: control.checked + color: "#4A90E2" + radius: 9 + anchors.margins: 4 + } + } + label: Text { + text: "USE ANOTHER COMPUTER" + font.pixelSize: 14 + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + x: 10 + y: -8 + } + } + } + + Text { + x: 30 + y: 8 + text: "I have access to another device I can install Mist" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + color: "#57637B" + } + + Rectangle { + visible: radioSecAuthOption03.checked + width: 400 + height: 190 + y: 40 + x: 20 + color: "transparent" + + Text { + text: '

1) Install Mist on your second computer

2) On the install process choose "import wallet"

3) Put this code on the import field:

' + onLinkActivated: Qt.openUrlExternally(link) + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 100 + width: 300 + height: 50 + + TextEdit { + anchors.fill: parent + text: "correct horse battery staple" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + focus: true + color: "#5AA3E8" + } + } + } + } + + + Rectangle { + height: radioSecAuthOption04.checked ? 220 : 30 + width: 500 + color: "transparent" + anchors.topMargin: 100 + + RadioButton { + id: radioSecAuthOption04 + exclusiveGroup: secondFactorAuth + + style: RadioButtonStyle { + indicator: Rectangle { + implicitWidth: 16 + implicitHeight: 16 + radius: 9 + border.color: "#E9E0E0" + color: "#F5EEEE" + border.width: 4 + + Rectangle { + anchors.fill: parent + visible: control.checked + color: "#4A90E2" + radius: 9 + anchors.margins: 4 + } + } + label: Text { + text: "DON'T USE A SECURE WALLET" + font.pixelSize: 14 + font.family: sourceSansPro.name + font.weight: Font.SemiBold + color: "#4A90E2" + x: 10 + y: -8 + } + } + } + + Text { + x: 30 + y: 8 + text: "Only for advanced users who know what they are doing" + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 14 + color: "#57637B" + } + } + } + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-04"; + } + } + + MouseArea { + id: nextButton04 + visible: true + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-06"; + } + + } // MouseArea + } // Bottom Buttons + }// End State + + + + + /********************/ + /* PRESALE 06 */ + /********************/ + + Rectangle { + id: stepPresale6 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + ColumnLayout { + Text { + text: "You just wrote your first contract!" + font.family: sourceSansPro.name + font.weight: Font.Light + verticalAlignment: Text.AlignBottom + font.pixelSize: 30 + color: "#57637B" + Layout.minimumHeight: 120 + } + + Rectangle { + color: "transparent" + width: 450 + height: 80 + + Text { + anchors.fill: parent + text: "Your wallet is a contract. Read it carefully and agree to continue." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + } + + + Rectangle { + radius: 4 + border.color: "#E1D9D9" + border.width: 4 + color: "#FFFFFF" + y: 220 + width: 540 + height: 300 + ScrollView { + anchors.centerIn: parent + width: 530 + height: 290 + + Text { + x: 20 + y: 20 + width: 400 + height: 400 + text: "This wallet contract will be initialized with 1000 ETH. The main holder of the contract is 27f8c208bd409eebd1cfaf1d68ffdb07 and has the right to spend transactions up to a limit of 100 eth per day. Any transaction above that limit will require a secondary authorization from
 fe6f41cd6a446a81ad30bf38d3e72fa2 or 300c04621d00ea9bad58f08c8220f459 . This account also has an emergency key, a272a3c46bf23afc105ada54d72c1cec , which is able to immediatly move all funds to another account. The main holder can also execute other contracts under this accounts name, these transactions are not subject to any limitations. " + font.family: sourceSansPro.name + font.weight: Font.SemiBold + font.pixelSize: 16 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignTop + focus: false + color: "#AAA0A0" + } + } + } + + + + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-05"; + } + + } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-07"; + //messageDialog.visible = true + } + } + } + // MessageDialog { + // id: messageDialog + // title: "You have to accept this" + // text: "Do you agree with this contract?" + // standardButtons: StandardButton.Yes | StandardButton.No + // onAccepted: { + // wizardWindow.state = "State-Presale-04" + // } + // //Component.onCompleted: visible = true + // } + } + + + + + + /********************/ + /* PRESALE 07 */ + /********************/ + + + + Rectangle { + id: stepPresale7 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + ColumnLayout { + Text { + text: "Deployed!" + font.family: sourceSansPro.name + font.weight: Font.Light + verticalAlignment: Text.AlignBottom + font.pixelSize: 30 + color: "#57637B" + Layout.minimumHeight: 120 + } + + Rectangle { + color: "transparent" + width: 450 + height: 80 + + Text { + anchors.fill: parent + text: "Everything is ready!" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + verticalAlignment: Text.AlignVCenter + color: "#57637B" + } + + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-06"; + } + + } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "FINISH" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + //onboardingWizard.visible = false; + wizardWindow.state = "State-Initial"; + //startTimerAnimation.running = true; + //startTimerAnimation.start(); + } + } + } + } + + + + + /********************/ + /* INVITATION 01 */ + /********************/ + + + + Rectangle { + id: stepInvitation1 + anchors.fill: parent + color: "transparent" + opacity: 0 + visible: false + + + Behavior on opacity { PropertyAnimation { duration: 500 } } + + Rectangle { + // Content + x: 350 + y: 0 + color: "transparent" + + Text { + text: "Drag your invitation" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 30 + color: "#57637B" + x: 0 + y: 90 + } + Text { + text: "An invitation is an image that looks like the icon you see here. Find the one you were given and drag it to this space." + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 18 + wrapMode: Text.WordWrap + width: 320 + color: "#57637B" + x: 260 + y: 200 + } + + Rectangle { + width: 220 + height: 150 + color: "#FFFFFF" + border.width: 4 + border.color: "#E1D9D9" + radius: 4 + y: 200 + + Rectangle { + id: invitationIcon + anchors { + top: parent.top + left: parent.left + right: parent.right + } + height: 100 + color: "transparent" + + Image { + anchors.centerIn: parent + source: "../wizard/drop-icon.png" + } + + } + + Text { + anchors { + top: invitationIcon.bottom + left: parent.left + right: parent.right + bottom: parent.bottom + } + text: "DROP OR OPEN YOUR INVITE HERE" + font.family: sourceSansPro.name + font.weight: Font.Bold + font.pixelSize: 14 + font.italic: true + wrapMode: Text.WordWrap + color: "#4A90E2" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignTop + + } + } + } + + Rectangle { + //bottom buttons + anchors.left: parent.left + anchors.bottom: parent.bottom + anchors.right: parent.right + height: 80 + color: "transparent" + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + x: 60 + height: 60 + width: 120 + + Text { + text: "BACK" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-0"; + console.log( "state-0 bak") + } + + } + + MouseArea { + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 60 + height: 60 + width: 120 + + Text { + text: "NEXT" + font.family: sourceSansPro.name + font.weight: Font.Light + font.pixelSize: 24 + color: "#FFFFFF" + anchors.fill: parent + horizontalAlignment: Text.AlignRight + verticalAlignment: Text.AlignVCenter + } + + onClicked: { + wizardWindow.state = "State-Presale-02"; + } + + } + } + } + + + } diff --git a/cmd/mist/assets/wizard/icon-correct.png b/cmd/mist/assets/wizard/icon-correct.png new file mode 100644 index 0000000000000000000000000000000000000000..e74aad8462815deec5178e76583755aca9444ff1 GIT binary patch literal 1657 zcmV-<28Q{GP)Px*Gf6~2R9FeMS9?%YWfb50+FhQ@0=vSpEFq+(fP~$r_Us91EQa z6=%?-8c{(>6U`K3$Z8Bx5=$T)t%S)3NkSx+4)52pJa%D$-Fxre&SmB@u&HLJ&kVURcCh2a+V0 zLZG#@fsE?Y_43=*jeRP0vq7b4L~QsDj6~#txH`&ksaWC2Fop*hN?ZZ^AApq7niyje zf!!}ADgEc2y={t{55MdCwIWyZtffL{4qQmsA|ZZ}j;{x75C%;T6JZE`3J4tmLOteu zSh-muKtM#%)Hm7z_2LVK`#XQSf1%3~kSU$J*qeBNb(-`18R2#a4~>Ik%Qa=k%1jag z64OXpUvR7Z5|MuOy>@tJ%mG*_+U*aDfSWZEw{hQDoWH-ZR|a3d+*qqN*u&CT*lYGdPxzVmSba(35! zPlaUq8RN{L95|2=KvCYfeCK5Uiy*d%sJjo~x<_%b*>#8r^n!%yhI?+A zh5J>*4JP|p)zeJv&tBKe@C@f*^9~&TAQ2Ea(*`Q>_|^ChPBB?)RPat0KgB|u;dqs` zrG59S3$(ELeVlxd2ndpXtGuGFS3Wk|A2^5ctSjfeD_*%^o3yIoZojeL>FawsX@=Sf zNszKS6dn)*L&sznf7WemJdt++VS~ghPnMs#zPABljDl+Esv*ms6ssW#8(Ad^MHAf7 z(@HgUJk^h~o`7IW*g?1dn*P#0__wIn9L(*CoB{Y`tY`JmebLC0%ButBjGsq7#YsV| zUJxtI$p5I(l7GqH*E9%%&V!6OqR_m8Dr!n6l}P-WbdRF4?Dny;JV5p_%C341oQfY? ztTLs#k+j5oJi6IFOKkmKTI85n_;IT>ekx5f1$81rF%)xa@2a1)`q;HPU6Eb z*I*5ic6AfO&NWaXm{6x(($qOtaK!G!Y;700H~?wia~j@=x5V>hAWIKfA59 z)`zuo70K8Z(t=_LRx6kI3XGjQG%Zw0OrG!VsITNUeEXqqlCd58E_3$buL#;AIh~(i z@w%Gwm5AiF0)e0oMG&koWY*eIN7Josr(@FmtL$x@ux}F|&w|lUWD1Ct#Yd)l+<1_s zWV@v~8&h&N>$U=WJ&cjnD9i=<{@%gP7)FekO<2cHt&&c@xUnwva$L>!RfpxN+kT$P zHml*Fb6*a#n=YSYpH+0ws_Q!3_qBj1M;NjP$4AHrqC|K|Md)nvJHA(4(7QQx=0CM< zkNYz}d^mGc=spSf4PwTxIi|=eN^WGE)9@hHJTIH`mM!#eATibRqI>o1k zW@w8TY&v&Go%Q15LbUkd_o~pqjV^H~<~_0KWJ0-W{#NnM$dlcCLNJ$A4;_b|9Jq77 zAju=Qvf|PHQ3=yu>#$rAq@hl@mA-$?1o#B{2JwkJ}`sZ7cAw7m9}DoZ)1x>qFwj zp@GpPO!AwDV~z+2H|R^Ty<5()xI)>BAhRqmS`-&?#2Jnz95z1UU&2t0aO~iSFlf0M zUA?Uv_GE@PP1Z5Rh97c`3fW~t;DVJvqKu2jt)qx=3LvvXPxT-Dy6B)Puk~L<82)8@7&%l6vfZ;I#l{KZEB~^K3WBXH`vb%v) zsvAfwDE zFnhQ|;kg(LGz`HsoAPFOFN1D*4ThakAYfJYSp5G15rvyu>L%o+00000NkvXXu0mjf Dh?6W} literal 0 HcmV?d00001 diff --git a/cmd/mist/assets/wizard/icon-correct@2x.png b/cmd/mist/assets/wizard/icon-correct@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dd638c43f10a9b6437f3007cfdd908740b2d5bf2 GIT binary patch literal 3103 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 U6o(^mOaK4?07*qoM6N<$f=F%|U;qFB literal 0 HcmV?d00001 diff --git a/cmd/mist/assets/wizard/print icon.png b/cmd/mist/assets/wizard/print icon.png new file mode 100644 index 0000000000000000000000000000000000000000..1486e5f49b3f5ca6b69183ffab6297e3ea1624c5 GIT binary patch literal 572 zcmV-C0>k}@P)Px$_DMuRR9Fe^R=rNcFc7vK2DWZY6e_VXATc4q3$*FX4hxJFI)?Y%vSQ2ixp9K3M2hm`@4oNzT`o2u<+0!ypqTlE-BFCePq8n9 z*4mc1cZtQxVGRm=B+lo?)$opVIt-`whjt3W2z^h+=K^1CR1WXS{$qfN1*~_2jMA^q z58fn{tc1He57cmdgr{Z4w9ER5Qono+X~1s8z^X35*E_Myyo)Y6icV{h ztf6!^=Jvq4wEWP-L=1a26ZL&kyU4dKFsJUgEpwkoQ}ABS7u;QGVlXSe98Vs(NZ=50000< KMNUMnLSTYO9s$w- literal 0 HcmV?d00001 diff --git a/cmd/mist/assets/wizard/print icon@2x.png b/cmd/mist/assets/wizard/print icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..fea415fa9ee3f8510f81594bcc6c16572f04f372 GIT binary patch literal 1195 zcmV;c1XTNpP)Px(Wl2OqRCodHn@dd8Kp4lTUDygiL8GVvL{Y=R!x~LA;oxpKpoK(lp9wJ`% z>I?8FccT|Q35%d4oV<9@7>r~M%1h$~H8ILQ$8YMc*=MKSPP^OkH7T9W zrB4W<-$02yO;XFVlcCr3q9JM7b38zh_eLU-3V;H?0>tjUjm_aeXrV#NX_0A;2gqQ| z3?KTCh$s9oYpoH9oT+bWcpeNzc8CO3%9bktGUsMT4oBjY`U$1Wgh*XdqcR&9`_xp* zaZ&NE0my*77;Il6$s~ig1WG(rN931hM;CU9f>q3ps{k?wr-nP0X)NZ4U% zT;T5F?qbf1h^rA{q{24N1;h5$U8|Q%`nOM>T2rVLwa+59ufDB2M8+b1Q6`Z zIn2FC)N9_UyEKiR2yz?$4rfUcWF zG-+CphyYDOMSuv+ptLY!<+wpUVbO1 zQ$oK;RGO!;=t%hH(KVhgT!0K-ji>f4d?MP(Gv=mrO34O^MSVPo+?9w&uDzqeqjVC! za$MyZbUMV~tw<~JDiiP_B1jbld?y#ReBzFQV2FJhBAaycire8aKUE)N(LNStLza5g z_`_8osBa%DKR495o^2;M_Blu-c|wh&slM>w!EkoElfw)mtf7gX@t&)|k{|#c44|#- z{138ZX7?tP5750#40%>QKzMB7d*vEC34{&R>Y~g##=zpa-k-HJyA=J&9{d)pOgw?Yi^Fq|C~Xc$>;0WLuHA3&^#x?h@G*0p!t zql+!fxs2~xj&cFQ-rl@wK=D4<3J{r(ioEULc5TLY4TAhJFdDr(Egved+Ij@rg9MNO5 literal 0 HcmV?d00001