diff options
Diffstat (limited to 'app')
71 files changed, 562 insertions, 41 deletions
diff --git a/app/fonts/DIN Next/DIN Next W01 Bold.otf b/app/fonts/DIN Next/DIN Next W01 Bold.otf Binary files differnew file mode 100644 index 000000000..2b78d1ff4 --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W01 Bold.otf diff --git a/app/fonts/DIN Next/DIN Next W01 Regular.otf b/app/fonts/DIN Next/DIN Next W01 Regular.otf Binary files differnew file mode 100644 index 000000000..09f6ee297 --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W01 Regular.otf diff --git a/app/fonts/DIN Next/DIN Next W10 Black.otf b/app/fonts/DIN Next/DIN Next W10 Black.otf Binary files differnew file mode 100644 index 000000000..08eb73373 --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W10 Black.otf diff --git a/app/fonts/DIN Next/DIN Next W10 Italic.otf b/app/fonts/DIN Next/DIN Next W10 Italic.otf Binary files differnew file mode 100644 index 000000000..73f2b9e8c --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W10 Italic.otf diff --git a/app/fonts/DIN Next/DIN Next W10 Light.otf b/app/fonts/DIN Next/DIN Next W10 Light.otf Binary files differnew file mode 100644 index 000000000..700450e49 --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W10 Light.otf diff --git a/app/fonts/DIN Next/DIN Next W10 Medium.otf b/app/fonts/DIN Next/DIN Next W10 Medium.otf Binary files differnew file mode 100644 index 000000000..b73f2e43f --- /dev/null +++ b/app/fonts/DIN Next/DIN Next W10 Medium.otf diff --git a/app/fonts/DIN_OT/DINOT-2.otf b/app/fonts/DIN_OT/DINOT-2.otf Binary files differnew file mode 100644 index 000000000..4a5e13127 --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-2.otf diff --git a/app/fonts/DIN_OT/DINOT-Bold 2.otf b/app/fonts/DIN_OT/DINOT-Bold 2.otf Binary files differnew file mode 100644 index 000000000..6ed5b6c3d --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-Bold 2.otf diff --git a/app/fonts/DIN_OT/DINOT-BoldItalic.otf b/app/fonts/DIN_OT/DINOT-BoldItalic.otf Binary files differnew file mode 100644 index 000000000..148c90588 --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-BoldItalic.otf diff --git a/app/fonts/DIN_OT/DINOT-Italic 2.otf b/app/fonts/DIN_OT/DINOT-Italic 2.otf Binary files differnew file mode 100644 index 000000000..e365e77ab --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-Italic 2.otf diff --git a/app/fonts/DIN_OT/DINOT-Medium 2.otf b/app/fonts/DIN_OT/DINOT-Medium 2.otf Binary files differnew file mode 100644 index 000000000..a87a2df37 --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-Medium 2.otf diff --git a/app/fonts/DIN_OT/DINOT-MediumItalic 2.otf b/app/fonts/DIN_OT/DINOT-MediumItalic 2.otf Binary files differnew file mode 100644 index 000000000..14eddfc76 --- /dev/null +++ b/app/fonts/DIN_OT/DINOT-MediumItalic 2.otf diff --git a/app/fonts/Lato/Lato-Black.ttf b/app/fonts/Lato/Lato-Black.ttf Binary files differnew file mode 100755 index 000000000..6848db0d1 --- /dev/null +++ b/app/fonts/Lato/Lato-Black.ttf diff --git a/app/fonts/Lato/Lato-BlackItalic.ttf b/app/fonts/Lato/Lato-BlackItalic.ttf Binary files differnew file mode 100755 index 000000000..5decf1297 --- /dev/null +++ b/app/fonts/Lato/Lato-BlackItalic.ttf diff --git a/app/fonts/Lato/Lato-Bold.ttf b/app/fonts/Lato/Lato-Bold.ttf Binary files differnew file mode 100755 index 000000000..74343694e --- /dev/null +++ b/app/fonts/Lato/Lato-Bold.ttf diff --git a/app/fonts/Lato/Lato-BoldItalic.ttf b/app/fonts/Lato/Lato-BoldItalic.ttf Binary files differnew file mode 100755 index 000000000..684aacf5b --- /dev/null +++ b/app/fonts/Lato/Lato-BoldItalic.ttf diff --git a/app/fonts/Lato/Lato-Hairline.ttf b/app/fonts/Lato/Lato-Hairline.ttf Binary files differnew file mode 100755 index 000000000..288be2955 --- /dev/null +++ b/app/fonts/Lato/Lato-Hairline.ttf diff --git a/app/fonts/Lato/Lato-HairlineItalic.ttf b/app/fonts/Lato/Lato-HairlineItalic.ttf Binary files differnew file mode 100755 index 000000000..c2bfd3353 --- /dev/null +++ b/app/fonts/Lato/Lato-HairlineItalic.ttf diff --git a/app/fonts/Lato/Lato-Italic.ttf b/app/fonts/Lato/Lato-Italic.ttf Binary files differnew file mode 100755 index 000000000..3d3b7a298 --- /dev/null +++ b/app/fonts/Lato/Lato-Italic.ttf diff --git a/app/fonts/Lato/Lato-Light.ttf b/app/fonts/Lato/Lato-Light.ttf Binary files differnew file mode 100755 index 000000000..a958067a8 --- /dev/null +++ b/app/fonts/Lato/Lato-Light.ttf diff --git a/app/fonts/Lato/Lato-LightItalic.ttf b/app/fonts/Lato/Lato-LightItalic.ttf Binary files differnew file mode 100755 index 000000000..5e45ad9a6 --- /dev/null +++ b/app/fonts/Lato/Lato-LightItalic.ttf diff --git a/app/fonts/Lato/Lato-Regular.ttf b/app/fonts/Lato/Lato-Regular.ttf Binary files differnew file mode 100755 index 000000000..04ea8efb1 --- /dev/null +++ b/app/fonts/Lato/Lato-Regular.ttf diff --git a/app/fonts/Lato/OFL.txt b/app/fonts/Lato/OFL.txt new file mode 100755 index 000000000..dfca0da4b --- /dev/null +++ b/app/fonts/Lato/OFL.txt @@ -0,0 +1,93 @@ +Copyright (c) 2010-2014 by tyPoland Lukasz Dziedzic (team@latofonts.com) with Reserved Font Name "Lato"
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/app/fonts/Roboto/Roboto-Black.ttf b/app/fonts/Roboto/Roboto-Black.ttf Binary files differnew file mode 100644 index 000000000..71f01ac2b --- /dev/null +++ b/app/fonts/Roboto/Roboto-Black.ttf diff --git a/app/fonts/Roboto/Roboto-BlackItalic.ttf b/app/fonts/Roboto/Roboto-BlackItalic.ttf Binary files differnew file mode 100644 index 000000000..ec309c785 --- /dev/null +++ b/app/fonts/Roboto/Roboto-BlackItalic.ttf diff --git a/app/fonts/Roboto/Roboto-Bold.ttf b/app/fonts/Roboto/Roboto-Bold.ttf Binary files differnew file mode 100644 index 000000000..aaf374d2c --- /dev/null +++ b/app/fonts/Roboto/Roboto-Bold.ttf diff --git a/app/fonts/Roboto/Roboto-BoldItalic.ttf b/app/fonts/Roboto/Roboto-BoldItalic.ttf Binary files differnew file mode 100644 index 000000000..dcd0f8007 --- /dev/null +++ b/app/fonts/Roboto/Roboto-BoldItalic.ttf diff --git a/app/fonts/Roboto/Roboto-Italic.ttf b/app/fonts/Roboto/Roboto-Italic.ttf Binary files differnew file mode 100644 index 000000000..f382c6874 --- /dev/null +++ b/app/fonts/Roboto/Roboto-Italic.ttf diff --git a/app/fonts/Roboto/Roboto-Light.ttf b/app/fonts/Roboto/Roboto-Light.ttf Binary files differnew file mode 100644 index 000000000..664e1b2f9 --- /dev/null +++ b/app/fonts/Roboto/Roboto-Light.ttf diff --git a/app/fonts/Roboto/Roboto-LightItalic.ttf b/app/fonts/Roboto/Roboto-LightItalic.ttf Binary files differnew file mode 100644 index 000000000..b8f529637 --- /dev/null +++ b/app/fonts/Roboto/Roboto-LightItalic.ttf diff --git a/app/fonts/Roboto/Roboto-Medium.ttf b/app/fonts/Roboto/Roboto-Medium.ttf Binary files differnew file mode 100644 index 000000000..aa00de0ef --- /dev/null +++ b/app/fonts/Roboto/Roboto-Medium.ttf diff --git a/app/fonts/Roboto/Roboto-MediumItalic.ttf b/app/fonts/Roboto/Roboto-MediumItalic.ttf Binary files differnew file mode 100644 index 000000000..67e25f019 --- /dev/null +++ b/app/fonts/Roboto/Roboto-MediumItalic.ttf diff --git a/app/fonts/Roboto/Roboto-Regular.ttf b/app/fonts/Roboto/Roboto-Regular.ttf Binary files differnew file mode 100644 index 000000000..3e6e2e761 --- /dev/null +++ b/app/fonts/Roboto/Roboto-Regular.ttf diff --git a/app/fonts/Roboto/Roboto-Thin.ttf b/app/fonts/Roboto/Roboto-Thin.ttf Binary files differnew file mode 100644 index 000000000..d262d1446 --- /dev/null +++ b/app/fonts/Roboto/Roboto-Thin.ttf diff --git a/app/fonts/Roboto/Roboto-ThinItalic.ttf b/app/fonts/Roboto/Roboto-ThinItalic.ttf Binary files differnew file mode 100644 index 000000000..63e9f9718 --- /dev/null +++ b/app/fonts/Roboto/Roboto-ThinItalic.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-Bold.ttf b/app/fonts/Roboto/RobotoCondensed-Bold.ttf Binary files differnew file mode 100644 index 000000000..48dd63534 --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-Bold.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-BoldItalic.ttf b/app/fonts/Roboto/RobotoCondensed-BoldItalic.ttf Binary files differnew file mode 100644 index 000000000..ad728646a --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-BoldItalic.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-Italic.ttf b/app/fonts/Roboto/RobotoCondensed-Italic.ttf Binary files differnew file mode 100644 index 000000000..a232513d5 --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-Italic.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-Light.ttf b/app/fonts/Roboto/RobotoCondensed-Light.ttf Binary files differnew file mode 100644 index 000000000..a6e368d40 --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-Light.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-LightItalic.ttf b/app/fonts/Roboto/RobotoCondensed-LightItalic.ttf Binary files differnew file mode 100644 index 000000000..5b2b6ae08 --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-LightItalic.ttf diff --git a/app/fonts/Roboto/RobotoCondensed-Regular.ttf b/app/fonts/Roboto/RobotoCondensed-Regular.ttf Binary files differnew file mode 100644 index 000000000..65bf32a19 --- /dev/null +++ b/app/fonts/Roboto/RobotoCondensed-Regular.ttf diff --git a/app/images/.DS_Store b/app/images/.DS_Store Binary files differdeleted file mode 100644 index d28ef2089..000000000 --- a/app/images/.DS_Store +++ /dev/null diff --git a/app/images/check-white.svg b/app/images/check-white.svg new file mode 100644 index 000000000..0f15667da --- /dev/null +++ b/app/images/check-white.svg @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="16px" height="13px" viewBox="0 0 16 13" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch --> + <title>check-white</title> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="MetaMascara-v2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="account-dropdown-top-bar-IXD" transform="translate(-17.000000, -80.000000)" fill-rule="nonzero" fill="#FFFFFF"> + <g id="Group-11" transform="translate(18.000000, 74.000000)"> + <polygon id="check-white" points="4.2 15.5712828 0.714212839 12.0143571 -0.714212839 13.4142143 4.2 18.4287172 14.7142128 7.69992858 13.2857872 6.30007142"></polygon> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/coinbase logo.png b/app/images/coinbase logo.png Binary files differnew file mode 100644 index 000000000..a23d7926d --- /dev/null +++ b/app/images/coinbase logo.png diff --git a/app/images/eth_logo.svg b/app/images/eth_logo.svg new file mode 100644 index 000000000..894bd70dd --- /dev/null +++ b/app/images/eth_logo.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg width="256px" height="417px" viewBox="0 0 256 417" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" preserveAspectRatio="xMidYMid"> + <g> + <polygon fill="#343434" points="127.9611 0 125.1661 9.5 125.1661 285.168 127.9611 287.958 255.9231 212.32"/> + <polygon fill="#8C8C8C" points="127.962 0 0 212.32 127.962 287.959 127.962 154.158"/> + <polygon fill="#3C3C3B" points="127.9611 312.1866 126.3861 314.1066 126.3861 412.3056 127.9611 416.9066 255.9991 236.5866"/> + <polygon fill="#8C8C8C" points="127.962 416.9052 127.962 312.1852 0 236.5852"/> + <polygon fill="#141414" points="127.9611 287.9577 255.9211 212.3207 127.9611 154.1587"/> + <polygon fill="#393939" points="0.0009 212.3208 127.9609 287.9578 127.9609 154.1588"/> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/import-account.svg b/app/images/import-account.svg new file mode 100644 index 000000000..d6a81b70c --- /dev/null +++ b/app/images/import-account.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch --> + <title>import-account</title> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="MetaMascara-v2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="account-dropdown-top-bar-IXD" transform="translate(-25.000000, -718.000000)"> + <g id="Group-6" transform="translate(4.000000, 646.000000)"> + <g id="import-account" transform="translate(21.000000, 72.000000)"> + <rect id="Rectangle-49" fill="#FFFFFF" x="0" y="13.1721326" width="14.4893459" height="1.08397642"></rect> + <rect id="Rectangle" fill="#FFFFFF" x="6.5860663" y="0" width="1.08397642" height="10.5377061"></rect> + <polyline id="Path-12" stroke="#FFFFFF" points="2.63442652 6.5860663 7.24467293 10.5377061 11.8549193 6.5860663"></polyline> + </g> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/info-logo.png b/app/images/info-logo.png Binary files differnew file mode 100644 index 000000000..f654ed5b1 --- /dev/null +++ b/app/images/info-logo.png diff --git a/app/images/metamask-fox.svg b/app/images/metamask-fox.svg new file mode 100644 index 000000000..f3c24f79e --- /dev/null +++ b/app/images/metamask-fox.svg @@ -0,0 +1,128 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns:ev="http://www.w3.org/2001/xml-events" + xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 318.6 318.6" + style="enable-background:new 0 0 318.6 318.6;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#161616;stroke:#161616;} + .st1{fill:#E4761B;stroke:#E4761B;stroke-linecap:round;stroke-linejoin:round;} + .st2{fill:#763D16;stroke:#763D16;stroke-linecap:round;stroke-linejoin:round;} + .st3{fill:#F6851B;stroke:#F6851B;stroke-linecap:round;stroke-linejoin:round;} + .st4{fill:#E2761B;stroke:#E2761B;stroke-linecap:round;stroke-linejoin:round;} + .st5{fill:#CD6116;stroke:#CD6116;stroke-linecap:round;stroke-linejoin:round;} + .st6{fill:#C0AD9E;stroke:#C0AD9E;stroke-linecap:round;stroke-linejoin:round;} + .st7{fill:#D7C1B3;stroke:#D7C1B3;stroke-linecap:round;stroke-linejoin:round;} + .st8{fill:#E4751F;stroke:#E4751F;stroke-linecap:round;stroke-linejoin:round;} + .st9{fill:#233447;stroke:#233447;stroke-linecap:round;stroke-linejoin:round;} + .st10{fill:#161616;stroke:#161616;stroke-linecap:round;stroke-linejoin:round;} +</style> +<polygon class="st0" points="277.3,145.6 272.3,142 280.3,134.7 274.2,129.9 282.2,123.8 276.9,119.8 285.3,79 272.7,41.1 + 191.6,71.4 124.1,71.4 43,41.1 30.4,79 38.9,119.8 33.5,123.8 41.5,129.9 35.4,134.7 43.4,142 38.4,145.6 49.9,159.1 32.5,213.3 + 48.6,268.6 105.3,253 116.3,262 138.7,277.5 177,277.5 199.4,262 210.4,253 267.1,268.6 283.3,213.3 265.8,159.1 "/> +<g> + <polygon class="st1" points="105.3,253 48.6,268.6 32.5,213.3 "/> + <polygon class="st1" points="283.3,213.3 267.1,268.6 210.4,253 "/> + <polygon class="st2" points="265.8,159.1 213.5,143.8 231.8,139 "/> + <polygon class="st2" points="49.9,159.1 84,139 102.2,143.8 "/> + <polygon class="st2" points="43.4,142 41.5,129.9 84,139 "/> + <polygon class="st2" points="272.3,142 231.8,139 274.2,129.9 "/> + <polygon class="st2" points="272.3,142 265.8,159.1 231.8,139 "/> + <polygon class="st2" points="43.4,142 84,139 49.9,159.1 "/> + <polygon class="st2" points="231.8,139 276.9,119.8 274.2,129.9 "/> + <polygon class="st2" points="84,139 41.5,129.9 38.9,119.8 "/> + <polygon class="st3" points="124.1,71.4 191.6,71.4 176.5,112.5 "/> + <polygon class="st3" points="176.5,112.5 139.2,112.5 124.1,71.4 "/> + <polygon class="st2" points="276.9,119.8 231.8,139 231,87.4 "/> + <polygon class="st2" points="102.2,143.8 84,139 84.7,87.4 "/> + <polygon class="st2" points="84.7,87.4 84,139 38.9,119.8 "/> + <polygon class="st2" points="231,87.4 231.8,139 213.5,143.8 "/> + <polygon class="st1" points="139.2,112.5 43,41.1 124.1,71.4 "/> + <polygon class="st4" points="272.7,41.1 176.5,112.5 191.6,71.4 "/> + <polygon class="st1" points="210.4,253 236.9,213.3 283.3,213.3 "/> + <polygon class="st1" points="32.5,213.3 78.9,213.3 105.3,253 "/> + <polygon class="st3" points="229.3,167.7 283.3,213.3 236.9,213.3 "/> + <polygon class="st3" points="86.4,167.7 32.5,213.3 49.9,159.1 "/> + <polygon class="st3" points="78.9,213.3 32.5,213.3 86.4,167.7 "/> + <polygon class="st3" points="229.3,167.7 265.8,159.1 283.3,213.3 "/> + <polygon class="st2" points="84.7,87.4 139.2,112.5 102.2,143.8 "/> + <polygon class="st2" points="213.5,143.8 176.5,112.5 231,87.4 "/> + <polygon class="st2" points="265.8,159.1 272.3,142 277.3,145.6 "/> + <polygon class="st2" points="49.9,159.1 38.4,145.6 43.4,142 "/> + <polygon class="st2" points="272.3,142 274.2,129.9 280.3,134.7 "/> + <polygon class="st2" points="43.4,142 35.4,134.7 41.5,129.9 "/> + <polygon class="st2" points="33.5,123.8 38.9,119.8 41.5,129.9 "/> + <polygon class="st2" points="282.2,123.8 274.2,129.9 276.9,119.8 "/> + <polygon class="st3" points="49.9,159.1 102.2,143.8 86.4,167.7 "/> + <polygon class="st3" points="265.8,159.1 229.3,167.7 213.5,143.8 "/> + <polygon class="st2" points="38.9,119.8 30.4,79 84.7,87.4 "/> + <polygon class="st2" points="231,87.4 285.3,79 276.9,119.8 "/> + <polygon class="st1" points="102.2,143.8 139.2,112.5 142.6,170.2 "/> + <polygon class="st1" points="213.5,143.8 229.3,167.7 173.1,170.2 "/> + <polygon class="st1" points="173.1,170.2 176.5,112.5 213.5,143.8 "/> + <polygon class="st1" points="142.6,170.2 86.4,167.7 102.2,143.8 "/> + <polygon class="st2" points="272.7,41.1 285.3,79 231,87.4 "/> + <polygon class="st2" points="43,41.1 139.2,112.5 84.7,87.4 "/> + <polygon class="st2" points="231,87.4 176.5,112.5 272.7,41.1 "/> + <polygon class="st2" points="84.7,87.4 30.4,79 43,41.1 "/> + <polygon class="st5" points="105.3,253 78.9,213.3 110,213.7 "/> + <polygon class="st5" points="210.4,253 205.7,213.7 236.9,213.3 "/> + <polygon class="st3" points="173.1,170.2 142.6,170.2 139.2,112.5 "/> + <polygon class="st3" points="139.2,112.5 176.5,112.5 173.1,170.2 "/> + <polygon class="st6" points="116.3,262 105.3,253 136.8,267.9 "/> + <polygon class="st6" points="178.9,267.9 210.4,253 199.4,262 "/> + <polygon class="st7" points="136.6,258.6 136.8,267.9 105.3,253 "/> + <polygon class="st7" points="179.2,258.6 210.4,253 178.9,267.9 "/> + <polygon class="st3" points="86.4,167.7 110,213.7 78.9,213.3 "/> + <polygon class="st3" points="236.9,213.3 205.7,213.7 229.3,167.7 "/> + <polygon class="st8" points="86.4,167.7 109.2,190.8 110,213.7 "/> + <polygon class="st8" points="229.3,167.7 205.7,213.7 206.6,190.8 "/> + <polygon class="st7" points="105.3,253 139.2,236.5 136.6,258.6 "/> + <polygon class="st7" points="210.4,253 179.2,258.6 176.5,236.5 "/> + <polygon class="st1" points="139.2,236.5 105.3,253 110,213.7 "/> + <polygon class="st1" points="176.5,236.5 205.7,213.7 210.4,253 "/> + <polygon class="st5" points="173.1,170.2 229.3,167.7 206.6,190.8 "/> + <polygon class="st5" points="109.2,190.8 86.4,167.7 142.6,170.2 "/> + <polygon class="st5" points="142.6,170.2 129.1,181.7 109.2,190.8 "/> + <polygon class="st5" points="206.6,190.8 186.6,181.7 173.1,170.2 "/> + <polygon class="st3" points="205.7,213.7 178.3,199.1 206.6,190.8 "/> + <polygon class="st3" points="110,213.7 109.2,190.8 137.4,199.1 "/> + <polygon class="st9" points="137.4,199.1 109.2,190.8 129.1,181.7 "/> + <polygon class="st9" points="178.3,199.1 186.6,181.7 206.6,190.8 "/> + <polygon class="st5" points="186.6,181.7 178.3,199.1 173.1,170.2 "/> + <polygon class="st5" points="129.1,181.7 142.6,170.2 137.4,199.1 "/> + <polygon class="st6" points="199.4,262 177,277.5 178.9,267.9 "/> + <polygon class="st6" points="136.8,267.9 138.7,277.5 116.3,262 "/> + <polygon class="st4" points="178.3,199.1 171.8,188.4 173.1,170.2 "/> + <polygon class="st8" points="137.4,199.1 142.6,170.2 143.9,188.4 "/> + <polygon class="st3" points="173.1,170.2 171.8,188.4 143.9,188.4 "/> + <polygon class="st3" points="143.9,188.4 142.6,170.2 173.1,170.2 "/> + <polygon class="st3" points="178.3,199.1 205.7,213.7 176.5,236.5 "/> + <polygon class="st3" points="139.2,236.5 110,213.7 137.4,199.1 "/> + <polygon class="st3" points="137.4,199.1 144,233.2 139.2,236.5 "/> + <polygon class="st3" points="176.5,236.5 171.7,233.2 178.3,199.1 "/> + <polygon class="st8" points="171.8,188.4 178.3,199.1 171.7,233.2 "/> + <polygon class="st8" points="143.9,188.4 144,233.2 137.4,199.1 "/> + <polygon class="st3" points="143.9,188.4 171.8,188.4 171.7,233.2 "/> + <polygon class="st3" points="171.7,233.2 144,233.2 143.9,188.4 "/> + <polygon class="st6" points="179.2,258.6 178.9,267.9 177,277.5 "/> + <polygon class="st6" points="138.7,277.5 136.8,267.9 136.6,258.6 "/> + <polygon class="st6" points="136.6,258.6 139,256.4 138.7,277.5 "/> + <polygon class="st6" points="177,277.5 176.7,256.4 179.2,258.6 "/> + <polygon class="st6" points="138.7,277.5 139,256.4 176.7,256.4 "/> + <polygon class="st6" points="176.7,256.4 177,277.5 138.7,277.5 "/> + <polygon class="st10" points="176.5,236.5 179.2,258.6 176.7,256.4 "/> + <polygon class="st10" points="139,256.4 136.6,258.6 139.2,236.5 "/> + <polygon class="st10" points="139.2,236.5 140.7,241.2 139,256.4 "/> + <polygon class="st10" points="176.7,256.4 175,241.2 176.5,236.5 "/> + <polygon class="st10" points="143.7,237.7 140.7,241.2 139.2,236.5 "/> + <polygon class="st10" points="176.5,236.5 175,241.2 172,237.7 "/> + <polygon class="st10" points="172,237.7 171.7,233.2 176.5,236.5 "/> + <polygon class="st10" points="139.2,236.5 144,233.2 143.7,237.7 "/> + <polygon class="st10" points="171.7,233.2 172,237.7 143.7,237.7 "/> + <polygon class="st10" points="143.7,237.7 144,233.2 171.7,233.2 "/> + <polygon class="st10" points="140.7,241.2 175,241.2 176.7,256.4 "/> + <polygon class="st10" points="176.7,256.4 139,256.4 140.7,241.2 "/> + <polygon class="st10" points="140.7,241.2 143.7,237.7 172,237.7 "/> + <polygon class="st10" points="172,237.7 175,241.2 140.7,241.2 "/> +</g> +</svg> diff --git a/app/images/mm-bolt.svg b/app/images/mm-bolt.svg new file mode 100644 index 000000000..bbf0abcc7 --- /dev/null +++ b/app/images/mm-bolt.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 252 251.7" style="enable-background:new 0 0 252 251.7;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#757575;} +</style> +<path class="st0" d="M211.3,103.9h-60.7c-2,0-3.6-1.6-3.6-3.6V3.6c0-3.5-4.5-5-6.6-2.2l-102.7,140c-1.8,2.4,0,5.8,2.9,5.8h60.7 + c2,0,3.6,1.6,3.6,3.6v96.6c0,3.5,4.5,5,6.6,2.2l102.7-140C216,107.3,214.3,103.9,211.3,103.9z"/> +</svg> diff --git a/app/images/mm-info-icon.svg b/app/images/mm-info-icon.svg new file mode 100644 index 000000000..825f0f200 --- /dev/null +++ b/app/images/mm-info-icon.svg @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 10 10" style="enable-background:new 0 0 10 10;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:#B8B8B8;} +</style> +<path class="st0" d="M5,0C2.2,0,0,2.2,0,5s2.2,5,5,5s5-2.2,5-5S7.8,0,5,0z M5,2c0.4,0,0.7,0.3,0.7,0.7c0,0.4-0.3,0.7-0.7,0.7 + S4.3,3.2,4.3,2.8C4.3,2.4,4.6,2,5,2z M5.7,8H4.3V4.3h1.5V8z"/> +</svg> diff --git a/app/images/open.svg b/app/images/open.svg new file mode 100644 index 000000000..2957ce43d --- /dev/null +++ b/app/images/open.svg @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="28px" height="28px" viewBox="0 0 28 28" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 47.1 (45422) - http://www.bohemiancoding.com/sketch --> + <title>open</title> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="Mobile-screens" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="MetaMascara-Mobile---structured" transform="translate(-329.000000, -93.000000)"> + <g id="open" transform="translate(330.000000, 94.000000)"> + <path d="M26,13 C26,20.1799 20.1799,26 13,26 C5.8201,26 0,20.1799 0,13 C0,5.8201 5.8201,0 13,0 C20.1799,0 26,5.8201 26,13 Z" id="Stroke-3" stroke="#4A4A4A"></path> + <path d="M6,17 C6,17 7.78735344,10.8360387 13.7616996,10.8360387 L13.7616996,8 L19,12.3733433 L13.7616996,17 L13.7616996,14.1639613 C13.7616996,14.1639613 9.54083576,13.4629933 6,17" id="Fill-5" fill="#4A4A4A"></path> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/plus-btn-white.svg b/app/images/plus-btn-white.svg new file mode 100644 index 000000000..2672d39dd --- /dev/null +++ b/app/images/plus-btn-white.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch --> + <title>plus-btn-white</title> + <desc>Created with Sketch.</desc> + <defs></defs> + <g id="MetaMascara-v2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="account-dropdown-top-bar-IXD" transform="translate(-24.000000, -669.000000)" fill="#FFFFFF"> + <g id="Group-6" transform="translate(4.000000, 646.000000)"> + <g id="plus-btn-white" transform="translate(20.000000, 23.000000)"> + <rect id="Rectangle-48" x="7.38461538" y="0" width="1.23076923" height="16"></rect> + <rect id="Rectangle-48" transform="translate(8.000000, 8.000000) rotate(-90.000000) translate(-8.000000, -8.000000) " x="7.38461538" y="0" width="1.23076923" height="16"></rect> + </g> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/popout.svg b/app/images/popout.svg new file mode 100644 index 000000000..760fe4379 --- /dev/null +++ b/app/images/popout.svg @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg width="22px" height="22px" viewBox="0 0 22 22" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 48.2 (47327) - http://www.bohemiancoding.com/sketch --> + <title>popout</title> + <desc>Created with Sketch.</desc> + <defs> + <polygon id="path-1" points="-0.00035 0 10.9999 0 10.9999 10.9997 -0.00035 10.9997"></polygon> + </defs> + <g id="MetaMascara-Mobile---structured-TOKEN" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-327.000000, -96.000000)"> + <g id="popout" transform="translate(327.000000, 96.000000)"> + <g id="Group-3" transform="translate(11.000000, 0.000000)"> + <mask id="mask-2" fill="white"> + <use xlink:href="#path-1"></use> + </mask> + <g id="Clip-2"></g> + <path d="M10.9229,0.6177 C10.8209,0.3737 10.6269,0.1787 10.3819,0.0767 C10.2599,0.0267 10.1309,-0.0003 9.9999,-0.0003 L3.9999,-0.0003 C3.4479,-0.0003 2.9999,0.4477 2.9999,0.9997 C2.9999,1.5527 3.4479,1.9997 3.9999,1.9997 L7.5859,1.9997 L0.2929,9.2927 C-0.0981,9.6837 -0.0981,10.3167 0.2929,10.7067 C0.4879,10.9027 0.7439,10.9997 0.9999,10.9997 C1.2559,10.9997 1.5119,10.9027 1.7069,10.7067 L8.9999,3.4137 L8.9999,6.9997 C8.9999,7.5527 9.4479,7.9997 9.9999,7.9997 C10.5519,7.9997 10.9999,7.5527 10.9999,6.9997 L10.9999,0.9997 C10.9999,0.8697 10.9739,0.7407 10.9229,0.6177" id="Fill-1" fill="#4A4A4A" mask="url(#mask-2)"></path> + </g> + <path d="M19,10 C18.448,10 18,10.448 18,11 L18,19 C18,19.551 17.551,20 17,20 L3,20 C2.449,20 2,19.551 2,19 L2,5 C2,4.449 2.449,4 3,4 L11,4 C11.552,4 12,3.552 12,3 C12,2.448 11.552,2 11,2 L3,2 C1.346,2 0,3.346 0,5 L0,19 C0,20.654 1.346,22 3,22 L17,22 C18.654,22 20,20.654 20,19 L20,11 C20,10.448 19.552,10 19,10" id="Fill-4" fill="#4A4A4A"></path> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/settings.svg b/app/images/settings.svg index fe61320a5..cf9b298dd 100644 --- a/app/images/settings.svg +++ b/app/images/settings.svg @@ -1,24 +1,22 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> -<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> -<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" - width="24.088px" height="24px" viewBox="0 0 24.088 24" enable-background="new 0 0 24.088 24" xml:space="preserve"> -<path d="M21.525,10.147c-0.41-0.059-0.847-0.428-0.974-0.82l-0.608-1.481c-0.191-0.365-0.146-0.935,0.1-1.264l0.99-1.318 - c0.246-0.33,0.227-0.854-0.047-1.162l-1.084-1.086c-0.31-0.272-0.832-0.293-1.164-0.045l-1.316,0.988 - c-0.33,0.248-0.898,0.293-1.264,0.101l-1.48-0.609c-0.395-0.126-0.764-0.562-0.82-0.971l-0.233-1.629 - c-0.058-0.409-0.44-0.778-0.851-0.822c0,0-0.254-0.026-0.77-0.026c-0.514,0-0.77,0.026-0.77,0.026 - c-0.41,0.044-0.793,0.413-0.852,0.822L10.15,2.48c-0.059,0.409-0.428,0.845-0.82,0.971L7.85,4.06 - C7.484,4.251,6.916,4.207,6.586,3.959L5.268,2.97c-0.33-0.248-0.854-0.228-1.162,0.045L3.021,4.101 - C2.749,4.41,2.727,4.933,2.975,5.263l0.988,1.318c0.249,0.33,0.293,0.899,0.102,1.264l-0.61,1.482 - c-0.125,0.393-0.562,0.762-0.972,0.82l-1.629,0.231c-0.408,0.059-0.776,0.442-0.82,0.853c0,0-0.026,0.255-0.026,0.77 - c0,0.516,0.026,0.77,0.026,0.77c0.044,0.412,0.412,0.793,0.82,0.853l1.629,0.231c0.408,0.06,0.847,0.429,0.972,0.82l0.61,1.48 - c0.191,0.365,0.146,0.936-0.102,1.264l-0.988,1.318c-0.248,0.33-0.308,0.779-0.132,0.994c0.175,0.217,0.677,0.752,0.679,0.754 - c0,0.002,0.17,0.156,0.375,0.344c0.203,0.188,1.041,0.449,1.371,0.203l1.317-0.99c0.33-0.246,0.897-0.293,1.265-0.1l1.479,0.608 - c0.394,0.125,0.763,0.562,0.819,0.972l0.233,1.629c0.058,0.408,0.44,0.779,0.853,0.822c0,0,0.254,0.026,0.769,0.026 - s0.771-0.026,0.771-0.026c0.408-0.043,0.793-0.414,0.85-0.822l0.234-1.629c0.057-0.408,0.426-0.847,0.819-0.972l1.479-0.61 - c0.365-0.191,0.935-0.146,1.265,0.102l1.317,0.99c0.332,0.246,0.854,0.227,1.164-0.047l1.082-1.084 - c0.273-0.312,0.293-0.834,0.047-1.164l-0.989-1.318c-0.246-0.328-0.291-0.898-0.101-1.264l0.609-1.48 - c0.127-0.393,0.562-0.762,0.973-0.82l1.627-0.231c0.41-0.06,0.779-0.44,0.822-0.853c0,0,0.027-0.254,0.027-0.77 - c0-0.515-0.027-0.77-0.027-0.77c-0.043-0.41-0.412-0.794-0.822-0.853L21.525,10.147z M12.004,15.001c-1.657,0-3-1.344-3-3 - c0-1.657,1.343-3,3-3s3,1.344,3,3S13.66,15.001,12.004,15.001z"/> -</svg> +<?xml version="1.0" encoding="UTF-8"?> +<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <!-- Generator: Sketch 47 (45396) - http://www.bohemiancoding.com/sketch --> + <title>settings</title> + <desc>Created with Sketch.</desc> + <defs> + <polygon id="path-1" points="20 10 20 19.9998 0 19.9998 0 10 0 0.0002 20 0.0002"></polygon> + </defs> + <g id="MetaMascara-v2" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> + <g id="account-dropdown-top-bar-IXD" transform="translate(-25.000000, -826.000000)"> + <g id="Group-6" transform="translate(4.000000, 646.000000)"> + <g id="settings" transform="translate(21.000000, 180.000000)"> + <mask id="mask-2" fill="white"> + <use xlink:href="#path-1"></use> + </mask> + <g id="Clip-2"></g> + <path d="M10,13.6602 C7.979,13.6602 6.34,12.0212 6.34,10.0002 C6.34,7.9782 7.979,6.3402 10,6.3402 C12.021,6.3402 13.66,7.9782 13.66,10.0002 C13.66,12.0212 12.021,13.6602 10,13.6602 L10,13.6602 Z M19.157,11.8112 C19.53,11.8112 19.878,11.5092 19.929,11.1392 C19.929,11.1392 20,10.6182 20,10.0002 C20,9.3822 19.929,8.8622 19.929,8.8622 C19.878,8.4922 19.53,8.1892 19.157,8.1892 L17.228,8.1892 C16.854,8.1892 16.466,7.9512 16.365,7.6602 C16.265,7.3682 16.127,6.4352 16.391,6.1712 L17.755,4.8072 C18.019,4.5432 18.039,4.0922 17.8,3.8052 L16.195,2.2002 C15.908,1.9602 15.458,1.9812 15.193,2.2452 L13.829,3.6092 C13.565,3.8732 13.125,3.9802 12.852,3.8462 C12.578,3.7122 11.812,3.1462 11.812,2.7732 L11.812,0.8432 C11.812,0.4702 11.509,0.1222 11.139,0.0722 C11.139,0.0722 10.619,0.0002 10,0.0002 C9.382,0.0002 8.862,0.0722 8.862,0.0722 C8.492,0.1222 8.189,0.4702 8.189,0.8432 L8.189,2.7732 C8.189,3.1462 7.951,3.5352 7.66,3.6352 C7.369,3.7352 6.435,3.8732 6.171,3.6092 L4.807,2.2452 C4.542,1.9812 4.092,1.9612 3.805,2.2002 L2.2,3.8052 C1.96,4.0922 1.981,4.5432 2.245,4.8072 L3.609,6.1712 C3.873,6.4352 3.98,6.8752 3.846,7.1482 C3.711,7.4222 3.146,8.1892 2.773,8.1892 L0.843,8.1892 C0.47,8.1892 0.123,8.4922 0.072,8.8622 C0.072,8.8622 0,9.3822 0,10.0002 C0,10.6182 0.072,11.1392 0.072,11.1392 C0.123,11.5092 0.47,11.8112 0.843,11.8112 L2.773,11.8112 C3.146,11.8112 3.535,12.0502 3.635,12.3412 C3.735,12.6322 3.874,13.5642 3.609,13.8292 L2.246,15.1932 C1.981,15.4572 1.961,15.9082 2.2,16.1952 L3.805,17.8002 C4.092,18.0392 4.542,18.0192 4.807,17.7552 L6.171,16.3902 C6.435,16.1272 6.875,16.0202 7.148,16.1542 C7.422,16.2882 8.189,16.8532 8.189,17.2272 L8.189,19.1572 C8.189,19.5302 8.492,19.8782 8.862,19.9292 C8.862,19.9292 9.382,20.0002 10,20.0002 C10.619,20.0002 11.139,19.9292 11.139,19.9292 C11.509,19.8772 11.812,19.5302 11.812,19.1572 L11.812,17.2272 C11.812,16.8532 12.05,16.4662 12.341,16.3652 C12.632,16.2642 13.565,16.1272 13.829,16.3902 L15.193,17.7552 C15.458,18.0182 15.908,18.0392 16.195,17.8002 L17.8,16.1952 C18.039,15.9082 18.02,15.4582 17.755,15.1932 L16.391,13.8292 C16.127,13.5652 16.021,13.1252 16.154,12.8512 C16.288,12.5782 16.854,11.8112 17.228,11.8112 L19.157,11.8112 Z" id="Fill-1" fill="#B3B3B3" mask="url(#mask-2)"></path> + </g> + </g> + </g> + </g> +</svg>
\ No newline at end of file diff --git a/app/images/shapeshift logo.png b/app/images/shapeshift logo.png Binary files differnew file mode 100644 index 000000000..ac8faba5b --- /dev/null +++ b/app/images/shapeshift logo.png diff --git a/app/manifest.json b/app/manifest.json index 3a80cc4fc..c4e134053 100644 --- a/app/manifest.json +++ b/app/manifest.json @@ -1,7 +1,7 @@ { "name": "MetaMask", "short_name": "Metamask", - "version": "3.14.2", + "version": "4.0.12", "manifest_version": 2, "author": "https://metamask.io", "description": "Ethereum Browser Extension", diff --git a/app/notification.html b/app/notification.html index cc485da7f..f10cbbf41 100644 --- a/app/notification.html +++ b/app/notification.html @@ -1,5 +1,5 @@ <!doctype html> -<html> +<html style="height:600px;"> <head> <meta charset="utf-8"> <title>MetaMask Notification</title> @@ -9,7 +9,7 @@ } </style> </head> - <body> + <body class="notification" style="height:600px;"> <div id="app-content"></div> <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script> </body> diff --git a/app/popup.html b/app/popup.html index d09b09315..bf09b97ca 100644 --- a/app/popup.html +++ b/app/popup.html @@ -1,11 +1,11 @@ <!doctype html> -<html> +<html style="width:357px; height:600px;"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1 user-scalable=no"> <title>MetaMask Plugin</title> </head> - <body style="width:357px; height:500px;"> + <body style="width:357px; height:600px;"> <div id="app-content"></div> <script src="./scripts/popup.js" type="text/javascript" charset="utf-8"></script> </body> diff --git a/app/scripts/background.js b/app/scripts/background.js index 7bececba1..9dd438dc9 100644 --- a/app/scripts/background.js +++ b/app/scripts/background.js @@ -38,6 +38,7 @@ const isIE = !!document.documentMode const isEdge = !isIE && !!window.StyleMedia let popupIsOpen = false +let openMetamaskTabsIDs = {} // state persistence const diskStore = new LocalStorageStore({ storageKey: STORAGE_KEY }) @@ -125,9 +126,15 @@ function setupController (initState) { popupIsOpen = popupIsOpen || (remotePort.name === 'popup') controller.setupTrustedCommunication(portStream, 'MetaMask') // record popup as closed + if (remotePort.sender.url.match(/home.html$/)) { + openMetamaskTabsIDs[remotePort.sender.tab.id] = true + } if (remotePort.name === 'popup') { endOfStream(portStream, () => { popupIsOpen = false + if (remotePort.sender.url.match(/home.html$/)) { + openMetamaskTabsIDs[remotePort.sender.tab.id] = false + } }) } } else { @@ -170,7 +177,10 @@ function setupController (initState) { // popup trigger function triggerUi () { - if (!popupIsOpen) notificationManager.showPopup() + extension.tabs.query({ active: true }, (tabs) => { + const currentlyActiveMetamaskTab = tabs.find(tab => openMetamaskTabsIDs[tab.id]) + if (!popupIsOpen && !currentlyActiveMetamaskTab) notificationManager.showPopup() + }) } // On first install, open a window to MetaMask website to how-it-works. diff --git a/app/scripts/config.js b/app/scripts/config.js index 1d4ff7c0d..74c5b576e 100644 --- a/app/scripts/config.js +++ b/app/scripts/config.js @@ -4,6 +4,15 @@ const KOVAN_RPC_URL = 'https://kovan.infura.io/metamask' const RINKEBY_RPC_URL = 'https://rinkeby.infura.io/metamask' const LOCALHOST_RPC_URL = 'http://localhost:8545' +const MAINET_RPC_URL_BETA = 'https://mainnet.infura.io/metamask2' +const ROPSTEN_RPC_URL_BETA = 'https://ropsten.infura.io/metamask2' +const KOVAN_RPC_URL_BETA = 'https://kovan.infura.io/metamask2' +const RINKEBY_RPC_URL_BETA = 'https://rinkeby.infura.io/metamask2' + +const DEFAULT_RPC = 'rinkeby' +const OLD_UI_NETWORK_TYPE = 'network' +const BETA_UI_NETWORK_TYPE = 'networkBeta' + global.METAMASK_DEBUG = 'GULP_METAMASK_DEBUG' module.exports = { @@ -14,9 +23,22 @@ module.exports = { kovan: KOVAN_RPC_URL, rinkeby: RINKEBY_RPC_URL, }, + // Used for beta UI + networkBeta: { + localhost: LOCALHOST_RPC_URL, + mainnet: MAINET_RPC_URL_BETA, + ropsten: ROPSTEN_RPC_URL_BETA, + kovan: KOVAN_RPC_URL_BETA, + rinkeby: RINKEBY_RPC_URL_BETA, + }, networkNames: { 3: 'Ropsten', 4: 'Rinkeby', 42: 'Kovan', }, + enums: { + DEFAULT_RPC, + OLD_UI_NETWORK_TYPE, + BETA_UI_NETWORK_TYPE, + }, } diff --git a/app/scripts/controllers/network.js b/app/scripts/controllers/network.js index a1db8946a..617456cd7 100644 --- a/app/scripts/controllers/network.js +++ b/app/scripts/controllers/network.js @@ -8,14 +8,19 @@ const ComposedStore = require('obs-store/lib/composed') const extend = require('xtend') const EthQuery = require('eth-query') const createEventEmitterProxy = require('../lib/events-proxy.js') -const RPC_ADDRESS_LIST = require('../config.js').network -const DEFAULT_RPC = RPC_ADDRESS_LIST['rinkeby'] +const networkConfig = require('../config.js') +const { OLD_UI_NETWORK_TYPE, DEFAULT_RPC } = networkConfig.enums const INFURA_PROVIDER_TYPES = ['ropsten', 'rinkeby', 'kovan', 'mainnet'] module.exports = class NetworkController extends EventEmitter { constructor (config) { super() + + this._networkEndpointVersion = OLD_UI_NETWORK_TYPE + this._networkEndpoints = this.getNetworkEndpoints(OLD_UI_NETWORK_TYPE) + this._defaultRpc = this._networkEndpoints[DEFAULT_RPC] + config.provider.rpcTarget = this.getRpcAddressForType(config.provider.type, config.provider) this.networkStore = new ObservableStore('loading') this.providerStore = new ObservableStore(config.provider) @@ -25,6 +30,23 @@ module.exports = class NetworkController extends EventEmitter { this.on('networkDidChange', this.lookupNetwork) } + async setNetworkEndpoints (version) { + if (version === this._networkEndpointVersion) { + return + } + + this._networkEndpointVersion = version + this._networkEndpoints = this.getNetworkEndpoints(version) + this._defaultRpc = this._networkEndpoints[DEFAULT_RPC] + const { type } = this.getProviderConfig() + + return this.setProviderType(type, true) + } + + getNetworkEndpoints (version = OLD_UI_NETWORK_TYPE) { + return networkConfig[version] + } + initializeProvider (_providerParams) { this._baseProviderParams = _providerParams const { type, rpcTarget } = this.providerStore.getState() @@ -84,10 +106,13 @@ module.exports = class NetworkController extends EventEmitter { return this.getRpcAddressForType(provider.type) } - async setProviderType (type) { + async setProviderType (type, forceUpdate = false) { assert(type !== 'rpc', `NetworkController.setProviderType - cannot connect by type "rpc"`) // skip if type already matches - if (type === this.getProviderConfig().type) return + if (type === this.getProviderConfig().type && !forceUpdate) { + return + } + const rpcTarget = this.getRpcAddressForType(type) assert(rpcTarget, `NetworkController - unknown rpc address for type "${type}"`) this.providerStore.updateState({ type, rpcTarget }) @@ -99,8 +124,11 @@ module.exports = class NetworkController extends EventEmitter { } getRpcAddressForType (type, provider = this.getProviderConfig()) { - if (RPC_ADDRESS_LIST[type]) return RPC_ADDRESS_LIST[type] - return provider && provider.rpcTarget ? provider.rpcTarget : DEFAULT_RPC + if (this._networkEndpoints[type]) { + return this._networkEndpoints[type] + } + + return provider && provider.rpcTarget ? provider.rpcTarget : this._defaultRpc } // diff --git a/app/scripts/controllers/preferences.js b/app/scripts/controllers/preferences.js index c42f47037..39d15fd83 100644 --- a/app/scripts/controllers/preferences.js +++ b/app/scripts/controllers/preferences.js @@ -9,11 +9,21 @@ class PreferencesController { frequentRpcList: [], currentAccountTab: 'history', tokens: [], + useBlockie: false, + featureFlags: {}, }, opts.initState) this.store = new ObservableStore(initState) } // PUBLIC METHODS + setUseBlockie (val) { + this.store.updateState({ useBlockie: val }) + } + + getUseBlockie () { + return this.store.getState().useBlockie + } + setSelectedAddress (_address) { return new Promise((resolve, reject) => { const address = normalizeAddress(_address) @@ -43,6 +53,17 @@ class PreferencesController { } this.store.updateState({ tokens }) + + return Promise.resolve(tokens) + } + + removeToken (rawAddress) { + const tokens = this.store.getState().tokens + + const updatedTokens = tokens.filter(token => token.address !== rawAddress) + + this.store.updateState({ tokens: updatedTokens }) + return Promise.resolve(updatedTokens) } getTokens () { @@ -82,6 +103,22 @@ class PreferencesController { getFrequentRpcList () { return this.store.getState().frequentRpcList } + + setFeatureFlag (feature, activated) { + const currentFeatureFlags = this.store.getState().featureFlags + const updatedFeatureFlags = { + ...currentFeatureFlags, + [feature]: activated, + } + + this.store.updateState({ featureFlags: updatedFeatureFlags }) + + return Promise.resolve(updatedFeatureFlags) + } + + getFeatureFlags () { + return this.store.getState().featureFlags + } // // PRIVATE METHODS // diff --git a/app/scripts/controllers/transactions.js b/app/scripts/controllers/transactions.js index a3670155a..ef5578d5a 100644 --- a/app/scripts/controllers/transactions.js +++ b/app/scripts/controllers/transactions.js @@ -233,6 +233,10 @@ module.exports = class TransactionController extends EventEmitter { this.txStateManager.updateTx(txMeta, 'retryTransaction: manual retry') } + async updateTransaction (txMeta) { + this.txStateManager.updateTx(txMeta, 'confTx: user updated transaction') + } + async updateAndApproveTransaction (txMeta) { this.txStateManager.updateTx(txMeta, 'confTx: user approved transaction') await this.approveTransaction(txMeta.id) diff --git a/app/scripts/lib/config-manager.js b/app/scripts/lib/config-manager.js index 9c0dffe9c..34b603b96 100644 --- a/app/scripts/lib/config-manager.js +++ b/app/scripts/lib/config-manager.js @@ -42,6 +42,17 @@ ConfigManager.prototype.getData = function () { return this.store.getState() } +ConfigManager.prototype.setPasswordForgotten = function (passwordForgottenState) { + const data = this.getData() + data.forgottenPassword = passwordForgottenState + this.setData(data) +} + +ConfigManager.prototype.getPasswordForgotten = function (passwordForgottenState) { + const data = this.getData() + return data.forgottenPassword +} + ConfigManager.prototype.setWallet = function (wallet) { var data = this.getData() data.wallet = wallet diff --git a/app/scripts/lib/environment-type.js b/app/scripts/lib/environment-type.js new file mode 100644 index 000000000..7966926eb --- /dev/null +++ b/app/scripts/lib/environment-type.js @@ -0,0 +1,10 @@ +module.exports = function environmentType () { + const url = window.location.href + if (url.match(/popup.html$/)) { + return 'popup' + } else if (url.match(/home.html$/)) { + return 'responsive' + } else { + return 'notification' + } +} diff --git a/app/scripts/lib/is-popup-or-notification.js b/app/scripts/lib/is-popup-or-notification.js index 693fa8751..e2999411f 100644 --- a/app/scripts/lib/is-popup-or-notification.js +++ b/app/scripts/lib/is-popup-or-notification.js @@ -1,6 +1,9 @@ module.exports = function isPopupOrNotification () { const url = window.location.href - if (url.match(/popup.html$/)) { + // if (url.match(/popup.html$/) || url.match(/home.html$/)) { + // Below regexes needed for feature toggles (e.g. see line ~340 in ui/app/app.js) + // Revert below regexes to above commented out regexes before merge to master + if (url.match(/popup.html(?:\?.+)*$/) || url.match(/home.html(?:\?.+)*$/)) { return 'popup' } else { return 'notification' diff --git a/app/scripts/lib/notification-manager.js b/app/scripts/lib/notification-manager.js index 7846ef7f0..adaf60c65 100644 --- a/app/scripts/lib/notification-manager.js +++ b/app/scripts/lib/notification-manager.js @@ -1,5 +1,5 @@ const extension = require('extensionizer') -const height = 520 +const height = 620 const width = 360 diff --git a/app/scripts/metamask-controller.js b/app/scripts/metamask-controller.js index 428c78e2c..ad4e71792 100644 --- a/app/scripts/metamask-controller.js +++ b/app/scripts/metamask-controller.js @@ -310,6 +310,7 @@ module.exports = class MetamaskController extends EventEmitter { { lostAccounts: this.configManager.getLostAccounts(), seedWords: this.configManager.getSeedWords(), + forgottenPassword: this.configManager.getPasswordForgotten(), } ) } @@ -330,7 +331,10 @@ module.exports = class MetamaskController extends EventEmitter { // etc getState: (cb) => cb(null, this.getState()), setCurrentCurrency: this.setCurrentCurrency.bind(this), + setUseBlockie: this.setUseBlockie.bind(this), markAccountsFound: this.markAccountsFound.bind(this), + markPasswordForgotten: this.markPasswordForgotten.bind(this), + unMarkPasswordForgotten: this.unMarkPasswordForgotten.bind(this), // coinbase buyEth: this.buyEth.bind(this), @@ -348,13 +352,16 @@ module.exports = class MetamaskController extends EventEmitter { submitPassword: nodeify(keyringController.submitPassword, keyringController), // network management + setNetworkEndpoints: nodeify(networkController.setNetworkEndpoints, networkController), setProviderType: nodeify(networkController.setProviderType, networkController), setCustomRpc: nodeify(this.setCustomRpc, this), // PreferencesController setSelectedAddress: nodeify(preferencesController.setSelectedAddress, preferencesController), addToken: nodeify(preferencesController.addToken, preferencesController), + removeToken: nodeify(preferencesController.removeToken, preferencesController), setCurrentAccountTab: nodeify(preferencesController.setCurrentAccountTab, preferencesController), + setFeatureFlag: nodeify(preferencesController.setFeatureFlag, preferencesController), // AddressController setAddressBook: nodeify(addressBookController.setAddressBook, addressBookController), @@ -369,6 +376,7 @@ module.exports = class MetamaskController extends EventEmitter { // txController cancelTransaction: nodeify(txController.cancelTransaction, txController), + updateTransaction: nodeify(txController.updateTransaction, txController), updateAndApproveTransaction: nodeify(txController.updateAndApproveTransaction, txController), retryTransaction: nodeify(this.retryTransaction, this), @@ -789,6 +797,18 @@ module.exports = class MetamaskController extends EventEmitter { cb(null, this.getState()) } + markPasswordForgotten(cb) { + this.configManager.setPasswordForgotten(true) + this.sendUpdate() + cb() + } + + unMarkPasswordForgotten(cb) { + this.configManager.setPasswordForgotten(false) + this.sendUpdate() + cb() + } + restoreOldVaultAccounts (migratorOutput) { const { serialized } = migratorOutput return this.keyringController.restoreKeyring(serialized) @@ -856,6 +876,15 @@ module.exports = class MetamaskController extends EventEmitter { return rpcTarget } + setUseBlockie (val, cb) { + try { + this.preferencesController.setUseBlockie(val) + cb(null) + } catch (err) { + cb(err) + } + } + recordFirstTimeInfo (initState) { if (!('firstTimeInfo' in initState)) { initState.firstTimeInfo = { diff --git a/app/scripts/platforms/extension.js b/app/scripts/platforms/extension.js index 2f47512eb..f5cc255d1 100644 --- a/app/scripts/platforms/extension.js +++ b/app/scripts/platforms/extension.js @@ -17,6 +17,11 @@ class ExtensionPlatform { return extension.runtime.getManifest().version } + openExtensionInBrowser () { + const extensionURL = extension.runtime.getURL('home.html') + this.openWindow({ url: extensionURL }) + } + getPlatformInfo (cb) { try { extension.runtime.getPlatformInfo((platform) => { diff --git a/app/scripts/popup-core.js b/app/scripts/popup-core.js index f1eb394d7..2e4334bb1 100644 --- a/app/scripts/popup-core.js +++ b/app/scripts/popup-core.js @@ -1,6 +1,7 @@ const EventEmitter = require('events').EventEmitter const async = require('async') const Dnode = require('dnode') +const Eth = require('ethjs') const EthQuery = require('eth-query') const launchMetamaskUi = require('../../ui') const StreamProvider = require('web3-stream-provider') @@ -34,6 +35,7 @@ function setupWeb3Connection (connectionStream) { providerStream.on('error', console.error.bind(console)) global.ethereumProvider = providerStream global.ethQuery = new EthQuery(providerStream) + global.eth = new Eth(providerStream) } function setupControllerConnection (connectionStream, cb) { diff --git a/app/scripts/popup.js b/app/scripts/popup.js index 860cc567d..53ab00e00 100644 --- a/app/scripts/popup.js +++ b/app/scripts/popup.js @@ -1,5 +1,6 @@ const injectCss = require('inject-css') -const MetaMaskUiCss = require('../../ui/css') +const OldMetaMaskUiCss = require('../../old-ui/css') +const NewMetaMaskUiCss = require('../../ui/css') const startPopup = require('./popup-core') const PortStream = require('./lib/port-stream.js') const isPopupOrNotification = require('./lib/is-popup-or-notification') @@ -17,8 +18,8 @@ const release = global.platform.getVersion() setupRaven({ release }) // inject css -const css = MetaMaskUiCss() -injectCss(css) +// const css = MetaMaskUiCss() +// injectCss(css) // identify window type (popup, notification) const windowType = isPopupOrNotification() @@ -33,8 +34,30 @@ const connectionStream = new PortStream(extensionPort) const container = document.getElementById('app-content') startPopup({ container, connectionStream }, (err, store) => { if (err) return displayCriticalError(err) + + // Code commented out until we begin auto adding users to NewUI + // const { isMascara, identities = {}, featureFlags = {} } = store.getState().metamask + // const firstTime = Object.keys(identities).length === 0 + const { isMascara, featureFlags = {} } = store.getState().metamask + let betaUIState = featureFlags.betaUI + + // Code commented out until we begin auto adding users to NewUI + // const useBetaCss = isMascara || firstTime || betaUIState + const useBetaCss = isMascara || betaUIState + + let css = useBetaCss ? NewMetaMaskUiCss() : OldMetaMaskUiCss() + let deleteInjectedCss = injectCss(css) + let newBetaUIState + store.subscribe(() => { const state = store.getState() + newBetaUIState = state.metamask.featureFlags.betaUI + if (newBetaUIState !== betaUIState) { + deleteInjectedCss() + betaUIState = newBetaUIState + css = betaUIState ? NewMetaMaskUiCss() : OldMetaMaskUiCss() + deleteInjectedCss = injectCss(css) + } if (state.appState.shouldClose) notificationManager.closePopup() }) }) |