From 35703539d0f2b4ddb3b11d0de8c9634af59ab71f Mon Sep 17 00:00:00 2001 From: Hsuan Lee Date: Wed, 6 Mar 2019 17:46:50 +0800 Subject: Deploy @dexon-foundation/0x.js --- packages/website/.gitignore | 1 - packages/website/README.md | 69 -- packages/website/contracts/Mintable.json | 189 ---- packages/website/less/all.less | 139 --- packages/website/less/normalize.less | 349 -------- packages/website/md/docs/0xjs/0.0.1/async.md | 26 - packages/website/md/docs/0xjs/0.0.1/errors.md | 1 - .../website/md/docs/0xjs/0.0.1/installation.md | 31 - .../website/md/docs/0xjs/0.0.1/introduction.md | 1 - packages/website/md/docs/0xjs/0.0.1/versioning.md | 1 - packages/website/md/docs/0xjs/1.0.1/async.md | 31 - .../website/md/docs/0xjs/1.0.1/installation.md | 40 - .../website/md/docs/0xjs/1.0.1/introduction.md | 1 - packages/website/md/docs/0xjs/1.0.1/versioning.md | 1 - packages/website/md/docs/0xjs/2.0.0/async.md | 26 - .../website/md/docs/0xjs/2.0.0/installation.md | 38 - .../website/md/docs/asset_buyer/installation.md | 17 - .../website/md/docs/asset_buyer/introduction.md | 1 - packages/website/md/docs/asset_buyer/usage.md | 39 - packages/website/md/docs/connect/1/installation.md | 15 - packages/website/md/docs/connect/1/introduction.md | 1 - packages/website/md/docs/connect/2/introduction.md | 1 - packages/website/md/docs/connect/3/installation.md | 15 - .../md/docs/contract_wrappers/1/installation.md | 11 - .../md/docs/contract_wrappers/1/introduction.md | 1 - .../md/docs/contract_wrappers/2/installation.md | 11 - .../website/md/docs/ethereum_types/installation.md | 11 - .../website/md/docs/ethereum_types/introduction.md | 1 - .../website/md/docs/json_schemas/1/installation.md | 17 - .../website/md/docs/json_schemas/1/introduction.md | 3 - packages/website/md/docs/json_schemas/1/schemas.md | 28 - packages/website/md/docs/json_schemas/1/usage.md | 14 - packages/website/md/docs/json_schemas/2/schemas.md | 40 - .../website/md/docs/json_schemas/3/installation.md | 17 - .../website/md/docs/json_schemas/3/introduction.md | 3 - packages/website/md/docs/json_schemas/3/schemas.md | 41 - packages/website/md/docs/json_schemas/3/usage.md | 14 - .../website/md/docs/migrations/1/installation.md | 17 - .../website/md/docs/migrations/1/introduction.md | 1 - .../website/md/docs/order_utils/1/installation.md | 17 - .../website/md/docs/order_utils/1/introduction.md | 1 - .../website/md/docs/order_utils/2/installation.md | 17 - .../website/md/docs/order_utils/2/introduction.md | 1 - .../md/docs/order_watcher/1/installation.md | 17 - .../md/docs/order_watcher/1/introduction.md | 1 - .../md/docs/order_watcher/2/installation.md | 17 - .../md/docs/order_watcher/2/introduction.md | 1 - .../md/docs/smart_contracts/1/introduction.md | 1 - .../md/docs/smart_contracts/2/introduction.md | 6 - .../website/md/docs/sol-compiler/1/installation.md | 23 - .../website/md/docs/sol-compiler/1/introduction.md | 8 - packages/website/md/docs/sol-compiler/1/usage.md | 24 - .../website/md/docs/sol-compiler/2/installation.md | 23 - packages/website/md/docs/sol-compiler/2/usage.md | 24 - .../website/md/docs/sol_coverage/installation.md | 17 - .../website/md/docs/sol_coverage/introduction.md | 1 - packages/website/md/docs/sol_coverage/usage.md | 74 -- .../website/md/docs/sol_profiler/installation.md | 17 - .../website/md/docs/sol_profiler/introduction.md | 1 - packages/website/md/docs/sol_profiler/usage.md | 74 -- packages/website/md/docs/sol_trace/installation.md | 17 - packages/website/md/docs/sol_trace/introduction.md | 1 - packages/website/md/docs/sol_trace/usage.md | 62 -- .../website/md/docs/subproviders/1/installation.md | 15 - .../website/md/docs/subproviders/1/introduction.md | 1 - .../md/docs/subproviders/1/ledger_node_hid.md | 17 - .../website/md/docs/subproviders/2/installation.md | 15 - .../website/md/docs/web3_wrapper/1/installation.md | 25 - .../website/md/docs/web3_wrapper/1/introduction.md | 1 - .../website/md/docs/web3_wrapper/2/installation.md | 25 - packages/website/package.json | 128 --- packages/website/public/css/basscss.min.css | 1 - .../public/css/basscss_responsive_custom.css | 106 --- .../public/css/basscss_responsive_margin.css | 453 ---------- .../public/css/basscss_responsive_padding.css | 134 --- .../public/css/basscss_responsive_type_scale.css | 35 - packages/website/public/css/formular.css | 45 - packages/website/public/css/github-gist.css | 71 -- .../public/css/material-design-iconic-font.min.css | 1 - packages/website/public/css/roboto.css | 89 -- packages/website/public/css/roboto_mono.css | 69 -- packages/website/public/fonts/Formular-Light.woff | Bin 44630 -> 0 bytes packages/website/public/fonts/Formular-Light.woff2 | Bin 34337 -> 0 bytes .../website/public/fonts/Formular-Regular.woff | Bin 45102 -> 0 bytes .../website/public/fonts/Formular-Regular.woff2 | Bin 34607 -> 0 bytes .../public/fonts/Material-Design-Iconic-Font.eot | Bin 42495 -> 0 bytes .../public/fonts/Material-Design-Iconic-Font.svg | 787 ----------------- .../public/fonts/Material-Design-Iconic-Font.ttf | Bin 99212 -> 0 bytes .../public/fonts/Material-Design-Iconic-Font.woff | Bin 50312 -> 0 bytes .../public/fonts/Material-Design-Iconic-Font.woff2 | Bin 38384 -> 0 bytes packages/website/public/fonts/Roboto-Black.ttf | Bin 171480 -> 0 bytes .../website/public/fonts/Roboto-BlackItalic.ttf | Bin 177552 -> 0 bytes packages/website/public/fonts/Roboto-Bold.ttf | Bin 170760 -> 0 bytes .../website/public/fonts/Roboto-BoldItalic.ttf | Bin 174952 -> 0 bytes packages/website/public/fonts/Roboto-Italic.ttf | Bin 173932 -> 0 bytes packages/website/public/fonts/Roboto-Light.ttf | Bin 170420 -> 0 bytes .../website/public/fonts/Roboto-LightItalic.ttf | Bin 176616 -> 0 bytes packages/website/public/fonts/Roboto-Medium.ttf | Bin 172064 -> 0 bytes .../website/public/fonts/Roboto-MediumItalic.ttf | Bin 176864 -> 0 bytes packages/website/public/fonts/Roboto-Regular.ttf | Bin 171676 -> 0 bytes packages/website/public/fonts/Roboto-Thin.ttf | Bin 171904 -> 0 bytes .../website/public/fonts/Roboto-ThinItalic.ttf | Bin 176300 -> 0 bytes packages/website/public/fonts/RobotoMono-Bold.ttf | Bin 114752 -> 0 bytes .../website/public/fonts/RobotoMono-BoldItalic.ttf | Bin 122808 -> 0 bytes .../website/public/fonts/RobotoMono-Italic.ttf | Bin 120832 -> 0 bytes packages/website/public/fonts/RobotoMono-Light.ttf | Bin 118976 -> 0 bytes .../public/fonts/RobotoMono-LightItalic.ttf | Bin 127568 -> 0 bytes .../website/public/fonts/RobotoMono-Medium.ttf | Bin 114696 -> 0 bytes .../public/fonts/RobotoMono-MediumItalic.ttf | Bin 123640 -> 0 bytes .../website/public/fonts/RobotoMono-Regular.ttf | Bin 114624 -> 0 bytes packages/website/public/fonts/RobotoMono-Thin.ttf | Bin 118132 -> 0 bytes .../website/public/fonts/RobotoMono-ThinItalic.ttf | Bin 121456 -> 0 bytes packages/website/public/gifs/genesis.gif | Bin 735849 -> 0 bytes .../images/0x-instant/0x-instant-widgets.png | Bin 64041 -> 0 bytes .../images/0x-instant/0x-instant-widgets@2x.png | Bin 190593 -> 0 bytes .../website/public/images/0x-instant/widget-1.png | Bin 27160 -> 0 bytes .../website/public/images/0x-instant/widget-2.png | Bin 47878 -> 0 bytes .../website/public/images/0x-instant/widget-3.png | Bin 27505 -> 0 bytes .../website/public/images/0x-instant/widget-4.png | Bin 30727 -> 0 bytes .../website/public/images/0x-instant/widget-5.png | Bin 144454 -> 0 bytes .../website/public/images/0x-instant/widget-6.png | Bin 28382 -> 0 bytes packages/website/public/images/0x_logo.png | Bin 64503 -> 0 bytes .../website/public/images/about/about-office.png | Bin 474673 -> 0 bytes .../website/public/images/banner/bottomofcta.png | Bin 15803 -> 0 bytes packages/website/public/images/banner/topofcta.png | Bin 13342 -> 0 bytes packages/website/public/images/clients/bamboo.svg | 17 - packages/website/public/images/clients/emoon.svg | 8 - packages/website/public/images/clients/ercdex.svg | 16 - .../public/images/clients/godsUnchained.svg | 16 - packages/website/public/images/clients/instex.svg | 40 - .../website/public/images/clients/laketrade.svg | 13 - .../website/public/images/clients/ledgerdex.svg | 19 - .../website/public/images/clients/openrelay.svg | 22 - packages/website/public/images/clients/paradex.svg | 9 - .../website/public/images/clients/radar-relay.svg | 13 - .../website/public/images/clients/sharkrelay.svg | 32 - .../website/public/images/clients/starbitex.svg | 22 - .../website/public/images/clients/tokenjar.svg | 13 - packages/website/public/images/clients/veil.svg | 4 - .../website/public/images/coinbase_wallet_logo.png | Bin 103648 -> 0 bytes .../website/public/images/developers/logo/0x.svg | 24 - .../website/public/images/developers/logo/docs.svg | 6 - .../developers/tutorials/0x_order_basics.svg | 1 - .../developers/tutorials/build_a_relayer.svg | 3 - .../developers/tutorials/build_a_trading_bot.svg | 6 - .../developers/tutorials/develop_on_ethereum.svg | 4 - .../developers/tutorials/integrate_0x_instant.svg | 3 - .../developers/tutorials/use_shared_liquidity.svg | 3 - .../website/public/images/doc_icons/connect.png | Bin 289 -> 0 bytes .../website/public/images/doc_icons/contracts.png | Bin 930 -> 0 bytes packages/website/public/images/doc_icons/docs.png | Bin 578 -> 0 bytes packages/website/public/images/doc_icons/wiki.png | Bin 760 -> 0 bytes .../website/public/images/doc_icons/zeroExJs.png | Bin 1209 -> 0 bytes packages/website/public/images/eth_dollar.svg | 29 - packages/website/public/images/eth_token.svg | 20 - packages/website/public/images/eth_token_erc20.svg | 22 - packages/website/public/images/ether.png | Bin 4235 -> 0 bytes packages/website/public/images/ether_alt.svg | 7 - packages/website/public/images/events/berlin.jpg | Bin 108690 -> 0 bytes .../website/public/images/events/event-sample.jpg | Bin 24594 -> 0 bytes packages/website/public/images/events/london.jpg | Bin 138979 -> 0 bytes packages/website/public/images/events/sf.jpg | Bin 108324 -> 0 bytes .../public/images/favicon/favicon-2-16x16.png | Bin 684 -> 0 bytes .../public/images/favicon/favicon-2-32x32.png | Bin 1567 -> 0 bytes packages/website/public/images/favicon/favicon.ico | Bin 5430 -> 0 bytes packages/website/public/images/jobs/map@2x.png | Bin 27904 -> 0 bytes .../website/public/images/landing/0x_chips.png | Bin 170875 -> 0 bytes .../website/public/images/landing/0x_homepage.svg | 341 -------- packages/website/public/images/landing/aragon.png | Bin 4738 -> 0 bytes packages/website/public/images/landing/augur.png | Bin 4935 -> 0 bytes .../website/public/images/landing/currency.png | Bin 3348 -> 0 bytes packages/website/public/images/landing/dharma.png | Bin 4754 -> 0 bytes .../public/images/landing/digital_goods.png | Bin 3880 -> 0 bytes .../public/images/landing/distributed_network.png | Bin 37483 -> 0 bytes .../website/public/images/landing/ethfinex.png | Bin 6733 -> 0 bytes .../public/images/landing/exchange_everywhere.png | Bin 7084 -> 0 bytes .../public/images/landing/fund_management_icon.png | Bin 5552 -> 0 bytes packages/website/public/images/landing/gnosis.png | Bin 4888 -> 0 bytes .../public/images/landing/governance_icon.png | Bin 6230 -> 0 bytes .../public/images/landing/hero_chip_image.png | Bin 256493 -> 0 bytes .../website/public/images/landing/lendroid.png | Bin 4305 -> 0 bytes .../website/public/images/landing/liquidity.png | Bin 22140 -> 0 bytes .../website/public/images/landing/loans_icon.png | Bin 5900 -> 0 bytes packages/website/public/images/landing/maker.png | Bin 3501 -> 0 bytes .../website/public/images/landing/melonport.png | Bin 4841 -> 0 bytes .../website/public/images/landing/open_source.png | Bin 14696 -> 0 bytes packages/website/public/images/landing/paradex.png | Bin 6904 -> 0 bytes .../images/landing/prediction_market_icon.png | Bin 6211 -> 0 bytes .../images/landing/project_logos/amadeus.png | Bin 6156 -> 0 bytes .../public/images/landing/project_logos/anx.png | Bin 5836 -> 0 bytes .../public/images/landing/project_logos/aragon.png | Bin 4642 -> 0 bytes .../public/images/landing/project_logos/auctus.png | Bin 3751 -> 0 bytes .../public/images/landing/project_logos/augur.png | Bin 4618 -> 0 bytes .../images/landing/project_logos/blocknet.png | Bin 4697 -> 0 bytes .../images/landing/project_logos/chronobank.png | Bin 6209 -> 0 bytes .../public/images/landing/project_logos/ddex.png | Bin 5504 -> 0 bytes .../images/landing/project_logos/decent_ex.png | Bin 5100 -> 0 bytes .../images/landing/project_logos/dextroid.png | Bin 5609 -> 0 bytes .../public/images/landing/project_logos/dharma.png | Bin 5429 -> 0 bytes .../images/landing/project_logos/district0x.png | Bin 5515 -> 0 bytes .../public/images/landing/project_logos/dydx.png | Bin 4191 -> 0 bytes .../public/images/landing/project_logos/ercdex.png | Bin 3929 -> 0 bytes .../images/landing/project_logos/ethfinex.png | Bin 5486 -> 0 bytes .../public/images/landing/project_logos/ethix.png | Bin 3438 -> 0 bytes .../public/images/landing/project_logos/idt.png | Bin 3154 -> 0 bytes .../images/landing/project_logos/imToken.png | Bin 4933 -> 0 bytes .../images/landing/project_logos/lendroid.png | Bin 4866 -> 0 bytes .../public/images/landing/project_logos/maker.png | Bin 3951 -> 0 bytes .../images/landing/project_logos/melonport.png | Bin 5186 -> 0 bytes .../images/landing/project_logos/open_relay.png | Bin 6149 -> 0 bytes .../images/landing/project_logos/paradex.png | Bin 5725 -> 0 bytes .../images/landing/project_logos/radar_relay.png | Bin 5748 -> 0 bytes .../public/images/landing/project_logos/status.png | Bin 4287 -> 0 bytes .../images/landing/project_logos/the_ocean.png | Bin 6322 -> 0 bytes .../website/public/images/landing/radar_relay.png | Bin 6650 -> 0 bytes .../public/images/landing/relayer_diagram.png | Bin 111870 -> 0 bytes .../public/images/landing/stable_tokens_icon.png | Bin 5853 -> 0 bytes packages/website/public/images/landing/stocks.png | Bin 2098 -> 0 bytes .../public/images/landing/tokenized_world.png | Bin 109220 -> 0 bytes .../public/images/launch_kit/0x_cupboard.svg | 53 -- .../public/images/launch_kit/enable_trading.svg | 9 - packages/website/public/images/launch_kit/fork.svg | 4 - .../images/launch_kit/in_game_marketplace.svg | 15 - .../public/images/launch_kit/local_market.svg | 12 - .../public/images/launch_kit/secondary_market.svg | 6 - .../public/images/launch_kit/shared_liquidity.svg | 20 - packages/website/public/images/ledger_icon.png | Bin 4885 -> 0 bytes packages/website/public/images/lock_icon.svg | 3 - packages/website/public/images/logos/FBG.png | Bin 73781 -> 0 bytes packages/website/public/images/logos/aragon.png | Bin 5501 -> 0 bytes packages/website/public/images/logos/augur.png | Bin 5051 -> 0 bytes .../public/images/logos/blockchain_capital.png | Bin 12366 -> 0 bytes .../website/public/images/logos/chronobank.png | Bin 5615 -> 0 bytes packages/website/public/images/logos/dharma.png | Bin 5015 -> 0 bytes .../website/public/images/logos/district0x.png | Bin 5537 -> 0 bytes .../website/public/images/logos/jen_advisors.png | Bin 158434 -> 0 bytes packages/website/public/images/logos/maker.png | Bin 3791 -> 0 bytes packages/website/public/images/logos/melonport.png | Bin 5218 -> 0 bytes packages/website/public/images/logos/openANX.png | Bin 4973 -> 0 bytes .../public/images/logos/pantera_capital.png | Bin 8437 -> 0 bytes .../public/images/logos/polychain_capital.png | Bin 21279 -> 0 bytes packages/website/public/images/metamask_icon.png | Bin 5728 -> 0 bytes .../website/public/images/metamask_or_parity.png | Bin 22907 -> 0 bytes .../website/public/images/network_icons/kovan.png | Bin 244 -> 0 bytes .../public/images/network_icons/mainnet.png | Bin 205 -> 0 bytes .../public/images/network_icons/rinkeby.png | Bin 126 -> 0 bytes .../public/images/network_icons/ropsten.png | Bin 251 -> 0 bytes packages/website/public/images/og_image.png | Bin 51927 -> 0 bytes .../website/public/images/press/logo-forbes.png | Bin 2420 -> 0 bytes .../website/public/images/press/logo-fortune.png | Bin 1800 -> 0 bytes .../public/images/press/logo-techcrunch.png | Bin 2332 -> 0 bytes .../public/images/press/logo-venturebeat.png | Bin 2660 -> 0 bytes .../website/public/images/protocol_logo_black.png | Bin 4031 -> 0 bytes .../website/public/images/protocol_logo_white.png | Bin 3931 -> 0 bytes .../website/public/images/relayer-logos/logo.png | Bin 6758 -> 0 bytes .../website/public/images/relayer-logos/logo_1.png | Bin 7951 -> 0 bytes .../public/images/relayer-logos/logo_2.1.png | Bin 4942 -> 0 bytes .../public/images/relayer-logos/logo_2.2.png | Bin 5115 -> 0 bytes .../public/images/relayer-logos/logo_2.3.png | Bin 8685 -> 0 bytes .../website/public/images/relayer-logos/logo_2.png | Bin 6479 -> 0 bytes .../website/public/images/relayer-logos/logo_3.png | Bin 7888 -> 0 bytes .../website/public/images/relayer-logos/logo_4.png | Bin 9083 -> 0 bytes .../website/public/images/relayer-logos/logo_5.png | Bin 5768 -> 0 bytes .../website/public/images/relayer_fallback.png | Bin 4707 -> 0 bytes .../website/public/images/setup_account_icon.svg | 3 - packages/website/public/images/social/discord.png | Bin 858 -> 0 bytes .../website/public/images/social/discourse.png | Bin 1454 -> 0 bytes packages/website/public/images/social/github.png | Bin 1154 -> 0 bytes packages/website/public/images/social/medium.png | Bin 890 -> 0 bytes packages/website/public/images/social/reddit.png | Bin 1168 -> 0 bytes packages/website/public/images/social/slack.png | Bin 1311 -> 0 bytes packages/website/public/images/social/twitter.png | Bin 901 -> 0 bytes .../website/public/images/team/advisors/davids.jpg | Bin 25263 -> 0 bytes .../website/public/images/team/advisors/frede.jpg | Bin 17015 -> 0 bytes .../website/public/images/team/advisors/joeyk.jpg | Bin 23496 -> 0 bytes .../website/public/images/team/advisors/lindax.jpg | Bin 20576 -> 0 bytes .../website/public/images/team/advisors/olafc.jpg | Bin 18024 -> 0 bytes packages/website/public/images/team/alexb.jpg | Bin 17441 -> 0 bytes packages/website/public/images/team/alexv.jpg | Bin 16969 -> 0 bytes packages/website/public/images/team/amirb.jpg | Bin 21075 -> 0 bytes packages/website/public/images/team/benb.jpg | Bin 17571 -> 0 bytes packages/website/public/images/team/blake.jpg | Bin 17515 -> 0 bytes packages/website/public/images/team/brandonm.jpg | Bin 18765 -> 0 bytes packages/website/public/images/team/chrisk.jpg | Bin 16316 -> 0 bytes packages/website/public/images/team/clayr.jpg | Bin 17222 -> 0 bytes packages/website/public/images/team/eugenea.jpg | Bin 23527 -> 0 bytes packages/website/public/images/team/fabiob.jpg | Bin 15358 -> 0 bytes packages/website/public/images/team/francesco.jpg | Bin 17467 -> 0 bytes packages/website/public/images/team/greg.jpg | Bin 21163 -> 0 bytes packages/website/public/images/team/jacobe.jpg | Bin 28977 -> 0 bytes packages/website/public/images/team/jasons.jpg | Bin 20455 -> 0 bytes packages/website/public/images/team/leonidL.jpg | Bin 14413 -> 0 bytes packages/website/public/images/team/marcs.jpg | Bin 40348 -> 0 bytes packages/website/public/images/team/mattt.jpg | Bin 18348 -> 0 bytes packages/website/public/images/team/melo.jpg | Bin 19188 -> 0 bytes packages/website/public/images/team/oshirob.png | Bin 522249 -> 0 bytes packages/website/public/images/team/peterz.jpg | Bin 30404 -> 0 bytes packages/website/public/images/team/rahuls.jpg | Bin 21412 -> 0 bytes packages/website/public/images/team/remcoB.jpg | Bin 24435 -> 0 bytes packages/website/public/images/team/steveK.jpg | Bin 39082 -> 0 bytes packages/website/public/images/team/toms.jpg | Bin 13682 -> 0 bytes packages/website/public/images/team/weijew.jpg | Bin 22031 -> 0 bytes packages/website/public/images/team/willw.jpg | Bin 25440 -> 0 bytes packages/website/public/images/team/xianny.jpg | Bin 29992 -> 0 bytes packages/website/public/images/team/zack.jpg | Bin 19292 -> 0 bytes packages/website/public/images/token_icons/1ST.png | Bin 7872 -> 0 bytes .../website/public/images/token_icons/ABYSS.png | Bin 13633 -> 0 bytes packages/website/public/images/token_icons/ADT.png | Bin 10747 -> 0 bytes packages/website/public/images/token_icons/AE.png | Bin 12322 -> 0 bytes .../website/public/images/token_icons/AION.png | Bin 2777 -> 0 bytes packages/website/public/images/token_icons/AIR.png | Bin 20802 -> 0 bytes packages/website/public/images/token_icons/ANT.png | Bin 42477 -> 0 bytes .../website/public/images/token_icons/APCC.png | Bin 19592 -> 0 bytes .../website/public/images/token_icons/APPC.png | Bin 19592 -> 0 bytes packages/website/public/images/token_icons/ARN.png | Bin 16200 -> 0 bytes packages/website/public/images/token_icons/ART.png | Bin 12430 -> 0 bytes packages/website/public/images/token_icons/AST.png | Bin 14169 -> 0 bytes packages/website/public/images/token_icons/BAT.png | Bin 6188 -> 0 bytes .../website/public/images/token_icons/BCAP.png | Bin 7787 -> 0 bytes .../website/public/images/token_icons/BCPT.png | Bin 10283 -> 0 bytes packages/website/public/images/token_icons/BNT.png | Bin 4011 -> 0 bytes packages/website/public/images/token_icons/BRM.png | Bin 18794 -> 0 bytes packages/website/public/images/token_icons/CAG.png | Bin 11062 -> 0 bytes packages/website/public/images/token_icons/CAN.png | Bin 10234 -> 0 bytes packages/website/public/images/token_icons/CAT.png | Bin 23361 -> 0 bytes packages/website/public/images/token_icons/CFI.png | Bin 11105 -> 0 bytes packages/website/public/images/token_icons/CVC.png | Bin 10700 -> 0 bytes packages/website/public/images/token_icons/DAI.png | Bin 6926 -> 0 bytes .../website/public/images/token_icons/DATA.png | Bin 13313 -> 0 bytes packages/website/public/images/token_icons/DEB.png | Bin 13991 -> 0 bytes packages/website/public/images/token_icons/DGD.png | Bin 23282 -> 0 bytes .../website/public/images/token_icons/DIVX.png | Bin 5110 -> 0 bytes packages/website/public/images/token_icons/DNT.png | Bin 10054 -> 0 bytes packages/website/public/images/token_icons/EDG.png | Bin 2712 -> 0 bytes packages/website/public/images/token_icons/EDU.png | Bin 13535 -> 0 bytes .../website/public/images/token_icons/ELEC.png | Bin 11379 -> 0 bytes .../website/public/images/token_icons/EMONT.png | Bin 10523 -> 0 bytes packages/website/public/images/token_icons/ENG.png | Bin 6767 -> 0 bytes .../website/public/images/token_icons/ENTR.png | Bin 3951 -> 0 bytes packages/website/public/images/token_icons/EOS.png | Bin 6979 -> 0 bytes packages/website/public/images/token_icons/EVE.png | Bin 5895 -> 0 bytes packages/website/public/images/token_icons/FUN.png | Bin 14973 -> 0 bytes packages/website/public/images/token_icons/GEE.png | Bin 10235 -> 0 bytes packages/website/public/images/token_icons/GEN.png | Bin 5280 -> 0 bytes packages/website/public/images/token_icons/GET.png | Bin 11930 -> 0 bytes packages/website/public/images/token_icons/GNO.png | Bin 16559 -> 0 bytes packages/website/public/images/token_icons/GNT.png | Bin 2990 -> 0 bytes packages/website/public/images/token_icons/HGT.png | Bin 5709 -> 0 bytes packages/website/public/images/token_icons/HOT.png | Bin 4578 -> 0 bytes packages/website/public/images/token_icons/ICN.png | Bin 3962 -> 0 bytes packages/website/public/images/token_icons/IND.png | Bin 4583 -> 0 bytes packages/website/public/images/token_icons/J8T.png | Bin 10835 -> 0 bytes packages/website/public/images/token_icons/JET.png | Bin 18374 -> 0 bytes packages/website/public/images/token_icons/KIN.png | Bin 6075 -> 0 bytes packages/website/public/images/token_icons/KNC.png | Bin 8396 -> 0 bytes .../website/public/images/token_icons/LINK.png | Bin 11267 -> 0 bytes .../website/public/images/token_icons/LOOM.png | Bin 9491 -> 0 bytes packages/website/public/images/token_icons/LUN.png | Bin 13648 -> 0 bytes .../website/public/images/token_icons/MANA.png | Bin 17411 -> 0 bytes packages/website/public/images/token_icons/MCO.png | Bin 6487 -> 0 bytes packages/website/public/images/token_icons/MKR.png | Bin 6967 -> 0 bytes packages/website/public/images/token_icons/MLN.png | Bin 3408 -> 0 bytes packages/website/public/images/token_icons/MOD.png | Bin 7088 -> 0 bytes .../website/public/images/token_icons/MORPH.png | Bin 8919 -> 0 bytes packages/website/public/images/token_icons/MOT.png | Bin 6069 -> 0 bytes packages/website/public/images/token_icons/MTL.png | Bin 3540 -> 0 bytes .../website/public/images/token_icons/NANJ.png | Bin 11577 -> 0 bytes .../website/public/images/token_icons/NAVI.png | Bin 6827 -> 0 bytes packages/website/public/images/token_icons/NCT.png | Bin 5462 -> 0 bytes packages/website/public/images/token_icons/NDC.png | Bin 20972 -> 0 bytes .../website/public/images/token_icons/NEXO.png | Bin 4689 -> 0 bytes packages/website/public/images/token_icons/NMR.png | Bin 21822 -> 0 bytes packages/website/public/images/token_icons/OAX.png | Bin 6331 -> 0 bytes packages/website/public/images/token_icons/OCC.png | Bin 7774 -> 0 bytes packages/website/public/images/token_icons/OMG.png | Bin 5311 -> 0 bytes packages/website/public/images/token_icons/OMX.png | Bin 7320 -> 0 bytes packages/website/public/images/token_icons/PAL.png | Bin 13196 -> 0 bytes packages/website/public/images/token_icons/PAY.png | Bin 7276 -> 0 bytes packages/website/public/images/token_icons/PKT.png | Bin 5900 -> 0 bytes .../website/public/images/token_icons/PLAY.png | Bin 3226 -> 0 bytes packages/website/public/images/token_icons/PLU.png | Bin 51829 -> 0 bytes .../website/public/images/token_icons/POLY.png | Bin 9350 -> 0 bytes .../website/public/images/token_icons/QTUM.png | Bin 32496 -> 0 bytes packages/website/public/images/token_icons/REN.png | Bin 17682 -> 0 bytes packages/website/public/images/token_icons/REP.png | Bin 13905 -> 0 bytes packages/website/public/images/token_icons/REQ.png | Bin 4476 -> 0 bytes packages/website/public/images/token_icons/RFR.png | Bin 8319 -> 0 bytes packages/website/public/images/token_icons/RLC.png | Bin 9856 -> 0 bytes packages/website/public/images/token_icons/ROL.png | Bin 16279 -> 0 bytes packages/website/public/images/token_icons/RVT.png | Bin 9294 -> 0 bytes .../website/public/images/token_icons/SALT.png | Bin 5912 -> 0 bytes packages/website/public/images/token_icons/SAN.png | Bin 7569 -> 0 bytes packages/website/public/images/token_icons/SIG.png | Bin 9885 -> 0 bytes .../website/public/images/token_icons/SNGLS.png | Bin 8475 -> 0 bytes packages/website/public/images/token_icons/SNT.png | Bin 6530 -> 0 bytes .../website/public/images/token_icons/SPANK.png | Bin 16743 -> 0 bytes packages/website/public/images/token_icons/SPN.png | Bin 4760 -> 0 bytes packages/website/public/images/token_icons/SS.png | Bin 2576 -> 0 bytes .../website/public/images/token_icons/STORJ.png | Bin 8117 -> 0 bytes packages/website/public/images/token_icons/SUB.png | Bin 15424 -> 0 bytes packages/website/public/images/token_icons/SWT.png | Bin 1215 -> 0 bytes .../website/public/images/token_icons/SXDT.png | Bin 4323 -> 0 bytes .../website/public/images/token_icons/TAAS.png | Bin 14580 -> 0 bytes .../website/public/images/token_icons/TIME.png | Bin 33752 -> 0 bytes packages/website/public/images/token_icons/TKN.png | Bin 3743 -> 0 bytes packages/website/public/images/token_icons/TRL.png | Bin 447936 -> 0 bytes .../website/public/images/token_icons/TRST.png | Bin 26306 -> 0 bytes packages/website/public/images/token_icons/TRX.png | Bin 7941 -> 0 bytes packages/website/public/images/token_icons/UPP.png | Bin 7700 -> 0 bytes packages/website/public/images/token_icons/VSL.png | Bin 17717 -> 0 bytes .../website/public/images/token_icons/WAND.png | Bin 9201 -> 0 bytes .../website/public/images/token_icons/WETH.png | Bin 7584 -> 0 bytes .../website/public/images/token_icons/WINGS.png | Bin 3822 -> 0 bytes packages/website/public/images/token_icons/WTC.png | Bin 8234 -> 0 bytes packages/website/public/images/token_icons/WYV.png | Bin 9261 -> 0 bytes .../website/public/images/token_icons/XAUR.png | Bin 5150 -> 0 bytes packages/website/public/images/token_icons/XNK.png | Bin 4117 -> 0 bytes packages/website/public/images/token_icons/XSC.png | Bin 17956 -> 0 bytes packages/website/public/images/token_icons/XYO.png | Bin 13793 -> 0 bytes packages/website/public/images/token_icons/ZIL.png | Bin 4444 -> 0 bytes packages/website/public/images/token_icons/ZRX.png | Bin 17905 -> 0 bytes packages/website/public/images/toshi_logo.jpg | Bin 4611 -> 0 bytes packages/website/public/images/trade_arrows.png | Bin 1740 -> 0 bytes packages/website/public/images/unlock-mm.png | Bin 21137 -> 0 bytes .../website/public/images/wrapped_eth_gray.png | Bin 7649 -> 0 bytes packages/website/public/images/zrx_ecosystem.svg | 158 ---- packages/website/public/images/zrx_pie_chart.png | Bin 54185 -> 0 bytes packages/website/public/images/zrx_token.png | Bin 16534 -> 0 bytes packages/website/public/index.html | 135 --- packages/website/public/js/rollbar.umd.min.js | 2 - packages/website/public/pdfs/0x_white_paper.pdf | Bin 319570 -> 0 bytes packages/website/translations/chinese.json | 102 --- packages/website/translations/english.json | 112 --- packages/website/translations/korean.json | 102 --- packages/website/translations/russian.json | 102 --- packages/website/translations/spanish.json | 102 --- packages/website/ts/blockchain.ts | 953 --------------------- packages/website/ts/blockchain_watcher.ts | 86 -- packages/website/ts/components/aboutPageLayout.tsx | 70 -- .../website/ts/components/animatedChatIcon.tsx | 103 --- .../website/ts/components/animatedCompassIcon.tsx | 53 -- packages/website/ts/components/banner.tsx | 144 ---- packages/website/ts/components/blockIconLink.tsx | 84 -- packages/website/ts/components/button.tsx | 104 --- packages/website/ts/components/chapter_link.tsx | 15 - packages/website/ts/components/definition.tsx | 139 --- .../components/dialogs/blockchain_err_dialog.tsx | 166 ---- .../dialogs/eth_weth_conversion_dialog.tsx | 194 ----- .../ts/components/dialogs/ledger_config_dialog.tsx | 307 ------- .../dialogs/portal_disclaimer_dialog.tsx | 36 - .../website/ts/components/dialogs/send_dialog.tsx | 137 --- .../dialogs/track_token_confirmation_dialog.tsx | 93 -- .../ts/components/documentation/docs_logo.tsx | 37 - .../ts/components/documentation/docs_top_bar.tsx | 108 --- .../components/documentation/overview_content.tsx | 134 --- .../ts/components/documentation/sidebar_header.tsx | 60 -- .../components/documentation/tutorial_button.tsx | 59 -- .../components/documentation/version_drop_down.tsx | 80 -- .../components/dropdowns/developers_drop_down.tsx | 162 ---- .../components/dropdowns/dropdown_developers.tsx | 184 ---- .../ts/components/dropdowns/dropdown_products.tsx | 48 -- .../ts/components/dropdowns/network_drop_down.tsx | 40 - .../ts/components/eth_weth_conversion_button.tsx | 128 --- packages/website/ts/components/eth_wrappers.tsx | 448 ---------- packages/website/ts/components/fill_order.tsx | 661 -------------- packages/website/ts/components/fill_order_json.tsx | 73 -- .../website/ts/components/fill_warning_dialog.tsx | 46 - .../flash_messages/asset_send_completed.tsx | 34 - .../flash_messages/transaction_submitted.tsx | 26 - packages/website/ts/components/footer.tsx | 168 ---- .../ts/components/generate_order/asset_picker.tsx | 284 ------ .../generate_order/generate_order_form.tsx | 385 --------- .../components/generate_order/new_token_form.tsx | 229 ----- packages/website/ts/components/hamburger.tsx | 68 -- packages/website/ts/components/header.tsx | 249 ------ packages/website/ts/components/hero.tsx | 143 ---- packages/website/ts/components/heroAnimation.tsx | 123 --- packages/website/ts/components/heroImage.tsx | 27 - packages/website/ts/components/icon.tsx | 66 -- packages/website/ts/components/image.tsx | 17 - .../website/ts/components/inputs/address_input.tsx | 71 -- .../components/inputs/allowance_state_toggle.tsx | 160 ---- .../ts/components/inputs/balance_bounded_input.tsx | 139 --- .../ts/components/inputs/eth_amount_input.tsx | 65 -- .../ts/components/inputs/expiration_input.tsx | 100 --- .../website/ts/components/inputs/hash_input.tsx | 68 -- .../components/inputs/identicon_address_input.tsx | 52 -- .../ts/components/inputs/token_amount_input.tsx | 152 ---- .../website/ts/components/inputs/token_input.tsx | 103 --- packages/website/ts/components/link.tsx | 61 -- packages/website/ts/components/logo.tsx | 38 - packages/website/ts/components/meta_tags.tsx | 25 - packages/website/ts/components/mobileNav.tsx | 113 --- packages/website/ts/components/modals/input.tsx | 92 -- .../website/ts/components/modals/modal_contact.tsx | 390 --------- .../website/ts/components/nested_sidebar_menu.tsx | 101 --- packages/website/ts/components/newLayout.tsx | 134 --- packages/website/ts/components/newsletter_form.tsx | 191 ----- packages/website/ts/components/old_footer.tsx | 228 ----- .../onboarding/add_eth_onboarding_step.tsx | 40 - .../onboarding/congrats_onboarding_step.tsx | 15 - .../onboarding/install_wallet_onboarding_step.tsx | 42 - .../onboarding/intro_onboarding_step.tsx | 30 - .../ts/components/onboarding/onboarding_card.tsx | 115 --- .../ts/components/onboarding/onboarding_flow.tsx | 182 ---- .../components/onboarding/onboarding_tooltip.tsx | 30 - .../onboarding/portal_onboarding_flow.tsx | 281 ------ .../onboarding/set_allowances_onboarding_step.tsx | 30 - .../onboarding/unlock_wallet_onboarding_step.tsx | 8 - .../onboarding/wrap_eth_onboarding_step.tsx | 88 -- packages/website/ts/components/order_json.tsx | 179 ---- .../website/ts/components/portal/back_button.tsx | 40 - .../website/ts/components/portal/drawer_menu.tsx | 77 -- packages/website/ts/components/portal/loading.tsx | 21 - packages/website/ts/components/portal/menu.tsx | 120 --- packages/website/ts/components/portal/portal.tsx | 749 ---------------- packages/website/ts/components/portal/section.tsx | 14 - .../website/ts/components/portal/text_header.tsx | 16 - .../components/relayer_index/relayer_grid_tile.tsx | 148 ---- .../ts/components/relayer_index/relayer_index.tsx | 126 --- .../relayer_index/relayer_top_tokens.tsx | 61 -- .../ts/components/sections/landing/about.tsx | 81 -- .../ts/components/sections/landing/clients.tsx | 110 --- .../website/ts/components/sections/landing/cta.tsx | 29 - .../ts/components/sections/landing/hero.tsx | 31 - packages/website/ts/components/send_button.tsx | 94 -- packages/website/ts/components/siteWrap.tsx | 146 ---- packages/website/ts/components/slider/slider.tsx | 177 ---- packages/website/ts/components/text.tsx | 77 -- packages/website/ts/components/token_balances.tsx | 658 -------------- .../ts/components/top_bar/provider_display.tsx | 154 ---- packages/website/ts/components/top_bar/top_bar.tsx | 279 ------ .../ts/components/top_bar/top_bar_menu_item.tsx | 47 - .../ts/components/track_token_confirmation.tsx | 61 -- .../ts/components/trade_history/trade_history.tsx | 132 --- .../trade_history/trade_history_item.tsx | 176 ---- .../ts/components/ui/account_connection.tsx | 40 - packages/website/ts/components/ui/alert.tsx | 25 - .../ts/components/ui/allowance_state_view.tsx | 51 -- packages/website/ts/components/ui/balance.tsx | 27 - packages/website/ts/components/ui/button.tsx | 105 --- packages/website/ts/components/ui/check_mark.tsx | 31 - packages/website/ts/components/ui/circle.tsx | 16 - packages/website/ts/components/ui/container.tsx | 100 --- packages/website/ts/components/ui/copy_icon.tsx | 78 -- .../website/ts/components/ui/custom_menu_item.tsx | 50 -- packages/website/ts/components/ui/drop_down.tsx | 139 --- .../ui/ease_up_from_bottom_animation.tsx | 31 - .../website/ts/components/ui/ethereum_address.tsx | 30 - .../website/ts/components/ui/etherscan_icon.tsx | 39 - .../website/ts/components/ui/fake_text_field.tsx | 34 - .../website/ts/components/ui/flash_message.tsx | 40 - packages/website/ts/components/ui/help_tooltip.tsx | 22 - packages/website/ts/components/ui/icon_button.tsx | 64 -- packages/website/ts/components/ui/identicon.tsx | 48 -- packages/website/ts/components/ui/image.tsx | 49 -- packages/website/ts/components/ui/input_label.tsx | 25 - packages/website/ts/components/ui/island.tsx | 29 - .../ts/components/ui/lifecycle_raised_button.tsx | 102 --- packages/website/ts/components/ui/multi_select.tsx | 66 -- packages/website/ts/components/ui/overlay.tsx | 32 - packages/website/ts/components/ui/party.tsx | 141 --- packages/website/ts/components/ui/pointer.tsx | 72 -- .../website/ts/components/ui/required_label.tsx | 15 - packages/website/ts/components/ui/retry.tsx | 32 - packages/website/ts/components/ui/simple_menu.tsx | 88 -- packages/website/ts/components/ui/spinner.tsx | 54 -- packages/website/ts/components/ui/swap_icon.tsx | 41 - packages/website/ts/components/ui/text.tsx | 79 -- packages/website/ts/components/ui/token_icon.tsx | 34 - packages/website/ts/components/visual_order.tsx | 73 -- .../website/ts/components/wallet/body_overlay.tsx | 136 --- .../ts/components/wallet/null_token_row.tsx | 41 - .../website/ts/components/wallet/placeholder.tsx | 25 - .../ts/components/wallet/standard_icon_row.tsx | 44 - packages/website/ts/components/wallet/wallet.tsx | 527 ------------ .../ts/components/wallet/wrap_ether_item.tsx | 230 ----- packages/website/ts/constants/.gitkeep | 0 packages/website/ts/constants/animations.tsx | 18 - packages/website/ts/constants/cssReset.js | 50 -- packages/website/ts/constants/globalStyle.tsx | 107 --- packages/website/ts/constants/utilities.tsx | 22 - .../ts/containers/asset_buyer_documentation.ts | 46 - .../website/ts/containers/connect_documentation.ts | 51 -- .../containers/contract_wrappers_documentation.ts | 46 - packages/website/ts/containers/docs_home.ts | 32 - .../ts/containers/ethereum_types_documentation.ts | 42 - packages/website/ts/containers/faq.ts | 28 - .../website/ts/containers/generate_order_form.ts | 48 -- .../ts/containers/inputs/allowance_state_toggle.ts | 42 - .../ts/containers/inputs/eth_amount_input.ts | 36 - .../ts/containers/json_schemas_documentation.ts | 71 -- .../ts/containers/migrations_documentation.ts | 67 -- packages/website/ts/containers/not_found.ts | 28 - .../ts/containers/order_utils_documentation.ts | 47 - .../ts/containers/order_watcher_documentation.ts | 47 - packages/website/ts/containers/portal.ts | 93 -- .../ts/containers/portal_onboarding_flow.ts | 68 -- .../ts/containers/smart_contracts_documentation.ts | 97 --- .../ts/containers/sol_compiler_documentation.ts | 51 -- .../ts/containers/sol_coverage_documentation.ts | 44 - .../ts/containers/sol_profiler_documentation.ts | 44 - .../ts/containers/sol_trace_documentation.ts | 44 - .../ts/containers/subproviders_documentation.ts | 50 -- .../ts/containers/web3_wrapper_documentation.ts | 46 - packages/website/ts/containers/wiki.ts | 31 - .../ts/containers/zero_ex_js_documentation.ts | 78 -- packages/website/ts/globals.d.ts | 33 - packages/website/ts/icons/illustrations/0x.svg | 14 - .../ts/icons/illustrations/buildBusiness.svg | 6 - .../website/ts/icons/illustrations/checkmark.svg | 1 - .../website/ts/icons/illustrations/code-repo.svg | 7 - packages/website/ts/icons/illustrations/coin.svg | 1 - .../ts/icons/illustrations/consistently-ship.svg | 6 - .../website/ts/icons/illustrations/customize.svg | 1 - .../ts/icons/illustrations/decentralisedLoans.svg | 13 - .../website/ts/icons/illustrations/description.svg | 21 - .../ts/icons/illustrations/descriptionBolt.svg | 4 - .../ts/icons/illustrations/descriptionCoin.svg | 9 - .../ts/icons/illustrations/descriptionCopy.svg | 7 - .../ts/icons/illustrations/descriptionFlask.svg | 7 - .../ts/icons/illustrations/eficientDesign.svg | 11 - .../ts/icons/illustrations/eth-based-tokens.svg | 6 - .../icons/illustrations/extensibleArchitecture.svg | 11 - .../ts/icons/illustrations/flexibleIntegration.svg | 12 - .../illustrations/flexibleIntegration0xInstant.svg | 17 - .../ts/icons/illustrations/flexibleOrders.svg | 4 - .../icons/illustrations/gamingAndCollectibles.svg | 18 - .../generateRevenueForYourBusiness-large.svg | 28 - .../website/ts/icons/illustrations/getInTouch.svg | 13 - .../website/ts/icons/illustrations/getStarted.svg | 13 - .../website/ts/icons/illustrations/launchKit.svg | 18 - .../ts/icons/illustrations/launchKit_versionB.svg | 7 - .../ts/icons/illustrations/legalResources.svg | 4 - .../website/ts/icons/illustrations/logo-mark.svg | 6 - .../ts/icons/illustrations/logo-outlined.svg | 14 - .../ts/icons/illustrations/long-term-impact.svg | 9 - .../website/ts/icons/illustrations/low-cost.svg | 30 - .../ts/icons/illustrations/marketingDesignHelp.svg | 11 - .../ts/icons/illustrations/milestoneGrants.svg | 7 - .../illustrations/networkedLiquidity-small.svg | 20 - .../ts/icons/illustrations/networkedLiquidity.svg | 20 - .../website/ts/icons/illustrations/orderBooks.svg | 8 - .../ts/icons/illustrations/predictionMarkets.svg | 7 - .../website/ts/icons/illustrations/protocol.svg | 1 - .../ts/icons/illustrations/ready-to-build.svg | 1 - .../ts/icons/illustrations/recruitingSupport.svg | 7 - .../website/ts/icons/illustrations/right-thing.svg | 6 - .../icons/illustrations/robustSmartContracts.svg | 6 - .../website/ts/icons/illustrations/rocketship.svg | 9 - .../ts/icons/illustrations/secureTrading.svg | 15 - .../ts/icons/illustrations/social-discord.svg | 3 - .../website/ts/icons/illustrations/social-fb.svg | 3 - .../ts/icons/illustrations/social-github.svg | 3 - .../ts/icons/illustrations/social-newsletter.svg | 3 - .../ts/icons/illustrations/social-reddit.svg | 3 - .../ts/icons/illustrations/social-twitter.svg | 3 - .../ts/icons/illustrations/stableTokens.svg | 10 - .../ts/icons/illustrations/standardForExchange.svg | 12 - .../website/ts/icons/illustrations/support.svg | 1 - .../supportForAllEthereumStandards-large.svg | 28 - .../supportForAllEthereumStandards.svg | 21 - .../website/ts/icons/illustrations/techSupport.svg | 13 - packages/website/ts/icons/illustrations/tokens.svg | 1 - .../ts/icons/illustrations/vcIntroductions.svg | 11 - packages/website/ts/icons/logo-with-type.svg | 1 - packages/website/ts/index.tsx | 222 ----- packages/website/ts/lazy_component.tsx | 66 -- packages/website/ts/local_storage/local_storage.ts | 45 - packages/website/ts/local_storage/state_storage.ts | 16 - .../ts/local_storage/tracked_token_storage.ts | 71 -- .../ts/local_storage/trade_history_storage.tsx | 94 -- packages/website/ts/pages/about/jobs.tsx | 238 ----- packages/website/ts/pages/about/mission.tsx | 97 --- packages/website/ts/pages/about/press.tsx | 94 -- packages/website/ts/pages/about/team.tsx | 296 ------- packages/website/ts/pages/community.tsx | 289 ------- .../ts/pages/documentation/developers_page.tsx | 201 ----- .../website/ts/pages/documentation/doc_page.tsx | 216 ----- .../website/ts/pages/documentation/docs_home.tsx | 498 ----------- packages/website/ts/pages/ecosystem.tsx | 128 --- packages/website/ts/pages/faq/faq.tsx | 453 ---------- packages/website/ts/pages/faq/question.tsx | 50 -- packages/website/ts/pages/fullscreen_message.tsx | 30 - packages/website/ts/pages/instant.tsx | 255 ------ packages/website/ts/pages/instant/code_demo.tsx | 183 ---- .../website/ts/pages/instant/config_generator.tsx | 329 ------- .../instant/config_generator_address_input.tsx | 84 -- packages/website/ts/pages/instant/configurator.tsx | 104 --- .../ts/pages/instant/fee_percentage_slider.tsx | 80 -- packages/website/ts/pages/instant/rc-slider.css | 295 ------- packages/website/ts/pages/instant/select.tsx | 74 -- packages/website/ts/pages/landing.tsx | 44 - packages/website/ts/pages/launch_kit.tsx | 125 --- packages/website/ts/pages/market_maker.tsx | 162 ---- packages/website/ts/pages/not_found.tsx | 25 - packages/website/ts/pages/why.tsx | 302 ------- packages/website/ts/pages/wiki/wiki.tsx | 198 ----- packages/website/ts/redux/analyticsMiddleware.ts | 36 - packages/website/ts/redux/dispatcher.ts | 227 ----- packages/website/ts/redux/reducer.ts | 361 -------- packages/website/ts/redux/store.ts | 24 - packages/website/ts/schemas/metadata_schema.ts | 9 - packages/website/ts/schemas/portal_order_schema.ts | 9 - .../website/ts/schemas/portal_token_metadata.ts | 10 - packages/website/ts/schemas/validator.ts | 11 - packages/website/ts/style/colors.ts | 32 - packages/website/ts/style/keyframes.ts | 22 - packages/website/ts/style/media.ts | 14 - packages/website/ts/style/theme.ts | 17 - packages/website/ts/style/z_index.ts | 6 - packages/website/ts/types.ts | 668 --------------- packages/website/ts/utils/analytics.ts | 89 -- packages/website/ts/utils/backend_client.ts | 61 -- packages/website/ts/utils/configs.ts | 49 -- packages/website/ts/utils/constants.ts | 130 --- packages/website/ts/utils/doc_utils.ts | 85 -- .../website/ts/utils/documentation_container.ts | 35 - packages/website/ts/utils/error_reporter.ts | 54 -- packages/website/ts/utils/fake_token_registry.ts | 879 ------------------- packages/website/ts/utils/fetch_utils.ts | 48 -- packages/website/ts/utils/mui_theme.ts | 32 - packages/website/ts/utils/order_parser.ts | 50 -- .../website/ts/utils/token_address_overrides.ts | 24 - packages/website/ts/utils/translate.ts | 101 --- packages/website/ts/utils/utils.ts | 483 ----------- packages/website/ts/vendor/u2f_api.js | 760 ---------------- packages/website/tsconfig.json | 28 - packages/website/tslint.json | 11 - packages/website/webpack.config.js | 150 ---- 730 files changed, 33940 deletions(-) delete mode 100644 packages/website/.gitignore delete mode 100644 packages/website/README.md delete mode 100644 packages/website/contracts/Mintable.json delete mode 100644 packages/website/less/all.less delete mode 100644 packages/website/less/normalize.less delete mode 100644 packages/website/md/docs/0xjs/0.0.1/async.md delete mode 100644 packages/website/md/docs/0xjs/0.0.1/errors.md delete mode 100644 packages/website/md/docs/0xjs/0.0.1/installation.md delete mode 100644 packages/website/md/docs/0xjs/0.0.1/introduction.md delete mode 100644 packages/website/md/docs/0xjs/0.0.1/versioning.md delete mode 100644 packages/website/md/docs/0xjs/1.0.1/async.md delete mode 100644 packages/website/md/docs/0xjs/1.0.1/installation.md delete mode 100644 packages/website/md/docs/0xjs/1.0.1/introduction.md delete mode 100644 packages/website/md/docs/0xjs/1.0.1/versioning.md delete mode 100644 packages/website/md/docs/0xjs/2.0.0/async.md delete mode 100644 packages/website/md/docs/0xjs/2.0.0/installation.md delete mode 100644 packages/website/md/docs/asset_buyer/installation.md delete mode 100644 packages/website/md/docs/asset_buyer/introduction.md delete mode 100644 packages/website/md/docs/asset_buyer/usage.md delete mode 100644 packages/website/md/docs/connect/1/installation.md delete mode 100644 packages/website/md/docs/connect/1/introduction.md delete mode 100644 packages/website/md/docs/connect/2/introduction.md delete mode 100644 packages/website/md/docs/connect/3/installation.md delete mode 100644 packages/website/md/docs/contract_wrappers/1/installation.md delete mode 100644 packages/website/md/docs/contract_wrappers/1/introduction.md delete mode 100644 packages/website/md/docs/contract_wrappers/2/installation.md delete mode 100644 packages/website/md/docs/ethereum_types/installation.md delete mode 100644 packages/website/md/docs/ethereum_types/introduction.md delete mode 100644 packages/website/md/docs/json_schemas/1/installation.md delete mode 100644 packages/website/md/docs/json_schemas/1/introduction.md delete mode 100644 packages/website/md/docs/json_schemas/1/schemas.md delete mode 100644 packages/website/md/docs/json_schemas/1/usage.md delete mode 100644 packages/website/md/docs/json_schemas/2/schemas.md delete mode 100644 packages/website/md/docs/json_schemas/3/installation.md delete mode 100644 packages/website/md/docs/json_schemas/3/introduction.md delete mode 100644 packages/website/md/docs/json_schemas/3/schemas.md delete mode 100644 packages/website/md/docs/json_schemas/3/usage.md delete mode 100644 packages/website/md/docs/migrations/1/installation.md delete mode 100644 packages/website/md/docs/migrations/1/introduction.md delete mode 100644 packages/website/md/docs/order_utils/1/installation.md delete mode 100644 packages/website/md/docs/order_utils/1/introduction.md delete mode 100644 packages/website/md/docs/order_utils/2/installation.md delete mode 100644 packages/website/md/docs/order_utils/2/introduction.md delete mode 100644 packages/website/md/docs/order_watcher/1/installation.md delete mode 100644 packages/website/md/docs/order_watcher/1/introduction.md delete mode 100644 packages/website/md/docs/order_watcher/2/installation.md delete mode 100644 packages/website/md/docs/order_watcher/2/introduction.md delete mode 100644 packages/website/md/docs/smart_contracts/1/introduction.md delete mode 100644 packages/website/md/docs/smart_contracts/2/introduction.md delete mode 100644 packages/website/md/docs/sol-compiler/1/installation.md delete mode 100644 packages/website/md/docs/sol-compiler/1/introduction.md delete mode 100644 packages/website/md/docs/sol-compiler/1/usage.md delete mode 100644 packages/website/md/docs/sol-compiler/2/installation.md delete mode 100644 packages/website/md/docs/sol-compiler/2/usage.md delete mode 100644 packages/website/md/docs/sol_coverage/installation.md delete mode 100644 packages/website/md/docs/sol_coverage/introduction.md delete mode 100644 packages/website/md/docs/sol_coverage/usage.md delete mode 100644 packages/website/md/docs/sol_profiler/installation.md delete mode 100644 packages/website/md/docs/sol_profiler/introduction.md delete mode 100644 packages/website/md/docs/sol_profiler/usage.md delete mode 100644 packages/website/md/docs/sol_trace/installation.md delete mode 100644 packages/website/md/docs/sol_trace/introduction.md delete mode 100644 packages/website/md/docs/sol_trace/usage.md delete mode 100644 packages/website/md/docs/subproviders/1/installation.md delete mode 100644 packages/website/md/docs/subproviders/1/introduction.md delete mode 100644 packages/website/md/docs/subproviders/1/ledger_node_hid.md delete mode 100644 packages/website/md/docs/subproviders/2/installation.md delete mode 100644 packages/website/md/docs/web3_wrapper/1/installation.md delete mode 100644 packages/website/md/docs/web3_wrapper/1/introduction.md delete mode 100644 packages/website/md/docs/web3_wrapper/2/installation.md delete mode 100644 packages/website/package.json delete mode 100644 packages/website/public/css/basscss.min.css delete mode 100644 packages/website/public/css/basscss_responsive_custom.css delete mode 100644 packages/website/public/css/basscss_responsive_margin.css delete mode 100644 packages/website/public/css/basscss_responsive_padding.css delete mode 100644 packages/website/public/css/basscss_responsive_type_scale.css delete mode 100644 packages/website/public/css/formular.css delete mode 100644 packages/website/public/css/github-gist.css delete mode 100755 packages/website/public/css/material-design-iconic-font.min.css delete mode 100644 packages/website/public/css/roboto.css delete mode 100644 packages/website/public/css/roboto_mono.css delete mode 100644 packages/website/public/fonts/Formular-Light.woff delete mode 100644 packages/website/public/fonts/Formular-Light.woff2 delete mode 100644 packages/website/public/fonts/Formular-Regular.woff delete mode 100644 packages/website/public/fonts/Formular-Regular.woff2 delete mode 100755 packages/website/public/fonts/Material-Design-Iconic-Font.eot delete mode 100755 packages/website/public/fonts/Material-Design-Iconic-Font.svg delete mode 100755 packages/website/public/fonts/Material-Design-Iconic-Font.ttf delete mode 100755 packages/website/public/fonts/Material-Design-Iconic-Font.woff delete mode 100755 packages/website/public/fonts/Material-Design-Iconic-Font.woff2 delete mode 100755 packages/website/public/fonts/Roboto-Black.ttf delete mode 100755 packages/website/public/fonts/Roboto-BlackItalic.ttf delete mode 100755 packages/website/public/fonts/Roboto-Bold.ttf delete mode 100755 packages/website/public/fonts/Roboto-BoldItalic.ttf delete mode 100755 packages/website/public/fonts/Roboto-Italic.ttf delete mode 100755 packages/website/public/fonts/Roboto-Light.ttf delete mode 100755 packages/website/public/fonts/Roboto-LightItalic.ttf delete mode 100755 packages/website/public/fonts/Roboto-Medium.ttf delete mode 100755 packages/website/public/fonts/Roboto-MediumItalic.ttf delete mode 100755 packages/website/public/fonts/Roboto-Regular.ttf delete mode 100755 packages/website/public/fonts/Roboto-Thin.ttf delete mode 100755 packages/website/public/fonts/Roboto-ThinItalic.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Bold.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-BoldItalic.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Italic.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Light.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-LightItalic.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Medium.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-MediumItalic.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Regular.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-Thin.ttf delete mode 100755 packages/website/public/fonts/RobotoMono-ThinItalic.ttf delete mode 100644 packages/website/public/gifs/genesis.gif delete mode 100644 packages/website/public/images/0x-instant/0x-instant-widgets.png delete mode 100644 packages/website/public/images/0x-instant/0x-instant-widgets@2x.png delete mode 100755 packages/website/public/images/0x-instant/widget-1.png delete mode 100755 packages/website/public/images/0x-instant/widget-2.png delete mode 100755 packages/website/public/images/0x-instant/widget-3.png delete mode 100755 packages/website/public/images/0x-instant/widget-4.png delete mode 100755 packages/website/public/images/0x-instant/widget-5.png delete mode 100755 packages/website/public/images/0x-instant/widget-6.png delete mode 100644 packages/website/public/images/0x_logo.png delete mode 100755 packages/website/public/images/about/about-office.png delete mode 100644 packages/website/public/images/banner/bottomofcta.png delete mode 100644 packages/website/public/images/banner/topofcta.png delete mode 100644 packages/website/public/images/clients/bamboo.svg delete mode 100644 packages/website/public/images/clients/emoon.svg delete mode 100644 packages/website/public/images/clients/ercdex.svg delete mode 100644 packages/website/public/images/clients/godsUnchained.svg delete mode 100644 packages/website/public/images/clients/instex.svg delete mode 100644 packages/website/public/images/clients/laketrade.svg delete mode 100644 packages/website/public/images/clients/ledgerdex.svg delete mode 100644 packages/website/public/images/clients/openrelay.svg delete mode 100644 packages/website/public/images/clients/paradex.svg delete mode 100644 packages/website/public/images/clients/radar-relay.svg delete mode 100644 packages/website/public/images/clients/sharkrelay.svg delete mode 100644 packages/website/public/images/clients/starbitex.svg delete mode 100644 packages/website/public/images/clients/tokenjar.svg delete mode 100644 packages/website/public/images/clients/veil.svg delete mode 100644 packages/website/public/images/coinbase_wallet_logo.png delete mode 100644 packages/website/public/images/developers/logo/0x.svg delete mode 100644 packages/website/public/images/developers/logo/docs.svg delete mode 100644 packages/website/public/images/developers/tutorials/0x_order_basics.svg delete mode 100644 packages/website/public/images/developers/tutorials/build_a_relayer.svg delete mode 100644 packages/website/public/images/developers/tutorials/build_a_trading_bot.svg delete mode 100644 packages/website/public/images/developers/tutorials/develop_on_ethereum.svg delete mode 100644 packages/website/public/images/developers/tutorials/integrate_0x_instant.svg delete mode 100644 packages/website/public/images/developers/tutorials/use_shared_liquidity.svg delete mode 100644 packages/website/public/images/doc_icons/connect.png delete mode 100644 packages/website/public/images/doc_icons/contracts.png delete mode 100644 packages/website/public/images/doc_icons/docs.png delete mode 100644 packages/website/public/images/doc_icons/wiki.png delete mode 100644 packages/website/public/images/doc_icons/zeroExJs.png delete mode 100644 packages/website/public/images/eth_dollar.svg delete mode 100644 packages/website/public/images/eth_token.svg delete mode 100644 packages/website/public/images/eth_token_erc20.svg delete mode 100644 packages/website/public/images/ether.png delete mode 100644 packages/website/public/images/ether_alt.svg delete mode 100644 packages/website/public/images/events/berlin.jpg delete mode 100644 packages/website/public/images/events/event-sample.jpg delete mode 100644 packages/website/public/images/events/london.jpg delete mode 100644 packages/website/public/images/events/sf.jpg delete mode 100755 packages/website/public/images/favicon/favicon-2-16x16.png delete mode 100755 packages/website/public/images/favicon/favicon-2-32x32.png delete mode 100755 packages/website/public/images/favicon/favicon.ico delete mode 100644 packages/website/public/images/jobs/map@2x.png delete mode 100644 packages/website/public/images/landing/0x_chips.png delete mode 100644 packages/website/public/images/landing/0x_homepage.svg delete mode 100644 packages/website/public/images/landing/aragon.png delete mode 100644 packages/website/public/images/landing/augur.png delete mode 100644 packages/website/public/images/landing/currency.png delete mode 100644 packages/website/public/images/landing/dharma.png delete mode 100644 packages/website/public/images/landing/digital_goods.png delete mode 100644 packages/website/public/images/landing/distributed_network.png delete mode 100644 packages/website/public/images/landing/ethfinex.png delete mode 100644 packages/website/public/images/landing/exchange_everywhere.png delete mode 100644 packages/website/public/images/landing/fund_management_icon.png delete mode 100644 packages/website/public/images/landing/gnosis.png delete mode 100644 packages/website/public/images/landing/governance_icon.png delete mode 100644 packages/website/public/images/landing/hero_chip_image.png delete mode 100644 packages/website/public/images/landing/lendroid.png delete mode 100644 packages/website/public/images/landing/liquidity.png delete mode 100644 packages/website/public/images/landing/loans_icon.png delete mode 100644 packages/website/public/images/landing/maker.png delete mode 100644 packages/website/public/images/landing/melonport.png delete mode 100644 packages/website/public/images/landing/open_source.png delete mode 100644 packages/website/public/images/landing/paradex.png delete mode 100644 packages/website/public/images/landing/prediction_market_icon.png delete mode 100644 packages/website/public/images/landing/project_logos/amadeus.png delete mode 100644 packages/website/public/images/landing/project_logos/anx.png delete mode 100644 packages/website/public/images/landing/project_logos/aragon.png delete mode 100644 packages/website/public/images/landing/project_logos/auctus.png delete mode 100644 packages/website/public/images/landing/project_logos/augur.png delete mode 100644 packages/website/public/images/landing/project_logos/blocknet.png delete mode 100644 packages/website/public/images/landing/project_logos/chronobank.png delete mode 100644 packages/website/public/images/landing/project_logos/ddex.png delete mode 100644 packages/website/public/images/landing/project_logos/decent_ex.png delete mode 100644 packages/website/public/images/landing/project_logos/dextroid.png delete mode 100644 packages/website/public/images/landing/project_logos/dharma.png delete mode 100644 packages/website/public/images/landing/project_logos/district0x.png delete mode 100644 packages/website/public/images/landing/project_logos/dydx.png delete mode 100644 packages/website/public/images/landing/project_logos/ercdex.png delete mode 100644 packages/website/public/images/landing/project_logos/ethfinex.png delete mode 100644 packages/website/public/images/landing/project_logos/ethix.png delete mode 100644 packages/website/public/images/landing/project_logos/idt.png delete mode 100644 packages/website/public/images/landing/project_logos/imToken.png delete mode 100644 packages/website/public/images/landing/project_logos/lendroid.png delete mode 100644 packages/website/public/images/landing/project_logos/maker.png delete mode 100644 packages/website/public/images/landing/project_logos/melonport.png delete mode 100644 packages/website/public/images/landing/project_logos/open_relay.png delete mode 100644 packages/website/public/images/landing/project_logos/paradex.png delete mode 100644 packages/website/public/images/landing/project_logos/radar_relay.png delete mode 100644 packages/website/public/images/landing/project_logos/status.png delete mode 100644 packages/website/public/images/landing/project_logos/the_ocean.png delete mode 100644 packages/website/public/images/landing/radar_relay.png delete mode 100644 packages/website/public/images/landing/relayer_diagram.png delete mode 100644 packages/website/public/images/landing/stable_tokens_icon.png delete mode 100644 packages/website/public/images/landing/stocks.png delete mode 100644 packages/website/public/images/landing/tokenized_world.png delete mode 100644 packages/website/public/images/launch_kit/0x_cupboard.svg delete mode 100644 packages/website/public/images/launch_kit/enable_trading.svg delete mode 100644 packages/website/public/images/launch_kit/fork.svg delete mode 100644 packages/website/public/images/launch_kit/in_game_marketplace.svg delete mode 100644 packages/website/public/images/launch_kit/local_market.svg delete mode 100644 packages/website/public/images/launch_kit/secondary_market.svg delete mode 100644 packages/website/public/images/launch_kit/shared_liquidity.svg delete mode 100644 packages/website/public/images/ledger_icon.png delete mode 100644 packages/website/public/images/lock_icon.svg delete mode 100644 packages/website/public/images/logos/FBG.png delete mode 100644 packages/website/public/images/logos/aragon.png delete mode 100644 packages/website/public/images/logos/augur.png delete mode 100644 packages/website/public/images/logos/blockchain_capital.png delete mode 100644 packages/website/public/images/logos/chronobank.png delete mode 100644 packages/website/public/images/logos/dharma.png delete mode 100644 packages/website/public/images/logos/district0x.png delete mode 100644 packages/website/public/images/logos/jen_advisors.png delete mode 100644 packages/website/public/images/logos/maker.png delete mode 100644 packages/website/public/images/logos/melonport.png delete mode 100644 packages/website/public/images/logos/openANX.png delete mode 100644 packages/website/public/images/logos/pantera_capital.png delete mode 100644 packages/website/public/images/logos/polychain_capital.png delete mode 100644 packages/website/public/images/metamask_icon.png delete mode 100644 packages/website/public/images/metamask_or_parity.png delete mode 100644 packages/website/public/images/network_icons/kovan.png delete mode 100644 packages/website/public/images/network_icons/mainnet.png delete mode 100644 packages/website/public/images/network_icons/rinkeby.png delete mode 100644 packages/website/public/images/network_icons/ropsten.png delete mode 100644 packages/website/public/images/og_image.png delete mode 100644 packages/website/public/images/press/logo-forbes.png delete mode 100644 packages/website/public/images/press/logo-fortune.png delete mode 100644 packages/website/public/images/press/logo-techcrunch.png delete mode 100644 packages/website/public/images/press/logo-venturebeat.png delete mode 100644 packages/website/public/images/protocol_logo_black.png delete mode 100644 packages/website/public/images/protocol_logo_white.png delete mode 100755 packages/website/public/images/relayer-logos/logo.png delete mode 100755 packages/website/public/images/relayer-logos/logo_1.png delete mode 100755 packages/website/public/images/relayer-logos/logo_2.1.png delete mode 100755 packages/website/public/images/relayer-logos/logo_2.2.png delete mode 100755 packages/website/public/images/relayer-logos/logo_2.3.png delete mode 100755 packages/website/public/images/relayer-logos/logo_2.png delete mode 100755 packages/website/public/images/relayer-logos/logo_3.png delete mode 100755 packages/website/public/images/relayer-logos/logo_4.png delete mode 100755 packages/website/public/images/relayer-logos/logo_5.png delete mode 100644 packages/website/public/images/relayer_fallback.png delete mode 100644 packages/website/public/images/setup_account_icon.svg delete mode 100644 packages/website/public/images/social/discord.png delete mode 100644 packages/website/public/images/social/discourse.png delete mode 100644 packages/website/public/images/social/github.png delete mode 100644 packages/website/public/images/social/medium.png delete mode 100644 packages/website/public/images/social/reddit.png delete mode 100644 packages/website/public/images/social/slack.png delete mode 100644 packages/website/public/images/social/twitter.png delete mode 100755 packages/website/public/images/team/advisors/davids.jpg delete mode 100755 packages/website/public/images/team/advisors/frede.jpg delete mode 100755 packages/website/public/images/team/advisors/joeyk.jpg delete mode 100755 packages/website/public/images/team/advisors/lindax.jpg delete mode 100755 packages/website/public/images/team/advisors/olafc.jpg delete mode 100755 packages/website/public/images/team/alexb.jpg delete mode 100755 packages/website/public/images/team/alexv.jpg delete mode 100755 packages/website/public/images/team/amirb.jpg delete mode 100755 packages/website/public/images/team/benb.jpg delete mode 100755 packages/website/public/images/team/blake.jpg delete mode 100755 packages/website/public/images/team/brandonm.jpg delete mode 100755 packages/website/public/images/team/chrisk.jpg delete mode 100755 packages/website/public/images/team/clayr.jpg delete mode 100755 packages/website/public/images/team/eugenea.jpg delete mode 100755 packages/website/public/images/team/fabiob.jpg delete mode 100755 packages/website/public/images/team/francesco.jpg delete mode 100755 packages/website/public/images/team/greg.jpg delete mode 100755 packages/website/public/images/team/jacobe.jpg delete mode 100755 packages/website/public/images/team/jasons.jpg delete mode 100755 packages/website/public/images/team/leonidL.jpg delete mode 100644 packages/website/public/images/team/marcs.jpg delete mode 100755 packages/website/public/images/team/mattt.jpg delete mode 100755 packages/website/public/images/team/melo.jpg delete mode 100644 packages/website/public/images/team/oshirob.png delete mode 100755 packages/website/public/images/team/peterz.jpg delete mode 100755 packages/website/public/images/team/rahuls.jpg delete mode 100755 packages/website/public/images/team/remcoB.jpg delete mode 100755 packages/website/public/images/team/steveK.jpg delete mode 100755 packages/website/public/images/team/toms.jpg delete mode 100755 packages/website/public/images/team/weijew.jpg delete mode 100755 packages/website/public/images/team/willw.jpg delete mode 100755 packages/website/public/images/team/xianny.jpg delete mode 100755 packages/website/public/images/team/zack.jpg delete mode 100644 packages/website/public/images/token_icons/1ST.png delete mode 100644 packages/website/public/images/token_icons/ABYSS.png delete mode 100644 packages/website/public/images/token_icons/ADT.png delete mode 100644 packages/website/public/images/token_icons/AE.png delete mode 100644 packages/website/public/images/token_icons/AION.png delete mode 100644 packages/website/public/images/token_icons/AIR.png delete mode 100644 packages/website/public/images/token_icons/ANT.png delete mode 100644 packages/website/public/images/token_icons/APCC.png delete mode 100644 packages/website/public/images/token_icons/APPC.png delete mode 100644 packages/website/public/images/token_icons/ARN.png delete mode 100644 packages/website/public/images/token_icons/ART.png delete mode 100644 packages/website/public/images/token_icons/AST.png delete mode 100644 packages/website/public/images/token_icons/BAT.png delete mode 100644 packages/website/public/images/token_icons/BCAP.png delete mode 100644 packages/website/public/images/token_icons/BCPT.png delete mode 100644 packages/website/public/images/token_icons/BNT.png delete mode 100644 packages/website/public/images/token_icons/BRM.png delete mode 100644 packages/website/public/images/token_icons/CAG.png delete mode 100644 packages/website/public/images/token_icons/CAN.png delete mode 100644 packages/website/public/images/token_icons/CAT.png delete mode 100644 packages/website/public/images/token_icons/CFI.png delete mode 100644 packages/website/public/images/token_icons/CVC.png delete mode 100644 packages/website/public/images/token_icons/DAI.png delete mode 100644 packages/website/public/images/token_icons/DATA.png delete mode 100644 packages/website/public/images/token_icons/DEB.png delete mode 100644 packages/website/public/images/token_icons/DGD.png delete mode 100644 packages/website/public/images/token_icons/DIVX.png delete mode 100644 packages/website/public/images/token_icons/DNT.png delete mode 100644 packages/website/public/images/token_icons/EDG.png delete mode 100644 packages/website/public/images/token_icons/EDU.png delete mode 100644 packages/website/public/images/token_icons/ELEC.png delete mode 100644 packages/website/public/images/token_icons/EMONT.png delete mode 100644 packages/website/public/images/token_icons/ENG.png delete mode 100644 packages/website/public/images/token_icons/ENTR.png delete mode 100644 packages/website/public/images/token_icons/EOS.png delete mode 100644 packages/website/public/images/token_icons/EVE.png delete mode 100644 packages/website/public/images/token_icons/FUN.png delete mode 100644 packages/website/public/images/token_icons/GEE.png delete mode 100644 packages/website/public/images/token_icons/GEN.png delete mode 100644 packages/website/public/images/token_icons/GET.png delete mode 100644 packages/website/public/images/token_icons/GNO.png delete mode 100644 packages/website/public/images/token_icons/GNT.png delete mode 100644 packages/website/public/images/token_icons/HGT.png delete mode 100644 packages/website/public/images/token_icons/HOT.png delete mode 100644 packages/website/public/images/token_icons/ICN.png delete mode 100644 packages/website/public/images/token_icons/IND.png delete mode 100644 packages/website/public/images/token_icons/J8T.png delete mode 100644 packages/website/public/images/token_icons/JET.png delete mode 100644 packages/website/public/images/token_icons/KIN.png delete mode 100644 packages/website/public/images/token_icons/KNC.png delete mode 100644 packages/website/public/images/token_icons/LINK.png delete mode 100644 packages/website/public/images/token_icons/LOOM.png delete mode 100644 packages/website/public/images/token_icons/LUN.png delete mode 100644 packages/website/public/images/token_icons/MANA.png delete mode 100644 packages/website/public/images/token_icons/MCO.png delete mode 100644 packages/website/public/images/token_icons/MKR.png delete mode 100644 packages/website/public/images/token_icons/MLN.png delete mode 100644 packages/website/public/images/token_icons/MOD.png delete mode 100644 packages/website/public/images/token_icons/MORPH.png delete mode 100644 packages/website/public/images/token_icons/MOT.png delete mode 100644 packages/website/public/images/token_icons/MTL.png delete mode 100644 packages/website/public/images/token_icons/NANJ.png delete mode 100644 packages/website/public/images/token_icons/NAVI.png delete mode 100644 packages/website/public/images/token_icons/NCT.png delete mode 100644 packages/website/public/images/token_icons/NDC.png delete mode 100644 packages/website/public/images/token_icons/NEXO.png delete mode 100644 packages/website/public/images/token_icons/NMR.png delete mode 100644 packages/website/public/images/token_icons/OAX.png delete mode 100644 packages/website/public/images/token_icons/OCC.png delete mode 100644 packages/website/public/images/token_icons/OMG.png delete mode 100644 packages/website/public/images/token_icons/OMX.png delete mode 100644 packages/website/public/images/token_icons/PAL.png delete mode 100644 packages/website/public/images/token_icons/PAY.png delete mode 100644 packages/website/public/images/token_icons/PKT.png delete mode 100644 packages/website/public/images/token_icons/PLAY.png delete mode 100644 packages/website/public/images/token_icons/PLU.png delete mode 100644 packages/website/public/images/token_icons/POLY.png delete mode 100644 packages/website/public/images/token_icons/QTUM.png delete mode 100644 packages/website/public/images/token_icons/REN.png delete mode 100644 packages/website/public/images/token_icons/REP.png delete mode 100644 packages/website/public/images/token_icons/REQ.png delete mode 100644 packages/website/public/images/token_icons/RFR.png delete mode 100644 packages/website/public/images/token_icons/RLC.png delete mode 100644 packages/website/public/images/token_icons/ROL.png delete mode 100644 packages/website/public/images/token_icons/RVT.png delete mode 100644 packages/website/public/images/token_icons/SALT.png delete mode 100644 packages/website/public/images/token_icons/SAN.png delete mode 100644 packages/website/public/images/token_icons/SIG.png delete mode 100644 packages/website/public/images/token_icons/SNGLS.png delete mode 100644 packages/website/public/images/token_icons/SNT.png delete mode 100644 packages/website/public/images/token_icons/SPANK.png delete mode 100644 packages/website/public/images/token_icons/SPN.png delete mode 100644 packages/website/public/images/token_icons/SS.png delete mode 100644 packages/website/public/images/token_icons/STORJ.png delete mode 100644 packages/website/public/images/token_icons/SUB.png delete mode 100644 packages/website/public/images/token_icons/SWT.png delete mode 100644 packages/website/public/images/token_icons/SXDT.png delete mode 100644 packages/website/public/images/token_icons/TAAS.png delete mode 100644 packages/website/public/images/token_icons/TIME.png delete mode 100644 packages/website/public/images/token_icons/TKN.png delete mode 100644 packages/website/public/images/token_icons/TRL.png delete mode 100644 packages/website/public/images/token_icons/TRST.png delete mode 100644 packages/website/public/images/token_icons/TRX.png delete mode 100644 packages/website/public/images/token_icons/UPP.png delete mode 100644 packages/website/public/images/token_icons/VSL.png delete mode 100644 packages/website/public/images/token_icons/WAND.png delete mode 100644 packages/website/public/images/token_icons/WETH.png delete mode 100644 packages/website/public/images/token_icons/WINGS.png delete mode 100644 packages/website/public/images/token_icons/WTC.png delete mode 100644 packages/website/public/images/token_icons/WYV.png delete mode 100644 packages/website/public/images/token_icons/XAUR.png delete mode 100644 packages/website/public/images/token_icons/XNK.png delete mode 100644 packages/website/public/images/token_icons/XSC.png delete mode 100644 packages/website/public/images/token_icons/XYO.png delete mode 100644 packages/website/public/images/token_icons/ZIL.png delete mode 100644 packages/website/public/images/token_icons/ZRX.png delete mode 100644 packages/website/public/images/toshi_logo.jpg delete mode 100644 packages/website/public/images/trade_arrows.png delete mode 100644 packages/website/public/images/unlock-mm.png delete mode 100644 packages/website/public/images/wrapped_eth_gray.png delete mode 100644 packages/website/public/images/zrx_ecosystem.svg delete mode 100644 packages/website/public/images/zrx_pie_chart.png delete mode 100644 packages/website/public/images/zrx_token.png delete mode 100644 packages/website/public/index.html delete mode 100644 packages/website/public/js/rollbar.umd.min.js delete mode 100644 packages/website/public/pdfs/0x_white_paper.pdf delete mode 100644 packages/website/translations/chinese.json delete mode 100644 packages/website/translations/english.json delete mode 100644 packages/website/translations/korean.json delete mode 100644 packages/website/translations/russian.json delete mode 100644 packages/website/translations/spanish.json delete mode 100644 packages/website/ts/blockchain.ts delete mode 100644 packages/website/ts/blockchain_watcher.ts delete mode 100644 packages/website/ts/components/aboutPageLayout.tsx delete mode 100644 packages/website/ts/components/animatedChatIcon.tsx delete mode 100644 packages/website/ts/components/animatedCompassIcon.tsx delete mode 100644 packages/website/ts/components/banner.tsx delete mode 100644 packages/website/ts/components/blockIconLink.tsx delete mode 100644 packages/website/ts/components/button.tsx delete mode 100644 packages/website/ts/components/chapter_link.tsx delete mode 100644 packages/website/ts/components/definition.tsx delete mode 100644 packages/website/ts/components/dialogs/blockchain_err_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/ledger_config_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/send_dialog.tsx delete mode 100644 packages/website/ts/components/dialogs/track_token_confirmation_dialog.tsx delete mode 100644 packages/website/ts/components/documentation/docs_logo.tsx delete mode 100644 packages/website/ts/components/documentation/docs_top_bar.tsx delete mode 100644 packages/website/ts/components/documentation/overview_content.tsx delete mode 100644 packages/website/ts/components/documentation/sidebar_header.tsx delete mode 100644 packages/website/ts/components/documentation/tutorial_button.tsx delete mode 100644 packages/website/ts/components/documentation/version_drop_down.tsx delete mode 100644 packages/website/ts/components/dropdowns/developers_drop_down.tsx delete mode 100644 packages/website/ts/components/dropdowns/dropdown_developers.tsx delete mode 100644 packages/website/ts/components/dropdowns/dropdown_products.tsx delete mode 100644 packages/website/ts/components/dropdowns/network_drop_down.tsx delete mode 100644 packages/website/ts/components/eth_weth_conversion_button.tsx delete mode 100644 packages/website/ts/components/eth_wrappers.tsx delete mode 100644 packages/website/ts/components/fill_order.tsx delete mode 100644 packages/website/ts/components/fill_order_json.tsx delete mode 100644 packages/website/ts/components/fill_warning_dialog.tsx delete mode 100644 packages/website/ts/components/flash_messages/asset_send_completed.tsx delete mode 100644 packages/website/ts/components/flash_messages/transaction_submitted.tsx delete mode 100644 packages/website/ts/components/footer.tsx delete mode 100644 packages/website/ts/components/generate_order/asset_picker.tsx delete mode 100644 packages/website/ts/components/generate_order/generate_order_form.tsx delete mode 100644 packages/website/ts/components/generate_order/new_token_form.tsx delete mode 100644 packages/website/ts/components/hamburger.tsx delete mode 100644 packages/website/ts/components/header.tsx delete mode 100644 packages/website/ts/components/hero.tsx delete mode 100644 packages/website/ts/components/heroAnimation.tsx delete mode 100644 packages/website/ts/components/heroImage.tsx delete mode 100644 packages/website/ts/components/icon.tsx delete mode 100644 packages/website/ts/components/image.tsx delete mode 100644 packages/website/ts/components/inputs/address_input.tsx delete mode 100644 packages/website/ts/components/inputs/allowance_state_toggle.tsx delete mode 100644 packages/website/ts/components/inputs/balance_bounded_input.tsx delete mode 100644 packages/website/ts/components/inputs/eth_amount_input.tsx delete mode 100644 packages/website/ts/components/inputs/expiration_input.tsx delete mode 100644 packages/website/ts/components/inputs/hash_input.tsx delete mode 100644 packages/website/ts/components/inputs/identicon_address_input.tsx delete mode 100644 packages/website/ts/components/inputs/token_amount_input.tsx delete mode 100644 packages/website/ts/components/inputs/token_input.tsx delete mode 100644 packages/website/ts/components/link.tsx delete mode 100644 packages/website/ts/components/logo.tsx delete mode 100644 packages/website/ts/components/meta_tags.tsx delete mode 100644 packages/website/ts/components/mobileNav.tsx delete mode 100644 packages/website/ts/components/modals/input.tsx delete mode 100644 packages/website/ts/components/modals/modal_contact.tsx delete mode 100644 packages/website/ts/components/nested_sidebar_menu.tsx delete mode 100644 packages/website/ts/components/newLayout.tsx delete mode 100644 packages/website/ts/components/newsletter_form.tsx delete mode 100644 packages/website/ts/components/old_footer.tsx delete mode 100644 packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/congrats_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/intro_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/onboarding_card.tsx delete mode 100644 packages/website/ts/components/onboarding/onboarding_flow.tsx delete mode 100644 packages/website/ts/components/onboarding/onboarding_tooltip.tsx delete mode 100644 packages/website/ts/components/onboarding/portal_onboarding_flow.tsx delete mode 100644 packages/website/ts/components/onboarding/set_allowances_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/unlock_wallet_onboarding_step.tsx delete mode 100644 packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx delete mode 100644 packages/website/ts/components/order_json.tsx delete mode 100644 packages/website/ts/components/portal/back_button.tsx delete mode 100644 packages/website/ts/components/portal/drawer_menu.tsx delete mode 100644 packages/website/ts/components/portal/loading.tsx delete mode 100644 packages/website/ts/components/portal/menu.tsx delete mode 100644 packages/website/ts/components/portal/portal.tsx delete mode 100644 packages/website/ts/components/portal/section.tsx delete mode 100644 packages/website/ts/components/portal/text_header.tsx delete mode 100644 packages/website/ts/components/relayer_index/relayer_grid_tile.tsx delete mode 100644 packages/website/ts/components/relayer_index/relayer_index.tsx delete mode 100644 packages/website/ts/components/relayer_index/relayer_top_tokens.tsx delete mode 100644 packages/website/ts/components/sections/landing/about.tsx delete mode 100644 packages/website/ts/components/sections/landing/clients.tsx delete mode 100644 packages/website/ts/components/sections/landing/cta.tsx delete mode 100644 packages/website/ts/components/sections/landing/hero.tsx delete mode 100644 packages/website/ts/components/send_button.tsx delete mode 100644 packages/website/ts/components/siteWrap.tsx delete mode 100644 packages/website/ts/components/slider/slider.tsx delete mode 100644 packages/website/ts/components/text.tsx delete mode 100644 packages/website/ts/components/token_balances.tsx delete mode 100644 packages/website/ts/components/top_bar/provider_display.tsx delete mode 100644 packages/website/ts/components/top_bar/top_bar.tsx delete mode 100644 packages/website/ts/components/top_bar/top_bar_menu_item.tsx delete mode 100644 packages/website/ts/components/track_token_confirmation.tsx delete mode 100644 packages/website/ts/components/trade_history/trade_history.tsx delete mode 100644 packages/website/ts/components/trade_history/trade_history_item.tsx delete mode 100644 packages/website/ts/components/ui/account_connection.tsx delete mode 100644 packages/website/ts/components/ui/alert.tsx delete mode 100644 packages/website/ts/components/ui/allowance_state_view.tsx delete mode 100644 packages/website/ts/components/ui/balance.tsx delete mode 100644 packages/website/ts/components/ui/button.tsx delete mode 100644 packages/website/ts/components/ui/check_mark.tsx delete mode 100644 packages/website/ts/components/ui/circle.tsx delete mode 100644 packages/website/ts/components/ui/container.tsx delete mode 100644 packages/website/ts/components/ui/copy_icon.tsx delete mode 100644 packages/website/ts/components/ui/custom_menu_item.tsx delete mode 100644 packages/website/ts/components/ui/drop_down.tsx delete mode 100644 packages/website/ts/components/ui/ease_up_from_bottom_animation.tsx delete mode 100644 packages/website/ts/components/ui/ethereum_address.tsx delete mode 100644 packages/website/ts/components/ui/etherscan_icon.tsx delete mode 100644 packages/website/ts/components/ui/fake_text_field.tsx delete mode 100644 packages/website/ts/components/ui/flash_message.tsx delete mode 100644 packages/website/ts/components/ui/help_tooltip.tsx delete mode 100644 packages/website/ts/components/ui/icon_button.tsx delete mode 100644 packages/website/ts/components/ui/identicon.tsx delete mode 100644 packages/website/ts/components/ui/image.tsx delete mode 100644 packages/website/ts/components/ui/input_label.tsx delete mode 100644 packages/website/ts/components/ui/island.tsx delete mode 100644 packages/website/ts/components/ui/lifecycle_raised_button.tsx delete mode 100644 packages/website/ts/components/ui/multi_select.tsx delete mode 100644 packages/website/ts/components/ui/overlay.tsx delete mode 100644 packages/website/ts/components/ui/party.tsx delete mode 100644 packages/website/ts/components/ui/pointer.tsx delete mode 100644 packages/website/ts/components/ui/required_label.tsx delete mode 100644 packages/website/ts/components/ui/retry.tsx delete mode 100644 packages/website/ts/components/ui/simple_menu.tsx delete mode 100644 packages/website/ts/components/ui/spinner.tsx delete mode 100644 packages/website/ts/components/ui/swap_icon.tsx delete mode 100644 packages/website/ts/components/ui/text.tsx delete mode 100644 packages/website/ts/components/ui/token_icon.tsx delete mode 100644 packages/website/ts/components/visual_order.tsx delete mode 100644 packages/website/ts/components/wallet/body_overlay.tsx delete mode 100644 packages/website/ts/components/wallet/null_token_row.tsx delete mode 100644 packages/website/ts/components/wallet/placeholder.tsx delete mode 100644 packages/website/ts/components/wallet/standard_icon_row.tsx delete mode 100644 packages/website/ts/components/wallet/wallet.tsx delete mode 100644 packages/website/ts/components/wallet/wrap_ether_item.tsx delete mode 100644 packages/website/ts/constants/.gitkeep delete mode 100644 packages/website/ts/constants/animations.tsx delete mode 100644 packages/website/ts/constants/cssReset.js delete mode 100644 packages/website/ts/constants/globalStyle.tsx delete mode 100644 packages/website/ts/constants/utilities.tsx delete mode 100644 packages/website/ts/containers/asset_buyer_documentation.ts delete mode 100644 packages/website/ts/containers/connect_documentation.ts delete mode 100644 packages/website/ts/containers/contract_wrappers_documentation.ts delete mode 100644 packages/website/ts/containers/docs_home.ts delete mode 100644 packages/website/ts/containers/ethereum_types_documentation.ts delete mode 100644 packages/website/ts/containers/faq.ts delete mode 100644 packages/website/ts/containers/generate_order_form.ts delete mode 100644 packages/website/ts/containers/inputs/allowance_state_toggle.ts delete mode 100644 packages/website/ts/containers/inputs/eth_amount_input.ts delete mode 100644 packages/website/ts/containers/json_schemas_documentation.ts delete mode 100644 packages/website/ts/containers/migrations_documentation.ts delete mode 100644 packages/website/ts/containers/not_found.ts delete mode 100644 packages/website/ts/containers/order_utils_documentation.ts delete mode 100644 packages/website/ts/containers/order_watcher_documentation.ts delete mode 100644 packages/website/ts/containers/portal.ts delete mode 100644 packages/website/ts/containers/portal_onboarding_flow.ts delete mode 100644 packages/website/ts/containers/smart_contracts_documentation.ts delete mode 100644 packages/website/ts/containers/sol_compiler_documentation.ts delete mode 100644 packages/website/ts/containers/sol_coverage_documentation.ts delete mode 100644 packages/website/ts/containers/sol_profiler_documentation.ts delete mode 100644 packages/website/ts/containers/sol_trace_documentation.ts delete mode 100644 packages/website/ts/containers/subproviders_documentation.ts delete mode 100644 packages/website/ts/containers/web3_wrapper_documentation.ts delete mode 100644 packages/website/ts/containers/wiki.ts delete mode 100644 packages/website/ts/containers/zero_ex_js_documentation.ts delete mode 100644 packages/website/ts/globals.d.ts delete mode 100755 packages/website/ts/icons/illustrations/0x.svg delete mode 100755 packages/website/ts/icons/illustrations/buildBusiness.svg delete mode 100644 packages/website/ts/icons/illustrations/checkmark.svg delete mode 100644 packages/website/ts/icons/illustrations/code-repo.svg delete mode 100644 packages/website/ts/icons/illustrations/coin.svg delete mode 100644 packages/website/ts/icons/illustrations/consistently-ship.svg delete mode 100644 packages/website/ts/icons/illustrations/customize.svg delete mode 100755 packages/website/ts/icons/illustrations/decentralisedLoans.svg delete mode 100755 packages/website/ts/icons/illustrations/description.svg delete mode 100755 packages/website/ts/icons/illustrations/descriptionBolt.svg delete mode 100755 packages/website/ts/icons/illustrations/descriptionCoin.svg delete mode 100755 packages/website/ts/icons/illustrations/descriptionCopy.svg delete mode 100755 packages/website/ts/icons/illustrations/descriptionFlask.svg delete mode 100755 packages/website/ts/icons/illustrations/eficientDesign.svg delete mode 100644 packages/website/ts/icons/illustrations/eth-based-tokens.svg delete mode 100755 packages/website/ts/icons/illustrations/extensibleArchitecture.svg delete mode 100755 packages/website/ts/icons/illustrations/flexibleIntegration.svg delete mode 100755 packages/website/ts/icons/illustrations/flexibleIntegration0xInstant.svg delete mode 100755 packages/website/ts/icons/illustrations/flexibleOrders.svg delete mode 100755 packages/website/ts/icons/illustrations/gamingAndCollectibles.svg delete mode 100755 packages/website/ts/icons/illustrations/generateRevenueForYourBusiness-large.svg delete mode 100755 packages/website/ts/icons/illustrations/getInTouch.svg delete mode 100644 packages/website/ts/icons/illustrations/getStarted.svg delete mode 100644 packages/website/ts/icons/illustrations/launchKit.svg delete mode 100755 packages/website/ts/icons/illustrations/launchKit_versionB.svg delete mode 100755 packages/website/ts/icons/illustrations/legalResources.svg delete mode 100644 packages/website/ts/icons/illustrations/logo-mark.svg delete mode 100644 packages/website/ts/icons/illustrations/logo-outlined.svg delete mode 100644 packages/website/ts/icons/illustrations/long-term-impact.svg delete mode 100644 packages/website/ts/icons/illustrations/low-cost.svg delete mode 100755 packages/website/ts/icons/illustrations/marketingDesignHelp.svg delete mode 100755 packages/website/ts/icons/illustrations/milestoneGrants.svg delete mode 100755 packages/website/ts/icons/illustrations/networkedLiquidity-small.svg delete mode 100755 packages/website/ts/icons/illustrations/networkedLiquidity.svg delete mode 100755 packages/website/ts/icons/illustrations/orderBooks.svg delete mode 100755 packages/website/ts/icons/illustrations/predictionMarkets.svg delete mode 100644 packages/website/ts/icons/illustrations/protocol.svg delete mode 100644 packages/website/ts/icons/illustrations/ready-to-build.svg delete mode 100755 packages/website/ts/icons/illustrations/recruitingSupport.svg delete mode 100644 packages/website/ts/icons/illustrations/right-thing.svg delete mode 100755 packages/website/ts/icons/illustrations/robustSmartContracts.svg delete mode 100644 packages/website/ts/icons/illustrations/rocketship.svg delete mode 100755 packages/website/ts/icons/illustrations/secureTrading.svg delete mode 100644 packages/website/ts/icons/illustrations/social-discord.svg delete mode 100644 packages/website/ts/icons/illustrations/social-fb.svg delete mode 100644 packages/website/ts/icons/illustrations/social-github.svg delete mode 100644 packages/website/ts/icons/illustrations/social-newsletter.svg delete mode 100644 packages/website/ts/icons/illustrations/social-reddit.svg delete mode 100644 packages/website/ts/icons/illustrations/social-twitter.svg delete mode 100755 packages/website/ts/icons/illustrations/stableTokens.svg delete mode 100755 packages/website/ts/icons/illustrations/standardForExchange.svg delete mode 100644 packages/website/ts/icons/illustrations/support.svg delete mode 100755 packages/website/ts/icons/illustrations/supportForAllEthereumStandards-large.svg delete mode 100755 packages/website/ts/icons/illustrations/supportForAllEthereumStandards.svg delete mode 100755 packages/website/ts/icons/illustrations/techSupport.svg delete mode 100644 packages/website/ts/icons/illustrations/tokens.svg delete mode 100755 packages/website/ts/icons/illustrations/vcIntroductions.svg delete mode 100644 packages/website/ts/icons/logo-with-type.svg delete mode 100644 packages/website/ts/index.tsx delete mode 100644 packages/website/ts/lazy_component.tsx delete mode 100644 packages/website/ts/local_storage/local_storage.ts delete mode 100644 packages/website/ts/local_storage/state_storage.ts delete mode 100644 packages/website/ts/local_storage/tracked_token_storage.ts delete mode 100644 packages/website/ts/local_storage/trade_history_storage.tsx delete mode 100644 packages/website/ts/pages/about/jobs.tsx delete mode 100644 packages/website/ts/pages/about/mission.tsx delete mode 100644 packages/website/ts/pages/about/press.tsx delete mode 100644 packages/website/ts/pages/about/team.tsx delete mode 100644 packages/website/ts/pages/community.tsx delete mode 100644 packages/website/ts/pages/documentation/developers_page.tsx delete mode 100644 packages/website/ts/pages/documentation/doc_page.tsx delete mode 100644 packages/website/ts/pages/documentation/docs_home.tsx delete mode 100644 packages/website/ts/pages/ecosystem.tsx delete mode 100644 packages/website/ts/pages/faq/faq.tsx delete mode 100644 packages/website/ts/pages/faq/question.tsx delete mode 100644 packages/website/ts/pages/fullscreen_message.tsx delete mode 100644 packages/website/ts/pages/instant.tsx delete mode 100644 packages/website/ts/pages/instant/code_demo.tsx delete mode 100644 packages/website/ts/pages/instant/config_generator.tsx delete mode 100644 packages/website/ts/pages/instant/config_generator_address_input.tsx delete mode 100644 packages/website/ts/pages/instant/configurator.tsx delete mode 100644 packages/website/ts/pages/instant/fee_percentage_slider.tsx delete mode 100644 packages/website/ts/pages/instant/rc-slider.css delete mode 100644 packages/website/ts/pages/instant/select.tsx delete mode 100644 packages/website/ts/pages/landing.tsx delete mode 100644 packages/website/ts/pages/launch_kit.tsx delete mode 100644 packages/website/ts/pages/market_maker.tsx delete mode 100644 packages/website/ts/pages/not_found.tsx delete mode 100644 packages/website/ts/pages/why.tsx delete mode 100644 packages/website/ts/pages/wiki/wiki.tsx delete mode 100644 packages/website/ts/redux/analyticsMiddleware.ts delete mode 100644 packages/website/ts/redux/dispatcher.ts delete mode 100644 packages/website/ts/redux/reducer.ts delete mode 100644 packages/website/ts/redux/store.ts delete mode 100644 packages/website/ts/schemas/metadata_schema.ts delete mode 100644 packages/website/ts/schemas/portal_order_schema.ts delete mode 100644 packages/website/ts/schemas/portal_token_metadata.ts delete mode 100644 packages/website/ts/schemas/validator.ts delete mode 100644 packages/website/ts/style/colors.ts delete mode 100644 packages/website/ts/style/keyframes.ts delete mode 100644 packages/website/ts/style/media.ts delete mode 100644 packages/website/ts/style/theme.ts delete mode 100644 packages/website/ts/style/z_index.ts delete mode 100644 packages/website/ts/types.ts delete mode 100644 packages/website/ts/utils/analytics.ts delete mode 100644 packages/website/ts/utils/backend_client.ts delete mode 100644 packages/website/ts/utils/configs.ts delete mode 100644 packages/website/ts/utils/constants.ts delete mode 100644 packages/website/ts/utils/doc_utils.ts delete mode 100644 packages/website/ts/utils/documentation_container.ts delete mode 100644 packages/website/ts/utils/error_reporter.ts delete mode 100644 packages/website/ts/utils/fake_token_registry.ts delete mode 100644 packages/website/ts/utils/fetch_utils.ts delete mode 100644 packages/website/ts/utils/mui_theme.ts delete mode 100644 packages/website/ts/utils/order_parser.ts delete mode 100644 packages/website/ts/utils/token_address_overrides.ts delete mode 100644 packages/website/ts/utils/translate.ts delete mode 100644 packages/website/ts/utils/utils.ts delete mode 100644 packages/website/ts/vendor/u2f_api.js delete mode 100644 packages/website/tsconfig.json delete mode 100644 packages/website/tslint.json delete mode 100644 packages/website/webpack.config.js (limited to 'packages/website') diff --git a/packages/website/.gitignore b/packages/website/.gitignore deleted file mode 100644 index 1e8d1ceb4..000000000 --- a/packages/website/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.awcache diff --git a/packages/website/README.md b/packages/website/README.md deleted file mode 100644 index 432b7c335..000000000 --- a/packages/website/README.md +++ /dev/null @@ -1,69 +0,0 @@ -## Website & 0x Portal DApp - -This repository contains our website and [0x Portal DApp][portal-url] (over-the-counter exchange), facilitating trustless over-the-counter trading of Ethereum-based tokens using 0x protocol. - -[website-url]: https://0x.org/ -[portal-url]: https://0x.org/portal - -## Contributing - -We strongly recommend that the community help us make improvements and determine the future direction of the protocol. To report bugs within this package, please create an issue in this repository. - -Please read our [contribution guidelines](../../CONTRIBUTING.md) before getting started. - -## Local Dev Setup - -Requires Node version 6.9.5 or higher - -Add the following to your `/etc/hosts` file: - -``` -127.0.0.1 0xproject.localhost -``` - -### Install dependencies: - -```bash -yarn install -``` - -### Initial setup - -To build this package and all other monorepo packages that it depends on, run the following from the monorepo root directory: - -```bash -PKG=@0x/website yarn build -``` - -### Run dev server - -```bash -PKG=@0x/website yarn watch -``` - -Visit [0xproject.localhost:3572](http://0xproject.localhost:3572) in your browser. - -### Clean - -```bash -yarn clean -``` - -### Lint - -```bash -yarn lint -``` - -### Resources - -##### Toolkit - -- [Material Design Icon Font](http://zavoloklom.github.io/material-design-iconic-font/icons.html#directional) -- [BassCSS toolkit](http://basscss.com/) -- [Material-UI component library](http://www.material-ui.com/#/) - -##### Recommended Atom packages: - -- [atom-typescript](https://atom.io/packages/atom-typescript) -- [linter-tslint](https://atom.io/packages/linter-tslint) diff --git a/packages/website/contracts/Mintable.json b/packages/website/contracts/Mintable.json deleted file mode 100644 index 895db73a2..000000000 --- a/packages/website/contracts/Mintable.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "contract_name": "Mintable", - "abi": [ - { - "constant": false, - "inputs": [ - { - "name": "_spender", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_from", - "type": "address" - }, - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_value", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "payable": false, - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "name": "_to", - "type": "address" - }, - { - "name": "_value", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], - "payable": false, - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "name": "_owner", - "type": "address" - }, - { - "name": "_spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], - "payable": false, - "type": "function" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_from", - "type": "address" - }, - { - "indexed": true, - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "name": "_owner", - "type": "address" - }, - { - "indexed": true, - "name": "_spender", - "type": "address" - }, - { - "indexed": false, - "name": "_value", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - } - ], - "unlinked_binary": "0x6060604052341561000c57fe5b5b6105018061001c6000396000f300606060405236156100675763ffffffff60e060020a600035041663095ea7b3811461006957806318160ddd1461009c57806323b872dd146100be57806370a08231146100f7578063a0712d6814610125578063a9059cbb1461013a578063dd62ed3e1461016d575bfe5b341561007157fe5b610088600160a060020a03600435166024356101a1565b604080519115158252519081900360200190f35b34156100a457fe5b6100ac61020c565b60408051918252519081900360200190f35b34156100c657fe5b610088600160a060020a0360043581169060243516604435610212565b604080519115158252519081900360200190f35b34156100ff57fe5b6100ac600160a060020a0360043516610335565b60408051918252519081900360200190f35b341561012d57fe5b610138600435610354565b005b341561014257fe5b610088600160a060020a03600435166024356103bc565b604080519115158252519081900360200190f35b341561017557fe5b6100ac600160a060020a036004358116906024351661046e565b60408051918252519081900360200190f35b600160a060020a03338116600081815260016020908152604080832094871680845294825280832086905580518681529051929493927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060015b92915050565b60025481565b600160a060020a03808416600081815260016020908152604080832033909516835293815283822054928252819052918220548390108015906102555750828110155b801561027b5750600160a060020a03841660009081526020819052604090205483810110155b1561032757600160a060020a03808516600090815260208190526040808220805487019055918716815220805484900390556000198110156102e557600160a060020a03808616600090815260016020908152604080832033909416835292905220805484900390555b83600160a060020a031685600160a060020a03166000805160206104b6833981519152856040518082815260200191505060405180910390a36001915061032c565b600091505b5b509392505050565b600160a060020a0381166000908152602081905260409020545b919050565b68056bc75e2d6310000081111561036b5760006000fd5b600160a060020a03331660009081526020819052604090205461038f90829061049b565b600160a060020a0333166000908152602081905260409020556002546103b5908261049b565b6002555b50565b600160a060020a0333166000908152602081905260408120548290108015906103ff5750600160a060020a03831660009081526020819052604090205482810110155b1561045f57600160a060020a0333811660008181526020818152604080832080548890039055938716808352918490208054870190558351868152935191936000805160206104b6833981519152929081900390910190a3506001610206565b506000610206565b5b92915050565b600160a060020a038083166000908152600160209081526040808320938516835292905220545b92915050565b6000828201838110156104aa57fe5b8091505b50929150505600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a72305820998c8326b9629e063eb4867166e72c68a8c2e3ebca6a9d35ebc78c041c7aa47b0029", - "networks": {}, - "schema_version": "0.0.5", - "updated_at": 1503413048892 -} diff --git a/packages/website/less/all.less b/packages/website/less/all.less deleted file mode 100644 index d288b182b..000000000 --- a/packages/website/less/all.less +++ /dev/null @@ -1,139 +0,0 @@ -body { - font-family: 'Roboto'; -} - -a { - color: black; -} - -#faq { - li { - padding-bottom: 5px; - } - - a { - color: rgb(66, 66, 66); - } -} - -#landing { - .h1, - .h2, - .h3, - .h4 { - font-family: 'Roboto Mono'; - } -} - -#portal { - h1, - h2, - h3, - h4 { - font-weight: 100; - } -} - -#scroll_container { - .typeTooltip { - border: 1px solid lightgray; - opacity: 1; - } -} - -/* - * Adds always visible scrollbars on OSX so that user knows the content is scrollable - * Source: https://davidwalsh.name/osx-overflow - */ -::-webkit-scrollbar { - -webkit-appearance: none; - width: 4px; - height: 2px; -} -::-webkit-scrollbar-thumb { - border-radius: 4px; - background-color: rgba(0, 0, 0, 0.5); - -webkit-box-shadow: 0 0 1px rgba(255, 255, 255, 0.5); -} - -// Hack: For some reason the animation applied to the material-ui textfield causes the overflow -// applied to other elements to fail while the animation is underway. Adding this class to the -// affected component fixes the issue -// Source: http://stackoverflow.com/questions/14383632/webkit-border-radius-and-overflow-bug-when-using-any-animation-transition -.transitionFix { - -webkit-backface-visibility: hidden; - -moz-backface-visibility: hidden; - -webkit-transform: translate3d(0, 0, 0); - -moz-transform: translate3d(0, 0, 0); -} - -.thin { - font-weight: 100; -} - -code { - border: 1px solid #e3eefe; - border-radius: 4px; - font-family: 'Roboto Mono'; - //background-color: #f2f6ff !important; // lightBlue -} - -#wiki { - p { - color: #515151; // grey750 - fontsize: 15; - } - - a { - color: #1d5cde; // linkBlue - } - - p, - blockquote, - ol, - dl, - li, - table, - pre { - margin: 15px 0; - } - - li { - margin: 5px 0; - } - - table { - padding: 0; - border-collapse: collapse; - } - table tr { - border-top: 1px solid #cccccc; - background-color: white; - margin: 0; - padding: 0; - } - table tr:nth-child(2n) { - background-color: #f8f8f8; - } - table tr th { - font-weight: bold; - border: 1px solid #cccccc; - text-align: left; - margin: 0; - padding: 6px 13px; - } - table tr td { - border: 1px solid #cccccc; - text-align: left; - margin: 0; - padding: 6px 13px; - } - table tr th :first-child, - table tr td :first-child { - margin-top: 0; - } - table tr th :last-child, - table tr td :last-child { - margin-bottom: 0; - } -} diff --git a/packages/website/less/normalize.less b/packages/website/less/normalize.less deleted file mode 100644 index c45a85f89..000000000 --- a/packages/website/less/normalize.less +++ /dev/null @@ -1,349 +0,0 @@ -/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ - -/* Document - ========================================================================== */ - -/** - * 1. Correct the line height in all browsers. - * 2. Prevent adjustments of font size after orientation changes in iOS. - */ - - html { - line-height: 1.15; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - } - - /* Sections - ========================================================================== */ - - /** - * Remove the margin in all browsers. - */ - - body { - margin: 0; - } - - /** - * Render the `main` element consistently in IE. - */ - - main { - display: block; - } - - /** - * Correct the font size and margin on `h1` elements within `section` and - * `article` contexts in Chrome, Firefox, and Safari. - */ - - h1 { - font-size: 2em; - margin: 0.67em 0; - } - - /* Grouping content - ========================================================================== */ - - /** - * 1. Add the correct box sizing in Firefox. - * 2. Show the overflow in Edge and IE. - */ - - hr { - box-sizing: content-box; /* 1 */ - height: 0; /* 1 */ - overflow: visible; /* 2 */ - } - - /** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - - pre { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ - } - - /* Text-level semantics - ========================================================================== */ - - /** - * Remove the gray background on active links in IE 10. - */ - - a { - background-color: transparent; - } - - /** - * 1. Remove the bottom border in Chrome 57- - * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. - */ - - abbr[title] { - border-bottom: none; /* 1 */ - text-decoration: underline; /* 2 */ - text-decoration: underline dotted; /* 2 */ - } - - /** - * Add the correct font weight in Chrome, Edge, and Safari. - */ - - b, - strong { - font-weight: bolder; - } - - /** - * 1. Correct the inheritance and scaling of font size in all browsers. - * 2. Correct the odd `em` font sizing in all browsers. - */ - - code, - kbd, - samp { - font-family: monospace, monospace; /* 1 */ - font-size: 1em; /* 2 */ - } - - /** - * Add the correct font size in all browsers. - */ - - small { - font-size: 80%; - } - - /** - * Prevent `sub` and `sup` elements from affecting the line height in - * all browsers. - */ - - sub, - sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; - } - - sub { - bottom: -0.25em; - } - - sup { - top: -0.5em; - } - - /* Embedded content - ========================================================================== */ - - /** - * Remove the border on images inside links in IE 10. - */ - - img { - border-style: none; - } - - /* Forms - ========================================================================== */ - - /** - * 1. Change the font styles in all browsers. - * 2. Remove the margin in Firefox and Safari. - */ - - button, - input, - optgroup, - select, - textarea { - font-family: inherit; /* 1 */ - font-size: 100%; /* 1 */ - line-height: 1.15; /* 1 */ - margin: 0; /* 2 */ - } - - /** - * Show the overflow in IE. - * 1. Show the overflow in Edge. - */ - - button, - input { /* 1 */ - overflow: visible; - } - - /** - * Remove the inheritance of text transform in Edge, Firefox, and IE. - * 1. Remove the inheritance of text transform in Firefox. - */ - - button, - select { /* 1 */ - text-transform: none; - } - - /** - * Correct the inability to style clickable types in iOS and Safari. - */ - - button, - [type="button"], - [type="reset"], - [type="submit"] { - -webkit-appearance: button; - } - - /** - * Remove the inner border and padding in Firefox. - */ - - button::-moz-focus-inner, - [type="button"]::-moz-focus-inner, - [type="reset"]::-moz-focus-inner, - [type="submit"]::-moz-focus-inner { - border-style: none; - padding: 0; - } - - /** - * Restore the focus styles unset by the previous rule. - */ - - button:-moz-focusring, - [type="button"]:-moz-focusring, - [type="reset"]:-moz-focusring, - [type="submit"]:-moz-focusring { - outline: 1px dotted ButtonText; - } - - /** - * Correct the padding in Firefox. - */ - - fieldset { - padding: 0.35em 0.75em 0.625em; - } - - /** - * 1. Correct the text wrapping in Edge and IE. - * 2. Correct the color inheritance from `fieldset` elements in IE. - * 3. Remove the padding so developers are not caught out when they zero out - * `fieldset` elements in all browsers. - */ - - legend { - box-sizing: border-box; /* 1 */ - color: inherit; /* 2 */ - display: table; /* 1 */ - max-width: 100%; /* 1 */ - padding: 0; /* 3 */ - white-space: normal; /* 1 */ - } - - /** - * Add the correct vertical alignment in Chrome, Firefox, and Opera. - */ - - progress { - vertical-align: baseline; - } - - /** - * Remove the default vertical scrollbar in IE 10+. - */ - - textarea { - overflow: auto; - } - - /** - * 1. Add the correct box sizing in IE 10. - * 2. Remove the padding in IE 10. - */ - - [type="checkbox"], - [type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - } - - /** - * Correct the cursor style of increment and decrement buttons in Chrome. - */ - - [type="number"]::-webkit-inner-spin-button, - [type="number"]::-webkit-outer-spin-button { - height: auto; - } - - /** - * 1. Correct the odd appearance in Chrome and Safari. - * 2. Correct the outline style in Safari. - */ - - [type="search"] { - -webkit-appearance: textfield; /* 1 */ - outline-offset: -2px; /* 2 */ - } - - /** - * Remove the inner padding in Chrome and Safari on macOS. - */ - - [type="search"]::-webkit-search-decoration { - -webkit-appearance: none; - } - - /** - * 1. Correct the inability to style clickable types in iOS and Safari. - * 2. Change font properties to `inherit` in Safari. - */ - - ::-webkit-file-upload-button { - -webkit-appearance: button; /* 1 */ - font: inherit; /* 2 */ - } - - /* Interactive - ========================================================================== */ - - /* - * Add the correct display in Edge, IE 10+, and Firefox. - */ - - details { - display: block; - } - - /* - * Add the correct display in all browsers. - */ - - summary { - display: list-item; - } - - /* Misc - ========================================================================== */ - - /** - * Add the correct display in IE 10+. - */ - - template { - display: none; - } - - /** - * Add the correct display in IE 10. - */ - - [hidden] { - display: none; - } \ No newline at end of file diff --git a/packages/website/md/docs/0xjs/0.0.1/async.md b/packages/website/md/docs/0xjs/0.0.1/async.md deleted file mode 100644 index 8abaef331..000000000 --- a/packages/website/md/docs/0xjs/0.0.1/async.md +++ /dev/null @@ -1,26 +0,0 @@ -0x.js is a promise-based library. This means that whenever an asynchronous call is required, the library method will return a native Javascript promise. You can therefore choose between using `promise` or `async/await` syntax when calling our async methods. - -_Async/await syntax (recommended):_ - -```javascript -try { - var availableAddresses = await zeroEx.getAvailableAddressesAsync(); -} catch (error) { - console.log('Caught error: ', error); -} -``` - -_Promise syntax:_ - -```javascript -zeroEx - .getAvailableAddressesAsync() - .then(function(availableAddresses) { - console.log(availableAddresses); - }) - .catch(function(error) { - console.log('Caught error: ', error); - }); -``` - -As is the convention with promise-based libraries, if an error occurs, it is thrown. It is the callers responsibility to catch thrown errors and to handle them appropriately. diff --git a/packages/website/md/docs/0xjs/0.0.1/errors.md b/packages/website/md/docs/0xjs/0.0.1/errors.md deleted file mode 100644 index e97973ccf..000000000 --- a/packages/website/md/docs/0xjs/0.0.1/errors.md +++ /dev/null @@ -1 +0,0 @@ -All error messages thrown by the 0x.js library are part of a documented string enum. Each error message is in all-caps, snake-case format. This makes the error messages easily identifiable, unique and grep-able. The error enums listing all possible errors the library could throw can be found in the `Types` section. diff --git a/packages/website/md/docs/0xjs/0.0.1/installation.md b/packages/website/md/docs/0xjs/0.0.1/installation.md deleted file mode 100644 index 3860df1cc..000000000 --- a/packages/website/md/docs/0xjs/0.0.1/installation.md +++ /dev/null @@ -1,31 +0,0 @@ -0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package. - -#### CommonJS _(recommended)_: - -**Install** - -```bash -npm install 0x.js --save -``` - -**Import** - -```javascript -import { ZeroEx } from '0x.js'; -``` - -#### UMD: - -**Install** - -Download the UMD module from our [releases page](https://github.com/0xProject/0x-monorepo/releases) and add it to your project. - -**Import** - -```html - -``` - -### Wiki - -Check out our [wiki](https://0x.org/wiki) for articles on how to get 0x.js setup with TestRPC, Infura and more! diff --git a/packages/website/md/docs/0xjs/0.0.1/introduction.md b/packages/website/md/docs/0xjs/0.0.1/introduction.md deleted file mode 100644 index 008376d33..000000000 --- a/packages/website/md/docs/0xjs/0.0.1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [0x.js](https://github.com/0xProject/0x-monorepo) documentation! 0x.js is a Javascript library for interacting with the 0x protocol. With it, you can easily make calls to the 0x smart contracts as well as any ERC20 token. Functionality includes generating, signing, filling and cancelling orders, verifying an orders signature, setting or checking a users ERC20 token balance/allowance and much more. diff --git a/packages/website/md/docs/0xjs/0.0.1/versioning.md b/packages/website/md/docs/0xjs/0.0.1/versioning.md deleted file mode 100644 index 6bcaa5b4d..000000000 --- a/packages/website/md/docs/0xjs/0.0.1/versioning.md +++ /dev/null @@ -1 +0,0 @@ -This project adheres to the [Semantic Versioning 2.0.0](http://semver.org/) specification. The library's public interface includes all the methods, properties and types included in the documentation. Since the library is still an alpha, it's public interface is not yet stable and we will introduce backward incompatible changes to the interface without incrementing the major version until the `1.0.0` release. Our convention until then will be to increment the minor version whenever we introduce backward incompatible changes to the public interface, and to increment the patch version otherwise. This way, it is safe for you to include 0x.js in your projects with the tilda (e.g `~0.22.0`) without fear that a patch update would break your app. diff --git a/packages/website/md/docs/0xjs/1.0.1/async.md b/packages/website/md/docs/0xjs/1.0.1/async.md deleted file mode 100644 index bd5ae9d8a..000000000 --- a/packages/website/md/docs/0xjs/1.0.1/async.md +++ /dev/null @@ -1,31 +0,0 @@ -0x packages are promise-based libraries. This means that whenever an asynchronous call is required, the library method will return a native Javascript promise. You can therefore choose between using `promise` or `async/await` syntax when calling our async methods. - -_Async/await syntax (recommended):_ - -```javascript -try { - const signature = await signatureUtils.ecSignOrderHashAsync( - providerEngine, - orderHashHex, - maker, - SignerType.Default, - ); -} catch (error) { - console.log('Caught error: ', error); -} -``` - -_Promise syntax:_ - -```javascript -signatureUtils - .ecSignOrderHashAsync(providerEngine, orderHashHex, maker, SignerType.Default) - .then(function(signature) { - console.log(signature); - }) - .catch(function(error) { - console.log('Caught error: ', error); - }); -``` - -As is the convention with promise-based libraries, if an error occurs, it is thrown. It is the callers responsibility to catch thrown errors and to handle them appropriately. diff --git a/packages/website/md/docs/0xjs/1.0.1/installation.md b/packages/website/md/docs/0xjs/1.0.1/installation.md deleted file mode 100644 index d5c13e710..000000000 --- a/packages/website/md/docs/0xjs/1.0.1/installation.md +++ /dev/null @@ -1,40 +0,0 @@ -0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package. - -#### CommonJS _(recommended)_: - -**Install** - -```bash -npm install 0x.js --save -``` - -**Import** - -```javascript -import { - assetDataUtils, - BigNumber, - ContractWrappers, - generatePseudoRandomSalt, - Order, - orderHashUtils, - signatureUtils, - SignerType, -} from '0x.js'; -``` - -#### UMD: - -**Install** - -Download the UMD module from our [releases page](https://github.com/0xProject/0x-monorepo/releases) and add it to your project. - -**Import** - -```html - -``` - -### Wiki - -Check out our [wiki](https://0x.org/wiki) for articles on how to get 0x.js setup with Ganache, Infura and more! diff --git a/packages/website/md/docs/0xjs/1.0.1/introduction.md b/packages/website/md/docs/0xjs/1.0.1/introduction.md deleted file mode 100644 index 4d5d314d3..000000000 --- a/packages/website/md/docs/0xjs/1.0.1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [0x.js](https://github.com/0xProject/0x-monorepo/tree/development/packages/0x.js) documentation! 0x.js is a Javascript library for interacting with the 0x protocol. With it, you can easily make calls to the 0x smart contracts as well as any token adhering to the token standards supported by the protocol (currently ERC20 & ERC721). Functionality includes generating, signing, filling and cancelling orders, verifying an orders signature, setting or checking a users ERC20/ERC721 token balance/allowance and much more. diff --git a/packages/website/md/docs/0xjs/1.0.1/versioning.md b/packages/website/md/docs/0xjs/1.0.1/versioning.md deleted file mode 100644 index 6bae835d3..000000000 --- a/packages/website/md/docs/0xjs/1.0.1/versioning.md +++ /dev/null @@ -1 +0,0 @@ -Since v1.0.0, this package adheres to the [Semantic Versioning 2.0.0](http://semver.org/) specification. The library's public interface includes all the methods, properties and types included in the documentation. We will publish with a major version bump for any breaking change to the public interface, use a minor version bump when introducing new features in a backwards-compatible way, and patch versions when introducing backwards-compatible bug fixes. Because of this, we recommend you import `0x.js` with a caret `^1.0.0` to take advantage of non-breaking bug fixes. diff --git a/packages/website/md/docs/0xjs/2.0.0/async.md b/packages/website/md/docs/0xjs/2.0.0/async.md deleted file mode 100644 index c84eebf94..000000000 --- a/packages/website/md/docs/0xjs/2.0.0/async.md +++ /dev/null @@ -1,26 +0,0 @@ -0x.js is a promise-based library. This means that whenever an asynchronous call is required, the library method will return a native Javascript promise. You can therefore choose between using `promise` or `async/await` syntax when calling our async methods. - -_Async/await syntax (recommended):_ - -```javascript -try { - var availableAddresses = await web3Wrapper.getAvailableAddressesAsync(); -} catch (error) { - console.log('Caught error: ', error); -} -``` - -_Promise syntax:_ - -```javascript -web3Wrapper - .getAvailableAddressesAsync() - .then(function(availableAddresses) { - console.log(availableAddresses); - }) - .catch(function(error) { - console.log('Caught error: ', error); - }); -``` - -As is the convention with promise-based libraries, if an error occurs, it is thrown. It is the callers responsibility to catch thrown errors and to handle them appropriately. diff --git a/packages/website/md/docs/0xjs/2.0.0/installation.md b/packages/website/md/docs/0xjs/2.0.0/installation.md deleted file mode 100644 index 87d763572..000000000 --- a/packages/website/md/docs/0xjs/2.0.0/installation.md +++ /dev/null @@ -1,38 +0,0 @@ -0x.js ships as both a [UMD](https://github.com/umdjs/umd) module and a [CommonJS](https://en.wikipedia.org/wiki/CommonJS) package. - -#### CommonJS _(recommended)_: - -**Install** - -```bash -npm install 0x.js --save -``` - -**Import** - -```javascript -import { - assetDataUtils, - BigNumber, - ContractWrappers, - generatePseudoRandomSalt, - orderHashUtils, - signatureUtils, -} from '0x.js'; -``` - -#### UMD: - -**Install** - -Download the UMD module from our [releases page](https://github.com/0xProject/0x-monorepo/releases) and add it to your project. - -**Import** - -```html - -``` - -### Wiki - -Check out our [wiki](https://0x.org/wiki) for articles on how to get 0x.js setup with TestRPC, Infura and more! diff --git a/packages/website/md/docs/asset_buyer/installation.md b/packages/website/md/docs/asset_buyer/installation.md deleted file mode 100644 index 3c0c95068..000000000 --- a/packages/website/md/docs/asset_buyer/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -#### Install - -```bash -yarn add @0x/asset-buyer -``` - -#### Import - -```javascript -import { AssetBuyer } from '@0x/asset-buyer'; -``` - -or - -```javascript -var AssetBuyer = require('@0x/asset-buyer').AssetBuyer; -``` diff --git a/packages/website/md/docs/asset_buyer/introduction.md b/packages/website/md/docs/asset_buyer/introduction.md deleted file mode 100644 index bac81c760..000000000 --- a/packages/website/md/docs/asset_buyer/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [asset-buyer](https://github.com/0xProject/0x-monorepo/tree/development/packages/asset-buyer) documentation! AssetBuyer is a library that provides an easy way to buy any asset with ETH in one click, leveraging 0x liquidity and the [Forwarder contract](https://0x.org/docs/contracts#Forwarder). diff --git a/packages/website/md/docs/asset_buyer/usage.md b/packages/website/md/docs/asset_buyer/usage.md deleted file mode 100644 index 209c15062..000000000 --- a/packages/website/md/docs/asset_buyer/usage.md +++ /dev/null @@ -1,39 +0,0 @@ -#### Construction - -Connecting to a standard relayer API compliant url: - -```typescript -const provider = web3.currentProvider; -const apiUrl = 'https://api.relayer.com/v2'; -const assetBuyer = AssetBuyer.getAssetBuyerForStandardRelayerAPIUrl(provider, apiUrl); -``` - -Providing your own orders: - -```typescript -const provider = web3.currentProvider; -const orders = []; // get these from your own API, a relayer, a friend, from anywhere -const assetBuyer = AssetBuyer.getAssetBuyerForProvidedOrders(provider, orders); -``` - -#### Get a quote - -A [BuyQuote](#types-BuyQuote) object contains enough information to display buy information to an end user - -```typescript -const erc20TokenAddress = '0x5fa3c....'; -const amountToBuy = new BigNumber(50000000000000000000); -const buyQuote = await assetBuyer.getBuyQuoteForERC20TokenAddressAsync(erc20TokenAddress, amountToBuy); -const quoteInfo = buyQuote.worstCaseQuoteInfo; -console.log(quoteInfo.ethAmount); // the total amount the user needs to pay to buy the desired amount (including ZRX fees) -console.log(quoteInfo.feeAmount); // a portion of the total ethAmount above that was used to buy affiliate fees -console.log(quoteInfo.ethPerAssetPrice); // the rate that this quote provides (e.g. 0.0035ETH / REP) -``` - -#### Perform a buy - -Pass the [BuyQuote](#types-BuyQuote) object from above back to the assetBuyer in order to initiate the buy transaction - -```typescript -const txHash = await assetBuyer.executeBuyQuoteAsync(buyQuote); // the hash of the transaction submitted to the Ethereum network -``` diff --git a/packages/website/md/docs/connect/1/installation.md b/packages/website/md/docs/connect/1/installation.md deleted file mode 100644 index d457b0577..000000000 --- a/packages/website/md/docs/connect/1/installation.md +++ /dev/null @@ -1,15 +0,0 @@ -**Install** - -```bash -npm install @0xproject/connect --save -``` - -**Import** - -```javascript -import { HttpClient } from '@0xproject/connect'; -``` - -### Wiki - -Check out our [0x Connect introduction tutorial](https://0x.org/wiki#Intro-Tutorial) for information on how to integrate relayers into your application. diff --git a/packages/website/md/docs/connect/1/introduction.md b/packages/website/md/docs/connect/1/introduction.md deleted file mode 100644 index 4e3039442..000000000 --- a/packages/website/md/docs/connect/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [0x Connect](https://github.com/0xProject/0x-monorepo/tree/development/packages/connect) documentation! 0x Connect is a Javascript library that makes it easy to interact with relayers that conform to the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api). Functionality includes getting supported token pairs from a relayer, getting orders filtered by different attributes, getting individual orders specified by order hash, getting orderbooks for specific token pairs, getting fee information, and submitting orders. diff --git a/packages/website/md/docs/connect/2/introduction.md b/packages/website/md/docs/connect/2/introduction.md deleted file mode 100644 index 8e251b327..000000000 --- a/packages/website/md/docs/connect/2/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [0x Connect](https://github.com/0xProject/0x-monorepo/tree/development/packages/connect) documentation! 0x Connect is a Javascript library that makes it easy to interact with relayers that conform to the [Standard Relayer API](https://github.com/0xProject/standard-relayer-api). Functionality includes getting supported asset pairs from a relayer, getting orders filtered by different attributes, getting individual orders specified by order hash, getting orderbooks for specific asset pairs, getting fee information, and submitting orders. diff --git a/packages/website/md/docs/connect/3/installation.md b/packages/website/md/docs/connect/3/installation.md deleted file mode 100644 index 8ed6172bf..000000000 --- a/packages/website/md/docs/connect/3/installation.md +++ /dev/null @@ -1,15 +0,0 @@ -**Install** - -```bash -npm install @0x/connect --save -``` - -**Import** - -```javascript -import { HttpClient } from '@0x/connect'; -``` - -### Wiki - -Check out our [0x Connect introduction tutorial](https://0x.org/wiki#Intro-Tutorial) for information on how to integrate relayers into your application. diff --git a/packages/website/md/docs/contract_wrappers/1/installation.md b/packages/website/md/docs/contract_wrappers/1/installation.md deleted file mode 100644 index d5c7fbdba..000000000 --- a/packages/website/md/docs/contract_wrappers/1/installation.md +++ /dev/null @@ -1,11 +0,0 @@ -**Install** - -```bash -npm install @0xproject/contract-wrappers --save -``` - -**Import** - -```javascript -import { ContractWrappers } from '@0xproject/contract-wrappers'; -``` diff --git a/packages/website/md/docs/contract_wrappers/1/introduction.md b/packages/website/md/docs/contract_wrappers/1/introduction.md deleted file mode 100644 index ccc81b373..000000000 --- a/packages/website/md/docs/contract_wrappers/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [Contract-wrappers](https://github.com/0xProject/0x-monorepo/tree/development/packages/contract-wrappers) documentation! Contract-wrappers is a library for interacting with the Ethereum smart contracts that make up the 0x protocol. With it, you can easily send transactions and make calls to the 0x smart contracts as well as any token adhering to the token standards supported by the protocol (currently ERC20 & ERC721). diff --git a/packages/website/md/docs/contract_wrappers/2/installation.md b/packages/website/md/docs/contract_wrappers/2/installation.md deleted file mode 100644 index 50610550a..000000000 --- a/packages/website/md/docs/contract_wrappers/2/installation.md +++ /dev/null @@ -1,11 +0,0 @@ -**Install** - -```bash -npm install @0x/contract-wrappers --save -``` - -**Import** - -```javascript -import { ContractWrappers } from '@0x/contract-wrappers'; -``` diff --git a/packages/website/md/docs/ethereum_types/installation.md b/packages/website/md/docs/ethereum_types/installation.md deleted file mode 100644 index 5371cfa47..000000000 --- a/packages/website/md/docs/ethereum_types/installation.md +++ /dev/null @@ -1,11 +0,0 @@ -**Install** - -```bash -yarn add ethereum-types -``` - -**Import** - -```typescript -import { Provider } from 'ethereum-types'; -``` diff --git a/packages/website/md/docs/ethereum_types/introduction.md b/packages/website/md/docs/ethereum_types/introduction.md deleted file mode 100644 index 43484cdd1..000000000 --- a/packages/website/md/docs/ethereum_types/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [ethereum-types](https://github.com/0xProject/0x-monorepo/packages/ethereum-types) documentation! This package provides ethereum specific (but not library-specific) types that are meant to be shared between other ethereum packages. diff --git a/packages/website/md/docs/json_schemas/1/installation.md b/packages/website/md/docs/json_schemas/1/installation.md deleted file mode 100644 index 50a37bae1..000000000 --- a/packages/website/md/docs/json_schemas/1/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0xproject/json-schemas -``` - -**Import** - -```javascript -import { schemas } from '@0xproject/json-schemas'; -``` - -or - -```javascript -var schemas = require('@0xproject/json-schemas').schemas; -``` diff --git a/packages/website/md/docs/json_schemas/1/introduction.md b/packages/website/md/docs/json_schemas/1/introduction.md deleted file mode 100644 index 5b2e90387..000000000 --- a/packages/website/md/docs/json_schemas/1/introduction.md +++ /dev/null @@ -1,3 +0,0 @@ -Welcome to the [@0xproject/json-schemas](https://github.com/0xProject/0x-monorepo/tree/development/packages/json-schemas) documentation! This package provides JSON schemas for validating 0x Protocol & Standard Relayer API data structures. It provides both the raw JSON schemas and a schema validator class to interact with them from a JS project. - -If you are not using a Javascript-based language for your project, you can use a Javascript environment to render the JSON schemas within this package and use them together with a [JSON Schema](http://json-schema.org/) implementation in your [language of choice](http://json-schema.org/implementations.html) (e.g Python, Haskell, Go, C, C++, Rust, Ruby, Scala, etc...). All the schema files are currently TypeScript that require evaluation in order to be recognized as valid JSON. diff --git a/packages/website/md/docs/json_schemas/1/schemas.md b/packages/website/md/docs/json_schemas/1/schemas.md deleted file mode 100644 index 11f9df329..000000000 --- a/packages/website/md/docs/json_schemas/1/schemas.md +++ /dev/null @@ -1,28 +0,0 @@ -0x Protocol Schemas - -- [Basic types](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/basic_type_schemas.ts) (e.g Ethereum address, number) -- [ECSignature](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/ec_signature_schema.ts) -- [Order/SignedOrder](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/order_schemas.ts) -- [OrderHash](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/order_hash_schema.ts) - -0x.js Schemas - -- [BlockRange](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/block_range_schema.ts) -- [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/index_filter_values_schema.ts) -- [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/order_fill_requests_schema.ts) -- [OrderCancellationRequests](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/order_cancel_schema.ts) -- [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.ts) -- [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/signed_orders_schema.ts) -- [Token](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/token_schema.ts) -- [TxData](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/tx_data_schema.ts) - -Standard Relayer API Schemas - -- [Error response](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_error_response_schema.ts) -- [Fees payload](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_fees_payload_schema.ts) -- [Fees response](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_fees_response_schema.ts) -- [Orderbook channel subscribe](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_orberbook_channel_subscribe_schema.ts) -- [Orderbook channel snapshot](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_orderbook_channel_snapshot_schema.ts) -- [Orderbook channel update](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_orderbook_channel_update_response_schema.ts) -- [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.ts) -- [Token pairs response](https://github.com/0xProject/0x-monorepo/blob/d4c1b3b0bd26e730ce6687469cdf7283877543e1/packages/json-schemas/schemas/relayer_api_token_pairs_response_schema.ts) diff --git a/packages/website/md/docs/json_schemas/1/usage.md b/packages/website/md/docs/json_schemas/1/usage.md deleted file mode 100644 index 68b801153..000000000 --- a/packages/website/md/docs/json_schemas/1/usage.md +++ /dev/null @@ -1,14 +0,0 @@ -The following example shows you how to validate a 0x order using the `@0xproject/json-schemas` package. - -```javascript -import {SchemaValidator, ValidatorResult, schemas} from '@0xproject/json-schemas'; - -const {orderSchema} = schemas; -const validator = new SchemaValidator(); - -const order = { - ... -}; -const validatorResult: ValidatorResult = validator.validate(order, orderSchema); // Contains all errors -const isValid: boolean = validator.isValid(order, orderSchema); // Only returns boolean -``` diff --git a/packages/website/md/docs/json_schemas/2/schemas.md b/packages/website/md/docs/json_schemas/2/schemas.md deleted file mode 100644 index 78e6df372..000000000 --- a/packages/website/md/docs/json_schemas/2/schemas.md +++ /dev/null @@ -1,40 +0,0 @@ -Basic Schemas - -- [Address type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/address_schema.json) -- [Number type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/number_schema.json) -- [Hex type](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/hex_schema.json) -- [JS number](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/js_number.json) - -0x Protocol Schemas - -- [Order](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_schema.json) -- [SignedOrder](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/signed_order_schema.json) -- [OrderHash](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_hash_schema.json) -- [ECSignature](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/ec_signature_schema.json) - -0x.js Schemas - -- [BlockParam](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/block_param_schema.json) -- [BlockRange](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/block_range_schema.json) -- [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/index_filter_values_schema.json) -- [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_fill_requests_schema.json) -- [OrderCancellationRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_cancel_schema.json) -- [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json) -- [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/signed_orders_schema.json) -- [Token](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/token_schema.json) -- [TxData](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/tx_data_schema.json) - -Standard Relayer API Schemas - -- [Paginated collection](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/paginated_collection_schema.json) -- [Error response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_error_response_schema.json) -- [Order config payload](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json) -- [Order config response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json) -- [Orders channel subscribe payload](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json) -- [Orders channel subscribe](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json) -- [Orders channel update](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json) -- [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.json) -- [Asset pairs](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json) -- [Trade info](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json) -- [Asset pairs response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json) -- [Fee recipients response](https://github.com/0xProject/0x-monorepo/blob/5ec4b27200297708298deca97603849a37b2f66a/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json) diff --git a/packages/website/md/docs/json_schemas/3/installation.md b/packages/website/md/docs/json_schemas/3/installation.md deleted file mode 100644 index a99886113..000000000 --- a/packages/website/md/docs/json_schemas/3/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0x/json-schemas -``` - -**Import** - -```javascript -import { schemas } from '@0x/json-schemas'; -``` - -or - -```javascript -var schemas = require('@0x/json-schemas').schemas; -``` diff --git a/packages/website/md/docs/json_schemas/3/introduction.md b/packages/website/md/docs/json_schemas/3/introduction.md deleted file mode 100644 index 0039d014a..000000000 --- a/packages/website/md/docs/json_schemas/3/introduction.md +++ /dev/null @@ -1,3 +0,0 @@ -Welcome to the [json-schemas](https://github.com/0xProject/0x-monorepo/tree/development/packages/json-schemas) documentation! This package provides JSON schemas for validating 0x Protocol & Standard Relayer API data structures. It provides both the raw JSON schemas and a schema validator class to interact with them from a JS project. - -If you are not using a Javascript-based language for your project, you can use a Javascript environment to render the JSON schemas within this package and use them together with a [JSON Schema](http://json-schema.org/) implementation in your [language of choice](http://json-schema.org/implementations.html) (e.g Python, Haskell, Go, C, C++, Rust, Ruby, Scala, etc...). diff --git a/packages/website/md/docs/json_schemas/3/schemas.md b/packages/website/md/docs/json_schemas/3/schemas.md deleted file mode 100644 index 90fcfdffe..000000000 --- a/packages/website/md/docs/json_schemas/3/schemas.md +++ /dev/null @@ -1,41 +0,0 @@ -Basic Schemas - -- [Address type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/address_schema.json) -- [Number type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/number_schema.json) -- [Whole number type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/whole_number_schema.json) -- [Hex type](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/hex_schema.json) -- [JS number](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/js_number.json) - -0x Protocol Schemas - -- [Order](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_schema.json) -- [SignedOrder](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/signed_order_schema.json) -- [OrderHash](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_hash_schema.json) -- [ECSignature](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/ec_signature_schema.json) - -0x.js Schemas - -- [BlockParam](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/block_param_schema.json) -- [BlockRange](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/block_range_schema.json) -- [IndexFilter Values](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/index_filter_values_schema.json) -- [OrderFillRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_fill_requests_schema.json) -- [OrderCancellationRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_cancel_schema.json) -- [OrderFillOrKillRequests](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/order_fill_or_kill_requests_schema.json) -- [SignedOrders](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/signed_orders_schema.json) -- [Token](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/token_schema.json) -- [TxData](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/tx_data_schema.json) - -Standard Relayer API Schemas - -- [Paginated collection](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/paginated_collection_schema.json) -- [Error response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_error_response_schema.json) -- [Order config payload](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_order_config_payload_schema.json) -- [Order config response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_order_config_response_schema.json) -- [Orders channel subscribe payload](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_payload_schema.json) -- [Orders channel subscribe](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_subscribe_schema.json) -- [Orders channel update](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orders_channel_update_response_schema.json) -- [Orderbook response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_orderbook_response_schema.json) -- [Asset pairs](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_pairs_schema.json) -- [Trade info](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_trade_info_schema.json) -- [Asset pairs response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_asset_data_pairs_response_schema.json) -- [Fee recipients response](https://github.com/0xProject/0x-monorepo/blob/528ae4376e5e605dac9666f2a5917803e942a1f9/packages/json-schemas/schemas/relayer_api_fee_recipients_response_schema.json) diff --git a/packages/website/md/docs/json_schemas/3/usage.md b/packages/website/md/docs/json_schemas/3/usage.md deleted file mode 100644 index 2b72eeaad..000000000 --- a/packages/website/md/docs/json_schemas/3/usage.md +++ /dev/null @@ -1,14 +0,0 @@ -The following example shows you how to validate a 0x order using the `@0x/json-schemas` package. - -```javascript -import {SchemaValidator, ValidatorResult, schemas} from '@0x/json-schemas'; - -const {orderSchema} = schemas; -const validator = new SchemaValidator(); - -const order = { - ... -}; -const validatorResult: ValidatorResult = validator.validate(order, orderSchema); // Contains all errors -const isValid: boolean = validator.isValid(order, orderSchema); // Only returns boolean -``` diff --git a/packages/website/md/docs/migrations/1/installation.md b/packages/website/md/docs/migrations/1/installation.md deleted file mode 100644 index 78403037b..000000000 --- a/packages/website/md/docs/migrations/1/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0x/migrations -``` - -**Import** - -```javascript -import { runMigrationsAsync } from '@0x/migrations'; -``` - -or - -```javascript -var runMigrationsAsync = require('@0x/migrations').runMigrationsAsync; -``` diff --git a/packages/website/md/docs/migrations/1/introduction.md b/packages/website/md/docs/migrations/1/introduction.md deleted file mode 100644 index 70b13c5f8..000000000 --- a/packages/website/md/docs/migrations/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [@0x/migrations](https://github.com/0xProject/0x-monorepo/tree/development/packages/migrations) documentation! This package is intended for developers who would like to deploy the 0x protocol system of smart contracts to a custom testnet. If you want to test against existing testnets, check out our pre-deployed [Ganache snapshot](https://0x.org/wiki#Ganache-Setup-Guide) or where 0x is already deployed on [popular testnets](https://0x.org/wiki#Deployed-Addresses). diff --git a/packages/website/md/docs/order_utils/1/installation.md b/packages/website/md/docs/order_utils/1/installation.md deleted file mode 100644 index 68a7cf960..000000000 --- a/packages/website/md/docs/order_utils/1/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0xproject/order-utils -``` - -**Import** - -```javascript -import { createSignedOrderAsync } from '@0xproject/order-utils'; -``` - -or - -```javascript -var createSignedOrderAsync = require('@0xproject/order-utils').createSignedOrderAsync; -``` diff --git a/packages/website/md/docs/order_utils/1/introduction.md b/packages/website/md/docs/order_utils/1/introduction.md deleted file mode 100644 index d5f3f2925..000000000 --- a/packages/website/md/docs/order_utils/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [@0xproject/order-utils](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-utils) documentation! Order utils is a set of utils around creating, signing, validating 0x orders. diff --git a/packages/website/md/docs/order_utils/2/installation.md b/packages/website/md/docs/order_utils/2/installation.md deleted file mode 100644 index d4bac6a53..000000000 --- a/packages/website/md/docs/order_utils/2/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0x/order-utils -``` - -**Import** - -```javascript -import { createSignedOrderAsync } from '@0x/order-utils'; -``` - -or - -```javascript -var createSignedOrderAsync = require('@0x/order-utils').createSignedOrderAsync; -``` diff --git a/packages/website/md/docs/order_utils/2/introduction.md b/packages/website/md/docs/order_utils/2/introduction.md deleted file mode 100644 index 567896603..000000000 --- a/packages/website/md/docs/order_utils/2/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [order-utils](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-utils) documentation! Order utils is a set of utils around creating, signing, validating 0x orders. diff --git a/packages/website/md/docs/order_watcher/1/installation.md b/packages/website/md/docs/order_watcher/1/installation.md deleted file mode 100644 index 4b28f583d..000000000 --- a/packages/website/md/docs/order_watcher/1/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0xproject/order-watcher -``` - -**Import** - -```javascript -import { OrderWatcher } from '@0xproject/order-watcher'; -``` - -or - -```javascript -var OrderWatcher = require('@0xproject/order-utils').OrderWatcher; -``` diff --git a/packages/website/md/docs/order_watcher/1/introduction.md b/packages/website/md/docs/order_watcher/1/introduction.md deleted file mode 100644 index f922d922f..000000000 --- a/packages/website/md/docs/order_watcher/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [@0xproject/order-watcher](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-watcher) documentation! OrderWatcher is a daemon that efficiently watches a set of orders, emitting events whenever the validity of an order changes. It can be used by relayers to prune an orderbook, or by traders to keep orders fetched from a Relayer up-to-date. diff --git a/packages/website/md/docs/order_watcher/2/installation.md b/packages/website/md/docs/order_watcher/2/installation.md deleted file mode 100644 index 883eb40e5..000000000 --- a/packages/website/md/docs/order_watcher/2/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add @0x/order-watcher -``` - -**Import** - -```javascript -import { OrderWatcher } from '@0x/order-watcher'; -``` - -or - -```javascript -var OrderWatcher = require('@0x/order-utils').OrderWatcher; -``` diff --git a/packages/website/md/docs/order_watcher/2/introduction.md b/packages/website/md/docs/order_watcher/2/introduction.md deleted file mode 100644 index b2d574053..000000000 --- a/packages/website/md/docs/order_watcher/2/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [order-watcher](https://github.com/0xProject/0x-monorepo/tree/development/packages/order-watcher) documentation! OrderWatcher is a daemon that efficiently watches a set of orders, emitting events whenever the validity of an order changes. It can be used by relayers to prune an orderbook, or by traders to keep orders fetched from a Relayer up-to-date. diff --git a/packages/website/md/docs/smart_contracts/1/introduction.md b/packages/website/md/docs/smart_contracts/1/introduction.md deleted file mode 100644 index 81715a3d1..000000000 --- a/packages/website/md/docs/smart_contracts/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [0x smart contracts](https://github.com/0xProject/0x-monorepo/tree/development/contracts/core) documentation! This documentation is intended for dApp developers who want to integrate 0x exchange functionality directly into their own smart contracts. diff --git a/packages/website/md/docs/smart_contracts/2/introduction.md b/packages/website/md/docs/smart_contracts/2/introduction.md deleted file mode 100644 index b2c3d8f8d..000000000 --- a/packages/website/md/docs/smart_contracts/2/introduction.md +++ /dev/null @@ -1,6 +0,0 @@ -Welcome to the [0x smart contracts](https://github.com/0xProject/0x-monorepo/tree/development/contracts/core) documentation! This documentation is intended for dApp developers who want to integrate 0x exchange functionality directly into their own smart contracts. - -### Helpful wiki articles: - -- [Deployed smart contract addresses](https://0x.org/wiki#Deployed-Addresses) -- [0x Protocol Specification](https://github.com/0xProject/0x-protocol-specification/blob/master/v2/v2-specification.md) diff --git a/packages/website/md/docs/sol-compiler/1/installation.md b/packages/website/md/docs/sol-compiler/1/installation.md deleted file mode 100644 index 9c8561d9b..000000000 --- a/packages/website/md/docs/sol-compiler/1/installation.md +++ /dev/null @@ -1,23 +0,0 @@ -#### CLI Installation - -```bash -yarn global add @0xproject/sol-compiler -``` - -#### API Installation - -```bash -yarn add @0xproject/sol-compiler -``` - -**Import** - -```typescript -import { Compiler } from '@0xproject/sol-compiler'; -``` - -or - -```javascript -var Compiler = require('@0xproject/sol-compiler').Compiler; -``` diff --git a/packages/website/md/docs/sol-compiler/1/introduction.md b/packages/website/md/docs/sol-compiler/1/introduction.md deleted file mode 100644 index 3b7332111..000000000 --- a/packages/website/md/docs/sol-compiler/1/introduction.md +++ /dev/null @@ -1,8 +0,0 @@ -Welcome to the [sol-compiler](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-compiler) documentation! Sol-compiler is a wrapper around [solc-js](https://www.npmjs.com/package/solc) that adds: - -- Smart re-compilation: Only recompiles when smart contracts have changed -- Ability to compile an entire project instead of only individual `.sol` files -- Compilation using the Solidity version specified at the top of each individual `.sol` file -- Proper parsing of Solidity version ranges -- Support for the standard [input description](https://solidity.readthedocs.io/en/develop/using-the-compiler.html#input-description) for what information you'd like added to the resulting `artifacts` file (i.e 100% configurable artifacts content). -- Storage of constructor args, source maps and paths to all dependency source files. diff --git a/packages/website/md/docs/sol-compiler/1/usage.md b/packages/website/md/docs/sol-compiler/1/usage.md deleted file mode 100644 index 79c9b32ba..000000000 --- a/packages/website/md/docs/sol-compiler/1/usage.md +++ /dev/null @@ -1,24 +0,0 @@ -#### CLI Usage - -```bash -$ sol-compiler -Options: - --version Show version number [boolean] - --contracts-dir path of contracts directory to compile [string] - --artifacts-dir path to write contracts artifacts to [string] - --contracts comma separated list of contracts to compile - [string] [default: "*"] - --help Show help [boolean] -``` - -#### API Usage - -```typescript -import { Compiler } from '@0xproject/sol-compiler'; - -const compiler = new Compiler(); - -(async () => { - await compiler.compileAllAsync(); -})().catch(console.log); -``` diff --git a/packages/website/md/docs/sol-compiler/2/installation.md b/packages/website/md/docs/sol-compiler/2/installation.md deleted file mode 100644 index 7e7b690fe..000000000 --- a/packages/website/md/docs/sol-compiler/2/installation.md +++ /dev/null @@ -1,23 +0,0 @@ -#### CLI Installation - -```bash -yarn global add @0x/sol-compiler -``` - -#### API Installation - -```bash -yarn add @0x/sol-compiler -``` - -**Import** - -```typescript -import { Compiler } from '@0x/sol-compiler'; -``` - -or - -```javascript -var Compiler = require('@0x/sol-compiler').Compiler; -``` diff --git a/packages/website/md/docs/sol-compiler/2/usage.md b/packages/website/md/docs/sol-compiler/2/usage.md deleted file mode 100644 index 68e5a988f..000000000 --- a/packages/website/md/docs/sol-compiler/2/usage.md +++ /dev/null @@ -1,24 +0,0 @@ -#### CLI Usage - -```bash -$ sol-compiler -Options: - --version Show version number [boolean] - --contracts-dir path of contracts directory to compile [string] - --artifacts-dir path to write contracts artifacts to [string] - --contracts comma separated list of contracts to compile - [string] [default: "*"] - --help Show help [boolean] -``` - -#### API Usage - -```typescript -import { Compiler } from '@0x/sol-compiler'; - -const compiler = new Compiler(); - -(async () => { - await compiler.compileAllAsync(); -})().catch(console.log); -``` diff --git a/packages/website/md/docs/sol_coverage/installation.md b/packages/website/md/docs/sol_coverage/installation.md deleted file mode 100644 index 7c9840ab8..000000000 --- a/packages/website/md/docs/sol_coverage/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add -D @0x/sol-coverage -``` - -**Import** - -```javascript -import { CoverageSubprovider } from '@0x/sol-coverage'; -``` - -or - -```javascript -var CoverageSubprovider = require('@0x/sol-coverage').CoverageSubprovider; -``` diff --git a/packages/website/md/docs/sol_coverage/introduction.md b/packages/website/md/docs/sol_coverage/introduction.md deleted file mode 100644 index f21f8ecbe..000000000 --- a/packages/website/md/docs/sol_coverage/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [sol-coverage](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-coverage) documentation! Sol-coverage is a Solidity coverage tool. diff --git a/packages/website/md/docs/sol_coverage/usage.md b/packages/website/md/docs/sol_coverage/usage.md deleted file mode 100644 index d194f8abd..000000000 --- a/packages/website/md/docs/sol_coverage/usage.md +++ /dev/null @@ -1,74 +0,0 @@ -Sol-coverage uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `CoverageSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article. - -The CoverageSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot. - -Coverage subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data. - -In order to use `CoverageSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it. - -### Sol-compiler - -If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you. - -```typescript -import { SolCompilerArtifactsAdapter } from '@0x/sol-coverage'; -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir); -``` - -### Truffle - -If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you. - -```typescript -import { TruffleArtifactAdapter } from '@0x/sol-coverage'; -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion); -``` - -Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`. - -### Other framework/toolset - -You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`. - -```typescript -import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...); -``` - -### Usage - -```typescript -import { CoverageSubprovider } from '@0x/sol-coverage'; -import ProviderEngine = require('web3-provider-engine'); - -const provider = new ProviderEngine(); -// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from. -const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; -const isVerbose = true; -const coverageSubprovider = new CoverageSubprovider(artifactsAdapter, defaultFromAddress, isVerbose); - -provider.addProvider(coverageSubprovider); -// Add all your other providers -provider.start(); -``` - -After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call: - -```typescript -await coverageSubprovider.writeCoverageAsync(); -``` - -This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/coverage.json.md) - so you can use it with any of the existing Istanbul reporters. - -```bash -yarn add -D istanbul -istanbul report html -open coverage/index.html -``` - -Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520). diff --git a/packages/website/md/docs/sol_profiler/installation.md b/packages/website/md/docs/sol_profiler/installation.md deleted file mode 100644 index e29ac5ae7..000000000 --- a/packages/website/md/docs/sol_profiler/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add -D @0x/sol-profiler -``` - -**Import** - -```javascript -import { ProfilerSubprovider } from '@0x/sol-profiler'; -``` - -or - -```javascript -var ProfilerSubprovider = require('@0x/sol-profiler').ProfilerSubprovider; -``` diff --git a/packages/website/md/docs/sol_profiler/introduction.md b/packages/website/md/docs/sol_profiler/introduction.md deleted file mode 100644 index bd53fb0fe..000000000 --- a/packages/website/md/docs/sol_profiler/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [sol-profiler](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-profiler) documentation! Sol-profiler is a Solidity profiler tool. diff --git a/packages/website/md/docs/sol_profiler/usage.md b/packages/website/md/docs/sol_profiler/usage.md deleted file mode 100644 index 0fbc31bc1..000000000 --- a/packages/website/md/docs/sol_profiler/usage.md +++ /dev/null @@ -1,74 +0,0 @@ -Sol-profiler uses transaction traces in order to figure out which lines of Solidity source code have been covered by your tests. In order for it to gather these traces, you must add the `ProfilerSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article. - -The ProfilerSubprovider eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot. - -Profiler subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data. - -In order to use `ProfilerSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it. - -### Sol-compiler - -If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you. - -```typescript -import { SolCompilerArtifactsAdapter } from '@0x/sol-profiler'; -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir); -``` - -### Truffle - -If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you. - -```typescript -import { TruffleArtifactAdapter } from '@0x/sol-profiler'; -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion); -``` - -Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`. - -### Other framework/toolset - -You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`. - -```typescript -import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...); -``` - -### Usage - -```typescript -import { ProfilerSubprovider } from '@0x/sol-profiler'; -import ProviderEngine = require('web3-provider-engine'); - -const provider = new ProviderEngine(); -// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from. -const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; -const isVerbose = true; -const profilerSubprovider = new ProfilerSubprovider(artifactsAdapter, defaultFromAddress, isVerbose); - -provider.addProvider(profilerSubprovider); -// Add all your other providers -provider.start(); -``` - -After your test suite is complete (e.g in the Mocha global `after` hook), you'll need to call: - -```typescript -await profilerSubprovider.writeProfilerOutputAsync(); -``` - -This will create a `coverage.json` file in a `coverage` directory. This file has an [Istanbul format](https://github.com/gotwarlost/istanbul/blob/master/profiler.json.md) - so you can use it with any of the existing Istanbul reporters. - -```bash -yarn add -D istanbul -istanbul report html -open coverage/index.html -``` - -Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520). diff --git a/packages/website/md/docs/sol_trace/installation.md b/packages/website/md/docs/sol_trace/installation.md deleted file mode 100644 index eb7bf08b8..000000000 --- a/packages/website/md/docs/sol_trace/installation.md +++ /dev/null @@ -1,17 +0,0 @@ -**Install** - -```bash -yarn add -D @0x/sol-trace -``` - -**Import** - -```javascript -import { RevertTraceSubprovider } from '@0x/sol-trace'; -``` - -or - -```javascript -var RevertTraceSubprovider = require('@0x/sol-trace').RevertTraceSubprovider; -``` diff --git a/packages/website/md/docs/sol_trace/introduction.md b/packages/website/md/docs/sol_trace/introduction.md deleted file mode 100644 index 73f5c2bcd..000000000 --- a/packages/website/md/docs/sol_trace/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [sol-trace](https://github.com/0xProject/0x-monorepo/tree/development/packages/sol-trace) documentation! Sol-trace gives you a human-readable error stack trace when a revert happens in your Solidity code. diff --git a/packages/website/md/docs/sol_trace/usage.md b/packages/website/md/docs/sol_trace/usage.md deleted file mode 100644 index d117a0faf..000000000 --- a/packages/website/md/docs/sol_trace/usage.md +++ /dev/null @@ -1,62 +0,0 @@ -Sol-trace uses transaction traces to reconstruct the stack trace when reverts happen in Solidity. In order for it to gather these traces, you must add the `RevertTraceSubprovider` to the [ProviderEngine](https://github.com/MetaMask/provider-engine) instance you use when running your Solidity tests. If you're unfamiliar with `ProviderEngine`, please read the [Web3 Provider explained](https://0x.org/wiki#Web3-Provider-Explained) wiki article. - -The `RevertTraceSubprovider` eavesdrops on the `eth_sendTransaction` and `eth_call` RPC calls and collects traces after each call using `debug_traceTransaction`. `eth_call`'s' don't generate traces - so we take a snapshot, re-submit it as a transaction, get the trace and then revert the snapshot. - -Trace subprovider needs some info about your contracts (`srcMap`, `bytecode`). It gets that info from your project's artifacts. Some frameworks have their own artifact format. Some artifact formats don't actually contain all the neccessary data. - -In order to use `RevertTraceSubprovider` with your favorite framework you need to pass an `artifactsAdapter` to it. - -### Sol-compiler - -If you are generating your artifacts with [@0x/sol-compiler](https://0x.org/docs/sol-compiler) you can use the `SolCompilerArtifactsAdapter` we've implemented for you. - -```typescript -import { SolCompilerArtifactsAdapter } from '@0x/sol-trace'; -// Both artifactsDir and contractsDir are optional and will be fetched from compiler.json if not passed in -const artifactAdapter = new SolCompilerArtifactAdapter(artifactsDir, contractsDir); -``` - -### Truffle - -If your project is using [Truffle](https://truffleframework.com/), we've written a `TruffleArtifactsAdapter`for you. - -```typescript -import { TruffleArtifactAdapter } from '@0x/sol-trace'; -const projectRoot = '.'; -const solcVersion = '0.5.0'; -const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion); -``` - -Because truffle artifacts don't have all the data we need - we actually will recompile your contracts under the hood. That's why you don't need to pass an `artifactsPath`. - -### Other framework/toolset - -You'll need to write your own artifacts adapter. It should extend `AbstractArtifactsAdapter`. - -```typescript -import { AbstractArtifactAdapter } from '@0x/sol-trace'; - -class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...}; -const artifactAdapter = new YourCustomArtifactsAdapter(...); -``` - -### Usage - -```typescript -import { RevertTraceSubprovider } from '@0x/sol-trace'; -import ProviderEngine = require('web3-provider-engine'); - -const provider = new ProviderEngine(); -// Some calls might not have `from` address specified. Nevertheless - transactions need to be submitted from an address with at least some funds. defaultFromAddress is the address that will be used to submit those calls as transactions from. -const defaultFromAddress = '0x5409ed021d9299bf6814279a6a1411a7e866a631'; -const isVerbose = true; -const revertTraceSubprovider = new RevertTraceSubprovider(artifactsAdapter, defaultFromAddress, isVerbose); - -provider.addProvider(revertTraceSubprovider); -// Add all your other providers -provider.start(); -``` - -Now when you run your tests, it should print out stack traces when encountering an error. - -Use [Geth](https://github.com/ethereum/go-ethereum) as a backing node. We recommend using our [Devnet Docker container](https://hub.docker.com/r/0xorg/devnet) which sets up a Geth node for testing purposes. Ganache support is a [work in progress](https://github.com/0xProject/0x-monorepo/issues/1520). diff --git a/packages/website/md/docs/subproviders/1/installation.md b/packages/website/md/docs/subproviders/1/installation.md deleted file mode 100644 index a049ff0ec..000000000 --- a/packages/website/md/docs/subproviders/1/installation.md +++ /dev/null @@ -1,15 +0,0 @@ -```bash -npm install @0xproject/subproviders --save -``` - -**Import** - -```typescript -import { LedgerSubprovider } from '@0xproject/subproviders'; -``` - -or - -```javascript -var LedgerSubprovider = require('@0xproject/subproviders').LedgerSubprovider; -``` diff --git a/packages/website/md/docs/subproviders/1/introduction.md b/packages/website/md/docs/subproviders/1/introduction.md deleted file mode 100644 index fe7fb6a8d..000000000 --- a/packages/website/md/docs/subproviders/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [Subproviders](https://github.com/0xProject/0x-monorepo/tree/development/packages/subproviders) documentation! Subproviders is a package containing useful [subproviders](https://0x.org/wiki#Web3-Provider-Explained) that can be used with the [Web3 Provider Engine](https://github.com/MetaMask/provider-engine) library. diff --git a/packages/website/md/docs/subproviders/1/ledger_node_hid.md b/packages/website/md/docs/subproviders/1/ledger_node_hid.md deleted file mode 100644 index 3089817af..000000000 --- a/packages/website/md/docs/subproviders/1/ledger_node_hid.md +++ /dev/null @@ -1,17 +0,0 @@ -By default, node-hid transport support is an optional dependency. This is due to the requirement of native usb developer packages on the host system. If these aren't installed the entire `npm install` fails. We also no longer export node-hid transport client factories. To re-create this see our integration tests or follow the example below: - -```typescript -import Eth from '@ledgerhq/hw-app-eth'; -import TransportNodeHid from '@ledgerhq/hw-transport-node-hid'; -async function ledgerEthereumNodeJsClientFactoryAsync(): Promise { - const ledgerConnection = await TransportNodeHid.create(); - const ledgerEthClient = new Eth(ledgerConnection); - return ledgerEthClient; -} - -// Create a LedgerSubprovider with the node-hid transport -ledgerSubprovider = new LedgerSubprovider({ - networkId, - ledgerEthereumClientFactoryAsync: ledgerEthereumNodeJsClientFactoryAsync, -}); -``` diff --git a/packages/website/md/docs/subproviders/2/installation.md b/packages/website/md/docs/subproviders/2/installation.md deleted file mode 100644 index 025dd0dee..000000000 --- a/packages/website/md/docs/subproviders/2/installation.md +++ /dev/null @@ -1,15 +0,0 @@ -```bash -npm install @0x/subproviders --save -``` - -**Import** - -```typescript -import { LedgerSubprovider } from '@0x/subproviders'; -``` - -or - -```javascript -var LedgerSubprovider = require('@0x/subproviders').LedgerSubprovider; -``` diff --git a/packages/website/md/docs/web3_wrapper/1/installation.md b/packages/website/md/docs/web3_wrapper/1/installation.md deleted file mode 100644 index 92794d9b0..000000000 --- a/packages/website/md/docs/web3_wrapper/1/installation.md +++ /dev/null @@ -1,25 +0,0 @@ -**Install** - -```bash -npm install @0xproject/web3-wrapper --save -``` - -**Import** - -```javascript -import { Web3Wrapper } from '@0xproject/web3-wrapper'; -``` - -or - -```javascript -var Web3Wrapper = require('@0xproject/web3-wrapper').Web3Wrapper; -``` - -If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: - -``` -"include": [ - "./node_modules/web3-typescript-typings/index.d.ts", -] -``` diff --git a/packages/website/md/docs/web3_wrapper/1/introduction.md b/packages/website/md/docs/web3_wrapper/1/introduction.md deleted file mode 100644 index 17bd316f1..000000000 --- a/packages/website/md/docs/web3_wrapper/1/introduction.md +++ /dev/null @@ -1 +0,0 @@ -Welcome to the [Web3Wrapper](https://github.com/0xProject/0x-monorepo/tree/development/packages/web3-wrapper) documentation! Web3-wrapper is a JSON-RPC client for Ethereum nodes. It is a type-safe alternative to [Web3.js](https://github.com/ethereum/web3.js/) written in TypeScript. diff --git a/packages/website/md/docs/web3_wrapper/2/installation.md b/packages/website/md/docs/web3_wrapper/2/installation.md deleted file mode 100644 index 14c4f066c..000000000 --- a/packages/website/md/docs/web3_wrapper/2/installation.md +++ /dev/null @@ -1,25 +0,0 @@ -**Install** - -```bash -npm install @0x/web3-wrapper --save -``` - -**Import** - -```javascript -import { Web3Wrapper } from '@0x/web3-wrapper'; -``` - -or - -```javascript -var Web3Wrapper = require('@0x/web3-wrapper').Web3Wrapper; -``` - -If your project is in [TypeScript](https://www.typescriptlang.org/), add the following to your `tsconfig.json`: - -``` -"include": [ - "./node_modules/web3-typescript-typings/index.d.ts", -] -``` diff --git a/packages/website/package.json b/packages/website/package.json deleted file mode 100644 index 165ce5725..000000000 --- a/packages/website/package.json +++ /dev/null @@ -1,128 +0,0 @@ -{ - "name": "@0x/website", - "version": "0.0.71", - "engines": { - "node": ">=6.12" - }, - "private": true, - "description": "Website and 0x portal dapp", - "scripts": { - "build": "yarn build:dev", - "build:prod": "node --max_old_space_size=8192 ../../node_modules/.bin/webpack --mode production", - "build:dev": "../../node_modules/.bin/webpack --mode development", - "clean": "shx rm -f public/bundle*", - "lint": "tslint --format stylish --project . 'ts/**/*.ts' 'ts/**/*.tsx'", - "dev": "webpack-dev-server --mode development --content-base public --https", - "deploy_dogfood": "npm run build:prod; aws s3 sync ./public/. s3://dogfood.0x.org --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers", - "deploy_staging": "npm run build:prod; aws s3 sync ./public/. s3://staging-0xproject --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers", - "deploy_live": "DEPLOY_ROLLBAR_SOURCEMAPS=true npm run build:prod; aws s3 sync ./public/. s3://0x.org --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js" - }, - "author": "Fabio Berger", - "license": "Apache-2.0", - "dependencies": { - "@0x/asset-buyer": "^5.0.3", - "@0x/contract-addresses": "^2.2.1", - "@0x/contract-wrappers": "^7.0.2", - "@0x/json-schemas": "^3.0.2", - "@0x/order-utils": "^6.0.1", - "@0x/react-docs": "^2.0.3", - "@0x/react-shared": "^2.0.3", - "@0x/subproviders": "^3.0.2", - "@0x/types": "^2.0.2", - "@0x/typescript-typings": "^4.0.0", - "@0x/utils": "^4.0.3", - "@0x/web3-wrapper": "^4.0.2", - "@reach/dialog": "^0.1.2", - "@types/react-lazyload": "^2.3.1", - "@types/react-loadable": "^5.4.2", - "@types/react-syntax-highlighter": "^0.0.8", - "@types/styled-components": "4.1.1", - "accounting": "^0.4.1", - "basscss": "^8.0.3", - "blockies": "^0.0.2", - "bowser": "^1.9.3", - "deep-equal": "^1.0.1", - "ethereum-types": "^2.0.0", - "ethereumjs-util": "^5.1.1", - "find-versions": "^2.0.0", - "jsonschema": "^1.2.0", - "less": "^2.7.2", - "lodash": "^4.17.11", - "material-ui": "^0.20.0", - "moment": "2.21.0", - "numeral": "^2.0.6", - "polished": "^1.9.2", - "query-string": "^6.0.0", - "rc-slider": "^8.6.3", - "react": "^16.5.2", - "react-copy-to-clipboard": "^5.0.0", - "react-document-title": "^2.0.3", - "react-dom": "^16.5.2", - "react-flickity-component": "^3.1.0", - "react-headroom": "2.2.2", - "react-helmet": "^5.2.0", - "react-lazyload": "^2.3.0", - "react-loadable": "^5.5.0", - "react-markdown": "^4.0.6", - "react-popper": "^1.0.0-beta.6", - "react-redux": "^5.0.3", - "react-responsive": "^6.0.1", - "react-router-dom": "^4.3.1", - "react-scroll": "0xproject/react-scroll#pr-330-and-replace-state", - "react-scrollable-anchor": "^0.6.1", - "react-syntax-highlighter": "^10.1.1", - "react-tooltip": "^3.2.7", - "react-typist": "^2.0.4", - "redux": "^3.6.0", - "redux-devtools-extension": "^2.13.2", - "rollbar": "^2.4.7", - "semver-sort": "0.0.4", - "styled-components": "^4.1.1", - "thenby": "^1.2.3", - "truffle-contract": "2.0.1", - "web3-provider-engine": "14.0.6", - "xml-js": "^1.6.4" - }, - "devDependencies": { - "@types/accounting": "^0.4.1", - "@types/blockies": "^0.0.0", - "@types/deep-equal": "^1.0.0", - "@types/find-versions": "^2.0.0", - "@types/jsonschema": "^1.1.1", - "@types/lodash": "4.14.104", - "@types/material-ui": "^0.20.0", - "@types/node": "*", - "@types/numeral": "^0.0.22", - "@types/query-string": "^5.1.0", - "@types/rc-slider": "^8.6.0", - "@types/react": "^16.7.7", - "@types/react-copy-to-clipboard": "^4.2.0", - "@types/react-dom": "^16.0.6", - "@types/react-helmet": "^5.0.6", - "@types/react-redux": "^4.4.37", - "@types/react-scroll": "1.5.3", - "@types/react-syntax-highlighter": "^0.0.8", - "@types/react-tap-event-plugin": "0.0.30", - "@types/redux": "^3.6.0", - "@types/web3-provider-engine": "^14.0.0", - "awesome-typescript-loader": "^5.2.1", - "css-loader": "0.23.x", - "less-loader": "^4.1.0", - "make-promises-safe": "^1.1.0", - "raw-loader": "^0.5.1", - "react-svg-loader": "^2.1.0", - "rollbar-sourcemap-webpack-plugin": "^2.4.0", - "shx": "^0.2.2", - "source-map-loader": "^0.2.4", - "style-loader": "0.23.x", - "terser-webpack-plugin": "^1.1.0", - "tslint": "5.11.0", - "tslint-config-0xproject": "^0.0.2", - "typescript": "3.0.1", - "uglifyjs-webpack-plugin": "^2.0.1", - "webpack": "^4.20.2", - "webpack-bundle-analyzer": "^3.0.3", - "webpack-cli": "3.1.2", - "webpack-dev-server": "^3.1.9" - } -} diff --git a/packages/website/public/css/basscss.min.css b/packages/website/public/css/basscss.min.css deleted file mode 100644 index cb6f13198..000000000 --- a/packages/website/public/css/basscss.min.css +++ /dev/null @@ -1 +0,0 @@ -/*! Basscss | http://basscss.com | MIT License */.h1{font-size:2rem}.h2{font-size:1.5rem}.h3{font-size:1.25rem}.h4{font-size:1rem}.h5{font-size:.875rem}.h6{font-size:.75rem}.font-family-inherit{font-family:inherit}.font-size-inherit{font-size:inherit}.text-decoration-none{text-decoration:none}.bold{font-weight:700}.regular{font-weight:400}.italic{font-style:italic}.caps{text-transform:uppercase;letter-spacing:.2em}.left-align{text-align:left}.center{text-align:center}.right-align{text-align:right}.justify{text-align:justify}.nowrap{white-space:nowrap}.break-word{word-wrap:break-word}.line-height-1{line-height:1}.line-height-2{line-height:1.125}.line-height-3{line-height:1.25}.line-height-4{line-height:1.5}.list-style-none{list-style:none}.underline{text-decoration:underline}.truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.list-reset{list-style:none;padding-left:0}.inline{display:inline}.block{display:block}.inline-block{display:inline-block}.table{display:table}.table-cell{display:table-cell}.overflow-hidden{overflow:hidden}.overflow-scroll{overflow:scroll}.overflow-auto{overflow:auto}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}.left{float:left}.right{float:right}.fit{max-width:100%}.max-width-1{max-width:24rem}.max-width-2{max-width:32rem}.max-width-3{max-width:48rem}.max-width-4{max-width:64rem}.border-box{box-sizing:border-box}.align-baseline{vertical-align:baseline}.align-top{vertical-align:top}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.m0{margin:0}.mt0{margin-top:0}.mr0{margin-right:0}.mb0{margin-bottom:0}.ml0,.mx0{margin-left:0}.mx0{margin-right:0}.my0{margin-top:0;margin-bottom:0}.m1{margin:.5rem}.mt1{margin-top:.5rem}.mr1{margin-right:.5rem}.mb1{margin-bottom:.5rem}.ml1,.mx1{margin-left:.5rem}.mx1{margin-right:.5rem}.my1{margin-top:.5rem;margin-bottom:.5rem}.m2{margin:1rem}.mt2{margin-top:1rem}.mr2{margin-right:1rem}.mb2{margin-bottom:1rem}.ml2,.mx2{margin-left:1rem}.mx2{margin-right:1rem}.my2{margin-top:1rem;margin-bottom:1rem}.m3{margin:2rem}.mt3{margin-top:2rem}.mr3{margin-right:2rem}.mb3{margin-bottom:2rem}.ml3,.mx3{margin-left:2rem}.mx3{margin-right:2rem}.my3{margin-top:2rem;margin-bottom:2rem}.m4{margin:4rem}.mt4{margin-top:4rem}.mr4{margin-right:4rem}.mb4{margin-bottom:4rem}.ml4,.mx4{margin-left:4rem}.mx4{margin-right:4rem}.my4{margin-top:4rem;margin-bottom:4rem}.mxn1{margin-left:-.5rem;margin-right:-.5rem}.mxn2{margin-left:-1rem;margin-right:-1rem}.mxn3{margin-left:-2rem;margin-right:-2rem}.mxn4{margin-left:-4rem;margin-right:-4rem}.ml-auto{margin-left:auto}.mr-auto,.mx-auto{margin-right:auto}.mx-auto{margin-left:auto}.p0{padding:0}.pt0{padding-top:0}.pr0{padding-right:0}.pb0{padding-bottom:0}.pl0,.px0{padding-left:0}.px0{padding-right:0}.py0{padding-top:0;padding-bottom:0}.p1{padding:.5rem}.pt1{padding-top:.5rem}.pr1{padding-right:.5rem}.pb1{padding-bottom:.5rem}.pl1{padding-left:.5rem}.py1{padding-top:.5rem;padding-bottom:.5rem}.px1{padding-left:.5rem;padding-right:.5rem}.p2{padding:1rem}.pt2{padding-top:1rem}.pr2{padding-right:1rem}.pb2{padding-bottom:1rem}.pl2{padding-left:1rem}.py2{padding-top:1rem;padding-bottom:1rem}.px2{padding-left:1rem;padding-right:1rem}.p3{padding:2rem}.pt3{padding-top:2rem}.pr3{padding-right:2rem}.pb3{padding-bottom:2rem}.pl3{padding-left:2rem}.py3{padding-top:2rem;padding-bottom:2rem}.px3{padding-left:2rem;padding-right:2rem}.p4{padding:4rem}.pt4{padding-top:4rem}.pr4{padding-right:4rem}.pb4{padding-bottom:4rem}.pl4{padding-left:4rem}.py4{padding-top:4rem;padding-bottom:4rem}.px4{padding-left:4rem;padding-right:4rem}.col{float:left}.col,.col-right{box-sizing:border-box}.col-right{float:right}.col-1{width:8.33333%}.col-2{width:16.66667%}.col-3{width:25%}.col-4{width:33.33333%}.col-5{width:41.66667%}.col-6{width:50%}.col-7{width:58.33333%}.col-8{width:66.66667%}.col-9{width:75%}.col-10{width:83.33333%}.col-11{width:91.66667%}.col-12{width:100%}@media (min-width:40em){.sm-col{float:left;box-sizing:border-box}.sm-col-right{float:right;box-sizing:border-box}.sm-col-1{width:8.33333%}.sm-col-2{width:16.66667%}.sm-col-3{width:25%}.sm-col-4{width:33.33333%}.sm-col-5{width:41.66667%}.sm-col-6{width:50%}.sm-col-7{width:58.33333%}.sm-col-8{width:66.66667%}.sm-col-9{width:75%}.sm-col-10{width:83.33333%}.sm-col-11{width:91.66667%}.sm-col-12{width:100%}}@media (min-width:52em){.md-col{float:left;box-sizing:border-box}.md-col-right{float:right;box-sizing:border-box}.md-col-1{width:8.33333%}.md-col-2{width:16.66667%}.md-col-3{width:25%}.md-col-4{width:33.33333%}.md-col-5{width:41.66667%}.md-col-6{width:50%}.md-col-7{width:58.33333%}.md-col-8{width:66.66667%}.md-col-9{width:75%}.md-col-10{width:83.33333%}.md-col-11{width:91.66667%}.md-col-12{width:100%}}@media (min-width:64em){.lg-col{float:left;box-sizing:border-box}.lg-col-right{float:right;box-sizing:border-box}.lg-col-1{width:8.33333%}.lg-col-2{width:16.66667%}.lg-col-3{width:25%}.lg-col-4{width:33.33333%}.lg-col-5{width:41.66667%}.lg-col-6{width:50%}.lg-col-7{width:58.33333%}.lg-col-8{width:66.66667%}.lg-col-9{width:75%}.lg-col-10{width:83.33333%}.lg-col-11{width:91.66667%}.lg-col-12{width:100%}}.flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}@media (min-width:40em){.sm-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}@media (min-width:52em){.md-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}@media (min-width:64em){.lg-flex{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}}.flex-column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.flex-wrap{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap}.items-start{-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}.items-end{-webkit-box-align:end;-webkit-align-items:flex-end;-ms-flex-align:end;-ms-grid-row-align:flex-end;align-items:flex-end}.items-center{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}.items-baseline{-webkit-box-align:baseline;-webkit-align-items:baseline;-ms-flex-align:baseline;-ms-grid-row-align:baseline;align-items:baseline}.items-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;-ms-flex-align:stretch;-ms-grid-row-align:stretch;align-items:stretch}.self-start{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start}.self-end{-webkit-align-self:flex-end;-ms-flex-item-align:end;align-self:flex-end}.self-center{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center}.self-baseline{-webkit-align-self:baseline;-ms-flex-item-align:baseline;align-self:baseline}.self-stretch{-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch}.justify-start{-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.justify-end{-webkit-box-pack:end;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end}.justify-center{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between}.justify-around{-webkit-justify-content:space-around;-ms-flex-pack:distribute;justify-content:space-around}.content-start{-webkit-align-content:flex-start;-ms-flex-line-pack:start;align-content:flex-start}.content-end{-webkit-align-content:flex-end;-ms-flex-line-pack:end;align-content:flex-end}.content-center{-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center}.content-between{-webkit-align-content:space-between;-ms-flex-line-pack:justify;align-content:space-between}.content-around{-webkit-align-content:space-around;-ms-flex-line-pack:distribute;align-content:space-around}.content-stretch{-webkit-align-content:stretch;-ms-flex-line-pack:stretch;align-content:stretch}.flex-auto{-webkit-box-flex:1;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;min-width:0;min-height:0}.flex-none{-webkit-box-flex:0;-webkit-flex:none;-ms-flex:none;flex:none}.order-0{-webkit-box-ordinal-group:1;-webkit-order:0;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-webkit-order:1;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-webkit-order:2;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-webkit-order:3;-ms-flex-order:3;order:3}.order-last{-webkit-box-ordinal-group:100000;-webkit-order:99999;-ms-flex-order:99999;order:99999}.relative{position:relative}.absolute{position:absolute}.fixed{position:fixed}.top-0{top:0}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.z1{z-index:1}.z2{z-index:2}.z3{z-index:3}.z4{z-index:4}.border{border-style:solid;border-width:1px}.border-top{border-top-style:solid;border-top-width:1px}.border-right{border-right-style:solid;border-right-width:1px}.border-bottom{border-bottom-style:solid;border-bottom-width:1px}.border-left{border-left-style:solid;border-left-width:1px}.border-none{border:0}.rounded{border-radius:3px}.circle{border-radius:50%}.rounded-top{border-radius:3px 3px 0 0}.rounded-right{border-radius:0 3px 3px 0}.rounded-bottom{border-radius:0 0 3px 3px}.rounded-left{border-radius:3px 0 0 3px}.not-rounded{border-radius:0}.hide{position:absolute!important;height:1px;width:1px;overflow:hidden;clip:rect(1px,1px,1px,1px)}@media (max-width:40em){.xs-hide{display:none!important}}@media (min-width:40em) and (max-width:52em){.sm-hide{display:none!important}}@media (min-width:52em) and (max-width:64em){.md-hide{display:none!important}}@media (min-width:64em){.lg-hide{display:none!important}}.display-none{display:none!important} \ No newline at end of file diff --git a/packages/website/public/css/basscss_responsive_custom.css b/packages/website/public/css/basscss_responsive_custom.css deleted file mode 100644 index 041abca6a..000000000 --- a/packages/website/public/css/basscss_responsive_custom.css +++ /dev/null @@ -1,106 +0,0 @@ -/* Custom Basscss Responsive Utilities */ - -@media (max-width: 52em) { - .sm-center { - text-align: center; - } - .sm-align-middle { - vertical-align: middle; - } - .sm-align-top { - vertical-align: top; - } - .sm-left-align { - text-align: left; - } - .sm-right-align { - text-align: right; - } - .sm-table-cell { - display: table-cell; - } - .sm-mx-auto { - margin-left: auto; - margin-right: auto; - } - .sm-right { - float: right; - } - .sm-left { - float: left; - } - .sm-justify-end { - ms-flex-pack: end; - justify-content: flex-end; - } -} - -@media (min-width: 52em) { - .md-center { - text-align: center; - } - .md-align-middle { - vertical-align: middle; - } - .md-align-top { - vertical-align: top; - } - .md-left-align { - text-align: left; - } - .md-right-align { - text-align: right; - } - .md-table-cell { - display: table-cell; - } - .md-mx-auto { - margin-left: auto; - margin-right: auto; - } - .md-right { - float: right; - } - .md-left { - float: left; - } - .md-justify-end { - ms-flex-pack: end; - justify-content: flex-end; - } -} - -@media (min-width: 64em) { - .lg-center { - text-align: center; - } - .lg-align-middle { - vertical-align: middle; - } - .lg-align-top { - vertical-align: top; - } - .lg-left-align { - text-align: left; - } - .lg-right-align { - text-align: right; - } - .lg-table-cell { - display: table-cell; - } - .lg-mx-auto { - margin-left: auto; - margin-right: auto; - } - .lg-right { - float: right; - } - .lg-left { - float: left; - } - .lg-justify-end { - ms-flex-pack: end; - justify-content: flex-end; - } -} diff --git a/packages/website/public/css/basscss_responsive_margin.css b/packages/website/public/css/basscss_responsive_margin.css deleted file mode 100644 index c9f3e855c..000000000 --- a/packages/website/public/css/basscss_responsive_margin.css +++ /dev/null @@ -1,453 +0,0 @@ -/* Basscss Responsive Margin */ - -@media (max-width: 52em) { - /* Modified by Fabio Berger to max-width from min-width */ - - .sm-m0 { - margin: 0; - } - .sm-mt0 { - margin-top: 0; - } - .sm-mr0 { - margin-right: 0; - } - .sm-mb0 { - margin-bottom: 0; - } - .sm-ml0 { - margin-left: 0; - } - .sm-mx0 { - margin-left: 0; - margin-right: 0; - } - .sm-my0 { - margin-top: 0; - margin-bottom: 0; - } - - .sm-m1 { - margin: 0.5rem; - } - .sm-mt1 { - margin-top: 0.5rem; - } - .sm-mr1 { - margin-right: 0.5rem; - } - .sm-mb1 { - margin-bottom: 0.5rem; - } - .sm-ml1 { - margin-left: 0.5rem; - } - .sm-mx1 { - margin-left: 0.5rem; - margin-right: 0.5rem; - } - .sm-my1 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - } - - .sm-m2 { - margin: 1rem; - } - .sm-mt2 { - margin-top: 1rem; - } - .sm-mr2 { - margin-right: 1rem; - } - .sm-mb2 { - margin-bottom: 1rem; - } - .sm-ml2 { - margin-left: 1rem; - } - .sm-mx2 { - margin-left: 1rem; - margin-right: 1rem; - } - .sm-my2 { - margin-top: 1rem; - margin-bottom: 1rem; - } - - .sm-m3 { - margin: 2rem; - } - .sm-mt3 { - margin-top: 2rem; - } - .sm-mr3 { - margin-right: 2rem; - } - .sm-mb3 { - margin-bottom: 2rem; - } - .sm-ml3 { - margin-left: 2rem; - } - .sm-mx3 { - margin-left: 2rem; - margin-right: 2rem; - } - .sm-my3 { - margin-top: 2rem; - margin-bottom: 2rem; - } - - .sm-m4 { - margin: 4rem; - } - .sm-mt4 { - margin-top: 4rem; - } - .sm-mr4 { - margin-right: 4rem; - } - .sm-mb4 { - margin-bottom: 4rem; - } - .sm-ml4 { - margin-left: 4rem; - } - .sm-mx4 { - margin-left: 4rem; - margin-right: 4rem; - } - .sm-my4 { - margin-top: 4rem; - margin-bottom: 4rem; - } - - .sm-mxn1 { - margin-left: -0.5rem; - margin-right: -0.5rem; - } - .sm-mxn2 { - margin-left: -1rem; - margin-right: -1rem; - } - .sm-mxn3 { - margin-left: -2rem; - margin-right: -2rem; - } - .sm-mxn4 { - margin-left: -4rem; - margin-right: -4rem; - } - - .sm-ml-auto { - margin-left: auto; - } - .sm-mr-auto { - margin-right: auto; - } - .sm-mx-auto { - margin-left: auto; - margin-right: auto; - } -} - -@media (min-width: 52em) { - .md-m0 { - margin: 0; - } - .md-mt0 { - margin-top: 0; - } - .md-mr0 { - margin-right: 0; - } - .md-mb0 { - margin-bottom: 0; - } - .md-ml0 { - margin-left: 0; - } - .md-mx0 { - margin-left: 0; - margin-right: 0; - } - .md-my0 { - margin-top: 0; - margin-bottom: 0; - } - - .md-m1 { - margin: 0.5rem; - } - .md-mt1 { - margin-top: 0.5rem; - } - .md-mr1 { - margin-right: 0.5rem; - } - .md-mb1 { - margin-bottom: 0.5rem; - } - .md-ml1 { - margin-left: 0.5rem; - } - .md-mx1 { - margin-left: 0.5rem; - margin-right: 0.5rem; - } - .md-my1 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - } - - .md-m2 { - margin: 1rem; - } - .md-mt2 { - margin-top: 1rem; - } - .md-mr2 { - margin-right: 1rem; - } - .md-mb2 { - margin-bottom: 1rem; - } - .md-ml2 { - margin-left: 1rem; - } - .md-mx2 { - margin-left: 1rem; - margin-right: 1rem; - } - .md-my2 { - margin-top: 1rem; - margin-bottom: 1rem; - } - - .md-m3 { - margin: 2rem; - } - .md-mt3 { - margin-top: 2rem; - } - .md-mr3 { - margin-right: 2rem; - } - .md-mb3 { - margin-bottom: 2rem; - } - .md-ml3 { - margin-left: 2rem; - } - .md-mx3 { - margin-left: 2rem; - margin-right: 2rem; - } - .md-my3 { - margin-top: 2rem; - margin-bottom: 2rem; - } - - .md-m4 { - margin: 4rem; - } - .md-mt4 { - margin-top: 4rem; - } - .md-mr4 { - margin-right: 4rem; - } - .md-mb4 { - margin-bottom: 4rem; - } - .md-ml4 { - margin-left: 4rem; - } - .md-mx4 { - margin-left: 4rem; - margin-right: 4rem; - } - .md-my4 { - margin-top: 4rem; - margin-bottom: 4rem; - } - - .md-mxn1 { - margin-left: -0.5rem; - margin-right: -0.5rem; - } - .md-mxn2 { - margin-left: -1rem; - margin-right: -1rem; - } - .md-mxn3 { - margin-left: -2rem; - margin-right: -2rem; - } - .md-mxn4 { - margin-left: -4rem; - margin-right: -4rem; - } - - .md-ml-auto { - margin-left: auto; - } - .md-mr-auto { - margin-right: auto; - } - .md-mx-auto { - margin-left: auto; - margin-right: auto; - } -} - -@media (min-width: 64em) { - .lg-m0 { - margin: 0; - } - .lg-mt0 { - margin-top: 0; - } - .lg-mr0 { - margin-right: 0; - } - .lg-mb0 { - margin-bottom: 0; - } - .lg-ml0 { - margin-left: 0; - } - .lg-mx0 { - margin-left: 0; - margin-right: 0; - } - .lg-my0 { - margin-top: 0; - margin-bottom: 0; - } - - .lg-m1 { - margin: 0.5rem; - } - .lg-mt1 { - margin-top: 0.5rem; - } - .lg-mr1 { - margin-right: 0.5rem; - } - .lg-mb1 { - margin-bottom: 0.5rem; - } - .lg-ml1 { - margin-left: 0.5rem; - } - .lg-mx1 { - margin-left: 0.5rem; - margin-right: 0.5rem; - } - .lg-my1 { - margin-top: 0.5rem; - margin-bottom: 0.5rem; - } - - .lg-m2 { - margin: 1rem; - } - .lg-mt2 { - margin-top: 1rem; - } - .lg-mr2 { - margin-right: 1rem; - } - .lg-mb2 { - margin-bottom: 1rem; - } - .lg-ml2 { - margin-left: 1rem; - } - .lg-mx2 { - margin-left: 1rem; - margin-right: 1rem; - } - .lg-my2 { - margin-top: 1rem; - margin-bottom: 1rem; - } - - .lg-m3 { - margin: 2rem; - } - .lg-mt3 { - margin-top: 2rem; - } - .lg-mr3 { - margin-right: 2rem; - } - .lg-mb3 { - margin-bottom: 2rem; - } - .lg-ml3 { - margin-left: 2rem; - } - .lg-mx3 { - margin-left: 2rem; - margin-right: 2rem; - } - .lg-my3 { - margin-top: 2rem; - margin-bottom: 2rem; - } - - .lg-m4 { - margin: 4rem; - } - .lg-mt4 { - margin-top: 4rem; - } - .lg-mr4 { - margin-right: 4rem; - } - .lg-mb4 { - margin-bottom: 4rem; - } - .lg-ml4 { - margin-left: 4rem; - } - .lg-mx4 { - margin-left: 4rem; - margin-right: 4rem; - } - .lg-my4 { - margin-top: 4rem; - margin-bottom: 4rem; - } - - .lg-mxn1 { - margin-left: -0.5rem; - margin-right: -0.5rem; - } - .lg-mxn2 { - margin-left: -1rem; - margin-right: -1rem; - } - .lg-mxn3 { - margin-left: -2rem; - margin-right: -2rem; - } - .lg-mxn4 { - margin-left: -4rem; - margin-right: -4rem; - } - - .lg-ml-auto { - margin-left: auto; - } - .lg-mr-auto { - margin-right: auto; - } - .lg-mx-auto { - margin-left: auto; - margin-right: auto; - } -} diff --git a/packages/website/public/css/basscss_responsive_padding.css b/packages/website/public/css/basscss_responsive_padding.css deleted file mode 100644 index e027c2d65..000000000 --- a/packages/website/public/css/basscss_responsive_padding.css +++ /dev/null @@ -1,134 +0,0 @@ -/* Basscss Responsive Padding */ -/* Modified by Fabio Berger to include xs prefix */ - -@media (max-width: 52em) { /* Modified by Fabio Berger to max-width from min-width */ - - .sm-p0 { padding: 0 } - .sm-pt0 { padding-top: 0 } - .sm-pr0 { padding-right: 0 } - .sm-pb0 { padding-bottom: 0 } - .sm-pl0 { padding-left: 0 } - .sm-px0 { padding-left: 0; padding-right: 0 } - .sm-py0 { padding-top: 0; padding-bottom: 0 } - - .sm-p1 { padding: .5rem } - .sm-pt1 { padding-top: .5rem } - .sm-pr1 { padding-right: .5rem } - .sm-pb1 { padding-bottom: .5rem } - .sm-pl1 { padding-left: .5rem } - .sm-px1 { padding-left: .5rem; padding-right: .5rem } - .sm-py1 { padding-top: .5rem; padding-bottom: .5rem } - - .sm-p2 { padding: 1rem } - .sm-pt2 { padding-top: 1rem } - .sm-pr2 { padding-right: 1rem } - .sm-pb2 { padding-bottom: 1rem } - .sm-pl2 { padding-left: 1rem } - .sm-px2 { padding-left: 1rem; padding-right: 1rem } - .sm-py2 { padding-top: 1rem; padding-bottom: 1rem } - - .sm-p3 { padding: 2rem } - .sm-pt3 { padding-top: 2rem } - .sm-pr3 { padding-right: 2rem } - .sm-pb3 { padding-bottom: 2rem } - .sm-pl3 { padding-left: 2rem } - .sm-px3 { padding-left: 2rem; padding-right: 2rem } - .sm-py3 { padding-top: 2rem; padding-bottom: 2rem } - - .sm-p4 { padding: 4rem } - .sm-pt4 { padding-top: 4rem } - .sm-pr4 { padding-right: 4rem } - .sm-pb4 { padding-bottom: 4rem } - .sm-pl4 { padding-left: 4rem } - .sm-px4 { padding-left: 4rem; padding-right: 4rem } - .sm-py4 { padding-top: 4rem; padding-bottom: 4rem } - -} - -@media (min-width: 52em) { - - .md-p0 { padding: 0 } - .md-pt0 { padding-top: 0 } - .md-pr0 { padding-right: 0 } - .md-pb0 { padding-bottom: 0 } - .md-pl0 { padding-left: 0 } - .md-px0 { padding-left: 0; padding-right: 0 } - .md-py0 { padding-top: 0; padding-bottom: 0 } - - .md-p1 { padding: .5rem } - .md-pt1 { padding-top: .5rem } - .md-pr1 { padding-right: .5rem } - .md-pb1 { padding-bottom: .5rem } - .md-pl1 { padding-left: .5rem } - .md-px1 { padding-left: .5rem; padding-right: .5rem } - .md-py1 { padding-top: .5rem; padding-bottom: .5rem } - - .md-p2 { padding: 1rem } - .md-pt2 { padding-top: 1rem } - .md-pr2 { padding-right: 1rem } - .md-pb2 { padding-bottom: 1rem } - .md-pl2 { padding-left: 1rem } - .md-px2 { padding-left: 1rem; padding-right: 1rem } - .md-py2 { padding-top: 1rem; padding-bottom: 1rem } - - .md-p3 { padding: 2rem } - .md-pt3 { padding-top: 2rem } - .md-pr3 { padding-right: 2rem } - .md-pb3 { padding-bottom: 2rem } - .md-pl3 { padding-left: 2rem } - .md-px3 { padding-left: 2rem; padding-right: 2rem } - .md-py3 { padding-top: 2rem; padding-bottom: 2rem } - - .md-p4 { padding: 4rem } - .md-pt4 { padding-top: 4rem } - .md-pr4 { padding-right: 4rem } - .md-pb4 { padding-bottom: 4rem } - .md-pl4 { padding-left: 4rem } - .md-px4 { padding-left: 4rem; padding-right: 4rem } - .md-py4 { padding-top: 4rem; padding-bottom: 4rem } - -} - -@media (min-width: 64em) { - - .lg-p0 { padding: 0 } - .lg-pt0 { padding-top: 0 } - .lg-pr0 { padding-right: 0 } - .lg-pb0 { padding-bottom: 0 } - .lg-pl0 { padding-left: 0 } - .lg-px0 { padding-left: 0; padding-right: 0 } - .lg-py0 { padding-top: 0; padding-bottom: 0 } - - .lg-p1 { padding: .5rem } - .lg-pt1 { padding-top: .5rem } - .lg-pr1 { padding-right: .5rem } - .lg-pb1 { padding-bottom: .5rem } - .lg-pl1 { padding-left: .5rem } - .lg-px1 { padding-left: .5rem; padding-right: .5rem } - .lg-py1 { padding-top: .5rem; padding-bottom: .5rem } - - .lg-p2 { padding: 1rem } - .lg-pt2 { padding-top: 1rem } - .lg-pr2 { padding-right: 1rem } - .lg-pb2 { padding-bottom: 1rem } - .lg-pl2 { padding-left: 1rem } - .lg-px2 { padding-left: 1rem; padding-right: 1rem } - .lg-py2 { padding-top: 1rem; padding-bottom: 1rem } - - .lg-p3 { padding: 2rem } - .lg-pt3 { padding-top: 2rem } - .lg-pr3 { padding-right: 2rem } - .lg-pb3 { padding-bottom: 2rem } - .lg-pl3 { padding-left: 2rem } - .lg-px3 { padding-left: 2rem; padding-right: 2rem } - .lg-py3 { padding-top: 2rem; padding-bottom: 2rem } - - .lg-p4 { padding: 4rem } - .lg-pt4 { padding-top: 4rem } - .lg-pr4 { padding-right: 4rem } - .lg-pb4 { padding-bottom: 4rem } - .lg-pl4 { padding-left: 4rem } - .lg-px4 { padding-left: 4rem; padding-right: 4rem } - .lg-py4 { padding-top: 4rem; padding-bottom: 4rem } - -} diff --git a/packages/website/public/css/basscss_responsive_type_scale.css b/packages/website/public/css/basscss_responsive_type_scale.css deleted file mode 100644 index cae23b4e7..000000000 --- a/packages/website/public/css/basscss_responsive_type_scale.css +++ /dev/null @@ -1,35 +0,0 @@ -/* Basscss Responsive Type Scale */ -/* Modified by Fabio Berger to include xs prefix */ - -@media (max-width: 52em) { /* Modified by Fabio Berger to max-width from min-width */ - .sm-h00 { font-size: 4rem } - .sm-h0 { font-size: 3rem } - .sm-h1 { font-size: 2rem } - .sm-h2 { font-size: 1.5rem } - .sm-h3 { font-size: 1.25rem } - .sm-h4 { font-size: 1rem } - .sm-h5 { font-size: .875rem } - .sm-h6 { font-size: .75rem } -} - -@media (min-width: 52em) { - .md-h00 { font-size: 4rem } - .md-h0 { font-size: 3rem } - .md-h1 { font-size: 2rem } - .md-h2 { font-size: 1.5rem } - .md-h3 { font-size: 1.25rem } - .md-h4 { font-size: 1rem } - .md-h5 { font-size: .875rem } - .md-h6 { font-size: .75rem } -} - -@media (min-width: 64em) { - .lg-h00 { font-size: 4rem } - .lg-h0 { font-size: 3rem } - .lg-h1 { font-size: 2rem } - .lg-h2 { font-size: 1.5rem } - .lg-h3 { font-size: 1.25rem } - .lg-h4 { font-size: 1rem } - .lg-h5 { font-size: .875rem } - .lg-h6 { font-size: .75rem } -} diff --git a/packages/website/public/css/formular.css b/packages/website/public/css/formular.css deleted file mode 100644 index 85549f8c8..000000000 --- a/packages/website/public/css/formular.css +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @license - * MyFonts Webfont Build ID 3678880, 2018-11-27T05:59:35-0500 - * - * The fonts listed in this notice are subject to the End User License - * Agreement(s) entered into by the website owner. All other parties are - * explicitly restricted from using the Licensed Webfonts(s). - * - * You may obtain a valid license at the URLs below. - * - * Webfont: Formular-Light by Brownfox - * URL: https://www.myfonts.com/fonts/brownfox/formular/light/ - * - * Webfont: Formular by Brownfox - * URL: https://www.myfonts.com/fonts/brownfox/formular/regular/ - * - * - * License: https://www.myfonts.com/viewlicense?type=web&buildid=3678880 - * Licensed pageviews: 200,000 - * Webfonts copyright: Copyright (c) 2014 by Vyacheslav Kirilenko, Gayane Bagdasaryan. All rights reserved. - * - * © 2018 MyFonts Inc -*/ - - -/* @import must be at top of file, otherwise CSS will not work */ -@import url("//hello.myfonts.net/count/3822a0"); - - -@font-face { - font-family: 'Formular'; - font-weight: 300; - src: url('../fonts/Formular-Light.woff2'); - src: url('../fonts/Formular-Light.woff2') format('woff2'), url('../fonts/Formular-Light.woff') format('woff'); - font-display: swap; -} - - -@font-face { - font-family: 'Formular'; - font-weight: 400; - src: url('../fonts/Formular-Regular.woff2'); - src: url('../fonts/Formular-Regular.woff2') format('woff2'), url('../fonts/Formular-Regular.woff') format('woff'); - font-display: swap; -} diff --git a/packages/website/public/css/github-gist.css b/packages/website/public/css/github-gist.css deleted file mode 100644 index d5c8751c5..000000000 --- a/packages/website/public/css/github-gist.css +++ /dev/null @@ -1,71 +0,0 @@ -/** - * GitHub Gist Theme - * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro - */ - -.hljs { - display: block; - background: white; - padding: 0.5em; - color: #333333; - overflow-x: auto; -} - -.hljs-comment, -.hljs-meta { - color: #969896; -} - -.hljs-string, -.hljs-variable, -.hljs-template-variable, -.hljs-strong, -.hljs-emphasis, -.hljs-quote { - color: #df5000; -} - -.hljs-keyword, -.hljs-selector-tag, -.hljs-type { - color: #a71d5d; -} - -.hljs-literal, -.hljs-symbol, -.hljs-bullet, -.hljs-attribute { - color: #0086b3; -} - -.hljs-section, -.hljs-name { - color: #63a35c; -} - -.hljs-tag { - color: #333333; -} - -.hljs-title, -.hljs-attr, -.hljs-selector-id, -.hljs-selector-class, -.hljs-selector-attr, -.hljs-selector-pseudo { - color: #795da3; -} - -.hljs-addition { - color: #55a532; - background-color: #eaffea; -} - -.hljs-deletion { - color: #bd2c00; - background-color: #ffecec; -} - -.hljs-link { - text-decoration: underline; -} diff --git a/packages/website/public/css/material-design-iconic-font.min.css b/packages/website/public/css/material-design-iconic-font.min.css deleted file mode 100755 index e1a58fe2f..000000000 --- a/packages/website/public/css/material-design-iconic-font.min.css +++ /dev/null @@ -1 +0,0 @@ -@font-face{font-family:Material-Design-Iconic-Font;src:url(../fonts/Material-Design-Iconic-Font.woff2?v=2.2.0) format('woff2'),url(../fonts/Material-Design-Iconic-Font.woff?v=2.2.0) format('woff'),url(../fonts/Material-Design-Iconic-Font.ttf?v=2.2.0) format('truetype')}.zmdi{display:inline-block;font:normal normal normal 14px/1 'Material-Design-Iconic-Font';font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.zmdi-hc-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.zmdi-hc-2x{font-size:2em}.zmdi-hc-3x{font-size:3em}.zmdi-hc-4x{font-size:4em}.zmdi-hc-5x{font-size:5em}.zmdi-hc-fw{width:1.28571429em;text-align:center}.zmdi-hc-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.zmdi-hc-ul>li{position:relative}.zmdi-hc-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.zmdi-hc-li.zmdi-hc-lg{left:-1.85714286em}.zmdi-hc-border{padding:.1em .25em;border:solid .1em #9e9e9e;border-radius:2px}.zmdi-hc-border-circle{padding:.1em .25em;border:solid .1em #9e9e9e;border-radius:50%}.zmdi.pull-left{float:left;margin-right:.15em}.zmdi.pull-right{float:right;margin-left:.15em}.zmdi-hc-spin{-webkit-animation:zmdi-spin 1.5s infinite linear;animation:zmdi-spin 1.5s infinite linear}.zmdi-hc-spin-reverse{-webkit-animation:zmdi-spin-reverse 1.5s infinite linear;animation:zmdi-spin-reverse 1.5s infinite linear}@-webkit-keyframes zmdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes zmdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes zmdi-spin-reverse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}@keyframes zmdi-spin-reverse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(-359deg);transform:rotate(-359deg)}}.zmdi-hc-rotate-90{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.zmdi-hc-rotate-180{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.zmdi-hc-rotate-270{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.zmdi-hc-flip-horizontal{-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.zmdi-hc-flip-vertical{-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.zmdi-hc-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.zmdi-hc-stack-1x,.zmdi-hc-stack-2x{position:absolute;left:0;width:100%;text-align:center}.zmdi-hc-stack-1x{line-height:inherit}.zmdi-hc-stack-2x{font-size:2em}.zmdi-hc-inverse{color:#fff}.zmdi-3d-rotation:before{content:'\f101'}.zmdi-airplane-off:before{content:'\f102'}.zmdi-airplane:before{content:'\f103'}.zmdi-album:before{content:'\f104'}.zmdi-archive:before{content:'\f105'}.zmdi-assignment-account:before{content:'\f106'}.zmdi-assignment-alert:before{content:'\f107'}.zmdi-assignment-check:before{content:'\f108'}.zmdi-assignment-o:before{content:'\f109'}.zmdi-assignment-return:before{content:'\f10a'}.zmdi-assignment-returned:before{content:'\f10b'}.zmdi-assignment:before{content:'\f10c'}.zmdi-attachment-alt:before{content:'\f10d'}.zmdi-attachment:before{content:'\f10e'}.zmdi-audio:before{content:'\f10f'}.zmdi-badge-check:before{content:'\f110'}.zmdi-balance-wallet:before{content:'\f111'}.zmdi-balance:before{content:'\f112'}.zmdi-battery-alert:before{content:'\f113'}.zmdi-battery-flash:before{content:'\f114'}.zmdi-battery-unknown:before{content:'\f115'}.zmdi-battery:before{content:'\f116'}.zmdi-bike:before{content:'\f117'}.zmdi-block-alt:before{content:'\f118'}.zmdi-block:before{content:'\f119'}.zmdi-boat:before{content:'\f11a'}.zmdi-book-image:before{content:'\f11b'}.zmdi-book:before{content:'\f11c'}.zmdi-bookmark-outline:before{content:'\f11d'}.zmdi-bookmark:before{content:'\f11e'}.zmdi-brush:before{content:'\f11f'}.zmdi-bug:before{content:'\f120'}.zmdi-bus:before{content:'\f121'}.zmdi-cake:before{content:'\f122'}.zmdi-car-taxi:before{content:'\f123'}.zmdi-car-wash:before{content:'\f124'}.zmdi-car:before{content:'\f125'}.zmdi-card-giftcard:before{content:'\f126'}.zmdi-card-membership:before{content:'\f127'}.zmdi-card-travel:before{content:'\f128'}.zmdi-card:before{content:'\f129'}.zmdi-case-check:before{content:'\f12a'}.zmdi-case-download:before{content:'\f12b'}.zmdi-case-play:before{content:'\f12c'}.zmdi-case:before{content:'\f12d'}.zmdi-cast-connected:before{content:'\f12e'}.zmdi-cast:before{content:'\f12f'}.zmdi-chart-donut:before{content:'\f130'}.zmdi-chart:before{content:'\f131'}.zmdi-city-alt:before{content:'\f132'}.zmdi-city:before{content:'\f133'}.zmdi-close-circle-o:before{content:'\f134'}.zmdi-close-circle:before{content:'\f135'}.zmdi-close:before{content:'\f136'}.zmdi-cocktail:before{content:'\f137'}.zmdi-code-setting:before{content:'\f138'}.zmdi-code-smartphone:before{content:'\f139'}.zmdi-code:before{content:'\f13a'}.zmdi-coffee:before{content:'\f13b'}.zmdi-collection-bookmark:before{content:'\f13c'}.zmdi-collection-case-play:before{content:'\f13d'}.zmdi-collection-folder-image:before{content:'\f13e'}.zmdi-collection-image-o:before{content:'\f13f'}.zmdi-collection-image:before{content:'\f140'}.zmdi-collection-item-1:before{content:'\f141'}.zmdi-collection-item-2:before{content:'\f142'}.zmdi-collection-item-3:before{content:'\f143'}.zmdi-collection-item-4:before{content:'\f144'}.zmdi-collection-item-5:before{content:'\f145'}.zmdi-collection-item-6:before{content:'\f146'}.zmdi-collection-item-7:before{content:'\f147'}.zmdi-collection-item-8:before{content:'\f148'}.zmdi-collection-item-9-plus:before{content:'\f149'}.zmdi-collection-item-9:before{content:'\f14a'}.zmdi-collection-item:before{content:'\f14b'}.zmdi-collection-music:before{content:'\f14c'}.zmdi-collection-pdf:before{content:'\f14d'}.zmdi-collection-plus:before{content:'\f14e'}.zmdi-collection-speaker:before{content:'\f14f'}.zmdi-collection-text:before{content:'\f150'}.zmdi-collection-video:before{content:'\f151'}.zmdi-compass:before{content:'\f152'}.zmdi-cutlery:before{content:'\f153'}.zmdi-delete:before{content:'\f154'}.zmdi-dialpad:before{content:'\f155'}.zmdi-dns:before{content:'\f156'}.zmdi-drink:before{content:'\f157'}.zmdi-edit:before{content:'\f158'}.zmdi-email-open:before{content:'\f159'}.zmdi-email:before{content:'\f15a'}.zmdi-eye-off:before{content:'\f15b'}.zmdi-eye:before{content:'\f15c'}.zmdi-eyedropper:before{content:'\f15d'}.zmdi-favorite-outline:before{content:'\f15e'}.zmdi-favorite:before{content:'\f15f'}.zmdi-filter-list:before{content:'\f160'}.zmdi-fire:before{content:'\f161'}.zmdi-flag:before{content:'\f162'}.zmdi-flare:before{content:'\f163'}.zmdi-flash-auto:before{content:'\f164'}.zmdi-flash-off:before{content:'\f165'}.zmdi-flash:before{content:'\f166'}.zmdi-flip:before{content:'\f167'}.zmdi-flower-alt:before{content:'\f168'}.zmdi-flower:before{content:'\f169'}.zmdi-font:before{content:'\f16a'}.zmdi-fullscreen-alt:before{content:'\f16b'}.zmdi-fullscreen-exit:before{content:'\f16c'}.zmdi-fullscreen:before{content:'\f16d'}.zmdi-functions:before{content:'\f16e'}.zmdi-gas-station:before{content:'\f16f'}.zmdi-gesture:before{content:'\f170'}.zmdi-globe-alt:before{content:'\f171'}.zmdi-globe-lock:before{content:'\f172'}.zmdi-globe:before{content:'\f173'}.zmdi-graduation-cap:before{content:'\f174'}.zmdi-home:before{content:'\f175'}.zmdi-hospital-alt:before{content:'\f176'}.zmdi-hospital:before{content:'\f177'}.zmdi-hotel:before{content:'\f178'}.zmdi-hourglass-alt:before{content:'\f179'}.zmdi-hourglass-outline:before{content:'\f17a'}.zmdi-hourglass:before{content:'\f17b'}.zmdi-http:before{content:'\f17c'}.zmdi-image-alt:before{content:'\f17d'}.zmdi-image-o:before{content:'\f17e'}.zmdi-image:before{content:'\f17f'}.zmdi-inbox:before{content:'\f180'}.zmdi-invert-colors-off:before{content:'\f181'}.zmdi-invert-colors:before{content:'\f182'}.zmdi-key:before{content:'\f183'}.zmdi-label-alt-outline:before{content:'\f184'}.zmdi-label-alt:before{content:'\f185'}.zmdi-label-heart:before{content:'\f186'}.zmdi-label:before{content:'\f187'}.zmdi-labels:before{content:'\f188'}.zmdi-lamp:before{content:'\f189'}.zmdi-landscape:before{content:'\f18a'}.zmdi-layers-off:before{content:'\f18b'}.zmdi-layers:before{content:'\f18c'}.zmdi-library:before{content:'\f18d'}.zmdi-link:before{content:'\f18e'}.zmdi-lock-open:before{content:'\f18f'}.zmdi-lock-outline:before{content:'\f190'}.zmdi-lock:before{content:'\f191'}.zmdi-mail-reply-all:before{content:'\f192'}.zmdi-mail-reply:before{content:'\f193'}.zmdi-mail-send:before{content:'\f194'}.zmdi-mall:before{content:'\f195'}.zmdi-map:before{content:'\f196'}.zmdi-menu:before{content:'\f197'}.zmdi-money-box:before{content:'\f198'}.zmdi-money-off:before{content:'\f199'}.zmdi-money:before{content:'\f19a'}.zmdi-more-vert:before{content:'\f19b'}.zmdi-more:before{content:'\f19c'}.zmdi-movie-alt:before{content:'\f19d'}.zmdi-movie:before{content:'\f19e'}.zmdi-nature-people:before{content:'\f19f'}.zmdi-nature:before{content:'\f1a0'}.zmdi-navigation:before{content:'\f1a1'}.zmdi-open-in-browser:before{content:'\f1a2'}.zmdi-open-in-new:before{content:'\f1a3'}.zmdi-palette:before{content:'\f1a4'}.zmdi-parking:before{content:'\f1a5'}.zmdi-pin-account:before{content:'\f1a6'}.zmdi-pin-assistant:before{content:'\f1a7'}.zmdi-pin-drop:before{content:'\f1a8'}.zmdi-pin-help:before{content:'\f1a9'}.zmdi-pin-off:before{content:'\f1aa'}.zmdi-pin:before{content:'\f1ab'}.zmdi-pizza:before{content:'\f1ac'}.zmdi-plaster:before{content:'\f1ad'}.zmdi-power-setting:before{content:'\f1ae'}.zmdi-power:before{content:'\f1af'}.zmdi-print:before{content:'\f1b0'}.zmdi-puzzle-piece:before{content:'\f1b1'}.zmdi-quote:before{content:'\f1b2'}.zmdi-railway:before{content:'\f1b3'}.zmdi-receipt:before{content:'\f1b4'}.zmdi-refresh-alt:before{content:'\f1b5'}.zmdi-refresh-sync-alert:before{content:'\f1b6'}.zmdi-refresh-sync-off:before{content:'\f1b7'}.zmdi-refresh-sync:before{content:'\f1b8'}.zmdi-refresh:before{content:'\f1b9'}.zmdi-roller:before{content:'\f1ba'}.zmdi-ruler:before{content:'\f1bb'}.zmdi-scissors:before{content:'\f1bc'}.zmdi-screen-rotation-lock:before{content:'\f1bd'}.zmdi-screen-rotation:before{content:'\f1be'}.zmdi-search-for:before{content:'\f1bf'}.zmdi-search-in-file:before{content:'\f1c0'}.zmdi-search-in-page:before{content:'\f1c1'}.zmdi-search-replace:before{content:'\f1c2'}.zmdi-search:before{content:'\f1c3'}.zmdi-seat:before{content:'\f1c4'}.zmdi-settings-square:before{content:'\f1c5'}.zmdi-settings:before{content:'\f1c6'}.zmdi-shield-check:before{content:'\f1c7'}.zmdi-shield-security:before{content:'\f1c8'}.zmdi-shopping-basket:before{content:'\f1c9'}.zmdi-shopping-cart-plus:before{content:'\f1ca'}.zmdi-shopping-cart:before{content:'\f1cb'}.zmdi-sign-in:before{content:'\f1cc'}.zmdi-sort-amount-asc:before{content:'\f1cd'}.zmdi-sort-amount-desc:before{content:'\f1ce'}.zmdi-sort-asc:before{content:'\f1cf'}.zmdi-sort-desc:before{content:'\f1d0'}.zmdi-spellcheck:before{content:'\f1d1'}.zmdi-storage:before{content:'\f1d2'}.zmdi-store-24:before{content:'\f1d3'}.zmdi-store:before{content:'\f1d4'}.zmdi-subway:before{content:'\f1d5'}.zmdi-sun:before{content:'\f1d6'}.zmdi-tab-unselected:before{content:'\f1d7'}.zmdi-tab:before{content:'\f1d8'}.zmdi-tag-close:before{content:'\f1d9'}.zmdi-tag-more:before{content:'\f1da'}.zmdi-tag:before{content:'\f1db'}.zmdi-thumb-down:before{content:'\f1dc'}.zmdi-thumb-up-down:before{content:'\f1dd'}.zmdi-thumb-up:before{content:'\f1de'}.zmdi-ticket-star:before{content:'\f1df'}.zmdi-toll:before{content:'\f1e0'}.zmdi-toys:before{content:'\f1e1'}.zmdi-traffic:before{content:'\f1e2'}.zmdi-translate:before{content:'\f1e3'}.zmdi-triangle-down:before{content:'\f1e4'}.zmdi-triangle-up:before{content:'\f1e5'}.zmdi-truck:before{content:'\f1e6'}.zmdi-turning-sign:before{content:'\f1e7'}.zmdi-wallpaper:before{content:'\f1e8'}.zmdi-washing-machine:before{content:'\f1e9'}.zmdi-window-maximize:before{content:'\f1ea'}.zmdi-window-minimize:before{content:'\f1eb'}.zmdi-window-restore:before{content:'\f1ec'}.zmdi-wrench:before{content:'\f1ed'}.zmdi-zoom-in:before{content:'\f1ee'}.zmdi-zoom-out:before{content:'\f1ef'}.zmdi-alert-circle-o:before{content:'\f1f0'}.zmdi-alert-circle:before{content:'\f1f1'}.zmdi-alert-octagon:before{content:'\f1f2'}.zmdi-alert-polygon:before{content:'\f1f3'}.zmdi-alert-triangle:before{content:'\f1f4'}.zmdi-help-outline:before{content:'\f1f5'}.zmdi-help:before{content:'\f1f6'}.zmdi-info-outline:before{content:'\f1f7'}.zmdi-info:before{content:'\f1f8'}.zmdi-notifications-active:before{content:'\f1f9'}.zmdi-notifications-add:before{content:'\f1fa'}.zmdi-notifications-none:before{content:'\f1fb'}.zmdi-notifications-off:before{content:'\f1fc'}.zmdi-notifications-paused:before{content:'\f1fd'}.zmdi-notifications:before{content:'\f1fe'}.zmdi-account-add:before{content:'\f1ff'}.zmdi-account-box-mail:before{content:'\f200'}.zmdi-account-box-o:before{content:'\f201'}.zmdi-account-box-phone:before{content:'\f202'}.zmdi-account-box:before{content:'\f203'}.zmdi-account-calendar:before{content:'\f204'}.zmdi-account-circle:before{content:'\f205'}.zmdi-account-o:before{content:'\f206'}.zmdi-account:before{content:'\f207'}.zmdi-accounts-add:before{content:'\f208'}.zmdi-accounts-alt:before{content:'\f209'}.zmdi-accounts-list-alt:before{content:'\f20a'}.zmdi-accounts-list:before{content:'\f20b'}.zmdi-accounts-outline:before{content:'\f20c'}.zmdi-accounts:before{content:'\f20d'}.zmdi-face:before{content:'\f20e'}.zmdi-female:before{content:'\f20f'}.zmdi-male-alt:before{content:'\f210'}.zmdi-male-female:before{content:'\f211'}.zmdi-male:before{content:'\f212'}.zmdi-mood-bad:before{content:'\f213'}.zmdi-mood:before{content:'\f214'}.zmdi-run:before{content:'\f215'}.zmdi-walk:before{content:'\f216'}.zmdi-cloud-box:before{content:'\f217'}.zmdi-cloud-circle:before{content:'\f218'}.zmdi-cloud-done:before{content:'\f219'}.zmdi-cloud-download:before{content:'\f21a'}.zmdi-cloud-off:before{content:'\f21b'}.zmdi-cloud-outline-alt:before{content:'\f21c'}.zmdi-cloud-outline:before{content:'\f21d'}.zmdi-cloud-upload:before{content:'\f21e'}.zmdi-cloud:before{content:'\f21f'}.zmdi-download:before{content:'\f220'}.zmdi-file-plus:before{content:'\f221'}.zmdi-file-text:before{content:'\f222'}.zmdi-file:before{content:'\f223'}.zmdi-folder-outline:before{content:'\f224'}.zmdi-folder-person:before{content:'\f225'}.zmdi-folder-star-alt:before{content:'\f226'}.zmdi-folder-star:before{content:'\f227'}.zmdi-folder:before{content:'\f228'}.zmdi-gif:before{content:'\f229'}.zmdi-upload:before{content:'\f22a'}.zmdi-border-all:before{content:'\f22b'}.zmdi-border-bottom:before{content:'\f22c'}.zmdi-border-clear:before{content:'\f22d'}.zmdi-border-color:before{content:'\f22e'}.zmdi-border-horizontal:before{content:'\f22f'}.zmdi-border-inner:before{content:'\f230'}.zmdi-border-left:before{content:'\f231'}.zmdi-border-outer:before{content:'\f232'}.zmdi-border-right:before{content:'\f233'}.zmdi-border-style:before{content:'\f234'}.zmdi-border-top:before{content:'\f235'}.zmdi-border-vertical:before{content:'\f236'}.zmdi-copy:before{content:'\f237'}.zmdi-crop:before{content:'\f238'}.zmdi-format-align-center:before{content:'\f239'}.zmdi-format-align-justify:before{content:'\f23a'}.zmdi-format-align-left:before{content:'\f23b'}.zmdi-format-align-right:before{content:'\f23c'}.zmdi-format-bold:before{content:'\f23d'}.zmdi-format-clear-all:before{content:'\f23e'}.zmdi-format-clear:before{content:'\f23f'}.zmdi-format-color-fill:before{content:'\f240'}.zmdi-format-color-reset:before{content:'\f241'}.zmdi-format-color-text:before{content:'\f242'}.zmdi-format-indent-decrease:before{content:'\f243'}.zmdi-format-indent-increase:before{content:'\f244'}.zmdi-format-italic:before{content:'\f245'}.zmdi-format-line-spacing:before{content:'\f246'}.zmdi-format-list-bulleted:before{content:'\f247'}.zmdi-format-list-numbered:before{content:'\f248'}.zmdi-format-ltr:before{content:'\f249'}.zmdi-format-rtl:before{content:'\f24a'}.zmdi-format-size:before{content:'\f24b'}.zmdi-format-strikethrough-s:before{content:'\f24c'}.zmdi-format-strikethrough:before{content:'\f24d'}.zmdi-format-subject:before{content:'\f24e'}.zmdi-format-underlined:before{content:'\f24f'}.zmdi-format-valign-bottom:before{content:'\f250'}.zmdi-format-valign-center:before{content:'\f251'}.zmdi-format-valign-top:before{content:'\f252'}.zmdi-redo:before{content:'\f253'}.zmdi-select-all:before{content:'\f254'}.zmdi-space-bar:before{content:'\f255'}.zmdi-text-format:before{content:'\f256'}.zmdi-transform:before{content:'\f257'}.zmdi-undo:before{content:'\f258'}.zmdi-wrap-text:before{content:'\f259'}.zmdi-comment-alert:before{content:'\f25a'}.zmdi-comment-alt-text:before{content:'\f25b'}.zmdi-comment-alt:before{content:'\f25c'}.zmdi-comment-edit:before{content:'\f25d'}.zmdi-comment-image:before{content:'\f25e'}.zmdi-comment-list:before{content:'\f25f'}.zmdi-comment-more:before{content:'\f260'}.zmdi-comment-outline:before{content:'\f261'}.zmdi-comment-text-alt:before{content:'\f262'}.zmdi-comment-text:before{content:'\f263'}.zmdi-comment-video:before{content:'\f264'}.zmdi-comment:before{content:'\f265'}.zmdi-comments:before{content:'\f266'}.zmdi-check-all:before{content:'\f267'}.zmdi-check-circle-u:before{content:'\f268'}.zmdi-check-circle:before{content:'\f269'}.zmdi-check-square:before{content:'\f26a'}.zmdi-check:before{content:'\f26b'}.zmdi-circle-o:before{content:'\f26c'}.zmdi-circle:before{content:'\f26d'}.zmdi-dot-circle-alt:before{content:'\f26e'}.zmdi-dot-circle:before{content:'\f26f'}.zmdi-minus-circle-outline:before{content:'\f270'}.zmdi-minus-circle:before{content:'\f271'}.zmdi-minus-square:before{content:'\f272'}.zmdi-minus:before{content:'\f273'}.zmdi-plus-circle-o-duplicate:before{content:'\f274'}.zmdi-plus-circle-o:before{content:'\f275'}.zmdi-plus-circle:before{content:'\f276'}.zmdi-plus-square:before{content:'\f277'}.zmdi-plus:before{content:'\f278'}.zmdi-square-o:before{content:'\f279'}.zmdi-star-circle:before{content:'\f27a'}.zmdi-star-half:before{content:'\f27b'}.zmdi-star-outline:before{content:'\f27c'}.zmdi-star:before{content:'\f27d'}.zmdi-bluetooth-connected:before{content:'\f27e'}.zmdi-bluetooth-off:before{content:'\f27f'}.zmdi-bluetooth-search:before{content:'\f280'}.zmdi-bluetooth-setting:before{content:'\f281'}.zmdi-bluetooth:before{content:'\f282'}.zmdi-camera-add:before{content:'\f283'}.zmdi-camera-alt:before{content:'\f284'}.zmdi-camera-bw:before{content:'\f285'}.zmdi-camera-front:before{content:'\f286'}.zmdi-camera-mic:before{content:'\f287'}.zmdi-camera-party-mode:before{content:'\f288'}.zmdi-camera-rear:before{content:'\f289'}.zmdi-camera-roll:before{content:'\f28a'}.zmdi-camera-switch:before{content:'\f28b'}.zmdi-camera:before{content:'\f28c'}.zmdi-card-alert:before{content:'\f28d'}.zmdi-card-off:before{content:'\f28e'}.zmdi-card-sd:before{content:'\f28f'}.zmdi-card-sim:before{content:'\f290'}.zmdi-desktop-mac:before{content:'\f291'}.zmdi-desktop-windows:before{content:'\f292'}.zmdi-device-hub:before{content:'\f293'}.zmdi-devices-off:before{content:'\f294'}.zmdi-devices:before{content:'\f295'}.zmdi-dock:before{content:'\f296'}.zmdi-floppy:before{content:'\f297'}.zmdi-gamepad:before{content:'\f298'}.zmdi-gps-dot:before{content:'\f299'}.zmdi-gps-off:before{content:'\f29a'}.zmdi-gps:before{content:'\f29b'}.zmdi-headset-mic:before{content:'\f29c'}.zmdi-headset:before{content:'\f29d'}.zmdi-input-antenna:before{content:'\f29e'}.zmdi-input-composite:before{content:'\f29f'}.zmdi-input-hdmi:before{content:'\f2a0'}.zmdi-input-power:before{content:'\f2a1'}.zmdi-input-svideo:before{content:'\f2a2'}.zmdi-keyboard-hide:before{content:'\f2a3'}.zmdi-keyboard:before{content:'\f2a4'}.zmdi-laptop-chromebook:before{content:'\f2a5'}.zmdi-laptop-mac:before{content:'\f2a6'}.zmdi-laptop:before{content:'\f2a7'}.zmdi-mic-off:before{content:'\f2a8'}.zmdi-mic-outline:before{content:'\f2a9'}.zmdi-mic-setting:before{content:'\f2aa'}.zmdi-mic:before{content:'\f2ab'}.zmdi-mouse:before{content:'\f2ac'}.zmdi-network-alert:before{content:'\f2ad'}.zmdi-network-locked:before{content:'\f2ae'}.zmdi-network-off:before{content:'\f2af'}.zmdi-network-outline:before{content:'\f2b0'}.zmdi-network-setting:before{content:'\f2b1'}.zmdi-network:before{content:'\f2b2'}.zmdi-phone-bluetooth:before{content:'\f2b3'}.zmdi-phone-end:before{content:'\f2b4'}.zmdi-phone-forwarded:before{content:'\f2b5'}.zmdi-phone-in-talk:before{content:'\f2b6'}.zmdi-phone-locked:before{content:'\f2b7'}.zmdi-phone-missed:before{content:'\f2b8'}.zmdi-phone-msg:before{content:'\f2b9'}.zmdi-phone-paused:before{content:'\f2ba'}.zmdi-phone-ring:before{content:'\f2bb'}.zmdi-phone-setting:before{content:'\f2bc'}.zmdi-phone-sip:before{content:'\f2bd'}.zmdi-phone:before{content:'\f2be'}.zmdi-portable-wifi-changes:before{content:'\f2bf'}.zmdi-portable-wifi-off:before{content:'\f2c0'}.zmdi-portable-wifi:before{content:'\f2c1'}.zmdi-radio:before{content:'\f2c2'}.zmdi-reader:before{content:'\f2c3'}.zmdi-remote-control-alt:before{content:'\f2c4'}.zmdi-remote-control:before{content:'\f2c5'}.zmdi-router:before{content:'\f2c6'}.zmdi-scanner:before{content:'\f2c7'}.zmdi-smartphone-android:before{content:'\f2c8'}.zmdi-smartphone-download:before{content:'\f2c9'}.zmdi-smartphone-erase:before{content:'\f2ca'}.zmdi-smartphone-info:before{content:'\f2cb'}.zmdi-smartphone-iphone:before{content:'\f2cc'}.zmdi-smartphone-landscape-lock:before{content:'\f2cd'}.zmdi-smartphone-landscape:before{content:'\f2ce'}.zmdi-smartphone-lock:before{content:'\f2cf'}.zmdi-smartphone-portrait-lock:before{content:'\f2d0'}.zmdi-smartphone-ring:before{content:'\f2d1'}.zmdi-smartphone-setting:before{content:'\f2d2'}.zmdi-smartphone-setup:before{content:'\f2d3'}.zmdi-smartphone:before{content:'\f2d4'}.zmdi-speaker:before{content:'\f2d5'}.zmdi-tablet-android:before{content:'\f2d6'}.zmdi-tablet-mac:before{content:'\f2d7'}.zmdi-tablet:before{content:'\f2d8'}.zmdi-tv-alt-play:before{content:'\f2d9'}.zmdi-tv-list:before{content:'\f2da'}.zmdi-tv-play:before{content:'\f2db'}.zmdi-tv:before{content:'\f2dc'}.zmdi-usb:before{content:'\f2dd'}.zmdi-videocam-off:before{content:'\f2de'}.zmdi-videocam-switch:before{content:'\f2df'}.zmdi-videocam:before{content:'\f2e0'}.zmdi-watch:before{content:'\f2e1'}.zmdi-wifi-alt-2:before{content:'\f2e2'}.zmdi-wifi-alt:before{content:'\f2e3'}.zmdi-wifi-info:before{content:'\f2e4'}.zmdi-wifi-lock:before{content:'\f2e5'}.zmdi-wifi-off:before{content:'\f2e6'}.zmdi-wifi-outline:before{content:'\f2e7'}.zmdi-wifi:before{content:'\f2e8'}.zmdi-arrow-left-bottom:before{content:'\f2e9'}.zmdi-arrow-left:before{content:'\f2ea'}.zmdi-arrow-merge:before{content:'\f2eb'}.zmdi-arrow-missed:before{content:'\f2ec'}.zmdi-arrow-right-top:before{content:'\f2ed'}.zmdi-arrow-right:before{content:'\f2ee'}.zmdi-arrow-split:before{content:'\f2ef'}.zmdi-arrows:before{content:'\f2f0'}.zmdi-caret-down-circle:before{content:'\f2f1'}.zmdi-caret-down:before{content:'\f2f2'}.zmdi-caret-left-circle:before{content:'\f2f3'}.zmdi-caret-left:before{content:'\f2f4'}.zmdi-caret-right-circle:before{content:'\f2f5'}.zmdi-caret-right:before{content:'\f2f6'}.zmdi-caret-up-circle:before{content:'\f2f7'}.zmdi-caret-up:before{content:'\f2f8'}.zmdi-chevron-down:before{content:'\f2f9'}.zmdi-chevron-left:before{content:'\f2fa'}.zmdi-chevron-right:before{content:'\f2fb'}.zmdi-chevron-up:before{content:'\f2fc'}.zmdi-forward:before{content:'\f2fd'}.zmdi-long-arrow-down:before{content:'\f2fe'}.zmdi-long-arrow-left:before{content:'\f2ff'}.zmdi-long-arrow-return:before{content:'\f300'}.zmdi-long-arrow-right:before{content:'\f301'}.zmdi-long-arrow-tab:before{content:'\f302'}.zmdi-long-arrow-up:before{content:'\f303'}.zmdi-rotate-ccw:before{content:'\f304'}.zmdi-rotate-cw:before{content:'\f305'}.zmdi-rotate-left:before{content:'\f306'}.zmdi-rotate-right:before{content:'\f307'}.zmdi-square-down:before{content:'\f308'}.zmdi-square-right:before{content:'\f309'}.zmdi-swap-alt:before{content:'\f30a'}.zmdi-swap-vertical-circle:before{content:'\f30b'}.zmdi-swap-vertical:before{content:'\f30c'}.zmdi-swap:before{content:'\f30d'}.zmdi-trending-down:before{content:'\f30e'}.zmdi-trending-flat:before{content:'\f30f'}.zmdi-trending-up:before{content:'\f310'}.zmdi-unfold-less:before{content:'\f311'}.zmdi-unfold-more:before{content:'\f312'}.zmdi-apps:before{content:'\f313'}.zmdi-grid-off:before{content:'\f314'}.zmdi-grid:before{content:'\f315'}.zmdi-view-agenda:before{content:'\f316'}.zmdi-view-array:before{content:'\f317'}.zmdi-view-carousel:before{content:'\f318'}.zmdi-view-column:before{content:'\f319'}.zmdi-view-comfy:before{content:'\f31a'}.zmdi-view-compact:before{content:'\f31b'}.zmdi-view-dashboard:before{content:'\f31c'}.zmdi-view-day:before{content:'\f31d'}.zmdi-view-headline:before{content:'\f31e'}.zmdi-view-list-alt:before{content:'\f31f'}.zmdi-view-list:before{content:'\f320'}.zmdi-view-module:before{content:'\f321'}.zmdi-view-quilt:before{content:'\f322'}.zmdi-view-stream:before{content:'\f323'}.zmdi-view-subtitles:before{content:'\f324'}.zmdi-view-toc:before{content:'\f325'}.zmdi-view-web:before{content:'\f326'}.zmdi-view-week:before{content:'\f327'}.zmdi-widgets:before{content:'\f328'}.zmdi-alarm-check:before{content:'\f329'}.zmdi-alarm-off:before{content:'\f32a'}.zmdi-alarm-plus:before{content:'\f32b'}.zmdi-alarm-snooze:before{content:'\f32c'}.zmdi-alarm:before{content:'\f32d'}.zmdi-calendar-alt:before{content:'\f32e'}.zmdi-calendar-check:before{content:'\f32f'}.zmdi-calendar-close:before{content:'\f330'}.zmdi-calendar-note:before{content:'\f331'}.zmdi-calendar:before{content:'\f332'}.zmdi-time-countdown:before{content:'\f333'}.zmdi-time-interval:before{content:'\f334'}.zmdi-time-restore-setting:before{content:'\f335'}.zmdi-time-restore:before{content:'\f336'}.zmdi-time:before{content:'\f337'}.zmdi-timer-off:before{content:'\f338'}.zmdi-timer:before{content:'\f339'}.zmdi-android-alt:before{content:'\f33a'}.zmdi-android:before{content:'\f33b'}.zmdi-apple:before{content:'\f33c'}.zmdi-behance:before{content:'\f33d'}.zmdi-codepen:before{content:'\f33e'}.zmdi-dribbble:before{content:'\f33f'}.zmdi-dropbox:before{content:'\f340'}.zmdi-evernote:before{content:'\f341'}.zmdi-facebook-box:before{content:'\f342'}.zmdi-facebook:before{content:'\f343'}.zmdi-github-box:before{content:'\f344'}.zmdi-github:before{content:'\f345'}.zmdi-google-drive:before{content:'\f346'}.zmdi-google-earth:before{content:'\f347'}.zmdi-google-glass:before{content:'\f348'}.zmdi-google-maps:before{content:'\f349'}.zmdi-google-pages:before{content:'\f34a'}.zmdi-google-play:before{content:'\f34b'}.zmdi-google-plus-box:before{content:'\f34c'}.zmdi-google-plus:before{content:'\f34d'}.zmdi-google:before{content:'\f34e'}.zmdi-instagram:before{content:'\f34f'}.zmdi-language-css3:before{content:'\f350'}.zmdi-language-html5:before{content:'\f351'}.zmdi-language-javascript:before{content:'\f352'}.zmdi-language-python-alt:before{content:'\f353'}.zmdi-language-python:before{content:'\f354'}.zmdi-lastfm:before{content:'\f355'}.zmdi-linkedin-box:before{content:'\f356'}.zmdi-paypal:before{content:'\f357'}.zmdi-pinterest-box:before{content:'\f358'}.zmdi-pocket:before{content:'\f359'}.zmdi-polymer:before{content:'\f35a'}.zmdi-share:before{content:'\f35b'}.zmdi-stackoverflow:before{content:'\f35c'}.zmdi-steam-square:before{content:'\f35d'}.zmdi-steam:before{content:'\f35e'}.zmdi-twitter-box:before{content:'\f35f'}.zmdi-twitter:before{content:'\f360'}.zmdi-vk:before{content:'\f361'}.zmdi-wikipedia:before{content:'\f362'}.zmdi-windows:before{content:'\f363'}.zmdi-aspect-ratio-alt:before{content:'\f364'}.zmdi-aspect-ratio:before{content:'\f365'}.zmdi-blur-circular:before{content:'\f366'}.zmdi-blur-linear:before{content:'\f367'}.zmdi-blur-off:before{content:'\f368'}.zmdi-blur:before{content:'\f369'}.zmdi-brightness-2:before{content:'\f36a'}.zmdi-brightness-3:before{content:'\f36b'}.zmdi-brightness-4:before{content:'\f36c'}.zmdi-brightness-5:before{content:'\f36d'}.zmdi-brightness-6:before{content:'\f36e'}.zmdi-brightness-7:before{content:'\f36f'}.zmdi-brightness-auto:before{content:'\f370'}.zmdi-brightness-setting:before{content:'\f371'}.zmdi-broken-image:before{content:'\f372'}.zmdi-center-focus-strong:before{content:'\f373'}.zmdi-center-focus-weak:before{content:'\f374'}.zmdi-compare:before{content:'\f375'}.zmdi-crop-16-9:before{content:'\f376'}.zmdi-crop-3-2:before{content:'\f377'}.zmdi-crop-5-4:before{content:'\f378'}.zmdi-crop-7-5:before{content:'\f379'}.zmdi-crop-din:before{content:'\f37a'}.zmdi-crop-free:before{content:'\f37b'}.zmdi-crop-landscape:before{content:'\f37c'}.zmdi-crop-portrait:before{content:'\f37d'}.zmdi-crop-square:before{content:'\f37e'}.zmdi-exposure-alt:before{content:'\f37f'}.zmdi-exposure:before{content:'\f380'}.zmdi-filter-b-and-w:before{content:'\f381'}.zmdi-filter-center-focus:before{content:'\f382'}.zmdi-filter-frames:before{content:'\f383'}.zmdi-filter-tilt-shift:before{content:'\f384'}.zmdi-gradient:before{content:'\f385'}.zmdi-grain:before{content:'\f386'}.zmdi-graphic-eq:before{content:'\f387'}.zmdi-hdr-off:before{content:'\f388'}.zmdi-hdr-strong:before{content:'\f389'}.zmdi-hdr-weak:before{content:'\f38a'}.zmdi-hdr:before{content:'\f38b'}.zmdi-iridescent:before{content:'\f38c'}.zmdi-leak-off:before{content:'\f38d'}.zmdi-leak:before{content:'\f38e'}.zmdi-looks:before{content:'\f38f'}.zmdi-loupe:before{content:'\f390'}.zmdi-panorama-horizontal:before{content:'\f391'}.zmdi-panorama-vertical:before{content:'\f392'}.zmdi-panorama-wide-angle:before{content:'\f393'}.zmdi-photo-size-select-large:before{content:'\f394'}.zmdi-photo-size-select-small:before{content:'\f395'}.zmdi-picture-in-picture:before{content:'\f396'}.zmdi-slideshow:before{content:'\f397'}.zmdi-texture:before{content:'\f398'}.zmdi-tonality:before{content:'\f399'}.zmdi-vignette:before{content:'\f39a'}.zmdi-wb-auto:before{content:'\f39b'}.zmdi-eject-alt:before{content:'\f39c'}.zmdi-eject:before{content:'\f39d'}.zmdi-equalizer:before{content:'\f39e'}.zmdi-fast-forward:before{content:'\f39f'}.zmdi-fast-rewind:before{content:'\f3a0'}.zmdi-forward-10:before{content:'\f3a1'}.zmdi-forward-30:before{content:'\f3a2'}.zmdi-forward-5:before{content:'\f3a3'}.zmdi-hearing:before{content:'\f3a4'}.zmdi-pause-circle-outline:before{content:'\f3a5'}.zmdi-pause-circle:before{content:'\f3a6'}.zmdi-pause:before{content:'\f3a7'}.zmdi-play-circle-outline:before{content:'\f3a8'}.zmdi-play-circle:before{content:'\f3a9'}.zmdi-play:before{content:'\f3aa'}.zmdi-playlist-audio:before{content:'\f3ab'}.zmdi-playlist-plus:before{content:'\f3ac'}.zmdi-repeat-one:before{content:'\f3ad'}.zmdi-repeat:before{content:'\f3ae'}.zmdi-replay-10:before{content:'\f3af'}.zmdi-replay-30:before{content:'\f3b0'}.zmdi-replay-5:before{content:'\f3b1'}.zmdi-replay:before{content:'\f3b2'}.zmdi-shuffle:before{content:'\f3b3'}.zmdi-skip-next:before{content:'\f3b4'}.zmdi-skip-previous:before{content:'\f3b5'}.zmdi-stop:before{content:'\f3b6'}.zmdi-surround-sound:before{content:'\f3b7'}.zmdi-tune:before{content:'\f3b8'}.zmdi-volume-down:before{content:'\f3b9'}.zmdi-volume-mute:before{content:'\f3ba'}.zmdi-volume-off:before{content:'\f3bb'}.zmdi-volume-up:before{content:'\f3bc'}.zmdi-n-1-square:before{content:'\f3bd'}.zmdi-n-2-square:before{content:'\f3be'}.zmdi-n-3-square:before{content:'\f3bf'}.zmdi-n-4-square:before{content:'\f3c0'}.zmdi-n-5-square:before{content:'\f3c1'}.zmdi-n-6-square:before{content:'\f3c2'}.zmdi-neg-1:before{content:'\f3c3'}.zmdi-neg-2:before{content:'\f3c4'}.zmdi-plus-1:before{content:'\f3c5'}.zmdi-plus-2:before{content:'\f3c6'}.zmdi-sec-10:before{content:'\f3c7'}.zmdi-sec-3:before{content:'\f3c8'}.zmdi-zero:before{content:'\f3c9'}.zmdi-airline-seat-flat-angled:before{content:'\f3ca'}.zmdi-airline-seat-flat:before{content:'\f3cb'}.zmdi-airline-seat-individual-suite:before{content:'\f3cc'}.zmdi-airline-seat-legroom-extra:before{content:'\f3cd'}.zmdi-airline-seat-legroom-normal:before{content:'\f3ce'}.zmdi-airline-seat-legroom-reduced:before{content:'\f3cf'}.zmdi-airline-seat-recline-extra:before{content:'\f3d0'}.zmdi-airline-seat-recline-normal:before{content:'\f3d1'}.zmdi-airplay:before{content:'\f3d2'}.zmdi-closed-caption:before{content:'\f3d3'}.zmdi-confirmation-number:before{content:'\f3d4'}.zmdi-developer-board:before{content:'\f3d5'}.zmdi-disc-full:before{content:'\f3d6'}.zmdi-explicit:before{content:'\f3d7'}.zmdi-flight-land:before{content:'\f3d8'}.zmdi-flight-takeoff:before{content:'\f3d9'}.zmdi-flip-to-back:before{content:'\f3da'}.zmdi-flip-to-front:before{content:'\f3db'}.zmdi-group-work:before{content:'\f3dc'}.zmdi-hd:before{content:'\f3dd'}.zmdi-hq:before{content:'\f3de'}.zmdi-markunread-mailbox:before{content:'\f3df'}.zmdi-memory:before{content:'\f3e0'}.zmdi-nfc:before{content:'\f3e1'}.zmdi-play-for-work:before{content:'\f3e2'}.zmdi-power-input:before{content:'\f3e3'}.zmdi-present-to-all:before{content:'\f3e4'}.zmdi-satellite:before{content:'\f3e5'}.zmdi-tap-and-play:before{content:'\f3e6'}.zmdi-vibration:before{content:'\f3e7'}.zmdi-voicemail:before{content:'\f3e8'}.zmdi-group:before{content:'\f3e9'}.zmdi-rss:before{content:'\f3ea'}.zmdi-shape:before{content:'\f3eb'}.zmdi-spinner:before{content:'\f3ec'}.zmdi-ungroup:before{content:'\f3ed'}.zmdi-500px:before{content:'\f3ee'}.zmdi-8tracks:before{content:'\f3ef'}.zmdi-amazon:before{content:'\f3f0'}.zmdi-blogger:before{content:'\f3f1'}.zmdi-delicious:before{content:'\f3f2'}.zmdi-disqus:before{content:'\f3f3'}.zmdi-flattr:before{content:'\f3f4'}.zmdi-flickr:before{content:'\f3f5'}.zmdi-github-alt:before{content:'\f3f6'}.zmdi-google-old:before{content:'\f3f7'}.zmdi-linkedin:before{content:'\f3f8'}.zmdi-odnoklassniki:before{content:'\f3f9'}.zmdi-outlook:before{content:'\f3fa'}.zmdi-paypal-alt:before{content:'\f3fb'}.zmdi-pinterest:before{content:'\f3fc'}.zmdi-playstation:before{content:'\f3fd'}.zmdi-reddit:before{content:'\f3fe'}.zmdi-skype:before{content:'\f3ff'}.zmdi-slideshare:before{content:'\f400'}.zmdi-soundcloud:before{content:'\f401'}.zmdi-tumblr:before{content:'\f402'}.zmdi-twitch:before{content:'\f403'}.zmdi-vimeo:before{content:'\f404'}.zmdi-whatsapp:before{content:'\f405'}.zmdi-xbox:before{content:'\f406'}.zmdi-yahoo:before{content:'\f407'}.zmdi-youtube-play:before{content:'\f408'}.zmdi-youtube:before{content:'\f409'}.zmdi-3d-rotation:before{content:'\f101'}.zmdi-airplane-off:before{content:'\f102'}.zmdi-airplane:before{content:'\f103'}.zmdi-album:before{content:'\f104'}.zmdi-archive:before{content:'\f105'}.zmdi-assignment-account:before{content:'\f106'}.zmdi-assignment-alert:before{content:'\f107'}.zmdi-assignment-check:before{content:'\f108'}.zmdi-assignment-o:before{content:'\f109'}.zmdi-assignment-return:before{content:'\f10a'}.zmdi-assignment-returned:before{content:'\f10b'}.zmdi-assignment:before{content:'\f10c'}.zmdi-attachment-alt:before{content:'\f10d'}.zmdi-attachment:before{content:'\f10e'}.zmdi-audio:before{content:'\f10f'}.zmdi-badge-check:before{content:'\f110'}.zmdi-balance-wallet:before{content:'\f111'}.zmdi-balance:before{content:'\f112'}.zmdi-battery-alert:before{content:'\f113'}.zmdi-battery-flash:before{content:'\f114'}.zmdi-battery-unknown:before{content:'\f115'}.zmdi-battery:before{content:'\f116'}.zmdi-bike:before{content:'\f117'}.zmdi-block-alt:before{content:'\f118'}.zmdi-block:before{content:'\f119'}.zmdi-boat:before{content:'\f11a'}.zmdi-book-image:before{content:'\f11b'}.zmdi-book:before{content:'\f11c'}.zmdi-bookmark-outline:before{content:'\f11d'}.zmdi-bookmark:before{content:'\f11e'}.zmdi-brush:before{content:'\f11f'}.zmdi-bug:before{content:'\f120'}.zmdi-bus:before{content:'\f121'}.zmdi-cake:before{content:'\f122'}.zmdi-car-taxi:before{content:'\f123'}.zmdi-car-wash:before{content:'\f124'}.zmdi-car:before{content:'\f125'}.zmdi-card-giftcard:before{content:'\f126'}.zmdi-card-membership:before{content:'\f127'}.zmdi-card-travel:before{content:'\f128'}.zmdi-card:before{content:'\f129'}.zmdi-case-check:before{content:'\f12a'}.zmdi-case-download:before{content:'\f12b'}.zmdi-case-play:before{content:'\f12c'}.zmdi-case:before{content:'\f12d'}.zmdi-cast-connected:before{content:'\f12e'}.zmdi-cast:before{content:'\f12f'}.zmdi-chart-donut:before{content:'\f130'}.zmdi-chart:before{content:'\f131'}.zmdi-city-alt:before{content:'\f132'}.zmdi-city:before{content:'\f133'}.zmdi-close-circle-o:before{content:'\f134'}.zmdi-close-circle:before{content:'\f135'}.zmdi-close:before{content:'\f136'}.zmdi-cocktail:before{content:'\f137'}.zmdi-code-setting:before{content:'\f138'}.zmdi-code-smartphone:before{content:'\f139'}.zmdi-code:before{content:'\f13a'}.zmdi-coffee:before{content:'\f13b'}.zmdi-collection-bookmark:before{content:'\f13c'}.zmdi-collection-case-play:before{content:'\f13d'}.zmdi-collection-folder-image:before{content:'\f13e'}.zmdi-collection-image-o:before{content:'\f13f'}.zmdi-collection-image:before{content:'\f140'}.zmdi-collection-item-1:before{content:'\f141'}.zmdi-collection-item-2:before{content:'\f142'}.zmdi-collection-item-3:before{content:'\f143'}.zmdi-collection-item-4:before{content:'\f144'}.zmdi-collection-item-5:before{content:'\f145'}.zmdi-collection-item-6:before{content:'\f146'}.zmdi-collection-item-7:before{content:'\f147'}.zmdi-collection-item-8:before{content:'\f148'}.zmdi-collection-item-9-plus:before{content:'\f149'}.zmdi-collection-item-9:before{content:'\f14a'}.zmdi-collection-item:before{content:'\f14b'}.zmdi-collection-music:before{content:'\f14c'}.zmdi-collection-pdf:before{content:'\f14d'}.zmdi-collection-plus:before{content:'\f14e'}.zmdi-collection-speaker:before{content:'\f14f'}.zmdi-collection-text:before{content:'\f150'}.zmdi-collection-video:before{content:'\f151'}.zmdi-compass:before{content:'\f152'}.zmdi-cutlery:before{content:'\f153'}.zmdi-delete:before{content:'\f154'}.zmdi-dialpad:before{content:'\f155'}.zmdi-dns:before{content:'\f156'}.zmdi-drink:before{content:'\f157'}.zmdi-edit:before{content:'\f158'}.zmdi-email-open:before{content:'\f159'}.zmdi-email:before{content:'\f15a'}.zmdi-eye-off:before{content:'\f15b'}.zmdi-eye:before{content:'\f15c'}.zmdi-eyedropper:before{content:'\f15d'}.zmdi-favorite-outline:before{content:'\f15e'}.zmdi-favorite:before{content:'\f15f'}.zmdi-filter-list:before{content:'\f160'}.zmdi-fire:before{content:'\f161'}.zmdi-flag:before{content:'\f162'}.zmdi-flare:before{content:'\f163'}.zmdi-flash-auto:before{content:'\f164'}.zmdi-flash-off:before{content:'\f165'}.zmdi-flash:before{content:'\f166'}.zmdi-flip:before{content:'\f167'}.zmdi-flower-alt:before{content:'\f168'}.zmdi-flower:before{content:'\f169'}.zmdi-font:before{content:'\f16a'}.zmdi-fullscreen-alt:before{content:'\f16b'}.zmdi-fullscreen-exit:before{content:'\f16c'}.zmdi-fullscreen:before{content:'\f16d'}.zmdi-functions:before{content:'\f16e'}.zmdi-gas-station:before{content:'\f16f'}.zmdi-gesture:before{content:'\f170'}.zmdi-globe-alt:before{content:'\f171'}.zmdi-globe-lock:before{content:'\f172'}.zmdi-globe:before{content:'\f173'}.zmdi-graduation-cap:before{content:'\f174'}.zmdi-home:before{content:'\f175'}.zmdi-hospital-alt:before{content:'\f176'}.zmdi-hospital:before{content:'\f177'}.zmdi-hotel:before{content:'\f178'}.zmdi-hourglass-alt:before{content:'\f179'}.zmdi-hourglass-outline:before{content:'\f17a'}.zmdi-hourglass:before{content:'\f17b'}.zmdi-http:before{content:'\f17c'}.zmdi-image-alt:before{content:'\f17d'}.zmdi-image-o:before{content:'\f17e'}.zmdi-image:before{content:'\f17f'}.zmdi-inbox:before{content:'\f180'}.zmdi-invert-colors-off:before{content:'\f181'}.zmdi-invert-colors:before{content:'\f182'}.zmdi-key:before{content:'\f183'}.zmdi-label-alt-outline:before{content:'\f184'}.zmdi-label-alt:before{content:'\f185'}.zmdi-label-heart:before{content:'\f186'}.zmdi-label:before{content:'\f187'}.zmdi-labels:before{content:'\f188'}.zmdi-lamp:before{content:'\f189'}.zmdi-landscape:before{content:'\f18a'}.zmdi-layers-off:before{content:'\f18b'}.zmdi-layers:before{content:'\f18c'}.zmdi-library:before{content:'\f18d'}.zmdi-link:before{content:'\f18e'}.zmdi-lock-open:before{content:'\f18f'}.zmdi-lock-outline:before{content:'\f190'}.zmdi-lock:before{content:'\f191'}.zmdi-mail-reply-all:before{content:'\f192'}.zmdi-mail-reply:before{content:'\f193'}.zmdi-mail-send:before{content:'\f194'}.zmdi-mall:before{content:'\f195'}.zmdi-map:before{content:'\f196'}.zmdi-menu:before{content:'\f197'}.zmdi-money-box:before{content:'\f198'}.zmdi-money-off:before{content:'\f199'}.zmdi-money:before{content:'\f19a'}.zmdi-more-vert:before{content:'\f19b'}.zmdi-more:before{content:'\f19c'}.zmdi-movie-alt:before{content:'\f19d'}.zmdi-movie:before{content:'\f19e'}.zmdi-nature-people:before{content:'\f19f'}.zmdi-nature:before{content:'\f1a0'}.zmdi-navigation:before{content:'\f1a1'}.zmdi-open-in-browser:before{content:'\f1a2'}.zmdi-open-in-new:before{content:'\f1a3'}.zmdi-palette:before{content:'\f1a4'}.zmdi-parking:before{content:'\f1a5'}.zmdi-pin-account:before{content:'\f1a6'}.zmdi-pin-assistant:before{content:'\f1a7'}.zmdi-pin-drop:before{content:'\f1a8'}.zmdi-pin-help:before{content:'\f1a9'}.zmdi-pin-off:before{content:'\f1aa'}.zmdi-pin:before{content:'\f1ab'}.zmdi-pizza:before{content:'\f1ac'}.zmdi-plaster:before{content:'\f1ad'}.zmdi-power-setting:before{content:'\f1ae'}.zmdi-power:before{content:'\f1af'}.zmdi-print:before{content:'\f1b0'}.zmdi-puzzle-piece:before{content:'\f1b1'}.zmdi-quote:before{content:'\f1b2'}.zmdi-railway:before{content:'\f1b3'}.zmdi-receipt:before{content:'\f1b4'}.zmdi-refresh-alt:before{content:'\f1b5'}.zmdi-refresh-sync-alert:before{content:'\f1b6'}.zmdi-refresh-sync-off:before{content:'\f1b7'}.zmdi-refresh-sync:before{content:'\f1b8'}.zmdi-refresh:before{content:'\f1b9'}.zmdi-roller:before{content:'\f1ba'}.zmdi-ruler:before{content:'\f1bb'}.zmdi-scissors:before{content:'\f1bc'}.zmdi-screen-rotation-lock:before{content:'\f1bd'}.zmdi-screen-rotation:before{content:'\f1be'}.zmdi-search-for:before{content:'\f1bf'}.zmdi-search-in-file:before{content:'\f1c0'}.zmdi-search-in-page:before{content:'\f1c1'}.zmdi-search-replace:before{content:'\f1c2'}.zmdi-search:before{content:'\f1c3'}.zmdi-seat:before{content:'\f1c4'}.zmdi-settings-square:before{content:'\f1c5'}.zmdi-settings:before{content:'\f1c6'}.zmdi-shield-check:before{content:'\f1c7'}.zmdi-shield-security:before{content:'\f1c8'}.zmdi-shopping-basket:before{content:'\f1c9'}.zmdi-shopping-cart-plus:before{content:'\f1ca'}.zmdi-shopping-cart:before{content:'\f1cb'}.zmdi-sign-in:before{content:'\f1cc'}.zmdi-sort-amount-asc:before{content:'\f1cd'}.zmdi-sort-amount-desc:before{content:'\f1ce'}.zmdi-sort-asc:before{content:'\f1cf'}.zmdi-sort-desc:before{content:'\f1d0'}.zmdi-spellcheck:before{content:'\f1d1'}.zmdi-storage:before{content:'\f1d2'}.zmdi-store-24:before{content:'\f1d3'}.zmdi-store:before{content:'\f1d4'}.zmdi-subway:before{content:'\f1d5'}.zmdi-sun:before{content:'\f1d6'}.zmdi-tab-unselected:before{content:'\f1d7'}.zmdi-tab:before{content:'\f1d8'}.zmdi-tag-close:before{content:'\f1d9'}.zmdi-tag-more:before{content:'\f1da'}.zmdi-tag:before{content:'\f1db'}.zmdi-thumb-down:before{content:'\f1dc'}.zmdi-thumb-up-down:before{content:'\f1dd'}.zmdi-thumb-up:before{content:'\f1de'}.zmdi-ticket-star:before{content:'\f1df'}.zmdi-toll:before{content:'\f1e0'}.zmdi-toys:before{content:'\f1e1'}.zmdi-traffic:before{content:'\f1e2'}.zmdi-translate:before{content:'\f1e3'}.zmdi-triangle-down:before{content:'\f1e4'}.zmdi-triangle-up:before{content:'\f1e5'}.zmdi-truck:before{content:'\f1e6'}.zmdi-turning-sign:before{content:'\f1e7'}.zmdi-wallpaper:before{content:'\f1e8'}.zmdi-washing-machine:before{content:'\f1e9'}.zmdi-window-maximize:before{content:'\f1ea'}.zmdi-window-minimize:before{content:'\f1eb'}.zmdi-window-restore:before{content:'\f1ec'}.zmdi-wrench:before{content:'\f1ed'}.zmdi-zoom-in:before{content:'\f1ee'}.zmdi-zoom-out:before{content:'\f1ef'}.zmdi-alert-circle-o:before{content:'\f1f0'}.zmdi-alert-circle:before{content:'\f1f1'}.zmdi-alert-octagon:before{content:'\f1f2'}.zmdi-alert-polygon:before{content:'\f1f3'}.zmdi-alert-triangle:before{content:'\f1f4'}.zmdi-help-outline:before{content:'\f1f5'}.zmdi-help:before{content:'\f1f6'}.zmdi-info-outline:before{content:'\f1f7'}.zmdi-info:before{content:'\f1f8'}.zmdi-notifications-active:before{content:'\f1f9'}.zmdi-notifications-add:before{content:'\f1fa'}.zmdi-notifications-none:before{content:'\f1fb'}.zmdi-notifications-off:before{content:'\f1fc'}.zmdi-notifications-paused:before{content:'\f1fd'}.zmdi-notifications:before{content:'\f1fe'}.zmdi-account-add:before{content:'\f1ff'}.zmdi-account-box-mail:before{content:'\f200'}.zmdi-account-box-o:before{content:'\f201'}.zmdi-account-box-phone:before{content:'\f202'}.zmdi-account-box:before{content:'\f203'}.zmdi-account-calendar:before{content:'\f204'}.zmdi-account-circle:before{content:'\f205'}.zmdi-account-o:before{content:'\f206'}.zmdi-account:before{content:'\f207'}.zmdi-accounts-add:before{content:'\f208'}.zmdi-accounts-alt:before{content:'\f209'}.zmdi-accounts-list-alt:before{content:'\f20a'}.zmdi-accounts-list:before{content:'\f20b'}.zmdi-accounts-outline:before{content:'\f20c'}.zmdi-accounts:before{content:'\f20d'}.zmdi-face:before{content:'\f20e'}.zmdi-female:before{content:'\f20f'}.zmdi-male-alt:before{content:'\f210'}.zmdi-male-female:before{content:'\f211'}.zmdi-male:before{content:'\f212'}.zmdi-mood-bad:before{content:'\f213'}.zmdi-mood:before{content:'\f214'}.zmdi-run:before{content:'\f215'}.zmdi-walk:before{content:'\f216'}.zmdi-cloud-box:before{content:'\f217'}.zmdi-cloud-circle:before{content:'\f218'}.zmdi-cloud-done:before{content:'\f219'}.zmdi-cloud-download:before{content:'\f21a'}.zmdi-cloud-off:before{content:'\f21b'}.zmdi-cloud-outline-alt:before{content:'\f21c'}.zmdi-cloud-outline:before{content:'\f21d'}.zmdi-cloud-upload:before{content:'\f21e'}.zmdi-cloud:before{content:'\f21f'}.zmdi-download:before{content:'\f220'}.zmdi-file-plus:before{content:'\f221'}.zmdi-file-text:before{content:'\f222'}.zmdi-file:before{content:'\f223'}.zmdi-folder-outline:before{content:'\f224'}.zmdi-folder-person:before{content:'\f225'}.zmdi-folder-star-alt:before{content:'\f226'}.zmdi-folder-star:before{content:'\f227'}.zmdi-folder:before{content:'\f228'}.zmdi-gif:before{content:'\f229'}.zmdi-upload:before{content:'\f22a'}.zmdi-border-all:before{content:'\f22b'}.zmdi-border-bottom:before{content:'\f22c'}.zmdi-border-clear:before{content:'\f22d'}.zmdi-border-color:before{content:'\f22e'}.zmdi-border-horizontal:before{content:'\f22f'}.zmdi-border-inner:before{content:'\f230'}.zmdi-border-left:before{content:'\f231'}.zmdi-border-outer:before{content:'\f232'}.zmdi-border-right:before{content:'\f233'}.zmdi-border-style:before{content:'\f234'}.zmdi-border-top:before{content:'\f235'}.zmdi-border-vertical:before{content:'\f236'}.zmdi-copy:before{content:'\f237'}.zmdi-crop:before{content:'\f238'}.zmdi-format-align-center:before{content:'\f239'}.zmdi-format-align-justify:before{content:'\f23a'}.zmdi-format-align-left:before{content:'\f23b'}.zmdi-format-align-right:before{content:'\f23c'}.zmdi-format-bold:before{content:'\f23d'}.zmdi-format-clear-all:before{content:'\f23e'}.zmdi-format-clear:before{content:'\f23f'}.zmdi-format-color-fill:before{content:'\f240'}.zmdi-format-color-reset:before{content:'\f241'}.zmdi-format-color-text:before{content:'\f242'}.zmdi-format-indent-decrease:before{content:'\f243'}.zmdi-format-indent-increase:before{content:'\f244'}.zmdi-format-italic:before{content:'\f245'}.zmdi-format-line-spacing:before{content:'\f246'}.zmdi-format-list-bulleted:before{content:'\f247'}.zmdi-format-list-numbered:before{content:'\f248'}.zmdi-format-ltr:before{content:'\f249'}.zmdi-format-rtl:before{content:'\f24a'}.zmdi-format-size:before{content:'\f24b'}.zmdi-format-strikethrough-s:before{content:'\f24c'}.zmdi-format-strikethrough:before{content:'\f24d'}.zmdi-format-subject:before{content:'\f24e'}.zmdi-format-underlined:before{content:'\f24f'}.zmdi-format-valign-bottom:before{content:'\f250'}.zmdi-format-valign-center:before{content:'\f251'}.zmdi-format-valign-top:before{content:'\f252'}.zmdi-redo:before{content:'\f253'}.zmdi-select-all:before{content:'\f254'}.zmdi-space-bar:before{content:'\f255'}.zmdi-text-format:before{content:'\f256'}.zmdi-transform:before{content:'\f257'}.zmdi-undo:before{content:'\f258'}.zmdi-wrap-text:before{content:'\f259'}.zmdi-comment-alert:before{content:'\f25a'}.zmdi-comment-alt-text:before{content:'\f25b'}.zmdi-comment-alt:before{content:'\f25c'}.zmdi-comment-edit:before{content:'\f25d'}.zmdi-comment-image:before{content:'\f25e'}.zmdi-comment-list:before{content:'\f25f'}.zmdi-comment-more:before{content:'\f260'}.zmdi-comment-outline:before{content:'\f261'}.zmdi-comment-text-alt:before{content:'\f262'}.zmdi-comment-text:before{content:'\f263'}.zmdi-comment-video:before{content:'\f264'}.zmdi-comment:before{content:'\f265'}.zmdi-comments:before{content:'\f266'}.zmdi-check-all:before{content:'\f267'}.zmdi-check-circle-u:before{content:'\f268'}.zmdi-check-circle:before{content:'\f269'}.zmdi-check-square:before{content:'\f26a'}.zmdi-check:before{content:'\f26b'}.zmdi-circle-o:before{content:'\f26c'}.zmdi-circle:before{content:'\f26d'}.zmdi-dot-circle-alt:before{content:'\f26e'}.zmdi-dot-circle:before{content:'\f26f'}.zmdi-minus-circle-outline:before{content:'\f270'}.zmdi-minus-circle:before{content:'\f271'}.zmdi-minus-square:before{content:'\f272'}.zmdi-minus:before{content:'\f273'}.zmdi-plus-circle-o-duplicate:before{content:'\f274'}.zmdi-plus-circle-o:before{content:'\f275'}.zmdi-plus-circle:before{content:'\f276'}.zmdi-plus-square:before{content:'\f277'}.zmdi-plus:before{content:'\f278'}.zmdi-square-o:before{content:'\f279'}.zmdi-star-circle:before{content:'\f27a'}.zmdi-star-half:before{content:'\f27b'}.zmdi-star-outline:before{content:'\f27c'}.zmdi-star:before{content:'\f27d'}.zmdi-bluetooth-connected:before{content:'\f27e'}.zmdi-bluetooth-off:before{content:'\f27f'}.zmdi-bluetooth-search:before{content:'\f280'}.zmdi-bluetooth-setting:before{content:'\f281'}.zmdi-bluetooth:before{content:'\f282'}.zmdi-camera-add:before{content:'\f283'}.zmdi-camera-alt:before{content:'\f284'}.zmdi-camera-bw:before{content:'\f285'}.zmdi-camera-front:before{content:'\f286'}.zmdi-camera-mic:before{content:'\f287'}.zmdi-camera-party-mode:before{content:'\f288'}.zmdi-camera-rear:before{content:'\f289'}.zmdi-camera-roll:before{content:'\f28a'}.zmdi-camera-switch:before{content:'\f28b'}.zmdi-camera:before{content:'\f28c'}.zmdi-card-alert:before{content:'\f28d'}.zmdi-card-off:before{content:'\f28e'}.zmdi-card-sd:before{content:'\f28f'}.zmdi-card-sim:before{content:'\f290'}.zmdi-desktop-mac:before{content:'\f291'}.zmdi-desktop-windows:before{content:'\f292'}.zmdi-device-hub:before{content:'\f293'}.zmdi-devices-off:before{content:'\f294'}.zmdi-devices:before{content:'\f295'}.zmdi-dock:before{content:'\f296'}.zmdi-floppy:before{content:'\f297'}.zmdi-gamepad:before{content:'\f298'}.zmdi-gps-dot:before{content:'\f299'}.zmdi-gps-off:before{content:'\f29a'}.zmdi-gps:before{content:'\f29b'}.zmdi-headset-mic:before{content:'\f29c'}.zmdi-headset:before{content:'\f29d'}.zmdi-input-antenna:before{content:'\f29e'}.zmdi-input-composite:before{content:'\f29f'}.zmdi-input-hdmi:before{content:'\f2a0'}.zmdi-input-power:before{content:'\f2a1'}.zmdi-input-svideo:before{content:'\f2a2'}.zmdi-keyboard-hide:before{content:'\f2a3'}.zmdi-keyboard:before{content:'\f2a4'}.zmdi-laptop-chromebook:before{content:'\f2a5'}.zmdi-laptop-mac:before{content:'\f2a6'}.zmdi-laptop:before{content:'\f2a7'}.zmdi-mic-off:before{content:'\f2a8'}.zmdi-mic-outline:before{content:'\f2a9'}.zmdi-mic-setting:before{content:'\f2aa'}.zmdi-mic:before{content:'\f2ab'}.zmdi-mouse:before{content:'\f2ac'}.zmdi-network-alert:before{content:'\f2ad'}.zmdi-network-locked:before{content:'\f2ae'}.zmdi-network-off:before{content:'\f2af'}.zmdi-network-outline:before{content:'\f2b0'}.zmdi-network-setting:before{content:'\f2b1'}.zmdi-network:before{content:'\f2b2'}.zmdi-phone-bluetooth:before{content:'\f2b3'}.zmdi-phone-end:before{content:'\f2b4'}.zmdi-phone-forwarded:before{content:'\f2b5'}.zmdi-phone-in-talk:before{content:'\f2b6'}.zmdi-phone-locked:before{content:'\f2b7'}.zmdi-phone-missed:before{content:'\f2b8'}.zmdi-phone-msg:before{content:'\f2b9'}.zmdi-phone-paused:before{content:'\f2ba'}.zmdi-phone-ring:before{content:'\f2bb'}.zmdi-phone-setting:before{content:'\f2bc'}.zmdi-phone-sip:before{content:'\f2bd'}.zmdi-phone:before{content:'\f2be'}.zmdi-portable-wifi-changes:before{content:'\f2bf'}.zmdi-portable-wifi-off:before{content:'\f2c0'}.zmdi-portable-wifi:before{content:'\f2c1'}.zmdi-radio:before{content:'\f2c2'}.zmdi-reader:before{content:'\f2c3'}.zmdi-remote-control-alt:before{content:'\f2c4'}.zmdi-remote-control:before{content:'\f2c5'}.zmdi-router:before{content:'\f2c6'}.zmdi-scanner:before{content:'\f2c7'}.zmdi-smartphone-android:before{content:'\f2c8'}.zmdi-smartphone-download:before{content:'\f2c9'}.zmdi-smartphone-erase:before{content:'\f2ca'}.zmdi-smartphone-info:before{content:'\f2cb'}.zmdi-smartphone-iphone:before{content:'\f2cc'}.zmdi-smartphone-landscape-lock:before{content:'\f2cd'}.zmdi-smartphone-landscape:before{content:'\f2ce'}.zmdi-smartphone-lock:before{content:'\f2cf'}.zmdi-smartphone-portrait-lock:before{content:'\f2d0'}.zmdi-smartphone-ring:before{content:'\f2d1'}.zmdi-smartphone-setting:before{content:'\f2d2'}.zmdi-smartphone-setup:before{content:'\f2d3'}.zmdi-smartphone:before{content:'\f2d4'}.zmdi-speaker:before{content:'\f2d5'}.zmdi-tablet-android:before{content:'\f2d6'}.zmdi-tablet-mac:before{content:'\f2d7'}.zmdi-tablet:before{content:'\f2d8'}.zmdi-tv-alt-play:before{content:'\f2d9'}.zmdi-tv-list:before{content:'\f2da'}.zmdi-tv-play:before{content:'\f2db'}.zmdi-tv:before{content:'\f2dc'}.zmdi-usb:before{content:'\f2dd'}.zmdi-videocam-off:before{content:'\f2de'}.zmdi-videocam-switch:before{content:'\f2df'}.zmdi-videocam:before{content:'\f2e0'}.zmdi-watch:before{content:'\f2e1'}.zmdi-wifi-alt-2:before{content:'\f2e2'}.zmdi-wifi-alt:before{content:'\f2e3'}.zmdi-wifi-info:before{content:'\f2e4'}.zmdi-wifi-lock:before{content:'\f2e5'}.zmdi-wifi-off:before{content:'\f2e6'}.zmdi-wifi-outline:before{content:'\f2e7'}.zmdi-wifi:before{content:'\f2e8'}.zmdi-arrow-left-bottom:before{content:'\f2e9'}.zmdi-arrow-left:before{content:'\f2ea'}.zmdi-arrow-merge:before{content:'\f2eb'}.zmdi-arrow-missed:before{content:'\f2ec'}.zmdi-arrow-right-top:before{content:'\f2ed'}.zmdi-arrow-right:before{content:'\f2ee'}.zmdi-arrow-split:before{content:'\f2ef'}.zmdi-arrows:before{content:'\f2f0'}.zmdi-caret-down-circle:before{content:'\f2f1'}.zmdi-caret-down:before{content:'\f2f2'}.zmdi-caret-left-circle:before{content:'\f2f3'}.zmdi-caret-left:before{content:'\f2f4'}.zmdi-caret-right-circle:before{content:'\f2f5'}.zmdi-caret-right:before{content:'\f2f6'}.zmdi-caret-up-circle:before{content:'\f2f7'}.zmdi-caret-up:before{content:'\f2f8'}.zmdi-chevron-down:before{content:'\f2f9'}.zmdi-chevron-left:before{content:'\f2fa'}.zmdi-chevron-right:before{content:'\f2fb'}.zmdi-chevron-up:before{content:'\f2fc'}.zmdi-forward:before{content:'\f2fd'}.zmdi-long-arrow-down:before{content:'\f2fe'}.zmdi-long-arrow-left:before{content:'\f2ff'}.zmdi-long-arrow-return:before{content:'\f300'}.zmdi-long-arrow-right:before{content:'\f301'}.zmdi-long-arrow-tab:before{content:'\f302'}.zmdi-long-arrow-up:before{content:'\f303'}.zmdi-rotate-ccw:before{content:'\f304'}.zmdi-rotate-cw:before{content:'\f305'}.zmdi-rotate-left:before{content:'\f306'}.zmdi-rotate-right:before{content:'\f307'}.zmdi-square-down:before{content:'\f308'}.zmdi-square-right:before{content:'\f309'}.zmdi-swap-alt:before{content:'\f30a'}.zmdi-swap-vertical-circle:before{content:'\f30b'}.zmdi-swap-vertical:before{content:'\f30c'}.zmdi-swap:before{content:'\f30d'}.zmdi-trending-down:before{content:'\f30e'}.zmdi-trending-flat:before{content:'\f30f'}.zmdi-trending-up:before{content:'\f310'}.zmdi-unfold-less:before{content:'\f311'}.zmdi-unfold-more:before{content:'\f312'}.zmdi-apps:before{content:'\f313'}.zmdi-grid-off:before{content:'\f314'}.zmdi-grid:before{content:'\f315'}.zmdi-view-agenda:before{content:'\f316'}.zmdi-view-array:before{content:'\f317'}.zmdi-view-carousel:before{content:'\f318'}.zmdi-view-column:before{content:'\f319'}.zmdi-view-comfy:before{content:'\f31a'}.zmdi-view-compact:before{content:'\f31b'}.zmdi-view-dashboard:before{content:'\f31c'}.zmdi-view-day:before{content:'\f31d'}.zmdi-view-headline:before{content:'\f31e'}.zmdi-view-list-alt:before{content:'\f31f'}.zmdi-view-list:before{content:'\f320'}.zmdi-view-module:before{content:'\f321'}.zmdi-view-quilt:before{content:'\f322'}.zmdi-view-stream:before{content:'\f323'}.zmdi-view-subtitles:before{content:'\f324'}.zmdi-view-toc:before{content:'\f325'}.zmdi-view-web:before{content:'\f326'}.zmdi-view-week:before{content:'\f327'}.zmdi-widgets:before{content:'\f328'}.zmdi-alarm-check:before{content:'\f329'}.zmdi-alarm-off:before{content:'\f32a'}.zmdi-alarm-plus:before{content:'\f32b'}.zmdi-alarm-snooze:before{content:'\f32c'}.zmdi-alarm:before{content:'\f32d'}.zmdi-calendar-alt:before{content:'\f32e'}.zmdi-calendar-check:before{content:'\f32f'}.zmdi-calendar-close:before{content:'\f330'}.zmdi-calendar-note:before{content:'\f331'}.zmdi-calendar:before{content:'\f332'}.zmdi-time-countdown:before{content:'\f333'}.zmdi-time-interval:before{content:'\f334'}.zmdi-time-restore-setting:before{content:'\f335'}.zmdi-time-restore:before{content:'\f336'}.zmdi-time:before{content:'\f337'}.zmdi-timer-off:before{content:'\f338'}.zmdi-timer:before{content:'\f339'}.zmdi-android-alt:before{content:'\f33a'}.zmdi-android:before{content:'\f33b'}.zmdi-apple:before{content:'\f33c'}.zmdi-behance:before{content:'\f33d'}.zmdi-codepen:before{content:'\f33e'}.zmdi-dribbble:before{content:'\f33f'}.zmdi-dropbox:before{content:'\f340'}.zmdi-evernote:before{content:'\f341'}.zmdi-facebook-box:before{content:'\f342'}.zmdi-facebook:before{content:'\f343'}.zmdi-github-box:before{content:'\f344'}.zmdi-github:before{content:'\f345'}.zmdi-google-drive:before{content:'\f346'}.zmdi-google-earth:before{content:'\f347'}.zmdi-google-glass:before{content:'\f348'}.zmdi-google-maps:before{content:'\f349'}.zmdi-google-pages:before{content:'\f34a'}.zmdi-google-play:before{content:'\f34b'}.zmdi-google-plus-box:before{content:'\f34c'}.zmdi-google-plus:before{content:'\f34d'}.zmdi-google:before{content:'\f34e'}.zmdi-instagram:before{content:'\f34f'}.zmdi-language-css3:before{content:'\f350'}.zmdi-language-html5:before{content:'\f351'}.zmdi-language-javascript:before{content:'\f352'}.zmdi-language-python-alt:before{content:'\f353'}.zmdi-language-python:before{content:'\f354'}.zmdi-lastfm:before{content:'\f355'}.zmdi-linkedin-box:before{content:'\f356'}.zmdi-paypal:before{content:'\f357'}.zmdi-pinterest-box:before{content:'\f358'}.zmdi-pocket:before{content:'\f359'}.zmdi-polymer:before{content:'\f35a'}.zmdi-share:before{content:'\f35b'}.zmdi-stackoverflow:before{content:'\f35c'}.zmdi-steam-square:before{content:'\f35d'}.zmdi-steam:before{content:'\f35e'}.zmdi-twitter-box:before{content:'\f35f'}.zmdi-twitter:before{content:'\f360'}.zmdi-vk:before{content:'\f361'}.zmdi-wikipedia:before{content:'\f362'}.zmdi-windows:before{content:'\f363'}.zmdi-aspect-ratio-alt:before{content:'\f364'}.zmdi-aspect-ratio:before{content:'\f365'}.zmdi-blur-circular:before{content:'\f366'}.zmdi-blur-linear:before{content:'\f367'}.zmdi-blur-off:before{content:'\f368'}.zmdi-blur:before{content:'\f369'}.zmdi-brightness-2:before{content:'\f36a'}.zmdi-brightness-3:before{content:'\f36b'}.zmdi-brightness-4:before{content:'\f36c'}.zmdi-brightness-5:before{content:'\f36d'}.zmdi-brightness-6:before{content:'\f36e'}.zmdi-brightness-7:before{content:'\f36f'}.zmdi-brightness-auto:before{content:'\f370'}.zmdi-brightness-setting:before{content:'\f371'}.zmdi-broken-image:before{content:'\f372'}.zmdi-center-focus-strong:before{content:'\f373'}.zmdi-center-focus-weak:before{content:'\f374'}.zmdi-compare:before{content:'\f375'}.zmdi-crop-16-9:before{content:'\f376'}.zmdi-crop-3-2:before{content:'\f377'}.zmdi-crop-5-4:before{content:'\f378'}.zmdi-crop-7-5:before{content:'\f379'}.zmdi-crop-din:before{content:'\f37a'}.zmdi-crop-free:before{content:'\f37b'}.zmdi-crop-landscape:before{content:'\f37c'}.zmdi-crop-portrait:before{content:'\f37d'}.zmdi-crop-square:before{content:'\f37e'}.zmdi-exposure-alt:before{content:'\f37f'}.zmdi-exposure:before{content:'\f380'}.zmdi-filter-b-and-w:before{content:'\f381'}.zmdi-filter-center-focus:before{content:'\f382'}.zmdi-filter-frames:before{content:'\f383'}.zmdi-filter-tilt-shift:before{content:'\f384'}.zmdi-gradient:before{content:'\f385'}.zmdi-grain:before{content:'\f386'}.zmdi-graphic-eq:before{content:'\f387'}.zmdi-hdr-off:before{content:'\f388'}.zmdi-hdr-strong:before{content:'\f389'}.zmdi-hdr-weak:before{content:'\f38a'}.zmdi-hdr:before{content:'\f38b'}.zmdi-iridescent:before{content:'\f38c'}.zmdi-leak-off:before{content:'\f38d'}.zmdi-leak:before{content:'\f38e'}.zmdi-looks:before{content:'\f38f'}.zmdi-loupe:before{content:'\f390'}.zmdi-panorama-horizontal:before{content:'\f391'}.zmdi-panorama-vertical:before{content:'\f392'}.zmdi-panorama-wide-angle:before{content:'\f393'}.zmdi-photo-size-select-large:before{content:'\f394'}.zmdi-photo-size-select-small:before{content:'\f395'}.zmdi-picture-in-picture:before{content:'\f396'}.zmdi-slideshow:before{content:'\f397'}.zmdi-texture:before{content:'\f398'}.zmdi-tonality:before{content:'\f399'}.zmdi-vignette:before{content:'\f39a'}.zmdi-wb-auto:before{content:'\f39b'}.zmdi-eject-alt:before{content:'\f39c'}.zmdi-eject:before{content:'\f39d'}.zmdi-equalizer:before{content:'\f39e'}.zmdi-fast-forward:before{content:'\f39f'}.zmdi-fast-rewind:before{content:'\f3a0'}.zmdi-forward-10:before{content:'\f3a1'}.zmdi-forward-30:before{content:'\f3a2'}.zmdi-forward-5:before{content:'\f3a3'}.zmdi-hearing:before{content:'\f3a4'}.zmdi-pause-circle-outline:before{content:'\f3a5'}.zmdi-pause-circle:before{content:'\f3a6'}.zmdi-pause:before{content:'\f3a7'}.zmdi-play-circle-outline:before{content:'\f3a8'}.zmdi-play-circle:before{content:'\f3a9'}.zmdi-play:before{content:'\f3aa'}.zmdi-playlist-audio:before{content:'\f3ab'}.zmdi-playlist-plus:before{content:'\f3ac'}.zmdi-repeat-one:before{content:'\f3ad'}.zmdi-repeat:before{content:'\f3ae'}.zmdi-replay-10:before{content:'\f3af'}.zmdi-replay-30:before{content:'\f3b0'}.zmdi-replay-5:before{content:'\f3b1'}.zmdi-replay:before{content:'\f3b2'}.zmdi-shuffle:before{content:'\f3b3'}.zmdi-skip-next:before{content:'\f3b4'}.zmdi-skip-previous:before{content:'\f3b5'}.zmdi-stop:before{content:'\f3b6'}.zmdi-surround-sound:before{content:'\f3b7'}.zmdi-tune:before{content:'\f3b8'}.zmdi-volume-down:before{content:'\f3b9'}.zmdi-volume-mute:before{content:'\f3ba'}.zmdi-volume-off:before{content:'\f3bb'}.zmdi-volume-up:before{content:'\f3bc'}.zmdi-n-1-square:before{content:'\f3bd'}.zmdi-n-2-square:before{content:'\f3be'}.zmdi-n-3-square:before{content:'\f3bf'}.zmdi-n-4-square:before{content:'\f3c0'}.zmdi-n-5-square:before{content:'\f3c1'}.zmdi-n-6-square:before{content:'\f3c2'}.zmdi-neg-1:before{content:'\f3c3'}.zmdi-neg-2:before{content:'\f3c4'}.zmdi-plus-1:before{content:'\f3c5'}.zmdi-plus-2:before{content:'\f3c6'}.zmdi-sec-10:before{content:'\f3c7'}.zmdi-sec-3:before{content:'\f3c8'}.zmdi-zero:before{content:'\f3c9'}.zmdi-airline-seat-flat-angled:before{content:'\f3ca'}.zmdi-airline-seat-flat:before{content:'\f3cb'}.zmdi-airline-seat-individual-suite:before{content:'\f3cc'}.zmdi-airline-seat-legroom-extra:before{content:'\f3cd'}.zmdi-airline-seat-legroom-normal:before{content:'\f3ce'}.zmdi-airline-seat-legroom-reduced:before{content:'\f3cf'}.zmdi-airline-seat-recline-extra:before{content:'\f3d0'}.zmdi-airline-seat-recline-normal:before{content:'\f3d1'}.zmdi-airplay:before{content:'\f3d2'}.zmdi-closed-caption:before{content:'\f3d3'}.zmdi-confirmation-number:before{content:'\f3d4'}.zmdi-developer-board:before{content:'\f3d5'}.zmdi-disc-full:before{content:'\f3d6'}.zmdi-explicit:before{content:'\f3d7'}.zmdi-flight-land:before{content:'\f3d8'}.zmdi-flight-takeoff:before{content:'\f3d9'}.zmdi-flip-to-back:before{content:'\f3da'}.zmdi-flip-to-front:before{content:'\f3db'}.zmdi-group-work:before{content:'\f3dc'}.zmdi-hd:before{content:'\f3dd'}.zmdi-hq:before{content:'\f3de'}.zmdi-markunread-mailbox:before{content:'\f3df'}.zmdi-memory:before{content:'\f3e0'}.zmdi-nfc:before{content:'\f3e1'}.zmdi-play-for-work:before{content:'\f3e2'}.zmdi-power-input:before{content:'\f3e3'}.zmdi-present-to-all:before{content:'\f3e4'}.zmdi-satellite:before{content:'\f3e5'}.zmdi-tap-and-play:before{content:'\f3e6'}.zmdi-vibration:before{content:'\f3e7'}.zmdi-voicemail:before{content:'\f3e8'}.zmdi-group:before{content:'\f3e9'}.zmdi-rss:before{content:'\f3ea'}.zmdi-shape:before{content:'\f3eb'}.zmdi-spinner:before{content:'\f3ec'}.zmdi-ungroup:before{content:'\f3ed'}.zmdi-500px:before{content:'\f3ee'}.zmdi-8tracks:before{content:'\f3ef'}.zmdi-amazon:before{content:'\f3f0'}.zmdi-blogger:before{content:'\f3f1'}.zmdi-delicious:before{content:'\f3f2'}.zmdi-disqus:before{content:'\f3f3'}.zmdi-flattr:before{content:'\f3f4'}.zmdi-flickr:before{content:'\f3f5'}.zmdi-github-alt:before{content:'\f3f6'}.zmdi-google-old:before{content:'\f3f7'}.zmdi-linkedin:before{content:'\f3f8'}.zmdi-odnoklassniki:before{content:'\f3f9'}.zmdi-outlook:before{content:'\f3fa'}.zmdi-paypal-alt:before{content:'\f3fb'}.zmdi-pinterest:before{content:'\f3fc'}.zmdi-playstation:before{content:'\f3fd'}.zmdi-reddit:before{content:'\f3fe'}.zmdi-skype:before{content:'\f3ff'}.zmdi-slideshare:before{content:'\f400'}.zmdi-soundcloud:before{content:'\f401'}.zmdi-tumblr:before{content:'\f402'}.zmdi-twitch:before{content:'\f403'}.zmdi-vimeo:before{content:'\f404'}.zmdi-whatsapp:before{content:'\f405'}.zmdi-xbox:before{content:'\f406'}.zmdi-yahoo:before{content:'\f407'}.zmdi-youtube-play:before{content:'\f408'}.zmdi-youtube:before{content:'\f409'}.zmdi-import-export:before{content:'\f30c'}.zmdi-swap-vertical-:before{content:'\f30c'}.zmdi-airplanemode-inactive:before{content:'\f102'}.zmdi-airplanemode-active:before{content:'\f103'}.zmdi-rate-review:before{content:'\f103'}.zmdi-comment-sign:before{content:'\f25a'}.zmdi-network-warning:before{content:'\f2ad'}.zmdi-shopping-cart-add:before{content:'\f1ca'}.zmdi-file-add:before{content:'\f221'}.zmdi-network-wifi-scan:before{content:'\f2e4'}.zmdi-collection-add:before{content:'\f14e'}.zmdi-format-playlist-add:before{content:'\f3ac'}.zmdi-format-queue-music:before{content:'\f3ab'}.zmdi-plus-box:before{content:'\f277'}.zmdi-tag-backspace:before{content:'\f1d9'}.zmdi-alarm-add:before{content:'\f32b'}.zmdi-battery-charging:before{content:'\f114'}.zmdi-daydream-setting:before{content:'\f217'}.zmdi-more-horiz:before{content:'\f19c'}.zmdi-book-photo:before{content:'\f11b'}.zmdi-incandescent:before{content:'\f189'}.zmdi-wb-iridescent:before{content:'\f38c'}.zmdi-calendar-remove:before{content:'\f330'}.zmdi-refresh-sync-disabled:before{content:'\f1b7'}.zmdi-refresh-sync-problem:before{content:'\f1b6'}.zmdi-crop-original:before{content:'\f17e'}.zmdi-power-off:before{content:'\f1af'}.zmdi-power-off-setting:before{content:'\f1ae'}.zmdi-leak-remove:before{content:'\f38d'}.zmdi-star-border:before{content:'\f27c'}.zmdi-brightness-low:before{content:'\f36d'}.zmdi-brightness-medium:before{content:'\f36e'}.zmdi-brightness-high:before{content:'\f36f'}.zmdi-smartphone-portrait:before{content:'\f2d4'}.zmdi-live-tv:before{content:'\f2d9'}.zmdi-format-textdirection-l-to-r:before{content:'\f249'}.zmdi-format-textdirection-r-to-l:before{content:'\f24a'}.zmdi-arrow-back:before{content:'\f2ea'}.zmdi-arrow-forward:before{content:'\f2ee'}.zmdi-arrow-in:before{content:'\f2e9'}.zmdi-arrow-out:before{content:'\f2ed'}.zmdi-rotate-90-degrees-ccw:before{content:'\f304'}.zmdi-adb:before{content:'\f33a'}.zmdi-network-wifi:before{content:'\f2e8'}.zmdi-network-wifi-alt:before{content:'\f2e3'}.zmdi-network-wifi-lock:before{content:'\f2e5'}.zmdi-network-wifi-off:before{content:'\f2e6'}.zmdi-network-wifi-outline:before{content:'\f2e7'}.zmdi-network-wifi-info:before{content:'\f2e4'}.zmdi-layers-clear:before{content:'\f18b'}.zmdi-colorize:before{content:'\f15d'}.zmdi-format-paint:before{content:'\f1ba'}.zmdi-format-quote:before{content:'\f1b2'}.zmdi-camera-monochrome-photos:before{content:'\f285'}.zmdi-sort-by-alpha:before{content:'\f1cf'}.zmdi-folder-shared:before{content:'\f225'}.zmdi-folder-special:before{content:'\f226'}.zmdi-comment-dots:before{content:'\f260'}.zmdi-reorder:before{content:'\f31e'}.zmdi-dehaze:before{content:'\f197'}.zmdi-sort:before{content:'\f1ce'}.zmdi-pages:before{content:'\f34a'}.zmdi-stack-overflow:before{content:'\f35c'}.zmdi-calendar-account:before{content:'\f204'}.zmdi-paste:before{content:'\f109'}.zmdi-cut:before{content:'\f1bc'}.zmdi-save:before{content:'\f297'}.zmdi-smartphone-code:before{content:'\f139'}.zmdi-directions-bike:before{content:'\f117'}.zmdi-directions-boat:before{content:'\f11a'}.zmdi-directions-bus:before{content:'\f121'}.zmdi-directions-car:before{content:'\f125'}.zmdi-directions-railway:before{content:'\f1b3'}.zmdi-directions-run:before{content:'\f215'}.zmdi-directions-subway:before{content:'\f1d5'}.zmdi-directions-walk:before{content:'\f216'}.zmdi-local-hotel:before{content:'\f178'}.zmdi-local-activity:before{content:'\f1df'}.zmdi-local-play:before{content:'\f1df'}.zmdi-local-airport:before{content:'\f103'}.zmdi-local-atm:before{content:'\f198'}.zmdi-local-bar:before{content:'\f137'}.zmdi-local-cafe:before{content:'\f13b'}.zmdi-local-car-wash:before{content:'\f124'}.zmdi-local-convenience-store:before{content:'\f1d3'}.zmdi-local-dining:before{content:'\f153'}.zmdi-local-drink:before{content:'\f157'}.zmdi-local-florist:before{content:'\f168'}.zmdi-local-gas-station:before{content:'\f16f'}.zmdi-local-grocery-store:before{content:'\f1cb'}.zmdi-local-hospital:before{content:'\f177'}.zmdi-local-laundry-service:before{content:'\f1e9'}.zmdi-local-library:before{content:'\f18d'}.zmdi-local-mall:before{content:'\f195'}.zmdi-local-movies:before{content:'\f19d'}.zmdi-local-offer:before{content:'\f187'}.zmdi-local-parking:before{content:'\f1a5'}.zmdi-local-parking:before{content:'\f1a5'}.zmdi-local-pharmacy:before{content:'\f176'}.zmdi-local-phone:before{content:'\f2be'}.zmdi-local-pizza:before{content:'\f1ac'}.zmdi-local-post-office:before{content:'\f15a'}.zmdi-local-printshop:before{content:'\f1b0'}.zmdi-local-see:before{content:'\f28c'}.zmdi-local-shipping:before{content:'\f1e6'}.zmdi-local-store:before{content:'\f1d4'}.zmdi-local-taxi:before{content:'\f123'}.zmdi-local-wc:before{content:'\f211'}.zmdi-my-location:before{content:'\f299'}.zmdi-directions:before{content:'\f1e7'} \ No newline at end of file diff --git a/packages/website/public/css/roboto.css b/packages/website/public/css/roboto.css deleted file mode 100644 index 4c4a126b0..000000000 --- a/packages/website/public/css/roboto.css +++ /dev/null @@ -1,89 +0,0 @@ -/* -NOTE: This file includes several font faces that are commented out. They are -not currently used by this app but could be at a future point. For this reason, -we leave them commented out rather then removing them completely. -*/ - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Thin.ttf') format('truetype'); - font-weight: 100; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-ThinItalic.ttf') format('truetype'); - font-weight: 100; - font-style: italic; -}*/ - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Light.ttf') format('truetype'); - font-weight: 300; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-LightItalic.ttf') format('truetype'); - font-weight: 300; - font-style: italic; -}*/ - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Regular.ttf') format('truetype'); - font-weight: 400; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-RegularItalic.ttf') format('truetype'); - font-weight: 400; - font-style: italic; -}*/ - -/*@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Medium.ttf') format('truetype'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-MediumItalic.ttf') format('truetype'); - font-weight: 500; - font-style: italic; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-BoldItalic.ttf') format('truetype'); - font-weight: 700; - font-style: italic; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-Black.ttf') format('truetype'); - font-weight: 900; - font-style: normal; -} - -@font-face { - font-family: 'Roboto'; - src: url('../fonts/Roboto-BlackItalic.ttf') format('truetype'); - font-weight: 900; - font-style: italic; -}*/ diff --git a/packages/website/public/css/roboto_mono.css b/packages/website/public/css/roboto_mono.css deleted file mode 100644 index f8159d35f..000000000 --- a/packages/website/public/css/roboto_mono.css +++ /dev/null @@ -1,69 +0,0 @@ -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-Thin.ttf') format('truetype'); - font-weight: 100; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-ThinItalic.ttf') format('truetype'); - font-weight: 100; - font-style: italic; -}*/ - -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-Light.ttf') format('truetype'); - font-weight: 300; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-LightItalic.ttf') format('truetype'); - font-weight: 300; - font-style: italic; -}*/ - -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-Regular.ttf') format('truetype'); - font-weight: 400; - font-style: normal; -} - -/*@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-RegularItalic.ttf') format('truetype'); - font-weight: 400; - font-style: italic; -}*/ - -/*@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-Medium.ttf') format('truetype'); - font-weight: 500; - font-style: normal; -} - -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-MediumItalic.ttf') format('truetype'); - font-weight: 500; - font-style: italic; -} - -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-Bold.ttf') format('truetype'); - font-weight: 700; - font-style: normal; -} - -@font-face { - font-family: 'Roboto Mono'; - src: url('../fonts/RobotoMono-BoldItalic.ttf') format('truetype'); - font-weight: 700; - font-style: italic; -}*/ diff --git a/packages/website/public/fonts/Formular-Light.woff b/packages/website/public/fonts/Formular-Light.woff deleted file mode 100644 index 79c774b40..000000000 Binary files a/packages/website/public/fonts/Formular-Light.woff and /dev/null differ diff --git a/packages/website/public/fonts/Formular-Light.woff2 b/packages/website/public/fonts/Formular-Light.woff2 deleted file mode 100644 index 6502d5da1..000000000 Binary files a/packages/website/public/fonts/Formular-Light.woff2 and /dev/null differ diff --git a/packages/website/public/fonts/Formular-Regular.woff b/packages/website/public/fonts/Formular-Regular.woff deleted file mode 100644 index 651364b9b..000000000 Binary files a/packages/website/public/fonts/Formular-Regular.woff and /dev/null differ diff --git a/packages/website/public/fonts/Formular-Regular.woff2 b/packages/website/public/fonts/Formular-Regular.woff2 deleted file mode 100644 index 91cdbf29f..000000000 Binary files a/packages/website/public/fonts/Formular-Regular.woff2 and /dev/null differ diff --git a/packages/website/public/fonts/Material-Design-Iconic-Font.eot b/packages/website/public/fonts/Material-Design-Iconic-Font.eot deleted file mode 100755 index 5e2519150..000000000 Binary files a/packages/website/public/fonts/Material-Design-Iconic-Font.eot and /dev/null differ diff --git a/packages/website/public/fonts/Material-Design-Iconic-Font.svg b/packages/website/public/fonts/Material-Design-Iconic-Font.svg deleted file mode 100755 index 1d3d2eaa2..000000000 --- a/packages/website/public/fonts/Material-Design-Iconic-Font.svg +++ /dev/null @@ -1,787 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/packages/website/public/fonts/Material-Design-Iconic-Font.ttf b/packages/website/public/fonts/Material-Design-Iconic-Font.ttf deleted file mode 100755 index 5d489fdd1..000000000 Binary files a/packages/website/public/fonts/Material-Design-Iconic-Font.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Material-Design-Iconic-Font.woff b/packages/website/public/fonts/Material-Design-Iconic-Font.woff deleted file mode 100755 index 933b2bf85..000000000 Binary files a/packages/website/public/fonts/Material-Design-Iconic-Font.woff and /dev/null differ diff --git a/packages/website/public/fonts/Material-Design-Iconic-Font.woff2 b/packages/website/public/fonts/Material-Design-Iconic-Font.woff2 deleted file mode 100755 index 35970e277..000000000 Binary files a/packages/website/public/fonts/Material-Design-Iconic-Font.woff2 and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Black.ttf b/packages/website/public/fonts/Roboto-Black.ttf deleted file mode 100755 index 689fe5cb3..000000000 Binary files a/packages/website/public/fonts/Roboto-Black.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-BlackItalic.ttf b/packages/website/public/fonts/Roboto-BlackItalic.ttf deleted file mode 100755 index 0b4e0ee10..000000000 Binary files a/packages/website/public/fonts/Roboto-BlackItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Bold.ttf b/packages/website/public/fonts/Roboto-Bold.ttf deleted file mode 100755 index d3f01ad24..000000000 Binary files a/packages/website/public/fonts/Roboto-Bold.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-BoldItalic.ttf b/packages/website/public/fonts/Roboto-BoldItalic.ttf deleted file mode 100755 index 41cc1e753..000000000 Binary files a/packages/website/public/fonts/Roboto-BoldItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Italic.ttf b/packages/website/public/fonts/Roboto-Italic.ttf deleted file mode 100755 index 6a1cee5b2..000000000 Binary files a/packages/website/public/fonts/Roboto-Italic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Light.ttf b/packages/website/public/fonts/Roboto-Light.ttf deleted file mode 100755 index 219063a57..000000000 Binary files a/packages/website/public/fonts/Roboto-Light.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-LightItalic.ttf b/packages/website/public/fonts/Roboto-LightItalic.ttf deleted file mode 100755 index 0e81e876f..000000000 Binary files a/packages/website/public/fonts/Roboto-LightItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Medium.ttf b/packages/website/public/fonts/Roboto-Medium.ttf deleted file mode 100755 index 1a7f3b0bb..000000000 Binary files a/packages/website/public/fonts/Roboto-Medium.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-MediumItalic.ttf b/packages/website/public/fonts/Roboto-MediumItalic.ttf deleted file mode 100755 index 003029527..000000000 Binary files a/packages/website/public/fonts/Roboto-MediumItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Regular.ttf b/packages/website/public/fonts/Roboto-Regular.ttf deleted file mode 100755 index 2c97eeadf..000000000 Binary files a/packages/website/public/fonts/Roboto-Regular.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-Thin.ttf b/packages/website/public/fonts/Roboto-Thin.ttf deleted file mode 100755 index b74a4fd1a..000000000 Binary files a/packages/website/public/fonts/Roboto-Thin.ttf and /dev/null differ diff --git a/packages/website/public/fonts/Roboto-ThinItalic.ttf b/packages/website/public/fonts/Roboto-ThinItalic.ttf deleted file mode 100755 index dd0ddb852..000000000 Binary files a/packages/website/public/fonts/Roboto-ThinItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Bold.ttf b/packages/website/public/fonts/RobotoMono-Bold.ttf deleted file mode 100755 index 07ef607d5..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Bold.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-BoldItalic.ttf b/packages/website/public/fonts/RobotoMono-BoldItalic.ttf deleted file mode 100755 index 1cca0bf45..000000000 Binary files a/packages/website/public/fonts/RobotoMono-BoldItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Italic.ttf b/packages/website/public/fonts/RobotoMono-Italic.ttf deleted file mode 100755 index ef92c372c..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Italic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Light.ttf b/packages/website/public/fonts/RobotoMono-Light.ttf deleted file mode 100755 index 63229b280..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Light.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-LightItalic.ttf b/packages/website/public/fonts/RobotoMono-LightItalic.ttf deleted file mode 100755 index f25bed56a..000000000 Binary files a/packages/website/public/fonts/RobotoMono-LightItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Medium.ttf b/packages/website/public/fonts/RobotoMono-Medium.ttf deleted file mode 100755 index 88ff0c15a..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Medium.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-MediumItalic.ttf b/packages/website/public/fonts/RobotoMono-MediumItalic.ttf deleted file mode 100755 index 307efad8f..000000000 Binary files a/packages/website/public/fonts/RobotoMono-MediumItalic.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Regular.ttf b/packages/website/public/fonts/RobotoMono-Regular.ttf deleted file mode 100755 index b158a334e..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Regular.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-Thin.ttf b/packages/website/public/fonts/RobotoMono-Thin.ttf deleted file mode 100755 index 309484d32..000000000 Binary files a/packages/website/public/fonts/RobotoMono-Thin.ttf and /dev/null differ diff --git a/packages/website/public/fonts/RobotoMono-ThinItalic.ttf b/packages/website/public/fonts/RobotoMono-ThinItalic.ttf deleted file mode 100755 index e1bb9121e..000000000 Binary files a/packages/website/public/fonts/RobotoMono-ThinItalic.ttf and /dev/null differ diff --git a/packages/website/public/gifs/genesis.gif b/packages/website/public/gifs/genesis.gif deleted file mode 100644 index 009ecf2f8..000000000 Binary files a/packages/website/public/gifs/genesis.gif and /dev/null differ diff --git a/packages/website/public/images/0x-instant/0x-instant-widgets.png b/packages/website/public/images/0x-instant/0x-instant-widgets.png deleted file mode 100644 index 707f0eccc..000000000 Binary files a/packages/website/public/images/0x-instant/0x-instant-widgets.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/0x-instant-widgets@2x.png b/packages/website/public/images/0x-instant/0x-instant-widgets@2x.png deleted file mode 100644 index 35d51387c..000000000 Binary files a/packages/website/public/images/0x-instant/0x-instant-widgets@2x.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-1.png b/packages/website/public/images/0x-instant/widget-1.png deleted file mode 100755 index 622c1f42c..000000000 Binary files a/packages/website/public/images/0x-instant/widget-1.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-2.png b/packages/website/public/images/0x-instant/widget-2.png deleted file mode 100755 index 7fec16cfb..000000000 Binary files a/packages/website/public/images/0x-instant/widget-2.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-3.png b/packages/website/public/images/0x-instant/widget-3.png deleted file mode 100755 index 91ac7d36a..000000000 Binary files a/packages/website/public/images/0x-instant/widget-3.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-4.png b/packages/website/public/images/0x-instant/widget-4.png deleted file mode 100755 index 3db35e068..000000000 Binary files a/packages/website/public/images/0x-instant/widget-4.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-5.png b/packages/website/public/images/0x-instant/widget-5.png deleted file mode 100755 index 05cebf28b..000000000 Binary files a/packages/website/public/images/0x-instant/widget-5.png and /dev/null differ diff --git a/packages/website/public/images/0x-instant/widget-6.png b/packages/website/public/images/0x-instant/widget-6.png deleted file mode 100755 index 33def6e04..000000000 Binary files a/packages/website/public/images/0x-instant/widget-6.png and /dev/null differ diff --git a/packages/website/public/images/0x_logo.png b/packages/website/public/images/0x_logo.png deleted file mode 100644 index 7b7eafe7d..000000000 Binary files a/packages/website/public/images/0x_logo.png and /dev/null differ diff --git a/packages/website/public/images/about/about-office.png b/packages/website/public/images/about/about-office.png deleted file mode 100755 index 432d18a8b..000000000 Binary files a/packages/website/public/images/about/about-office.png and /dev/null differ diff --git a/packages/website/public/images/banner/bottomofcta.png b/packages/website/public/images/banner/bottomofcta.png deleted file mode 100644 index 910022a28..000000000 Binary files a/packages/website/public/images/banner/bottomofcta.png and /dev/null differ diff --git a/packages/website/public/images/banner/topofcta.png b/packages/website/public/images/banner/topofcta.png deleted file mode 100644 index 710c390ab..000000000 Binary files a/packages/website/public/images/banner/topofcta.png and /dev/null differ diff --git a/packages/website/public/images/clients/bamboo.svg b/packages/website/public/images/clients/bamboo.svg deleted file mode 100644 index 702b7d5aa..000000000 --- a/packages/website/public/images/clients/bamboo.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/emoon.svg b/packages/website/public/images/clients/emoon.svg deleted file mode 100644 index 1b14c41b0..000000000 --- a/packages/website/public/images/clients/emoon.svg +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/packages/website/public/images/clients/ercdex.svg b/packages/website/public/images/clients/ercdex.svg deleted file mode 100644 index 41a0ff3b0..000000000 --- a/packages/website/public/images/clients/ercdex.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/godsUnchained.svg b/packages/website/public/images/clients/godsUnchained.svg deleted file mode 100644 index f039b00f9..000000000 --- a/packages/website/public/images/clients/godsUnchained.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/instex.svg b/packages/website/public/images/clients/instex.svg deleted file mode 100644 index c92033b93..000000000 --- a/packages/website/public/images/clients/instex.svg +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/laketrade.svg b/packages/website/public/images/clients/laketrade.svg deleted file mode 100644 index 6ab08bcec..000000000 --- a/packages/website/public/images/clients/laketrade.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/ledgerdex.svg b/packages/website/public/images/clients/ledgerdex.svg deleted file mode 100644 index 44126012e..000000000 --- a/packages/website/public/images/clients/ledgerdex.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/openrelay.svg b/packages/website/public/images/clients/openrelay.svg deleted file mode 100644 index 21e32cc18..000000000 --- a/packages/website/public/images/clients/openrelay.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/paradex.svg b/packages/website/public/images/clients/paradex.svg deleted file mode 100644 index e3bdf48b1..000000000 --- a/packages/website/public/images/clients/paradex.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/website/public/images/clients/radar-relay.svg b/packages/website/public/images/clients/radar-relay.svg deleted file mode 100644 index ecc759fab..000000000 --- a/packages/website/public/images/clients/radar-relay.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/sharkrelay.svg b/packages/website/public/images/clients/sharkrelay.svg deleted file mode 100644 index 41d5376de..000000000 --- a/packages/website/public/images/clients/sharkrelay.svg +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/starbitex.svg b/packages/website/public/images/clients/starbitex.svg deleted file mode 100644 index eee21b3fc..000000000 --- a/packages/website/public/images/clients/starbitex.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/tokenjar.svg b/packages/website/public/images/clients/tokenjar.svg deleted file mode 100644 index f36a6c6aa..000000000 --- a/packages/website/public/images/clients/tokenjar.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/packages/website/public/images/clients/veil.svg b/packages/website/public/images/clients/veil.svg deleted file mode 100644 index b4b36ce57..000000000 --- a/packages/website/public/images/clients/veil.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/website/public/images/coinbase_wallet_logo.png b/packages/website/public/images/coinbase_wallet_logo.png deleted file mode 100644 index 04c1b7290..000000000 Binary files a/packages/website/public/images/coinbase_wallet_logo.png and /dev/null differ diff --git a/packages/website/public/images/developers/logo/0x.svg b/packages/website/public/images/developers/logo/0x.svg deleted file mode 100644 index f02903925..000000000 --- a/packages/website/public/images/developers/logo/0x.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - -Asset 1 - - - - - - - - - - - diff --git a/packages/website/public/images/developers/logo/docs.svg b/packages/website/public/images/developers/logo/docs.svg deleted file mode 100644 index d3d14f66e..000000000 --- a/packages/website/public/images/developers/logo/docs.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/website/public/images/developers/tutorials/0x_order_basics.svg b/packages/website/public/images/developers/tutorials/0x_order_basics.svg deleted file mode 100644 index 57b04dfa5..000000000 --- a/packages/website/public/images/developers/tutorials/0x_order_basics.svg +++ /dev/null @@ -1 +0,0 @@ -Artboard 1 \ No newline at end of file diff --git a/packages/website/public/images/developers/tutorials/build_a_relayer.svg b/packages/website/public/images/developers/tutorials/build_a_relayer.svg deleted file mode 100644 index afda40d88..000000000 --- a/packages/website/public/images/developers/tutorials/build_a_relayer.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg b/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg deleted file mode 100644 index 960616bfe..000000000 --- a/packages/website/public/images/developers/tutorials/build_a_trading_bot.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg b/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg deleted file mode 100644 index e2c492ecd..000000000 --- a/packages/website/public/images/developers/tutorials/develop_on_ethereum.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/website/public/images/developers/tutorials/integrate_0x_instant.svg b/packages/website/public/images/developers/tutorials/integrate_0x_instant.svg deleted file mode 100644 index e9c9278a8..000000000 --- a/packages/website/public/images/developers/tutorials/integrate_0x_instant.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg b/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg deleted file mode 100644 index c402964aa..000000000 --- a/packages/website/public/images/developers/tutorials/use_shared_liquidity.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/website/public/images/doc_icons/connect.png b/packages/website/public/images/doc_icons/connect.png deleted file mode 100644 index 244f504b3..000000000 Binary files a/packages/website/public/images/doc_icons/connect.png and /dev/null differ diff --git a/packages/website/public/images/doc_icons/contracts.png b/packages/website/public/images/doc_icons/contracts.png deleted file mode 100644 index 03956f162..000000000 Binary files a/packages/website/public/images/doc_icons/contracts.png and /dev/null differ diff --git a/packages/website/public/images/doc_icons/docs.png b/packages/website/public/images/doc_icons/docs.png deleted file mode 100644 index 17df04310..000000000 Binary files a/packages/website/public/images/doc_icons/docs.png and /dev/null differ diff --git a/packages/website/public/images/doc_icons/wiki.png b/packages/website/public/images/doc_icons/wiki.png deleted file mode 100644 index d7854d54b..000000000 Binary files a/packages/website/public/images/doc_icons/wiki.png and /dev/null differ diff --git a/packages/website/public/images/doc_icons/zeroExJs.png b/packages/website/public/images/doc_icons/zeroExJs.png deleted file mode 100644 index fe0c49a0f..000000000 Binary files a/packages/website/public/images/doc_icons/zeroExJs.png and /dev/null differ diff --git a/packages/website/public/images/eth_dollar.svg b/packages/website/public/images/eth_dollar.svg deleted file mode 100644 index 0afec94fa..000000000 --- a/packages/website/public/images/eth_dollar.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/eth_token.svg b/packages/website/public/images/eth_token.svg deleted file mode 100644 index 9392692f9..000000000 --- a/packages/website/public/images/eth_token.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/eth_token_erc20.svg b/packages/website/public/images/eth_token_erc20.svg deleted file mode 100644 index 6313c826d..000000000 --- a/packages/website/public/images/eth_token_erc20.svg +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/ether.png b/packages/website/public/images/ether.png deleted file mode 100644 index c92f45681..000000000 Binary files a/packages/website/public/images/ether.png and /dev/null differ diff --git a/packages/website/public/images/ether_alt.svg b/packages/website/public/images/ether_alt.svg deleted file mode 100644 index 82199d14d..000000000 --- a/packages/website/public/images/ether_alt.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/packages/website/public/images/events/berlin.jpg b/packages/website/public/images/events/berlin.jpg deleted file mode 100644 index 0bcc0fa63..000000000 Binary files a/packages/website/public/images/events/berlin.jpg and /dev/null differ diff --git a/packages/website/public/images/events/event-sample.jpg b/packages/website/public/images/events/event-sample.jpg deleted file mode 100644 index f7a832a5c..000000000 Binary files a/packages/website/public/images/events/event-sample.jpg and /dev/null differ diff --git a/packages/website/public/images/events/london.jpg b/packages/website/public/images/events/london.jpg deleted file mode 100644 index 4b6b7ef06..000000000 Binary files a/packages/website/public/images/events/london.jpg and /dev/null differ diff --git a/packages/website/public/images/events/sf.jpg b/packages/website/public/images/events/sf.jpg deleted file mode 100644 index efd7f7c29..000000000 Binary files a/packages/website/public/images/events/sf.jpg and /dev/null differ diff --git a/packages/website/public/images/favicon/favicon-2-16x16.png b/packages/website/public/images/favicon/favicon-2-16x16.png deleted file mode 100755 index 68c493c4f..000000000 Binary files a/packages/website/public/images/favicon/favicon-2-16x16.png and /dev/null differ diff --git a/packages/website/public/images/favicon/favicon-2-32x32.png b/packages/website/public/images/favicon/favicon-2-32x32.png deleted file mode 100755 index a5abb0eb3..000000000 Binary files a/packages/website/public/images/favicon/favicon-2-32x32.png and /dev/null differ diff --git a/packages/website/public/images/favicon/favicon.ico b/packages/website/public/images/favicon/favicon.ico deleted file mode 100755 index b7ada2a1c..000000000 Binary files a/packages/website/public/images/favicon/favicon.ico and /dev/null differ diff --git a/packages/website/public/images/jobs/map@2x.png b/packages/website/public/images/jobs/map@2x.png deleted file mode 100644 index 08fa60ec0..000000000 Binary files a/packages/website/public/images/jobs/map@2x.png and /dev/null differ diff --git a/packages/website/public/images/landing/0x_chips.png b/packages/website/public/images/landing/0x_chips.png deleted file mode 100644 index 2e79637b0..000000000 Binary files a/packages/website/public/images/landing/0x_chips.png and /dev/null differ diff --git a/packages/website/public/images/landing/0x_homepage.svg b/packages/website/public/images/landing/0x_homepage.svg deleted file mode 100644 index d2ccef8f4..000000000 --- a/packages/website/public/images/landing/0x_homepage.svg +++ /dev/null @@ -1,341 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/landing/aragon.png b/packages/website/public/images/landing/aragon.png deleted file mode 100644 index 360b03077..000000000 Binary files a/packages/website/public/images/landing/aragon.png and /dev/null differ diff --git a/packages/website/public/images/landing/augur.png b/packages/website/public/images/landing/augur.png deleted file mode 100644 index 60a2ee86b..000000000 Binary files a/packages/website/public/images/landing/augur.png and /dev/null differ diff --git a/packages/website/public/images/landing/currency.png b/packages/website/public/images/landing/currency.png deleted file mode 100644 index 280995861..000000000 Binary files a/packages/website/public/images/landing/currency.png and /dev/null differ diff --git a/packages/website/public/images/landing/dharma.png b/packages/website/public/images/landing/dharma.png deleted file mode 100644 index 5aa464c20..000000000 Binary files a/packages/website/public/images/landing/dharma.png and /dev/null differ diff --git a/packages/website/public/images/landing/digital_goods.png b/packages/website/public/images/landing/digital_goods.png deleted file mode 100644 index bbe848441..000000000 Binary files a/packages/website/public/images/landing/digital_goods.png and /dev/null differ diff --git a/packages/website/public/images/landing/distributed_network.png b/packages/website/public/images/landing/distributed_network.png deleted file mode 100644 index 8dbb23083..000000000 Binary files a/packages/website/public/images/landing/distributed_network.png and /dev/null differ diff --git a/packages/website/public/images/landing/ethfinex.png b/packages/website/public/images/landing/ethfinex.png deleted file mode 100644 index 53e7913d6..000000000 Binary files a/packages/website/public/images/landing/ethfinex.png and /dev/null differ diff --git a/packages/website/public/images/landing/exchange_everywhere.png b/packages/website/public/images/landing/exchange_everywhere.png deleted file mode 100644 index e63093929..000000000 Binary files a/packages/website/public/images/landing/exchange_everywhere.png and /dev/null differ diff --git a/packages/website/public/images/landing/fund_management_icon.png b/packages/website/public/images/landing/fund_management_icon.png deleted file mode 100644 index c45061469..000000000 Binary files a/packages/website/public/images/landing/fund_management_icon.png and /dev/null differ diff --git a/packages/website/public/images/landing/gnosis.png b/packages/website/public/images/landing/gnosis.png deleted file mode 100644 index b9dd94f52..000000000 Binary files a/packages/website/public/images/landing/gnosis.png and /dev/null differ diff --git a/packages/website/public/images/landing/governance_icon.png b/packages/website/public/images/landing/governance_icon.png deleted file mode 100644 index d21dc313d..000000000 Binary files a/packages/website/public/images/landing/governance_icon.png and /dev/null differ diff --git a/packages/website/public/images/landing/hero_chip_image.png b/packages/website/public/images/landing/hero_chip_image.png deleted file mode 100644 index 447489aa7..000000000 Binary files a/packages/website/public/images/landing/hero_chip_image.png and /dev/null differ diff --git a/packages/website/public/images/landing/lendroid.png b/packages/website/public/images/landing/lendroid.png deleted file mode 100644 index 3b8d0c86c..000000000 Binary files a/packages/website/public/images/landing/lendroid.png and /dev/null differ diff --git a/packages/website/public/images/landing/liquidity.png b/packages/website/public/images/landing/liquidity.png deleted file mode 100644 index dc005dd13..000000000 Binary files a/packages/website/public/images/landing/liquidity.png and /dev/null differ diff --git a/packages/website/public/images/landing/loans_icon.png b/packages/website/public/images/landing/loans_icon.png deleted file mode 100644 index b10bd83e9..000000000 Binary files a/packages/website/public/images/landing/loans_icon.png and /dev/null differ diff --git a/packages/website/public/images/landing/maker.png b/packages/website/public/images/landing/maker.png deleted file mode 100644 index f7a04191e..000000000 Binary files a/packages/website/public/images/landing/maker.png and /dev/null differ diff --git a/packages/website/public/images/landing/melonport.png b/packages/website/public/images/landing/melonport.png deleted file mode 100644 index bdb95707c..000000000 Binary files a/packages/website/public/images/landing/melonport.png and /dev/null differ diff --git a/packages/website/public/images/landing/open_source.png b/packages/website/public/images/landing/open_source.png deleted file mode 100644 index 2c280742a..000000000 Binary files a/packages/website/public/images/landing/open_source.png and /dev/null differ diff --git a/packages/website/public/images/landing/paradex.png b/packages/website/public/images/landing/paradex.png deleted file mode 100644 index f6a1e479f..000000000 Binary files a/packages/website/public/images/landing/paradex.png and /dev/null differ diff --git a/packages/website/public/images/landing/prediction_market_icon.png b/packages/website/public/images/landing/prediction_market_icon.png deleted file mode 100644 index 063595c49..000000000 Binary files a/packages/website/public/images/landing/prediction_market_icon.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/amadeus.png b/packages/website/public/images/landing/project_logos/amadeus.png deleted file mode 100644 index e3926b79f..000000000 Binary files a/packages/website/public/images/landing/project_logos/amadeus.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/anx.png b/packages/website/public/images/landing/project_logos/anx.png deleted file mode 100644 index fa04ce327..000000000 Binary files a/packages/website/public/images/landing/project_logos/anx.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/aragon.png b/packages/website/public/images/landing/project_logos/aragon.png deleted file mode 100644 index b0cf805d3..000000000 Binary files a/packages/website/public/images/landing/project_logos/aragon.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/auctus.png b/packages/website/public/images/landing/project_logos/auctus.png deleted file mode 100644 index 2bdc9a42c..000000000 Binary files a/packages/website/public/images/landing/project_logos/auctus.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/augur.png b/packages/website/public/images/landing/project_logos/augur.png deleted file mode 100644 index 47d4f8465..000000000 Binary files a/packages/website/public/images/landing/project_logos/augur.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/blocknet.png b/packages/website/public/images/landing/project_logos/blocknet.png deleted file mode 100644 index 96aa97953..000000000 Binary files a/packages/website/public/images/landing/project_logos/blocknet.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/chronobank.png b/packages/website/public/images/landing/project_logos/chronobank.png deleted file mode 100644 index ad5ff0e5b..000000000 Binary files a/packages/website/public/images/landing/project_logos/chronobank.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/ddex.png b/packages/website/public/images/landing/project_logos/ddex.png deleted file mode 100644 index a1a8def26..000000000 Binary files a/packages/website/public/images/landing/project_logos/ddex.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/decent_ex.png b/packages/website/public/images/landing/project_logos/decent_ex.png deleted file mode 100644 index 1fac76947..000000000 Binary files a/packages/website/public/images/landing/project_logos/decent_ex.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/dextroid.png b/packages/website/public/images/landing/project_logos/dextroid.png deleted file mode 100644 index 5fdcd7f8e..000000000 Binary files a/packages/website/public/images/landing/project_logos/dextroid.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/dharma.png b/packages/website/public/images/landing/project_logos/dharma.png deleted file mode 100644 index a74736ca2..000000000 Binary files a/packages/website/public/images/landing/project_logos/dharma.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/district0x.png b/packages/website/public/images/landing/project_logos/district0x.png deleted file mode 100644 index 12aa310f0..000000000 Binary files a/packages/website/public/images/landing/project_logos/district0x.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/dydx.png b/packages/website/public/images/landing/project_logos/dydx.png deleted file mode 100644 index f2525292c..000000000 Binary files a/packages/website/public/images/landing/project_logos/dydx.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/ercdex.png b/packages/website/public/images/landing/project_logos/ercdex.png deleted file mode 100644 index 31d137be7..000000000 Binary files a/packages/website/public/images/landing/project_logos/ercdex.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/ethfinex.png b/packages/website/public/images/landing/project_logos/ethfinex.png deleted file mode 100644 index 5aa0c556f..000000000 Binary files a/packages/website/public/images/landing/project_logos/ethfinex.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/ethix.png b/packages/website/public/images/landing/project_logos/ethix.png deleted file mode 100644 index 9b202502c..000000000 Binary files a/packages/website/public/images/landing/project_logos/ethix.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/idt.png b/packages/website/public/images/landing/project_logos/idt.png deleted file mode 100644 index 859c289d2..000000000 Binary files a/packages/website/public/images/landing/project_logos/idt.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/imToken.png b/packages/website/public/images/landing/project_logos/imToken.png deleted file mode 100644 index ffb3b2fd3..000000000 Binary files a/packages/website/public/images/landing/project_logos/imToken.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/lendroid.png b/packages/website/public/images/landing/project_logos/lendroid.png deleted file mode 100644 index a5e1eb51e..000000000 Binary files a/packages/website/public/images/landing/project_logos/lendroid.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/maker.png b/packages/website/public/images/landing/project_logos/maker.png deleted file mode 100644 index d3bb927a5..000000000 Binary files a/packages/website/public/images/landing/project_logos/maker.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/melonport.png b/packages/website/public/images/landing/project_logos/melonport.png deleted file mode 100644 index 9533faee2..000000000 Binary files a/packages/website/public/images/landing/project_logos/melonport.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/open_relay.png b/packages/website/public/images/landing/project_logos/open_relay.png deleted file mode 100644 index fa1853df6..000000000 Binary files a/packages/website/public/images/landing/project_logos/open_relay.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/paradex.png b/packages/website/public/images/landing/project_logos/paradex.png deleted file mode 100644 index 7948eb938..000000000 Binary files a/packages/website/public/images/landing/project_logos/paradex.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/radar_relay.png b/packages/website/public/images/landing/project_logos/radar_relay.png deleted file mode 100644 index af0e610f8..000000000 Binary files a/packages/website/public/images/landing/project_logos/radar_relay.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/status.png b/packages/website/public/images/landing/project_logos/status.png deleted file mode 100644 index 24c7e177a..000000000 Binary files a/packages/website/public/images/landing/project_logos/status.png and /dev/null differ diff --git a/packages/website/public/images/landing/project_logos/the_ocean.png b/packages/website/public/images/landing/project_logos/the_ocean.png deleted file mode 100644 index 0677abc29..000000000 Binary files a/packages/website/public/images/landing/project_logos/the_ocean.png and /dev/null differ diff --git a/packages/website/public/images/landing/radar_relay.png b/packages/website/public/images/landing/radar_relay.png deleted file mode 100644 index 297f55cfb..000000000 Binary files a/packages/website/public/images/landing/radar_relay.png and /dev/null differ diff --git a/packages/website/public/images/landing/relayer_diagram.png b/packages/website/public/images/landing/relayer_diagram.png deleted file mode 100644 index 44c4ef707..000000000 Binary files a/packages/website/public/images/landing/relayer_diagram.png and /dev/null differ diff --git a/packages/website/public/images/landing/stable_tokens_icon.png b/packages/website/public/images/landing/stable_tokens_icon.png deleted file mode 100644 index 40e372606..000000000 Binary files a/packages/website/public/images/landing/stable_tokens_icon.png and /dev/null differ diff --git a/packages/website/public/images/landing/stocks.png b/packages/website/public/images/landing/stocks.png deleted file mode 100644 index e244cd0c5..000000000 Binary files a/packages/website/public/images/landing/stocks.png and /dev/null differ diff --git a/packages/website/public/images/landing/tokenized_world.png b/packages/website/public/images/landing/tokenized_world.png deleted file mode 100644 index b284eaa88..000000000 Binary files a/packages/website/public/images/landing/tokenized_world.png and /dev/null differ diff --git a/packages/website/public/images/launch_kit/0x_cupboard.svg b/packages/website/public/images/launch_kit/0x_cupboard.svg deleted file mode 100644 index 4c4e6ba1b..000000000 --- a/packages/website/public/images/launch_kit/0x_cupboard.svg +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/launch_kit/enable_trading.svg b/packages/website/public/images/launch_kit/enable_trading.svg deleted file mode 100644 index 9fcb78c05..000000000 --- a/packages/website/public/images/launch_kit/enable_trading.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/packages/website/public/images/launch_kit/fork.svg b/packages/website/public/images/launch_kit/fork.svg deleted file mode 100644 index 83d2f6d65..000000000 --- a/packages/website/public/images/launch_kit/fork.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/packages/website/public/images/launch_kit/in_game_marketplace.svg b/packages/website/public/images/launch_kit/in_game_marketplace.svg deleted file mode 100644 index 77422a667..000000000 --- a/packages/website/public/images/launch_kit/in_game_marketplace.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/launch_kit/local_market.svg b/packages/website/public/images/launch_kit/local_market.svg deleted file mode 100644 index cf5af8bcb..000000000 --- a/packages/website/public/images/launch_kit/local_market.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/packages/website/public/images/launch_kit/secondary_market.svg b/packages/website/public/images/launch_kit/secondary_market.svg deleted file mode 100644 index f57152516..000000000 --- a/packages/website/public/images/launch_kit/secondary_market.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/website/public/images/launch_kit/shared_liquidity.svg b/packages/website/public/images/launch_kit/shared_liquidity.svg deleted file mode 100644 index abab3444c..000000000 --- a/packages/website/public/images/launch_kit/shared_liquidity.svg +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/ledger_icon.png b/packages/website/public/images/ledger_icon.png deleted file mode 100644 index 29b8df08f..000000000 Binary files a/packages/website/public/images/ledger_icon.png and /dev/null differ diff --git a/packages/website/public/images/lock_icon.svg b/packages/website/public/images/lock_icon.svg deleted file mode 100644 index 83e8191a1..000000000 --- a/packages/website/public/images/lock_icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/website/public/images/logos/FBG.png b/packages/website/public/images/logos/FBG.png deleted file mode 100644 index 0a91bcabc..000000000 Binary files a/packages/website/public/images/logos/FBG.png and /dev/null differ diff --git a/packages/website/public/images/logos/aragon.png b/packages/website/public/images/logos/aragon.png deleted file mode 100644 index db4d81905..000000000 Binary files a/packages/website/public/images/logos/aragon.png and /dev/null differ diff --git a/packages/website/public/images/logos/augur.png b/packages/website/public/images/logos/augur.png deleted file mode 100644 index 709da2f1a..000000000 Binary files a/packages/website/public/images/logos/augur.png and /dev/null differ diff --git a/packages/website/public/images/logos/blockchain_capital.png b/packages/website/public/images/logos/blockchain_capital.png deleted file mode 100644 index 42fdcbfa1..000000000 Binary files a/packages/website/public/images/logos/blockchain_capital.png and /dev/null differ diff --git a/packages/website/public/images/logos/chronobank.png b/packages/website/public/images/logos/chronobank.png deleted file mode 100644 index f94aa3fee..000000000 Binary files a/packages/website/public/images/logos/chronobank.png and /dev/null differ diff --git a/packages/website/public/images/logos/dharma.png b/packages/website/public/images/logos/dharma.png deleted file mode 100644 index 65d902a1e..000000000 Binary files a/packages/website/public/images/logos/dharma.png and /dev/null differ diff --git a/packages/website/public/images/logos/district0x.png b/packages/website/public/images/logos/district0x.png deleted file mode 100644 index e2b4c7e4a..000000000 Binary files a/packages/website/public/images/logos/district0x.png and /dev/null differ diff --git a/packages/website/public/images/logos/jen_advisors.png b/packages/website/public/images/logos/jen_advisors.png deleted file mode 100644 index de0395d3d..000000000 Binary files a/packages/website/public/images/logos/jen_advisors.png and /dev/null differ diff --git a/packages/website/public/images/logos/maker.png b/packages/website/public/images/logos/maker.png deleted file mode 100644 index 48c08d15d..000000000 Binary files a/packages/website/public/images/logos/maker.png and /dev/null differ diff --git a/packages/website/public/images/logos/melonport.png b/packages/website/public/images/logos/melonport.png deleted file mode 100644 index b973e081f..000000000 Binary files a/packages/website/public/images/logos/melonport.png and /dev/null differ diff --git a/packages/website/public/images/logos/openANX.png b/packages/website/public/images/logos/openANX.png deleted file mode 100644 index e0167257f..000000000 Binary files a/packages/website/public/images/logos/openANX.png and /dev/null differ diff --git a/packages/website/public/images/logos/pantera_capital.png b/packages/website/public/images/logos/pantera_capital.png deleted file mode 100644 index 9cffdf39f..000000000 Binary files a/packages/website/public/images/logos/pantera_capital.png and /dev/null differ diff --git a/packages/website/public/images/logos/polychain_capital.png b/packages/website/public/images/logos/polychain_capital.png deleted file mode 100644 index 2b7782134..000000000 Binary files a/packages/website/public/images/logos/polychain_capital.png and /dev/null differ diff --git a/packages/website/public/images/metamask_icon.png b/packages/website/public/images/metamask_icon.png deleted file mode 100644 index ab497ecb7..000000000 Binary files a/packages/website/public/images/metamask_icon.png and /dev/null differ diff --git a/packages/website/public/images/metamask_or_parity.png b/packages/website/public/images/metamask_or_parity.png deleted file mode 100644 index fda646558..000000000 Binary files a/packages/website/public/images/metamask_or_parity.png and /dev/null differ diff --git a/packages/website/public/images/network_icons/kovan.png b/packages/website/public/images/network_icons/kovan.png deleted file mode 100644 index f47a12e74..000000000 Binary files a/packages/website/public/images/network_icons/kovan.png and /dev/null differ diff --git a/packages/website/public/images/network_icons/mainnet.png b/packages/website/public/images/network_icons/mainnet.png deleted file mode 100644 index 6693635d6..000000000 Binary files a/packages/website/public/images/network_icons/mainnet.png and /dev/null differ diff --git a/packages/website/public/images/network_icons/rinkeby.png b/packages/website/public/images/network_icons/rinkeby.png deleted file mode 100644 index f9ba18778..000000000 Binary files a/packages/website/public/images/network_icons/rinkeby.png and /dev/null differ diff --git a/packages/website/public/images/network_icons/ropsten.png b/packages/website/public/images/network_icons/ropsten.png deleted file mode 100644 index 894910b34..000000000 Binary files a/packages/website/public/images/network_icons/ropsten.png and /dev/null differ diff --git a/packages/website/public/images/og_image.png b/packages/website/public/images/og_image.png deleted file mode 100644 index b9bafeb7e..000000000 Binary files a/packages/website/public/images/og_image.png and /dev/null differ diff --git a/packages/website/public/images/press/logo-forbes.png b/packages/website/public/images/press/logo-forbes.png deleted file mode 100644 index 6849c672b..000000000 Binary files a/packages/website/public/images/press/logo-forbes.png and /dev/null differ diff --git a/packages/website/public/images/press/logo-fortune.png b/packages/website/public/images/press/logo-fortune.png deleted file mode 100644 index 981f8c357..000000000 Binary files a/packages/website/public/images/press/logo-fortune.png and /dev/null differ diff --git a/packages/website/public/images/press/logo-techcrunch.png b/packages/website/public/images/press/logo-techcrunch.png deleted file mode 100644 index 7f260d0ea..000000000 Binary files a/packages/website/public/images/press/logo-techcrunch.png and /dev/null differ diff --git a/packages/website/public/images/press/logo-venturebeat.png b/packages/website/public/images/press/logo-venturebeat.png deleted file mode 100644 index 2086bf0b7..000000000 Binary files a/packages/website/public/images/press/logo-venturebeat.png and /dev/null differ diff --git a/packages/website/public/images/protocol_logo_black.png b/packages/website/public/images/protocol_logo_black.png deleted file mode 100644 index 36a905d5a..000000000 Binary files a/packages/website/public/images/protocol_logo_black.png and /dev/null differ diff --git a/packages/website/public/images/protocol_logo_white.png b/packages/website/public/images/protocol_logo_white.png deleted file mode 100644 index a405ad6d5..000000000 Binary files a/packages/website/public/images/protocol_logo_white.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo.png b/packages/website/public/images/relayer-logos/logo.png deleted file mode 100755 index d810cef4a..000000000 Binary files a/packages/website/public/images/relayer-logos/logo.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_1.png b/packages/website/public/images/relayer-logos/logo_1.png deleted file mode 100755 index 0068a7445..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_1.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_2.1.png b/packages/website/public/images/relayer-logos/logo_2.1.png deleted file mode 100755 index f6cd92b0e..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_2.1.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_2.2.png b/packages/website/public/images/relayer-logos/logo_2.2.png deleted file mode 100755 index 9461e91ee..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_2.2.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_2.3.png b/packages/website/public/images/relayer-logos/logo_2.3.png deleted file mode 100755 index fde896972..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_2.3.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_2.png b/packages/website/public/images/relayer-logos/logo_2.png deleted file mode 100755 index e3015110c..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_2.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_3.png b/packages/website/public/images/relayer-logos/logo_3.png deleted file mode 100755 index b3d397fe1..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_3.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_4.png b/packages/website/public/images/relayer-logos/logo_4.png deleted file mode 100755 index 578be0af8..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_4.png and /dev/null differ diff --git a/packages/website/public/images/relayer-logos/logo_5.png b/packages/website/public/images/relayer-logos/logo_5.png deleted file mode 100755 index baf3c4080..000000000 Binary files a/packages/website/public/images/relayer-logos/logo_5.png and /dev/null differ diff --git a/packages/website/public/images/relayer_fallback.png b/packages/website/public/images/relayer_fallback.png deleted file mode 100644 index 587fc9ef7..000000000 Binary files a/packages/website/public/images/relayer_fallback.png and /dev/null differ diff --git a/packages/website/public/images/setup_account_icon.svg b/packages/website/public/images/setup_account_icon.svg deleted file mode 100644 index eaa5b2fd6..000000000 --- a/packages/website/public/images/setup_account_icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/packages/website/public/images/social/discord.png b/packages/website/public/images/social/discord.png deleted file mode 100644 index 1bdb07394..000000000 Binary files a/packages/website/public/images/social/discord.png and /dev/null differ diff --git a/packages/website/public/images/social/discourse.png b/packages/website/public/images/social/discourse.png deleted file mode 100644 index 4bca3de0d..000000000 Binary files a/packages/website/public/images/social/discourse.png and /dev/null differ diff --git a/packages/website/public/images/social/github.png b/packages/website/public/images/social/github.png deleted file mode 100644 index 2c2a3e918..000000000 Binary files a/packages/website/public/images/social/github.png and /dev/null differ diff --git a/packages/website/public/images/social/medium.png b/packages/website/public/images/social/medium.png deleted file mode 100644 index 11e8f2c44..000000000 Binary files a/packages/website/public/images/social/medium.png and /dev/null differ diff --git a/packages/website/public/images/social/reddit.png b/packages/website/public/images/social/reddit.png deleted file mode 100644 index 3fbe6229a..000000000 Binary files a/packages/website/public/images/social/reddit.png and /dev/null differ diff --git a/packages/website/public/images/social/slack.png b/packages/website/public/images/social/slack.png deleted file mode 100644 index c4b2d7b81..000000000 Binary files a/packages/website/public/images/social/slack.png and /dev/null differ diff --git a/packages/website/public/images/social/twitter.png b/packages/website/public/images/social/twitter.png deleted file mode 100644 index fe0d691a9..000000000 Binary files a/packages/website/public/images/social/twitter.png and /dev/null differ diff --git a/packages/website/public/images/team/advisors/davids.jpg b/packages/website/public/images/team/advisors/davids.jpg deleted file mode 100755 index 904ebda01..000000000 Binary files a/packages/website/public/images/team/advisors/davids.jpg and /dev/null differ diff --git a/packages/website/public/images/team/advisors/frede.jpg b/packages/website/public/images/team/advisors/frede.jpg deleted file mode 100755 index cb882c53f..000000000 Binary files a/packages/website/public/images/team/advisors/frede.jpg and /dev/null differ diff --git a/packages/website/public/images/team/advisors/joeyk.jpg b/packages/website/public/images/team/advisors/joeyk.jpg deleted file mode 100755 index c6050242f..000000000 Binary files a/packages/website/public/images/team/advisors/joeyk.jpg and /dev/null differ diff --git a/packages/website/public/images/team/advisors/lindax.jpg b/packages/website/public/images/team/advisors/lindax.jpg deleted file mode 100755 index 766532068..000000000 Binary files a/packages/website/public/images/team/advisors/lindax.jpg and /dev/null differ diff --git a/packages/website/public/images/team/advisors/olafc.jpg b/packages/website/public/images/team/advisors/olafc.jpg deleted file mode 100755 index bb0dc6cb5..000000000 Binary files a/packages/website/public/images/team/advisors/olafc.jpg and /dev/null differ diff --git a/packages/website/public/images/team/alexb.jpg b/packages/website/public/images/team/alexb.jpg deleted file mode 100755 index c076de14b..000000000 Binary files a/packages/website/public/images/team/alexb.jpg and /dev/null differ diff --git a/packages/website/public/images/team/alexv.jpg b/packages/website/public/images/team/alexv.jpg deleted file mode 100755 index 686f4a2e3..000000000 Binary files a/packages/website/public/images/team/alexv.jpg and /dev/null differ diff --git a/packages/website/public/images/team/amirb.jpg b/packages/website/public/images/team/amirb.jpg deleted file mode 100755 index 19502735d..000000000 Binary files a/packages/website/public/images/team/amirb.jpg and /dev/null differ diff --git a/packages/website/public/images/team/benb.jpg b/packages/website/public/images/team/benb.jpg deleted file mode 100755 index ef7fb69a9..000000000 Binary files a/packages/website/public/images/team/benb.jpg and /dev/null differ diff --git a/packages/website/public/images/team/blake.jpg b/packages/website/public/images/team/blake.jpg deleted file mode 100755 index 0f5512af4..000000000 Binary files a/packages/website/public/images/team/blake.jpg and /dev/null differ diff --git a/packages/website/public/images/team/brandonm.jpg b/packages/website/public/images/team/brandonm.jpg deleted file mode 100755 index 72368f994..000000000 Binary files a/packages/website/public/images/team/brandonm.jpg and /dev/null differ diff --git a/packages/website/public/images/team/chrisk.jpg b/packages/website/public/images/team/chrisk.jpg deleted file mode 100755 index cf900faea..000000000 Binary files a/packages/website/public/images/team/chrisk.jpg and /dev/null differ diff --git a/packages/website/public/images/team/clayr.jpg b/packages/website/public/images/team/clayr.jpg deleted file mode 100755 index 3fa550727..000000000 Binary files a/packages/website/public/images/team/clayr.jpg and /dev/null differ diff --git a/packages/website/public/images/team/eugenea.jpg b/packages/website/public/images/team/eugenea.jpg deleted file mode 100755 index dc9aecea1..000000000 Binary files a/packages/website/public/images/team/eugenea.jpg and /dev/null differ diff --git a/packages/website/public/images/team/fabiob.jpg b/packages/website/public/images/team/fabiob.jpg deleted file mode 100755 index c06a06c9f..000000000 Binary files a/packages/website/public/images/team/fabiob.jpg and /dev/null differ diff --git a/packages/website/public/images/team/francesco.jpg b/packages/website/public/images/team/francesco.jpg deleted file mode 100755 index 56ae0e870..000000000 Binary files a/packages/website/public/images/team/francesco.jpg and /dev/null differ diff --git a/packages/website/public/images/team/greg.jpg b/packages/website/public/images/team/greg.jpg deleted file mode 100755 index 0b6df7083..000000000 Binary files a/packages/website/public/images/team/greg.jpg and /dev/null differ diff --git a/packages/website/public/images/team/jacobe.jpg b/packages/website/public/images/team/jacobe.jpg deleted file mode 100755 index 29eed406d..000000000 Binary files a/packages/website/public/images/team/jacobe.jpg and /dev/null differ diff --git a/packages/website/public/images/team/jasons.jpg b/packages/website/public/images/team/jasons.jpg deleted file mode 100755 index b0a40edba..000000000 Binary files a/packages/website/public/images/team/jasons.jpg and /dev/null differ diff --git a/packages/website/public/images/team/leonidL.jpg b/packages/website/public/images/team/leonidL.jpg deleted file mode 100755 index e3dfd6a7d..000000000 Binary files a/packages/website/public/images/team/leonidL.jpg and /dev/null differ diff --git a/packages/website/public/images/team/marcs.jpg b/packages/website/public/images/team/marcs.jpg deleted file mode 100644 index fefc24156..000000000 Binary files a/packages/website/public/images/team/marcs.jpg and /dev/null differ diff --git a/packages/website/public/images/team/mattt.jpg b/packages/website/public/images/team/mattt.jpg deleted file mode 100755 index 03f95a7c1..000000000 Binary files a/packages/website/public/images/team/mattt.jpg and /dev/null differ diff --git a/packages/website/public/images/team/melo.jpg b/packages/website/public/images/team/melo.jpg deleted file mode 100755 index 2db8ec796..000000000 Binary files a/packages/website/public/images/team/melo.jpg and /dev/null differ diff --git a/packages/website/public/images/team/oshirob.png b/packages/website/public/images/team/oshirob.png deleted file mode 100644 index 094bab79b..000000000 Binary files a/packages/website/public/images/team/oshirob.png and /dev/null differ diff --git a/packages/website/public/images/team/peterz.jpg b/packages/website/public/images/team/peterz.jpg deleted file mode 100755 index 7708c75db..000000000 Binary files a/packages/website/public/images/team/peterz.jpg and /dev/null differ diff --git a/packages/website/public/images/team/rahuls.jpg b/packages/website/public/images/team/rahuls.jpg deleted file mode 100755 index ef2f001dd..000000000 Binary files a/packages/website/public/images/team/rahuls.jpg and /dev/null differ diff --git a/packages/website/public/images/team/remcoB.jpg b/packages/website/public/images/team/remcoB.jpg deleted file mode 100755 index bc997a18e..000000000 Binary files a/packages/website/public/images/team/remcoB.jpg and /dev/null differ diff --git a/packages/website/public/images/team/steveK.jpg b/packages/website/public/images/team/steveK.jpg deleted file mode 100755 index aeede8bc5..000000000 Binary files a/packages/website/public/images/team/steveK.jpg and /dev/null differ diff --git a/packages/website/public/images/team/toms.jpg b/packages/website/public/images/team/toms.jpg deleted file mode 100755 index 9d9dd2db8..000000000 Binary files a/packages/website/public/images/team/toms.jpg and /dev/null differ diff --git a/packages/website/public/images/team/weijew.jpg b/packages/website/public/images/team/weijew.jpg deleted file mode 100755 index 0b2464e67..000000000 Binary files a/packages/website/public/images/team/weijew.jpg and /dev/null differ diff --git a/packages/website/public/images/team/willw.jpg b/packages/website/public/images/team/willw.jpg deleted file mode 100755 index c1bd8f406..000000000 Binary files a/packages/website/public/images/team/willw.jpg and /dev/null differ diff --git a/packages/website/public/images/team/xianny.jpg b/packages/website/public/images/team/xianny.jpg deleted file mode 100755 index 4e6a3bb8c..000000000 Binary files a/packages/website/public/images/team/xianny.jpg and /dev/null differ diff --git a/packages/website/public/images/team/zack.jpg b/packages/website/public/images/team/zack.jpg deleted file mode 100755 index 9060d7592..000000000 Binary files a/packages/website/public/images/team/zack.jpg and /dev/null differ diff --git a/packages/website/public/images/token_icons/1ST.png b/packages/website/public/images/token_icons/1ST.png deleted file mode 100644 index 9cd23b10e..000000000 Binary files a/packages/website/public/images/token_icons/1ST.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ABYSS.png b/packages/website/public/images/token_icons/ABYSS.png deleted file mode 100644 index 6ed2efef8..000000000 Binary files a/packages/website/public/images/token_icons/ABYSS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ADT.png b/packages/website/public/images/token_icons/ADT.png deleted file mode 100644 index 2e7f3f54f..000000000 Binary files a/packages/website/public/images/token_icons/ADT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/AE.png b/packages/website/public/images/token_icons/AE.png deleted file mode 100644 index 01dc13dda..000000000 Binary files a/packages/website/public/images/token_icons/AE.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/AION.png b/packages/website/public/images/token_icons/AION.png deleted file mode 100644 index a2bfb9253..000000000 Binary files a/packages/website/public/images/token_icons/AION.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/AIR.png b/packages/website/public/images/token_icons/AIR.png deleted file mode 100644 index ab3a13b6d..000000000 Binary files a/packages/website/public/images/token_icons/AIR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ANT.png b/packages/website/public/images/token_icons/ANT.png deleted file mode 100644 index 437a8f21a..000000000 Binary files a/packages/website/public/images/token_icons/ANT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/APCC.png b/packages/website/public/images/token_icons/APCC.png deleted file mode 100644 index 4294618be..000000000 Binary files a/packages/website/public/images/token_icons/APCC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/APPC.png b/packages/website/public/images/token_icons/APPC.png deleted file mode 100644 index 4294618be..000000000 Binary files a/packages/website/public/images/token_icons/APPC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ARN.png b/packages/website/public/images/token_icons/ARN.png deleted file mode 100644 index 0d17bb0dd..000000000 Binary files a/packages/website/public/images/token_icons/ARN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ART.png b/packages/website/public/images/token_icons/ART.png deleted file mode 100644 index 194f58fa0..000000000 Binary files a/packages/website/public/images/token_icons/ART.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/AST.png b/packages/website/public/images/token_icons/AST.png deleted file mode 100644 index 25d7c00ee..000000000 Binary files a/packages/website/public/images/token_icons/AST.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/BAT.png b/packages/website/public/images/token_icons/BAT.png deleted file mode 100644 index 840ed0a16..000000000 Binary files a/packages/website/public/images/token_icons/BAT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/BCAP.png b/packages/website/public/images/token_icons/BCAP.png deleted file mode 100644 index acf50e368..000000000 Binary files a/packages/website/public/images/token_icons/BCAP.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/BCPT.png b/packages/website/public/images/token_icons/BCPT.png deleted file mode 100644 index e1ecbeafe..000000000 Binary files a/packages/website/public/images/token_icons/BCPT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/BNT.png b/packages/website/public/images/token_icons/BNT.png deleted file mode 100644 index a3b91ec34..000000000 Binary files a/packages/website/public/images/token_icons/BNT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/BRM.png b/packages/website/public/images/token_icons/BRM.png deleted file mode 100644 index 109c21ef5..000000000 Binary files a/packages/website/public/images/token_icons/BRM.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/CAG.png b/packages/website/public/images/token_icons/CAG.png deleted file mode 100644 index 2aa368381..000000000 Binary files a/packages/website/public/images/token_icons/CAG.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/CAN.png b/packages/website/public/images/token_icons/CAN.png deleted file mode 100644 index 7fdf3a9b9..000000000 Binary files a/packages/website/public/images/token_icons/CAN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/CAT.png b/packages/website/public/images/token_icons/CAT.png deleted file mode 100644 index c59b6b15d..000000000 Binary files a/packages/website/public/images/token_icons/CAT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/CFI.png b/packages/website/public/images/token_icons/CFI.png deleted file mode 100644 index b1f2e6db9..000000000 Binary files a/packages/website/public/images/token_icons/CFI.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/CVC.png b/packages/website/public/images/token_icons/CVC.png deleted file mode 100644 index 1daf28d00..000000000 Binary files a/packages/website/public/images/token_icons/CVC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DAI.png b/packages/website/public/images/token_icons/DAI.png deleted file mode 100644 index bf7da4a01..000000000 Binary files a/packages/website/public/images/token_icons/DAI.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DATA.png b/packages/website/public/images/token_icons/DATA.png deleted file mode 100644 index 43f2e6dde..000000000 Binary files a/packages/website/public/images/token_icons/DATA.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DEB.png b/packages/website/public/images/token_icons/DEB.png deleted file mode 100644 index c729fd265..000000000 Binary files a/packages/website/public/images/token_icons/DEB.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DGD.png b/packages/website/public/images/token_icons/DGD.png deleted file mode 100644 index cb81ecb45..000000000 Binary files a/packages/website/public/images/token_icons/DGD.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DIVX.png b/packages/website/public/images/token_icons/DIVX.png deleted file mode 100644 index d8d50f1f8..000000000 Binary files a/packages/website/public/images/token_icons/DIVX.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/DNT.png b/packages/website/public/images/token_icons/DNT.png deleted file mode 100644 index b4ac550f6..000000000 Binary files a/packages/website/public/images/token_icons/DNT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/EDG.png b/packages/website/public/images/token_icons/EDG.png deleted file mode 100644 index 606784154..000000000 Binary files a/packages/website/public/images/token_icons/EDG.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/EDU.png b/packages/website/public/images/token_icons/EDU.png deleted file mode 100644 index d74785e5a..000000000 Binary files a/packages/website/public/images/token_icons/EDU.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ELEC.png b/packages/website/public/images/token_icons/ELEC.png deleted file mode 100644 index cc1a3745a..000000000 Binary files a/packages/website/public/images/token_icons/ELEC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/EMONT.png b/packages/website/public/images/token_icons/EMONT.png deleted file mode 100644 index ba7fe4a3d..000000000 Binary files a/packages/website/public/images/token_icons/EMONT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ENG.png b/packages/website/public/images/token_icons/ENG.png deleted file mode 100644 index 6f83a35ea..000000000 Binary files a/packages/website/public/images/token_icons/ENG.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ENTR.png b/packages/website/public/images/token_icons/ENTR.png deleted file mode 100644 index 2936c20e2..000000000 Binary files a/packages/website/public/images/token_icons/ENTR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/EOS.png b/packages/website/public/images/token_icons/EOS.png deleted file mode 100644 index 622df61bc..000000000 Binary files a/packages/website/public/images/token_icons/EOS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/EVE.png b/packages/website/public/images/token_icons/EVE.png deleted file mode 100644 index d78362134..000000000 Binary files a/packages/website/public/images/token_icons/EVE.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/FUN.png b/packages/website/public/images/token_icons/FUN.png deleted file mode 100644 index a473a1c72..000000000 Binary files a/packages/website/public/images/token_icons/FUN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/GEE.png b/packages/website/public/images/token_icons/GEE.png deleted file mode 100644 index 887cc8429..000000000 Binary files a/packages/website/public/images/token_icons/GEE.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/GEN.png b/packages/website/public/images/token_icons/GEN.png deleted file mode 100644 index b1fe28370..000000000 Binary files a/packages/website/public/images/token_icons/GEN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/GET.png b/packages/website/public/images/token_icons/GET.png deleted file mode 100644 index 6a5fbdf63..000000000 Binary files a/packages/website/public/images/token_icons/GET.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/GNO.png b/packages/website/public/images/token_icons/GNO.png deleted file mode 100644 index 7c7d09433..000000000 Binary files a/packages/website/public/images/token_icons/GNO.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/GNT.png b/packages/website/public/images/token_icons/GNT.png deleted file mode 100644 index e61a4367d..000000000 Binary files a/packages/website/public/images/token_icons/GNT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/HGT.png b/packages/website/public/images/token_icons/HGT.png deleted file mode 100644 index b35c601a3..000000000 Binary files a/packages/website/public/images/token_icons/HGT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/HOT.png b/packages/website/public/images/token_icons/HOT.png deleted file mode 100644 index 0c7f61755..000000000 Binary files a/packages/website/public/images/token_icons/HOT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ICN.png b/packages/website/public/images/token_icons/ICN.png deleted file mode 100644 index e7eebad10..000000000 Binary files a/packages/website/public/images/token_icons/ICN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/IND.png b/packages/website/public/images/token_icons/IND.png deleted file mode 100644 index edc3d217b..000000000 Binary files a/packages/website/public/images/token_icons/IND.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/J8T.png b/packages/website/public/images/token_icons/J8T.png deleted file mode 100644 index 74a2f4855..000000000 Binary files a/packages/website/public/images/token_icons/J8T.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/JET.png b/packages/website/public/images/token_icons/JET.png deleted file mode 100644 index f34a28481..000000000 Binary files a/packages/website/public/images/token_icons/JET.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/KIN.png b/packages/website/public/images/token_icons/KIN.png deleted file mode 100644 index a38d656e1..000000000 Binary files a/packages/website/public/images/token_icons/KIN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/KNC.png b/packages/website/public/images/token_icons/KNC.png deleted file mode 100644 index 7ebe359b7..000000000 Binary files a/packages/website/public/images/token_icons/KNC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/LINK.png b/packages/website/public/images/token_icons/LINK.png deleted file mode 100644 index 0873f72c9..000000000 Binary files a/packages/website/public/images/token_icons/LINK.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/LOOM.png b/packages/website/public/images/token_icons/LOOM.png deleted file mode 100644 index 0da2c41c9..000000000 Binary files a/packages/website/public/images/token_icons/LOOM.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/LUN.png b/packages/website/public/images/token_icons/LUN.png deleted file mode 100644 index d661bdc9f..000000000 Binary files a/packages/website/public/images/token_icons/LUN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MANA.png b/packages/website/public/images/token_icons/MANA.png deleted file mode 100644 index 52cdffa69..000000000 Binary files a/packages/website/public/images/token_icons/MANA.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MCO.png b/packages/website/public/images/token_icons/MCO.png deleted file mode 100644 index 7c3c5bfa0..000000000 Binary files a/packages/website/public/images/token_icons/MCO.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MKR.png b/packages/website/public/images/token_icons/MKR.png deleted file mode 100644 index 6da588979..000000000 Binary files a/packages/website/public/images/token_icons/MKR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MLN.png b/packages/website/public/images/token_icons/MLN.png deleted file mode 100644 index 29f58e631..000000000 Binary files a/packages/website/public/images/token_icons/MLN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MOD.png b/packages/website/public/images/token_icons/MOD.png deleted file mode 100644 index 4fbe66b83..000000000 Binary files a/packages/website/public/images/token_icons/MOD.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MORPH.png b/packages/website/public/images/token_icons/MORPH.png deleted file mode 100644 index a9a8dd067..000000000 Binary files a/packages/website/public/images/token_icons/MORPH.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MOT.png b/packages/website/public/images/token_icons/MOT.png deleted file mode 100644 index b5457f9f1..000000000 Binary files a/packages/website/public/images/token_icons/MOT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/MTL.png b/packages/website/public/images/token_icons/MTL.png deleted file mode 100644 index 3297462ce..000000000 Binary files a/packages/website/public/images/token_icons/MTL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NANJ.png b/packages/website/public/images/token_icons/NANJ.png deleted file mode 100644 index 0c54c5bde..000000000 Binary files a/packages/website/public/images/token_icons/NANJ.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NAVI.png b/packages/website/public/images/token_icons/NAVI.png deleted file mode 100644 index 3dc359c47..000000000 Binary files a/packages/website/public/images/token_icons/NAVI.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NCT.png b/packages/website/public/images/token_icons/NCT.png deleted file mode 100644 index 879c8d085..000000000 Binary files a/packages/website/public/images/token_icons/NCT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NDC.png b/packages/website/public/images/token_icons/NDC.png deleted file mode 100644 index b16890ca3..000000000 Binary files a/packages/website/public/images/token_icons/NDC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NEXO.png b/packages/website/public/images/token_icons/NEXO.png deleted file mode 100644 index f6459a39f..000000000 Binary files a/packages/website/public/images/token_icons/NEXO.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/NMR.png b/packages/website/public/images/token_icons/NMR.png deleted file mode 100644 index 8767f019a..000000000 Binary files a/packages/website/public/images/token_icons/NMR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/OAX.png b/packages/website/public/images/token_icons/OAX.png deleted file mode 100644 index 7a53e71af..000000000 Binary files a/packages/website/public/images/token_icons/OAX.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/OCC.png b/packages/website/public/images/token_icons/OCC.png deleted file mode 100644 index 049812208..000000000 Binary files a/packages/website/public/images/token_icons/OCC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/OMG.png b/packages/website/public/images/token_icons/OMG.png deleted file mode 100644 index c1552abf2..000000000 Binary files a/packages/website/public/images/token_icons/OMG.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/OMX.png b/packages/website/public/images/token_icons/OMX.png deleted file mode 100644 index 0c3485d79..000000000 Binary files a/packages/website/public/images/token_icons/OMX.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/PAL.png b/packages/website/public/images/token_icons/PAL.png deleted file mode 100644 index 211e42ea5..000000000 Binary files a/packages/website/public/images/token_icons/PAL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/PAY.png b/packages/website/public/images/token_icons/PAY.png deleted file mode 100644 index d9ffca043..000000000 Binary files a/packages/website/public/images/token_icons/PAY.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/PKT.png b/packages/website/public/images/token_icons/PKT.png deleted file mode 100644 index 169390929..000000000 Binary files a/packages/website/public/images/token_icons/PKT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/PLAY.png b/packages/website/public/images/token_icons/PLAY.png deleted file mode 100644 index 9b141a6ec..000000000 Binary files a/packages/website/public/images/token_icons/PLAY.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/PLU.png b/packages/website/public/images/token_icons/PLU.png deleted file mode 100644 index 6f9b0344e..000000000 Binary files a/packages/website/public/images/token_icons/PLU.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/POLY.png b/packages/website/public/images/token_icons/POLY.png deleted file mode 100644 index 03ded07dc..000000000 Binary files a/packages/website/public/images/token_icons/POLY.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/QTUM.png b/packages/website/public/images/token_icons/QTUM.png deleted file mode 100644 index b7f09dfd2..000000000 Binary files a/packages/website/public/images/token_icons/QTUM.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/REN.png b/packages/website/public/images/token_icons/REN.png deleted file mode 100644 index f70856e9f..000000000 Binary files a/packages/website/public/images/token_icons/REN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/REP.png b/packages/website/public/images/token_icons/REP.png deleted file mode 100644 index c767f4b6f..000000000 Binary files a/packages/website/public/images/token_icons/REP.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/REQ.png b/packages/website/public/images/token_icons/REQ.png deleted file mode 100644 index 3c0e8ed9a..000000000 Binary files a/packages/website/public/images/token_icons/REQ.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/RFR.png b/packages/website/public/images/token_icons/RFR.png deleted file mode 100644 index 05d71c4f3..000000000 Binary files a/packages/website/public/images/token_icons/RFR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/RLC.png b/packages/website/public/images/token_icons/RLC.png deleted file mode 100644 index c21dee4c4..000000000 Binary files a/packages/website/public/images/token_icons/RLC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ROL.png b/packages/website/public/images/token_icons/ROL.png deleted file mode 100644 index 430fa9af1..000000000 Binary files a/packages/website/public/images/token_icons/ROL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/RVT.png b/packages/website/public/images/token_icons/RVT.png deleted file mode 100644 index 4f32c0e87..000000000 Binary files a/packages/website/public/images/token_icons/RVT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SALT.png b/packages/website/public/images/token_icons/SALT.png deleted file mode 100644 index ce425eed5..000000000 Binary files a/packages/website/public/images/token_icons/SALT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SAN.png b/packages/website/public/images/token_icons/SAN.png deleted file mode 100644 index 36aa6a554..000000000 Binary files a/packages/website/public/images/token_icons/SAN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SIG.png b/packages/website/public/images/token_icons/SIG.png deleted file mode 100644 index 33af7f085..000000000 Binary files a/packages/website/public/images/token_icons/SIG.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SNGLS.png b/packages/website/public/images/token_icons/SNGLS.png deleted file mode 100644 index 16bf28819..000000000 Binary files a/packages/website/public/images/token_icons/SNGLS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SNT.png b/packages/website/public/images/token_icons/SNT.png deleted file mode 100644 index 6f072cffb..000000000 Binary files a/packages/website/public/images/token_icons/SNT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SPANK.png b/packages/website/public/images/token_icons/SPANK.png deleted file mode 100644 index aab84ef90..000000000 Binary files a/packages/website/public/images/token_icons/SPANK.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SPN.png b/packages/website/public/images/token_icons/SPN.png deleted file mode 100644 index c569c4687..000000000 Binary files a/packages/website/public/images/token_icons/SPN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SS.png b/packages/website/public/images/token_icons/SS.png deleted file mode 100644 index 127e42c45..000000000 Binary files a/packages/website/public/images/token_icons/SS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/STORJ.png b/packages/website/public/images/token_icons/STORJ.png deleted file mode 100644 index 4539afb4a..000000000 Binary files a/packages/website/public/images/token_icons/STORJ.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SUB.png b/packages/website/public/images/token_icons/SUB.png deleted file mode 100644 index 633bcbbd1..000000000 Binary files a/packages/website/public/images/token_icons/SUB.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SWT.png b/packages/website/public/images/token_icons/SWT.png deleted file mode 100644 index 910d9fdbf..000000000 Binary files a/packages/website/public/images/token_icons/SWT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/SXDT.png b/packages/website/public/images/token_icons/SXDT.png deleted file mode 100644 index b37e92050..000000000 Binary files a/packages/website/public/images/token_icons/SXDT.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TAAS.png b/packages/website/public/images/token_icons/TAAS.png deleted file mode 100644 index 266e3690b..000000000 Binary files a/packages/website/public/images/token_icons/TAAS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TIME.png b/packages/website/public/images/token_icons/TIME.png deleted file mode 100644 index 920cc7636..000000000 Binary files a/packages/website/public/images/token_icons/TIME.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TKN.png b/packages/website/public/images/token_icons/TKN.png deleted file mode 100644 index e1b276416..000000000 Binary files a/packages/website/public/images/token_icons/TKN.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TRL.png b/packages/website/public/images/token_icons/TRL.png deleted file mode 100644 index afd5815ba..000000000 Binary files a/packages/website/public/images/token_icons/TRL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TRST.png b/packages/website/public/images/token_icons/TRST.png deleted file mode 100644 index 0ba34778f..000000000 Binary files a/packages/website/public/images/token_icons/TRST.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/TRX.png b/packages/website/public/images/token_icons/TRX.png deleted file mode 100644 index 56338957c..000000000 Binary files a/packages/website/public/images/token_icons/TRX.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/UPP.png b/packages/website/public/images/token_icons/UPP.png deleted file mode 100644 index bc90081a0..000000000 Binary files a/packages/website/public/images/token_icons/UPP.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/VSL.png b/packages/website/public/images/token_icons/VSL.png deleted file mode 100644 index b3d0950d2..000000000 Binary files a/packages/website/public/images/token_icons/VSL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/WAND.png b/packages/website/public/images/token_icons/WAND.png deleted file mode 100644 index e22531e21..000000000 Binary files a/packages/website/public/images/token_icons/WAND.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/WETH.png b/packages/website/public/images/token_icons/WETH.png deleted file mode 100644 index bc8beae8b..000000000 Binary files a/packages/website/public/images/token_icons/WETH.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/WINGS.png b/packages/website/public/images/token_icons/WINGS.png deleted file mode 100644 index c0a9ce527..000000000 Binary files a/packages/website/public/images/token_icons/WINGS.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/WTC.png b/packages/website/public/images/token_icons/WTC.png deleted file mode 100644 index 06aac0617..000000000 Binary files a/packages/website/public/images/token_icons/WTC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/WYV.png b/packages/website/public/images/token_icons/WYV.png deleted file mode 100644 index d63aa857b..000000000 Binary files a/packages/website/public/images/token_icons/WYV.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/XAUR.png b/packages/website/public/images/token_icons/XAUR.png deleted file mode 100644 index c356cc9dd..000000000 Binary files a/packages/website/public/images/token_icons/XAUR.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/XNK.png b/packages/website/public/images/token_icons/XNK.png deleted file mode 100644 index 04b2ebf80..000000000 Binary files a/packages/website/public/images/token_icons/XNK.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/XSC.png b/packages/website/public/images/token_icons/XSC.png deleted file mode 100644 index 7f70686aa..000000000 Binary files a/packages/website/public/images/token_icons/XSC.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/XYO.png b/packages/website/public/images/token_icons/XYO.png deleted file mode 100644 index 81314d2ff..000000000 Binary files a/packages/website/public/images/token_icons/XYO.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ZIL.png b/packages/website/public/images/token_icons/ZIL.png deleted file mode 100644 index 197227803..000000000 Binary files a/packages/website/public/images/token_icons/ZIL.png and /dev/null differ diff --git a/packages/website/public/images/token_icons/ZRX.png b/packages/website/public/images/token_icons/ZRX.png deleted file mode 100644 index 8ed9a984b..000000000 Binary files a/packages/website/public/images/token_icons/ZRX.png and /dev/null differ diff --git a/packages/website/public/images/toshi_logo.jpg b/packages/website/public/images/toshi_logo.jpg deleted file mode 100644 index 3cf451d24..000000000 Binary files a/packages/website/public/images/toshi_logo.jpg and /dev/null differ diff --git a/packages/website/public/images/trade_arrows.png b/packages/website/public/images/trade_arrows.png deleted file mode 100644 index 21a8e1881..000000000 Binary files a/packages/website/public/images/trade_arrows.png and /dev/null differ diff --git a/packages/website/public/images/unlock-mm.png b/packages/website/public/images/unlock-mm.png deleted file mode 100644 index 531c95dd2..000000000 Binary files a/packages/website/public/images/unlock-mm.png and /dev/null differ diff --git a/packages/website/public/images/wrapped_eth_gray.png b/packages/website/public/images/wrapped_eth_gray.png deleted file mode 100644 index 397b31b1c..000000000 Binary files a/packages/website/public/images/wrapped_eth_gray.png and /dev/null differ diff --git a/packages/website/public/images/zrx_ecosystem.svg b/packages/website/public/images/zrx_ecosystem.svg deleted file mode 100644 index 3b4fa0a6e..000000000 --- a/packages/website/public/images/zrx_ecosystem.svg +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/packages/website/public/images/zrx_pie_chart.png b/packages/website/public/images/zrx_pie_chart.png deleted file mode 100644 index 16f5126b9..000000000 Binary files a/packages/website/public/images/zrx_pie_chart.png and /dev/null differ diff --git a/packages/website/public/images/zrx_token.png b/packages/website/public/images/zrx_token.png deleted file mode 100644 index 8c71798de..000000000 Binary files a/packages/website/public/images/zrx_token.png and /dev/null differ diff --git a/packages/website/public/index.html b/packages/website/public/index.html deleted file mode 100644 index dd17beebc..000000000 --- a/packages/website/public/index.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - 0x: The Protocol for Trading Tokens - - - - - - - - - - - - - - - - - - - - - - -
- -
- - - - - - - - - - - diff --git a/packages/website/public/js/rollbar.umd.min.js b/packages/website/public/js/rollbar.umd.min.js deleted file mode 100644 index 2734bb8be..000000000 --- a/packages/website/public/js/rollbar.umd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.rollbar=e():t.rollbar=e()}(this,function(){return function(t){function e(n){if(r[n])return r[n].exports;var o=r[n]={exports:{},id:n,loaded:!1};return t[n].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var r={};return e.m=t,e.c=r,e.p="",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e,r){"use strict";var n=r(2),o="undefined"!=typeof window&&window._rollbarConfig,i=o&&o.globalAlias||"Rollbar",a="undefined"!=typeof window&&window[i]&&"function"==typeof window[i].shimId&&void 0!==window[i].shimId();if("undefined"==typeof window||window._rollbarStartTime||(window._rollbarStartTime=(new Date).getTime()),!a&&o){var s=new n(o);window[i]=s}else"undefined"!=typeof window?(window.rollbar=n,window._rollbarDidLoad=!0):"undefined"!=typeof self&&(self.rollbar=n,self._rollbarDidLoad=!0);t.exports=n},function(t,e,r){"use strict";function n(t,e){this.options=c.merge(x,t);var r=new l(this.options,h,d);this.client=e||new u(this.options,r,p,"browser");var n="undefined"!=typeof window&&window||"undefined"!=typeof self&&self,o="undefined"!=typeof document&&document;i(this.client.notifier),a(this.client.queue),(this.options.captureUncaught||this.options.handleUncaughtExceptions)&&(f.captureUncaughtExceptions(n,this),f.wrapGlobals(n,this)),(this.options.captureUnhandledRejections||this.options.handleUnhandledRejections)&&f.captureUnhandledRejections(n,this),this.instrumenter=new w(this.options,this.client.telemeter,this,n,o),this.instrumenter.instrument()}function o(t){var e="Rollbar is not initialized";p.error(e),t&&t(new Error(e))}function i(t){t.addTransform(m.handleItemWithError).addTransform(m.ensureItemHasSomethingToSay).addTransform(m.addBaseInfo).addTransform(m.addRequestInfo(window)).addTransform(m.addClientInfo(window)).addTransform(m.addPluginInfo(window)).addTransform(m.addBody).addTransform(g.addMessageWithError).addTransform(g.addTelemetryData).addTransform(g.addConfigToPayload).addTransform(m.scrubPayload).addTransform(g.userTransform(p)).addTransform(g.itemToPayload)}function a(t){t.addPredicate(y.checkLevel).addPredicate(v.checkIgnore).addPredicate(y.userCheckIgnore(p)).addPredicate(y.urlIsNotBlacklisted(p)).addPredicate(y.urlIsWhitelisted(p)).addPredicate(y.messageIsIgnored(p))}function s(t){for(var e=0,r=t.length;e=1&&r>e}function o(t,e,r,n,o,a,s){var u=null;return r&&(r=new Error(r)),r||n||(u=i(t,e,o,a,s)),{error:r,shouldSend:n,payload:u}}function i(t,e,r,n,o){var i,a=e.environment||e.payload&&e.payload.environment;i=o?"item per minute limit reached, ignoring errors until timeout":"maxItems has been hit, ignoring errors until reset.";var s={body:{message:{body:i,extra:{maxItems:r,itemsPerMinute:n}}},language:"javascript",environment:a,notifier:{version:e.notifier&&e.notifier.version||e.version}};return"browser"===t?(s.platform="browser",s.framework="browser-js",s.notifier.name="rollbar-browser-js"):"server"===t?(s.framework=e.framework||"node-js",s.notifier.name=e.notifier.name):"react-native"===t&&(s.framework=e.framework||"react-native",s.notifier.name=e.notifier.name),s}r.globalSettings={startTime:(new Date).getTime(),maxItems:void 0,itemsPerMinute:void 0},r.prototype.configureGlobal=function(t){void 0!==t.startTime&&(r.globalSettings.startTime=t.startTime),void 0!==t.maxItems&&(r.globalSettings.maxItems=t.maxItems),void 0!==t.itemsPerMinute&&(r.globalSettings.itemsPerMinute=t.itemsPerMinute)},r.prototype.shouldSend=function(t,e){e=e||(new Date).getTime(),e-this.startTime>=6e4&&(this.startTime=e,this.perMinCounter=0);var i=r.globalSettings.maxItems,a=r.globalSettings.itemsPerMinute;if(n(t,i,this.counter))return o(this.platform,this.platformOptions,i+" max items reached",!1);if(n(t,a,this.perMinCounter))return o(this.platform,this.platformOptions,a+" items per minute reached",!1);this.counter++,this.perMinCounter++;var s=!n(t,i,this.counter),u=s;return s=s&&!n(t,a,this.perMinCounter),o(this.platform,this.platformOptions,null,s,i,a,u)},r.prototype.setPlatformOptions=function(t,e){this.platform=t,this.platformOptions=e},t.exports=r},function(t,e,r){"use strict";function n(t,e,r,n){this.rateLimiter=t,this.api=e,this.logger=r,this.options=n,this.predicates=[],this.pendingItems=[],this.pendingRequests=[],this.retryQueue=[],this.retryHandle=null,this.waitCallback=null,this.waitIntervalID=null}var o=r(6);n.prototype.configure=function(t){this.api&&this.api.configure(t);var e=this.options;return this.options=o.merge(e,t),this},n.prototype.addPredicate=function(t){return o.isFunction(t)&&this.predicates.push(t),this},n.prototype.addPendingItem=function(t){this.pendingItems.push(t)},n.prototype.removePendingItem=function(t){var e=this.pendingItems.indexOf(t);e!==-1&&this.pendingItems.splice(e,1)},n.prototype.addItem=function(t,e,r,n){e&&o.isFunction(e)||(e=function(){});var i=this._applyPredicates(t);if(i.stop)return this.removePendingItem(n),void e(i.err);this._maybeLog(t,r),this.removePendingItem(n),this.pendingRequests.push(t);try{this._makeApiRequest(t,function(r,n){this._dequeuePendingRequest(t),e(r,n)}.bind(this))}catch(r){this._dequeuePendingRequest(t),e(r)}},n.prototype.wait=function(t){o.isFunction(t)&&(this.waitCallback=t,this._maybeCallWait()||(this.waitIntervalID&&(this.waitIntervalID=clearInterval(this.waitIntervalID)),this.waitIntervalID=setInterval(function(){this._maybeCallWait()}.bind(this),500)))},n.prototype._applyPredicates=function(t){for(var e=null,r=0,n=this.predicates.length;rs)?(a=e.path,e.path=a.substring(0,s)+i+"&"+a.substring(s+1)):u!==-1?(a=e.path,e.path=a.substring(0,u)+i+a.substring(u)):e.path=e.path+i}function y(t,e){if(e=e||t.protocol,!e&&t.port&&(80===t.port?e="http:":443===t.port&&(e="https:")),e=e||"https:",!t.hostname)return null;var r=e+"//"+t.hostname;return t.port&&(r=r+":"+t.port),t.path&&(r+=t.path),r}function b(t,e){var r,n;try{r=R.stringify(t)}catch(o){if(e&&a(e))try{r=e(t)}catch(t){n=t}else n=o}return{error:n,value:r}}function w(t){var e,r;try{e=R.parse(t)}catch(t){r=t}return{error:r,value:e}}function _(t,e,r,n,o,i,a,s){var u={url:e||"",line:r,column:n};u.func=s.guessFunctionName(u.url,u.line),u.context=s.gatherContext(u.url,u.line);var c=document&&document.location&&document.location.href,l=window&&window.navigator&&window.navigator.userAgent;return{mode:i,message:o?String(o):t||a,url:c,stack:[u],useragent:l}}function x(t,e){return function(r,n){try{e(r,n)}catch(e){t.error(e)}}}function k(t,e,r,n,o){for(var a,s,u,c,l,p,f=[],h=0,m=t.length;h0&&(u=j(u),u.extraArgs=f);var b={message:a,err:s,custom:u,timestamp:N(),callback:c,uuid:d()};return u&&void 0!==u.level&&(b.level=u.level,delete u.level),n&&l&&(b.request=l),o&&(b.lambdaContext=o),b._originalArgs=t,b}function E(t,e){if(t){var r=e.split("."),n=t;try{for(var o=0,i=r.length;o500&&(n=n.substr(0,497)+"...");break;case"null":n="null";break;case"undefined":n="undefined";break;case"symbol":n=n.toString()}o.push(n)}return o.join(" ")}function N(){return Date.now?+Date.now():+new Date}function C(t,e){if(t&&t.user_ip&&e!==!0){var r=t.user_ip;if(e)try{var n;if(r.indexOf(".")!==-1)n=r.split("."),n.pop(),n.push("0"),r=n.join(".");else if(r.indexOf(":")!==-1){if(n=r.split(":"),n.length>2){var o=n.slice(0,3),i=o[2].indexOf("/");i!==-1&&(o[2]=o[2].substring(0,i));var a="0000:0000:0000:0000:0000";r=o.concat(a).join(":")}}else r=null}catch(t){r=null}else r=null;t.user_ip=r}}var j=r(7),R={},A=!1;n();var q={debug:0,info:1,warning:2,error:3,critical:4},D={strictMode:!1,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};t.exports={isType:o,typeName:i,isFunction:a,isNativeFunction:s,isIterable:l,isError:p,merge:j,traverse:f,redact:h,uuid4:d,LEVELS:q,sanitizeUrl:m,addParamsAndAccessTokenToPath:v,formatUrl:y,stringify:b,jsonParse:w,makeUnhandledStackInfo:_,createItem:k,get:E,set:I,scrub:T,formatArgsAsString:L,now:N,filterIp:C}},function(t,e){"use strict";function r(){var t,e,n,o,a,s={},u=null,c=arguments.length;for(t=0;tn&&(o=this.maxQueueSize-n),this.maxQueueSize=n,this.queue.splice(0,o)},n.prototype.copyEvents=function(){return Array.prototype.slice.call(this.queue,0)},n.prototype.capture=function(t,e,r,n,a){var s={level:o(t,r),type:t,timestamp_ms:a||i.now(),body:e,source:"client"};n&&(s.uuid=n);try{if(i.isFunction(this.options.filterTelemetry)&&this.options.filterTelemetry(s))return!1}catch(t){this.options.filterTelemetry=null}return this.push(s),s},n.prototype.captureEvent=function(t,e,r){return this.capture("manual",t,e,r)},n.prototype.captureError=function(t,e,r,n){var o={message:t.message||String(t)};return t.stack&&(o.stack=t.stack),this.capture("error",o,e,r,n)},n.prototype.captureLog=function(t,e,r,n){return this.capture("log",{message:t},e,r,n)},n.prototype.captureNetwork=function(t,e,r,n){e=e||"xhr",t.subtype=t.subtype||e,n&&(t.request=n);var o=this.levelFromStatus(t.status_code);return this.capture("network",t,o,r)},n.prototype.levelFromStatus=function(t){return t>=200&&t<400?"info":0===t||t>=400?"error":"info"},n.prototype.captureDom=function(t,e,r,n,o){var i={subtype:t,element:e};return void 0!==r&&(i.value=r),void 0!==n&&(i.checked=n),this.capture("dom",i,"info",o)},n.prototype.captureNavigation=function(t,e,r){return this.capture("navigation",{from:t,to:e},"info",r)},n.prototype.captureDomContentLoaded=function(t){return this.capture("navigation",{subtype:"DOMContentLoaded"},"info",void 0,t&&t.getTime())},n.prototype.captureLoad=function(t){return this.capture("navigation",{subtype:"load"},"info",void 0,t&&t.getTime())},n.prototype.captureConnectivityChange=function(t,e){return this.captureNetwork({change:t},"connectivity",e)},n.prototype._captureRollbarItem=function(t){if(this.options.includeItemsInTelemetry)return t.err?this.captureError(t.err,t.level,t.uuid,t.timestamp):t.message?this.captureLog(t.message,t.level,t.uuid,t.timestamp):t.custom?this.capture("log",t.custom,t.level,t.uuid,t.timestamp):void 0},n.prototype.push=function(t){this.queue.push(t),this.queue.length>this.maxQueueSize&&this.queue.shift()},t.exports=n},function(t,e,r){"use strict";function n(t,e,r,n){this.options=t,this.transport=e,this.url=r,this.jsonBackup=n,this.accessToken=t.accessToken,this.transportOptions=o(t,r)}function o(t,e){return a.getTransportFromOptions(t,s,e)}var i=r(6),a=r(12),s={hostname:"api.rollbar.com",path:"/api/1/item/",search:null,version:"1",protocol:"https:",port:443};n.prototype.postItem=function(t,e){var r=a.transportOptions(this.transportOptions,"POST"),n=a.buildPayload(this.accessToken,t,this.jsonBackup);this.transport.post(this.accessToken,r,n,e)},n.prototype.configure=function(t){var e=this.oldOptions;return this.options=i.merge(e,t),this.transportOptions=o(this.options,this.url),void 0!==this.options.accessToken&&(this.accessToken=this.options.accessToken),this},t.exports=n},function(t,e,r){"use strict";function n(t,e,r){if(!s.isType(e.context,"string")){var n=s.stringify(e.context,r);n.error?e.context="Error: could not serialize 'context'":e.context=n.value||"",e.context.length>255&&(e.context=e.context.substr(0,255))}return{access_token:t,data:e}}function o(t,e,r){var n=e.hostname,o=e.protocol,i=e.port,a=e.path,s=e.search,u=t.proxy;if(t.endpoint){var c=r.parse(t.endpoint);n=c.hostname,o=c.protocol,i=c.port,a=c.pathname,s=c.search}return{hostname:n,protocol:o,port:i,path:a,search:s,proxy:u}}function i(t,e){var r=t.protocol||"https:",n=t.port||("http:"===r?80:"https:"===r?443:void 0),o=t.hostname,i=t.path;return t.search&&(i+=t.search),t.proxy&&(i=r+"//"+o+i,o=t.proxy.host||t.proxy.hostname,n=t.proxy.port,r=t.proxy.protocol||r),{protocol:r,hostname:o,path:i,port:n,method:e}}function a(t,e){var r=/\/$/.test(t),n=/^\//.test(e);return r&&n?e=e.substring(1):r||n||(e="/"+e),t+e}var s=r(6);t.exports={buildPayload:n,getTransportFromOptions:o,transportOptions:i,appendPathToPath:a}},function(t,e,r){"use strict";function n(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.error(s.formatArgsAsString(t)):console.error.apply(console,t)}function o(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.info(s.formatArgsAsString(t)):console.info.apply(console,t)}function i(){var t=Array.prototype.slice.call(arguments,0);t.unshift("Rollbar:"),a.ieVersion()<=8?console.log(s.formatArgsAsString(t)):console.log.apply(console,t)}r(14);var a=r(15),s=r(6);t.exports={error:n,info:o,log:i}},function(t,e){!function(t){ -"use strict";t.console||(t.console={});for(var e,r,n=t.console,o=function(){},i=["memory"],a="assert,clear,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,markTimeline,profile,profiles,profileEnd,show,table,time,timeEnd,timeline,timelineEnd,timeStamp,trace,warn".split(",");e=i.pop();)n[e]||(n[e]={});for(;r=a.pop();)n[r]||(n[r]=o)}("undefined"==typeof window?this:window)},function(t,e){"use strict";function r(){var t;if(!document)return t;for(var e=3,r=document.createElement("div"),n=r.getElementsByTagName("i");r.innerHTML="",n[0];);return e>4?e:t}var n={ieVersion:r};t.exports=n},function(t,e){"use strict";function r(t,e,r){if(t){var o;"function"==typeof e._rollbarOldOnError?o=e._rollbarOldOnError:t.onerror&&!t.onerror.belongsToShim&&(o=t.onerror,e._rollbarOldOnError=o);var i=function(){var r=Array.prototype.slice.call(arguments,0);n(t,e,o,r)};i.belongsToShim=r,t.onerror=i}}function n(t,e,r,n){t._rollbarWrappedError&&(n[4]||(n[4]=t._rollbarWrappedError),n[5]||(n[5]=t._rollbarWrappedError._rollbarContext),t._rollbarWrappedError=null),e.handleUncaughtException.apply(e,n),r&&r.apply(t,n)}function o(t,e,r){if(t){"function"==typeof t._rollbarURH&&t._rollbarURH.belongsToShim&&t.removeEventListener("unhandledrejection",t._rollbarURH);var n=function(t){var r,n,o;try{r=t.reason}catch(t){r=void 0}try{n=t.promise}catch(t){n="[unhandledrejection] error getting `promise` from event"}try{o=t.detail,!r&&o&&(r=o.reason,n=o.promise)}catch(t){o="[unhandledrejection] error getting `detail` from event"}r||(r="[unhandledrejection] error getting `reason` from event"),e&&e.handleUnhandledRejection&&e.handleUnhandledRejection(r,n)};n.belongsToShim=r,t._rollbarURH=n,t.addEventListener("unhandledrejection",n)}}function i(t,e,r){if(t){var n,o,i="EventTarget,Window,Node,ApplicationCache,AudioTrackList,ChannelMergerNode,CryptoOperation,EventSource,FileReader,HTMLUnknownElement,IDBDatabase,IDBRequest,IDBTransaction,KeyOperation,MediaController,MessagePort,ModalWindow,Notification,SVGElementInstance,Screen,TextTrack,TextTrackCue,TextTrackList,WebSocket,WebSocketWorker,Worker,XMLHttpRequest,XMLHttpRequestEventTarget,XMLHttpRequestUpload".split(",");for(n=0;n=400&&t.status<600}function c(t,e){var r=new Error(t);return r.code=e||"ENOTFOUND",r}var l=r(6),p=r(18),f=r(13);t.exports={get:n,post:o}},function(t,e,r){"use strict";function n(t,e){return[t,f.stringify(t,e)]}function o(t,e){var r=t.length;return r>2*e?t.slice(0,e).concat(t.slice(r-e)):t}function i(t,e,r){r="undefined"==typeof r?30:r;var n,i=t.data.body;if(i.trace_chain)for(var a=i.trace_chain,s=0;st?e.slice(0,t-3).concat("..."):e}function s(t,e,r){function n(e,r,o){switch(f.typeName(r)){case"string":return a(t,r);case"object":case"array":return f.traverse(r,n,o);default:return r}}return e=f.traverse(e,n,[]),[e,f.stringify(e,r)]}function u(t){return t.exception&&(delete t.exception.description,t.exception.message=a(255,t.exception.message)),t.frames=o(t.frames,1),t}function c(t,e){var r=t.data.body;if(r.trace_chain)for(var n=r.trace_chain,o=0;oe}function p(t,e,r){r="undefined"==typeof r?524288:r;for(var o,a,u,p=[n,i,s.bind(null,1024),s.bind(null,512),s.bind(null,256),c];o=p.shift();)if(a=o(t,e),t=a[0],u=a[1],u.error||!l(u.value,r))return u;return u}var f=r(6);t.exports={truncate:p,raw:n,truncateFrames:i,truncateStrings:s,maybeTruncateValue:a}},function(t,e){"use strict";function r(t){var e,r,n={protocol:null,auth:null,host:null,path:null,hash:null,href:t,hostname:null,port:null,pathname:null,search:null,query:null};if(e=t.indexOf("//"),e!==-1?(n.protocol=t.substring(0,e),r=e+2):r=0,e=t.indexOf("@",r),e!==-1&&(n.auth=t.substring(r,e),r=e+1),e=t.indexOf("/",r),e===-1){if(e=t.indexOf("?",r),e===-1)return e=t.indexOf("#",r),e===-1?n.host=t.substring(r):(n.host=t.substring(r,e),n.hash=t.substring(e)),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),n;n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e}else n.host=t.substring(r,e),n.hostname=n.host.split(":")[0],n.port=n.host.split(":")[1],n.port&&(n.port=parseInt(n.port,10)),r=e;if(e=t.indexOf("#",r),e===-1?n.path=t.substring(r):(n.path=t.substring(r,e),n.hash=t.substring(e)),n.path){var o=n.path.split("?");n.pathname=o[0],n.query=o[1],n.search=n.query?"?"+n.query:null}return n}t.exports={parse:r}},function(t,e,r){"use strict";function n(t,e,r){if(t.data=t.data||{},t.err)try{t.stackInfo=t.err._savedStackTrace||d.parse(t.err)}catch(e){m.error("Error while parsing the error object.",e);try{t.message=t.err.message||t.err.description||t.message||String(t.err)}catch(e){t.message=String(t.err)||String(e)}delete t.err}r(null,t)}function o(t,e,r){t.message||t.stackInfo||t.custom||r(new Error("No message, stack info, or custom data"),null),r(null,t)}function i(t,e,r){var n=e.payload&&e.payload.environment||e.environment;t.data=h.merge(t.data,{environment:n,level:t.level,endpoint:e.endpoint,platform:"browser",framework:"browser-js",language:"javascript",server:{},uuid:t.uuid,notifier:{name:"rollbar-browser-js",version:e.version}}),r(null,t)}function a(t){return function(e,r,n){if(!t||!t.location)return n(null,e);var o="$remote_ip";r.captureIp?r.captureIp!==!0&&(o+="_anonymize"):o=null,h.set(e,"data.request",{url:t.location.href,query_string:t.location.search,user_ip:o}),n(null,e)}}function s(t){return function(e,r,n){if(!t)return n(null,e);var o=t.navigator||{},i=t.screen||{};h.set(e,"data.client",{runtime_ms:e.timestamp-t._rollbarStartTime,timestamp:Math.round(e.timestamp/1e3),javascript:{browser:o.userAgent,language:o.language,cookie_enabled:o.cookieEnabled,screen:{width:i.width,height:i.height}}}),n(null,e)}}function u(t){return function(e,r,n){if(!t||!t.navigator)return n(null,e);for(var o,i=[],a=t.navigator.plugins||[],s=0,u=a.length;s-1&&(e=e.replace(/eval code/g,"eval").replace(/(\(eval at [^\()]*)|(\)\,.*$)/g,""));var r=e.replace(/^\s+/,"").replace(/\(eval code/g,"(").split(/\s+/).slice(1),n=this.extractLocation(r.pop()),o=r.join(" ")||void 0,i="eval"===n[0]?void 0:n[0];return new t(o,void 0,i,n[1],n[2],e)},this)},parseFFOrSafari:function(n){var o=r(n.stack.split("\n"),function(t){return!t.match(i)},this);return e(o,function(e){if(e.indexOf(" > eval")>-1&&(e=e.replace(/ line (\d+)(?: > eval line \d+)* > eval\:\d+\:\d+/g,":$1")),e.indexOf("@")===-1&&e.indexOf(":")===-1)return new t(e);var r=e.split("@"),n=this.extractLocation(r.pop()),o=r.shift()||void 0;return new t(o,void 0,n[0],n[1],n[2],e)},this)},parseOpera:function(t){return!t.stacktrace||t.message.indexOf("\n")>-1&&t.message.split("\n").length>t.stacktrace.split("\n").length?this.parseOpera9(t):t.stack?this.parseOpera11(t):this.parseOpera10(t)},parseOpera9:function(e){for(var r=/Line (\d+).*script (?:in )?(\S+)/i,n=e.message.split("\n"),o=[],i=2,a=n.length;i/,"$2").replace(/\([^\)]*\)/g,"")||void 0;i.match(/\(([^\)]*)\)/)&&(r=i.replace(/^[^\(]+\(([^\)]*)\)$/,"$1"));var s=void 0===r||"[arguments not available]"===r?void 0:r.split(",");return new t(a,s,o[0],o[1],o[2],e)},this)}}})},function(t,e,r){var n,o,i;!function(r,a){"use strict";o=[],n=a,i="function"==typeof n?n.apply(e,o):n,!(void 0!==i&&(t.exports=i))}(this,function(){"use strict";function t(t){return!isNaN(parseFloat(t))&&isFinite(t)}function e(t,e,r,n,o,i){void 0!==t&&this.setFunctionName(t),void 0!==e&&this.setArgs(e),void 0!==r&&this.setFileName(r),void 0!==n&&this.setLineNumber(n),void 0!==o&&this.setColumnNumber(o),void 0!==i&&this.setSource(i)}return e.prototype={getFunctionName:function(){return this.functionName},setFunctionName:function(t){this.functionName=String(t)},getArgs:function(){return this.args},setArgs:function(t){if("[object Array]"!==Object.prototype.toString.call(t))throw new TypeError("Args must be an Array");this.args=t},getFileName:function(){return this.fileName},setFileName:function(t){this.fileName=String(t)},getLineNumber:function(){return this.lineNumber},setLineNumber:function(e){if(!t(e))throw new TypeError("Line Number must be a Number");this.lineNumber=Number(e)},getColumnNumber:function(){return this.columnNumber},setColumnNumber:function(e){if(!t(e))throw new TypeError("Column Number must be a Number");this.columnNumber=Number(e)},getSource:function(){return this.source},setSource:function(t){this.source=String(t)},toString:function(){var e=this.getFunctionName()||"{anonymous}",r="("+(this.getArgs()||[]).join(",")+")",n=this.getFileName()?"@"+this.getFileName():"",o=t(this.getLineNumber())?":"+this.getLineNumber():"",i=t(this.getColumnNumber())?":"+this.getColumnNumber():"";return e+r+n+o+i}},e})},function(t,e,r){"use strict";function n(t,e,r){var n=e.payload||{};n.body&&delete n.body;var o=u.merge(t.data,n);t._isUncaught&&(o._isUncaught=!0),t._originalArgs&&(o._originalArgs=t._originalArgs),r(null,o)}function o(t,e,r){t.telemetryEvents&&u.set(t,"data.body.telemetry",t.telemetryEvents),r(null,t)}function i(t,e,r){if(!t.message)return void r(null,t);var n="data.body.trace_chain.0",o=u.get(t,n);if(o||(n="data.body.trace",o=u.get(t,n)),o){if(!o.exception||!o.exception.description)return u.set(t,n+".exception.description",t.message),void r(null,t);var i=u.get(t,n+".extra")||{},a=u.merge(i,{message:t.message});u.set(t,n+".extra",a)}r(null,t)}function a(t){return function(e,r,n){var o=u.merge(e);try{u.isFunction(r.transform)&&r.transform(o.data)}catch(o){return r.transform=null,t.error("Error while calling custom transform() function. Removing custom transform().",o),void n(null,e)}n(null,o)}}function s(t,e,r){if(!e.sendConfig)return r(null,t);var n="_rollbarConfig",o=u.get(t,"data.custom")||{};o[n]=e,t.data.custom=o,r(null,t)}var u=r(6);t.exports={itemToPayload:n,addTelemetryData:o,addMessageWithError:i,userTransform:a,addConfigToPayload:s}},function(t,e,r){"use strict";function n(t,e){return!o.get(e,"plugins.jquery.ignoreAjaxErrors")||!o.get(t,"body.message.extra.isAjax")}var o=r(6);t.exports={checkIgnore:n}},function(t,e,r){"use strict";function n(t,e){var r=t.level,n=c.LEVELS[r]||0,o=e.reportLevel,i=c.LEVELS[o]||0;return!(n=0&&t.options[t.selectedIndex]&&this.captureDomEvent("input",t,t.options[t.selectedIndex].value)},s.prototype.captureDomEvent=function(t,e,r,n){if(void 0!==r)if(this.scrubTelemetryInputs||"password"===l.getElementType(e))r="[scrubbed]";else{var o=l.describeElement(e);this.telemetryScrubber?this.telemetryScrubber(o)&&(r="[scrubbed]"):this.defaultValueScrubber(o)&&(r="[scrubbed]")}var i=l.elementArrayToString(l.treeToArray(e));this.telemeter.captureDom(t,i,r,n)},s.prototype.deinstrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;r&&o(this.replacements,"navigation")},s.prototype.instrumentNavigation=function(){var t=this._window.chrome,e=t&&t.app&&t.app.runtime,r=!e&&this._window.history&&this._window.history.pushState;if(r){var o=this;n(this._window,"onpopstate",function(t){return function(){var e=o._location.href;o.handleUrlChange(o._lastHref,e),t&&t.apply(this,arguments)}},this.replacements,"navigation"),n(this._window.history,"pushState",function(t){return function(){var e=arguments.length>2?arguments[2]:void 0;return e&&o.handleUrlChange(o._lastHref,e+""),t.apply(this,arguments)}},this.replacements,"navigation")}},s.prototype.handleUrlChange=function(t,e){var r=c.parse(this._location.href),n=c.parse(e),o=c.parse(t);this._lastHref=e,r.protocol===n.protocol&&r.host===n.host&&(e=n.path+(n.hash||"")),r.protocol===o.protocol&&r.host===o.host&&(t=o.path+(o.hash||"")),this.telemeter.captureNavigation(t,e)},s.prototype.deinstrumentConnectivity=function(){("addEventListener"in this._window||"body"in this._document)&&(this._window.addEventListener?this.removeListeners("connectivity"):o(this.replacements,"connectivity"))},s.prototype.instrumentConnectivity=function(){if("addEventListener"in this._window||"body"in this._document)if(this._window.addEventListener)this.addListener("connectivity",this._window,"online",void 0,function(){this.telemeter.captureConnectivityChange("online")}.bind(this),!0),this.addListener("connectivity",this._window,"offline",void 0,function(){this.telemeter.captureConnectivityChange("offline")}.bind(this),!0);else{var t=this;n(this._document.body,"ononline",function(e){return function(){t.telemeter.captureConnectivityChange("online"),e&&e.apply(this,arguments)}},this.replacements,"connectivity"),n(this._document.body,"onoffline",function(e){return function(){t.telemeter.captureConnectivityChange("offline"),e&&e.apply(this,arguments)}},this.replacements,"connectivity")}},s.prototype.addListener=function(t,e,r,n,o,i){e.addEventListener?(e.addEventListener(r,o,i),this.eventRemovers[t].push(function(){e.removeEventListener(r,o,i)})):n&&(e.attachEvent(n,o),this.eventRemovers[t].push(function(){e.detachEvent(n,o)}))},s.prototype.removeListeners=function(t){for(var e;this.eventRemovers[t].length;)(e=this.eventRemovers[t].shift())()},t.exports=s},function(t,e){"use strict";function r(t){return(t.getAttribute("type")||"").toLowerCase()}function n(t,e,n){if(t.tagName.toLowerCase()!==e.toLowerCase())return!1;if(!n)return!0;t=r(t);for(var o=0;o ",i=o.length,a=[],u=0,c=t.length-1;c>=0;c--){if(e=s(t[c]),r=u+a.length*i+e.length,c=n+3){a.unshift("...");break}a.unshift(e),u+=e.length}return a.join(o)}function s(t){if(!t||!t.tagName)return"";var e=[t.tagName];t.id&&e.push("#"+t.id),t.classes&&e.push("."+t.classes.join("."));for(var r=0;r Promise; - private _userAddressIfExists: string; - private _ledgerSubprovider: LedgerSubprovider; - private _defaultGasPrice: BigNumber; - private _watchGasPriceIntervalId: NodeJS.Timer; - private _injectedProviderIfExists?: InjectedProvider; - private static _getNameGivenProvider(provider: Provider): string { - const providerType = utils.getProviderType(provider); - const providerNameIfExists = providerToName[providerType]; - if (_.isUndefined(providerNameIfExists)) { - return constants.PROVIDER_NAME_GENERIC; - } - return providerNameIfExists; - } - private static async _getProviderAsync( - injectedProviderIfExists?: InjectedProvider, - networkIdIfExists?: number, - shouldUserLedgerProvider: boolean = false, - ): Promise<[Provider, LedgerSubprovider | undefined]> { - const doesInjectedProviderExist = !_.isUndefined(injectedProviderIfExists); - const isNetworkIdAvailable = !_.isUndefined(networkIdIfExists); - const publicNodeUrlsIfExistsForNetworkId = configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists]; - const isPublicNodeAvailableForNetworkId = !_.isUndefined(publicNodeUrlsIfExistsForNetworkId); - - if (shouldUserLedgerProvider && isNetworkIdAvailable) { - const isU2FSupported = await utils.isU2FSupportedAsync(); - if (!isU2FSupported) { - throw new Error('Cannot update providerType to LEDGER without U2F support'); - } - const provider = new Web3ProviderEngine(); - const ledgerWalletConfigs = { - networkId: networkIdIfExists, - ledgerEthereumClientFactoryAsync: ledgerEthereumBrowserClientFactoryAsync, - }; - const ledgerSubprovider = new LedgerSubprovider(ledgerWalletConfigs); - provider.addProvider(ledgerSubprovider); - provider.addProvider(new FilterSubprovider()); - const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkIdIfExists], publicNodeUrl => { - return new RPCSubprovider(publicNodeUrl); - }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders)); - provider.start(); - return [provider, ledgerSubprovider]; - } else if (doesInjectedProviderExist && isPublicNodeAvailableForNetworkId) { - // We catch all requests involving a users account and send it to the injectedWeb3 - // instance. All other requests go to the public hosted node. - const provider = new Web3ProviderEngine(); - const providerName = this._getNameGivenProvider(injectedProviderIfExists); - // Wrap Metamask in a compatability wrapper MetamaskSubprovider (to handle inconsistencies) - const signerSubprovider = - providerName === constants.PROVIDER_NAME_METAMASK - ? new MetamaskSubprovider(injectedProviderIfExists) - : new SignerSubprovider(injectedProviderIfExists); - provider.addProvider(signerSubprovider); - provider.addProvider(new FilterSubprovider()); - const rpcSubproviders = _.map(publicNodeUrlsIfExistsForNetworkId, publicNodeUrl => { - return new RPCSubprovider(publicNodeUrl); - }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders)); - provider.start(); - return [provider, undefined]; - } else if (doesInjectedProviderExist) { - // Since no public node for this network, all requests go to injectedWeb3 instance - return [injectedProviderIfExists, undefined]; - } else { - // If no injectedWeb3 instance, all requests fallback to our public hosted mainnet/testnet node - // We do this so that users can still browse the 0x Portal DApp even if they do not have web3 - // injected into their browser. - const provider = new Web3ProviderEngine(); - provider.addProvider(new FilterSubprovider()); - const networkId = constants.NETWORK_ID_MAINNET; - const rpcSubproviders = _.map(configs.PUBLIC_NODE_URLS_BY_NETWORK_ID[networkId], publicNodeUrl => { - return new RPCSubprovider(publicNodeUrl); - }); - provider.addProvider(new RedundantSubprovider(rpcSubproviders)); - provider.start(); - return [provider, undefined]; - } - } - constructor(dispatcher: Dispatcher) { - this._dispatcher = dispatcher; - const defaultGasPrice = GWEI_IN_WEI * 40; - this._defaultGasPrice = new BigNumber(defaultGasPrice); - // We need a unique reference to this function so we can use it to unsubcribe. - this._injectedProviderUpdateHandler = this._handleInjectedProviderUpdateAsync.bind(this); - // tslint:disable-next-line:no-floating-promises - this._onPageLoadInitFireAndForgetAsync(); - } - public async networkIdUpdatedFireAndForgetAsync(newNetworkId: number): Promise { - const isConnected = !_.isUndefined(newNetworkId); - if (!isConnected) { - this.networkId = newNetworkId; - this._dispatcher.encounteredBlockchainError(BlockchainErrs.DisconnectedFromEthereumNode); - this._dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - } else if (this.networkId !== newNetworkId) { - this.networkId = newNetworkId; - this._dispatcher.encounteredBlockchainError(BlockchainErrs.NoError); - await this.fetchTokenInformationAsync(); - await this._rehydrateStoreWithContractEventsAsync(); - } - } - public async userAddressUpdatedFireAndForgetAsync(newUserAddress: string): Promise { - if (this._userAddressIfExists !== newUserAddress) { - this._userAddressIfExists = newUserAddress; - await this.fetchTokenInformationAsync(); - await this._rehydrateStoreWithContractEventsAsync(); - } - } - public async nodeVersionUpdatedFireAndForgetAsync(nodeVersion: string): Promise { - if (this.nodeVersion !== nodeVersion) { - this.nodeVersion = nodeVersion; - } - } - public async isAddressInTokenRegistryAsync(tokenAddress: string): Promise { - const tokens = fakeTokenRegistry[this.networkId]; - const tokenIfExists = _.find(tokens, { address: tokenAddress }); - - // HACK: Override token addresses on testnets - const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; - let isTokenAddressInOverrides = false; - if (!_.isUndefined(tokenSymbolToAddressOverrides)) { - isTokenAddressInOverrides = _.values(tokenSymbolToAddressOverrides).includes(tokenAddress); - } - return !_.isUndefined(tokenIfExists) || isTokenAddressInOverrides; - } - public getLedgerDerivationPathIfExists(): string { - if (_.isUndefined(this._ledgerSubprovider)) { - return undefined; - } - const path = this._ledgerSubprovider.getPath(); - return path; - } - public updateLedgerDerivationPathIfExists(path: string): void { - if (_.isUndefined(this._ledgerSubprovider)) { - return; // noop - } - this._ledgerSubprovider.setPath(path); - } - public async updateProviderToLedgerAsync(networkId: number): Promise { - const shouldPollUserAddress = false; - const shouldUserLedgerProvider = true; - await this._resetOrInitializeAsync(networkId, shouldPollUserAddress, shouldUserLedgerProvider); - } - public async updateProviderToInjectedAsync(): Promise { - const shouldPollUserAddress = true; - const shouldUserLedgerProvider = false; - this._dispatcher.updateBlockchainIsLoaded(false); - // We don't want to be out of sync with the network the injected provider declares. - const networkId = await this._getInjectedProviderNetworkIdIfExistsAsync(); - await this._resetOrInitializeAsync(networkId, shouldPollUserAddress, shouldUserLedgerProvider); - } - public async setProxyAllowanceAsync(token: Token, amountInBaseUnits: BigNumber): Promise { - utils.assert(this.isValidAddress(token.address), BlockchainCallErrs.TokenAddressIsInvalid); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - utils.assert(!_.isUndefined(this._contractWrappers), 'Contract Wrappers must be instantiated.'); - - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.erc20Token.setProxyAllowanceAsync( - token.address, - this._userAddressIfExists, - amountInBaseUnits, - { - gasPrice: this._defaultGasPrice, - }, - ); - await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - } - public async sendAsync(toAddress: string, amountInBaseUnits: BigNumber): Promise { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - const transaction = { - from: this._userAddressIfExists, - to: toAddress, - value: amountInBaseUnits, - gasPrice: this._defaultGasPrice, - }; - this._showFlashMessageIfLedger(); - const txHash = await this._web3Wrapper.sendTransactionAsync(transaction); - await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - const etherScanLinkIfExists = sharedUtils.getEtherScanLinkIfExists( - txHash, - this.networkId, - EtherscanLinkSuffixes.Tx, - ); - this._dispatcher.showFlashMessage( - React.createElement(AssetSendCompleted, { - etherScanLinkIfExists, - toAddress, - amountInBaseUnits, - decimals: constants.DECIMAL_PLACES_ETH, - symbol: constants.ETHER_SYMBOL, - }), - ); - } - public async transferAsync(token: Token, toAddress: string, amountInBaseUnits: BigNumber): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.erc20Token.transferAsync( - token.address, - this._userAddressIfExists, - toAddress, - amountInBaseUnits, - { - gasPrice: this._defaultGasPrice, - }, - ); - await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - const etherScanLinkIfExists = sharedUtils.getEtherScanLinkIfExists( - txHash, - this.networkId, - EtherscanLinkSuffixes.Tx, - ); - this._dispatcher.showFlashMessage( - React.createElement(AssetSendCompleted, { - etherScanLinkIfExists, - toAddress, - amountInBaseUnits, - decimals: token.decimals, - symbol: token.symbol, - }), - ); - } - public async fillOrderAsync(signedOrder: SignedOrder, fillTakerTokenAmount: BigNumber): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.exchange.fillOrderAsync( - signedOrder, - fillTakerTokenAmount, - this._userAddressIfExists, - { - gasPrice: this._defaultGasPrice, - }, - ); - const receipt = await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - const logs: Array> = receipt.logs as any; - const logFill = _.find(logs, { event: ExchangeEvents.Fill }); - const args = (logFill.args as any) as ExchangeFillEventArgs; - const takerAssetFilledAmount = args.takerAssetFilledAmount; - return takerAssetFilledAmount; - } - public async cancelOrderAsync(signedOrder: SignedOrder): Promise { - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.exchange.cancelOrderAsync(signedOrder, { - gasPrice: this._defaultGasPrice, - }); - const receipt = await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - const logs: Array> = receipt.logs as any; - const logCancel = _.find(logs, { event: ExchangeEvents.Cancel }); - const args = (logCancel.args as any) as ExchangeCancelEventArgs; - const cancelledOrderHash = args.orderHash; - return cancelledOrderHash; - } - public async getUnavailableTakerAmountAsync(orderHash: string): Promise { - utils.assert(orderHashUtils.isValidOrderHash(orderHash), 'Must be valid orderHash'); - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - const unavailableTakerAmount = await this._contractWrappers.exchange.getFilledTakerAssetAmountAsync(orderHash); - return unavailableTakerAmount; - } - public getExchangeContractAddressIfExists(): string | undefined { - return this._contractWrappers.exchange.address; - } - public async validateFillOrderThrowIfInvalidAsync( - signedOrder: SignedOrder, - fillTakerTokenAmount: BigNumber, - takerAddress: string, - ): Promise { - await this._contractWrappers.exchange.validateFillOrderThrowIfInvalidAsync( - signedOrder, - fillTakerTokenAmount, - takerAddress, - ); - } - public isValidAddress(address: string): boolean { - const lowercaseAddress = address.toLowerCase(); - return Web3Wrapper.isAddress(lowercaseAddress); - } - public async isValidSignatureAsync(data: string, signature: string, signerAddress: string): Promise { - const result = await signatureUtils.isValidSignatureAsync( - this._contractWrappers.getProvider(), - data, - signature, - signerAddress, - ); - return result; - } - public async pollTokenBalanceAsync(token: Token): Promise { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - const [currBalance] = await this.getTokenBalanceAndAllowanceAsync(this._userAddressIfExists, token.address); - - const newTokenBalancePromise = new Promise((resolve: (balance: BigNumber) => void, reject) => { - const tokenPollInterval = intervalUtils.setAsyncExcludingInterval( - async () => { - const [balance] = await this.getTokenBalanceAndAllowanceAsync( - this._userAddressIfExists, - token.address, - ); - if (!balance.eq(currBalance)) { - intervalUtils.clearAsyncExcludingInterval(tokenPollInterval); - resolve(balance); - } - }, - 5000, - (err: Error) => { - logUtils.log(`Polling tokenBalance failed: ${err}`); - intervalUtils.clearAsyncExcludingInterval(tokenPollInterval); - reject(err); - }, - ); - }); - - return newTokenBalancePromise; - } - public async signOrderHashAsync(orderHash: string): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - const makerAddress = this._userAddressIfExists; - // If makerAddress is undefined, this means they have a web3 instance injected into their browser - // but no account addresses associated with it. - if (_.isUndefined(makerAddress)) { - throw new Error('Tried to send a sign request but user has no associated addresses'); - } - this._showFlashMessageIfLedger(); - const provider = this._contractWrappers.getProvider(); - const ecSignatureString = await signatureUtils.ecSignHashAsync(provider, orderHash, makerAddress); - this._dispatcher.updateSignature(ecSignatureString); - return ecSignatureString; - } - public async mintTestTokensAsync(token: Token): Promise { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - const mintableContract = await this._instantiateContractIfExistsAsync(MintableArtifacts, token.address); - this._showFlashMessageIfLedger(); - await mintableContract.mint(constants.MINT_AMOUNT, { - from: this._userAddressIfExists, - gasPrice: this._defaultGasPrice, - }); - } - public async getBalanceInWeiAsync(owner: string): Promise { - const balanceInWei = await this._web3Wrapper.getBalanceInWeiAsync(owner); - return balanceInWei; - } - public async convertEthToWrappedEthTokensAsync(etherTokenAddress: string, amount: BigNumber): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.etherToken.depositAsync( - etherTokenAddress, - amount, - this._userAddressIfExists, - { - gasPrice: this._defaultGasPrice, - }, - ); - await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - } - public async convertWrappedEthTokensToEthAsync(etherTokenAddress: string, amount: BigNumber): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - this._showFlashMessageIfLedger(); - const txHash = await this._contractWrappers.etherToken.withdrawAsync( - etherTokenAddress, - amount, - this._userAddressIfExists, - { - gasPrice: this._defaultGasPrice, - }, - ); - await this._showEtherScanLinkAndAwaitTransactionMinedAsync(txHash); - } - public async doesContractExistAtAddressAsync(address: string): Promise { - const doesContractExist = await this._web3Wrapper.doesContractExistAtAddressAsync(address); - return doesContractExist; - } - public async getCurrentUserTokenBalanceAndAllowanceAsync(tokenAddress: string): Promise { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - const tokenBalanceAndAllowance = await this.getTokenBalanceAndAllowanceAsync( - this._userAddressIfExists, - tokenAddress, - ); - return tokenBalanceAndAllowance; - } - public async getTokenBalanceAndAllowanceAsync( - ownerAddressIfExists: string, - tokenAddress: string, - ): Promise<[BigNumber, BigNumber]> { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - - if (_.isUndefined(ownerAddressIfExists)) { - const zero = new BigNumber(0); - return [zero, zero]; - } - let balance = new BigNumber(0); - let allowance = new BigNumber(0); - if (this._doesUserAddressExist()) { - [balance, allowance] = await Promise.all([ - this._contractWrappers.erc20Token.getBalanceAsync(tokenAddress, ownerAddressIfExists), - this._contractWrappers.erc20Token.getProxyAllowanceAsync(tokenAddress, ownerAddressIfExists), - ]); - } - return [balance, allowance]; - } - public async getUserAccountsAsync(): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - const provider = this._contractWrappers.getProvider(); - const web3Wrapper = new Web3Wrapper(provider); - const userAccountsIfExists = await web3Wrapper.getAvailableAddressesAsync(); - return userAccountsIfExists; - } - // HACK: When a user is using a Ledger, we simply dispatch the selected userAddress, which - // by-passes the web3Wrapper logic for updating the prevUserAddress. We therefore need to - // manually update it. This should only be called by the LedgerConfigDialog. - public updateWeb3WrapperPrevUserAddress(newUserAddress: string): void { - this._blockchainWatcher.updatePrevUserAddress(newUserAddress); - } - public destroy(): void { - this._blockchainWatcher.destroy(); - if (this._injectedProviderObservable) { - this._injectedProviderObservable.unsubscribe(this._injectedProviderUpdateHandler); - } - this._stopWatchingExchangeLogFillEvents(); - this._stopWatchingGasPrice(); - } - public async fetchTokenInformationAsync(): Promise { - utils.assert( - !_.isUndefined(this.networkId), - 'Cannot call fetchTokenInformationAsync if disconnected from Ethereum node', - ); - - this._dispatcher.updateBlockchainIsLoaded(false); - - const tokenRegistryTokensByAddress = await this._getTokenRegistryTokensByAddressAsync(); - - const trackedTokensByAddress = _.isUndefined(this._userAddressIfExists) - ? {} - : trackedTokenStorage.getTrackedTokensByAddress(this._userAddressIfExists, this.networkId); - const tokenRegistryTokens = _.values(tokenRegistryTokensByAddress); - const tokenRegistryTokenSymbols = _.map(tokenRegistryTokens, t => t.symbol); - const defaultTrackedTokensInRegistry = _.intersection( - tokenRegistryTokenSymbols, - configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, - ); - const currentTimestamp = moment().unix(); - if (defaultTrackedTokensInRegistry.length !== configs.DEFAULT_TRACKED_TOKEN_SYMBOLS.length) { - this._dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - this._dispatcher.encounteredBlockchainError(BlockchainErrs.DefaultTokensNotInTokenRegistry); - const err = new Error( - `Default tracked tokens (${JSON.stringify( - configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, - )}) not found in tokenRegistry: ${JSON.stringify(tokenRegistryTokens)}`, - ); - errorReporter.report(err); - return; - } - if (_.isEmpty(trackedTokensByAddress)) { - _.each(configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, symbol => { - const token = _.find(tokenRegistryTokens, t => t.symbol === symbol); - token.trackedTimestamp = currentTimestamp; - trackedTokensByAddress[token.address] = token; - }); - if (!_.isUndefined(this._userAddressIfExists)) { - _.each(trackedTokensByAddress, (token: Token) => { - trackedTokenStorage.addTrackedTokenToUser(this._userAddressIfExists, this.networkId, token); - }); - } - } else { - // Properly set all tokenRegistry tokens `trackedTimestamp` if they are in the existing trackedTokens array - _.each(trackedTokensByAddress, (trackedToken: Token, address: string) => { - if (!_.isUndefined(tokenRegistryTokensByAddress[address])) { - tokenRegistryTokensByAddress[address].trackedTimestamp = trackedToken.trackedTimestamp; - } - }); - } - const allTokensByAddress = { - ...tokenRegistryTokensByAddress, - ...trackedTokensByAddress, - }; - const allTokens = _.values(allTokensByAddress); - const mostPopularTradingPairTokens: Token[] = [ - _.find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[0] }), - _.find(allTokens, { symbol: configs.DEFAULT_TRACKED_TOKEN_SYMBOLS[1] }), - ]; - const sideToAssetToken: SideToAssetToken = { - [Side.Deposit]: { - address: mostPopularTradingPairTokens[0].address, - }, - [Side.Receive]: { - address: mostPopularTradingPairTokens[1].address, - }, - }; - this._dispatcher.batchDispatch(allTokensByAddress, this.networkId, this._userAddressIfExists, sideToAssetToken); - - this._dispatcher.updateBlockchainIsLoaded(true); - } - private async _getInjectedProviderIfExistsAsync(): Promise { - if (!_.isUndefined(this._injectedProviderIfExists)) { - return this._injectedProviderIfExists; - } - let injectedProviderIfExists = (window as any).ethereum; - if (!_.isUndefined(injectedProviderIfExists)) { - if (!_.isUndefined(injectedProviderIfExists.enable)) { - try { - await injectedProviderIfExists.enable(); - } catch (err) { - errorReporter.report(err); - } - } - } else { - const injectedWeb3IfExists = (window as any).web3; - if (!_.isUndefined(injectedWeb3IfExists) && !_.isUndefined(injectedWeb3IfExists.currentProvider)) { - injectedProviderIfExists = injectedWeb3IfExists.currentProvider; - } else { - return undefined; - } - } - this._injectedProviderIfExists = injectedProviderIfExists; - return injectedProviderIfExists; - } - private async _getInjectedProviderNetworkIdIfExistsAsync(): Promise { - // If the user has an injectedWeb3 instance that is disconnected from a backing - // Ethereum node, this call will throw. We need to handle this case gracefully - const injectedProviderIfExists = await this._getInjectedProviderIfExistsAsync(); - let networkIdIfExists: number; - if (!_.isUndefined(injectedProviderIfExists)) { - try { - const injectedWeb3Wrapper = new Web3Wrapper(injectedProviderIfExists); - networkIdIfExists = await injectedWeb3Wrapper.getNetworkIdAsync(); - } catch (err) { - // Ignore error and proceed with networkId undefined - } - } - return networkIdIfExists; - } - private async _showEtherScanLinkAndAwaitTransactionMinedAsync( - txHash: string, - ): Promise { - const etherScanLinkIfExists = sharedUtils.getEtherScanLinkIfExists( - txHash, - this.networkId, - EtherscanLinkSuffixes.Tx, - ); - this._dispatcher.showFlashMessage( - React.createElement(TransactionSubmitted, { - etherScanLinkIfExists, - }), - ); - const provider = this._contractWrappers.getProvider(); - const web3Wrapper = new Web3Wrapper(provider); - const exchangeAbi = this._contractWrappers.exchange.abi; - web3Wrapper.abiDecoder.addABI(exchangeAbi); - const receipt = await web3Wrapper.awaitTransactionSuccessAsync(txHash); - return receipt; - } - private _doesUserAddressExist(): boolean { - return !_.isUndefined(this._userAddressIfExists); - } - private async _handleInjectedProviderUpdateAsync(update: InjectedProviderUpdate): Promise { - if (update.networkVersion === 'loading' || !_.isUndefined(this._ledgerSubprovider)) { - return; - } - const updatedNetworkId = _.parseInt(update.networkVersion); - if (this.networkId === updatedNetworkId) { - return; - } - const shouldPollUserAddress = true; - const shouldUserLedgerProvider = false; - await this._resetOrInitializeAsync(updatedNetworkId, shouldPollUserAddress, shouldUserLedgerProvider); - } - private async _rehydrateStoreWithContractEventsAsync(): Promise { - // Ensure we are only ever listening to one set of events - this._stopWatchingExchangeLogFillEvents(); - - if (!this._doesUserAddressExist()) { - return; // short-circuit - } - - if (!_.isUndefined(this._contractWrappers)) { - // Since we do not have an index on the `taker` address and want to show - // transactions where an account is either the `maker` or `taker`, we loop - // through all fill events, and filter/cache them client-side. - const filterIndexObj = {}; - await this._startListeningForExchangeLogFillEventsAsync(filterIndexObj); - } - } - private async _startListeningForExchangeLogFillEventsAsync(indexFilterValues: IndexedFilterValues): Promise { - utils.assert(!_.isUndefined(this._contractWrappers), 'ContractWrappers must be instantiated.'); - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - // Fetch historical logs - await this._fetchHistoricalExchangeLogFillEventsAsync(indexFilterValues); - - // Start a subscription for new logs - this._contractWrappers.exchange.subscribe( - ExchangeEvents.Fill, - indexFilterValues, - async (err: Error, decodedLogEvent: DecodedLogEvent) => { - if (err) { - // Note: it's not entirely clear from the documentation which - // errors will be thrown by `watch`. For now, let's log the error - // to rollbar and stop watching when one occurs - errorReporter.report(err); // fire and forget - return; - } else { - const decodedLog = decodedLogEvent.log; - if (!this._doesLogEventInvolveUser(decodedLog)) { - return; // We aren't interested in the fill event - } - this._updateLatestFillsBlockIfNeeded(decodedLog.blockNumber); - const fill = await this._convertDecodedLogToFillAsync(decodedLog); - if (decodedLogEvent.isRemoved) { - tradeHistoryStorage.removeFillFromUser(this._userAddressIfExists, this.networkId, fill); - } else { - tradeHistoryStorage.addFillToUser(this._userAddressIfExists, this.networkId, fill); - } - } - }, - ); - } - private async _fetchHistoricalExchangeLogFillEventsAsync(indexFilterValues: IndexedFilterValues): Promise { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - const fromBlock = tradeHistoryStorage.getFillsLatestBlock(this._userAddressIfExists, this.networkId); - const blockRange: BlockRange = { - fromBlock, - toBlock: 'latest' as BlockParam, - }; - const decodedLogs = await this._contractWrappers.exchange.getLogsAsync( - ExchangeEvents.Fill, - blockRange, - indexFilterValues, - ); - for (const decodedLog of decodedLogs) { - if (!this._doesLogEventInvolveUser(decodedLog)) { - continue; // We aren't interested in the fill event - } - this._updateLatestFillsBlockIfNeeded(decodedLog.blockNumber); - const fill = await this._convertDecodedLogToFillAsync(decodedLog); - tradeHistoryStorage.addFillToUser(this._userAddressIfExists, this.networkId, fill); - } - } - private async _convertDecodedLogToFillAsync(decodedLog: LogWithDecodedArgs): Promise { - const args = decodedLog.args; - const blockTimestamp = await this._web3Wrapper.getBlockTimestampAsync(decodedLog.blockHash); - const makerToken = assetDataUtils.decodeERC20AssetData(args.makerAssetData).tokenAddress; - const takerToken = assetDataUtils.decodeERC20AssetData(args.takerAssetData).tokenAddress; - const fill = { - filledTakerTokenAmount: args.takerAssetFilledAmount, - filledMakerTokenAmount: args.makerAssetFilledAmount, - logIndex: decodedLog.logIndex, - maker: args.makerAddress, - orderHash: args.orderHash, - taker: args.takerAddress, - makerToken, - takerToken, - paidMakerFee: args.makerFeePaid, - paidTakerFee: args.takerFeePaid, - transactionHash: decodedLog.transactionHash, - blockTimestamp, - }; - return fill; - } - private _doesLogEventInvolveUser(decodedLog: LogWithDecodedArgs): boolean { - const args = decodedLog.args; - const isUserMakerOrTaker = args.maker === this._userAddressIfExists || args.taker === this._userAddressIfExists; - return isUserMakerOrTaker; - } - private _updateLatestFillsBlockIfNeeded(blockNumber: number): void { - utils.assert(this._doesUserAddressExist(), BlockchainCallErrs.UserHasNoAssociatedAddresses); - - const isBlockPending = _.isNull(blockNumber); - if (!isBlockPending) { - // Hack: I've observed the behavior where a client won't register certain fill events - // and lowering the cache blockNumber fixes the issue. As a quick fix for now, simply - // set the cached blockNumber 50 below the one returned. This way, upon refreshing, a user - // would still attempt to re-fetch events from the previous 50 blocks, but won't need to - // re-fetch all events in all blocks. - // TODO: Debug if this is a race condition, and apply a more precise fix - const blockNumberToSet = - blockNumber - BLOCK_NUMBER_BACK_TRACK < 0 ? 0 : blockNumber - BLOCK_NUMBER_BACK_TRACK; - tradeHistoryStorage.setFillsLatestBlock(this._userAddressIfExists, this.networkId, blockNumberToSet); - } - } - private _stopWatchingExchangeLogFillEvents(): void { - this._contractWrappers.exchange.unsubscribeAll(); - } - private async _getTokenRegistryTokensByAddressAsync(): Promise { - let tokenRegistryTokens; - if (this.networkId === constants.NETWORK_ID_MAINNET) { - tokenRegistryTokens = await backendClient.getTokenInfosAsync(); - } else { - tokenRegistryTokens = fakeTokenRegistry[this.networkId]; - const tokenSymbolToAddressOverrides = tokenAddressOverrides[this.networkId]; - if (!_.isUndefined(tokenAddressOverrides)) { - // HACK: Override token addresses on testnets - tokenRegistryTokens = _.map(tokenRegistryTokens, (token: ZeroExToken) => { - const overrideIfExists = tokenSymbolToAddressOverrides[token.symbol]; - if (!_.isUndefined(overrideIfExists)) { - return { - ...token, - address: overrideIfExists, - }; - } - return token; - }); - } - } - const tokenByAddress: TokenByAddress = {}; - _.each(tokenRegistryTokens, (t: ZeroExToken) => { - // HACK: For now we have a hard-coded list of iconUrls for the dummyTokens - // TODO: Refactor this out and pull the iconUrl directly from the TokenRegistry - const iconUrl = utils.getTokenIconUrl(t.symbol); - const token: Token = { - iconUrl, - address: t.address, - name: t.name, - symbol: t.symbol, - decimals: t.decimals, - trackedTimestamp: undefined, - isRegistered: true, - }; - tokenByAddress[token.address] = token; - }); - return tokenByAddress; - } - private async _onPageLoadInitFireAndForgetAsync(): Promise { - await utils.onPageLoadPromise; // wait for page to load - const networkIdIfExists = await this._getInjectedProviderNetworkIdIfExistsAsync(); - this.networkId = !_.isUndefined(networkIdIfExists) ? networkIdIfExists : constants.NETWORK_ID_MAINNET; - const injectedProviderIfExists = await this._getInjectedProviderIfExistsAsync(); - if (!_.isUndefined(injectedProviderIfExists)) { - const injectedProviderObservable = injectedProviderIfExists.publicConfigStore; - if (!_.isUndefined(injectedProviderObservable) && _.isUndefined(this._injectedProviderObservable)) { - this._injectedProviderObservable = injectedProviderObservable; - this._injectedProviderObservable.subscribe(this._injectedProviderUpdateHandler); - } - } - this._updateProviderName(injectedProviderIfExists); - const shouldPollUserAddress = true; - const shouldUseLedgerProvider = false; - this._startWatchingGasPrice(); - await this._resetOrInitializeAsync(this.networkId, shouldPollUserAddress, shouldUseLedgerProvider); - } - private _startWatchingGasPrice(): void { - if (!_.isUndefined(this._watchGasPriceIntervalId)) { - return; // we are already watching - } - const oneMinuteInMs = 60000; - // tslint:disable-next-line:no-floating-promises - this._updateDefaultGasPriceAsync(); - this._watchGasPriceIntervalId = intervalUtils.setAsyncExcludingInterval( - this._updateDefaultGasPriceAsync.bind(this), - oneMinuteInMs, - (err: Error) => { - logUtils.log(`Watching gas price failed: ${err.stack}`); - this._stopWatchingGasPrice(); - }, - ); - } - private _stopWatchingGasPrice(): void { - if (!_.isUndefined(this._watchGasPriceIntervalId)) { - intervalUtils.clearAsyncExcludingInterval(this._watchGasPriceIntervalId); - } - } - private async _resetOrInitializeAsync( - networkId: number, - shouldPollUserAddress: boolean = false, - shouldUserLedgerProvider: boolean = false, - ): Promise { - if (!shouldUserLedgerProvider) { - this._dispatcher.updateBlockchainIsLoaded(false); - } - this._dispatcher.updateUserWeiBalance(undefined); - this.networkId = networkId; - const injectedProviderIfExists = await this._getInjectedProviderIfExistsAsync(); - const [provider, ledgerSubproviderIfExists] = await Blockchain._getProviderAsync( - injectedProviderIfExists, - networkId, - shouldUserLedgerProvider, - ); - this._web3Wrapper = new Web3Wrapper(provider); - this.networkId = await this._web3Wrapper.getNetworkIdAsync(); - if (!_.isUndefined(this._contractWrappers)) { - this._contractWrappers.unsubscribeAll(); - } - const contractWrappersConfig = { - networkId, - }; - this._contractWrappers = new ContractWrappers(provider, contractWrappersConfig); - if (!_.isUndefined(this._blockchainWatcher)) { - this._blockchainWatcher.destroy(); - } - this._blockchainWatcher = new BlockchainWatcher(this._dispatcher, this._web3Wrapper, shouldPollUserAddress); - if (shouldUserLedgerProvider && !_.isUndefined(ledgerSubproviderIfExists)) { - delete this._userAddressIfExists; - this._ledgerSubprovider = ledgerSubproviderIfExists; - this._dispatcher.updateUserAddress(undefined); - this._dispatcher.updateProviderType(ProviderType.Ledger); - } else { - delete this._ledgerSubprovider; - const userAddresses = await this._web3Wrapper.getAvailableAddressesAsync(); - this._userAddressIfExists = userAddresses[0]; - this._dispatcher.updateUserAddress(this._userAddressIfExists); - if (!_.isUndefined(injectedProviderIfExists)) { - this._dispatcher.updateProviderType(ProviderType.Injected); - } - await this.fetchTokenInformationAsync(); - } - await this._blockchainWatcher.startEmittingUserBalanceStateAsync(); - this._dispatcher.updateNetworkId(networkId); - await this._rehydrateStoreWithContractEventsAsync(); - } - private _updateProviderName(injectedProviderIfExists?: InjectedProvider): void { - const doesInjectedProviderExist = !_.isUndefined(injectedProviderIfExists); - const providerName = doesInjectedProviderExist - ? Blockchain._getNameGivenProvider(injectedProviderIfExists) - : constants.PROVIDER_NAME_PUBLIC; - this._dispatcher.updateInjectedProviderName(providerName); - } - private async _instantiateContractIfExistsAsync(artifact: any, address?: string): Promise { - const c = await contract(artifact); - const providerObj = this._web3Wrapper.getProvider(); - c.setProvider(providerObj); - - const artifactNetworkConfigs = artifact.networks[this.networkId]; - let contractAddress; - if (!_.isUndefined(address)) { - contractAddress = address; - } else if (!_.isUndefined(artifactNetworkConfigs)) { - contractAddress = artifactNetworkConfigs.address; - } - - if (!_.isUndefined(contractAddress)) { - const doesContractExist = await this.doesContractExistAtAddressAsync(contractAddress); - if (!doesContractExist) { - logUtils.log(`Contract does not exist: ${artifact.contract_name} at ${contractAddress}`); - throw new Error(BlockchainCallErrs.ContractDoesNotExist); - } - } - - try { - const contractInstance = _.isUndefined(address) ? await c.deployed() : await c.at(address); - return contractInstance; - } catch (err) { - const errMsg = `${err}`; - logUtils.log(`Notice: Error encountered: ${err} ${err.stack}`); - if (_.includes(errMsg, 'not been deployed to detected network')) { - throw new Error(BlockchainCallErrs.ContractDoesNotExist); - } else { - errorReporter.report(err); - throw new Error(BlockchainCallErrs.UnhandledError); - } - } - } - private _showFlashMessageIfLedger(): void { - if (!_.isUndefined(this._ledgerSubprovider)) { - this._dispatcher.showFlashMessage('Confirm the transaction on your Ledger Nano S'); - } - } - private async _updateDefaultGasPriceAsync(): Promise { - try { - const gasInfo = await backendClient.getGasInfoAsync(); - const gasPriceInGwei = new BigNumber(gasInfo.fast / 10); - const gasPriceInWei = gasPriceInGwei.multipliedBy(1000000000); - this._defaultGasPrice = gasPriceInWei; - } catch (err) { - return; - } - } -} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/blockchain_watcher.ts b/packages/website/ts/blockchain_watcher.ts deleted file mode 100644 index 835932dcd..000000000 --- a/packages/website/ts/blockchain_watcher.ts +++ /dev/null @@ -1,86 +0,0 @@ -import { BigNumber, intervalUtils, logUtils } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import { Dispatcher } from 'ts/redux/dispatcher'; - -export class BlockchainWatcher { - private readonly _dispatcher: Dispatcher; - private readonly _web3Wrapper: Web3Wrapper; - private readonly _shouldPollUserAddress: boolean; - private _watchBalanceIntervalId: NodeJS.Timer; - private _prevUserEtherBalanceInWei?: BigNumber; - private _prevUserAddressIfExists: string; - private _prevNodeVersionIfExists: string; - constructor(dispatcher: Dispatcher, web3Wrapper: Web3Wrapper, shouldPollUserAddress: boolean) { - this._dispatcher = dispatcher; - this._shouldPollUserAddress = shouldPollUserAddress; - this._web3Wrapper = web3Wrapper; - } - public destroy(): void { - this._stopEmittingUserBalanceState(); - // HACK: stop() is only available on providerEngine instances - const provider = this._web3Wrapper.getProvider(); - if (!_.isUndefined((provider as any).stop)) { - (provider as any).stop(); - } - } - // This should only be called from the LedgerConfigDialog - public updatePrevUserAddress(userAddress: string): void { - this._prevUserAddressIfExists = userAddress; - } - public async startEmittingUserBalanceStateAsync(): Promise { - if (!_.isUndefined(this._watchBalanceIntervalId)) { - return; // we are already emitting the state - } - this._prevUserEtherBalanceInWei = undefined; - await this._updateBalanceAsync(); - this._watchBalanceIntervalId = intervalUtils.setAsyncExcludingInterval( - this._updateBalanceAsync.bind(this), - 5000, - (err: Error) => { - logUtils.log(`Watching network and balances failed: ${err.stack}`); - this._stopEmittingUserBalanceState(); - }, - ); - } - private async _updateBalanceAsync(): Promise { - const currentNodeVersion = await this._web3Wrapper.getNodeVersionAsync(); - if (this._prevNodeVersionIfExists !== currentNodeVersion) { - this._prevNodeVersionIfExists = currentNodeVersion; - this._dispatcher.updateNodeVersion(currentNodeVersion); - } - - if (this._shouldPollUserAddress) { - const addresses = await this._web3Wrapper.getAvailableAddressesAsync(); - const userAddressIfExists = addresses[0]; - // Update makerAddress on network change - if (this._prevUserAddressIfExists !== userAddressIfExists) { - this._prevUserAddressIfExists = userAddressIfExists; - this._dispatcher.updateUserAddress(userAddressIfExists); - } - - // Check for user ether balance changes - if (!_.isUndefined(userAddressIfExists)) { - await this._updateUserWeiBalanceAsync(userAddressIfExists); - } - } else { - // This logic is primarily for the Ledger, since we don't regularly poll for the address - // we simply update the balance for the last fetched address. - if (!_.isUndefined(this._prevUserAddressIfExists)) { - await this._updateUserWeiBalanceAsync(this._prevUserAddressIfExists); - } - } - } - private async _updateUserWeiBalanceAsync(userAddress: string): Promise { - const balanceInWei = await this._web3Wrapper.getBalanceInWeiAsync(userAddress); - if (_.isUndefined(this._prevUserEtherBalanceInWei) || !balanceInWei.eq(this._prevUserEtherBalanceInWei)) { - this._prevUserEtherBalanceInWei = balanceInWei; - this._dispatcher.updateUserWeiBalance(balanceInWei); - } - } - private _stopEmittingUserBalanceState(): void { - if (!_.isUndefined(this._watchBalanceIntervalId)) { - intervalUtils.clearAsyncExcludingInterval(this._watchBalanceIntervalId); - } - } -} diff --git a/packages/website/ts/components/aboutPageLayout.tsx b/packages/website/ts/components/aboutPageLayout.tsx deleted file mode 100644 index 51c1a661e..000000000 --- a/packages/website/ts/components/aboutPageLayout.tsx +++ /dev/null @@ -1,70 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; -import styled from 'styled-components'; - -import { Button } from 'ts/components/button'; -import { ChapterLink } from 'ts/components/chapter_link'; -import { Column, Section } from 'ts/components/newLayout'; -import { SiteWrap } from 'ts/components/siteWrap'; -import { Heading, Paragraph } from 'ts/components/text'; - -import { addFadeInAnimation } from 'ts/constants/animations'; -import { WebsitePaths } from 'ts/types'; - -interface Props { - title: string; - description: React.ReactNode | string; - linkLabel?: string; - href?: string; - to?: string; - children?: React.ReactNode; -} - -export const AboutPageLayout = (props: Props) => ( - -
- - Mission - Team - Press - Jobs - - - - - {props.title} - - - {props.description} - - - {props.linkLabel && (props.href || props.to) && ( - - {props.linkLabel} - - )} - - -
- - {props.children} -
-); - -const AnimatedHeading = styled(Heading)` - ${addFadeInAnimation('0.5s')}; -`; - -const AnimatedParagraph = styled(Paragraph)` - ${addFadeInAnimation('0.5s', '0.15s')}; -`; - -const AnimatedLink = styled(Button)` - ${addFadeInAnimation('0.6s', '0.3s')}; -`; diff --git a/packages/website/ts/components/animatedChatIcon.tsx b/packages/website/ts/components/animatedChatIcon.tsx deleted file mode 100644 index 770536259..000000000 --- a/packages/website/ts/components/animatedChatIcon.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import * as React from 'react'; -import styled, { keyframes } from 'styled-components'; - -export const AnimatedChatIcon = () => ( - - - - - - - - - - - - - - - - - - - - - - - - - - -); - -const scale = keyframes` - 0% { transform: scale(1.2) } - 15% { transform: scale(1) } - 85% { transform: scale(1) } - 100% { transform: scale(1.2) } -`; - -const fadeInOut = keyframes` - 0%, 30%, 50%, 100% { - transform: initial; - } - - 40% { - transform: translateY(-5px); - } -`; - -const Bubble = styled.g` - animation: ${scale} 4s infinite cubic-bezier(0.175, 0.885, 0.32, 1.275); - transform-origin: 50% 50%; -`; - -const Rays = styled.g` - animation: ${scale} 4s infinite cubic-bezier(0.175, 0.885, 0.32, 1.275); - transform-origin: 50% 50%; -`; - -const Dot = styled.circle<{ delay: number }>` - animation: ${fadeInOut} 4s ${props => `${props.delay}s`} infinite; -`; diff --git a/packages/website/ts/components/animatedCompassIcon.tsx b/packages/website/ts/components/animatedCompassIcon.tsx deleted file mode 100644 index 5388f95ca..000000000 --- a/packages/website/ts/components/animatedCompassIcon.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import * as React from 'react'; -import styled, { keyframes } from 'styled-components'; - -export const AnimatedCompassIcon = () => ( - - - - - - - - - - - - - - - - -); - -const point = keyframes` - 0% { transform: rotate(0deg) } - 20% { transform: rotate(10deg) } - 30% { transform: rotate(30deg) } - 60% { transform: rotate(-20deg) } - 80% { transform: rotate(-20deg) } - 100% { transform: rotate(0deg) } -`; - -const rotate = keyframes` - 0% { transform: rotate(0deg) } - 20% { transform: rotate(-10deg) } - 30% { transform: rotate(-30deg) } - 60% { transform: rotate(20deg) } - 80% { transform: rotate(20deg) } - 100% { transform: rotate(0deg) } -`; - -const Needle = styled.path` - animation: ${point} 5s infinite; - transform-origin: 50% 50%; -`; - -const Dial = styled.g` - animation: ${rotate} 5s infinite; - transform-origin: 50% 50%; -`; diff --git a/packages/website/ts/components/banner.tsx b/packages/website/ts/components/banner.tsx deleted file mode 100644 index ce3fd499a..000000000 --- a/packages/website/ts/components/banner.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -import { colors } from 'ts/style/colors'; - -import { Button } from 'ts/components/button'; -import { ThemeInterface } from 'ts/components/siteWrap'; -import { Paragraph } from 'ts/components/text'; - -import { Column, Section } from 'ts/components/newLayout'; - -interface Props { - heading?: string; - subline?: string; - mainCta?: CTAButton; - secondaryCta?: CTAButton; - theme?: ThemeInterface; -} - -interface CTAButton { - text: string; - href?: string; - onClick?: () => void; - shouldOpenInNewTab?: boolean; -} - -interface BorderProps { - isBottom?: boolean; -} - -export const Banner: React.StatelessComponent = (props: Props) => { - const { heading, subline, mainCta, secondaryCta } = props; - return ( - - - - - - {heading} - - {subline && ( - - {subline} - - )} - - - - {mainCta && ( - - )} - - {secondaryCta && ( - - )} - - - - ); -}; - -const CustomSection = styled(Section)` - color: ${colors.white}; - margin-top: 30px; - - @media (max-width: 900px) { - text-align: center; - - p { - margin-bottom: 30px; - } - - div:last-child { - margin-bottom: 0; - } - } -`; - -const CustomHeading = styled.h2` - font-size: 34px; - font-weight: 400; - margin-bottom: 10px @media (max-width: 768px) { - font-size: 30px; - } -`; - -const ButtonWrap = styled.div` - display: inline-block; - - @media (min-width: 768px) { - * + * { - margin-left: 15px; - } - } - - @media (max-width: 768px) { - a, - button { - display: block; - width: 220px; - } - - * + * { - margin-top: 15px; - } - } -`; - -// Note let's refactor this -// is it absolutely necessary to have a stateless component -// to pass props down into the styled icon? -const Border = styled.div` - position: absolute; - background-image: ${props => - props.isBottom ? 'url(/images/banner/bottomofcta.png);' : 'url(/images/banner/topofcta.png);'}; - background-position: ${props => (props.isBottom ? 'left top' : 'left bottom')}; - left: 0; - width: calc(100% + 214px); - height: 40px; - top: ${props => !props.isBottom && 0}; - bottom: ${props => props.isBottom && 0}; - transform: translate(-112px); - - @media (max-width: 768px) { - width: calc(100% + 82px); - height: 40px; - transform: translate(-41px); - background-size: auto 80px; - } -`; diff --git a/packages/website/ts/components/blockIconLink.tsx b/packages/website/ts/components/blockIconLink.tsx deleted file mode 100644 index ff7712595..000000000 --- a/packages/website/ts/components/blockIconLink.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { History, Location } from 'history'; -import * as React from 'react'; -import { match, withRouter } from 'react-router-dom'; -import styled from 'styled-components'; - -import { Button } from 'ts/components/button'; -import { Icon } from 'ts/components/icon'; - -interface BaseComponentProps { - icon?: string; - iconComponent?: React.ReactNode; - title: string; - linkLabel: string; - linkUrl?: string; - linkAction?: () => void; - history: History; - location: Location; - match: match; -} - -class BaseComponent extends React.PureComponent { - public onClick = (): void => { - const { linkAction, linkUrl } = this.props; - - if (linkAction) { - linkAction(); - } else { - this.props.history.push(linkUrl); - } - }; - - public render(): React.ReactNode { - const { icon, iconComponent, linkUrl, linkAction, title, linkLabel } = this.props; - - return ( - -
- - - {title} - - -
-
- ); - } -} - -export const BlockIconLink = withRouter(BaseComponent); - -const Wrap = styled.div` - width: calc(50% - 15px); - height: 400px; - padding: 40px; - display: flex; - justify-content: center; - align-items: center; - text-align: center; - transition: background-color 0.25s; - background-color: ${props => props.theme.lightBgColor}; - cursor: pointer; - - a, - button { - pointer-events: none; - } - - @media (max-width: 900px) { - width: 100%; - margin-top: 30px; - } - - &:hover { - background-color: #002d28; - } -`; - -const Title = styled.h2` - font-size: 20px; - margin-bottom: 30px; - color: ${props => props.theme.linkColor}; -`; diff --git a/packages/website/ts/components/button.tsx b/packages/website/ts/components/button.tsx deleted file mode 100644 index 31a74e599..000000000 --- a/packages/website/ts/components/button.tsx +++ /dev/null @@ -1,104 +0,0 @@ -import * as React from 'react'; -import { Link as ReactRouterLink } from 'react-router-dom'; -import styled from 'styled-components'; - -import { ThemeInterface } from 'ts/components/siteWrap'; - -import { colors } from 'ts/style/colors'; - -interface ButtonInterface { - bgColor?: string; - borderColor?: string; - color?: string; - children?: React.ReactNode | string; - isTransparent?: boolean; - isNoBorder?: boolean; - isNoPadding?: boolean; - isWithArrow?: boolean; - isAccentColor?: boolean; - hasIcon?: boolean | string; - isInline?: boolean; - href?: string; - type?: string; - target?: string; - to?: string; - onClick?: () => any; - theme?: ThemeInterface; - shouldUseAnchorTag?: boolean; -} - -export const Button: React.StatelessComponent = (props: ButtonInterface) => { - const { children, href, isWithArrow, to, shouldUseAnchorTag, target } = props; - let linkElem; - - if (href || shouldUseAnchorTag) { - linkElem = 'a'; - } - if (to) { - linkElem = ReactRouterLink; - } - - const Component = linkElem ? ButtonBase.withComponent(linkElem) : ButtonBase; - const targetProp = href && target ? { target } : {}; - - return ( - - {children} - - {isWithArrow && ( - - - - )} - - ); -}; - -Button.defaultProps = { - borderColor: 'rgba(255, 255, 255, .4)', -}; - -const ButtonBase = styled.button` - appearance: none; - border: 1px solid transparent; - display: inline-block; - background-color: ${props => props.bgColor || colors.brandLight}; - background-color: ${props => (props.isTransparent || props.isWithArrow) && 'transparent'}; - border-color: ${props => props.isTransparent && !props.isWithArrow && props.borderColor}; - color: ${props => (props.isAccentColor ? props.theme.linkColor : props.color || props.theme.textColor)}; - padding: ${props => !props.isNoPadding && !props.isWithArrow && '18px 30px'}; - white-space: ${props => props.isWithArrow && 'nowrap'}; - text-align: center; - font-size: ${props => (props.isWithArrow ? '20px' : '18px')}; - text-decoration: none; - cursor: pointer; - outline: none; - transition: background-color 0.35s, border-color 0.35s; - - // @todo Refactor to use theme props - ${props => - props.bgColor === 'dark' && - ` - background-color: ${colors.brandDark}; - color: ${colors.white}; - `} - - svg { - margin-left: 9px; - transition: transform 0.5s; - transform: translate3d(-2px, 2px, 0); - } - - path { - fill: ${props => (props.isAccentColor ? props.theme.linkColor : props.color || props.theme.textColor)}; - } - - &:hover { - background-color: ${props => !props.isTransparent && !props.isWithArrow && '#04BEA8'}; - border-color: ${props => props.isTransparent && !props.isNoBorder && !props.isWithArrow && '#00AE99'}; - - svg { - transform: translate3d(2px, -2px, 0); - } - } -`; diff --git a/packages/website/ts/components/chapter_link.tsx b/packages/website/ts/components/chapter_link.tsx deleted file mode 100644 index fd974cec1..000000000 --- a/packages/website/ts/components/chapter_link.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { NavLink as ReactRouterLink } from 'react-router-dom'; -import styled from 'styled-components'; - -export const ChapterLink = styled(ReactRouterLink).attrs({ - activeStyle: { opacity: 1 }, -})` - font-size: 1.222222222rem; - display: block; - opacity: 0.5; - margin-bottom: 1.666666667rem; - - &:hover { - opacity: 1; - } -`; diff --git a/packages/website/ts/components/definition.tsx b/packages/website/ts/components/definition.tsx deleted file mode 100644 index bd7a40425..000000000 --- a/packages/website/ts/components/definition.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -import { Button } from 'ts/components/button'; -import { Icon } from 'ts/components/icon'; -import { Heading, Paragraph } from 'ts/components/text'; - -export interface Action { - label: string; - url?: string; - onClick?: () => void; - shouldUseAnchorTag?: boolean; -} - -interface Props { - isInline?: boolean; - isInlineIcon?: boolean; - isCentered?: boolean; - isWithMargin?: boolean; - icon: string; - iconSize?: 'medium' | 'large' | number; - fontSize?: 'default' | 'medium' | number; - title: string; - titleSize?: 'small' | 'default' | number; - description: React.ReactNode | string; - actions?: Action[]; -} - -export const Definition = (props: Props) => ( - - - - - - {props.title} - - - {typeof props.description === 'string' ? ( - - {props.description} - - ) : ( - <>{props.description} - )} - - {props.actions && ( - - {props.actions.map((item, index) => ( - - ))} - - )} - - -); - -const Wrap = styled.div` - max-width: ${props => props.isInline && '354px'}; - - & + & { - margin-top: ${props => props.isInlineIcon && '120px'}; - margin-top: ${props => props.isWithMargin && '60px'}; - } - - @media (min-width: 768px) { - width: ${props => (props.isInline ? 'calc(33.3333% - 30px)' : '100%')}; - display: ${props => props.isInlineIcon && 'flex'}; - justify-content: ${props => props.isInlineIcon && 'space-between'}; - align-items: ${props => props.isInlineIcon && 'center'}; - text-align: ${props => (props.isInlineIcon || !props.isCentered) && 'left'}; - } - - @media (max-width: 768px) { - margin: 0 auto; - - & + & { - margin-top: ${props => props.isInline && '60px'}; - } - } -`; - -const TextWrap = styled.div` - width: 100%; - max-width: 560px; - - ul { - padding-top: 10px; - padding-left: 1rem; - } - - li { - color: ${props => props.theme.paragraphColor}; - font-size: ${props => `var(--${props.fontSize || 'default'}Paragraph)`}; - font-weight: 300; - list-style: disc; - opacity: 0.75; - line-height: 1.444444444; - margin-bottom: 1rem; - } - - @media (min-width: 768px) { - margin-left: ${props => props.isInlineIcon && '60px'}; - } -`; - -const LinkWrap = styled.div` - margin-top: 60px; - - @media (min-width: 768px) { - display: inline-flex; - - a + a { - margin-left: 60px; - } - } - - @media (max-width: 768px) { - max-width: 250px; - - a + a { - margin-top: 15px; - } - } -`; diff --git a/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx b/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx deleted file mode 100644 index 1c47903db..000000000 --- a/packages/website/ts/components/dialogs/blockchain_err_dialog.tsx +++ /dev/null @@ -1,166 +0,0 @@ -import { colors, Networks } from '@0x/react-shared'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { BlockchainErrs } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface BlockchainErrDialogProps { - blockchain: Blockchain; - blockchainErr: BlockchainErrs; - isOpen: boolean; - userAddress: string; - toggleDialogFn: (isOpen: boolean) => void; - networkId: number; -} - -export class BlockchainErrDialog extends React.Component { - public render(): React.ReactNode { - const dialogActions = [ - , - ]; - - const hasWalletAddress = this.props.userAddress !== ''; - return ( - -
- {this._renderExplanation(hasWalletAddress)} -
-
- ); - } - private _getTitle(hasWalletAddress: boolean): string { - if (this.props.blockchainErr === BlockchainErrs.AContractNotDeployedOnNetwork) { - return '0x smart contracts not found'; - } else if (!hasWalletAddress) { - return 'Enable wallet communication'; - } else if (this.props.blockchainErr === BlockchainErrs.DisconnectedFromEthereumNode) { - return 'Disconnected from Ethereum network'; - } else if (this.props.blockchainErr === BlockchainErrs.DefaultTokensNotInTokenRegistry) { - return 'Default TokenRegistry tokens missing'; - } else { - return 'Unexpected error'; - } - } - private _renderExplanation(hasWalletAddress: boolean): React.ReactNode { - if (this.props.blockchainErr === BlockchainErrs.AContractNotDeployedOnNetwork) { - return this._renderContractsNotDeployedExplanation(); - } else if (!hasWalletAddress) { - return this._renderNoWalletFoundExplanation(); - } else if (this.props.blockchainErr === BlockchainErrs.DisconnectedFromEthereumNode) { - return this._renderDisconnectedFromNode(); - } else if (this.props.blockchainErr === BlockchainErrs.DefaultTokensNotInTokenRegistry) { - return this._renderDefaultTokenNotInTokenRegistry(); - } else { - return this._renderUnexpectedErrorExplanation(); - } - } - private _renderDisconnectedFromNode(): React.ReactNode { - return ( -
- You were disconnected from the backing Ethereum node. If using{' '} - - Metamask - {' '} - or{' '} - - Mist - {' '} - try refreshing the page. If using a locally hosted Ethereum node, make sure it's still running. -
- ); - } - private _renderDefaultTokenNotInTokenRegistry(): React.ReactNode { - return ( -
- The TokenRegistry deployed on your network does not contain the needed default tokens for 0x Portal to - operate. Please try one of the supported networks (Mainnet, Kovan, Ropsten, Rinkeby). If on a local - Testnet, make sure the TokenRegistry contract is deployed and loaded with some default tokens (i.e WETH - & ZRX). -
- ); - } - private _renderUnexpectedErrorExplanation(): React.ReactNode { - return
We encountered an unexpected error. Please try refreshing the page.
; - } - private _renderNoWalletFoundExplanation(): React.ReactNode { - return ( -
-
- We were unable to access an Ethereum wallet you control. In order to interact with the 0x portal - dApp, we need a way to interact with one of your Ethereum wallets. There are two easy ways you can - enable us to do that: -
-

1. Metamask chrome extension

-
- You can install the{' '} - - Metamask - {' '} - Chrome extension Ethereum wallet. Once installed and set up, refresh this page. -
- Note: If you already have Metamask installed, make sure it is - unlocked. -
-
-

Parity Signer

-
- The{' '} - - Parity Signer Chrome extension - {' '} - lets you connect to a locally running Parity node. Make sure you have started your local Parity node - with `parity ui` or `parity --chain kovan ui` in order to connect to mainnet or Kovan respectively. -
-
- Note: If you have done one of the above steps and are still seeing - this message, we might still be unable to retrieve an Ethereum address by calling - `web3.eth.accounts`. Make sure you have created at least one Ethereum address. -
-
- ); - } - private _renderContractsNotDeployedExplanation(): React.ReactNode { - return ( -
-
- The 0x smart contracts are not deployed on the Ethereum network you are currently connected to - (network Id: {this.props.networkId}). In order to use the 0x portal dApp, please connect to the{' '} - {Networks.Kovan} testnet (network Id: {constants.NETWORK_ID_KOVAN}) or ${constants.MAINNET_NAME}{' '} - (network Id: ${constants.NETWORK_ID_MAINNET}). -
-

Metamask

-
- If you are using{' '} - - Metamask - - , you can switch networks in the top left corner of the extension popover. -
-

Parity Signer

-
- If using the{' '} - - Parity Signer Chrome extension - - , make sure to start your local Parity node with `parity ui` or `parity --chain Kovan ui` in order - to connect to mainnet \ or Kovan respectively. -
-
- ); - } -} diff --git a/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx b/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx deleted file mode 100644 index 5ca272b1a..000000000 --- a/packages/website/ts/components/dialogs/eth_weth_conversion_dialog.tsx +++ /dev/null @@ -1,194 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { TokenAmountInput } from 'ts/components/inputs/token_amount_input'; -import { EthAmountInput } from 'ts/containers/inputs/eth_amount_input'; -import { Side, Token } from 'ts/types'; - -interface EthWethConversionDialogProps { - blockchain: Blockchain; - userAddress: string; - networkId: number; - direction: Side; - onComplete: (direction: Side, value: BigNumber) => void; - onCancelled: () => void; - isOpen: boolean; - token: Token; - etherBalanceInWei?: BigNumber; - lastForceTokenStateRefetch: number; -} - -interface EthWethConversionDialogState { - value?: BigNumber; - shouldShowIncompleteErrs: boolean; - hasErrors: boolean; - isEthTokenBalanceLoaded: boolean; - ethTokenBalance: BigNumber; -} - -export class EthWethConversionDialog extends React.Component< - EthWethConversionDialogProps, - EthWethConversionDialogState -> { - private _isUnmounted: boolean; - constructor(props: EthWethConversionDialogProps) { - super(props); - this._isUnmounted = false; - this.state = { - shouldShowIncompleteErrs: false, - hasErrors: false, - isEthTokenBalanceLoaded: false, - ethTokenBalance: new BigNumber(0), - }; - } - public componentWillMount(): void { - // tslint:disable-next-line:no-floating-promises - this._fetchEthTokenBalanceAsync(); - } - public componentWillUnmount(): void { - this._isUnmounted = true; - } - public render(): React.ReactNode { - const convertDialogActions = [ - , - , - ]; - const title = this.props.direction === Side.Deposit ? 'Wrap ETH' : 'Unwrap WETH'; - return !_.isUndefined(this.props.etherBalanceInWei) ? ( - - {this._renderConversionDialogBody()} - - ) : null; - } - private _renderConversionDialogBody(): React.ReactNode { - const explanation = - this.props.direction === Side.Deposit - ? 'Convert your Ether into a tokenized, tradable form.' - : "Convert your Wrapped Ether back into it's native form."; - const isWrappedVersion = this.props.direction === Side.Receive; - return ( -
-
{explanation}
-
-
- {this._renderCurrency(isWrappedVersion)} -
- -
- {this._renderCurrency(!isWrappedVersion)} -
-
- {this.props.direction === Side.Receive ? ( - - ) : ( - - )} -
-
1 ETH = 1 WETH
- {this.props.direction === Side.Receive && this.state.isEthTokenBalanceLoaded && ( -
- Max -
- )} -
-
-
-
- ); - } - private _renderCurrency(isWrappedVersion: boolean): React.ReactNode { - const name = isWrappedVersion ? 'Wrapped Ether' : 'Ether'; - const iconUrl = isWrappedVersion ? '/images/token_icons/ether_erc20.png' : '/images/ether.png'; - const symbol = isWrappedVersion ? 'WETH' : 'ETH'; - return ( -
-
- {name} -
-
- -
-
- ({symbol}) -
-
- ); - } - private _onMaxClick(): void { - this.setState({ - value: this.state.ethTokenBalance, - }); - } - private _onValueChange(isValid: boolean, amount?: BigNumber): void { - this.setState({ - value: amount, - hasErrors: !isValid, - }); - } - private _onConvertClick(): void { - if (this.state.hasErrors) { - this.setState({ - shouldShowIncompleteErrs: true, - }); - } else { - const value = this.state.value; - this.setState({ - value: undefined, - }); - this.props.onComplete(this.props.direction, value); - } - } - private _onCancel(): void { - this.setState({ - value: undefined, - }); - this.props.onCancelled(); - } - private async _fetchEthTokenBalanceAsync(): Promise { - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const [balance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - this.props.token.address, - ); - if (!this._isUnmounted) { - this.setState({ - isEthTokenBalanceLoaded: true, - ethTokenBalance: balance, - }); - } - } -} diff --git a/packages/website/ts/components/dialogs/ledger_config_dialog.tsx b/packages/website/ts/components/dialogs/ledger_config_dialog.tsx deleted file mode 100644 index 527353aa0..000000000 --- a/packages/website/ts/components/dialogs/ledger_config_dialog.tsx +++ /dev/null @@ -1,307 +0,0 @@ -import { colors, constants as sharedConstants } from '@0x/react-shared'; -import { BigNumber, logUtils } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; -import TextField from 'material-ui/TextField'; -import * as React from 'react'; -import ReactTooltip from 'react-tooltip'; -import { Blockchain } from 'ts/blockchain'; -import { NetworkDropDown } from 'ts/components/dropdowns/network_drop_down'; -import { LifeCycleRaisedButton } from 'ts/components/ui/lifecycle_raised_button'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { ProviderType } from 'ts/types'; -import { configs } from 'ts/utils/configs'; -import { constants } from 'ts/utils/constants'; -import { utils } from 'ts/utils/utils'; - -const VALID_ETHEREUM_DERIVATION_PATH_PREFIX = `44'/60'`; - -enum LedgerSteps { - Connect, - SelectAddress, -} - -interface LedgerConfigDialogProps { - isOpen: boolean; - toggleDialogFn: (isOpen: boolean) => void; - dispatcher: Dispatcher; - blockchain: Blockchain; - networkId?: number; - providerType: ProviderType; -} - -interface LedgerConfigDialogState { - connectionErrMsg: string; - stepIndex: LedgerSteps; - userAddresses: string[]; - addressBalances: BigNumber[]; - derivationPath: string; - derivationErrMsg: string; - preferredNetworkId: number; -} - -export class LedgerConfigDialog extends React.Component { - public static defaultProps = { - networkId: 1, - }; - constructor(props: LedgerConfigDialogProps) { - super(props); - const derivationPathIfExists = props.blockchain.getLedgerDerivationPathIfExists(); - this.state = { - connectionErrMsg: '', - stepIndex: LedgerSteps.Connect, - userAddresses: [], - addressBalances: [], - derivationPath: _.isUndefined(derivationPathIfExists) - ? configs.DEFAULT_DERIVATION_PATH - : derivationPathIfExists, - derivationErrMsg: '', - preferredNetworkId: props.networkId, - }; - } - public render(): React.ReactNode { - const dialogActions = [ - , - ]; - const dialogTitle = - this.state.stepIndex === LedgerSteps.Connect ? 'Connect to your Ledger' : 'Select desired address'; - return ( - -
- {this.state.stepIndex === LedgerSteps.Connect && this._renderConnectStep()} - {this.state.stepIndex === LedgerSteps.SelectAddress && this._renderSelectAddressStep()} -
-
- ); - } - private _renderConnectStep(): React.ReactNode { - const networkIds = _.values(sharedConstants.NETWORK_ID_BY_NAME); - return ( -
-
Follow these instructions before proceeding:
-
    -
  1. Connect your Ledger Nano S & Open the Ethereum application
  2. -
  3. Verify that "Browser Support" AND "Contract Data" are enabled in Settings
  4. -
  5. - If no Browser Support is found in settings, verify that you have{' '} - - Firmware >1.2 - -
  6. -
  7. Choose your desired network:
  8. -
-
- -
-
- - {!_.isEmpty(this.state.connectionErrMsg) && ( -
- {this.state.connectionErrMsg} -
- )} -
-
- ); - } - private _renderSelectAddressStep(): React.ReactNode { - return ( -
-
- - - - Address - Balance - - - {this._renderAddressTableRows()} -
-
-
-
- -
-
- -
-
-
- ); - } - private _renderAddressTableRows(): React.ReactNode { - const rows = _.map(this.state.userAddresses, (userAddress: string, i: number) => { - const balanceInWei = this.state.addressBalances[i]; - const addressTooltipId = `address-${userAddress}`; - const balanceTooltipId = `balance-${userAddress}`; - const networkName = sharedConstants.NETWORK_NAME_BY_ID[this.props.networkId]; - // We specifically prefix kovan ETH. - // TODO: We should probably add prefixes for all networks - const isKovanNetwork = networkName === 'Kovan'; - const balanceInEth = Web3Wrapper.toUnitAmount(balanceInWei, constants.DECIMAL_PLACES_ETH); - const balanceString = `${balanceInEth.toString()} ${isKovanNetwork ? 'Kovan ' : ''}ETH`; - return ( - - -
- {userAddress} -
- {userAddress} -
- -
- {balanceString} -
- {balanceString} -
-
- ); - }); - return rows; - } - private _onClose(): void { - this.setState({ - connectionErrMsg: '', - stepIndex: LedgerSteps.Connect, - }); - const isOpen = false; - this.props.toggleDialogFn(isOpen); - } - private _onAddressSelected(selectedRowIndexes: number[]): void { - const selectedRowIndex = selectedRowIndexes[0]; - const selectedAddress = this.state.userAddresses[selectedRowIndex]; - const selectAddressBalance = this.state.addressBalances[selectedRowIndex]; - this.props.dispatcher.updateUserAddress(selectedAddress); - this.props.blockchain.updateWeb3WrapperPrevUserAddress(selectedAddress); - // tslint:disable-next-line:no-floating-promises - this.props.blockchain.fetchTokenInformationAsync(); - this.props.dispatcher.updateUserWeiBalance(selectAddressBalance); - this.setState({ - stepIndex: LedgerSteps.Connect, - }); - const isOpen = false; - this.props.toggleDialogFn(isOpen); - } - private async _onFetchAddressesForDerivationPathAsync(): Promise { - const currentlySetPath = this.props.blockchain.getLedgerDerivationPathIfExists(); - let didSucceed; - if (currentlySetPath === this.state.derivationPath) { - didSucceed = true; - return didSucceed; - } - this.props.blockchain.updateLedgerDerivationPathIfExists(this.state.derivationPath); - didSucceed = await this._fetchAddressesAndBalancesAsync(); - if (!didSucceed) { - this.setState({ - derivationErrMsg: 'Failed to connect to Ledger.', - }); - } - return didSucceed; - } - private async _fetchAddressesAndBalancesAsync(): Promise { - let userAddresses: string[]; - const addressBalances: BigNumber[] = []; - try { - userAddresses = await this._getUserAddressesAsync(); - for (const address of userAddresses) { - const balanceInWei = await this.props.blockchain.getBalanceInWeiAsync(address); - addressBalances.push(balanceInWei); - } - } catch (err) { - logUtils.log(`Ledger error: ${JSON.stringify(err)}`); - this.setState({ - connectionErrMsg: 'Failed to connect. Follow the instructions and try again.', - }); - return false; - } - this.setState({ - userAddresses, - addressBalances, - }); - return true; - } - private _onDerivationPathChanged(_event: any, derivationPath: string): void { - let derivationErrMsg = ''; - if (!_.startsWith(derivationPath, VALID_ETHEREUM_DERIVATION_PATH_PREFIX)) { - derivationErrMsg = 'Must be valid Ethereum path.'; - } - - this.setState({ - derivationPath, - derivationErrMsg, - }); - } - private async _onConnectLedgerClickAsync(): Promise { - const isU2FSupported = await utils.isU2FSupportedAsync(); - if (!isU2FSupported) { - logUtils.log(`U2F not supported in this browser`); - this.setState({ - connectionErrMsg: 'U2F not supported by this browser. Try using Chrome.', - }); - return false; - } - - if ( - this.props.providerType !== ProviderType.Ledger || - (this.props.providerType === ProviderType.Ledger && this.props.networkId !== this.state.preferredNetworkId) - ) { - await this.props.blockchain.updateProviderToLedgerAsync(this.state.preferredNetworkId); - } - - const didSucceed = await this._fetchAddressesAndBalancesAsync(); - if (didSucceed) { - this.setState({ - stepIndex: LedgerSteps.SelectAddress, - connectionErrMsg: '', - }); - } - return didSucceed; - } - private async _getUserAddressesAsync(): Promise { - let userAddresses: string[]; - userAddresses = await this.props.blockchain.getUserAccountsAsync(); - - if (_.isEmpty(userAddresses)) { - throw new Error('No addresses retrieved.'); - } - return userAddresses; - } - private _onSelectedNetworkUpdated(_event: any, _index: number, networkId: number): void { - this.setState({ - preferredNetworkId: networkId, - }); - } -} diff --git a/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx b/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx deleted file mode 100644 index 326df2a8c..000000000 --- a/packages/website/ts/components/dialogs/portal_disclaimer_dialog.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { colors } from '@0x/react-shared'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; - -interface PortalDisclaimerDialogProps { - isOpen: boolean; - onToggleDialog: () => void; -} - -export const PortalDisclaimerDialog = (props: PortalDisclaimerDialogProps) => { - return ( - ]} - open={props.isOpen} - onRequestClose={props.onToggleDialog} - autoScrollBodyContent={true} - modal={true} - > -
-
- 0x Portal is a free software-based tool intended to help users to buy and sell ERC20-compatible - blockchain tokens through the 0x protocol on a purely peer-to-peer basis. 0x portal is not a - regulated marketplace, exchange or intermediary of any kind, and therefore, you should only use 0x - portal to exchange tokens that are not securities, commodity interests, or any other form of - regulated instrument. 0x has not attempted to screen or otherwise limit the tokens that you may - enter in 0x Portal. By clicking “I Agree” below, you understand that you are solely responsible for - using 0x Portal and buying and selling tokens using 0x Portal in compliance with all applicable laws - and regulations. -
-
-
- ); -}; diff --git a/packages/website/ts/components/dialogs/send_dialog.tsx b/packages/website/ts/components/dialogs/send_dialog.tsx deleted file mode 100644 index 5f6927cef..000000000 --- a/packages/website/ts/components/dialogs/send_dialog.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { AddressInput } from 'ts/components/inputs/address_input'; -import { TokenAmountInput } from 'ts/components/inputs/token_amount_input'; -import { EthAmountInput } from 'ts/containers/inputs/eth_amount_input'; -import { Token } from 'ts/types'; - -interface SendDialogProps { - blockchain: Blockchain; - userAddress: string; - networkId: number; - onComplete: (recipient: string, value: BigNumber) => void; - onCancelled: () => void; - isOpen: boolean; - asset: Token | 'ETH'; - lastForceTokenStateRefetch: number; -} - -interface SendDialogState { - value?: BigNumber; - recipient: string; - shouldShowIncompleteErrs: boolean; - isAmountValid: boolean; -} - -export class SendDialog extends React.Component { - constructor(props: SendDialogProps) { - super(props); - this.state = { - recipient: '', - shouldShowIncompleteErrs: false, - isAmountValid: false, - }; - } - public render(): React.ReactNode { - const transferDialogActions = [ - , - , - ]; - return ( - - {this._renderSendDialogBody()} - - ); - } - private _renderSendDialogBody(): React.ReactNode { - const input = - this.props.asset === 'ETH' ? ( - - ) : ( - - ); - return ( -
-
- -
- {input} -
- ); - } - private _onRecipientChange(recipient?: string): void { - this.setState({ - shouldShowIncompleteErrs: false, - recipient, - }); - } - private _onValueChange(isValid: boolean, amount?: BigNumber): void { - this.setState({ - isAmountValid: isValid, - value: amount, - }); - } - private _onSendClick(): void { - if (this._hasErrors()) { - this.setState({ - shouldShowIncompleteErrs: true, - }); - } else { - const value = this.state.value; - this.setState({ - recipient: undefined, - value: undefined, - }); - this.props.onComplete(this.state.recipient, value); - } - } - private _onCancel(): void { - this.setState({ - value: undefined, - }); - this.props.onCancelled(); - } - private _hasErrors(): boolean { - return _.isUndefined(this.state.recipient) || _.isUndefined(this.state.value) || !this.state.isAmountValid; - } -} diff --git a/packages/website/ts/components/dialogs/track_token_confirmation_dialog.tsx b/packages/website/ts/components/dialogs/track_token_confirmation_dialog.tsx deleted file mode 100644 index c8d5af6b6..000000000 --- a/packages/website/ts/components/dialogs/track_token_confirmation_dialog.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as moment from 'moment'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { TrackTokenConfirmation } from 'ts/components/track_token_confirmation'; -import { trackedTokenStorage } from 'ts/local_storage/tracked_token_storage'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { Token, TokenByAddress } from 'ts/types'; - -interface TrackTokenConfirmationDialogProps { - tokens: Token[]; - tokenByAddress: TokenByAddress; - isOpen: boolean; - onToggleDialog: (didConfirmTokenTracking: boolean) => void; - dispatcher: Dispatcher; - networkId: number; - blockchain: Blockchain; - userAddress: string; -} - -interface TrackTokenConfirmationDialogState { - isAddingTokenToTracked: boolean; -} - -export class TrackTokenConfirmationDialog extends React.Component< - TrackTokenConfirmationDialogProps, - TrackTokenConfirmationDialogState -> { - constructor(props: TrackTokenConfirmationDialogProps) { - super(props); - this.state = { - isAddingTokenToTracked: false, - }; - } - public render(): React.ReactNode { - const tokens = this.props.tokens; - return ( - , - , - ]} - open={this.props.isOpen} - onRequestClose={this.props.onToggleDialog.bind(this, false)} - autoScrollBodyContent={true} - > -
- -
-
- ); - } - private async _onTrackConfirmationRespondedAsync(didUserAcceptTracking: boolean): Promise { - if (!didUserAcceptTracking) { - this.props.onToggleDialog(didUserAcceptTracking); - return; - } - this.setState({ - isAddingTokenToTracked: true, - }); - const currentTimestamp = moment().unix(); - for (const token of this.props.tokens) { - const newTokenEntry = { - ...token, - trackedTimestamp: currentTimestamp, - }; - - trackedTokenStorage.addTrackedTokenToUser(this.props.userAddress, this.props.networkId, newTokenEntry); - this.props.dispatcher.updateTokenByAddress([newTokenEntry]); - } - - this.setState({ - isAddingTokenToTracked: false, - }); - this.props.onToggleDialog(didUserAcceptTracking); - } -} diff --git a/packages/website/ts/components/documentation/docs_logo.tsx b/packages/website/ts/components/documentation/docs_logo.tsx deleted file mode 100644 index ac331db79..000000000 --- a/packages/website/ts/components/documentation/docs_logo.tsx +++ /dev/null @@ -1,37 +0,0 @@ -import { Link } from '@0x/react-shared'; -import * as React from 'react'; -import { styled } from 'ts/style/theme'; -import { WebsitePaths } from 'ts/types'; - -import { Container } from '../ui/container'; - -export interface DocsLogoProps { - containerStyle?: React.CSSProperties; -} - -const Image = styled.img` - &:hover { - opacity: 0.7; - } -`; - -export const DocsLogo: React.StatelessComponent = props => { - return ( - - - - - - - - - - - - - ); -}; - -DocsLogo.defaultProps = { - containerStyle: {}, -}; diff --git a/packages/website/ts/components/documentation/docs_top_bar.tsx b/packages/website/ts/components/documentation/docs_top_bar.tsx deleted file mode 100644 index c4291b78f..000000000 --- a/packages/website/ts/components/documentation/docs_top_bar.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import { ALink, colors, Link } from '@0x/react-shared'; -import * as _ from 'lodash'; -import Drawer from 'material-ui/Drawer'; -import * as React from 'react'; -import { DocsLogo } from 'ts/components/documentation/docs_logo'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { Deco, Key, ScreenWidths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { Translate } from 'ts/utils/translate'; - -export interface DocsTopBarProps { - location: Location; - screenWidth: ScreenWidths; - translate: Translate; - sidebar?: React.ReactNode; -} - -interface DocsTopBarState { - isDrawerOpen: boolean; -} - -export class DocsTopBar extends React.Component { - constructor(props: DocsTopBarProps) { - super(props); - this.state = { - isDrawerOpen: false, - }; - } - public componentWillReceiveProps(nextProps: DocsTopBarProps): void { - if (nextProps.location.pathname !== this.props.location.pathname) { - this.setState({ - isDrawerOpen: false, - }); - } - } - public render(): React.ReactNode { - return ( - - - - - {this._renderMenuItems(constants.DEVELOPER_TOPBAR_LINKS)} - - - - - - - - - - - - - {this.props.screenWidth === ScreenWidths.Sm && this._renderDrawer()} - - ); - } - private _renderMenuItems(menuItemLinks: ALink[]): React.ReactNode { - const menuItems = _.map(menuItemLinks, menuItemInfo => { - return ( - - - - {this.props.translate.get(menuItemInfo.title as Key, Deco.Cap)} - - - - ); - }); - return menuItems; - } - private _renderDrawer(): React.ReactNode { - return ( - - - {this.props.sidebar} - - - ); - } - private _onMenuButtonClick(): void { - this.setState({ - isDrawerOpen: !this.state.isDrawerOpen, - }); - } -} diff --git a/packages/website/ts/components/documentation/overview_content.tsx b/packages/website/ts/components/documentation/overview_content.tsx deleted file mode 100644 index caabaf874..000000000 --- a/packages/website/ts/components/documentation/overview_content.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import { colors, Link, MarkdownLinkBlock, utils as sharedUtils } from '@0x/react-shared'; -import { ObjectMap } from '@0x/types'; -import * as _ from 'lodash'; -import * as React from 'react'; -import * as ReactMarkdown from 'react-markdown'; -import { Element as ScrollElement } from 'react-scroll'; -import { TutorialButton } from 'ts/components/documentation/tutorial_button'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { Deco, Key, Package, TutorialInfo } from 'ts/types'; -import { Translate } from 'ts/utils/translate'; - -export interface OverviewContentProps { - translate: Translate; - tutorials: TutorialInfo[]; - categoryToPackages: ObjectMap; -} - -export interface OverviewContentState {} - -export class OverviewContent extends React.Component { - public render(): React.ReactNode { - return ( - - {this._renderSectionTitle(this.props.translate.get(Key.StartBuildOn0x, Deco.Cap))} - - {this._renderSectionDescription(this.props.translate.get(Key.StartBuildOn0xDescription, Deco.Cap))} - - {_.map(this.props.tutorials, tutorialInfo => ( - - - - ))} - - - - {this._renderSectionTitle(this.props.translate.get(Key.LibrariesAndTools, Deco.CapWords))} - - {this._renderSectionDescription( - this.props.translate.get(Key.LibrariesAndToolsDescription, Deco.Cap), - )} - - {_.map(this.props.categoryToPackages, (pkgs, category) => - this._renderPackageCategory(category, pkgs), - )} - - - - - ); - } - private _renderPackageCategory(category: string, pkgs: Package[]): React.ReactNode { - return ( - - {category} - {_.map(pkgs, pkg => this._renderPackage(pkg))} - - ); - } - private _renderPackage(pkg: Package): React.ReactNode { - const id = sharedUtils.getIdFromName(pkg.link.title); - return ( - - - - - - - - {pkg.link.title} - - - - - - - - - - - - - {this.props.translate.get(Key.More, Deco.Cap)} - - - - - - - - - - - ); - } - private _renderSectionTitle(text: string): React.ReactNode { - return ( - - - {text} - - - ); - } - private _renderSectionDescription(text: string): React.ReactNode { - return ( - - {text} - - ); - } -} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/documentation/sidebar_header.tsx b/packages/website/ts/components/documentation/sidebar_header.tsx deleted file mode 100644 index d158ab926..000000000 --- a/packages/website/ts/components/documentation/sidebar_header.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { VersionDropDown } from 'ts/components/documentation/version_drop_down'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { ScreenWidths } from 'ts/types'; - -export interface SidebarHeaderProps { - screenWidth: ScreenWidths; - title: string; - docsVersion?: string; - availableDocVersions?: string[]; - onVersionSelected?: () => void; -} - -export const SidebarHeader: React.StatelessComponent = ({ - screenWidth, - title, - docsVersion, - availableDocVersions, - onVersionSelected, -}) => { - return ( - - - - - {title} - - - {!_.isUndefined(docsVersion) && - !_.isUndefined(availableDocVersions) && - !_.isUndefined(onVersionSelected) && ( -
- - - -
- )} -
- - - ); -}; diff --git a/packages/website/ts/components/documentation/tutorial_button.tsx b/packages/website/ts/components/documentation/tutorial_button.tsx deleted file mode 100644 index b747ef598..000000000 --- a/packages/website/ts/components/documentation/tutorial_button.tsx +++ /dev/null @@ -1,59 +0,0 @@ -import { colors, Link } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { Deco, Key, TutorialInfo } from 'ts/types'; -import { Translate } from 'ts/utils/translate'; - -import { styled } from 'ts/style/theme'; - -export interface TutorialButtonProps { - className?: string; - translate: Translate; - tutorialInfo: TutorialInfo; -} - -const PlainTutorialButton: React.StatelessComponent = ({ translate, tutorialInfo, className }) => ( - - -
-
- -
-
- - {translate.get(tutorialInfo.link.title as Key, Deco.Cap)} - - - {translate.get(tutorialInfo.description as Key, Deco.Cap)} - -
-
-
- -
-
-
- -
-); - -export const TutorialButton = styled(PlainTutorialButton)` - border-radius: 4px; - border: 1px solid ${colors.grey325}; - background-color: ${colors.white}; - &:hover { - border: 1px solid ${colors.lightLinkBlue}; - background-color: ${colors.lightestBlue}; - } - padding: 20px; - margin-bottom: 15px; -`; - -TutorialButton.defaultProps = {}; - -TutorialButton.displayName = 'TutorialButton'; diff --git a/packages/website/ts/components/documentation/version_drop_down.tsx b/packages/website/ts/components/documentation/version_drop_down.tsx deleted file mode 100644 index 5e77530fd..000000000 --- a/packages/website/ts/components/documentation/version_drop_down.tsx +++ /dev/null @@ -1,80 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { Button } from 'ts/components/ui/button'; -import { Container } from 'ts/components/ui/container'; -import { DropDown, DropdownMouseEvent } from 'ts/components/ui/drop_down'; -import { Text } from 'ts/components/ui/text'; -import { styled } from 'ts/style/theme'; - -interface ActiveNodeProps { - className?: string; - selectedVersion: string; -} - -const PlainActiveNode: React.StatelessComponent = ({ className, selectedVersion }) => ( - - - - v {selectedVersion} - - - - - - -); - -const ActiveNode = styled(PlainActiveNode)` - cursor: pointer; - border: 1px solid ${colors.beigeWhite}; - border-radius: 4px; - padding: 4px 6px 4px 8px; -`; - -interface VersionDropDownProps { - selectedVersion: string; - versions: string[]; - onVersionSelected: (semver: string) => void; -} - -interface VersionDropDownState {} - -export class VersionDropDown extends React.Component { - public render(): React.ReactNode { - const activeNode = ; - return ( - - ); - } - private _renderDropdownMenu(): React.ReactNode { - const items = _.map(this.props.versions, version => { - const isSelected = version === this.props.selectedVersion; - return ( - - - - ); - }); - const dropdownMenu = {items}; - return dropdownMenu; - } - private _onClick(selectedVersion: string): void { - this.props.onVersionSelected(selectedVersion); - } -} diff --git a/packages/website/ts/components/dropdowns/developers_drop_down.tsx b/packages/website/ts/components/dropdowns/developers_drop_down.tsx deleted file mode 100644 index 079132f2b..000000000 --- a/packages/website/ts/components/dropdowns/developers_drop_down.tsx +++ /dev/null @@ -1,162 +0,0 @@ -import { ALink, colors, Link } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { DropDown } from 'ts/components/ui/drop_down'; -import { Text } from 'ts/components/ui/text'; -import { Deco, Key, WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { Translate } from 'ts/utils/translate'; - -const gettingStartedKeyToLinkInfo1: ALink[] = [ - { - title: Key.BuildARelayer, - to: `${WebsitePaths.Wiki}#Build-A-Relayer`, - }, - { - title: Key.OrderBasics, - to: `${WebsitePaths.Wiki}#Create,-Validate,-Fill-Order`, - }, -]; -const gettingStartedKeyToLinkInfo2: ALink[] = [ - { - title: Key.DevelopOnEthereum, - to: `${WebsitePaths.Wiki}#Ethereum-Development`, - }, - { - title: Key.UseNetworkedLiquidity, - to: `${WebsitePaths.Wiki}#Find,-Submit,-Fill-Order-From-Relayer`, - }, -]; -const popularDocsToLinkInfos: ALink[] = [ - { - title: Key.ZeroExJs, - to: WebsitePaths.ZeroExJs, - }, - { - title: Key.Connect, - to: WebsitePaths.Connect, - }, - { - title: Key.SmartContract, - to: WebsitePaths.SmartContracts, - }, -]; -const usefulLinksToLinkInfo: ALink[] = [ - { - title: Key.Wiki, - to: WebsitePaths.Wiki, - }, - { - title: Key.Github, - to: constants.URL_GITHUB_ORG, - shouldOpenInNewTab: true, - }, - { - title: Key.ProtocolSpecification, - to: constants.URL_PROTOCOL_SPECIFICATION, - shouldOpenInNewTab: true, - }, -]; - -interface DevelopersDropDownProps { - location: Location; - translate: Translate; - menuItemStyles: React.CSSProperties; - menuIconStyle: React.CSSProperties; -} - -interface DevelopersDropDownState {} - -export class DevelopersDropDown extends React.Component { - public render(): React.ReactNode { - const activeNode = ( - - - {this.props.translate.get(Key.Developers, Deco.Cap)} - - - ); - return ( - - ); - } - private _renderDropdownMenu(): React.ReactNode { - const sectionPadding = '26px'; - const dropdownMenu = ( - - - - {this._renderLinkSection(gettingStartedKeyToLinkInfo1, 'Getting started')} - - {this._renderLinkSection(gettingStartedKeyToLinkInfo2)} - - - - - {this._renderLinkSection(popularDocsToLinkInfos, 'Popular docs')} - - - {this._renderLinkSection(usefulLinksToLinkInfo, 'Useful links')} - - - - - - {this.props.translate.get(Key.ViewAllDocumentation, Deco.Upper)} - - - - - ); - return dropdownMenu; - } - private _renderLinkSection(links: ALink[], title: string = ''): React.ReactNode { - const numLinks = links.length; - let i = 0; - const renderLinks = _.map(links, (link: ALink) => { - const isWikiLink = _.startsWith(link.to, WebsitePaths.Wiki) && _.includes(link.to, '#'); - const isOnWiki = this.props.location.pathname === WebsitePaths.Wiki; - let to = link.to; - if (isWikiLink && isOnWiki) { - to = `${link.to.split('#')[1]}`; - } - i++; - const isLast = i === numLinks; - const linkText = this.props.translate.get(link.title as Key, Deco.Cap); - return ( - - - - {linkText} - - - - ); - }); - return ( - - - {!_.isEmpty(title) && ( - - {title.toUpperCase()} - - )} - - {renderLinks} - - ); - } -} diff --git a/packages/website/ts/components/dropdowns/dropdown_developers.tsx b/packages/website/ts/components/dropdowns/dropdown_developers.tsx deleted file mode 100644 index 590d2ead9..000000000 --- a/packages/website/ts/components/dropdowns/dropdown_developers.tsx +++ /dev/null @@ -1,184 +0,0 @@ -import { Link } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import styled, { withTheme } from 'styled-components'; - -import { Button } from 'ts/components/button'; -import { Column, FlexWrap, WrapGrid } from 'ts/components/newLayout'; -import { ThemeValuesInterface } from 'ts/components/siteWrap'; -import { Heading } from 'ts/components/text'; -import { WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface Props { - theme: ThemeValuesInterface; -} - -interface LinkConfig { - label: string; - url: string; - shouldOpenInNewTab?: boolean; -} - -const introData: LinkConfig[] = [ - { - label: 'Build a relayer', - url: `${WebsitePaths.Wiki}#Build-A-Relayer`, - }, - { - label: 'Develop on Ethereum', - url: `${WebsitePaths.Wiki}#Ethereum-Development`, - }, - { - label: 'Make & take orders', - url: `${WebsitePaths.Wiki}#Create,-Validate,-Fill-Order`, - }, - { - label: 'Use networked liquidity', - url: `${WebsitePaths.Wiki}#Find,-Submit,-Fill-Order-From-Relayer`, - }, - { - label: 'Market making', - url: `${WebsitePaths.MarketMaker}`, - }, -]; - -const docsData: LinkConfig[] = [ - { - label: '0x.js', - url: WebsitePaths.ZeroExJs, - }, - { - label: '0x Connect', - url: WebsitePaths.Connect, - }, - { - label: 'Smart Contract', - url: WebsitePaths.SmartContracts, - }, -]; - -const linksData: LinkConfig[] = [ - { - label: 'Wiki', - url: WebsitePaths.Wiki, - }, - { - label: 'Github', - url: constants.URL_GITHUB_ORG, - shouldOpenInNewTab: true, - }, - { - label: 'Protocol specification', - url: constants.URL_PROTOCOL_SPECIFICATION, - shouldOpenInNewTab: true, - }, -]; - -export const DropdownDevelopers: React.FunctionComponent = withTheme((props: Props) => ( - <> - -
- - Getting Started - - - - {_.map(introData, (item, index) => ( -
  • - - {item.label} - -
  • - ))} -
    -
    - - - - - Popular Docs - - -
      - {_.map(docsData, (item, index) => ( -
    • - - {item.label} - -
    • - ))} -
    -
    - - - - Useful Links - - -
      - {_.map(linksData, (item, index) => ( -
    • - - {item.label} - -
    • - ))} -
    -
    -
    - - - View All Documentation - -
    - -)); - -const DropdownWrap = styled.div` - padding: 15px 30px 75px 30px; - - a { - color: inherit; - } - - li { - margin: 8px 0; - } -`; - -const StyledGrid = styled(WrapGrid.withComponent('ul'))` - li { - width: 50%; - flex-shrink: 0; - } -`; - -const StyledWrap = styled(FlexWrap)` - padding-top: 20px; - margin-top: 30px; - position: relative; - - &:before { - content: ''; - width: 100%; - height: 1px; - background-color: ${props => props.theme.dropdownColor}; - opacity: 0.15; - position: absolute; - top: 0; - left: 0; - } -`; - -const StyledLink = styled(Button)` - width: 100%; - position: absolute; - bottom: 0; - left: 0; -`; diff --git a/packages/website/ts/components/dropdowns/dropdown_products.tsx b/packages/website/ts/components/dropdowns/dropdown_products.tsx deleted file mode 100644 index 93fd1a4fe..000000000 --- a/packages/website/ts/components/dropdowns/dropdown_products.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Link } from 'react-router-dom'; -import styled from 'styled-components'; -import { Heading, Paragraph } from 'ts/components/text'; -import { WebsitePaths } from 'ts/types'; - -const navData = [ - { - title: '0x Instant', - description: 'Simple crypto purchasing', - url: WebsitePaths.Instant, - }, - { - title: '0x Launch Kit', - description: 'Build on the 0x protocol', - url: WebsitePaths.LaunchKit, - }, -]; - -export const DropdownProducts: React.FunctionComponent<{}> = () => ( - - {_.map(navData, (item, index) => ( -
  • - - - {item.title} - - - {item.description && ( - - {item.description} - - )} - -
  • - ))} -
    -); - -const List = styled.ul` - a { - padding: 15px 30px; - display: block; - color: inherit; - } -`; diff --git a/packages/website/ts/components/dropdowns/network_drop_down.tsx b/packages/website/ts/components/dropdowns/network_drop_down.tsx deleted file mode 100644 index df2d72edc..000000000 --- a/packages/website/ts/components/dropdowns/network_drop_down.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { constants as sharedConstants } from '@0x/react-shared'; -import * as _ from 'lodash'; -import DropDownMenu from 'material-ui/DropDownMenu'; -import MenuItem from 'material-ui/MenuItem'; -import * as React from 'react'; - -interface NetworkDropDownProps { - updateSelectedNetwork: (e: any, index: number, value: number) => void; - selectedNetworkId: number; - avialableNetworkIds: number[]; -} - -interface NetworkDropDownState {} - -export class NetworkDropDown extends React.Component { - public render(): React.ReactNode { - return ( -
    - - {this._renderDropDownItems()} - -
    - ); - } - private _renderDropDownItems(): React.ReactNode { - const items = _.map(this.props.avialableNetworkIds, networkId => { - const networkName = sharedConstants.NETWORK_NAME_BY_ID[networkId]; - const primaryText = ( -
    -
    - -
    -
    {networkName}
    -
    - ); - return ; - }); - return items; - } -} diff --git a/packages/website/ts/components/eth_weth_conversion_button.tsx b/packages/website/ts/components/eth_weth_conversion_button.tsx deleted file mode 100644 index 536ba924b..000000000 --- a/packages/website/ts/components/eth_weth_conversion_button.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { BigNumber, logUtils } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import RaisedButton from 'material-ui/RaisedButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { EthWethConversionDialog } from 'ts/components/dialogs/eth_weth_conversion_dialog'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { BlockchainCallErrs, Side, Token } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -interface EthWethConversionButtonProps { - userAddress: string; - networkId: number; - direction: Side; - ethToken: Token; - dispatcher: Dispatcher; - blockchain: Blockchain; - userEtherBalanceInWei: BigNumber; - isOutdatedWrappedEther: boolean; - onConversionSuccessful?: () => void; - isDisabled?: boolean; - lastForceTokenStateRefetch: number; - refetchEthTokenStateAsync: () => Promise; -} - -interface EthWethConversionButtonState { - isEthConversionDialogVisible: boolean; - isEthConversionHappening: boolean; -} - -export class EthWethConversionButton extends React.Component< - EthWethConversionButtonProps, - EthWethConversionButtonState -> { - public static defaultProps: Partial = { - isDisabled: false, - onConversionSuccessful: _.noop.bind(_), - }; - public constructor(props: EthWethConversionButtonProps) { - super(props); - this.state = { - isEthConversionDialogVisible: false, - isEthConversionHappening: false, - }; - } - public render(): React.ReactNode { - const labelStyle = this.state.isEthConversionHappening ? { fontSize: 10 } : {}; - let callToActionLabel; - let inProgressLabel; - if (this.props.direction === Side.Deposit) { - callToActionLabel = 'Wrap'; - inProgressLabel = 'Wrapping...'; - } else { - callToActionLabel = 'Unwrap'; - inProgressLabel = 'Unwrapping...'; - } - return ( -
    - - -
    - ); - } - private _toggleConversionDialog(): void { - this.setState({ - isEthConversionDialogVisible: !this.state.isEthConversionDialogVisible, - }); - } - private async _onConversionAmountSelectedAsync(direction: Side, value: BigNumber): Promise { - this.setState({ - isEthConversionHappening: true, - }); - this._toggleConversionDialog(); - const token = this.props.ethToken; - try { - if (direction === Side.Deposit) { - await this.props.blockchain.convertEthToWrappedEthTokensAsync(token.address, value); - const ethAmount = Web3Wrapper.toUnitAmount(value, constants.DECIMAL_PLACES_ETH); - this.props.dispatcher.showFlashMessage(`Successfully wrapped ${ethAmount.toString()} ETH to WETH`); - } else { - await this.props.blockchain.convertWrappedEthTokensToEthAsync(token.address, value); - const tokenAmount = Web3Wrapper.toUnitAmount(value, token.decimals); - this.props.dispatcher.showFlashMessage(`Successfully unwrapped ${tokenAmount.toString()} WETH to ETH`); - } - if (!this.props.isOutdatedWrappedEther) { - await this.props.refetchEthTokenStateAsync(); - } - this.props.onConversionSuccessful(); - } catch (err) { - const errMsg = `${err}`; - if (_.includes(errMsg, BlockchainCallErrs.UserHasNoAssociatedAddresses)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - } else if (!utils.didUserDenyWeb3Request(errMsg)) { - logUtils.log(`Unexpected error encountered: ${err}`); - logUtils.log(err.stack); - const errorMsg = - direction === Side.Deposit - ? 'Failed to wrap your ETH. Please try again.' - : 'Failed to unwrap your WETH. Please try again.'; - this.props.dispatcher.showFlashMessage(errorMsg); - errorReporter.report(err); - } - } - this.setState({ - isEthConversionHappening: false, - }); - } -} diff --git a/packages/website/ts/components/eth_wrappers.tsx b/packages/website/ts/components/eth_wrappers.tsx deleted file mode 100644 index dc597b18f..000000000 --- a/packages/website/ts/components/eth_wrappers.tsx +++ /dev/null @@ -1,448 +0,0 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import Divider from 'material-ui/Divider'; -import { Table, TableBody, TableHeader, TableHeaderColumn, TableRow, TableRowColumn } from 'material-ui/Table'; -import * as moment from 'moment'; -import * as React from 'react'; -import ReactTooltip from 'react-tooltip'; -import { Blockchain } from 'ts/blockchain'; -import { EthWethConversionButton } from 'ts/components/eth_weth_conversion_button'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { - OutdatedWrappedEtherByNetworkId, - Side, - Token, - TokenByAddress, - TokenState, - TokenStateByAddress, -} from 'ts/types'; -import { configs } from 'ts/utils/configs'; -import { constants } from 'ts/utils/constants'; -import { utils } from 'ts/utils/utils'; - -const DATE_FORMAT = 'D/M/YY'; -const ICON_DIMENSION = 40; -const ETHER_ICON_PATH = '/images/ether.png'; -const OUTDATED_WETH_ICON_PATH = '/images/wrapped_eth_gray.png'; - -interface EthWrappersProps { - networkId: number; - blockchain: Blockchain; - dispatcher: Dispatcher; - tokenByAddress: TokenByAddress; - userAddress: string; - userEtherBalanceInWei?: BigNumber; - lastForceTokenStateRefetch: number; - isFullWidth?: boolean; -} - -interface EthWrappersState { - ethTokenState: TokenState; - outdatedWETHStateByAddress: TokenStateByAddress; -} - -export class EthWrappers extends React.Component { - public static defaultProps: Partial = { - isFullWidth: false, - }; - private _isUnmounted: boolean; - constructor(props: EthWrappersProps) { - super(props); - this._isUnmounted = false; - const outdatedWETHAddresses = this._getOutdatedWETHAddresses(); - const outdatedWETHStateByAddress: TokenStateByAddress = {}; - _.each(outdatedWETHAddresses, outdatedWETHAddress => { - outdatedWETHStateByAddress[outdatedWETHAddress] = { - balance: new BigNumber(0), - allowance: new BigNumber(0), - isLoaded: false, - }; - }); - this.state = { - outdatedWETHStateByAddress, - ethTokenState: { - balance: new BigNumber(0), - allowance: new BigNumber(0), - isLoaded: false, - }, - }; - } - public componentWillReceiveProps(nextProps: EthWrappersProps): void { - if ( - nextProps.userAddress !== this.props.userAddress || - nextProps.networkId !== this.props.networkId || - nextProps.lastForceTokenStateRefetch !== this.props.lastForceTokenStateRefetch - ) { - // tslint:disable-next-line:no-floating-promises - this._fetchWETHStateAsync(); - } - } - public componentDidMount(): void { - window.scrollTo(0, 0); - // tslint:disable-next-line:no-floating-promises - this._fetchWETHStateAsync(); - } - public componentWillUnmount(): void { - this._isUnmounted = true; - } - public render(): React.ReactNode { - const etherToken = this._getEthToken(); - const wethBalance = Web3Wrapper.toUnitAmount(this.state.ethTokenState.balance, constants.DECIMAL_PLACES_ETH); - const isBidirectional = true; - const etherscanUrl = sharedUtils.getEtherScanLinkIfExists( - etherToken.address, - this.props.networkId, - EtherscanLinkSuffixes.Address, - ); - const tokenLabel = this._renderToken( - 'Wrapped Ether', - etherToken.address, - utils.getTokenIconUrl(etherToken.symbol), - ); - const userEtherBalanceInEth = !_.isUndefined(this.props.userEtherBalanceInWei) - ? Web3Wrapper.toUnitAmount(this.props.userEtherBalanceInWei, constants.DECIMAL_PLACES_ETH) - : undefined; - const rootClassName = this.props.isFullWidth ? 'clearfix' : 'clearfix lg-px4 md-px4 sm-px2'; - return ( -
    -
    -

    ETH Wrapper

    - -
    - -
    -
    Wrap ETH into an ERC20-compliant Ether token. 1 ETH = 1 WETH.
    -
    - - - - ETH Token - Balance - - {this._renderActionColumnTitle(isBidirectional)} - - - - - - -
    - -
    - ETH -
    -
    -
    - - {!_.isUndefined(userEtherBalanceInEth) ? ( - `${userEtherBalanceInEth.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} ETH` - ) : ( - - )} - - - - -
    - - - {this._renderTokenLink(tokenLabel, etherscanUrl)} - - - {this.state.ethTokenState.isLoaded ? ( - `${wethBalance.toFixed(configs.AMOUNT_DISPLAY_PRECSION)} WETH` - ) : ( - - )} - - - - - -
    -
    -
    -
    -
    -

    Outdated WETH

    - -
    - The{' '} - - canonical WETH - {' '} - contract is updated when necessary. Unwrap outdated WETH in order to
 retrieve your ETH and move - it to the updated WETH token. -
    -
    - - - - WETH Version - Balance - - {this._renderActionColumnTitle(!isBidirectional)} - - - - {this._renderOutdatedWeths(etherToken)} -
    -
    -
    -
    - ); - } - private _renderActionColumnTitle(isBidirectional: boolean): React.ReactNode { - let iconClass = 'zmdi-long-arrow-right'; - let leftSymbol = 'WETH'; - let rightSymbol = 'ETH'; - if (isBidirectional) { - iconClass = 'zmdi-swap'; - leftSymbol = 'ETH'; - rightSymbol = 'WETH'; - } - return ( -
    -
    {leftSymbol}
    -
    - -
    -
    {rightSymbol}
    -
    - ); - } - private _renderOutdatedWeths(etherToken: Token): React.ReactNode { - const rows = _.map( - configs.OUTDATED_WRAPPED_ETHERS, - (outdatedWETHByNetworkId: OutdatedWrappedEtherByNetworkId) => { - const outdatedWETHIfExists = outdatedWETHByNetworkId[this.props.networkId]; - if (_.isUndefined(outdatedWETHIfExists)) { - return null; // noop - } - const timestampMsRange = outdatedWETHIfExists.timestampMsRange; - let dateRange: string; - if (!_.isUndefined(timestampMsRange)) { - const startMoment = moment(timestampMsRange.startTimestampMs); - const endMoment = moment(timestampMsRange.endTimestampMs); - dateRange = `${startMoment.format(DATE_FORMAT)}-${endMoment.format(DATE_FORMAT)}`; - } else { - dateRange = '-'; - } - const outdatedEtherToken = { - ...etherToken, - address: outdatedWETHIfExists.address, - }; - const outdatedEtherTokenState = this.state.outdatedWETHStateByAddress[outdatedWETHIfExists.address]; - const isStateLoaded = outdatedEtherTokenState.isLoaded; - const balanceInEthIfExists = isStateLoaded - ? Web3Wrapper.toUnitAmount(outdatedEtherTokenState.balance, constants.DECIMAL_PLACES_ETH).toFixed( - configs.AMOUNT_DISPLAY_PRECSION, - ) - : undefined; - const onConversionSuccessful = this._onOutdatedConversionSuccessfulAsync.bind( - this, - outdatedWETHIfExists.address, - ); - const etherscanUrl = sharedUtils.getEtherScanLinkIfExists( - outdatedWETHIfExists.address, - this.props.networkId, - EtherscanLinkSuffixes.Address, - ); - const tokenLabel = this._renderToken(dateRange, outdatedEtherToken.address, OUTDATED_WETH_ICON_PATH); - return ( - - - {this._renderTokenLink(tokenLabel, etherscanUrl)} - - - {isStateLoaded ? ( - `${balanceInEthIfExists} WETH` - ) : ( - - )} - - - - - - ); - }, - ); - return rows; - } - private _renderTokenLink(tokenLabel: React.ReactNode, etherscanUrl: string): React.ReactNode { - return ( - - {_.isUndefined(etherscanUrl) ? ( - tokenLabel - ) : ( - - {tokenLabel} - - )} - - ); - } - private _renderToken(name: string, address: string, imgPath: string): React.ReactNode { - const tooltipId = `tooltip-${address}`; - return ( -
    - -
    - - {name} - - {address} -
    -
    - ); - } - private async _onOutdatedConversionSuccessfulAsync(outdatedWETHAddress: string): Promise { - const currentOutdatedWETHState = this.state.outdatedWETHStateByAddress[outdatedWETHAddress]; - this.setState({ - outdatedWETHStateByAddress: { - ...this.state.outdatedWETHStateByAddress, - [outdatedWETHAddress]: { - balance: currentOutdatedWETHState.balance, - allowance: currentOutdatedWETHState.allowance, - isLoaded: false, - }, - }, - }); - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - outdatedWETHAddress, - ); - this.setState({ - outdatedWETHStateByAddress: { - ...this.state.outdatedWETHStateByAddress, - [outdatedWETHAddress]: { - balance, - allowance, - isLoaded: true, - }, - }, - }); - } - private async _fetchWETHStateAsync(): Promise { - const tokens = _.values(this.props.tokenByAddress); - const wethToken = _.find(tokens, token => token.symbol === 'WETH'); - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const [wethBalance, wethAllowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - wethToken.address, - ); - - const outdatedWETHAddresses = this._getOutdatedWETHAddresses(); - const outdatedWETHStateByAddress: TokenStateByAddress = {}; - for (const address of outdatedWETHAddresses) { - const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - address, - ); - outdatedWETHStateByAddress[address] = { - balance, - allowance, - isLoaded: true, - }; - } - if (!this._isUnmounted) { - this.setState({ - outdatedWETHStateByAddress, - ethTokenState: { - balance: wethBalance, - allowance: wethAllowance, - isLoaded: true, - }, - }); - } - } - private _getOutdatedWETHAddresses(): string[] { - const outdatedWETHAddresses = _.compact( - _.map(configs.OUTDATED_WRAPPED_ETHERS, outdatedWrappedEtherByNetwork => { - const outdatedWrappedEtherIfExists = outdatedWrappedEtherByNetwork[this.props.networkId]; - if (_.isUndefined(outdatedWrappedEtherIfExists)) { - return undefined; - } - const address = outdatedWrappedEtherIfExists.address; - return address; - }), - ); - return outdatedWETHAddresses; - } - private _getEthToken(): Token { - const tokens = _.values(this.props.tokenByAddress); - const etherToken = _.find(tokens, { symbol: 'WETH' }); - return etherToken; - } - private async _refetchEthTokenStateAsync(): Promise { - const etherToken = this._getEthToken(); - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - etherToken.address, - ); - this.setState({ - ethTokenState: { - balance, - allowance, - isLoaded: true, - }, - }); - } -} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/fill_order.tsx b/packages/website/ts/components/fill_order.tsx deleted file mode 100644 index 95a3671c4..000000000 --- a/packages/website/ts/components/fill_order.tsx +++ /dev/null @@ -1,661 +0,0 @@ -import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; -import { colors, Link } from '@0x/react-shared'; -import { BigNumber, logUtils } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as accounting from 'accounting'; -import * as _ from 'lodash'; -import { Card, CardHeader, CardText } from 'material-ui/Card'; -import Divider from 'material-ui/Divider'; -import RaisedButton from 'material-ui/RaisedButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { TrackTokenConfirmationDialog } from 'ts/components/dialogs/track_token_confirmation_dialog'; -import { FillOrderJSON } from 'ts/components/fill_order_json'; -import { FillWarningDialog } from 'ts/components/fill_warning_dialog'; -import { TokenAmountInput } from 'ts/components/inputs/token_amount_input'; -import { Alert } from 'ts/components/ui/alert'; -import { EthereumAddress } from 'ts/components/ui/ethereum_address'; -import { Identicon } from 'ts/components/ui/identicon'; -import { VisualOrder } from 'ts/components/visual_order'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; -import { validator } from 'ts/schemas/validator'; -import { AlertTypes, BlockchainErrs, PortalOrder, Token, TokenByAddress, WebsitePaths } from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { orderParser } from 'ts/utils/order_parser'; -import { utils } from 'ts/utils/utils'; - -interface FillOrderProps { - blockchain: Blockchain; - blockchainErr: BlockchainErrs; - orderFillAmount: BigNumber; - isOrderInUrl: boolean; - networkId: number; - userAddress: string; - tokenByAddress: TokenByAddress; - initialOrder: PortalOrder; - dispatcher: Dispatcher; - lastForceTokenStateRefetch: number; - isFullWidth?: boolean; - shouldHideHeader?: boolean; -} - -interface FillOrderState { - didOrderValidationRun: boolean; - areAllInvolvedTokensTracked: boolean; - globalErrMsg: string; - orderJSON: string; - orderJSONErrMsg: string; - parsedOrder: PortalOrder; - didFillOrderSucceed: boolean; - didCancelOrderSucceed: boolean; - unavailableTakerAmount: BigNumber; - isMakerTokenAddressInRegistry: boolean; - isTakerTokenAddressInRegistry: boolean; - isFillWarningDialogOpen: boolean; - isFilling: boolean; - isCancelling: boolean; - isConfirmingTokenTracking: boolean; - tokensToTrack: Token[]; -} - -export class FillOrder extends React.Component { - public static defaultProps: Partial = { - isFullWidth: false, - shouldHideHeader: false, - }; - private _isUnmounted: boolean; - constructor(props: FillOrderProps) { - super(props); - this._isUnmounted = false; - this.state = { - globalErrMsg: '', - didOrderValidationRun: false, - areAllInvolvedTokensTracked: false, - didFillOrderSucceed: false, - didCancelOrderSucceed: false, - orderJSON: _.isUndefined(this.props.initialOrder) ? '' : JSON.stringify(this.props.initialOrder), - orderJSONErrMsg: '', - parsedOrder: this.props.initialOrder, - unavailableTakerAmount: new BigNumber(0), - isMakerTokenAddressInRegistry: false, - isTakerTokenAddressInRegistry: false, - isFillWarningDialogOpen: false, - isFilling: false, - isCancelling: false, - isConfirmingTokenTracking: false, - tokensToTrack: [], - }; - } - public componentWillMount(): void { - if (!_.isEmpty(this.state.orderJSON)) { - // tslint:disable-next-line:no-floating-promises - this._validateFillOrderFireAndForgetAsync(this.state.orderJSON); - } - } - public componentDidMount(): void { - window.scrollTo(0, 0); - } - public componentWillUnmount(): void { - this._isUnmounted = true; - } - public render(): React.ReactNode { - const rootClassName = this.props.isFullWidth ? 'clearfix' : 'lg-px4 md-px4 sm-px2'; - return ( -
    - {!this.props.shouldHideHeader && ( -
    -

    Fill an order

    - -
    - )} -
    - {!this.props.isOrderInUrl && ( -
    -
    Paste an order JSON snippet below to begin
    -
    Order JSON
    - - {this._renderOrderJsonNotices()} -
    - )} -
    - {!_.isUndefined(this.state.parsedOrder) && - this.state.didOrderValidationRun && - this.state.areAllInvolvedTokensTracked && - this._renderVisualOrder()} -
    - {this.props.isOrderInUrl && ( -
    - - - - - - - {this._renderOrderJsonNotices()} -
    - )} -
    - - -
    - ); - } - private _renderOrderJsonNotices(): React.ReactNode { - return ( -
    - {!_.isUndefined(this.props.initialOrder) && !this.state.didOrderValidationRun && ( -
    - - - - Validating order... -
    - )} - {!_.isEmpty(this.state.orderJSONErrMsg) && ( - - )} -
    - ); - } - private _renderVisualOrder(): React.ReactNode { - const takerTokenAddress = assetDataUtils.decodeERC20AssetData(this.state.parsedOrder.signedOrder.takerAssetData) - .tokenAddress; - const takerToken = this.props.tokenByAddress[takerTokenAddress]; - const orderTakerAmount = this.state.parsedOrder.signedOrder.takerAssetAmount; - const orderMakerAmount = this.state.parsedOrder.signedOrder.makerAssetAmount; - const takerAssetToken = { - amount: orderTakerAmount.minus(this.state.unavailableTakerAmount), - symbol: takerToken.symbol, - }; - const fillToken = this.props.tokenByAddress[takerTokenAddress]; - const makerTokenAddress = assetDataUtils.decodeERC20AssetData(this.state.parsedOrder.signedOrder.makerAssetData) - .tokenAddress; - const makerToken = this.props.tokenByAddress[makerTokenAddress]; - const makerAssetToken = { - amount: orderMakerAmount - .times(takerAssetToken.amount) - .div(orderTakerAmount) - .integerValue(BigNumber.ROUND_FLOOR), - symbol: makerToken.symbol, - }; - const fillAssetToken = { - amount: this.props.orderFillAmount, - symbol: takerToken.symbol, - }; - const parsedOrderExpiration = this.state.parsedOrder.signedOrder.expirationTimeSeconds; - - let orderReceiveAmount = 0; - if (!_.isUndefined(this.props.orderFillAmount)) { - const orderReceiveAmountBigNumber = orderMakerAmount - .times(this.props.orderFillAmount) - .dividedBy(orderTakerAmount) - .integerValue(BigNumber.ROUND_FLOOR); - orderReceiveAmount = this._formatCurrencyAmount(orderReceiveAmountBigNumber, makerToken.decimals); - } - const isUserMaker = - !_.isUndefined(this.state.parsedOrder) && - this.state.parsedOrder.signedOrder.makerAddress === this.props.userAddress; - const expiryDate = utils.convertToReadableDateTimeFromUnixTimestamp(parsedOrderExpiration); - return ( -
    -
    -
    Order details
    -
    -
    - Maker: -
    -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    Expires: {expiryDate} UTC
    -
    -
    - {!isUserMaker && ( -
    - -
    - = {accounting.formatNumber(orderReceiveAmount, 6)} {makerToken.symbol} -
    -
    - )} -
    - {isUserMaker ? ( -
    - - {this.state.didCancelOrderSucceed && ( - - )} -
    - ) : ( -
    - - {!_.isEmpty(this.state.globalErrMsg) && ( - - )} - {this.state.didFillOrderSucceed && ( - - )} -
    - )} -
    -
    - ); - } - private _renderFillSuccessMsg(): React.ReactNode { - return ( -
    - Order successfully filled. See the trade details in your{' '} - - trade history - -
    - ); - } - private _renderCancelSuccessMsg(): React.ReactNode { - return
    Order successfully cancelled.
    ; - } - private _onFillOrderClick(): void { - if (!this.state.isMakerTokenAddressInRegistry || !this.state.isTakerTokenAddressInRegistry) { - this.setState({ - isFillWarningDialogOpen: true, - }); - } else { - // tslint:disable-next-line:no-floating-promises - this._onFillOrderClickFireAndForgetAsync(); - } - } - private _onFillWarningClosed(didUserCancel: boolean): void { - this.setState({ - isFillWarningDialogOpen: false, - }); - if (!didUserCancel) { - // tslint:disable-next-line:no-floating-promises - this._onFillOrderClickFireAndForgetAsync(); - } - } - private _onFillAmountChange(_isValid: boolean, amount?: BigNumber): void { - this.props.dispatcher.updateOrderFillAmount(amount); - } - private _onFillOrderJSONChanged(event: any): void { - const orderJSON = event.target.value; - this.setState({ - didOrderValidationRun: _.isEmpty(orderJSON) && _.isEmpty(this.state.orderJSONErrMsg), - didFillOrderSucceed: false, - }); - // tslint:disable-next-line:no-floating-promises - this._validateFillOrderFireAndForgetAsync(orderJSON); - } - private async _checkForUntrackedTokensAndAskToAddAsync(): Promise { - if (!_.isEmpty(this.state.orderJSONErrMsg)) { - return; - } - const makerTokenAddress = assetDataUtils.decodeERC20AssetData(this.state.parsedOrder.signedOrder.makerAssetData) - .tokenAddress; - const takerTokenAddress = assetDataUtils.decodeERC20AssetData(this.state.parsedOrder.signedOrder.takerAssetData) - .tokenAddress; - const makerTokenIfExists = this.props.tokenByAddress[makerTokenAddress]; - const takerTokenIfExists = this.props.tokenByAddress[takerTokenAddress]; - const tokensToTrack: Token[] = []; - const isUnseenMakerToken = _.isUndefined(makerTokenIfExists); - const isMakerTokenTracked = !_.isUndefined(makerTokenIfExists) && utils.isTokenTracked(makerTokenIfExists); - if (isUnseenMakerToken) { - tokensToTrack.push({ - ...this.state.parsedOrder.metadata.makerToken, - address: makerTokenAddress, - iconUrl: undefined, - trackedTimestamp: undefined, - isRegistered: false, - }); - } else if (!isMakerTokenTracked) { - tokensToTrack.push(makerTokenIfExists); - } - const isUnseenTakerToken = _.isUndefined(takerTokenIfExists); - const isTakerTokenTracked = !_.isUndefined(takerTokenIfExists) && utils.isTokenTracked(takerTokenIfExists); - if (isUnseenTakerToken) { - tokensToTrack.push({ - ...this.state.parsedOrder.metadata.takerToken, - address: takerTokenAddress, - iconUrl: undefined, - trackedTimestamp: undefined, - isRegistered: false, - }); - } else if (!isTakerTokenTracked) { - tokensToTrack.push(takerTokenIfExists); - } - if (!_.isEmpty(tokensToTrack)) { - this.setState({ - isConfirmingTokenTracking: true, - tokensToTrack, - }); - } else { - this.setState({ - areAllInvolvedTokensTracked: true, - }); - } - } - private async _validateFillOrderFireAndForgetAsync(orderJSON: string): Promise { - let orderJSONErrMsg = ''; - let parsedOrder: PortalOrder; - let orderHash: string; - try { - const order = orderParser.parseJsonString(orderJSON); - const validationResult = validator.validate(order, portalOrderSchema); - if (validationResult.errors.length > 0) { - orderJSONErrMsg = 'Submitted order JSON is not a valid order'; - logUtils.log(`Unexpected order JSON validation error: ${validationResult.errors.join(', ')}`); - return; - } - parsedOrder = order; - const signedOrder = parsedOrder.signedOrder; - orderHash = orderHashUtils.getOrderHashHex(signedOrder); - const exchangeContractAddr = this.props.blockchain.getExchangeContractAddressIfExists(); - const signature = signedOrder.signature; - const isSignatureValid = await this.props.blockchain.isValidSignatureAsync( - orderHash, - signature, - signedOrder.makerAddress, - ); - if (exchangeContractAddr !== signedOrder.exchangeAddress) { - orderJSONErrMsg = 'This order was made on another network or using a deprecated Exchange contract'; - parsedOrder = undefined; - } else if (!isSignatureValid) { - orderJSONErrMsg = 'Order signature is invalid'; - parsedOrder = undefined; - } else { - // Update user supplied order cache so that if they navigate away from fill view - // e.g to set a token allowance, when they come back, the fill order persists - this.props.dispatcher.updateUserSuppliedOrderCache(parsedOrder); - } - } catch (err) { - logUtils.log(`Validate order err: ${err}`); - if (!_.isEmpty(orderJSON)) { - orderJSONErrMsg = 'Submitted order JSON is not valid JSON'; - } - if (!this._isUnmounted) { - this.setState({ - didOrderValidationRun: true, - orderJSON, - orderJSONErrMsg, - parsedOrder, - }); - } - return; - } - - let unavailableTakerAmount = new BigNumber(0); - if (!_.isEmpty(orderJSONErrMsg)) { - // Clear cache entry if user updates orderJSON to invalid entry - this.props.dispatcher.updateUserSuppliedOrderCache(undefined); - } else { - unavailableTakerAmount = await this.props.blockchain.getUnavailableTakerAmountAsync(orderHash); - const makerTokenAddress = assetDataUtils.decodeERC20AssetData(parsedOrder.signedOrder.makerAssetData) - .tokenAddress; - const takerTokenAddress = assetDataUtils.decodeERC20AssetData(parsedOrder.signedOrder.takerAssetData) - .tokenAddress; - const isMakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - makerTokenAddress, - ); - const isTakerTokenAddressInRegistry = await this.props.blockchain.isAddressInTokenRegistryAsync( - takerTokenAddress, - ); - this.setState({ - isMakerTokenAddressInRegistry, - isTakerTokenAddressInRegistry, - }); - } - - this.setState({ - didOrderValidationRun: true, - orderJSON, - orderJSONErrMsg, - parsedOrder, - unavailableTakerAmount, - }); - - await this._checkForUntrackedTokensAndAskToAddAsync(); - } - private _trackOrderEvent(eventName: string): void { - const parsedOrder = this.state.parsedOrder; - analytics.trackOrderEvent(eventName, parsedOrder); - } - private async _onFillOrderClickFireAndForgetAsync(): Promise { - if (this.props.blockchainErr !== BlockchainErrs.NoError || _.isEmpty(this.props.userAddress)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return; - } - - this.setState({ - isFilling: true, - didFillOrderSucceed: false, - }); - - const parsedOrder = this.state.parsedOrder; - const takerFillAmount = this.props.orderFillAmount; - - if (_.isUndefined(this.props.userAddress)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - this.setState({ - isFilling: false, - }); - return; - } - let globalErrMsg = ''; - - if (_.isUndefined(takerFillAmount)) { - globalErrMsg = 'You must specify a fill amount'; - } - - const signedOrder = parsedOrder.signedOrder; - if (_.isEmpty(globalErrMsg)) { - try { - await this.props.blockchain.validateFillOrderThrowIfInvalidAsync( - signedOrder, - takerFillAmount, - this.props.userAddress, - ); - } catch (err) { - globalErrMsg = utils.zeroExErrToHumanReadableErrMsg(err.message, parsedOrder.signedOrder.takerAddress); - } - } - if (!_.isEmpty(globalErrMsg)) { - this.setState({ - isFilling: false, - globalErrMsg, - }); - return; - } - try { - const orderFilledAmount: BigNumber = await this.props.blockchain.fillOrderAsync( - signedOrder, - this.props.orderFillAmount, - ); - this._trackOrderEvent('Fill Order Success'); - // After fill completes, let's force fetch the token balances - this.props.dispatcher.forceTokenStateRefetch(); - this.setState({ - isFilling: false, - didFillOrderSucceed: true, - globalErrMsg: '', - unavailableTakerAmount: this.state.unavailableTakerAmount.plus(orderFilledAmount), - }); - return; - } catch (err) { - this.setState({ - isFilling: false, - }); - this._trackOrderEvent('Fill Order Failure'); - const errMsg = `${err}`; - if (utils.didUserDenyWeb3Request(errMsg)) { - return; - } - globalErrMsg = 'Failed to fill order, please refresh and try again'; - logUtils.log(`${err}`); - this.setState({ - globalErrMsg, - }); - errorReporter.report(err); - return; - } - } - private async _onCancelOrderClickFireAndForgetAsync(): Promise { - if (this.props.blockchainErr !== BlockchainErrs.NoError || _.isEmpty(this.props.userAddress)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return; - } - - this.setState({ - isCancelling: true, - didCancelOrderSucceed: false, - }); - - const parsedOrder = this.state.parsedOrder; - const takerAddress = this.props.userAddress; - - if (_.isUndefined(takerAddress)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - this.setState({ - isFilling: false, - }); - return; - } - let globalErrMsg = ''; - const signedOrder = parsedOrder.signedOrder; - const takerTokenAmount = signedOrder.takerAssetAmount; - if (!_.isEmpty(globalErrMsg)) { - this.setState({ - isCancelling: false, - globalErrMsg, - }); - return; - } - try { - await this.props.blockchain.cancelOrderAsync(signedOrder); - this.setState({ - isCancelling: false, - didCancelOrderSucceed: true, - globalErrMsg: '', - unavailableTakerAmount: takerTokenAmount, - }); - this._trackOrderEvent('Cancel Order Success'); - return; - } catch (err) { - this.setState({ - isCancelling: false, - }); - const errMsg = `${err}`; - if (utils.didUserDenyWeb3Request(errMsg)) { - return; - } - this._trackOrderEvent('Cancel Order Failure'); - globalErrMsg = 'Failed to cancel order, please refresh and try again'; - logUtils.log(`${err}`); - this.setState({ - globalErrMsg, - }); - errorReporter.report(err); - return; - } - } - private _formatCurrencyAmount(amount: BigNumber, decimals: number): number { - const unitAmount = Web3Wrapper.toUnitAmount(amount, decimals); - const roundedUnitAmount = Math.round(unitAmount.toNumber() * 100000) / 100000; - return roundedUnitAmount; - } - private _onToggleTrackConfirmDialog(didConfirmTokenTracking: boolean): void { - if (!didConfirmTokenTracking) { - this.setState({ - orderJSON: '', - orderJSONErrMsg: '', - parsedOrder: undefined, - }); - } else { - this.setState({ - areAllInvolvedTokensTracked: true, - }); - } - this.setState({ - isConfirmingTokenTracking: !this.state.isConfirmingTokenTracking, - tokensToTrack: [], - }); - } -} // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/fill_order_json.tsx b/packages/website/ts/components/fill_order_json.tsx deleted file mode 100644 index 41413eac2..000000000 --- a/packages/website/ts/components/fill_order_json.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { generatePseudoRandomSalt } from '@0x/order-utils'; -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import Paper from 'material-ui/Paper'; -import TextField from 'material-ui/TextField'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { Side, TokenByAddress } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { utils } from 'ts/utils/utils'; - -interface FillOrderJSONProps { - blockchain: Blockchain; - tokenByAddress: TokenByAddress; - orderJSON: string; - onFillOrderJSONChanged: (event: any) => void; -} - -interface FillOrderJSONState {} - -export class FillOrderJSON extends React.Component { - public render(): React.ReactNode { - const tokenAddresses = _.keys(this.props.tokenByAddress); - const exchangeContract = this.props.blockchain.getExchangeContractAddressIfExists(); - const hintSideToAssetToken = { - [Side.Deposit]: { - amount: new BigNumber(35), - address: tokenAddresses[0], - }, - [Side.Receive]: { - amount: new BigNumber(89), - address: tokenAddresses[1], - }, - }; - const hintOrderExpiryTimestamp = utils.initialOrderExpiryUnixTimestampSec(); - const hintECSignature = '0x012761a3ed31b43c8780e905a260a35faefcc527be7516aa11c0256729b5b351bc33'; - const hintSalt = generatePseudoRandomSalt(); - const feeRecipient = constants.NULL_ADDRESS; - const hintOrder = utils.generateOrder( - exchangeContract, - hintSideToAssetToken, - hintOrderExpiryTimestamp, - '', - '', - constants.MAKER_FEE, - constants.TAKER_FEE, - feeRecipient, - hintECSignature, - this.props.tokenByAddress, - hintSalt, - ); - const hintOrderJSON = `${JSON.stringify(hintOrder, null, '\t').substring(0, 500)}...`; - return ( -
    - - - -
    - ); - } -} diff --git a/packages/website/ts/components/fill_warning_dialog.tsx b/packages/website/ts/components/fill_warning_dialog.tsx deleted file mode 100644 index 5be09e6c2..000000000 --- a/packages/website/ts/components/fill_warning_dialog.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { colors } from '@0x/react-shared'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as React from 'react'; - -interface FillWarningDialogProps { - isOpen: boolean; - onToggleDialog: (didUserCancel: boolean) => void; -} - -export const FillWarningDialog = (props: FillWarningDialogProps) => { - const didCancel = true; - return ( - props.onToggleDialog(didCancel)} // tslint:disable-line:jsx-no-lambda - />, - props.onToggleDialog(!didCancel)} // tslint:disable-line:jsx-no-lambda - />, - ]} - open={props.isOpen} - onRequestClose={() => props.onToggleDialog(didCancel)} // tslint:disable-line:jsx-no-lambda - autoScrollBodyContent={true} - modal={true} - > -
    -
    - At least one of the tokens in this order was not found in the token registry smart contract and may - be counterfeit. It is your responsibility to verify the token addresses on Etherscan ( - - See this how-to guide - - ) before filling an order. This action may result in the loss of funds. -
    -
    -
    - ); -}; diff --git a/packages/website/ts/components/flash_messages/asset_send_completed.tsx b/packages/website/ts/components/flash_messages/asset_send_completed.tsx deleted file mode 100644 index b895126dc..000000000 --- a/packages/website/ts/components/flash_messages/asset_send_completed.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { utils } from 'ts/utils/utils'; - -interface AssetSendCompletedProps { - etherScanLinkIfExists?: string; - toAddress: string; - amountInBaseUnits: BigNumber; - decimals: number; - symbol: string; -} - -interface AssetSendCompletedState {} - -export class AssetSendCompleted extends React.Component { - public render(): React.ReactNode { - const etherScanLink = !_.isUndefined(this.props.etherScanLinkIfExists) && ( - - Verify on Etherscan - - ); - const amountInUnits = Web3Wrapper.toUnitAmount(this.props.amountInBaseUnits, this.props.decimals); - const truncatedAddress = utils.getAddressBeginAndEnd(this.props.toAddress); - return ( -
    - {`Sent ${amountInUnits} ${this.props.symbol} to ${truncatedAddress}: `} - {etherScanLink} -
    - ); - } -} diff --git a/packages/website/ts/components/flash_messages/transaction_submitted.tsx b/packages/website/ts/components/flash_messages/transaction_submitted.tsx deleted file mode 100644 index b1d909baa..000000000 --- a/packages/website/ts/components/flash_messages/transaction_submitted.tsx +++ /dev/null @@ -1,26 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; - -interface TransactionSubmittedProps { - etherScanLinkIfExists?: string; -} - -interface TransactionSubmittedState {} - -export class TransactionSubmitted extends React.Component { - public render(): React.ReactNode { - if (_.isUndefined(this.props.etherScanLinkIfExists)) { - return
    Transaction submitted to the network
    ; - } else { - return ( -
    - Transaction submitted to the network:{' '} - - Verify on Etherscan - -
    - ); - } - } -} diff --git a/packages/website/ts/components/footer.tsx b/packages/website/ts/components/footer.tsx deleted file mode 100644 index 3765a32ca..000000000 --- a/packages/website/ts/components/footer.tsx +++ /dev/null @@ -1,168 +0,0 @@ -import { Link as SmartLink } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import MediaQuery from 'react-responsive'; -import styled from 'styled-components'; - -import { Logo } from 'ts/components/logo'; -import { Column, FlexWrap, WrapGrid } from 'ts/components/newLayout'; -import { NewsletterForm } from 'ts/components/newsletter_form'; -import { WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface LinkInterface { - text: string; - url: string; - shouldOpenInNewTab?: boolean; -} - -interface LinkRows { - heading: string; - isOnMobile?: boolean; - links: LinkInterface[]; -} - -interface LinkListProps { - links: LinkInterface[]; -} - -const linkRows: LinkRows[] = [ - { - heading: 'Products', - isOnMobile: true, - links: [ - { url: WebsitePaths.Instant, text: '0x Instant' }, - { url: WebsitePaths.LaunchKit, text: '0x Launch Kit' }, - ], - }, - { - heading: 'Developers', - links: [ - { url: WebsitePaths.Docs, text: 'Documentation' }, - { url: constants.URL_GITHUB_ORG, text: 'GitHub', shouldOpenInNewTab: true }, - { url: constants.URL_PROTOCOL_SPECIFICATION, text: 'Protocol Spec', shouldOpenInNewTab: true }, - ], - }, - { - heading: 'About', - isOnMobile: true, - links: [ - { url: WebsitePaths.AboutMission, text: 'Mission' }, - { url: WebsitePaths.AboutTeam, text: 'Team' }, - { url: WebsitePaths.AboutJobs, text: 'Jobs' }, - { url: WebsitePaths.AboutPress, text: 'Press' }, - { url: WebsitePaths.Ecosystem, text: 'Grant Program' }, - ], - }, - { - heading: 'Community', - isOnMobile: true, - links: [ - { url: constants.URL_TWITTER, text: 'Twitter', shouldOpenInNewTab: true }, - { url: constants.URL_ZEROEX_CHAT, text: 'Discord Chat', shouldOpenInNewTab: true }, - { url: constants.URL_FACEBOOK, text: 'Facebook', shouldOpenInNewTab: true }, - { url: constants.URL_REDDIT, text: 'Reddit', shouldOpenInNewTab: true }, - ], - }, -]; - -export const Footer: React.StatelessComponent = () => ( - - - - - - - - - - {_.map(linkRows, (row: LinkRows, index) => ( - - - {row.heading} - - - - - ))} - - - - -); - -const LinkList = (props: LinkListProps) => ( - - {_.map(props.links, (link, index) => ( -
  • - - {link.text} - -
  • - ))} -
    -); - -const FooterWrap = styled.footer` - padding: 40px 30px 30px 30px; - margin-top: 30px; - background-color: ${props => props.theme.footerBg}; - color: ${props => props.theme.footerColor}; - - path { - fill: ${props => props.theme.footerColor}; - } - - @media (min-width: 768px) { - height: 350px; - } -`; - -const FooterColumn = styled(Column)` - @media (min-width: 768px) { - width: ${props => props.width}; - } - - @media (max-width: 768px) { - text-align: left; - } -`; - -const FooterSectionWrap = styled(FooterColumn)` - @media (max-width: 768px) { - width: 50%; - - & + & { - margin-top: 0; - margin-bottom: 30px; - } - } -`; - -const RowHeading = styled.h3` - color: inherit; - font-weight: 700; - font-size: 16px; - margin-bottom: 1.25em; - opacity: 0.75; -`; - -const List = styled.ul` - li + li { - margin-top: 8px; - } -`; - -const Link = styled(SmartLink)` - color: inherit; - opacity: 0.5; - display: block; - font-size: 16px; - line-height: 20px; - transition: opacity 0.25s; - text-decoration: none; - - &:hover { - opacity: 0.8; - } -`; diff --git a/packages/website/ts/components/generate_order/asset_picker.tsx b/packages/website/ts/components/generate_order/asset_picker.tsx deleted file mode 100644 index d3f11f962..000000000 --- a/packages/website/ts/components/generate_order/asset_picker.tsx +++ /dev/null @@ -1,284 +0,0 @@ -import * as _ from 'lodash'; -import Dialog from 'material-ui/Dialog'; -import FlatButton from 'material-ui/FlatButton'; -import * as moment from 'moment'; -import * as React from 'react'; -import firstBy from 'thenby'; - -import { Blockchain } from 'ts/blockchain'; -import { NewTokenForm } from 'ts/components/generate_order/new_token_form'; -import { TrackTokenConfirmation } from 'ts/components/track_token_confirmation'; -import { TokenIcon } from 'ts/components/ui/token_icon'; -import { trackedTokenStorage } from 'ts/local_storage/tracked_token_storage'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { DialogConfigs, Token, TokenByAddress, TokenVisibility } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { utils } from 'ts/utils/utils'; - -const TOKEN_ICON_DIMENSION = 100; -const TILE_DIMENSION = 146; -enum AssetViews { - AssetPicker = 'ASSET_PICKER', - NewTokenForm = 'NEW_TOKEN_FORM', - ConfirmTrackToken = 'CONFIRM_TRACK_TOKEN', -} - -interface AssetPickerProps { - userAddress: string; - blockchain: Blockchain; - dispatcher: Dispatcher; - networkId: number; - isOpen: boolean; - currentTokenAddress: string; - onTokenChosen: (tokenAddress: string) => void; - tokenByAddress: TokenByAddress; - tokenVisibility?: TokenVisibility; -} - -interface AssetPickerState { - assetView: AssetViews; - hoveredAddress: string | undefined; - chosenTrackTokenAddress: string; - isAddingTokenToTracked: boolean; -} - -export class AssetPicker extends React.Component { - public static defaultProps: Partial = { - tokenVisibility: TokenVisibility.All, - }; - private readonly _dialogConfigsByAssetView: { [assetView: string]: DialogConfigs }; - constructor(props: AssetPickerProps) { - super(props); - this.state = { - assetView: AssetViews.AssetPicker, - hoveredAddress: undefined, - chosenTrackTokenAddress: undefined, - isAddingTokenToTracked: false, - }; - this._dialogConfigsByAssetView = { - [AssetViews.AssetPicker]: { - title: 'Select token', - isModal: false, - actions: [], - }, - [AssetViews.NewTokenForm]: { - title: 'Add an ERC20 token', - isModal: false, - actions: [], - }, - [AssetViews.ConfirmTrackToken]: { - title: 'Tracking confirmation', - isModal: true, - actions: [ - , - , - ], - }, - }; - } - public render(): React.ReactNode { - const dialogConfigs: DialogConfigs = this._dialogConfigsByAssetView[this.state.assetView]; - return ( - - {this.state.assetView === AssetViews.AssetPicker && this._renderAssetPicker()} - {this.state.assetView === AssetViews.NewTokenForm && ( - - )} - {this.state.assetView === AssetViews.ConfirmTrackToken && this._renderConfirmTrackToken()} - - ); - } - private _renderConfirmTrackToken(): React.ReactNode { - const token = this.props.tokenByAddress[this.state.chosenTrackTokenAddress]; - return ( - - ); - } - private _renderAssetPicker(): React.ReactNode { - return ( -
    - {this._renderGridTiles()} -
    - ); - } - private _renderGridTiles(): React.ReactNode { - let isHovered; - let tileStyles; - const allTokens = _.values(this.props.tokenByAddress); - // filter tokens based on visibility specified in props, do not show ZRX or ETHER as tracked or untracked - const filteredTokens = - this.props.tokenVisibility === TokenVisibility.All - ? allTokens - : _.filter(allTokens, token => { - return ( - token.symbol !== constants.ZRX_TOKEN_SYMBOL && - token.symbol !== constants.ETHER_TOKEN_SYMBOL && - ((this.props.tokenVisibility === TokenVisibility.Tracked && utils.isTokenTracked(token)) || - (this.props.tokenVisibility === TokenVisibility.Untracked && - !utils.isTokenTracked(token))) - ); - }); - // if we are showing tracked tokens, sort by date added, otherwise sort by symbol - const sortKey = this.props.tokenVisibility === TokenVisibility.Tracked ? 'trackedTimestamp' : 'symbol'; - const sortedTokens = filteredTokens.sort(firstBy(sortKey)); - if (_.isEmpty(sortedTokens)) { - return
    No tokens to remove.
    ; - } - const gridTiles = _.map(sortedTokens, token => { - const address = token.address; - isHovered = this.state.hoveredAddress === address; - tileStyles = { - cursor: 'pointer', - opacity: isHovered ? 0.6 : 1, - }; - return ( -
    -
    - -
    -
    {token.symbol}
    -
    - ); - }); - const otherTokenKey = 'otherToken'; - isHovered = this.state.hoveredAddress === otherTokenKey; - tileStyles = { - cursor: 'pointer', - opacity: isHovered ? 0.6 : 1, - }; - if (this.props.tokenVisibility !== TokenVisibility.Tracked) { - gridTiles.push( -
    -
    - -
    -
    Other ERC20 Token
    -
    , - ); - } - return gridTiles; - } - private _onToggleHover(address: string, isHovered: boolean): void { - const hoveredAddress = isHovered ? address : undefined; - this.setState({ - hoveredAddress, - }); - } - private _onCloseDialog(): void { - this.setState({ - assetView: AssetViews.AssetPicker, - }); - this.props.onTokenChosen(this.props.currentTokenAddress); - } - private _onChooseToken(tokenAddress: string): void { - const token = this.props.tokenByAddress[tokenAddress]; - if (utils.isTokenTracked(token)) { - this.props.onTokenChosen(tokenAddress); - } else { - this.setState({ - assetView: AssetViews.ConfirmTrackToken, - chosenTrackTokenAddress: tokenAddress, - }); - } - } - private _onCustomAssetChosen(): void { - this.setState({ - assetView: AssetViews.NewTokenForm, - }); - } - private _onNewTokenSubmitted(newToken: Token): void { - trackedTokenStorage.addTrackedTokenToUser(this.props.userAddress, this.props.networkId, newToken); - this.props.dispatcher.addTokenToTokenByAddress(newToken); - this.setState({ - assetView: AssetViews.AssetPicker, - }); - this.props.onTokenChosen(newToken.address); - } - private async _onTrackConfirmationRespondedAsync(didUserAcceptTracking: boolean): Promise { - const resetState: AssetPickerState = { - ...this.state, - isAddingTokenToTracked: false, - assetView: AssetViews.AssetPicker, - chosenTrackTokenAddress: undefined, - }; - if (!didUserAcceptTracking) { - this.setState(resetState); - this._onCloseDialog(); - return; - } - this.setState({ - isAddingTokenToTracked: true, - }); - const tokenAddress = this.state.chosenTrackTokenAddress; - const token = this.props.tokenByAddress[tokenAddress]; - if (_.isUndefined(tokenAddress)) { - this.setState(resetState); - return; - } - const newTokenEntry = { - ...token, - trackedTimestamp: moment().unix(), - }; - trackedTokenStorage.addTrackedTokenToUser(this.props.userAddress, this.props.networkId, newTokenEntry); - - this.props.dispatcher.updateTokenByAddress([newTokenEntry]); - this.setState(resetState); - this.props.onTokenChosen(tokenAddress); - } -} diff --git a/packages/website/ts/components/generate_order/generate_order_form.tsx b/packages/website/ts/components/generate_order/generate_order_form.tsx deleted file mode 100644 index 0f70aa18f..000000000 --- a/packages/website/ts/components/generate_order/generate_order_form.tsx +++ /dev/null @@ -1,385 +0,0 @@ -import { assetDataUtils, generatePseudoRandomSalt, orderHashUtils } from '@0x/order-utils'; -import { colors } from '@0x/react-shared'; -import { Order as ZeroExOrder } from '@0x/types'; -import { BigNumber, logUtils } from '@0x/utils'; -import * as _ from 'lodash'; -import Dialog from 'material-ui/Dialog'; -import Divider from 'material-ui/Divider'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { ExpirationInput } from 'ts/components/inputs/expiration_input'; -import { HashInput } from 'ts/components/inputs/hash_input'; -import { IdenticonAddressInput } from 'ts/components/inputs/identicon_address_input'; -import { TokenAmountInput } from 'ts/components/inputs/token_amount_input'; -import { TokenInput } from 'ts/components/inputs/token_input'; -import { OrderJSON } from 'ts/components/order_json'; -import { Alert } from 'ts/components/ui/alert'; -import { HelpTooltip } from 'ts/components/ui/help_tooltip'; -import { LifeCycleRaisedButton } from 'ts/components/ui/lifecycle_raised_button'; -import { SwapIcon } from 'ts/components/ui/swap_icon'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { portalOrderSchema } from 'ts/schemas/portal_order_schema'; -import { validator } from 'ts/schemas/validator'; -import { - AlertTypes, - BlockchainErrs, - HashData, - PortalOrder, - Side, - SideToAssetToken, - Token, - TokenByAddress, -} from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { constants } from 'ts/utils/constants'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -enum SigningState { - Unsigned, - Signing, - Signed, -} - -interface GenerateOrderFormProps { - blockchain: Blockchain; - blockchainErr: BlockchainErrs; - blockchainIsLoaded: boolean; - dispatcher: Dispatcher; - hashData: HashData; - orderExpiryTimestamp: BigNumber; - networkId: number; - userAddress: string; - orderSignature: string; - orderTakerAddress: string; - orderSalt: BigNumber; - sideToAssetToken: SideToAssetToken; - tokenByAddress: TokenByAddress; - lastForceTokenStateRefetch: number; - isFullWidth?: boolean; - shouldHideHeader?: boolean; -} - -interface GenerateOrderFormState { - globalErrMsg: string; - shouldShowIncompleteErrs: boolean; - signingState: SigningState; -} - -export class GenerateOrderForm extends React.Component { - public static defaultProps: Partial = { - isFullWidth: false, - shouldHideHeader: false, - }; - constructor(props: GenerateOrderFormProps) { - super(props); - this.state = { - globalErrMsg: '', - shouldShowIncompleteErrs: false, - signingState: SigningState.Unsigned, - }; - } - public componentDidMount(): void { - window.scrollTo(0, 0); - } - public render(): React.ReactNode { - const dispatcher = this.props.dispatcher; - const depositTokenAddress = this.props.sideToAssetToken[Side.Deposit].address; - const depositToken = this.props.tokenByAddress[depositTokenAddress]; - const receiveTokenAddress = this.props.sideToAssetToken[Side.Receive].address; - const receiveToken = this.props.tokenByAddress[receiveTokenAddress]; - const takerExplanation = - 'If a taker is specified, only they are
    \ - allowed to fill this order. If no taker is
    \ - specified, anyone is able to fill it.'; - const exchangeContractIfExists = this.props.blockchain.getExchangeContractAddressIfExists(); - const initialTakerAddress = - this.props.orderTakerAddress === constants.NULL_ADDRESS ? '' : this.props.orderTakerAddress; - const rootClassName = this.props.isFullWidth ? 'clearfix mb2' : 'clearfix mb2 lg-px4 md-px4 sm-px2'; - return ( -
    - {!this.props.shouldHideHeader && ( -
    -

    Generate an order

    - -
    - )} -
    -
    -
    -
    - - -
    -
    -
    - -
    -
    -
    - - -
    -
    -
    -
    -
    -
    Expiration
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    -
    - -
    - {this.state.globalErrMsg !== '' && ( - - )} -
    -
    - - - -
    - ); - } - private _onTokenAmountChange(token: Token, side: Side, _isValid: boolean, amount?: BigNumber): void { - this.props.dispatcher.updateChosenAssetToken(side, { - address: token.address, - amount, - }); - } - private _onCloseOrderJSONDialog(): void { - // Upon closing the order JSON dialog, we update the orderSalt stored in the Redux store - // with a new value so that if a user signs the identical order again, the newly signed - // orderHash will not collide with the previously generated orderHash. - this.props.dispatcher.updateOrderSalt(generatePseudoRandomSalt()); - this.setState({ - signingState: SigningState.Unsigned, - }); - } - private async _onSignClickedAsync(): Promise { - if (this.props.blockchainErr !== BlockchainErrs.NoError) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return false; - } - - // Check if all required inputs were supplied - const debitToken = this.props.sideToAssetToken[Side.Deposit]; - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const [debitBalance, debitAllowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - debitToken.address, - ); - const receiveToken = this.props.sideToAssetToken[Side.Receive]; - const receiveAmount = receiveToken.amount; - if ( - !_.isUndefined(debitToken.amount) && - !_.isUndefined(receiveAmount) && - debitToken.amount.gt(0) && - receiveAmount.gt(0) && - this.props.userAddress !== '' && - debitBalance.gte(debitToken.amount) && - debitAllowance.gte(debitToken.amount) - ) { - const signedOrder = await this._signTransactionAsync(); - const doesSignedOrderExist = !_.isUndefined(signedOrder); - if (doesSignedOrderExist) { - analytics.trackOrderEvent('Sign Order Success', signedOrder); - this.setState({ - globalErrMsg: '', - shouldShowIncompleteErrs: false, - }); - } - return doesSignedOrderExist; - } else { - let globalErrMsg = 'You must fix the above errors in order to generate a valid order'; - if (this.props.userAddress === '') { - globalErrMsg = 'You must enable wallet communication'; - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - } - analytics.track('Sign Order Failure', { - makerTokenAmount: debitToken.amount.toString(), - makerToken: this.props.tokenByAddress[debitToken.address].symbol, - takerTokenAmount: receiveToken.amount.toString(), - takerToken: this.props.tokenByAddress[receiveToken.address].symbol, - }); - this.setState({ - globalErrMsg, - shouldShowIncompleteErrs: true, - }); - return false; - } - } - private async _signTransactionAsync(): Promise { - this.setState({ - signingState: SigningState.Signing, - }); - const exchangeAddress = this.props.blockchain.getExchangeContractAddressIfExists(); - if (_.isUndefined(exchangeAddress)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - this.setState({ - signingState: SigningState.Unsigned, - }); - return undefined; - } - const hashData = this.props.hashData; - - const makerAssetData = assetDataUtils.encodeERC20AssetData(hashData.depositTokenContractAddr); - const takerAssetData = assetDataUtils.encodeERC20AssetData(hashData.receiveTokenContractAddr); - const zeroExOrder: ZeroExOrder = { - senderAddress: constants.NULL_ADDRESS, - exchangeAddress, - expirationTimeSeconds: hashData.orderExpiryTimestamp, - feeRecipientAddress: hashData.feeRecipientAddress, - makerAddress: hashData.orderMakerAddress, - makerFee: hashData.makerFee, - makerAssetData, - makerAssetAmount: hashData.depositAmount, - salt: hashData.orderSalt, - takerAddress: hashData.orderTakerAddress, - takerFee: hashData.takerFee, - takerAssetData, - takerAssetAmount: hashData.receiveAmount, - }; - const orderHash = orderHashUtils.getOrderHashHex(zeroExOrder); - - let globalErrMsg = ''; - let order; - try { - const signature = await this.props.blockchain.signOrderHashAsync(orderHash); - order = utils.generateOrder( - exchangeAddress, - this.props.sideToAssetToken, - hashData.orderExpiryTimestamp, - this.props.orderTakerAddress, - this.props.userAddress, - hashData.makerFee, - hashData.takerFee, - hashData.feeRecipientAddress, - signature, - this.props.tokenByAddress, - hashData.orderSalt, - ); - const validationResult = validator.validate(order, portalOrderSchema); - if (validationResult.errors.length > 0) { - globalErrMsg = 'Order signing failed. Please refresh and try again'; - logUtils.log(`Unexpected error occured: Order validation failed: - ${validationResult.errors}`); - } - } catch (err) { - const errMsg = `${err}`; - if (utils.didUserDenyWeb3Request(errMsg)) { - globalErrMsg = 'User denied sign request'; - } else { - globalErrMsg = 'An unexpected error occured. Please try refreshing the page'; - logUtils.log(`Unexpected error occured: ${err}`); - logUtils.log(err.stack); - errorReporter.report(err); - } - } - this.setState({ - signingState: globalErrMsg === '' ? SigningState.Signed : SigningState.Unsigned, - globalErrMsg, - }); - return order; - } - private _updateOrderAddress(address?: string): void { - if (!_.isUndefined(address)) { - const normalizedAddress = _.isEmpty(address) ? constants.NULL_ADDRESS : address; - this.props.dispatcher.updateOrderTakerAddress(normalizedAddress); - } - } -} diff --git a/packages/website/ts/components/generate_order/new_token_form.tsx b/packages/website/ts/components/generate_order/new_token_form.tsx deleted file mode 100644 index ce684d177..000000000 --- a/packages/website/ts/components/generate_order/new_token_form.tsx +++ /dev/null @@ -1,229 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as _ from 'lodash'; -import TextField from 'material-ui/TextField'; -import * as moment from 'moment'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { AddressInput } from 'ts/components/inputs/address_input'; -import { Alert } from 'ts/components/ui/alert'; -import { LifeCycleRaisedButton } from 'ts/components/ui/lifecycle_raised_button'; -import { RequiredLabel } from 'ts/components/ui/required_label'; -import { AlertTypes, Token, TokenByAddress } from 'ts/types'; - -interface NewTokenFormProps { - blockchain: Blockchain; - tokenByAddress: TokenByAddress; - onNewTokenSubmitted: (token: Token) => void; -} - -interface NewTokenFormState { - globalErrMsg: string; - name: string; - nameErrText: string; - symbol: string; - symbolErrText: string; - address: string; - shouldShowAddressIncompleteErr: boolean; - decimals: string; - decimalsErrText: string; -} - -export class NewTokenForm extends React.Component { - constructor(props: NewTokenFormProps) { - super(props); - this.state = { - address: '', - globalErrMsg: '', - name: '', - nameErrText: '', - shouldShowAddressIncompleteErr: false, - symbol: '', - symbolErrText: '', - decimals: '18', - decimalsErrText: '', - }; - } - public render(): React.ReactNode { - return ( -
    -
    - } - value={this.state.name} - errorText={this.state.nameErrText} - onChange={this._onTokenNameChanged.bind(this)} - /> -
    -
    - } - value={this.state.symbol} - errorText={this.state.symbolErrText} - onChange={this._onTokenSymbolChanged.bind(this)} - /> -
    -
    - -
    -
    - } - value={this.state.decimals} - errorText={this.state.decimalsErrText} - onChange={this._onTokenDecimalsChanged.bind(this)} - /> -
    -
    - -
    - {this.state.globalErrMsg !== '' && } -
    - ); - } - private async _onAddNewTokenClickAsync(): Promise { - // Trigger validation of name and symbol - this._onTokenNameChanged(undefined, this.state.name); - this._onTokenSymbolChanged(undefined, this.state.symbol); - this._onTokenDecimalsChanged(undefined, this.state.decimals); - - const isAddressIncomplete = this.state.address === ''; - let doesContractExist = false; - if (!isAddressIncomplete) { - doesContractExist = await this.props.blockchain.doesContractExistAtAddressAsync(this.state.address); - } - - let hasBalanceAllowanceErr = false; - if (doesContractExist) { - try { - await this.props.blockchain.getCurrentUserTokenBalanceAndAllowanceAsync(this.state.address); - } catch (err) { - hasBalanceAllowanceErr = true; - } - } - - let globalErrMsg = ''; - if ( - this.state.nameErrText !== '' || - this.state.symbolErrText !== '' || - this.state.decimalsErrText !== '' || - isAddressIncomplete - ) { - globalErrMsg = 'Please fix the above issues'; - } else if (!doesContractExist) { - globalErrMsg = 'No contract found at supplied address'; - } else if (hasBalanceAllowanceErr) { - globalErrMsg = 'Unsuccessful call to `balanceOf` and/or `allowance` on supplied contract address'; - } else if (!isAddressIncomplete && !_.isUndefined(this.props.tokenByAddress[this.state.address])) { - globalErrMsg = 'A token already exists with this address'; - } - - if (globalErrMsg !== '') { - this.setState({ - globalErrMsg, - shouldShowAddressIncompleteErr: isAddressIncomplete, - }); - return; - } - - const newToken: Token = { - address: this.state.address, - decimals: _.parseInt(this.state.decimals), - iconUrl: undefined, - name: this.state.name, - symbol: this.state.symbol.toUpperCase(), - trackedTimestamp: moment().unix(), - isRegistered: false, - }; - this.props.onNewTokenSubmitted(newToken); - } - private _onTokenNameChanged(_event: any, name: string): void { - let nameErrText = ''; - const maxLength = 30; - const tokens = _.values(this.props.tokenByAddress); - const tokenWithNameIfExists = _.find(tokens, { name }); - const doesTokenWithNameExists = !_.isUndefined(tokenWithNameIfExists); - if (name === '') { - nameErrText = 'Name is required'; - } else if (!this._isValidName(name)) { - nameErrText = 'Name should only contain letters, digits and spaces'; - } else if (name.length > maxLength) { - nameErrText = `Max length is ${maxLength}`; - } else if (doesTokenWithNameExists) { - nameErrText = 'Token with this name already exists'; - } - - this.setState({ - name, - nameErrText, - }); - } - private _onTokenSymbolChanged(_event: any, symbol: string): void { - let symbolErrText = ''; - const maxLength = 5; - const tokens = _.values(this.props.tokenByAddress); - const doesTokenWithSymbolExists = !_.isUndefined(_.find(tokens, { symbol })); - if (symbol === '') { - symbolErrText = 'Symbol is required'; - } else if (!this._isAlphanumeric(symbol)) { - symbolErrText = 'Can only include alphanumeric characters'; - } else if (symbol.length > maxLength) { - symbolErrText = `Max length is ${maxLength}`; - } else if (doesTokenWithSymbolExists) { - symbolErrText = 'Token with symbol already exists'; - } - - this.setState({ - symbol, - symbolErrText, - }); - } - private _onTokenDecimalsChanged(_event: any, decimals: string): void { - let decimalsErrText = ''; - const maxLength = 2; - if (decimals === '') { - decimalsErrText = 'Decimals is required'; - } else if (!this._isInteger(decimals)) { - decimalsErrText = 'Must be an integer'; - } else if (decimals.length > maxLength) { - decimalsErrText = `Max length is ${maxLength}`; - } - - this.setState({ - decimals, - decimalsErrText, - }); - } - private _onTokenAddressChanged(address?: string): void { - if (!_.isUndefined(address)) { - this.setState({ - address, - }); - } - } - private _isValidName(input: string): boolean { - return /^[a-z0-9 ]+$/i.test(input); - } - private _isInteger(input: string): boolean { - return /^[0-9]+$/i.test(input); - } - private _isAlphanumeric(input: string): boolean { - return /^[a-zA-Z0-9]+$/i.test(input); - } -} diff --git a/packages/website/ts/components/hamburger.tsx b/packages/website/ts/components/hamburger.tsx deleted file mode 100644 index 34d4ccc46..000000000 --- a/packages/website/ts/components/hamburger.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -interface Props { - isOpen: boolean; - onClick?: () => void; -} - -export const Hamburger: React.FunctionComponent = (props: Props) => { - return ( - - - - - - ); -}; - -const StyledHamburger = styled.button` - background: none; - border: 0; - width: 22px; - height: 16px; - position: relative; - z-index: 25; - padding: 0; - outline: none; - user-select: none; - - @media (min-width: 800px) { - display: none; - } - - span { - display: block; - background-color: ${props => props.theme.textColor}; - width: 100%; - height: 2px; - margin-bottom: 5px; - transform-origin: 4px 0px; - transition: transform 0.5s cubic-bezier(0.77, 0.2, 0.05, 1), - background-color 0.5s cubic-bezier(0.77, 0.2, 0.05, 1), opacity 0.55s ease; - - &:first-child { - //transform-origin: 0% 0%; - } - - &:last-child { - //transform-origin: 0% 100%; - } - - ${props => - props.isOpen && - ` - opacity: 1; - transform: rotate(45deg) translate(0, 1px); - - &:nth-child(2) { - opacity: 0; - transform: rotate(0deg) scale(0.2, 0.2); - } - - &:last-child { - transform: rotate(-45deg) translate(1px, -4px); - } - `} - } -`; diff --git a/packages/website/ts/components/header.tsx b/packages/website/ts/components/header.tsx deleted file mode 100644 index 088f41048..000000000 --- a/packages/website/ts/components/header.tsx +++ /dev/null @@ -1,249 +0,0 @@ -import { Link } from '@0x/react-shared'; -import _ from 'lodash'; -import * as React from 'react'; -import MediaQuery from 'react-responsive'; -import styled, { css, withTheme } from 'styled-components'; - -import Headroom from 'react-headroom'; - -import { Button } from 'ts/components/button'; -import { DropdownDevelopers } from 'ts/components/dropdowns/dropdown_developers'; -import { DropdownProducts } from 'ts/components/dropdowns/dropdown_products'; -import { Hamburger } from 'ts/components/hamburger'; -import { Logo } from 'ts/components/logo'; -import { MobileNav } from 'ts/components/mobileNav'; -import { FlexWrap } from 'ts/components/newLayout'; -import { ThemeValuesInterface } from 'ts/components/siteWrap'; -import { WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface HeaderProps { - location?: Location; - isNavToggled?: boolean; - toggleMobileNav?: () => void; - theme: ThemeValuesInterface; -} - -interface NavItemProps { - url?: string; - id?: string; - text?: string; - dropdownWidth?: number; - dropdownComponent?: React.FunctionComponent; - shouldOpenInNewTab?: boolean; -} - -interface DropdownWrapInterface { - width?: number; -} - -const navItems: NavItemProps[] = [ - { - id: 'why', - url: WebsitePaths.Why, - text: 'Why 0x', - }, - { - id: 'products', - text: 'Products', - dropdownComponent: DropdownProducts, - dropdownWidth: 280, - }, - { - id: 'developers', - text: 'Developers', - dropdownComponent: DropdownDevelopers, - dropdownWidth: 480, - }, - { - id: 'about', - url: WebsitePaths.AboutMission, - text: 'About', - }, - { - id: 'blog', - url: constants.URL_BLOG, - shouldOpenInNewTab: true, - text: 'Blog', - }, -]; - -class HeaderBase extends React.Component { - public onUnpin = () => { - if (this.props.isNavToggled) { - this.props.toggleMobileNav(); - } - }; - - public render(): React.ReactNode { - const { isNavToggled, toggleMobileNav, theme } = this.props; - - return ( - - - - - - - - - {_.map(navItems, (link, index) => ( - - ))} - - - - - Trade on 0x - - - - - - - - - ); - } -} - -export const Header = withTheme(HeaderBase); - -const NavItem = (props: { link: NavItemProps; key: string }) => { - const { link } = props; - const Subnav = link.dropdownComponent; - const linkElement = _.isUndefined(link.url) ? ( - {link.text} - ) : ( - - {link.text} - - ); - return ( - - {linkElement} - - {link.dropdownComponent && ( - - - - )} - - ); -}; - -const StyledHeader = styled.header` - padding: 30px; - background-color: ${props => props.theme.bgColor}; -`; - -const LinkWrap = styled.li` - position: relative; - - a { - display: block; - } - - @media (min-width: 800px) { - &:hover > div { - display: block; - visibility: visible; - opacity: 1; - transform: translate3d(0, 0, 0); - transition: opacity 0.35s, transform 0.35s, visibility 0s; - } - } -`; - -const linkStyles = css` - color: ${props => props.theme.textColor}; - opacity: 0.5; - transition: opacity 0.35s; - padding: 15px 0; - margin: 0 30px; - - &:hover { - opacity: 1; - } -`; - -const StyledNavLink = styled(Link).attrs({ - activeStyle: { opacity: 1 }, -})` - ${linkStyles}; -`; - -const StyledAnchor = styled.a` - ${linkStyles}; - cursor: default; -`; - -const HeaderWrap = styled(FlexWrap)` - justify-content: space-between; - align-items: center; - - @media (max-width: 800px) { - padding-top: 0; - display: flex; - padding-bottom: 0; - } -`; - -const NavLinks = styled.ul` - display: flex; - align-items: center; - justify-content: space-between; - - @media (max-width: 800px) { - display: none; - } -`; - -const DropdownWrap = styled.div` - width: ${props => props.width || 280}px; - padding: 15px 0; - border: 1px solid transparent; - border-color: ${props => props.theme.dropdownBorderColor}; - background-color: ${props => props.theme.dropdownBg}; - color: ${props => props.theme.dropdownColor}; - position: absolute; - top: 100%; - left: calc(50% - ${props => (props.width || 280) / 2}px); - visibility: hidden; - opacity: 0; - transform: translate3d(0, -10px, 0); - transition: opacity 0.35s, transform 0.35s, visibility 0s 0.35s; - z-index: 20; - - &:after, - &:before { - bottom: 100%; - left: 50%; - border: solid transparent; - content: ' '; - height: 0; - width: 0; - position: absolute; - pointer-events: none; - } - &:after { - border-color: rgba(255, 255, 255, 0); - border-bottom-color: ${props => props.theme.dropdownBg}; - border-width: 10px; - margin-left: -10px; - } - &:before { - border-color: rgba(255, 0, 0, 0); - border-bottom-color: ${props => props.theme.dropdownBorderColor}; - border-width: 11px; - margin-left: -11px; - } - - @media (max-width: 768px) { - display: none; - } -`; - -const TradeButton = styled(Button)` - padding: 14px 22px !important; -`; diff --git a/packages/website/ts/components/hero.tsx b/packages/website/ts/components/hero.tsx deleted file mode 100644 index c326e0292..000000000 --- a/packages/website/ts/components/hero.tsx +++ /dev/null @@ -1,143 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -import { addFadeInAnimation } from 'ts/constants/animations'; - -interface Props { - title: string; - maxWidth?: string; - maxWidthHeading?: string; - isLargeTitle?: boolean; - isFullWidth?: boolean; - isCenteredMobile?: boolean; - description: string; - figure?: React.ReactNode; - actions?: React.ReactNode; -} - -const Section = styled.section` - padding: 120px 0; - - @media (max-width: 768px) { - padding: 60px 0; - } -`; - -interface WrapProps { - isCentered?: boolean; - isFullWidth?: boolean; - isCenteredMobile?: boolean; -} -const Wrap = styled.div` - width: calc(100% - 60px); - margin: 0 auto; - - @media (min-width: 768px) { - max-width: ${props => (!props.isFullWidth ? '895px' : '1136px')}; - flex-direction: row-reverse; - display: flex; - align-items: center; - text-align: ${props => props.isCentered && 'center'}; - justify-content: ${props => (props.isCentered ? 'center' : 'space-between')}; - } - - @media (max-width: 768px) { - text-align: ${props => (props.isCenteredMobile ? `center` : 'left')}; - } -`; - -interface TitleProps { - isLarge?: any; - maxWidth?: string; -} -const Title = styled.h1` - font-size: ${props => (props.isLarge ? '80px' : '50px')}; - font-weight: 300; - line-height: 1.1; - margin-left: auto; - margin-right: auto; - margin-bottom: 30px; - max-width: ${props => props.maxWidth}; - ${addFadeInAnimation('0.5s')} - - @media (max-width: 1024px) { - font-size: 60px; - } - - @media (max-width: 768px) { - font-size: 46px; - } -`; - -const Description = styled.p` - font-size: 22px; - line-height: 31px; - font-weight: 300; - padding: 0; - margin-bottom: 50px; - color: ${props => props.theme.introTextColor}; - ${addFadeInAnimation('0.5s', '0.15s')} @media (max-width: 1024px) { - margin-bottom: 30px; - } -`; - -const Content = styled.div<{ width: string }>` - width: 100%; - - @media (min-width: 768px) { - max-width: ${props => props.width}; - } -`; - -const ButtonWrap = styled.div` - display: inline-flex; - align-items: center; - - * + * { - margin-left: 12px; - } - - > *:nth-child(1) { - ${addFadeInAnimation('0.6s', '0.3s')}; - } - > *:nth-child(2) { - ${addFadeInAnimation('0.6s', '0.4s')}; - } - - @media (max-width: 500px) { - flex-direction: column; - justify-content: center; - - * { - padding-left: 20px; - padding-right: 20px; - } - - * + * { - margin-left: 0; - margin-top: 12px; - } - } -`; - -export const Hero: React.StatelessComponent = (props: Props) => ( -
    - - {props.figure && {props.figure}} - - - - {props.title} - - - {props.description} - - {props.actions && {props.actions}} - - -
    -); - -Hero.defaultProps = { - isCenteredMobile: true, -}; diff --git a/packages/website/ts/components/heroAnimation.tsx b/packages/website/ts/components/heroAnimation.tsx deleted file mode 100644 index 42956fb6a..000000000 --- a/packages/website/ts/components/heroAnimation.tsx +++ /dev/null @@ -1,123 +0,0 @@ -import * as React from 'react'; -import styled, { keyframes } from 'styled-components'; - -export const HeroAnimation = () => ( - - - - - - - - - - - - - - -); - -const moveUp = keyframes` - 0% { transform: translate3d(0, 0, 0) } - 45% { transform: translate3d(0, 0, 0) } - 55% { transform: translate3d(0, -7%, 0) } - 85% { transform: translate3d(0, -7%, 0) } - 100% { transform: translate3d(0, 0, 0) } -`; - -const moveLeft = keyframes` - 0% { transform: translate3d(0, 0, 0) } - 45% { transform: translate3d(0, 0, 0) } - 55% { transform: translate3d(-7%, 0, 0) } - 85% { transform: translate3d(-7%, 0, 0) } - 100% { transform: translate3d(0, 0, 0) } -`; - -const moveDiag = keyframes` - 0% { transform: translate3d(0, 0, 0) } - 45% { transform: translate3d(0, 0, 0) } - 55% { transform: translate3d(5%, 5%, 0) } - 85% { transform: translate3d(5%, 5%, 0) } - 100% { transform: translate3d(0, 0, 0) } -`; - -const moveRight = keyframes` - 0% { transform: translate3d(0, 0, 0) } - 45% { transform: translate3d(0, 0, 0) } - 55% { transform: translate3d(7%, 0, 0) } - 85% { transform: translate3d(7%, 0, 0) } - 100% { transform: translate3d(0, 0, 0) } -`; - -const spin = keyframes` - 0% { transform: rotate(0deg) } - 65% { transform: rotate(0deg) } - 85% { transform: rotate(90deg) } - 100% { transform: rotate(90deg) } -`; - -const moveIn = keyframes` - 0% { opacity: 0; transform: scale(1.7) rotate(-30deg) } - 100% { opacity: 1; transform: scale(1) rotate(0deg) } -`; - -const Image = styled.svg` - opacity: 0; - transform: scale(1.5) rotate(-30deg); - animation: ${moveIn} 2s forwards; -`; - -const TopCircle = styled.circle` - animation: ${moveUp} 4s -2.85s infinite; -`; -const LeftCircle = styled.circle` - animation: ${moveLeft} 4s -2.85s infinite; -`; -const Oblong = styled.path` - animation: ${moveLeft} 4s -2.85s infinite; -`; -const Square = styled.path` - animation: ${moveDiag} 4s -2.85s infinite; -`; -const Rectangle = styled.path` - animation: ${moveRight} 4s -2.85s infinite; -`; - -const Logo = styled.path` - animation: ${spin} 4s -2.8s infinite; - transform-origin: 202px 202.7px; -`; diff --git a/packages/website/ts/components/heroImage.tsx b/packages/website/ts/components/heroImage.tsx deleted file mode 100644 index af7c055ac..000000000 --- a/packages/website/ts/components/heroImage.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -interface Props { - image: React.ReactNode; -} - -export const LandingAnimation = (props: Props) => {props.image}; - -const Wrap = styled.figure` - display: inline-block; - - svg { - width: 100%; - height: auto; - } - - @media (min-width: 768px) { - width: 100%; - max-width: 400px; - } - - @media (max-width: 768px) { - width: 180px; - margin-bottom: 40px; - } -`; diff --git a/packages/website/ts/components/icon.tsx b/packages/website/ts/components/icon.tsx deleted file mode 100644 index 60e4d04ee..000000000 --- a/packages/website/ts/components/icon.tsx +++ /dev/null @@ -1,66 +0,0 @@ -import * as React from 'react'; -import Loadable from 'react-loadable'; -import styled from 'styled-components'; - -import { Paragraph } from 'ts/components/text'; -import { getCSSPadding, PaddingInterface } from 'ts/constants/utilities'; - -interface IconProps extends PaddingInterface { - name?: string; - component?: React.ReactNode; - size?: 'small' | 'medium' | 'large' | 'hero' | number; -} - -export const Icon: React.FunctionComponent = (props: IconProps) => { - if (props.name && !props.component) { - const IconSVG = Loadable({ - loader: async () => import(/* webpackChunkName: "icon" */ `ts/icons/illustrations/${props.name}.svg`), - loading: () => Loading, - }); - - return ( - - - - ); - } - - if (props.component) { - return {props.component}; - } - - return null; -}; - -export const InlineIconWrap = styled.div` - margin: ${props => getCSSPadding(props.margin)}; - display: flex; - align-items: center; - justify-content: center; - - > figure { - margin: 0 5px; - } -`; - -const _getSize = (size: string | number = 'small'): string => { - if (typeof size === 'string') { - return `var(--${size}Icon)`; - } - - return `${size}px`; -}; - -const StyledIcon = styled.figure` - width: ${props => _getSize(props.size)}; - height: ${props => _getSize(props.size)}; - margin: ${props => getCSSPadding(props.margin)}; - display: inline-block; - flex-shrink: 0; - - svg { - width: 100%; - height: 100%; - object-fit: cover; - } -`; diff --git a/packages/website/ts/components/image.tsx b/packages/website/ts/components/image.tsx deleted file mode 100644 index 0137cfc97..000000000 --- a/packages/website/ts/components/image.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -interface Props { - alt?: string; - src?: any; - srcset?: any; - isCentered?: boolean; -} - -const ImageClass: React.FunctionComponent = (props: Props) => { - return ; -}; - -export const Image = styled(ImageClass)` - margin: ${props => props.isCentered && `0 auto`}; -`; diff --git a/packages/website/ts/components/inputs/address_input.tsx b/packages/website/ts/components/inputs/address_input.tsx deleted file mode 100644 index 1a71f8081..000000000 --- a/packages/website/ts/components/inputs/address_input.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { addressUtils } from '@0x/utils'; -import * as _ from 'lodash'; -import TextField from 'material-ui/TextField'; -import * as React from 'react'; -import { RequiredLabel } from 'ts/components/ui/required_label'; - -interface AddressInputProps { - disabled?: boolean; - initialAddress: string; - isRequired?: boolean; - hintText?: string; - shouldHideLabel?: boolean; - label?: string; - shouldShowIncompleteErrs?: boolean; - updateAddress: (address?: string) => void; -} - -interface AddressInputState { - address: string; - errMsg: string; -} - -export class AddressInput extends React.Component { - constructor(props: AddressInputProps) { - super(props); - this.state = { - address: this.props.initialAddress, - errMsg: '', - }; - } - public componentWillReceiveProps(nextProps: AddressInputProps): void { - if (nextProps.shouldShowIncompleteErrs && this.props.isRequired && this.state.address === '') { - this.setState({ - errMsg: 'Address is required', - }); - } - } - public render(): React.ReactNode { - const label = this.props.isRequired ? : this.props.label; - const labelDisplay = this.props.shouldHideLabel ? 'hidden' : 'block'; - const hintText = this.props.hintText ? this.props.hintText : ''; - return ( -
    - -
    - ); - } - private _onOrderTakerAddressUpdated(e: any): void { - const address = e.target.value.toLowerCase(); - const isValidAddress = addressUtils.isAddress(address) || address === ''; - const errMsg = isValidAddress ? '' : 'Invalid ethereum address'; - this.setState({ - address, - errMsg, - }); - const addressIfValid = isValidAddress ? address : undefined; - this.props.updateAddress(addressIfValid); - } -} diff --git a/packages/website/ts/components/inputs/allowance_state_toggle.tsx b/packages/website/ts/components/inputs/allowance_state_toggle.tsx deleted file mode 100644 index 3a78d32f3..000000000 --- a/packages/website/ts/components/inputs/allowance_state_toggle.tsx +++ /dev/null @@ -1,160 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { BigNumber, logUtils } from '@0x/utils'; -import * as _ from 'lodash'; -import * as React from 'react'; -import ReactTooltip from 'react-tooltip'; -import { Blockchain } from 'ts/blockchain'; -import { AllowanceState, AllowanceStateView } from 'ts/components/ui/allowance_state_view'; -import { Container } from 'ts/components/ui/container'; -import { PointerDirection } from 'ts/components/ui/pointer'; -import { Text } from 'ts/components/ui/text'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { BalanceErrs, Token, TokenState } from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -export interface AllowanceStateToggleProps { - networkId: number; - blockchain: Blockchain; - dispatcher: Dispatcher; - token: Token; - tokenState: TokenState; - userAddress: string; - onErrorOccurred?: (errType: BalanceErrs) => void; - refetchTokenStateAsync: () => Promise; - tooltipDirection?: PointerDirection; -} - -export interface AllowanceStateToggleState { - allowanceState: AllowanceState; - prevTokenState: TokenState; - loadingMessage?: string; -} - -const DEFAULT_ALLOWANCE_AMOUNT_IN_BASE_UNITS = new BigNumber(2).pow(256).minus(1); - -export class AllowanceStateToggle extends React.Component { - public static defaultProps = { - onErrorOccurred: _.noop.bind(_), - tooltipDirection: PointerDirection.Right, - }; - private static _getAllowanceState(tokenState: TokenState): AllowanceState { - if (!tokenState.isLoaded) { - return AllowanceState.Loading; - } - if (tokenState.allowance.gt(0)) { - return AllowanceState.Unlocked; - } - return AllowanceState.Locked; - } - constructor(props: AllowanceStateToggleProps) { - super(props); - const tokenState = props.tokenState; - this.state = { - allowanceState: AllowanceStateToggle._getAllowanceState(tokenState), - prevTokenState: tokenState, - }; - } - - public render(): React.ReactNode { - const tooltipId = `tooltip-id-${this.props.token.symbol}`; - return ( - - - {this._getTooltipContent()} - -
    - -
    -
    - ); - } - public componentWillReceiveProps(nextProps: AllowanceStateToggleProps): void { - const nextTokenState = nextProps.tokenState; - const prevTokenState = this.state.prevTokenState; - if ( - !nextTokenState.allowance.eq(prevTokenState.allowance) || - nextTokenState.isLoaded !== prevTokenState.isLoaded - ) { - const tokenState = nextProps.tokenState; - this.setState({ - prevTokenState: tokenState, - allowanceState: AllowanceStateToggle._getAllowanceState(nextTokenState), - }); - } - } - private _getTooltipContent(): React.ReactNode { - const symbol = this.props.token.symbol; - switch (this.state.allowanceState) { - case AllowanceState.Loading: - return ( - - {this.state.loadingMessage || 'Loading...'} - - ); - case AllowanceState.Locked: - return ( - - Click to enable {symbol} for trading - - ); - case AllowanceState.Unlocked: - return ( - - {symbol} is available for trading - - ); - default: - return null; - } - } - private async _onToggleAllowanceAsync(): Promise { - // Close all tooltips - ReactTooltip.hide(); - if (this.props.userAddress === '') { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return; - } - - let newAllowanceAmountInBaseUnits = new BigNumber(0); - if (!this._isAllowanceSet()) { - newAllowanceAmountInBaseUnits = DEFAULT_ALLOWANCE_AMOUNT_IN_BASE_UNITS; - } - const isUnlockingToken = newAllowanceAmountInBaseUnits.gt(0); - this.setState({ - allowanceState: AllowanceState.Loading, - loadingMessage: `${isUnlockingToken ? 'Unlocking' : 'Locking'} ${this.props.token.symbol}`, - }); - const logData = { - tokenSymbol: this.props.token.symbol, - newAllowance: newAllowanceAmountInBaseUnits.toNumber(), - }; - try { - await this.props.blockchain.setProxyAllowanceAsync(this.props.token, newAllowanceAmountInBaseUnits); - analytics.track('Set Allowances Success', logData); - await this.props.refetchTokenStateAsync(); - } catch (err) { - analytics.track('Set Allowance Failure', logData); - this.setState({ - allowanceState: AllowanceStateToggle._getAllowanceState(this.state.prevTokenState), - }); - const errMsg = `${err}`; - if (utils.didUserDenyWeb3Request(errMsg)) { - return; - } - logUtils.log(`Unexpected error encountered: ${err}`); - logUtils.log(err.stack); - this.props.onErrorOccurred(BalanceErrs.AllowanceSettingFailed); - errorReporter.report(err); - } - } - private _isAllowanceSet(): boolean { - return !this.props.tokenState.allowance.eq(0); - } -} diff --git a/packages/website/ts/components/inputs/balance_bounded_input.tsx b/packages/website/ts/components/inputs/balance_bounded_input.tsx deleted file mode 100644 index 83f263842..000000000 --- a/packages/website/ts/components/inputs/balance_bounded_input.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import TextField from 'material-ui/TextField'; -import * as React from 'react'; -import { RequiredLabel } from 'ts/components/ui/required_label'; -import { ValidatedBigNumberCallback } from 'ts/types'; -import { utils } from 'ts/utils/utils'; - -interface BalanceBoundedInputProps { - label?: string; - balance: BigNumber; - amount?: BigNumber; - hintText?: string; - onChange: ValidatedBigNumberCallback; - onErrorMsgChange?: (errorMsg: React.ReactNode) => void; - shouldShowIncompleteErrs?: boolean; - shouldCheckBalance: boolean; - validate?: (amount: BigNumber) => React.ReactNode; - isDisabled?: boolean; - shouldShowErrs?: boolean; - shouldShowUnderline?: boolean; - inputStyle?: React.CSSProperties; - inputHintStyle?: React.CSSProperties; -} - -interface BalanceBoundedInputState { - errMsg: React.ReactNode; - amountString: string; -} - -export class BalanceBoundedInput extends React.Component { - public static defaultProps: Partial = { - shouldShowIncompleteErrs: false, - isDisabled: false, - shouldShowErrs: true, - hintText: 'amount', - onErrorMsgChange: _.noop.bind(_), - shouldShowUnderline: true, - }; - constructor(props: BalanceBoundedInputProps) { - super(props); - const amountString = this.props.amount ? this.props.amount.toString() : ''; - this.state = { - errMsg: this._validate(amountString, props.balance), - amountString, - }; - } - public componentWillReceiveProps(nextProps: BalanceBoundedInputProps): void { - if (nextProps === this.props) { - return; - } - const isCurrentAmountNumeric = utils.isNumeric(this.state.amountString); - if (!_.isUndefined(nextProps.amount)) { - let shouldResetState = false; - if (!isCurrentAmountNumeric) { - shouldResetState = true; - } else { - const currentAmount = new BigNumber(this.state.amountString); - if (!currentAmount.eq(nextProps.amount) || !nextProps.balance.eq(this.props.balance)) { - shouldResetState = true; - } - } - if (shouldResetState) { - const amountString = nextProps.amount.toString(); - this._setAmountState(amountString, nextProps.balance); - } - } else if (isCurrentAmountNumeric) { - const amountString = ''; - this._setAmountState(amountString, nextProps.balance); - } - } - public render(): React.ReactNode { - let errorText; - if (this.props.shouldShowErrs) { - errorText = - this.props.shouldShowIncompleteErrs && this.state.amountString === '' - ? 'This field is required' - : this.state.errMsg; - } - let label: React.ReactNode | string = ''; - if (!_.isUndefined(this.props.label)) { - label = ; - } - return ( - {this.props.hintText}} - onChange={this._onValueChange.bind(this)} - underlineStyle={{ width: 'calc(100% + 50px)' }} - inputStyle={this.props.inputStyle} - hintStyle={this.props.inputHintStyle} - underlineShow={this.props.shouldShowUnderline} - disabled={this.props.isDisabled} - /> - ); - } - private _onValueChange(_event: any, amountString: string): void { - this._setAmountState(amountString, this.props.balance, () => { - const isValid = _.isUndefined(this._validate(amountString, this.props.balance)); - const isPositiveNumber = utils.isNumeric(amountString) && !_.includes(amountString, '-'); - if (isPositiveNumber) { - this.props.onChange(isValid, new BigNumber(amountString)); - } else { - this.props.onChange(isValid); - } - }); - } - private _validate(amountString: string, balance: BigNumber): React.ReactNode { - if (!utils.isNumeric(amountString)) { - return amountString !== '' ? 'Must be a number' : ''; - } - const amount = new BigNumber(amountString); - if (amount.eq(0)) { - return 'Cannot be zero'; - } - if (this.props.shouldCheckBalance && amount.gt(balance)) { - return Insufficient balance.; - } - const errMsg = _.isUndefined(this.props.validate) ? undefined : this.props.validate(amount); - return errMsg; - } - private _setAmountState(amount: string, balance: BigNumber, callback: () => void = _.noop.bind(_)): void { - const errorMsg = this._validate(amount, balance); - this.props.onErrorMsgChange(errorMsg); - this.setState( - { - amountString: amount, - errMsg: errorMsg, - }, - callback, - ); - } -} diff --git a/packages/website/ts/components/inputs/eth_amount_input.tsx b/packages/website/ts/components/inputs/eth_amount_input.tsx deleted file mode 100644 index 6799e54bf..000000000 --- a/packages/website/ts/components/inputs/eth_amount_input.tsx +++ /dev/null @@ -1,65 +0,0 @@ -import { BigNumber } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { BalanceBoundedInput } from 'ts/components/inputs/balance_bounded_input'; -import { ValidatedBigNumberCallback } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface EthAmountInputProps { - label?: string; - balance: BigNumber; - amount?: BigNumber; - hintText?: string; - onChange: ValidatedBigNumberCallback; - onErrorMsgChange?: (errorMsg: React.ReactNode) => void; - shouldShowIncompleteErrs: boolean; - shouldCheckBalance: boolean; - shouldShowErrs?: boolean; - shouldShowUnderline?: boolean; - style?: React.CSSProperties; - labelStyle?: React.CSSProperties; - inputHintStyle?: React.CSSProperties; -} - -interface EthAmountInputState {} - -export class EthAmountInput extends React.Component { - public static defaultProps: Partial = { - shouldShowErrs: true, - shouldShowUnderline: true, - }; - public render(): React.ReactNode { - const amount = this.props.amount - ? Web3Wrapper.toUnitAmount(this.props.amount, constants.DECIMAL_PLACES_ETH) - : undefined; - return ( -
    - -
    ETH
    -
    - ); - } - private _onChange(isValid: boolean, amount?: BigNumber): void { - const baseUnitAmountIfExists = _.isUndefined(amount) - ? undefined - : Web3Wrapper.toBaseUnitAmount(amount, constants.DECIMAL_PLACES_ETH); - this.props.onChange(isValid, baseUnitAmountIfExists); - } - private _getLabelStyle(): React.CSSProperties { - return this.props.labelStyle || { paddingTop: _.isUndefined(this.props.label) ? 15 : 40 }; - } -} diff --git a/packages/website/ts/components/inputs/expiration_input.tsx b/packages/website/ts/components/inputs/expiration_input.tsx deleted file mode 100644 index 3e43c1c07..000000000 --- a/packages/website/ts/components/inputs/expiration_input.tsx +++ /dev/null @@ -1,100 +0,0 @@ -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import DatePicker from 'material-ui/DatePicker'; -import TimePicker from 'material-ui/TimePicker'; -import * as moment from 'moment'; -import * as React from 'react'; -import { utils } from 'ts/utils/utils'; - -interface ExpirationInputProps { - orderExpiryTimestamp: BigNumber; - updateOrderExpiry: (unixTimestampSec: BigNumber) => void; -} - -interface ExpirationInputState { - dateMoment: moment.Moment; - timeMoment: moment.Moment; -} - -export class ExpirationInput extends React.Component { - private readonly _earliestPickableMoment: moment.Moment; - constructor(props: ExpirationInputProps) { - super(props); - // Set the earliest pickable date to today at 00:00, so users can only pick the current or later dates - this._earliestPickableMoment = moment().startOf('day'); - const expirationMoment = utils.convertToMomentFromUnixTimestamp(props.orderExpiryTimestamp); - const initialOrderExpiryTimestamp = utils.initialOrderExpiryUnixTimestampSec(); - const didUserSetExpiry = !initialOrderExpiryTimestamp.eq(props.orderExpiryTimestamp); - this.state = { - dateMoment: didUserSetExpiry ? expirationMoment : undefined, - timeMoment: didUserSetExpiry ? expirationMoment : undefined, - }; - } - public render(): React.ReactNode { - const date = this.state.dateMoment ? this.state.dateMoment.toDate() : undefined; - const time = this.state.timeMoment ? this.state.timeMoment.toDate() : undefined; - return ( -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - ); - } - private _shouldDisableDate(date: Date): boolean { - return moment(date) - .startOf('day') - .isBefore(this._earliestPickableMoment); - } - private _clearDates(): void { - this.setState({ - dateMoment: undefined, - timeMoment: undefined, - }); - const defaultDateTime = utils.initialOrderExpiryUnixTimestampSec(); - this.props.updateOrderExpiry(defaultDateTime); - } - private _onDateChanged(_event: any, date: Date): void { - const dateMoment = moment(date); - this.setState({ - dateMoment, - }); - const timestamp = utils.convertToUnixTimestampSeconds(dateMoment, this.state.timeMoment); - this.props.updateOrderExpiry(timestamp); - } - private _onTimeChanged(_event: any, time: Date): void { - const timeMoment = moment(time); - this.setState({ - timeMoment, - }); - const dateMoment = _.isUndefined(this.state.dateMoment) ? moment() : this.state.dateMoment; - const timestamp = utils.convertToUnixTimestampSeconds(dateMoment, timeMoment); - this.props.updateOrderExpiry(timestamp); - } -} diff --git a/packages/website/ts/components/inputs/hash_input.tsx b/packages/website/ts/components/inputs/hash_input.tsx deleted file mode 100644 index 7688ffe21..000000000 --- a/packages/website/ts/components/inputs/hash_input.tsx +++ /dev/null @@ -1,68 +0,0 @@ -import { assetDataUtils, orderHashUtils } from '@0x/order-utils'; -import { Styles } from '@0x/react-shared'; -import { Order } from '@0x/types'; -import * as _ from 'lodash'; -import * as React from 'react'; -import ReactTooltip from 'react-tooltip'; - -import { Blockchain } from 'ts/blockchain'; -import { FakeTextField } from 'ts/components/ui/fake_text_field'; -import { HashData } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -const styles: Styles = { - textField: { - overflow: 'hidden', - paddingTop: 8, - textOverflow: 'ellipsis', - whiteSpace: 'nowrap', - }, -}; - -interface HashInputProps { - blockchain: Blockchain; - blockchainIsLoaded: boolean; - hashData: HashData; - label: string; -} - -interface HashInputState {} - -export class HashInput extends React.Component { - public render(): React.ReactNode { - const msgHashHex = this.props.blockchainIsLoaded ? this._generateMessageHashHex() : ''; - return ( -
    - -
    - {msgHashHex} -
    -
    - {msgHashHex} -
    - ); - } - private _generateMessageHashHex(): string { - const exchangeAddress = this.props.blockchain.getExchangeContractAddressIfExists(); - const hashData = this.props.hashData; - const makerAssetData = assetDataUtils.encodeERC20AssetData(hashData.depositTokenContractAddr); - const takerAssetData = assetDataUtils.encodeERC20AssetData(hashData.receiveTokenContractAddr); - const order: Order = { - senderAddress: constants.NULL_ADDRESS, - exchangeAddress, - expirationTimeSeconds: hashData.orderExpiryTimestamp, - feeRecipientAddress: hashData.feeRecipientAddress, - makerAddress: _.isEmpty(hashData.orderMakerAddress) ? constants.NULL_ADDRESS : hashData.orderMakerAddress, - makerFee: hashData.makerFee, - makerAssetData, - makerAssetAmount: hashData.depositAmount, - salt: hashData.orderSalt, - takerAddress: hashData.orderTakerAddress, - takerFee: hashData.takerFee, - takerAssetData, - takerAssetAmount: hashData.receiveAmount, - }; - const orderHash = orderHashUtils.getOrderHashHex(order); - return orderHash; - } -} diff --git a/packages/website/ts/components/inputs/identicon_address_input.tsx b/packages/website/ts/components/inputs/identicon_address_input.tsx deleted file mode 100644 index 6ba7584a7..000000000 --- a/packages/website/ts/components/inputs/identicon_address_input.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import * as React from 'react'; -import { AddressInput } from 'ts/components/inputs/address_input'; -import { Identicon } from 'ts/components/ui/identicon'; -import { InputLabel } from 'ts/components/ui/input_label'; -import { RequiredLabel } from 'ts/components/ui/required_label'; - -interface IdenticonAddressInputProps { - initialAddress: string; - isRequired?: boolean; - label: string; - updateOrderAddress: (address?: string) => void; -} - -interface IdenticonAddressInputState { - address: string; -} - -export class IdenticonAddressInput extends React.Component { - constructor(props: IdenticonAddressInputProps) { - super(props); - this.state = { - address: props.initialAddress, - }; - } - public render(): React.ReactNode { - const label = this.props.isRequired ? : this.props.label; - return ( -
    - -
    -
    - -
    -
    - -
    -
    -
    - ); - } - private _updateAddress(address?: string): void { - this.setState({ - address, - }); - this.props.updateOrderAddress(address); - } -} diff --git a/packages/website/ts/components/inputs/token_amount_input.tsx b/packages/website/ts/components/inputs/token_amount_input.tsx deleted file mode 100644 index fded3a9dd..000000000 --- a/packages/website/ts/components/inputs/token_amount_input.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { colors, Link } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import { Web3Wrapper } from '@0x/web3-wrapper'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { BalanceBoundedInput } from 'ts/components/inputs/balance_bounded_input'; -import { Token, ValidatedBigNumberCallback, WebsitePaths } from 'ts/types'; - -interface TokenAmountInputProps { - userAddress: string; - networkId: number; - blockchain: Blockchain; - token: Token; - label?: string; - amount?: BigNumber; - hintText?: string; - shouldShowIncompleteErrs: boolean; - shouldCheckBalance: boolean; - shouldCheckAllowance: boolean; - onChange: ValidatedBigNumberCallback; - onErrorMsgChange?: (errorMsg: React.ReactNode) => void; - lastForceTokenStateRefetch: number; - shouldShowErrs?: boolean; - shouldShowUnderline?: boolean; - style?: React.CSSProperties; - labelStyle?: React.CSSProperties; - inputHintStyle?: React.CSSProperties; -} - -interface TokenAmountInputState { - balance: BigNumber; - allowance: BigNumber; - isBalanceAndAllowanceLoaded: boolean; -} - -const HEIGHT_WITH_LABEL = 84; -const HEIGHT_WITHOUT_LABEL = 62; - -export class TokenAmountInput extends React.Component { - public static defaultProps: Partial = { - shouldShowErrs: true, - shouldShowUnderline: true, - }; - private _isUnmounted: boolean; - constructor(props: TokenAmountInputProps) { - super(props); - this._isUnmounted = false; - const defaultAmount = new BigNumber(0); - this.state = { - balance: defaultAmount, - allowance: defaultAmount, - isBalanceAndAllowanceLoaded: false, - }; - } - public componentWillMount(): void { - // tslint:disable-next-line:no-floating-promises - this._fetchBalanceAndAllowanceAsync(this.props.token.address, this.props.userAddress); - } - public componentWillUnmount(): void { - this._isUnmounted = true; - } - public componentWillReceiveProps(nextProps: TokenAmountInputProps): void { - if ( - nextProps.userAddress !== this.props.userAddress || - nextProps.networkId !== this.props.networkId || - nextProps.token.address !== this.props.token.address || - nextProps.lastForceTokenStateRefetch !== this.props.lastForceTokenStateRefetch - ) { - // tslint:disable-next-line:no-floating-promises - this._fetchBalanceAndAllowanceAsync(nextProps.token.address, nextProps.userAddress); - } - } - public render(): React.ReactNode { - const amount = this.props.amount - ? Web3Wrapper.toUnitAmount(this.props.amount, this.props.token.decimals) - : undefined; - return ( -
    - -
    {this.props.token.symbol}
    -
    - ); - } - private _onChange(isValid: boolean, amount?: BigNumber): void { - let baseUnitAmount; - if (!_.isUndefined(amount)) { - baseUnitAmount = Web3Wrapper.toBaseUnitAmount(amount, this.props.token.decimals); - } - this.props.onChange(isValid, baseUnitAmount); - } - private _validate(amount: BigNumber): React.ReactNode { - if (this.props.shouldCheckAllowance && amount.gt(this.state.allowance)) { - return ( - - Insufficient allowance.{' '} - - Set allowance - - - ); - } else { - return undefined; - } - } - private async _fetchBalanceAndAllowanceAsync(tokenAddress: string, userAddress: string): Promise { - this.setState({ - isBalanceAndAllowanceLoaded: false, - }); - const userAddressIfExists = _.isEmpty(userAddress) ? undefined : userAddress; - const [balance, allowance] = await this.props.blockchain.getTokenBalanceAndAllowanceAsync( - userAddressIfExists, - tokenAddress, - ); - if (!this._isUnmounted) { - this.setState({ - balance, - allowance, - isBalanceAndAllowanceLoaded: true, - }); - } - } - private _getStyle(): React.CSSProperties { - const hasLabel = !_.isUndefined(this.props.label); - return !_.isUndefined(this.props.style) - ? this.props.style - : { height: hasLabel ? HEIGHT_WITH_LABEL : HEIGHT_WITHOUT_LABEL }; - } - private _getLabelStyle(): React.CSSProperties { - const hasLabel = !_.isUndefined(this.props.label); - return this.props.labelStyle || { paddingTop: hasLabel ? 39 : 14 }; - } -} diff --git a/packages/website/ts/components/inputs/token_input.tsx b/packages/website/ts/components/inputs/token_input.tsx deleted file mode 100644 index c3c2d8b37..000000000 --- a/packages/website/ts/components/inputs/token_input.tsx +++ /dev/null @@ -1,103 +0,0 @@ -import { colors } from '@0x/react-shared'; -import Paper from 'material-ui/Paper'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { AssetPicker } from 'ts/components/generate_order/asset_picker'; -import { InputLabel } from 'ts/components/ui/input_label'; -import { TokenIcon } from 'ts/components/ui/token_icon'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { AssetToken, BlockchainErrs, Side, Token, TokenByAddress } from 'ts/types'; - -const TOKEN_ICON_DIMENSION = 80; - -interface TokenInputProps { - blockchain: Blockchain; - blockchainErr: BlockchainErrs; - dispatcher: Dispatcher; - label: string; - side: Side; - networkId: number; - assetToken: AssetToken; - updateChosenAssetToken: (side: Side, token: AssetToken) => void; - tokenByAddress: TokenByAddress; - userAddress: string; -} - -interface TokenInputState { - isHoveringIcon: boolean; - isPickerOpen: boolean; - trackCandidateTokenIfExists?: Token; -} - -export class TokenInput extends React.Component { - constructor(props: TokenInputProps) { - super(props); - this.state = { - isHoveringIcon: false, - isPickerOpen: false, - }; - } - public render(): React.ReactNode { - const token = this.props.tokenByAddress[this.props.assetToken.address]; - const iconStyles = { - cursor: 'pointer', - opacity: this.state.isHoveringIcon ? 0.5 : 1, - }; - return ( -
    -
    - -
    - -
    - -
    -
    - {token.name} -
    -
    - -
    - ); - } - private _onTokenChosen(tokenAddress: string): void { - const assetToken: AssetToken = { - address: tokenAddress, - amount: this.props.assetToken.amount, - }; - this.props.updateChosenAssetToken(this.props.side, assetToken); - this.setState({ - isPickerOpen: false, - }); - } - private _onToggleHover(isHoveringIcon: boolean): void { - this.setState({ - isHoveringIcon, - }); - } - private _onAssetClicked(): void { - if (this.props.blockchainErr !== BlockchainErrs.NoError) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return; - } - - this.setState({ - isPickerOpen: true, - }); - } -} diff --git a/packages/website/ts/components/link.tsx b/packages/website/ts/components/link.tsx deleted file mode 100644 index a66985acc..000000000 --- a/packages/website/ts/components/link.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { Link as SmartLink } from '@0x/react-shared'; -import * as React from 'react'; -import styled from 'styled-components'; - -interface LinkInterface { - color?: string; - children?: React.ReactNode | string; - isNoArrow?: boolean; - hasIcon?: boolean | string; - isBlock?: boolean; - isCentered?: boolean; - href?: string; - theme?: { - textColor: string; - }; - shouldOpenInNewTab?: boolean; - target?: string; -} - -export const Link = (props: LinkInterface) => { - const { children, isNoArrow, href } = props; - - return ( - - {children} - {!isNoArrow && ( - - - - )} - - ); -}; - -// Added this, & + & doesnt really work since we switch with element types... -export const LinkWrap = styled.div` - a + a, - a + button, - button + a { - margin-left: 20px; - } -`; - -const StyledLink = styled(SmartLink)` - display: ${props => !props.isBlock && 'inline-flex'}; - color: ${props => props.color || props.theme.linkColor}; - text-align: center; - font-size: 18px; - text-decoration: none; - align-items: center; - - @media (max-width: 768px) { - } - - svg { - margin-left: 3px; - } -`; diff --git a/packages/website/ts/components/logo.tsx b/packages/website/ts/components/logo.tsx deleted file mode 100644 index f89be0711..000000000 --- a/packages/website/ts/components/logo.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -import { ThemeInterface } from 'ts/components/siteWrap'; -import LogoIcon from 'ts/icons/logo-with-type.svg'; - -interface LogoInterface { - theme?: ThemeInterface; -} - -// Note let's refactor this -// is it absolutely necessary to have a stateless component -// to pass props down into the styled icon? -const StyledLogo = styled.div` - text-align: left; - position: relative; - z-index: 25; - - @media (max-width: 800px) { - svg { - width: 60px; - } - } -`; - -const Icon = styled(LogoIcon)` - flex-shrink: 0; - - path { - fill: ${props => props.theme.textColor}; - } -`; - -export const Logo: React.StatelessComponent = (props: LogoInterface) => ( - - - -); diff --git a/packages/website/ts/components/meta_tags.tsx b/packages/website/ts/components/meta_tags.tsx deleted file mode 100644 index f6c43d23f..000000000 --- a/packages/website/ts/components/meta_tags.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import * as React from 'react'; -import { Helmet } from 'react-helmet'; - -export interface MetaTagsProps { - title: string; - description: string; - imgSrc?: string; -} - -export const MetaTags: React.StatelessComponent = ({ title, description, imgSrc }) => ( - - {title} - - - - - - - - -); - -MetaTags.defaultProps = { - imgSrc: '/images/og_image.png', -}; diff --git a/packages/website/ts/components/mobileNav.tsx b/packages/website/ts/components/mobileNav.tsx deleted file mode 100644 index 1aa826755..000000000 --- a/packages/website/ts/components/mobileNav.tsx +++ /dev/null @@ -1,113 +0,0 @@ -import * as React from 'react'; -import MediaQuery from 'react-responsive'; -import styled from 'styled-components'; - -import { Link } from 'react-router-dom'; - -import { WrapGrid, WrapProps } from 'ts/components/newLayout'; -import { WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; - -interface Props { - isToggled: boolean; - toggleMobileNav: () => void; -} - -export class MobileNav extends React.PureComponent { - public render(): React.ReactNode { - const { isToggled, toggleMobileNav } = this.props; - - return ( - - -
    -

    Products

    - -
      -
    • - 0x Instant -
    • -
    • - 0x Launch Kit -
    • -
    -
    - -
    - -
  • - Why 0x -
  • -
  • - About -
  • -
  • - - Blog - -
  • -
    -
    - - {isToggled && } -
    -
    - ); - } -} - -const Wrap = styled.nav<{ isToggled: boolean }>` - width: 100%; - height: 357px; - background-color: ${props => props.theme.mobileNavBgUpper}; - color: ${props => props.theme.mobileNavColor}; - transition: ${props => (props.isToggled ? 'visibility 0s, transform 0.5s' : 'visibility 0s 0.5s, transform 0.5s')}; - transform: translate3d(0, ${props => (props.isToggled ? 0 : '-100%')}, 0); - visibility: ${props => !props.isToggled && 'hidden'}; - position: fixed; - display: flex; - flex-direction: column; - justify-content: flex-end; - z-index: 20; - top: 0; - left: 0; - font-size: 20px; - - a { - padding: 15px 0; - display: block; - color: inherit; - } - - h4 { - font-size: 14px; - opacity: 0.5; - } -`; - -const Overlay = styled.div` - position: absolute; - width: 100vw; - height: 100vh; - top: 100%; - background: transparent; - cursor: pointer; -`; - -interface SectionProps { - isDark?: boolean; -} -const Section = styled.div` - width: 100%; - padding: 15px 30px; - background-color: ${props => (props.isDark ? props.theme.mobileNavBgLower : 'transparent')}; -`; - -const Grid = styled(WrapGrid)` - justify-content: flex-start; - - li { - width: 50%; - flex-shrink: 0; - } -`; diff --git a/packages/website/ts/components/modals/input.tsx b/packages/website/ts/components/modals/input.tsx deleted file mode 100644 index c72e53aa0..000000000 --- a/packages/website/ts/components/modals/input.tsx +++ /dev/null @@ -1,92 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -export enum InputWidth { - Half, - Full, -} - -interface InputProps { - name: string; - width?: InputWidth; - label: string; - type?: string; - errors?: ErrorProps; - isErrors?: boolean; - required?: boolean; -} - -interface ErrorProps { - [key: string]: string; -} - -export const Input = React.forwardRef((props: InputProps, ref?: React.Ref) => { - const { name, label, type, errors } = props; - const id = `input-${name}`; - const componentType = type === 'textarea' ? 'textarea' : 'input'; - const isErrors = errors.hasOwnProperty(name) && errors[name] !== null; - const errorMessage = isErrors ? errors[name] : null; - - return ( - - - - {isErrors && {errorMessage}} - - ); -}); - -Input.defaultProps = { - width: InputWidth.Full, - errors: {}, -}; - -const StyledInput = styled.input` - appearance: none; - background-color: #fff; - border: 1px solid #d5d5d5; - color: #000; - font-size: 1.294117647rem; - padding: 16px 15px 14px; - outline: none; - width: 100%; - min-height: ${props => props.type === 'textarea' && `120px`}; - - background-color: ${(props: InputProps) => props.isErrors && `#FDEDED`}; - border-color: ${(props: InputProps) => props.isErrors && `#FD0000`}; - - &::placeholder { - color: #c3c3c3; - } -`; - -const InputWrapper = styled.div` - position: relative; - flex-grow: ${props => props.width === InputWidth.Full && 1}; - width: ${props => props.width === InputWidth.Half && `calc(50% - 15px)`}; - - @media (max-width: 768px) { - width: 100%; - margin-bottom: 30px; - } -`; - -const Label = styled.label` - color: #000; - font-size: 1.111111111rem; - line-height: 1.4em; - margin-bottom: 10px; - display: inline-block; -`; - -const Error = styled.span` - color: #fd0000; - font-size: 0.833333333rem; - line-height: 1em; - display: inline-block; - position: absolute; - bottom: 0; - left: 0; - width: 100%; - transform: translateY(24px); -`; diff --git a/packages/website/ts/components/modals/modal_contact.tsx b/packages/website/ts/components/modals/modal_contact.tsx deleted file mode 100644 index 62c1062a3..000000000 --- a/packages/website/ts/components/modals/modal_contact.tsx +++ /dev/null @@ -1,390 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; -import styled from 'styled-components'; - -import { colors } from 'ts/style/colors'; - -import { DialogContent, DialogOverlay } from '@reach/dialog'; -import '@reach/dialog/styles.css'; - -import { Button } from 'ts/components/button'; -import { Icon } from 'ts/components/icon'; -import { Input, InputWidth } from 'ts/components/modals/input'; -import { Heading, Paragraph } from 'ts/components/text'; -import { GlobalStyle } from 'ts/constants/globalStyle'; -import { utils } from 'ts/utils/utils'; - -export enum ModalContactType { - General = 'GENERAL', - MarketMaker = 'MARKET_MAKER', -} - -interface Props { - theme?: GlobalStyle; - isOpen?: boolean; - onDismiss?: () => void; - modalContactType: ModalContactType; -} - -interface FormProps { - isSuccessful?: boolean; - isSubmitting?: boolean; -} - -interface ErrorResponseProps { - param: string; - location: string; - msg: string; -} - -interface ErrorResponse { - errors: ErrorResponseProps[]; -} - -interface ErrorProps { - [key: string]: string; -} - -export class ModalContact extends React.Component { - public static defaultProps = { - modalContactType: ModalContactType.General, - }; - public state = { - isSubmitting: false, - isSuccessful: false, - errors: {}, - }; - // shared fields - public nameRef: React.RefObject = React.createRef(); - public emailRef: React.RefObject = React.createRef(); - public companyProjectRef: React.RefObject = React.createRef(); - public commentsRef: React.RefObject = React.createRef(); - // general lead fields - public linkRef: React.RefObject = React.createRef(); - // market maker lead fields - public countryRef: React.RefObject = React.createRef(); - public fundSizeRef: React.RefObject = React.createRef(); - public constructor(props: Props) { - super(props); - } - public render(): React.ReactNode { - const { isOpen, onDismiss } = this.props; - const { isSuccessful, errors } = this.state; - return ( - <> - - -
    - - Contact the 0x Core Team - - {this._renderFormContent(errors)} - - - - -
    - - - - Thanks for contacting us. - - - We'll get back to you soon. If you need quick support in the meantime, reach out to the - 0x team on Discord. - - - -
    -
    - - ); - } - public _renderFormContent(errors: ErrorProps): React.ReactNode { - switch (this.props.modalContactType) { - case ModalContactType.MarketMaker: - return this._renderMarketMakerFormContent(errors); - case ModalContactType.General: - default: - return this._renderGeneralFormContent(errors); - } - } - private _renderMarketMakerFormContent(errors: ErrorProps): React.ReactNode { - return ( - <> - - If you’re considering market making on 0x, we’re happy to answer your questions. Fill out the form - so we can connect you with the right person to help you get started. - - - - - - - - - - - - - - - - - - - ); - } - private _renderGeneralFormContent(errors: ErrorProps): React.ReactNode { - return ( - <> - - If you're considering building on 0x, we're happy to answer your questions. Fill out the form so we - can connect you with the right person to help you get started. - - - - - - - - - - - - - - - - ); - } - private async _onSubmitAsync(e: Event): Promise { - e.preventDefault(); - - let jsonBody; - if (this.props.modalContactType === ModalContactType.MarketMaker) { - jsonBody = { - name: this.nameRef.current.value, - email: this.emailRef.current.value, - country: this.countryRef.current.value, - fundSize: this.fundSizeRef.current.value, - projectOrCompany: this.companyProjectRef.current.value, - comments: this.commentsRef.current.value, - }; - } else { - jsonBody = { - name: this.nameRef.current.value, - email: this.emailRef.current.value, - projectOrCompany: this.companyProjectRef.current.value, - link: this.linkRef.current.value, - comments: this.commentsRef.current.value, - }; - } - - this.setState({ ...this.state, errors: [], isSubmitting: true }); - - const endpoint = - this.props.modalContactType === ModalContactType.MarketMaker ? '/market_maker_leads' : '/leads'; - - try { - // Disabling no-unbound method b/c no reason for _.isEmpty to be bound - // tslint:disable:no-unbound-method - const response = await fetch(`${utils.getBackendBaseUrl()}${endpoint}`, { - method: 'post', - mode: 'cors', - credentials: 'same-origin', - headers: { - 'content-type': 'application/json; charset=utf-8', - }, - body: JSON.stringify(_.omitBy(jsonBody, _.isEmpty)), - }); - - if (!response.ok) { - const errorResponse: ErrorResponse = await response.json(); - const errors = this._parseErrors(errorResponse.errors); - this.setState({ ...this.state, isSubmitting: false, errors }); - - throw new Error('Request failed'); - } - - this.setState({ ...this.state, isSuccessful: true }); - } catch (e) { - // Empty block - } - } - private _parseErrors(errors: ErrorResponseProps[]): ErrorProps { - const initialValue: {} = {}; - return _.reduce( - errors, - (hash: ErrorProps, error: ErrorResponseProps) => { - const { param, msg } = error; - const key = param; - hash[key] = msg; - - return hash; - }, - initialValue, - ); - } -} - -// Handle errors: {"errors":[{"location":"body","param":"name","msg":"Invalid value"},{"location":"body","param":"email","msg":"Invalid value"}]} - -const InputRow = styled.div` - width: 100%; - flex: 0 0 auto; - - @media (min-width: 768px) { - display: flex; - justify-content: space-between; - margin-bottom: 30px; - } -`; - -const ButtonRow = styled(InputRow)` - @media (max-width: 768px) { - display: flex; - flex-direction: column; - - button:nth-child(1) { - order: 2; - } - - button:nth-child(2) { - order: 1; - margin-bottom: 10px; - } - } -`; - -const StyledDialogContent = styled(DialogContent)` - position: relative; - max-width: 800px; - background-color: #f6f6f6 !important; - padding: 60px 60px !important; - - @media (max-width: 768px) { - width: calc(100vw - 40px) !important; - margin: 40px auto !important; - padding: 30px 30px !important; - } -`; - -const Form = styled.form` - position: relative; - transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; - - opacity: ${props => props.isSuccessful && `0`}; - visibility: ${props => props.isSuccessful && `hidden`}; -`; - -const Confirmation = styled.div` - position: absolute; - top: 50%; - text-align: center; - width: 100%; - left: 0; - transition: opacity 0.3s ease-in-out, visibility 0.3s ease-in-out; - transition-delay: 0.4s; - padding: 60px 60px; - transform: translateY(-50%); - opacity: ${props => (props.isSuccessful ? `1` : `0`)}; - visibility: ${props => (props.isSuccessful ? 'visible' : `hidden`)}; - - p { - max-width: 492px; - margin-left: auto; - margin-right: auto; - } -`; diff --git a/packages/website/ts/components/nested_sidebar_menu.tsx b/packages/website/ts/components/nested_sidebar_menu.tsx deleted file mode 100644 index 56df880f3..000000000 --- a/packages/website/ts/components/nested_sidebar_menu.tsx +++ /dev/null @@ -1,101 +0,0 @@ -import { ALink, colors, Link, utils as sharedUtils } from '@0x/react-shared'; -import { ObjectMap } from '@0x/types'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { Button } from 'ts/components/ui/button'; -import { Text } from 'ts/components/ui/text'; -import { ScreenWidths } from 'ts/types'; - -export interface NestedSidebarMenuProps { - sectionNameToLinks: ObjectMap; - sidebarHeader?: React.ReactNode; - shouldReformatMenuItemNames?: boolean; - screenWidth: ScreenWidths; -} - -export const NestedSidebarMenu = (props: NestedSidebarMenuProps) => { - const navigation = _.map(props.sectionNameToLinks, (links: ALink[], sectionName: string) => { - const finalSectionName = sharedUtils.convertCamelCaseToSpaces(sectionName); - const menuItems = _.map(links, (link, i) => { - const menuItemTitle = props.shouldReformatMenuItemNames - ? _.capitalize(sharedUtils.convertDashesToSpaces(link.title)) - : link.title; - const finalLink = { - ...link, - title: menuItemTitle, - }; - return ; - }); - // tslint:disable-next-line:no-unused-variable - return ( -
    - - {finalSectionName.toUpperCase()} - - {menuItems} -
    - ); - }); - return ( -
    - {props.sidebarHeader} -
    {navigation}
    -
    - ); -}; - -export interface MenuItemProps { - link: ALink; - screenWidth: ScreenWidths; -} - -export interface MenuItemState { - isActive: boolean; -} - -export class MenuItem extends React.Component { - constructor(props: MenuItemProps) { - super(props); - const isActive = window.location.hash.slice(1) === props.link.to; - this.state = { - isActive, - }; - } - public render(): React.ReactNode { - const isActive = this.state.isActive; - return ( - - - - ); - } - private _onActivityChanged(isActive: boolean): void { - this.setState({ - isActive, - }); - } -} diff --git a/packages/website/ts/components/newLayout.tsx b/packages/website/ts/components/newLayout.tsx deleted file mode 100644 index 07691a02a..000000000 --- a/packages/website/ts/components/newLayout.tsx +++ /dev/null @@ -1,134 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -export interface WrapProps { - bgColor?: string; - id?: string; - offsetTop?: string; - maxWidth?: string; - wrapWidth?: string; - isFullWidth?: boolean; - isTextCentered?: boolean; - isCentered?: boolean; - isWrapped?: boolean; -} - -export interface WrapGridProps { - isWrapped?: boolean; - isCentered?: boolean; -} - -export interface WrapStickyProps { - offsetTop?: string; -} - -export interface SectionProps extends WrapProps { - isPadded?: boolean; - isFullWidth?: boolean; - isFlex?: boolean; - padding?: string; - paddingMobile?: string; - flexBreakpoint?: string; - maxWidth?: string; - bgColor?: 'dark' | 'light' | string; - children: any; -} - -export interface FlexProps { - padding?: string; - isFlex?: boolean; - flexBreakpoint?: string; -} - -export interface ColumnProps { - padding?: string; - width?: string; - maxWidth?: string; -} - -export const Section: React.FunctionComponent = (props: SectionProps) => { - return ( - - {props.children} - - ); -}; - -export const Column = styled.div` - width: ${props => props.width}; - max-width: ${props => props.maxWidth}; - padding: ${props => props.padding}; - - @media (max-width: 768px) { - width: 100%; - - & + & { - margin-top: 60px; - } - } -`; - -export const FlexWrap = styled.div` - max-width: 1500px; - margin: 0 auto; - padding: ${props => props.padding}; - - @media (min-width: ${props => props.flexBreakpoint || '768px'}) { - display: ${props => props.isFlex && 'flex'}; - justify-content: ${props => props.isFlex && 'space-between'}; - } -`; - -export const WrapSticky = styled.div` - position: sticky; - top: ${props => props.offsetTop || '60px'}; -`; - -const SectionBase = styled.section` - width: ${props => !props.isFullWidth && 'calc(100% - 60px)'}; - max-width: 1500px; - margin: 0 auto; - padding: ${props => props.isPadded && '120px 0'}; - background-color: ${props => props.theme[`${props.bgColor}BgColor`] || props.bgColor}; - position: relative; - overflow: ${props => !props.isFullWidth && 'hidden'}; - - @media (max-width: 768px) { - padding: ${props => props.isPadded && (props.paddingMobile || '40px 0')}; - } -`; - -const Wrap = styled(FlexWrap)` - width: ${props => props.wrapWidth || 'calc(100% - 60px)'}; - width: ${props => props.bgColor && 'calc(100% - 60px)'}; - max-width: ${props => !props.isFullWidth && (props.maxWidth || '895px')}; - text-align: ${props => props.isTextCentered && 'center'}; - margin: 0 auto; -`; - -export const WrapGrid = styled(Wrap)` - display: flex; - flex-wrap: ${props => props.isWrapped && `wrap`}; - justify-content: ${props => (props.isCentered ? `center` : 'space-between')}; - - @media (max-width: 768px) { - width: 100%; - } -`; - -Section.defaultProps = { - isPadded: true, -}; - -FlexWrap.defaultProps = { - isFlex: true, -}; - -WrapGrid.defaultProps = { - isCentered: true, - isFullWidth: true, -}; - -Wrap.defaultProps = { - isFlex: false, -}; diff --git a/packages/website/ts/components/newsletter_form.tsx b/packages/website/ts/components/newsletter_form.tsx deleted file mode 100644 index e5fd95646..000000000 --- a/packages/website/ts/components/newsletter_form.tsx +++ /dev/null @@ -1,191 +0,0 @@ -import * as React from 'react'; -import styled, { withTheme } from 'styled-components'; - -import { ThemeValuesInterface } from 'ts/components/siteWrap'; -import { colors } from 'ts/style/colors'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -interface FormProps { - theme: ThemeValuesInterface; -} - -interface InputProps { - isSubmitted: boolean; - name: string; - type: string; - label: string; - textColor: string; - required?: boolean; -} - -interface ArrowProps { - isSubmitted: boolean; -} - -const Input = React.forwardRef((props: InputProps, ref: React.Ref) => { - const { name, label, type } = props; - const id = `input-${name}`; - - return ( - - - - - ); -}); - -class Form extends React.Component { - public emailInput = React.createRef(); - public state = { - isSubmitted: false, - }; - public render(): React.ReactNode { - const { isSubmitted } = this.state; - const { theme } = this.props; - - return ( - - - - - - - - - - 🎉 Thank you for signing up! - - Subscribe to our newsletter for updates in the 0x ecosystem - - ); - } - - private async _onSubmitAsync(e: React.FormEvent): Promise { - e.preventDefault(); - - const email = this.emailInput.current.value; - const referrer = 'https://0x.org/'; - - this.setState({ isSubmitted: true }); - - if (email === 'triggererror@0xproject.org') { - throw new Error('Manually triggered error'); - } - - try { - await fetch(`${utils.getBackendBaseUrl()}/newsletter_subscriber/substack`, { - method: 'post', - mode: 'cors', - headers: { - 'content-type': 'application/json; charset=utf-8', - }, - body: JSON.stringify({ email, referrer }), - }); - } catch (e) { - errorReporter.report(e); - } - } -} - -export const NewsletterForm = withTheme(Form); - -const StyledForm = styled.form` - appearance: none; - border: 0; - color: ${colors.white}; - padding: 13px 0 14px; - margin-top: 27px; -`; - -const StyledInput = styled.input` - appearance: none; - background-color: transparent; - border: 0; - border-bottom: 1px solid #393939; - color: ${props => props.textColor || '#fff'}; - font-size: 1.294117647rem; - padding: 15px 0; - outline: none; - width: 100%; - - &::placeholder { - color: #b1b1b1; // #9D9D9D on light theme - } -`; - -const InputWrapper = styled.div` - position: relative; -`; - -const InnerInputWrapper = styled.div` - opacity: ${props => props.isSubmitted && 0}; - visibility: ${props => props.isSubmitted && 'hidden'}; - transition: opacity 0.25s ease-in-out, visibility 0.25s ease-in-out; - transition-delay: 0.3s; -`; - -const SubmitButton = styled.button` - width: 44px; - height: 44px; - background-color: transparent; - border: 0; - position: absolute; - right: 0; - top: calc(50% - 22px); - overflow: hidden; - outline: 0; - - &:focus-within { - //background-color: #eee; - } -`; - -const Text = styled.p` - color: #656565; - font-size: 0.833333333rem; - font-weight: 300; - line-height: 1.2em; - margin-top: 15px; -`; - -const SuccessText = styled.p` - color: #b1b1b1; - font-size: 1rem; - font-weight: 300; - line-height: 1.2em; - padding-top: 25px; - position: absolute; - left: 0; - top: 0; - text-align: left; - right: 50px; - opacity: ${props => (props.isSubmitted ? 1 : 0)}; - visibility: ${props => (props.isSubmitted ? 'visible' : 'hidden')}; - transition: opacity 0.25s ease-in-out, visibility 0.25s ease-in-out; - transition-delay: 0.55s; -`; - -const Arrow = styled.svg` - transform: ${props => props.isSubmitted && `translateX(44px)`}; - transition: transform 0.25s ease-in-out; -`; diff --git a/packages/website/ts/components/old_footer.tsx b/packages/website/ts/components/old_footer.tsx deleted file mode 100644 index 6366bf4ea..000000000 --- a/packages/website/ts/components/old_footer.tsx +++ /dev/null @@ -1,228 +0,0 @@ -import { ALink, colors, Link } from '@0x/react-shared'; -import { ObjectMap } from '@0x/types'; -import * as _ from 'lodash'; -import DropDownMenu from 'material-ui/DropDownMenu'; -import MenuItem from 'material-ui/MenuItem'; -import * as React from 'react'; - -import { Dispatcher } from 'ts/redux/dispatcher'; -import { Deco, Key, Language, WebsitePaths } from 'ts/types'; -import { constants } from 'ts/utils/constants'; -import { Translate } from 'ts/utils/translate'; - -const ICON_DIMENSION = 16; - -const languageToMenuTitle = { - [Language.English]: 'English', - [Language.Russian]: 'Русский', - [Language.Spanish]: 'Español', - [Language.Korean]: '한국어', - [Language.Chinese]: '中文', -}; - -export interface FooterProps { - translate: Translate; - dispatcher: Dispatcher; - backgroundColor?: string; -} - -interface FooterState { - selectedLanguage: Language; -} - -export class Footer extends React.Component { - public static defaultProps = { - backgroundColor: colors.darkerGrey, - }; - constructor(props: FooterProps) { - super(props); - this.state = { - selectedLanguage: props.translate.getLanguage(), - }; - } - public render(): React.ReactNode { - const sectionNameToLinks: ObjectMap = { - [Key.Documentation]: [ - { - title: 'Developer Home', - to: WebsitePaths.Docs, - }, - { - title: '0x.js', - to: WebsitePaths.ZeroExJs, - }, - { - title: this.props.translate.get(Key.SmartContracts, Deco.Cap), - to: WebsitePaths.SmartContracts, - }, - { - title: this.props.translate.get(Key.Connect, Deco.Cap), - to: WebsitePaths.Connect, - }, - { - title: this.props.translate.get(Key.Whitepaper, Deco.Cap), - to: WebsitePaths.Whitepaper, - shouldOpenInNewTab: true, - }, - { - title: this.props.translate.get(Key.Wiki, Deco.Cap), - to: WebsitePaths.Wiki, - }, - ], - [Key.Community]: [ - { - title: this.props.translate.get(Key.Discord, Deco.Cap), - to: constants.URL_ZEROEX_CHAT, - shouldOpenInNewTab: true, - }, - { - title: this.props.translate.get(Key.Blog, Deco.Cap), - to: constants.URL_BLOG, - shouldOpenInNewTab: true, - }, - { - title: 'Twitter', - to: constants.URL_TWITTER, - shouldOpenInNewTab: true, - }, - { - title: 'Reddit', - to: constants.URL_REDDIT, - shouldOpenInNewTab: true, - }, - { - title: this.props.translate.get(Key.Forum, Deco.Cap), - to: constants.URL_DISCOURSE_FORUM, - shouldOpenInNewTab: true, - }, - ], - [Key.Organization]: [ - { - title: this.props.translate.get(Key.About, Deco.Cap), - to: WebsitePaths.About, - }, - { - title: this.props.translate.get(Key.Careers, Deco.Cap), - to: WebsitePaths.Careers, - }, - { - title: this.props.translate.get(Key.Contact, Deco.Cap), - to: 'mailto:team@0x.org', - shouldOpenInNewTab: true, - }, - ], - }; - const languageMenuItems = _.map(languageToMenuTitle, (menuTitle: string, language: Language) => { - return ; - }); - return ( -
    -
    -
    -
    -
    - -
    -
    - © ZeroEx, Intl. -
    -
    - - {languageMenuItems} - -
    -
    -
    -
    -
    -
    - {this._renderHeader(Key.Documentation)} - {_.map(sectionNameToLinks[Key.Documentation], this._renderMenuItem.bind(this))} -
    -
    -
    -
    - {this._renderHeader(Key.Community)} - {_.map(sectionNameToLinks[Key.Community], this._renderMenuItem.bind(this))} -
    -
    -
    -
    - {this._renderHeader(Key.Organization)} - {_.map(sectionNameToLinks[Key.Organization], this._renderMenuItem.bind(this))} -
    -
    -
    -
    -
    - ); - } - private _renderIcon(fileName: string): React.ReactNode { - return ( -
    - -
    - ); - } - private _renderMenuItem(link: ALink): React.ReactNode { - const titleToIcon: { [title: string]: string } = { - [this.props.translate.get(Key.Discord, Deco.Cap)]: 'discord.png', - [this.props.translate.get(Key.Blog, Deco.Cap)]: 'medium.png', - Twitter: 'twitter.png', - Reddit: 'reddit.png', - [this.props.translate.get(Key.Forum, Deco.Cap)]: 'discourse.png', - }; - const iconIfExists = titleToIcon[link.title]; - return ( -
    - -
    - {!_.isUndefined(iconIfExists) ? ( -
    -
    {this._renderIcon(iconIfExists)}
    -
    {link.title}
    -
    - ) : ( - link.title - )} -
    - -
    - ); - } - private _renderHeader(key: Key): React.ReactNode { - const headerStyle = { - color: colors.grey400, - letterSpacing: 2, - fontFamily: 'Roboto Mono', - fontSize: 13, - }; - return ( -
    - {this.props.translate.get(key, Deco.Upper)} -
    - ); - } - private _updateLanguage(_event: any, _index: number, value: Language): void { - this.setState({ - selectedLanguage: value, - }); - this.props.dispatcher.updateSelectedLanguage(value); - } -} diff --git a/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx b/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx deleted file mode 100644 index 1d21e5a85..000000000 --- a/packages/website/ts/components/onboarding/add_eth_onboarding_step.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { BigNumber } from '@0x/utils'; -import * as React from 'react'; -import { Balance } from 'ts/components/ui/balance'; -import { Container } from 'ts/components/ui/container'; -import { Image } from 'ts/components/ui/image'; -import { Text } from 'ts/components/ui/text'; -import { constants } from 'ts/utils/constants'; - -export interface AddEthOnboardingStepProps { - userEthBalanceInWei: BigNumber; -} - -export const AddEthOnboardingStep: React.StatelessComponent = props => - props.userEthBalanceInWei.gt(0) ? ( -
    - - Great! Looks like you already have{' '} - {' '} - in your wallet. - - - - -
    - ) : ( -
    - Before you begin you will need to send some ETH to your wallet. - - - - - Click on the MetaMask extension in - your browser and click either BUY or DEPOSIT. - -
    - ); diff --git a/packages/website/ts/components/onboarding/congrats_onboarding_step.tsx b/packages/website/ts/components/onboarding/congrats_onboarding_step.tsx deleted file mode 100644 index 8100fd2c0..000000000 --- a/packages/website/ts/components/onboarding/congrats_onboarding_step.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; - -export interface CongratsOnboardingStepProps {} - -export const CongratsOnboardingStep: React.StatelessComponent = () => ( -
    - Your wallet is now set up for trading. Use it on any relayer in the 0x ecosystem. - - - - No need to log in. Each relayer automatically detects and connects to your wallet. -
    -); diff --git a/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx b/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx deleted file mode 100644 index 173ba9a97..000000000 --- a/packages/website/ts/components/onboarding/install_wallet_onboarding_step.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { Image } from 'ts/components/ui/image'; -import { Text } from 'ts/components/ui/text'; -import { utils } from 'ts/utils/utils'; - -export interface InstallWalletOnboardingStepProps {} - -export const InstallWalletOnboardingStep: React.StatelessComponent = () => { - const [downloadLink, isOnMobile] = utils.getBestWalletDownloadLinkAndIsMobile(); - const followupText = isOnMobile - ? `Please revisit this site in your mobile dApp browser to continue!` - : `Please refresh the page once you've done this to continue!`; - const downloadText = isOnMobile ? 'Get Coinbase Wallet' : 'Get the MetaMask extension'; - return ( -
    - First, you need to connect to a wallet. This will be used across all 0x relayers and dApps. - - - - - - {downloadText} - - - - - {followupText} -
    - ); -}; diff --git a/packages/website/ts/components/onboarding/intro_onboarding_step.tsx b/packages/website/ts/components/onboarding/intro_onboarding_step.tsx deleted file mode 100644 index f9ced7315..000000000 --- a/packages/website/ts/components/onboarding/intro_onboarding_step.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { Image } from 'ts/components/ui/image'; -import { Text } from 'ts/components/ui/text'; - -export interface IntroOnboardingStepProps {} - -export const IntroOnboardingStep: React.StatelessComponent = () => ( -
    - - In order to start trading on any 0x relayer in the 0x ecosystem, you need to complete three simple steps. - - -
    - - Add ETH -
    -
    - - Wrap ETH -
    -
    - - - - Unlock tokens -
    -
    -
    -); diff --git a/packages/website/ts/components/onboarding/onboarding_card.tsx b/packages/website/ts/components/onboarding/onboarding_card.tsx deleted file mode 100644 index 384bf7154..000000000 --- a/packages/website/ts/components/onboarding/onboarding_card.tsx +++ /dev/null @@ -1,115 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as React from 'react'; - -import * as _ from 'lodash'; -import { Button } from 'ts/components/ui/button'; -import { Container } from 'ts/components/ui/container'; -import { IconButton } from 'ts/components/ui/icon_button'; -import { Island } from 'ts/components/ui/island'; -import { Text, Title } from 'ts/components/ui/text'; - -export type ContinueButtonDisplay = 'enabled' | 'disabled'; - -export interface OnboardingCardProps { - title?: string; - shouldCenterTitle?: boolean; - content: React.ReactNode; - isLastStep: boolean; - onClose: () => void; - onClickNext: () => void; - onClickBack: () => void; - onContinueButtonClick?: () => void; - continueButtonDisplay?: ContinueButtonDisplay; - shouldHideBackButton?: boolean; - shouldHideNextButton?: boolean; - continueButtonText?: string; - borderRadius?: string; - // Used for super-custom content. - shouldRemoveExtraSpacing?: boolean; -} - -export const OnboardingCard: React.StatelessComponent = ({ - title, - shouldCenterTitle, - content, - continueButtonDisplay, - continueButtonText, - onContinueButtonClick, - onClickNext, - onClickBack, - onClose, - shouldHideBackButton, - shouldHideNextButton, - borderRadius, - shouldRemoveExtraSpacing, -}) => { - const padding = shouldRemoveExtraSpacing - ? {} - : { - paddingRight: '30px', - paddingLeft: '30px', - paddingTop: '15px', - paddingBottom: '15px', - }; - const closeIconPositioning = shouldRemoveExtraSpacing - ? { right: '15px', bottom: '3px' } - : { bottom: '20px', left: '15px' }; - return ( - - -
    - - - {title} - - - - Close - - - - - {content} - - {continueButtonDisplay && ( - - )} - {!(shouldHideBackButton && shouldHideNextButton) && ( - -
    - {!shouldHideBackButton && ( - - Back - - )} -
    -
    - {!shouldHideNextButton && ( - - Skip - - )} -
    -
    - )} -
    -
    -
    - ); -}; - -OnboardingCard.defaultProps = { - continueButtonText: 'Continue', - shouldCenterTitle: false, - shouldRemoveExtraSpacing: false, -}; - -OnboardingCard.displayName = 'OnboardingCard'; diff --git a/packages/website/ts/components/onboarding/onboarding_flow.tsx b/packages/website/ts/components/onboarding/onboarding_flow.tsx deleted file mode 100644 index ec1b5bc42..000000000 --- a/packages/website/ts/components/onboarding/onboarding_flow.tsx +++ /dev/null @@ -1,182 +0,0 @@ -import * as React from 'react'; -import { Placement, Popper, PopperChildrenProps } from 'react-popper'; - -import { OnboardingCard } from 'ts/components/onboarding/onboarding_card'; -import { - ContinueButtonDisplay, - OnboardingTooltip, - TooltipPointerDisplay, -} from 'ts/components/onboarding/onboarding_tooltip'; -import { Container } from 'ts/components/ui/container'; -import { EaseUpFromBottomAnimation } from 'ts/components/ui/ease_up_from_bottom_animation'; -import { Overlay } from 'ts/components/ui/overlay'; -import { zIndex } from 'ts/style/z_index'; - -export interface FixedPositionSettings { - type: 'fixed'; - top?: string; - bottom?: string; - left?: string; - right?: string; - tooltipPointerDisplay?: TooltipPointerDisplay; -} - -export interface TargetPositionSettings { - type: 'target'; - target: string; - placement: Placement; -} - -export interface Step { - // Provide either a CSS selector, or fixed position settings. Only applies to desktop. - position: TargetPositionSettings | FixedPositionSettings; - title?: string; - shouldCenterTitle?: boolean; - content: React.ReactNode; - shouldHideBackButton?: boolean; - shouldHideNextButton?: boolean; - continueButtonDisplay?: ContinueButtonDisplay; - continueButtonText?: string; - onContinueButtonClick?: () => void; - // Only used for very custom steps. - shouldRemoveExtraSpacing?: boolean; -} - -export interface OnboardingFlowProps { - steps: Step[]; - stepIndex: number; - isRunning: boolean; - onClose: () => void; - updateOnboardingStep: (stepIndex: number) => void; - disableOverlay?: boolean; - isMobile: boolean; - disableCloseOnClickOutside?: boolean; -} - -export class OnboardingFlow extends React.Component { - public static defaultProps = { - disableOverlay: false, - isMobile: false, - disableCloseOnClickOutside: false, - }; - public render(): React.ReactNode { - if (!this.props.isRunning) { - return null; - } - let onboardingElement = null; - const currentStep = this._getCurrentStep(); - if (this.props.isMobile) { - onboardingElement = {this._renderOnboardingCard()}; - } else if (currentStep.position.type === 'target') { - const { placement, target } = currentStep.position; - onboardingElement = ( - - {this._renderPopperChildren.bind(this)} - - ); - } else if (currentStep.position.type === 'fixed') { - const { top, right, bottom, left, tooltipPointerDisplay } = currentStep.position; - onboardingElement = ( - - {this._renderToolTip(tooltipPointerDisplay)} - - ); - } - if (this.props.disableOverlay) { - return onboardingElement; - } - return ( -
    - - {onboardingElement} -
    - ); - } - private _renderPopperChildren(props: PopperChildrenProps): React.ReactNode { - const customStyles = { zIndex: zIndex.aboveOverlay }; - // On re-render, we want to re-center the popper. - props.scheduleUpdate(); - return ( -
    - {this._renderToolTip()} -
    - ); - } - private _renderToolTip(tooltipPointerDisplay?: TooltipPointerDisplay): React.ReactNode { - const { steps, stepIndex } = this.props; - const step = steps[stepIndex]; - const isLastStep = steps.length - 1 === stepIndex; - return ( - - - - ); - } - - private _renderOnboardingCard(): React.ReactNode { - const { steps, stepIndex } = this.props; - const step = steps[stepIndex]; - const isLastStep = steps.length - 1 === stepIndex; - return ( - - - - ); - } - private _getCurrentStep(): Step { - return this.props.steps[this.props.stepIndex]; - } - private _goToNextStep(): void { - const nextStep = this.props.stepIndex + 1; - if (nextStep < this.props.steps.length) { - this.props.updateOnboardingStep(nextStep); - } else { - this.props.onClose(); - } - } - private _goToPrevStep(): void { - const nextStep = this.props.stepIndex - 1; - if (nextStep >= 0) { - this.props.updateOnboardingStep(nextStep); - } else { - this.props.onClose(); - } - } -} diff --git a/packages/website/ts/components/onboarding/onboarding_tooltip.tsx b/packages/website/ts/components/onboarding/onboarding_tooltip.tsx deleted file mode 100644 index ff5f0bab6..000000000 --- a/packages/website/ts/components/onboarding/onboarding_tooltip.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; - -import { OnboardingCard, OnboardingCardProps } from 'ts/components/onboarding/onboarding_card'; -import { Pointer, PointerDirection } from 'ts/components/ui/pointer'; - -export type ContinueButtonDisplay = 'enabled' | 'disabled'; -export type TooltipPointerDisplay = PointerDirection | 'none'; - -export interface OnboardingTooltipProps extends OnboardingCardProps { - className?: string; - pointerDisplay?: TooltipPointerDisplay; -} - -export const OnboardingTooltip: React.StatelessComponent = props => { - const { pointerDisplay, className, ...cardProps } = props; - const card = ; - if (pointerDisplay === 'none') { - return card; - } - return ( - - - - ); -}; -OnboardingTooltip.defaultProps = { - pointerDisplay: PointerDirection.Left, -}; - -OnboardingTooltip.displayName = 'OnboardingTooltip'; diff --git a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx b/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx deleted file mode 100644 index 6adcec0b1..000000000 --- a/packages/website/ts/components/onboarding/portal_onboarding_flow.tsx +++ /dev/null @@ -1,281 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; -import { RouteComponentProps, withRouter } from 'react-router'; - -import { BigNumber } from '@0x/utils'; -import { Blockchain } from 'ts/blockchain'; -import { AddEthOnboardingStep } from 'ts/components/onboarding/add_eth_onboarding_step'; -import { CongratsOnboardingStep } from 'ts/components/onboarding/congrats_onboarding_step'; -import { InstallWalletOnboardingStep } from 'ts/components/onboarding/install_wallet_onboarding_step'; -import { IntroOnboardingStep } from 'ts/components/onboarding/intro_onboarding_step'; -import { - FixedPositionSettings, - OnboardingFlow, - Step, - TargetPositionSettings, -} from 'ts/components/onboarding/onboarding_flow'; -import { SetAllowancesOnboardingStep } from 'ts/components/onboarding/set_allowances_onboarding_step'; -import { UnlockWalletOnboardingStep } from 'ts/components/onboarding/unlock_wallet_onboarding_step'; -import { - WrapEthOnboardingStep1, - WrapEthOnboardingStep2, - WrapEthOnboardingStep3, -} from 'ts/components/onboarding/wrap_eth_onboarding_step'; -import { AllowanceStateToggle } from 'ts/containers/inputs/allowance_state_toggle'; -import { BrowserType, ProviderType, ScreenWidths, Token, TokenByAddress, TokenStateByAddress } from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { utils } from 'ts/utils/utils'; - -export interface PortalOnboardingFlowProps extends RouteComponentProps { - networkId: number; - blockchain: Blockchain; - stepIndex: number; - isRunning: boolean; - userAddress: string; - hasBeenClosed: boolean; - providerType: ProviderType; - injectedProviderName: string; - blockchainIsLoaded: boolean; - userEtherBalanceInWei?: BigNumber; - tokenByAddress: TokenByAddress; - trackedTokenStateByAddress: TokenStateByAddress; - updateIsRunning: (isRunning: boolean) => void; - updateOnboardingStep: (stepIndex: number) => void; - refetchTokenStateAsync: (tokenAddress: string) => Promise; - screenWidth: ScreenWidths; -} - -class PlainPortalOnboardingFlow extends React.Component { - private _unlisten: () => void; - public componentDidMount(): void { - this._adjustStepIfShould(); - // If there is a route change, just close onboarding. - this._unlisten = this.props.history.listen(() => this.props.updateIsRunning(false)); - } - public componentWillUnmount(): void { - this._unlisten(); - } - public componentDidUpdate(prevProps: PortalOnboardingFlowProps): void { - // Any one of steps 0-3 could be the starting step, and we only want to reset the scroll on the starting step. - if (this.props.isRunning && utils.isMobileWidth(this.props.screenWidth) && this.props.stepIndex < 3) { - // On mobile, make sure the wallet is completely visible. - document.querySelector('.wallet').scrollIntoView(); - } - this._adjustStepIfShould(); - if (!prevProps.blockchainIsLoaded && this.props.blockchainIsLoaded) { - this._autoStartOnboardingIfShould(); - } - } - public render(): React.ReactNode { - const browserType = utils.getBrowserType(); - return ( - - ); - } - private _getSteps(): Step[] { - const nextToWalletPosition: TargetPositionSettings = { - type: 'target', - target: '.wallet', - placement: 'right', - }; - const underMetamaskExtension: FixedPositionSettings = { - type: 'fixed', - top: '10px', - right: '10px', - tooltipPointerDisplay: 'none', - }; - const steps: Step[] = [ - { - position: nextToWalletPosition, - title: '0x Ecosystem Setup', - content: , - shouldHideBackButton: true, - shouldHideNextButton: true, - }, - { - position: underMetamaskExtension, - title: 'Please Unlock Metamask...', - content: , - shouldHideBackButton: true, - shouldHideNextButton: true, - shouldCenterTitle: true, - shouldRemoveExtraSpacing: true, - }, - { - position: nextToWalletPosition, - title: '0x Ecosystem Account Setup', - content: , - shouldHideBackButton: true, - continueButtonDisplay: 'enabled', - }, - { - position: nextToWalletPosition, - title: 'Step 1: Add ETH', - content: ( - - ), - continueButtonDisplay: this._userHasVisibleEth() ? 'enabled' : 'disabled', - }, - { - position: nextToWalletPosition, - title: 'Step 2: Wrap ETH', - content: , - continueButtonDisplay: 'enabled', - }, - { - position: nextToWalletPosition, - title: 'Step 2: Wrap ETH', - content: , - continueButtonDisplay: this._userHasVisibleWeth() ? 'enabled' : 'disabled', - }, - { - position: nextToWalletPosition, - title: 'Step 2: Wrap ETH', - content: , - continueButtonDisplay: this._userHasVisibleWeth() ? 'enabled' : 'disabled', - }, - { - position: nextToWalletPosition, - title: 'Step 3: Unlock Tokens', - content: ( - - ), - continueButtonDisplay: this._doesUserHaveAllowancesForWethAndZrx() ? 'enabled' : 'disabled', - }, - { - position: nextToWalletPosition, - title: '🎉 The Ecosystem Awaits', - content: , - continueButtonDisplay: 'enabled', - shouldHideNextButton: true, - continueButtonText: 'Enter the 0x Ecosystem', - onContinueButtonClick: this._handleFinalStepContinueClick.bind(this), - }, - ]; - return steps; - } - private _isAddressAvailable(): boolean { - return !_.isEmpty(this.props.userAddress); - } - private _userHasVisibleEth(): boolean { - return this.props.userEtherBalanceInWei > new BigNumber(0); - } - private _getWethBalance(): BigNumber { - const ethToken = utils.getEthToken(this.props.tokenByAddress); - if (!ethToken) { - return new BigNumber(0); - } - const ethTokenState = this.props.trackedTokenStateByAddress[ethToken.address]; - return ethTokenState.balance; - } - private _userHasVisibleWeth(): boolean { - return this._getWethBalance() > new BigNumber(0); - } - private _doesUserHaveAllowancesForWethAndZrx(): boolean { - const ethToken = utils.getEthToken(this.props.tokenByAddress); - const zrxToken = utils.getZrxToken(this.props.tokenByAddress); - if (ethToken && zrxToken) { - const ethTokenState = this.props.trackedTokenStateByAddress[ethToken.address]; - const zrxTokenState = this.props.trackedTokenStateByAddress[zrxToken.address]; - if (ethTokenState && zrxTokenState) { - return ethTokenState.allowance.gt(0) && zrxTokenState.allowance.gt(0); - } - } - return false; - } - private _adjustStepIfShould(): void { - const stepIndex = this.props.stepIndex; - if (this._isAddressAvailable()) { - if (stepIndex < 2) { - this.props.updateOnboardingStep(2); - } - return; - } - const isExternallyInjected = utils.isExternallyInjected( - this.props.providerType, - this.props.injectedProviderName, - ); - if (isExternallyInjected) { - if (stepIndex !== 1) { - this.props.updateOnboardingStep(1); - } - return; - } - if (stepIndex !== 0) { - this.props.updateOnboardingStep(0); - } - } - private _autoStartOnboardingIfShould(): void { - if ( - (this.props.stepIndex === 0 && !this.props.isRunning && this.props.blockchainIsLoaded) || - (!this.props.isRunning && !this.props.hasBeenClosed && this.props.blockchainIsLoaded) - ) { - analytics.track('Onboarding Started', { - reason: 'automatic', - stepIndex: this.props.stepIndex, - }); - this.props.updateIsRunning(true); - } - } - private _updateOnboardingStep(stepIndex: number): void { - this.props.updateOnboardingStep(stepIndex); - analytics.track('Update Onboarding Step', { - stepIndex, - }); - } - private _closeOnboarding(): void { - this.props.updateIsRunning(false); - analytics.track('Onboarding Closed', { - stepIndex: this.props.stepIndex, - }); - } - private _renderZrxAllowanceStateToggle(): React.ReactNode { - const zrxToken = utils.getZrxToken(this.props.tokenByAddress); - return this._renderAllowanceStateToggle(zrxToken); - } - private _renderEthAllowanceStateToggle(): React.ReactNode { - const ethToken = utils.getEthToken(this.props.tokenByAddress); - return this._renderAllowanceStateToggle(ethToken); - } - private _renderAllowanceStateToggle(token: Token): React.ReactNode { - if (!token) { - return null; - } - const tokenStateIfExists = this.props.trackedTokenStateByAddress[token.address]; - if (_.isUndefined(tokenStateIfExists)) { - return null; - } - return ( - this.props.refetchTokenStateAsync(token.address)} - /> - ); - } - private _handleFinalStepContinueClick(): void { - if (utils.isMobileWidth(this.props.screenWidth)) { - window.scrollTo(0, 0); - this.props.history.push('/portal'); - } - this._closeOnboarding(); - } -} - -export const PortalOnboardingFlow = withRouter(PlainPortalOnboardingFlow); diff --git a/packages/website/ts/components/onboarding/set_allowances_onboarding_step.tsx b/packages/website/ts/components/onboarding/set_allowances_onboarding_step.tsx deleted file mode 100644 index 5ddfe38d7..000000000 --- a/packages/website/ts/components/onboarding/set_allowances_onboarding_step.tsx +++ /dev/null @@ -1,30 +0,0 @@ -import * as React from 'react'; -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; - -export interface SetAllowancesOnboardingStepProps { - zrxAllowanceToggle: React.ReactNode; - ethAllowanceToggle: React.ReactNode; - doesUserHaveAllowancesForWethAndZrx: boolean; -} - -export const SetAllowancesOnboardingStep: React.StatelessComponent = ({ - ethAllowanceToggle, - zrxAllowanceToggle, - doesUserHaveAllowancesForWethAndZrx, -}) => ( -
    - Unlock your tokens for trading. You only need to do this once for each token. - -
    - Enable WETH - {ethAllowanceToggle} -
    -
    - Enable ZRX - {zrxAllowanceToggle} -
    -
    - {doesUserHaveAllowancesForWethAndZrx && Perfect! Both your ZRX and WETH tokens are unlocked.} -
    -); diff --git a/packages/website/ts/components/onboarding/unlock_wallet_onboarding_step.tsx b/packages/website/ts/components/onboarding/unlock_wallet_onboarding_step.tsx deleted file mode 100644 index 358141520..000000000 --- a/packages/website/ts/components/onboarding/unlock_wallet_onboarding_step.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import * as React from 'react'; -import { Image } from 'ts/components/ui/image'; - -export interface UnlockWalletOnboardingStepProps {} - -export const UnlockWalletOnboardingStep: React.StatelessComponent = () => ( - -); diff --git a/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx b/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx deleted file mode 100644 index 37eef867b..000000000 --- a/packages/website/ts/components/onboarding/wrap_eth_onboarding_step.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { colors } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import * as React from 'react'; -import { Balance } from 'ts/components/ui/balance'; -import { Container } from 'ts/components/ui/container'; -import { IconButton } from 'ts/components/ui/icon_button'; -import { Text } from 'ts/components/ui/text'; -import { constants } from 'ts/utils/constants'; - -export interface WrapEthOnboardingStep1Props {} - -export const WrapEthOnboardingStep1: React.StatelessComponent = () => ( -
    - - You need to convert some of your ETH into tradeable Wrapped ETH (WETH). - - -
    - 1 ETH - -
    - - = - -
    - 1 WETH - -
    -
    - - Think of it like the coin version of a paper note. It has the same value, but some machines only take coins. - -
    -); - -export interface WrapEthOnboardingStep2Props {} - -export const WrapEthOnboardingStep2: React.StatelessComponent = () => ( -
    - Wrapping your ETH is a reversable transaction, so don't worry about losing your ETH. - - Click - - - - to wrap your ETH. - -
    -); - -export interface WrapEthOnboardingStep3Props { - wethAmount: BigNumber; -} - -export const WrapEthOnboardingStep3: React.StatelessComponent = ({ wethAmount }) => ( -
    - - You have{' '} - {' '} - in your wallet. - {wethAmount.gt(0) && ' Great!'} - - -
    - 1 ETH - -
    - - - - - -
    - 1 WETH - -
    -
    -
    -); diff --git a/packages/website/ts/components/order_json.tsx b/packages/website/ts/components/order_json.tsx deleted file mode 100644 index f33681835..000000000 --- a/packages/website/ts/components/order_json.tsx +++ /dev/null @@ -1,179 +0,0 @@ -import { BigNumber, fetchAsync, logUtils } from '@0x/utils'; -import * as _ from 'lodash'; -import Paper from 'material-ui/Paper'; -import TextField from 'material-ui/TextField'; -import * as React from 'react'; -import { CopyIcon } from 'ts/components/ui/copy_icon'; -import { SideToAssetToken, TokenByAddress, WebsitePaths } from 'ts/types'; -import { configs } from 'ts/utils/configs'; -import { constants } from 'ts/utils/constants'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -interface OrderJSONProps { - exchangeContractIfExists: string; - orderExpiryTimestamp: BigNumber; - orderSignature: string; - orderTakerAddress: string; - orderMakerAddress: string; - orderSalt: BigNumber; - orderMakerFee: BigNumber; - orderTakerFee: BigNumber; - orderFeeRecipient: string; - sideToAssetToken: SideToAssetToken; - tokenByAddress: TokenByAddress; -} - -interface OrderJSONState { - shareLink: string; -} - -export class OrderJSON extends React.Component { - constructor(props: OrderJSONProps) { - super(props); - this.state = { - shareLink: '', - }; - // tslint:disable-next-line:no-floating-promises - this._setShareLinkAsync(); - } - public render(): React.ReactNode { - const order = utils.generateOrder( - this.props.exchangeContractIfExists, - this.props.sideToAssetToken, - this.props.orderExpiryTimestamp, - this.props.orderTakerAddress, - this.props.orderMakerAddress, - this.props.orderMakerFee, - this.props.orderTakerFee, - this.props.orderFeeRecipient, - this.props.orderSignature, - this.props.tokenByAddress, - this.props.orderSalt, - ); - const orderJSON = JSON.stringify(order); - return ( -
    -
    - You have successfully generated and cryptographically signed an order! The following JSON contains - the order parameters and cryptographic signature that your counterparty will need to execute a trade - with you. -
    -
    -
    - -
    -
    - - - -
    -
    Share your signed order!
    -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - ); - } - private _shareViaTwitterAsync(): void { - const tweetText = encodeURIComponent(`Fill my order using the 0x protocol: ${this.state.shareLink}`); - window.open(`https://twitter.com/intent/tweet?text=${tweetText}`, 'Share your order', 'width=500,height=400'); - } - private _shareViaFacebook(): void { - (window as any).FB.ui( - { - display: 'popup', - href: this.state.shareLink, - method: 'share', - }, - _.noop.bind(_), - ); - } - private _shareViaEmailAsync(): void { - const encodedSubject = encodeURIComponent("Let's trade using the 0x protocol"); - const encodedBody = encodeURIComponent(`I generated an order with the 0x protocol. -You can see and fill it here: ${this.state.shareLink}`); - const mailToLink = `mailto:mail@example.org?subject=${encodedSubject}&body=${encodedBody}`; - window.open(mailToLink, '_blank'); - } - private async _setShareLinkAsync(): Promise { - const shareLink = await this._generateShareLinkAsync(); - this.setState({ - shareLink, - }); - } - private async _generateShareLinkAsync(): Promise { - const longUrl = encodeURIComponent(this._getOrderUrl()); - const bitlyRequestUrl = `${constants.URL_BITLY_API}/v3/shorten?access_token=${ - configs.BITLY_ACCESS_TOKEN - }&longUrl=${longUrl}`; - const response = await fetchAsync(bitlyRequestUrl); - const responseBody = await response.text(); - const bodyObj = JSON.parse(responseBody); - if (response.status !== 200 || bodyObj.status_code !== 200) { - // TODO: Show error message in UI - logUtils.log(`Unexpected status code: ${response.status} -> ${responseBody}`); - errorReporter.report(new Error(`Bitly returned non-200: ${JSON.stringify(response)}`)); - return ''; - } - return bodyObj.data.url; - } - private _getOrderUrl(): string { - const order = utils.generateOrder( - this.props.exchangeContractIfExists, - this.props.sideToAssetToken, - this.props.orderExpiryTimestamp, - this.props.orderTakerAddress, - this.props.orderMakerAddress, - this.props.orderMakerFee, - this.props.orderTakerFee, - this.props.orderFeeRecipient, - this.props.orderSignature, - this.props.tokenByAddress, - this.props.orderSalt, - ); - const orderJSONString = JSON.stringify(order); - const orderUrl = `${configs.BASE_URL}${WebsitePaths.Portal}/fill?order=${orderJSONString}`; - return orderUrl; - } -} diff --git a/packages/website/ts/components/portal/back_button.tsx b/packages/website/ts/components/portal/back_button.tsx deleted file mode 100644 index 9b4451196..000000000 --- a/packages/website/ts/components/portal/back_button.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Link, Styles } from '@0x/react-shared'; -import * as React from 'react'; -import { Island } from 'ts/components/ui/island'; -import { colors } from 'ts/style/colors'; - -export interface BackButtonProps { - to: string; - labelText: string; -} - -const BACK_BUTTON_HEIGHT = 28; - -const styles: Styles = { - backButton: { - height: BACK_BUTTON_HEIGHT, - paddingTop: 10, - borderRadius: BACK_BUTTON_HEIGHT, - }, - backButtonIcon: { - color: colors.mediumBlue, - fontSize: 20, - }, -}; - -export const BackButton = (props: BackButtonProps) => { - return ( -
    - - -
    - -
    -
    -
    {props.labelText}
    -
    -
    - -
    - ); -}; diff --git a/packages/website/ts/components/portal/drawer_menu.tsx b/packages/website/ts/components/portal/drawer_menu.tsx deleted file mode 100644 index 7280a6102..000000000 --- a/packages/website/ts/components/portal/drawer_menu.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { Styles } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Blockchain } from 'ts/blockchain'; -import { defaultMenuItemEntries, Menu } from 'ts/components/portal/menu'; -import { Identicon } from 'ts/components/ui/identicon'; -import { Text } from 'ts/components/ui/text'; -import { colors } from 'ts/style/colors'; -import { ProviderType, WebsitePaths } from 'ts/types'; -import { utils } from 'ts/utils/utils'; - -const IDENTICON_DIAMETER = 45; -const BORDER_RADIUS = '50%'; - -const styles: Styles = { - root: { - backgroundColor: colors.drawerMenuBackground, - width: '100%', - height: '100%', - }, - identicon: { - borderWidth: 3, - borderStyle: 'solid', - borderColor: colors.white, - borderRadius: BORDER_RADIUS, - MozBorderRadius: BORDER_RADIUS, - WebkitBorderRadius: BORDER_RADIUS, - }, -}; - -export interface DrawerMenuProps { - selectedPath?: string; - userAddress?: string; - injectedProviderName: string; - providerType: ProviderType; - blockchain?: Blockchain; - blockchainIsLoaded: boolean; -} -export const DrawerMenu = (props: DrawerMenuProps) => { - const relayerItemEntry = { - to: WebsitePaths.Portal, - labelText: 'Relayer ecosystem', - iconName: 'zmdi-portable-wifi', - }; - const menuItemEntries = _.concat(relayerItemEntry, defaultMenuItemEntries); - const accountState = utils.getAccountState( - props.blockchainIsLoaded && !_.isUndefined(props.blockchain), - props.providerType, - props.injectedProviderName, - props.userAddress, - ); - const displayMessage = utils.getReadableAccountState(accountState, props.userAddress); - return ( -
    -
    - -
    - ); -}; - -interface HeaderProps { - userAddress?: string; - displayMessage: string; -} -const Header = (props: HeaderProps) => { - return ( -
    -
    - - - {props.displayMessage} - -
    -
    - ); -}; diff --git a/packages/website/ts/components/portal/loading.tsx b/packages/website/ts/components/portal/loading.tsx deleted file mode 100644 index d804dd1b8..000000000 --- a/packages/website/ts/components/portal/loading.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import CircularProgress from 'material-ui/CircularProgress'; -import * as React from 'react'; - -const CIRCULAR_PROGRESS_SIZE = 40; -const CIRCULAR_PROGRESS_THICKNESS = 5; - -export interface LoadingProps { - isLoading: boolean; - content: React.ReactNode; -} -export const Loading = (props: LoadingProps) => { - if (props.isLoading) { - return ( -
    - -
    - ); - } else { - return
    {props.content}
    ; - } -}; diff --git a/packages/website/ts/components/portal/menu.tsx b/packages/website/ts/components/portal/menu.tsx deleted file mode 100644 index d59101686..000000000 --- a/packages/website/ts/components/portal/menu.tsx +++ /dev/null @@ -1,120 +0,0 @@ -import { Styles } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; -import { CustomMenuItem } from 'ts/components/ui/custom_menu_item'; -import { colors } from 'ts/style/colors'; -import { WebsitePaths } from 'ts/types'; - -export interface MenuTheme { - paddingLeft: number; - textColor: string; - iconColor: string; - selectedIconColor: string; - selectedBackgroundColor: string; -} - -export interface MenuItemEntry { - to: string; - labelText: string; - iconName: string; -} - -export interface MenuProps { - selectedPath?: string; - theme?: MenuTheme; - menuItemEntries?: MenuItemEntry[]; -} - -export const defaultMenuItemEntries: MenuItemEntry[] = [ - { - to: `${WebsitePaths.Portal}/account`, - labelText: 'Account overview', - iconName: 'zmdi-balance-wallet', - }, - { - to: `${WebsitePaths.Portal}/trades`, - labelText: 'Trade history', - iconName: 'zmdi-format-list-bulleted', - }, - { - to: `${WebsitePaths.Portal}/weth`, - labelText: 'Wrapped ETH', - iconName: 'zmdi-circle-o', - }, - { - to: `${WebsitePaths.Portal}/generate`, - labelText: 'Generate order', - iconName: 'zmdi-arrow-right-top', - }, - { - to: `${WebsitePaths.Portal}/fill`, - labelText: 'Fill order', - iconName: 'zmdi-arrow-left-bottom', - }, -]; - -const DEFAULT_MENU_THEME: MenuTheme = { - paddingLeft: 30, - textColor: colors.white, - iconColor: colors.white, - selectedIconColor: colors.white, - selectedBackgroundColor: colors.menuItemDefaultSelectedBackground, -}; - -export const Menu: React.StatelessComponent = (props: MenuProps) => { - return ( -
    - {_.map(props.menuItemEntries, entry => { - const isSelected = entry.to === props.selectedPath; - return ( - - - - ); - })} -
    - ); -}; -Menu.defaultProps = { - theme: DEFAULT_MENU_THEME, - menuItemEntries: defaultMenuItemEntries, -}; - -interface MenuItemLabelProps { - title: string; - iconName: string; - selected: boolean; - theme: MenuTheme; -} -const MenuItemLabel: React.StatelessComponent = (props: MenuItemLabelProps) => { - const styles: Styles = { - root: { - backgroundColor: props.selected ? props.theme.selectedBackgroundColor : undefined, - paddingLeft: props.theme.paddingLeft, - }, - icon: { - color: props.selected ? props.theme.selectedIconColor : props.theme.iconColor, - fontSize: 20, - }, - text: { - color: props.theme.textColor, - fontWeight: props.selected ? 'bold' : 'normal', - fontSize: 16, - }, - }; - return ( -
    -
    - -
    -
    - {props.title} -
    -
    - ); -}; diff --git a/packages/website/ts/components/portal/portal.tsx b/packages/website/ts/components/portal/portal.tsx deleted file mode 100644 index 6ebbf8d1f..000000000 --- a/packages/website/ts/components/portal/portal.tsx +++ /dev/null @@ -1,749 +0,0 @@ -import { colors, Link } from '@0x/react-shared'; -import { BigNumber } from '@0x/utils'; -import * as _ from 'lodash'; -import * as React from 'react'; -import * as DocumentTitle from 'react-document-title'; -import { Route, RouteComponentProps, Switch } from 'react-router-dom'; - -import { Blockchain } from 'ts/blockchain'; -import { BlockchainErrDialog } from 'ts/components/dialogs/blockchain_err_dialog'; -import { LedgerConfigDialog } from 'ts/components/dialogs/ledger_config_dialog'; -import { PortalDisclaimerDialog } from 'ts/components/dialogs/portal_disclaimer_dialog'; -import { EthWrappers } from 'ts/components/eth_wrappers'; -import { FillOrder } from 'ts/components/fill_order'; -import { AssetPicker } from 'ts/components/generate_order/asset_picker'; -import { MetaTags } from 'ts/components/meta_tags'; -import { BackButton } from 'ts/components/portal/back_button'; -import { Loading } from 'ts/components/portal/loading'; -import { Menu, MenuTheme } from 'ts/components/portal/menu'; -import { Section } from 'ts/components/portal/section'; -import { TextHeader } from 'ts/components/portal/text_header'; -import { RelayerIndex, RelayerIndexCellStyle } from 'ts/components/relayer_index/relayer_index'; -import { TokenBalances } from 'ts/components/token_balances'; -import { TopBar, TopBarDisplayType } from 'ts/components/top_bar/top_bar'; -import { TradeHistory } from 'ts/components/trade_history/trade_history'; -import { Container } from 'ts/components/ui/container'; -import { FlashMessage } from 'ts/components/ui/flash_message'; -import { Image } from 'ts/components/ui/image'; -import { PointerDirection } from 'ts/components/ui/pointer'; -import { Text } from 'ts/components/ui/text'; -import { Wallet } from 'ts/components/wallet/wallet'; -import { GenerateOrderForm } from 'ts/containers/generate_order_form'; -import { PortalOnboardingFlow } from 'ts/containers/portal_onboarding_flow'; -import { localStorage } from 'ts/local_storage/local_storage'; -import { trackedTokenStorage } from 'ts/local_storage/tracked_token_storage'; -import { FullscreenMessage } from 'ts/pages/fullscreen_message'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { zIndex } from 'ts/style/z_index'; -import { - BlockchainErrs, - HashData, - ItemByAddress, - PortalOrder, - ProviderType, - ScreenWidths, - Token, - TokenByAddress, - TokenStateByAddress, - TokenVisibility, - WebsitePaths, -} from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { backendClient } from 'ts/utils/backend_client'; -import { configs } from 'ts/utils/configs'; -import { constants } from 'ts/utils/constants'; -import { orderParser } from 'ts/utils/order_parser'; -import { Translate } from 'ts/utils/translate'; -import { utils } from 'ts/utils/utils'; - -export interface PortalProps { - blockchainErr: BlockchainErrs; - blockchainIsLoaded: boolean; - dispatcher: Dispatcher; - hashData: HashData; - injectedProviderName: string; - networkId: number; - nodeVersion: string; - orderFillAmount: BigNumber; - providerType: ProviderType; - screenWidth: ScreenWidths; - tokenByAddress: TokenByAddress; - userEtherBalanceInWei?: BigNumber; - userAddress: string; - shouldBlockchainErrDialogBeOpen: boolean; - userSuppliedOrderCache: PortalOrder; - location: Location; - flashMessage?: string | React.ReactNode; - lastForceTokenStateRefetch: number; - translate: Translate; - isPortalOnboardingShowing: boolean; - portalOnboardingStep: number; -} - -interface PortalState { - prevNetworkId: number; - prevNodeVersion: string; - prevUserAddress: string; - prevPathname: string; - isDisclaimerDialogOpen: boolean; - isLedgerDialogOpen: boolean; - tokenManagementState: TokenManagementState; - trackedTokenStateByAddress: TokenStateByAddress; -} - -interface AccountManagementItem { - pathName: string; - headerText?: string; - render: () => React.ReactNode; -} - -enum TokenManagementState { - Add = 'Add', - Remove = 'Remove', - None = 'None', -} - -const THROTTLE_TIMEOUT = 100; -const TOP_BAR_HEIGHT = TopBar.heightForDisplayType(TopBarDisplayType.Expanded); -const LEFT_COLUMN_WIDTH = 346; -const MENU_PADDING_LEFT = 185; -const LARGE_LAYOUT_MAX_WIDTH = 1200; -const SIDE_PADDING = 20; -const DOCUMENT_TITLE = '0x Portal'; -const DOCUMENT_DESCRIPTION = 'Learn about and trade on 0x Relayers'; - -export class Portal extends React.Component { - private _blockchain: Blockchain; - private readonly _sharedOrderIfExists: PortalOrder; - private readonly _throttledScreenWidthUpdate: () => void; - constructor(props: PortalProps) { - super(props); - this._sharedOrderIfExists = orderParser.parseQueryString(window.location.search); - this._throttledScreenWidthUpdate = _.throttle(this._updateScreenWidth.bind(this), THROTTLE_TIMEOUT); - const didAcceptPortalDisclaimer = localStorage.getItemIfExists(constants.LOCAL_STORAGE_KEY_ACCEPT_DISCLAIMER); - const hasAcceptedDisclaimer = - !_.isUndefined(didAcceptPortalDisclaimer) && !_.isEmpty(didAcceptPortalDisclaimer); - const initialTrackedTokenStateByAddress = this._getInitialTrackedTokenStateByAddress( - this._getCurrentTrackedTokens(), - ); - this.state = { - prevNetworkId: this.props.networkId, - prevNodeVersion: this.props.nodeVersion, - prevUserAddress: this.props.userAddress, - prevPathname: this.props.location.pathname, - isDisclaimerDialogOpen: !hasAcceptedDisclaimer, - tokenManagementState: TokenManagementState.None, - isLedgerDialogOpen: false, - trackedTokenStateByAddress: initialTrackedTokenStateByAddress, - }; - } - public componentDidMount(): void { - window.addEventListener('resize', this._throttledScreenWidthUpdate); - window.scrollTo(0, 0); - } - public componentWillMount(): void { - this._blockchain = new Blockchain(this.props.dispatcher); - } - public componentWillUnmount(): void { - this._blockchain.destroy(); - window.removeEventListener('resize', this._throttledScreenWidthUpdate); - // We re-set the entire redux state when the portal is unmounted so that when it is re-rendered - // the initialization process always occurs from the same base state. This helps avoid - // initialization inconsistencies (i.e While the portal was unrendered, the user might have - // become disconnected from their backing Ethereum node, changed user accounts, etc...) - this.props.dispatcher.resetState(); - } - public componentDidUpdate(prevProps: PortalProps): void { - if (!prevProps.blockchainIsLoaded && this.props.blockchainIsLoaded) { - // tslint:disable-next-line:no-floating-promises - this._fetchBalancesAndAllowancesAsync(this._getCurrentTrackedTokensAddresses()); - } - } - public componentWillReceiveProps(nextProps: PortalProps): void { - if (nextProps.networkId !== this.state.prevNetworkId) { - // tslint:disable-next-line:no-floating-promises - this._blockchain.networkIdUpdatedFireAndForgetAsync(nextProps.networkId); - this.setState({ - prevNetworkId: nextProps.networkId, - }); - } - if (nextProps.userAddress !== this.state.prevUserAddress) { - const newUserAddress = _.isEmpty(nextProps.userAddress) ? undefined : nextProps.userAddress; - // tslint:disable-next-line:no-floating-promises - this._blockchain.userAddressUpdatedFireAndForgetAsync(newUserAddress); - this.setState({ - prevUserAddress: nextProps.userAddress, - }); - } - if (nextProps.nodeVersion !== this.state.prevNodeVersion) { - // tslint:disable-next-line:no-floating-promises - this._blockchain.nodeVersionUpdatedFireAndForgetAsync(nextProps.nodeVersion); - } - if (nextProps.location.pathname !== this.state.prevPathname) { - this.setState({ - prevPathname: nextProps.location.pathname, - }); - } - - // If the address changed, but the network did not, we can just refetch the currently tracked tokens. - if ( - (nextProps.userAddress !== this.props.userAddress && nextProps.networkId === this.props.networkId) || - nextProps.lastForceTokenStateRefetch !== this.props.lastForceTokenStateRefetch - ) { - // tslint:disable-next-line:no-floating-promises - this._fetchBalancesAndAllowancesAsync(this._getCurrentTrackedTokensAddresses()); - } - - const nextTrackedTokens = utils.getTrackedTokens(nextProps.tokenByAddress); - const trackedTokens = this._getCurrentTrackedTokens(); - - if (!_.isEqual(nextTrackedTokens, trackedTokens)) { - const newTokens = _.difference(nextTrackedTokens, trackedTokens); - const newTokenAddresses = _.map(newTokens, token => token.address); - // Add placeholder entry for this token to the state, since fetching the - // balance/allowance is asynchronous - const trackedTokenStateByAddress = { ...this.state.trackedTokenStateByAddress }; - for (const tokenAddress of newTokenAddresses) { - trackedTokenStateByAddress[tokenAddress] = { - balance: new BigNumber(0), - allowance: new BigNumber(0), - isLoaded: false, - }; - } - this.setState( - { - trackedTokenStateByAddress, - }, - () => { - // Fetch the actual balance/allowance. - // tslint:disable-next-line:no-floating-promises - this._fetchBalancesAndAllowancesAsync(newTokenAddresses); - }, - ); - } - } - public render(): React.ReactNode { - const updateShouldBlockchainErrDialogBeOpen = this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen.bind( - this.props.dispatcher, - ); - const isAssetPickerDialogOpen = this.state.tokenManagementState !== TokenManagementState.None; - const tokenVisibility = - this.state.tokenManagementState === TokenManagementState.Add - ? TokenVisibility.Untracked - : TokenVisibility.Tracked; - return ( - - - - - - - - - - - - - - - - - - ); - } - private _renderMainRoute(): React.ReactNode { - if (this._isSmallScreen()) { - return ; - } else { - return ; - } - } - private _renderOtherRoutes(routeComponentProps: RouteComponentProps): React.ReactNode { - if (this._isSmallScreen()) { - return ; - } else { - return ; - } - } - private _renderMenu(routeComponentProps: RouteComponentProps): React.ReactNode { - const menuTheme: MenuTheme = { - paddingLeft: MENU_PADDING_LEFT, - textColor: colors.darkerGrey, - iconColor: colors.darkerGrey, - selectedIconColor: colors.yellow800, - selectedBackgroundColor: 'transparent', - }; - return ( -
    } - body={} - /> - ); - } - private _renderWallet(): React.ReactNode { - const isMobile = utils.isMobileWidth(this.props.screenWidth); - // We need room to scroll down for mobile onboarding - const marginBottom = isMobile ? '250px' : '15px'; - return ( -
    - - {isMobile && ( - - {this._renderStartOnboarding()} - - )} - - - - {!isMobile && {this._renderStartOnboarding()}} - - -
    - ); - } - private _renderStartOnboarding(): React.ReactNode { - const isMobile = utils.isMobileWidth(this.props.screenWidth); - const shouldStartOnboarding = !isMobile || this.props.location.pathname === `${WebsitePaths.Portal}/account`; - const startOnboarding = ( - - - Set up your account to start trading - - - - - - ); - return !shouldStartOnboarding ? ( - {startOnboarding} - ) : ( - startOnboarding - ); - } - private _startOnboarding(): void { - analytics.track('Onboarding Started', { - reason: 'manual', - stepIndex: this.props.portalOnboardingStep, - }); - this.props.dispatcher.updatePortalOnboardingShowing(true); - } - private _renderWalletSection(): React.ReactNode { - return
    } body={this._renderWallet()} />; - } - private _renderAccountManagement(): React.ReactNode { - const accountManagementItems: AccountManagementItem[] = [ - { - pathName: `${WebsitePaths.Portal}/weth`, - headerText: 'Wrapped ETH', - render: this._renderEthWrapper.bind(this), - }, - { - pathName: `${WebsitePaths.Portal}/account`, - headerText: this._isSmallScreen() ? undefined : 'Your Account', - render: this._isSmallScreen() ? this._renderWallet.bind(this) : this._renderTokenBalances.bind(this), - }, - { - pathName: `${WebsitePaths.Portal}/trades`, - headerText: 'Trade History', - render: this._renderTradeHistory.bind(this), - }, - { - pathName: `${WebsitePaths.Portal}/generate`, - headerText: 'Generate Order', - render: this._renderGenerateOrderForm.bind(this), - }, - { - pathName: `${WebsitePaths.Portal}/fill`, - headerText: 'Fill Order', - render: this._renderFillOrder.bind(this), - }, - ]; - return ( -
    - - {_.map(accountManagementItems, item => { - return ( - - ); - })} - } - - - -
    - ); - } - private _renderAccountManagementItem(item: AccountManagementItem): React.ReactNode { - return ( -
    } - body={} - /> - ); - } - private _renderEthWrapper(): React.ReactNode { - return ( - - ); - } - private _renderTradeHistory(): React.ReactNode { - return ( - - ); - } - private _renderGenerateOrderForm(): React.ReactNode { - return ( - - ); - } - private _renderFillOrder(): React.ReactNode { - const initialFillOrder = !_.isUndefined(this.props.userSuppliedOrderCache) - ? this.props.userSuppliedOrderCache - : this._sharedOrderIfExists; - return ( - - ); - } - private _renderTokenBalances(): React.ReactNode { - return ( - - ); - } - private _renderRelayerIndexSection(): React.ReactNode { - const isMobile = utils.isMobileWidth(this.props.screenWidth); - // TODO(bmillman): revert RelayerIndex cellStyle to Expanded once data pipeline is tracking v2 volume - return ( -
    } - body={ - - {isMobile && ( - - {this._renderStartOnboarding()} - - )} - - - } - /> - ); - } - private _renderNotFoundMessage(): React.ReactNode { - return ( - - ); - } - private _onTokenChosen(tokenAddress: string): void { - if (_.isEmpty(tokenAddress)) { - this.setState({ - tokenManagementState: TokenManagementState.None, - }); - return; - } - const token = this.props.tokenByAddress[tokenAddress]; - const isDefaultTrackedToken = _.includes(configs.DEFAULT_TRACKED_TOKEN_SYMBOLS, token.symbol); - if (this.state.tokenManagementState === TokenManagementState.Remove && !isDefaultTrackedToken) { - if (token.isRegistered) { - // Remove the token from tracked tokens - const newToken: Token = { - ...token, - trackedTimestamp: undefined, - }; - this.props.dispatcher.updateTokenByAddress([newToken]); - } else { - this.props.dispatcher.removeTokenToTokenByAddress(token); - } - trackedTokenStorage.removeTrackedToken(this.props.userAddress, this.props.networkId, tokenAddress); - } else if (isDefaultTrackedToken) { - this.props.dispatcher.showFlashMessage(`Cannot remove ${token.name} because it's a default token`); - } - this.setState({ - tokenManagementState: TokenManagementState.None, - }); - } - private _onToggleLedgerDialog(): void { - this.setState({ - isLedgerDialogOpen: !this.state.isLedgerDialogOpen, - }); - } - private _onAddToken(): void { - this.setState({ - tokenManagementState: TokenManagementState.Add, - }); - } - private _onRemoveToken(): void { - this.setState({ - tokenManagementState: TokenManagementState.Remove, - }); - } - private _onPortalDisclaimerAccepted(): void { - localStorage.setItem(constants.LOCAL_STORAGE_KEY_ACCEPT_DISCLAIMER, 'set'); - this.setState({ - isDisclaimerDialogOpen: false, - }); - } - private _updateScreenWidth(): void { - const newScreenWidth = utils.getScreenWidth(); - this.props.dispatcher.updateScreenWidth(newScreenWidth); - } - private _isSmallScreen(): boolean { - const isSmallScreen = this.props.screenWidth === ScreenWidths.Sm; - return isSmallScreen; - } - private _getCurrentTrackedTokens(): Token[] { - return utils.getTrackedTokens(this.props.tokenByAddress); - } - private _getCurrentTrackedTokensAddresses(): string[] { - return _.map(this._getCurrentTrackedTokens(), token => token.address); - } - private _getInitialTrackedTokenStateByAddress(trackedTokens: Token[]): TokenStateByAddress { - const trackedTokenStateByAddress: TokenStateByAddress = {}; - _.each(trackedTokens, token => { - trackedTokenStateByAddress[token.address] = { - balance: new BigNumber(0), - allowance: new BigNumber(0), - isLoaded: false, - }; - }); - return trackedTokenStateByAddress; - } - - private async _fetchBalancesAndAllowancesAsync(tokenAddresses: string[]): Promise { - if (_.isEmpty(tokenAddresses)) { - return; - } - const trackedTokenStateByAddress = this.state.trackedTokenStateByAddress; - const userAddressIfExists = _.isEmpty(this.props.userAddress) ? undefined : this.props.userAddress; - const balancesAndAllowances = await Promise.all( - tokenAddresses.map(async tokenAddress => { - return this._blockchain.getTokenBalanceAndAllowanceAsync(userAddressIfExists, tokenAddress); - }), - ); - const priceByAddress = await this._getPriceByAddressAsync(tokenAddresses); - for (let i = 0; i < tokenAddresses.length; i++) { - // Order is preserved in Promise.all - const [balance, allowance] = balancesAndAllowances[i]; - const tokenAddress = tokenAddresses[i]; - trackedTokenStateByAddress[tokenAddress] = { - balance, - allowance, - isLoaded: true, - price: priceByAddress[tokenAddress], - }; - } - this.setState({ - trackedTokenStateByAddress, - }); - } - - private async _getPriceByAddressAsync(tokenAddresses: string[]): Promise> { - if (_.isEmpty(tokenAddresses)) { - return {}; - } - // for each input token address, search for the corresponding symbol in this.props.tokenByAddress, if it exists - // create a mapping from existing symbols -> address - const tokenAddressBySymbol: { [symbol: string]: string } = {}; - _.each(tokenAddresses, address => { - const tokenIfExists = _.get(this.props.tokenByAddress, address); - if (!_.isUndefined(tokenIfExists)) { - const symbol = tokenIfExists.symbol; - tokenAddressBySymbol[symbol] = address; - } - }); - const tokenSymbols = _.keys(tokenAddressBySymbol); - try { - const priceBySymbol = await backendClient.getPriceInfoAsync(tokenSymbols); - const priceByAddress = _.mapKeys(priceBySymbol, (_value, symbol) => _.get(tokenAddressBySymbol, symbol)); - const result = _.mapValues(priceByAddress, price => { - const priceBigNumber = new BigNumber(price); - return priceBigNumber; - }); - return result; - } catch (err) { - return {}; - } - } - - private async _refetchTokenStateAsync(tokenAddress: string): Promise { - await this._fetchBalancesAndAllowancesAsync([tokenAddress]); - } -} - -interface LargeLayoutProps { - left: React.ReactNode; - right: React.ReactNode; -} -const LargeLayout = (props: LargeLayoutProps) => { - return ( - -
    - - {props.left} - -
    - - - {props.right} - - -
    - ); -}; - -interface SmallLayoutProps { - content: React.ReactNode; -} -const SmallLayout = (props: SmallLayoutProps) => { - return ( -
    - - {props.content} - -
    - ); -}; // tslint:disable:max-file-line-count diff --git a/packages/website/ts/components/portal/section.tsx b/packages/website/ts/components/portal/section.tsx deleted file mode 100644 index b6c9fd098..000000000 --- a/packages/website/ts/components/portal/section.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import * as React from 'react'; - -export interface SectionProps { - header: React.ReactNode; - body: React.ReactNode; -} -export const Section = (props: SectionProps) => { - return ( -
    - {props.header} - {props.body} -
    - ); -}; diff --git a/packages/website/ts/components/portal/text_header.tsx b/packages/website/ts/components/portal/text_header.tsx deleted file mode 100644 index b6045b832..000000000 --- a/packages/website/ts/components/portal/text_header.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { colors } from '@0x/react-shared'; -import * as React from 'react'; - -import { Text } from 'ts/components/ui/text'; - -export interface TextHeaderProps { - labelText: string; -} - -export const TextHeader = (props: TextHeaderProps) => { - return ( - - {props.labelText} - - ); -}; diff --git a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx b/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx deleted file mode 100644 index 7f1b4ebb4..000000000 --- a/packages/website/ts/components/relayer_index/relayer_grid_tile.tsx +++ /dev/null @@ -1,148 +0,0 @@ -import { Styles } from '@0x/react-shared'; -import * as _ from 'lodash'; -import { GridTile as PlainGridTile } from 'material-ui/GridList'; -import * as React from 'react'; -import { analytics } from 'ts/utils/analytics'; - -import { TopTokens } from 'ts/components/relayer_index/relayer_top_tokens'; -import { Container } from 'ts/components/ui/container'; -import { Image } from 'ts/components/ui/image'; -import { Island } from 'ts/components/ui/island'; -import { colors } from 'ts/style/colors'; -import { media } from 'ts/style/media'; -import { styled } from 'ts/style/theme'; -import { WebsiteBackendRelayerInfo } from 'ts/types'; -import { utils } from 'ts/utils/utils'; - -export enum RelayerGridTileStyle { - Expanded = 0, - Minimized, -} - -export interface RelayerGridTileProps { - relayerInfo: WebsiteBackendRelayerInfo; - networkId: number; - style: RelayerGridTileStyle; -} - -const styles: Styles = { - root: { - boxSizing: 'border-box', - // All material UI components have position: relative - // which creates a new stacking context and makes z-index stuff impossible. So reset. - position: 'static', - }, - innerDiv: { - height: '100%', - boxSizing: 'border-box', - }, - expandedHeader: { - height: '50%', - width: '100%', - }, - minimizedHeader: { - height: '100%', - width: '100%', - }, - body: { - height: '50%', - width: '100%', - boxSizing: 'border-box', - padding: 12, - }, - weeklyTradeVolumeLabel: { - fontSize: 14, - color: colors.mediumBlue, - }, - subLabel: { - fontSize: 12, - color: colors.lightGrey, - }, - relayerNameLabel: { - fontSize: 16, - fontWeight: 'bold', - color: colors.black, - }, -}; - -const FALLBACK_IMG_SRC = '/images/relayer_fallback.png'; -const FALLBACK_PRIMARY_COLOR = colors.grey300; -const NO_CONTENT_MESSAGE = '--'; -const RELAYER_ICON_HEIGHT = '110px'; - -export const RelayerGridTile: React.StatelessComponent = (props: RelayerGridTileProps) => { - const link = props.relayerInfo.appUrl || props.relayerInfo.url; - const topTokens = props.relayerInfo.topTokens; - const weeklyTxnVolume = props.relayerInfo.weeklyTxnVolume; - const onClick = () => { - analytics.track('Relayer Click', { - name: props.relayerInfo.name, - }); - utils.openUrl(link); - }; - const headerImageUrl = props.relayerInfo.logoImgUrl; - const headerBackgroundColor = - !_.isUndefined(headerImageUrl) && !_.isUndefined(props.relayerInfo.primaryColor) - ? props.relayerInfo.primaryColor - : FALLBACK_PRIMARY_COLOR; - const isExpanded = props.style === RelayerGridTileStyle.Expanded; - const headerStyle = isExpanded ? styles.expandedHeader : styles.minimizedHeader; - return ( - -
    -
    - -
    - {isExpanded && ( -
    -
    - {props.relayerInfo.name} -
    -
    - {!_.isUndefined(weeklyTxnVolume) && ( -
    {props.relayerInfo.weeklyTxnVolume}
    - )} -
    - -
    - {!_.isEmpty(topTokens) && } -
    -
    -
    - )} -
    -
    - ); -}; - -const GridTile = styled(PlainGridTile)` - cursor: pointer; - &:hover { - transition: transform 0.2s ease; - transform: translate(0px, -3px); - } - ${media.small` - transform: none !important; - transition: none !important; - `}; -`; - -interface SectionProps { - titleText: string; - children?: React.ReactNode; -} -const Section = (props: SectionProps) => { - return ( -
    -
    {props.titleText}
    - {props.children || } -
    - ); -}; - -const NoContent = () =>
    {NO_CONTENT_MESSAGE}
    ; diff --git a/packages/website/ts/components/relayer_index/relayer_index.tsx b/packages/website/ts/components/relayer_index/relayer_index.tsx deleted file mode 100644 index e88c20d7e..000000000 --- a/packages/website/ts/components/relayer_index/relayer_index.tsx +++ /dev/null @@ -1,126 +0,0 @@ -import * as _ from 'lodash'; -import CircularProgress from 'material-ui/CircularProgress'; -import { GridList } from 'material-ui/GridList'; -import * as React from 'react'; - -import { RelayerGridTile, RelayerGridTileStyle } from 'ts/components/relayer_index/relayer_grid_tile'; -import { Retry } from 'ts/components/ui/retry'; -import { ScreenWidths, WebsiteBackendRelayerInfo } from 'ts/types'; -import { backendClient } from 'ts/utils/backend_client'; - -export enum RelayerIndexCellStyle { - Expanded = 0, - Minimized, -} - -export interface RelayerIndexProps { - networkId: number; - screenWidth: ScreenWidths; - cellStyle: RelayerIndexCellStyle; -} - -interface RelayerIndexState { - relayerInfos?: WebsiteBackendRelayerInfo[]; - error?: Error; -} - -const CELL_HEIGHT_EXPANDED = 290; -const CELL_HEIGHT_MINIMIZED = 225; -const NUMBER_OF_COLUMNS_LARGE = 3; -const NUMBER_OF_COLUMNS_MEDIUM = 2; -const NUMBER_OF_COLUMNS_SMALL = 2; -const GRID_PADDING = 20; - -export class RelayerIndex extends React.Component { - private _isUnmounted: boolean; - constructor(props: RelayerIndexProps) { - super(props); - this._isUnmounted = false; - this.state = { - relayerInfos: undefined, - error: undefined, - }; - } - public componentWillMount(): void { - // tslint:disable-next-line:no-floating-promises - this._fetchRelayerInfosAsync(); - } - public componentWillUnmount(): void { - this._isUnmounted = true; - } - public render(): React.ReactNode { - const isReadyToRender = _.isUndefined(this.state.error) && !_.isUndefined(this.state.relayerInfos); - if (!isReadyToRender) { - return ( - // TODO: consolidate this loading component with the one in portal and OpenPositions - // TODO: possibly refactor into a generic loading container with spinner and retry UI -
    - {_.isUndefined(this.state.error) ? ( - - ) : ( - - )} -
    - ); - } else { - const numberOfRelayers = this.state.relayerInfos.length; - const numberOfColumns = Math.min( - numberOfRelayers, - this._numberOfColumnsForScreenWidth(this.props.screenWidth), - ); - const isExpanded = this.props.cellStyle === RelayerIndexCellStyle.Expanded; - const cellHeight = isExpanded ? CELL_HEIGHT_EXPANDED : CELL_HEIGHT_MINIMIZED; - const gridTileStyle = isExpanded ? RelayerGridTileStyle.Expanded : RelayerGridTileStyle.Minimized; - return ( - - {this.state.relayerInfos.map((relayerInfo: WebsiteBackendRelayerInfo, index) => ( - - ))} - - ); - } - } - private async _fetchRelayerInfosAsync(): Promise { - try { - if (!this._isUnmounted) { - this.setState({ - relayerInfos: undefined, - error: undefined, - }); - } - const relayerInfos = await backendClient.getRelayerInfosAsync(); - if (!this._isUnmounted) { - this.setState({ - relayerInfos, - }); - } - } catch (error) { - if (!this._isUnmounted) { - this.setState({ - error, - }); - } - } - } - private _numberOfColumnsForScreenWidth(screenWidth: ScreenWidths): number { - switch (screenWidth) { - case ScreenWidths.Md: - return NUMBER_OF_COLUMNS_MEDIUM; - case ScreenWidths.Sm: - return NUMBER_OF_COLUMNS_SMALL; - case ScreenWidths.Lg: - default: - return NUMBER_OF_COLUMNS_LARGE; - } - } -} diff --git a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx b/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx deleted file mode 100644 index 558d99855..000000000 --- a/packages/website/ts/components/relayer_index/relayer_top_tokens.tsx +++ /dev/null @@ -1,61 +0,0 @@ -import { colors, EtherscanLinkSuffixes, utils as sharedUtils } from '@0x/react-shared'; -import * as _ from 'lodash'; -import * as React from 'react'; - -import { Container } from 'ts/components/ui/container'; -import { Text } from 'ts/components/ui/text'; -import { WebsiteBackendTokenInfo } from 'ts/types'; -import { analytics } from 'ts/utils/analytics'; -import { utils } from 'ts/utils/utils'; - -export interface TopTokensProps { - tokens: WebsiteBackendTokenInfo[]; - networkId: number; -} - -export const TopTokens: React.StatelessComponent = (props: TopTokensProps) => { - return ( -
    - {_.map(props.tokens, (tokenInfo: WebsiteBackendTokenInfo) => { - return ( - - - - ); - })} -
    - ); -}; - -interface TokenLinkProps { - tokenInfo: WebsiteBackendTokenInfo; - networkId: number; -} -interface TokenLinkState {} - -class TokenLink extends React.Component { - constructor(props: TokenLinkProps) { - super(props); - this.state = { - isHovering: false, - }; - } - public render(): React.ReactNode { - const onClick = (event: React.MouseEvent) => { - event.stopPropagation(); - analytics.track('Token Click', { - tokenSymbol: this.props.tokenInfo.symbol, - }); - const tokenLink = this._tokenLinkFromToken(this.props.tokenInfo, this.props.networkId); - utils.openUrl(tokenLink); - }; - return ( - - {this.props.tokenInfo.symbol} - - ); - } - private _tokenLinkFromToken(tokenInfo: WebsiteBackendTokenInfo, networkId: number): string { - return sharedUtils.getEtherScanLinkIfExists(tokenInfo.address, networkId, EtherscanLinkSuffixes.Address); - } -} diff --git a/packages/website/ts/components/sections/landing/about.tsx b/packages/website/ts/components/sections/landing/about.tsx deleted file mode 100644 index 9c369d83a..000000000 --- a/packages/website/ts/components/sections/landing/about.tsx +++ /dev/null @@ -1,81 +0,0 @@ -import * as React from 'react'; -import styled from 'styled-components'; - -import { Button } from 'ts/components/button'; -import { Icon, InlineIconWrap } from 'ts/components/icon'; -import { Column, FlexWrap, Section } from 'ts/components/newLayout'; -import { Paragraph } from 'ts/components/text'; -import { WebsitePaths } from 'ts/types'; - -interface FigureProps { - value: string; - description: string; -} - -export const SectionLandingAbout = () => ( -
    - - - - - - - - - Anyone in the world can use 0x to service a wide variety of markets ranging from gaming items to financial - instruments to assets that could have never existed before. - - - - Discover how developers use 0x - - -
    - - -
    - -
    - -
    - -
    -); - -const Figure = (props: FigureProps) => ( - - {props.value} - {props.description} - -); - -const DeveloperLink = styled(Button)` - @media (max-width: 500px) { - && { - white-space: pre-wrap; - line-height: 1.3; - } - } -`; - -const FigureValue = styled.dt` - font-size: 50px; - font-weight: 300; - margin-bottom: 15px; - - @media (max-width: 768px) { - font-size: 40px; - } -`; - -const FigureDescription = styled.dd` - font-size: 18px; - color: #999999; -`; diff --git a/packages/website/ts/components/sections/landing/clients.tsx b/packages/website/ts/components/sections/landing/clients.tsx deleted file mode 100644 index 4d83a1d2f..000000000 --- a/packages/website/ts/components/sections/landing/clients.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import * as _ from 'lodash'; -import * as React from 'react'; -import styled from 'styled-components'; -import { Heading } from 'ts/components/text'; - -import { Section, WrapGrid } from 'ts/components/newLayout'; - -interface ProjectLogo { - name: string; - imageUrl?: string; - persistOnMobile?: boolean; -} - -interface StyledProjectInterface { - isOnMobile?: boolean; -} - -const projects: ProjectLogo[] = [ - { - name: 'Radar Relay', - imageUrl: 'images/clients/radar-relay.svg', - persistOnMobile: true, - }, - { - name: 'Paradex', - imageUrl: 'images/clients/paradex.svg', - persistOnMobile: true, - }, - { - name: 'Star Bit Ex', - imageUrl: 'images/clients/starbitex.svg', - }, - { - name: 'LedgerDex', - imageUrl: 'images/clients/ledgerdex.svg', - }, - { - name: 'OpenRelay', - imageUrl: 'images/clients/openrelay.svg', - persistOnMobile: true, - }, - { - name: 'Bamboo Relay', - imageUrl: 'images/clients/bamboo.svg', - persistOnMobile: true, - }, - { - name: 'dEX', - imageUrl: 'images/clients/ercdex.svg', - persistOnMobile: true, - }, - { - name: 'emoon', - imageUrl: 'images/clients/emoon.svg', - persistOnMobile: true, - }, - { - name: 'Gods Unchained', - imageUrl: 'images/clients/godsUnchained.svg', - }, - { - name: 'Instex', - imageUrl: 'images/clients/instex.svg', - }, - { - name: 'Lake Trade', - imageUrl: 'images/clients/laketrade.svg', - }, - { - name: 'Veil', - imageUrl: 'images/clients/veil.svg', - }, -]; - -export const SectionLandingClients = () => ( -
    - Join the growing number of projects developing on 0x - - - {_.map(projects, (item: ProjectLogo, index) => ( - - {item.name} - - ))} - -
    -); - -const StyledProject = styled.div` - flex-shrink: 0; - - img { - object-fit: contain; - width: 100%; - height: 100%; - } - - @media (min-width: 768px) { - width: auto; - height: 50px; - margin: 30px; - } - - @media (max-width: 768px) { - width: auto; - height: 42px; - margin: 15px; - display: ${props => !props.isOnMobile && 'none'}; - } -`; diff --git a/packages/website/ts/components/sections/landing/cta.tsx b/packages/website/ts/components/sections/landing/cta.tsx deleted file mode 100644 index ec5a58a58..000000000 --- a/packages/website/ts/components/sections/landing/cta.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import * as React from 'react'; - -import { BlockIconLink } from 'ts/components/blockIconLink'; -import { Section } from 'ts/components/newLayout'; - -import { AnimatedChatIcon } from 'ts/components/animatedChatIcon'; -import { AnimatedCompassIcon } from 'ts/components/animatedCompassIcon'; -import { WebsitePaths } from 'ts/types'; - -interface Props { - onContactClick?: () => void; -} - -export const SectionLandingCta = (props: Props) => ( -
    - } - title="Ready to build on 0x?" - linkLabel="Get Started" - linkUrl={WebsitePaths.Docs} - /> - } - title="Want help from the 0x team?" - linkLabel="Get in Touch" - linkAction={props.onContactClick} - /> -
    -); diff --git a/packages/website/ts/components/sections/landing/hero.tsx b/packages/website/ts/components/sections/landing/hero.tsx deleted file mode 100644 index 489757286..000000000 --- a/packages/website/ts/components/sections/landing/hero.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import * as React from 'react'; - -import { Button } from 'ts/components/button'; -import { Hero } from 'ts/components/hero'; -import { LandingAnimation } from 'ts/components/heroImage'; - -import { HeroAnimation } from 'ts/components/heroAnimation'; -import { WebsitePaths } from 'ts/types'; - -export const SectionLandingHero = () => ( - } />} - actions={} - /> -); - -const HeroActions = () => ( - <> - - - - -); diff --git a/packages/website/ts/components/send_button.tsx b/packages/website/ts/components/send_button.tsx deleted file mode 100644 index 27438e5d5..000000000 --- a/packages/website/ts/components/send_button.tsx +++ /dev/null @@ -1,94 +0,0 @@ -import { BigNumber, logUtils } from '@0x/utils'; -import * as _ from 'lodash'; -import RaisedButton from 'material-ui/RaisedButton'; -import * as React from 'react'; -import { Blockchain } from 'ts/blockchain'; -import { SendDialog } from 'ts/components/dialogs/send_dialog'; -import { Dispatcher } from 'ts/redux/dispatcher'; -import { BlockchainCallErrs, Token } from 'ts/types'; -import { errorReporter } from 'ts/utils/error_reporter'; -import { utils } from 'ts/utils/utils'; - -interface SendButtonProps { - userAddress: string; - networkId: number; - asset: Token | 'ETH'; - dispatcher: Dispatcher; - blockchain: Blockchain; - onError: () => void; - lastForceTokenStateRefetch: number; - refetchTokenStateAsync: (tokenAddress: string) => Promise; -} - -interface SendButtonState { - isSendDialogVisible: boolean; - isSending: boolean; -} - -export class SendButton extends React.Component { - public constructor(props: SendButtonProps) { - super(props); - this.state = { - isSendDialogVisible: false, - isSending: false, - }; - } - public render(): React.ReactNode { - const labelStyle = this.state.isSending ? { fontSize: 10 } : {}; - return ( -
    - - -
    - ); - } - private _toggleSendDialog(): void { - this.setState({ - isSendDialogVisible: !this.state.isSendDialogVisible, - }); - } - private async _onSendAmountSelectedAsync(recipient: string, value: BigNumber): Promise { - this.setState({ - isSending: true, - }); - this._toggleSendDialog(); - try { - if (this.props.asset === 'ETH') { - await this.props.blockchain.sendAsync(recipient, value); - } else { - const token = this.props.asset; - await this.props.blockchain.transferAsync(token, recipient, value); - await this.props.refetchTokenStateAsync(token.address); - } - } catch (err) { - const errMsg = `${err}`; - if (_.includes(errMsg, BlockchainCallErrs.UserHasNoAssociatedAddresses)) { - this.props.dispatcher.updateShouldBlockchainErrDialogBeOpen(true); - return; - } else if (!utils.didUserDenyWeb3Request(errMsg)) { - logUtils.log(`Unexpected error encountered: ${err}`); - logUtils.log(err.stack); - this.props.onError(); - errorReporter.report(err); - } - } - this.setState({ - isSending: false, - }); - } -} diff --git a/packages/website/ts/components/siteWrap.tsx b/packages/website/ts/components/siteWrap.tsx deleted file mode 100644 index 1f0902105..000000000 --- a/packages/website/ts/components/siteWrap.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import * as React from 'react'; -import styled, { ThemeProvider } from 'styled-components'; - -import { colors } from 'ts/style/colors'; - -import { Footer } from 'ts/components/footer'; -import { Header } from 'ts/components/header'; -import { GlobalStyles } from 'ts/constants/globalStyle'; - -interface Props { - theme?: 'dark' | 'light' | 'gray'; - children: any; -} - -interface State { - isMobileNavOpen: boolean; -} - -interface MainProps { - isNavToggled: boolean; -} - -export interface ThemeValuesInterface { - bgColor: string; - darkBgColor?: string; - lightBgColor: string; - introTextColor: string; - textColor: string; - paragraphColor: string; - linkColor: string; - mobileNavBgUpper: string; - mobileNavBgLower: string; - mobileNavColor: string; - dropdownBg: string; - dropdownButtonBg: string; - dropdownBorderColor?: string; - dropdownColor: string; - headerButtonBg: string; - footerBg: string; - footerColor: string; -} - -export interface ThemeInterface { - [key: string]: ThemeValuesInterface; -} - -const GLOBAL_THEMES: ThemeInterface = { - dark: { - bgColor: '#000000', - darkBgColor: '#111A19', - lightBgColor: '#003831', - introTextColor: 'rgba(255, 255, 255, 0.75)', - textColor: '#FFFFFF', - paragraphColor: '#FFFFFF', - linkColor: colors.brandLight, - mobileNavBgUpper: '#003831', - mobileNavBgLower: '#022924', - mobileNavColor: '#FFFFFF', - dropdownBg: '#111A19', - dropdownButtonBg: '#003831', - dropdownColor: '#FFFFFF', - headerButtonBg: '#00AE99', - footerBg: '#181818', - footerColor: '#FFFFFF', - }, - light: { - bgColor: '#FFFFFF', - lightBgColor: '#F3F6F4', - darkBgColor: '#003831', - introTextColor: 'rgba(92, 92, 92, 0.87)', - textColor: '#000000', - paragraphColor: '#474747', - linkColor: colors.brandDark, - mobileNavBgUpper: '#FFFFFF', - mobileNavBgLower: '#F3F6F4', - mobileNavColor: '#000000', - dropdownBg: '#FBFBFB', - dropdownButtonBg: '#F3F6F4', - dropdownColor: '#003831', - dropdownBorderColor: '#E4E4E4', - headerButtonBg: '#003831', - footerBg: '#F2F2F2', - footerColor: '#000000', - }, - gray: { - bgColor: '#e0e0e0', - lightBgColor: '#003831', - introTextColor: 'rgba(92, 92, 92, 0.87)', - textColor: '#000000', - paragraphColor: '#777777', - linkColor: colors.brandDark, - mobileNavBgUpper: '#FFFFFF', - mobileNavBgLower: '#F3F6F4', - mobileNavColor: '#000000', - dropdownBg: '#FFFFFF', - dropdownButtonBg: '#F3F6F4', - dropdownColor: '#003831', - headerButtonBg: '#003831', - footerBg: '#181818', - footerColor: '#FFFFFF', - }, -}; - -export class SiteWrap extends React.Component { - public state = { - isMobileNavOpen: false, - }; - - public componentDidMount(): void { - document.documentElement.style.overflowY = 'auto'; - window.scrollTo(0, 0); - } - - public toggleMobileNav = () => { - this.setState({ - isMobileNavOpen: !this.state.isMobileNavOpen, - }); - }; - - public render(): React.ReactNode { - const { children, theme = 'dark' } = this.props; - const { isMobileNavOpen } = this.state; - const currentTheme = GLOBAL_THEMES[theme]; - - return ( - <> - - <> - - -
    - -
    {children}
    - -