Remove packages/dev-tools-pages folder and update yarn.lock
							
								
								
									
										1
									
								
								packages/dev-tools-pages/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1 +0,0 @@
 | 
				
			|||||||
public
 | 
					 | 
				
			||||||
@@ -1,88 +0,0 @@
 | 
				
			|||||||
## Dev tools pages
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
This repository contains our dev tools pages.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## Local Dev Setup
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Requires Node version 6.9.5 or higher & yarn v1.9.4
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 1. Install dependencies for monorepo:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Make sure you install Yarn v1.9.4 (npm won't work!). We rely on our `yarn.lock` file and on Yarn's support for `workspaces` in our monorepo setup.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
yarn install
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 2. 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/dev-tools-pages yarn build
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Note: Ignore the `WARNING in asset size limit` and `WARNING in entrypoint size limit` warnings.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 3. Run dev server
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
cd packages/dev-tools-pages
 | 
					 | 
				
			||||||
yarn dev
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Visit [http://localhost:3572/](http://localhost:3572/) in your browser.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
The webpage will refresh when source code is changed.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### 4. Code!
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
There are some basic primitives we'd like you to use:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
1.  `<Container>Stuff</Container>`: Use containers instead of divs,spans,etc... and use it's props instead of inline styles (e.g `style={{margin: 3}}` should be `margin="3px"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
2.  `<Text>Look ma, text!</Text>`: Use text components whenever rendering text. It has props for manipulating texts, so again no in-line styles. Use `fontColor="red"`, not `style={{color: 'red'}}`.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
3.  Styled-components: See the `ui/button.tsx` file for an example of how to use these.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
4.  BassCss: This library gives you access to a bunch of [classes](http://basscss.com/) that apply styles in a browser-compatible way, has affordances for responsiveness and alleviates the need for inline styles or LESS/CSS files.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
With the above 4 tools and following the React paradigm, you shouldn't need CSS/LESS files. IF there are special occasions where you do, these is a `all.less` file, but this is a solution of last resort. Use it sparingly.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Clean
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
yarn clean
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Lint
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
yarn lint
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Prettier
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Run from the monorepo root directory:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
yarn prettier
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
### Resources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##### Toolkit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-   [Styled Components](https://www.styled-components.com/)
 | 
					 | 
				
			||||||
-   [BassCSS](http://basscss.com/)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
##### Recommended Atom packages:
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
-   [atom-typescript](https://atom.io/packages/atom-typescript)
 | 
					 | 
				
			||||||
-   [linter-tslint](https://atom.io/packages/linter-tslint)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 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.
 | 
					 | 
				
			||||||
@@ -1,17 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
    <head>
 | 
					 | 
				
			||||||
        <meta charset="UTF-8" />
 | 
					 | 
				
			||||||
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					 | 
				
			||||||
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
 | 
					 | 
				
			||||||
        <title>Test</title>
 | 
					 | 
				
			||||||
    </head>
 | 
					 | 
				
			||||||
    <body>
 | 
					 | 
				
			||||||
        <ul>
 | 
					 | 
				
			||||||
            <li><a href="/compiler">Compiler</a></li>
 | 
					 | 
				
			||||||
            <li><a href="/coverage">Coverage</a></li>
 | 
					 | 
				
			||||||
            <li><a href="/profiler">Profiler</a></li>
 | 
					 | 
				
			||||||
            <li><a href="/trace">Trace</a></li>
 | 
					 | 
				
			||||||
        </ul>
 | 
					 | 
				
			||||||
    </body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 6.4 KiB  | 
| 
		 Before Width: | Height: | Size: 14 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB  | 
| 
		 Before Width: | Height: | Size: 13 KiB  | 
@@ -1,70 +0,0 @@
 | 
				
			|||||||
<!DOCTYPE html>
 | 
					 | 
				
			||||||
<html lang="en">
 | 
					 | 
				
			||||||
    <head>
 | 
					 | 
				
			||||||
        <meta charset="UTF-8" />
 | 
					 | 
				
			||||||
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
 | 
					 | 
				
			||||||
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
 | 
					 | 
				
			||||||
        <link rel="preload" href="/fonts/MaisonNeue-Book-subset.woff2" as="font" type="font/woff2" crossorigin />
 | 
					 | 
				
			||||||
        <link rel="preload" href="/fonts/MaisonNeue-Bold-subset.woff2" as="font" type="font/woff2" crossorigin />
 | 
					 | 
				
			||||||
        <title><%= htmlWebpackPlugin.options.title %></title>
 | 
					 | 
				
			||||||
    </head>
 | 
					 | 
				
			||||||
    <body>
 | 
					 | 
				
			||||||
        <!-- Heap SDK -->
 | 
					 | 
				
			||||||
        <script type="text/javascript">
 | 
					 | 
				
			||||||
            if ('<%= htmlWebpackPlugin.options.environment %>' !== 'development') {
 | 
					 | 
				
			||||||
                (window.heap = window.heap || []),
 | 
					 | 
				
			||||||
                    (heap.load = function(e, t) {
 | 
					 | 
				
			||||||
                        (window.heap.appid = e), (window.heap.config = t = t || {});
 | 
					 | 
				
			||||||
                        var r = t.forceSSL || 'https:' === document.location.protocol,
 | 
					 | 
				
			||||||
                            a = document.createElement('script');
 | 
					 | 
				
			||||||
                        (a.type = 'text/javascript'),
 | 
					 | 
				
			||||||
                            (a.async = !0),
 | 
					 | 
				
			||||||
                            (a.src = (r ? 'https:' : 'http:') + '//cdn.heapanalytics.com/js/heap-' + e + '.js');
 | 
					 | 
				
			||||||
                        var n = document.getElementsByTagName('script')[0];
 | 
					 | 
				
			||||||
                        n.parentNode.insertBefore(a, n);
 | 
					 | 
				
			||||||
                        for (
 | 
					 | 
				
			||||||
                            var o = function(e) {
 | 
					 | 
				
			||||||
                                    return function() {
 | 
					 | 
				
			||||||
                                        heap.push([e].concat(Array.prototype.slice.call(arguments, 0)));
 | 
					 | 
				
			||||||
                                    };
 | 
					 | 
				
			||||||
                                },
 | 
					 | 
				
			||||||
                                p = [
 | 
					 | 
				
			||||||
                                    'addEventProperties',
 | 
					 | 
				
			||||||
                                    'addUserProperties',
 | 
					 | 
				
			||||||
                                    'clearEventProperties',
 | 
					 | 
				
			||||||
                                    'identify',
 | 
					 | 
				
			||||||
                                    'resetIdentity',
 | 
					 | 
				
			||||||
                                    'removeEventProperty',
 | 
					 | 
				
			||||||
                                    'setEventProperties',
 | 
					 | 
				
			||||||
                                    'track',
 | 
					 | 
				
			||||||
                                    'unsetEventProperty',
 | 
					 | 
				
			||||||
                                ],
 | 
					 | 
				
			||||||
                                c = 0;
 | 
					 | 
				
			||||||
                            c < p.length;
 | 
					 | 
				
			||||||
                            c++
 | 
					 | 
				
			||||||
                        )
 | 
					 | 
				
			||||||
                            heap[p[c]] = o(p[c]);
 | 
					 | 
				
			||||||
                    });
 | 
					 | 
				
			||||||
                heap.load('<%= htmlWebpackPlugin.options.heapAnalyticsId %>');
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        </script>
 | 
					 | 
				
			||||||
        <!-- Global site tag (gtag.js) - Google Analytics -->
 | 
					 | 
				
			||||||
        <script
 | 
					 | 
				
			||||||
            async
 | 
					 | 
				
			||||||
            src="https://www.googletagmanager.com/gtag/js?id=<%= htmlWebpackPlugin.options.googleAnalyticsId %>"
 | 
					 | 
				
			||||||
        ></script>
 | 
					 | 
				
			||||||
        <script>
 | 
					 | 
				
			||||||
            if ('<%= htmlWebpackPlugin.options.environment %>' !== 'development') {
 | 
					 | 
				
			||||||
                window.dataLayer = window.dataLayer || [];
 | 
					 | 
				
			||||||
                function gtag() {
 | 
					 | 
				
			||||||
                    dataLayer.push(arguments);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                gtag('js', new Date());
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                gtag('config', '<%= htmlWebpackPlugin.options.googleAnalyticsId %>');
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        </script>
 | 
					 | 
				
			||||||
        <!-- End Google Analytics -->
 | 
					 | 
				
			||||||
        <div id="app"></div>
 | 
					 | 
				
			||||||
    </body>
 | 
					 | 
				
			||||||
</html>
 | 
					 | 
				
			||||||
@@ -1,78 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "name": "@0x/dev-tools-pages",
 | 
					 | 
				
			||||||
    "version": "0.0.29",
 | 
					 | 
				
			||||||
    "engines": {
 | 
					 | 
				
			||||||
        "node": ">=6.12"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "private": true,
 | 
					 | 
				
			||||||
    "description": "0x Dev tools pages",
 | 
					 | 
				
			||||||
    "scripts": {
 | 
					 | 
				
			||||||
        "build": "node --max_old_space_size=8192 ../../node_modules/.bin/webpack --mode production",
 | 
					 | 
				
			||||||
        "build:ci": "yarn build",
 | 
					 | 
				
			||||||
        "build:dev": "../../node_modules/.bin/webpack --mode development",
 | 
					 | 
				
			||||||
        "clean": "shx rm -f public/bundle*",
 | 
					 | 
				
			||||||
        "lint": "tslint --format stylish --project . 'ts/**/*.ts' 'ts/**/*.tsx'",
 | 
					 | 
				
			||||||
        "fix": "tslint --fix --format stylish --project . 'ts/**/*.ts' 'ts/**/*.tsx'",
 | 
					 | 
				
			||||||
        "dev": "webpack-dev-server --mode development --content-base public",
 | 
					 | 
				
			||||||
        "deploy:all": "npm run build; npm run deploy:compiler; npm run deploy:compiler:index; npm run deploy:coverage; npm run deploy:coverage:index; npm run deploy:profiler; npm run deploy:profiler:index; npm run deploy:trace; npm run deploy:trace:index;",
 | 
					 | 
				
			||||||
        "deploy:compiler": "DIR_NAME=./public/. BUCKET=s3://sol-compiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
 | 
					 | 
				
			||||||
        "deploy:coverage": "DIR_NAME=./public/. BUCKET=s3://sol-coverage.com yarn s3:sync --exclude 'bundle-compiler*' --exclude 'bundle-trace*' --exclude 'bundle-profiler*'",
 | 
					 | 
				
			||||||
        "deploy:profiler": "DIR_NAME=./public/. BUCKET=s3://sol-profiler.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-trace*' --exclude 'bundle-compiler*'",
 | 
					 | 
				
			||||||
        "deploy:trace": "DIR_NAME=./public/. BUCKET=s3://sol-trace.com yarn s3:sync --exclude 'bundle-cov*' --exclude 'bundle-compiler*' --exclude 'bundle-profiler*'",
 | 
					 | 
				
			||||||
        "deploy:compiler:index": "DIR_NAME=./public/compiler/. BUCKET=s3://sol-compiler.com yarn s3:sync",
 | 
					 | 
				
			||||||
        "deploy:coverage:index": "DIR_NAME=./public/coverage/. BUCKET=s3://sol-coverage.com yarn s3:sync",
 | 
					 | 
				
			||||||
        "deploy:profiler:index": "DIR_NAME=./public/profiler/. BUCKET=s3://sol-profiler.com yarn s3:sync",
 | 
					 | 
				
			||||||
        "deploy:trace:index": "DIR_NAME=./public/trace/. BUCKET=s3://sol-trace.com yarn s3:sync",
 | 
					 | 
				
			||||||
        "s3:sync": "aws s3 sync $DIR_NAME $BUCKET --profile 0xproject --region us-east-1 --grants read=uri=http://acs.amazonaws.com/groups/global/AllUsers --exclude *.map.js --exclude 'profiler/*' --exclude 'trace/*' --exclude 'coverage/*' --exclude 'compiler/*'"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "license": "Apache-2.0",
 | 
					 | 
				
			||||||
    "dependencies": {
 | 
					 | 
				
			||||||
        "basscss": "^8.0.3",
 | 
					 | 
				
			||||||
        "bowser": "^1.9.4",
 | 
					 | 
				
			||||||
        "highlight.js": "^9.13.1",
 | 
					 | 
				
			||||||
        "less": "^2.7.2",
 | 
					 | 
				
			||||||
        "polished": "^1.9.2",
 | 
					 | 
				
			||||||
        "react": "^16.5.2",
 | 
					 | 
				
			||||||
        "react-dom": "^16.5.2",
 | 
					 | 
				
			||||||
        "react-loadable": "^5.5.0",
 | 
					 | 
				
			||||||
        "react-lottie": "^1.2.3",
 | 
					 | 
				
			||||||
        "react-tabs": "^2.3.0",
 | 
					 | 
				
			||||||
        "styled-components": "^4.1.1",
 | 
					 | 
				
			||||||
        "styled-normalize": "^8.0.1"
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "devDependencies": {
 | 
					 | 
				
			||||||
        "@types/highlight.js": "^9.12.3",
 | 
					 | 
				
			||||||
        "@types/lodash": "4.14.104",
 | 
					 | 
				
			||||||
        "@types/node": "*",
 | 
					 | 
				
			||||||
        "@types/react": "^16.4.2",
 | 
					 | 
				
			||||||
        "@types/react-dom": "^16.0.7",
 | 
					 | 
				
			||||||
        "@types/react-loadable": "^5.4.2",
 | 
					 | 
				
			||||||
        "@types/react-lottie": "^1.2.0",
 | 
					 | 
				
			||||||
        "@types/react-router-dom": "^4.0.4",
 | 
					 | 
				
			||||||
        "@types/react-tabs": "^2.3.0",
 | 
					 | 
				
			||||||
        "@types/react-tap-event-plugin": "0.0.30",
 | 
					 | 
				
			||||||
        "@types/styled-components": "4.1.1",
 | 
					 | 
				
			||||||
        "awesome-typescript-loader": "^5.2.1",
 | 
					 | 
				
			||||||
        "clean-webpack-plugin": "^0.1.19",
 | 
					 | 
				
			||||||
        "copy-webpack-plugin": "^4.5.4",
 | 
					 | 
				
			||||||
        "copyfiles": "^2.0.0",
 | 
					 | 
				
			||||||
        "css-loader": "0.23.x",
 | 
					 | 
				
			||||||
        "html-webpack-plugin": "^3.2.0",
 | 
					 | 
				
			||||||
        "less-loader": "^4.1.0",
 | 
					 | 
				
			||||||
        "make-promises-safe": "^1.1.0",
 | 
					 | 
				
			||||||
        "raw-loader": "^0.5.1",
 | 
					 | 
				
			||||||
        "react-svg-loader": "^2.1.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"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,80 +0,0 @@
 | 
				
			|||||||
const pages = [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'sol-compiler',
 | 
					 | 
				
			||||||
        filename: 'compiler/index.html',
 | 
					 | 
				
			||||||
        template: 'assets/index.html',
 | 
					 | 
				
			||||||
        chunks: ['compiler'],
 | 
					 | 
				
			||||||
        favicon: 'assets/favicons/compiler.ico',
 | 
					 | 
				
			||||||
        minify: true,
 | 
					 | 
				
			||||||
        meta: {
 | 
					 | 
				
			||||||
            description: 'Solidity compilation that just works',
 | 
					 | 
				
			||||||
            'og-title': { property: 'og:title', content: 'sol-compiler' },
 | 
					 | 
				
			||||||
            'og-description': { property: 'og:description', content: 'Solidity compilation that just works' },
 | 
					 | 
				
			||||||
            'og-type': { property: 'og:type', content: 'website' },
 | 
					 | 
				
			||||||
            'og-image': { property: 'og:image', content: '/images/og-compiler.png' },
 | 
					 | 
				
			||||||
            'twitter:site': '@0xproject',
 | 
					 | 
				
			||||||
            'twitter:image': '/images/og-compiler.png',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        googleAnalyticsId: 'UA-98720122-4',
 | 
					 | 
				
			||||||
        heapAnalyticsId: '3772819976',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'sol-coverage',
 | 
					 | 
				
			||||||
        filename: 'coverage/index.html',
 | 
					 | 
				
			||||||
        template: 'assets/index.html',
 | 
					 | 
				
			||||||
        chunks: ['coverage'],
 | 
					 | 
				
			||||||
        favicon: 'assets/favicons/cov.ico',
 | 
					 | 
				
			||||||
        minify: true,
 | 
					 | 
				
			||||||
        meta: {
 | 
					 | 
				
			||||||
            description: 'Solidity code coverage',
 | 
					 | 
				
			||||||
            'og-title': { property: 'og:title', content: 'sol-coverage' },
 | 
					 | 
				
			||||||
            'og-description': { property: 'og:description', content: 'Solidity code coverage' },
 | 
					 | 
				
			||||||
            'og-type': { property: 'og:type', content: 'website' },
 | 
					 | 
				
			||||||
            'og-image': { property: 'og:image', content: '/images/og-cov.png' },
 | 
					 | 
				
			||||||
            'twitter:site': '@0xproject',
 | 
					 | 
				
			||||||
            'twitter:image': '/images/og-cov.png',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        googleAnalyticsId: 'UA-98720122-3',
 | 
					 | 
				
			||||||
        heapAnalyticsId: '3386971671',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'sol-profiler',
 | 
					 | 
				
			||||||
        filename: 'profiler/index.html',
 | 
					 | 
				
			||||||
        template: 'assets/index.html',
 | 
					 | 
				
			||||||
        chunks: ['profiler'],
 | 
					 | 
				
			||||||
        favicon: 'assets/favicons/profiler.ico',
 | 
					 | 
				
			||||||
        minify: true,
 | 
					 | 
				
			||||||
        meta: {
 | 
					 | 
				
			||||||
            description: 'Gas profiling for Solidity',
 | 
					 | 
				
			||||||
            'og-title': { property: 'og:title', content: 'sol-profiler' },
 | 
					 | 
				
			||||||
            'og-description': { property: 'og:description', content: 'Gas profiling for Solidity' },
 | 
					 | 
				
			||||||
            'og-type': { property: 'og:type', content: 'website' },
 | 
					 | 
				
			||||||
            'og-image': { property: 'og:image', content: '/images/og-profiler.png' },
 | 
					 | 
				
			||||||
            'twitter:site': '@0xproject',
 | 
					 | 
				
			||||||
            'twitter:image': '/images/og-profiler.png',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        googleAnalyticsId: 'UA-98720122-5',
 | 
					 | 
				
			||||||
        heapAnalyticsId: '3776009943',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'sol-trace',
 | 
					 | 
				
			||||||
        filename: 'trace/index.html',
 | 
					 | 
				
			||||||
        template: 'assets/index.html',
 | 
					 | 
				
			||||||
        chunks: ['trace'],
 | 
					 | 
				
			||||||
        favicon: 'assets/favicons/trace.ico',
 | 
					 | 
				
			||||||
        minify: true,
 | 
					 | 
				
			||||||
        meta: {
 | 
					 | 
				
			||||||
            description: 'Human-readable stack traces',
 | 
					 | 
				
			||||||
            'og-title': { property: 'og:title', content: 'sol-trace' },
 | 
					 | 
				
			||||||
            'og-description': { property: 'og:description', content: 'Human-readable stack traces' },
 | 
					 | 
				
			||||||
            'og-type': { property: 'og:type', content: 'website' },
 | 
					 | 
				
			||||||
            'og-image': { property: 'og:image', content: '/images/og-trace.png' },
 | 
					 | 
				
			||||||
            'twitter:site': '@0xproject',
 | 
					 | 
				
			||||||
            'twitter:image': '/images/og-trace.png',
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        googleAnalyticsId: 'UA-98720122-6',
 | 
					 | 
				
			||||||
        heapAnalyticsId: '4172106583',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = pages;
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { BaseAnimation } from '../index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import * as animationData from './data.json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const CompilerAnimation: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <BaseAnimation animationData={animationData} width={2150} height={700} />
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { CompilerAnimation };
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { BaseAnimation } from '../index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import * as animationData from './data.json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const CovAnimation: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <BaseAnimation animationData={animationData} width={1981} height={660} />
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { CovAnimation };
 | 
					 | 
				
			||||||
@@ -1,93 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import Lottie from 'react-lottie';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface AnimationProps {
 | 
					 | 
				
			||||||
    animationData: object;
 | 
					 | 
				
			||||||
    width: number;
 | 
					 | 
				
			||||||
    height: number;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface AnimationState {
 | 
					 | 
				
			||||||
    width?: number | undefined;
 | 
					 | 
				
			||||||
    height?: number | undefined;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class BaseAnimation extends React.PureComponent<AnimationProps, AnimationState> {
 | 
					 | 
				
			||||||
    public state: AnimationState = {
 | 
					 | 
				
			||||||
        height: undefined,
 | 
					 | 
				
			||||||
        width: undefined,
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    private _timeout = undefined as number;
 | 
					 | 
				
			||||||
    public componentDidMount(): void {
 | 
					 | 
				
			||||||
        this._updateAnimationSize();
 | 
					 | 
				
			||||||
        window.addEventListener('resize', this._handleResize.bind(this));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    public componentWillUnmount(): void {
 | 
					 | 
				
			||||||
        window.removeEventListener('resize', this._handleResize.bind(this));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    public render(): React.ReactNode {
 | 
					 | 
				
			||||||
        const { animationData } = this.props;
 | 
					 | 
				
			||||||
        const height = this.state.height || this.props.height;
 | 
					 | 
				
			||||||
        const width = this.state.width || this.props.width;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return (
 | 
					 | 
				
			||||||
            <Container height={height}>
 | 
					 | 
				
			||||||
                <InnerContainer>
 | 
					 | 
				
			||||||
                    <Lottie
 | 
					 | 
				
			||||||
                        width={width}
 | 
					 | 
				
			||||||
                        height={height}
 | 
					 | 
				
			||||||
                        options={{
 | 
					 | 
				
			||||||
                            loop: true,
 | 
					 | 
				
			||||||
                            autoplay: true,
 | 
					 | 
				
			||||||
                            animationData,
 | 
					 | 
				
			||||||
                        }}
 | 
					 | 
				
			||||||
                    />
 | 
					 | 
				
			||||||
                </InnerContainer>
 | 
					 | 
				
			||||||
            </Container>
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private _handleResize(): void {
 | 
					 | 
				
			||||||
        clearTimeout(this._timeout);
 | 
					 | 
				
			||||||
        this._timeout = window.setTimeout(this._updateAnimationSize.bind(this), 50);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private _updateAnimationSize(): void {
 | 
					 | 
				
			||||||
        const windowWidth = window.innerWidth;
 | 
					 | 
				
			||||||
        let width;
 | 
					 | 
				
			||||||
        let height;
 | 
					 | 
				
			||||||
        if (windowWidth <= 1000) {
 | 
					 | 
				
			||||||
            const maxWidth = windowWidth + 250;
 | 
					 | 
				
			||||||
            const ratio = maxWidth / this.props.width;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            height = Math.round(this.props.height * ratio);
 | 
					 | 
				
			||||||
            width = Math.round(this.props.width * ratio);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        this.setState({ width, height });
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Container = styled.div<AnimationProps>`
 | 
					 | 
				
			||||||
    width: 100%;
 | 
					 | 
				
			||||||
    height: ${props => props.height}px;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 40%;
 | 
					 | 
				
			||||||
    left: 0;
 | 
					 | 
				
			||||||
    z-index: -1;
 | 
					 | 
				
			||||||
    overflow: hidden;
 | 
					 | 
				
			||||||
    ${media.large`
 | 
					 | 
				
			||||||
        top: 100%;
 | 
					 | 
				
			||||||
        transform: translateY(-50%);
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const InnerContainer = styled.div`
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 0;
 | 
					 | 
				
			||||||
    left: 50%;
 | 
					 | 
				
			||||||
    transform: translateX(-50%);
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { BaseAnimation };
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { BaseAnimation } from '../index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import * as animationData from './data.json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ProfilerAnimation: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <BaseAnimation animationData={animationData} width={1985} height={657} />
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { ProfilerAnimation };
 | 
					 | 
				
			||||||
@@ -1,11 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { BaseAnimation } from '../index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import * as animationData from './data.json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const TraceAnimation: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <BaseAnimation animationData={animationData} width={2241} height={610} />
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { TraceAnimation };
 | 
					 | 
				
			||||||
@@ -1,26 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { ThemeProvider } from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Footer } from 'ts/components/footer';
 | 
					 | 
				
			||||||
import { Header } from 'ts/components/header';
 | 
					 | 
				
			||||||
import { ThemeContext } from 'ts/context';
 | 
					 | 
				
			||||||
import { GlobalStyles } from 'ts/globalStyles';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface BaseProps {
 | 
					 | 
				
			||||||
    context: any;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Base: React.StatelessComponent<BaseProps> = props => (
 | 
					 | 
				
			||||||
    <ThemeContext.Provider value={props.context}>
 | 
					 | 
				
			||||||
        <ThemeProvider theme={props.context}>
 | 
					 | 
				
			||||||
            <React.Fragment>
 | 
					 | 
				
			||||||
                <GlobalStyles colors={props.context.colors} />
 | 
					 | 
				
			||||||
                <Header />
 | 
					 | 
				
			||||||
                {props.children}
 | 
					 | 
				
			||||||
                <Footer />
 | 
					 | 
				
			||||||
            </React.Fragment>
 | 
					 | 
				
			||||||
        </ThemeProvider>
 | 
					 | 
				
			||||||
    </ThemeContext.Provider>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Base };
 | 
					 | 
				
			||||||
@@ -1,12 +0,0 @@
 | 
				
			|||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Breakout = styled.div`
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        margin-left: -2.5rem;
 | 
					 | 
				
			||||||
        width: calc(100% + 5rem);
 | 
					 | 
				
			||||||
  `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Breakout };
 | 
					 | 
				
			||||||
@@ -1,52 +0,0 @@
 | 
				
			|||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors, media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ButtonProps {
 | 
					 | 
				
			||||||
    large?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Button = styled.button<ButtonProps>`
 | 
					 | 
				
			||||||
    font-family: inherit;
 | 
					 | 
				
			||||||
    line-height: 1;
 | 
					 | 
				
			||||||
    font-weight: 500;
 | 
					 | 
				
			||||||
    white-space: nowrap;
 | 
					 | 
				
			||||||
    vertical-align: middle;
 | 
					 | 
				
			||||||
    background-color: ${props => props.theme.colors.secondary};
 | 
					 | 
				
			||||||
    color: ${colors.black};
 | 
					 | 
				
			||||||
    border: 0;
 | 
					 | 
				
			||||||
    border-radius: 5rem;
 | 
					 | 
				
			||||||
    display: inline-flex;
 | 
					 | 
				
			||||||
    justify-content: space-between;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        props.large
 | 
					 | 
				
			||||||
            ? `
 | 
					 | 
				
			||||||
      font-size: 1rem;
 | 
					 | 
				
			||||||
      padding: 1.1875rem 2.375rem 1.0625rem;
 | 
					 | 
				
			||||||
  `
 | 
					 | 
				
			||||||
            : `
 | 
					 | 
				
			||||||
      font-size: .875rem;
 | 
					 | 
				
			||||||
      padding: .5625rem 1.25rem;
 | 
					 | 
				
			||||||
  `}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    :hover, :focus {
 | 
					 | 
				
			||||||
        background-color: ${props => props.theme.colors.secondary_alt};
 | 
					 | 
				
			||||||
        outline: 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
  font-size: .875rem;
 | 
					 | 
				
			||||||
  padding: .5625rem 1.25rem;
 | 
					 | 
				
			||||||
  `}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        props.large &&
 | 
					 | 
				
			||||||
        media.small`
 | 
					 | 
				
			||||||
        font-size: 1rem;
 | 
					 | 
				
			||||||
        padding: 1rem 1.5rem .75rem;
 | 
					 | 
				
			||||||
    `}
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Button };
 | 
					 | 
				
			||||||
@@ -1,40 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface, ThemeContext } from 'ts/context';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Button } from './button';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const CallToAction: React.StatelessComponent<ContextInterface> = ({ children }) => (
 | 
					 | 
				
			||||||
    <ThemeContext.Consumer>
 | 
					 | 
				
			||||||
        {({ docLink }: ContextInterface) => (
 | 
					 | 
				
			||||||
            <StyledCallToAction>
 | 
					 | 
				
			||||||
                <CallToActionContainer>
 | 
					 | 
				
			||||||
                    <Button as="a" href={docLink} target="_blank" large={true}>
 | 
					 | 
				
			||||||
                        Read the Docs
 | 
					 | 
				
			||||||
                    </Button>
 | 
					 | 
				
			||||||
                </CallToActionContainer>
 | 
					 | 
				
			||||||
                {children}
 | 
					 | 
				
			||||||
            </StyledCallToAction>
 | 
					 | 
				
			||||||
        )}
 | 
					 | 
				
			||||||
    </ThemeContext.Consumer>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledCallToAction = styled.section`
 | 
					 | 
				
			||||||
    text-align: center;
 | 
					 | 
				
			||||||
    padding-top: 0;
 | 
					 | 
				
			||||||
    padding-bottom: 1rem;
 | 
					 | 
				
			||||||
    padding-left: 2.5rem;
 | 
					 | 
				
			||||||
    padding-right: 2.5rem;
 | 
					 | 
				
			||||||
    min-height: min-content;
 | 
					 | 
				
			||||||
    max-height: 37.5rem;
 | 
					 | 
				
			||||||
    height: 20vh;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const CallToActionContainer = styled.div`
 | 
					 | 
				
			||||||
    margin: 0 auto;
 | 
					 | 
				
			||||||
    max-width: 590px;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { CallToAction };
 | 
					 | 
				
			||||||
@@ -1,196 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Button as BaseButton } from './button';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const isTouch = Boolean(
 | 
					 | 
				
			||||||
    'ontouchstart' in window ||
 | 
					 | 
				
			||||||
        (window as any).navigator.maxTouchPoints > 0 ||
 | 
					 | 
				
			||||||
        (window as any).navigator.msMaxTouchPoints > 0,
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface CodeProps {
 | 
					 | 
				
			||||||
    language?: string;
 | 
					 | 
				
			||||||
    isLight?: boolean;
 | 
					 | 
				
			||||||
    isDiff?: boolean;
 | 
					 | 
				
			||||||
    gutter?: Array<number | undefined>;
 | 
					 | 
				
			||||||
    gutterLength?: number;
 | 
					 | 
				
			||||||
    canCopy?: boolean;
 | 
					 | 
				
			||||||
    isEtc?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface CodeState {
 | 
					 | 
				
			||||||
    hlCode?: string;
 | 
					 | 
				
			||||||
    didCopy?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Button = styled(BaseButton)`
 | 
					 | 
				
			||||||
    opacity: ${isTouch ? '1' : '0'};
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 1rem;
 | 
					 | 
				
			||||||
    right: 1rem;
 | 
					 | 
				
			||||||
    transition: opacity 0.2s;
 | 
					 | 
				
			||||||
    :focus {
 | 
					 | 
				
			||||||
        opacity: 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Container = styled.div`
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    &:hover ${Button} {
 | 
					 | 
				
			||||||
        opacity: 1;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Base = styled.div<CodeProps>`
 | 
					 | 
				
			||||||
    font-size: 0.875rem;
 | 
					 | 
				
			||||||
    color: ${props => (props.language === undefined ? colors.white : 'inherit')};
 | 
					 | 
				
			||||||
    background-color: ${props =>
 | 
					 | 
				
			||||||
        props.isLight ? 'rgba(255,255,255,.15)' : props.language === undefined ? colors.black : '#F1F4F5'};
 | 
					 | 
				
			||||||
    white-space: ${props => (props.language === undefined ? 'nowrap' : '')};
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        props.isDiff
 | 
					 | 
				
			||||||
            ? `
 | 
					 | 
				
			||||||
        background-color: #E9ECED;
 | 
					 | 
				
			||||||
        display: flex;
 | 
					 | 
				
			||||||
        padding-top: 1.5rem;
 | 
					 | 
				
			||||||
        padding-bottom: 1.5rem;
 | 
					 | 
				
			||||||
        overflow-x: auto;
 | 
					 | 
				
			||||||
        -webkit-overflow-scrolling: touch;
 | 
					 | 
				
			||||||
    `
 | 
					 | 
				
			||||||
            : ``}
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const CodeDiff: React.StatelessComponent<any> = ({ gutterLength, ...props }) => <code {...props} />;
 | 
					 | 
				
			||||||
const StyledCodeDiff = styled(CodeDiff)`
 | 
					 | 
				
			||||||
    ::before {
 | 
					 | 
				
			||||||
        content: '';
 | 
					 | 
				
			||||||
        width: calc(0.75rem + ${props => props.gutterLength}ch);
 | 
					 | 
				
			||||||
        background-color: #e2e5e6;
 | 
					 | 
				
			||||||
        position: absolute;
 | 
					 | 
				
			||||||
        top: 0;
 | 
					 | 
				
			||||||
        left: 0;
 | 
					 | 
				
			||||||
        bottom: 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    [class^='line-'] {
 | 
					 | 
				
			||||||
        display: inline-block;
 | 
					 | 
				
			||||||
        width: 100%;
 | 
					 | 
				
			||||||
        position: relative;
 | 
					 | 
				
			||||||
        padding-right: 1.5rem;
 | 
					 | 
				
			||||||
        padding-left: calc(2.25rem + ${props => props.gutterLength}ch);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ::before {
 | 
					 | 
				
			||||||
            content: attr(data-gutter);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            width: ${props => props.gutterLength};
 | 
					 | 
				
			||||||
            padding-left: 0.375rem;
 | 
					 | 
				
			||||||
            padding-right: 0.375rem;
 | 
					 | 
				
			||||||
            position: absolute;
 | 
					 | 
				
			||||||
            top: 50%;
 | 
					 | 
				
			||||||
            left: 0;
 | 
					 | 
				
			||||||
            transform: translateY(-50%);
 | 
					 | 
				
			||||||
            z-index: 1;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    .line-addition {
 | 
					 | 
				
			||||||
        background-color: rgba(0, 202, 105, 0.1);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .line-deletion {
 | 
					 | 
				
			||||||
        background-color: rgba(255, 0, 0, 0.07);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledPre = styled.pre<CodeProps>`
 | 
					 | 
				
			||||||
    margin: 0;
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        !props.isDiff
 | 
					 | 
				
			||||||
            ? `
 | 
					 | 
				
			||||||
        padding: 1.5rem;
 | 
					 | 
				
			||||||
        overflow-x: auto;
 | 
					 | 
				
			||||||
        -webkit-overflow-scrolling: touch;
 | 
					 | 
				
			||||||
    `
 | 
					 | 
				
			||||||
            : ``};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledCopyInput = styled.textarea`
 | 
					 | 
				
			||||||
    opacity: 0;
 | 
					 | 
				
			||||||
    height: 0;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 0;
 | 
					 | 
				
			||||||
    right: 0;
 | 
					 | 
				
			||||||
    z-index: -1;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class Code extends React.Component<CodeProps, CodeState> {
 | 
					 | 
				
			||||||
    public state: CodeState = {};
 | 
					 | 
				
			||||||
    private readonly _code = React.createRef<HTMLTextAreaElement>();
 | 
					 | 
				
			||||||
    public componentDidMount(): void {
 | 
					 | 
				
			||||||
        // _onMountAsync is only setting state, so no point in handling the promise
 | 
					 | 
				
			||||||
        // tslint:disable-next-line:no-floating-promises
 | 
					 | 
				
			||||||
        this._onMountAsync();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    public render(): React.ReactNode {
 | 
					 | 
				
			||||||
        const { language, isLight, isDiff, children, gutterLength, canCopy } = this.props;
 | 
					 | 
				
			||||||
        const { hlCode } = this.state;
 | 
					 | 
				
			||||||
        return (
 | 
					 | 
				
			||||||
            <Container>
 | 
					 | 
				
			||||||
                <Base language={language} isDiff={isDiff} isLight={isLight}>
 | 
					 | 
				
			||||||
                    <StyledPre isDiff={isDiff}>
 | 
					 | 
				
			||||||
                        {hlCode === undefined ? (
 | 
					 | 
				
			||||||
                            <code>{children}</code>
 | 
					 | 
				
			||||||
                        ) : (
 | 
					 | 
				
			||||||
                            <StyledCodeDiff
 | 
					 | 
				
			||||||
                                gutterLength={gutterLength}
 | 
					 | 
				
			||||||
                                dangerouslySetInnerHTML={hlCode ? { __html: this.state.hlCode } : null}
 | 
					 | 
				
			||||||
                            />
 | 
					 | 
				
			||||||
                        )}
 | 
					 | 
				
			||||||
                    </StyledPre>
 | 
					 | 
				
			||||||
                    {!('clipboard' in navigator) ? (
 | 
					 | 
				
			||||||
                        <StyledCopyInput readOnly={true} aria-hidden="true" ref={this._code} value={children} />
 | 
					 | 
				
			||||||
                    ) : null}
 | 
					 | 
				
			||||||
                </Base>
 | 
					 | 
				
			||||||
                {canCopy ? (
 | 
					 | 
				
			||||||
                    <Button onClick={this._handleCopyAsync.bind(this)}>{this.state.didCopy ? 'Copied' : 'Copy'}</Button>
 | 
					 | 
				
			||||||
                ) : null}
 | 
					 | 
				
			||||||
            </Container>
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private async _onMountAsync(): Promise<void> {
 | 
					 | 
				
			||||||
        const { language, children, isDiff, gutter, isEtc } = this.props;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const code = children as string;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (language !== undefined) {
 | 
					 | 
				
			||||||
            const { highlight } = await System.import(/* webpackChunkName: 'highlightjs' */ 'ts/highlight');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            this.setState({
 | 
					 | 
				
			||||||
                hlCode: highlight({ language, code, isDiff, gutter, isEtc }),
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    private async _handleCopyAsync(): Promise<void> {
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            if ('clipboard' in navigator) {
 | 
					 | 
				
			||||||
                await (navigator as any).clipboard.writeText(this.props.children);
 | 
					 | 
				
			||||||
                this.setState({ didCopy: true });
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                const lastActive = document.activeElement as HTMLElement;
 | 
					 | 
				
			||||||
                this._code.current.focus();
 | 
					 | 
				
			||||||
                this._code.current.select();
 | 
					 | 
				
			||||||
                document.execCommand('copy');
 | 
					 | 
				
			||||||
                lastActive.focus();
 | 
					 | 
				
			||||||
                this.setState({ didCopy: true });
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } catch (error) {
 | 
					 | 
				
			||||||
            this.setState({ didCopy: false });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Code };
 | 
					 | 
				
			||||||
@@ -1,94 +0,0 @@
 | 
				
			|||||||
import * as _ from 'lodash';
 | 
					 | 
				
			||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors, media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Breakout } from './breakout';
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
import { InlineCode } from './inline-code';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Cards = styled.dl`
 | 
					 | 
				
			||||||
    column-count: 3;
 | 
					 | 
				
			||||||
    column-gap: 1.25rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        column-count: 1;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Card = styled.div`
 | 
					 | 
				
			||||||
    background-color: ${colors.lightGray};
 | 
					 | 
				
			||||||
    padding: 3.125rem;
 | 
					 | 
				
			||||||
    padding-bottom: 2.5rem;
 | 
					 | 
				
			||||||
    display: inline-block;
 | 
					 | 
				
			||||||
    margin-bottom: 1.25rem;
 | 
					 | 
				
			||||||
    width: 100%;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        padding: 1.875rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Dt = styled.dt`
 | 
					 | 
				
			||||||
    font-weight: 500;
 | 
					 | 
				
			||||||
    display: inline;
 | 
					 | 
				
			||||||
    ::after {
 | 
					 | 
				
			||||||
        content: '. ';
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Dd = styled.dd`
 | 
					 | 
				
			||||||
    display: inline;
 | 
					 | 
				
			||||||
    margin-left: 0;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const cards = [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Project-centric',
 | 
					 | 
				
			||||||
        body: (
 | 
					 | 
				
			||||||
            <React.Fragment>
 | 
					 | 
				
			||||||
                Compiles an entire project instead of only individual <InlineCode isAlt={true}>.sol</InlineCode> files.
 | 
					 | 
				
			||||||
            </React.Fragment>
 | 
					 | 
				
			||||||
        ),
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Incremental builds',
 | 
					 | 
				
			||||||
        body: 'Only recompiles smart contracts that have been modified.',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Customizable artifacts',
 | 
					 | 
				
			||||||
        body:
 | 
					 | 
				
			||||||
            'Stores only the required compiler output in your artifacts, so you can have complete control over your bundle size.',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Seamless',
 | 
					 | 
				
			||||||
        body: 'Fetches and caches the required compiler binaries for the Solidity versions you use.',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Versioning',
 | 
					 | 
				
			||||||
        body:
 | 
					 | 
				
			||||||
            'Compiles each contract with the Solidity version specified at the top of its file (it even supports version ranges!).',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        title: 'Watch mode',
 | 
					 | 
				
			||||||
        body: 'Have your contracts instantly recompile on file save.',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Compiler: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <Container>
 | 
					 | 
				
			||||||
        <Breakout>
 | 
					 | 
				
			||||||
            <Cards>
 | 
					 | 
				
			||||||
                {_.map(cards, card => (
 | 
					 | 
				
			||||||
                    <Card key={card.title.split(' ').join('-')}>
 | 
					 | 
				
			||||||
                        <Dt>{card.title}</Dt>
 | 
					 | 
				
			||||||
                        <Dd>{card.body}</Dd>
 | 
					 | 
				
			||||||
                    </Card>
 | 
					 | 
				
			||||||
                ))}
 | 
					 | 
				
			||||||
            </Cards>
 | 
					 | 
				
			||||||
        </Breakout>
 | 
					 | 
				
			||||||
    </Container>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Compiler };
 | 
					 | 
				
			||||||
@@ -1,13 +0,0 @@
 | 
				
			|||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ContainerProps {
 | 
					 | 
				
			||||||
    wide?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Container = styled.div<ContainerProps>`
 | 
					 | 
				
			||||||
    max-width: 77.5rem;
 | 
					 | 
				
			||||||
    margin: 0 auto;
 | 
					 | 
				
			||||||
    width: ${props => (props.wide ? '100%' : 'calc(100% - 5rem)')};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Container };
 | 
					 | 
				
			||||||
@@ -1,78 +0,0 @@
 | 
				
			|||||||
import * as _ from 'lodash';
 | 
					 | 
				
			||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from 'ts/context';
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Alpha, Beta } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Base = styled.div`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    align-items: flex-start;
 | 
					 | 
				
			||||||
    justify-content: space-between;
 | 
					 | 
				
			||||||
    :not(:last-of-type) {
 | 
					 | 
				
			||||||
        margin-bottom: 6.25rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    ${Beta} {
 | 
					 | 
				
			||||||
        margin-bottom: 2.5rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
        :not(:last-of-type) {
 | 
					 | 
				
			||||||
            margin-bottom: 3.125rem;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Content = styled.div`
 | 
					 | 
				
			||||||
    width: 66.693548387%;
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        width: 100%;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Item = styled.div`
 | 
					 | 
				
			||||||
    p {
 | 
					 | 
				
			||||||
        max-width: 31.25rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    &:not(:last-of-type) {
 | 
					 | 
				
			||||||
        margin-bottom: 2.5rem;
 | 
					 | 
				
			||||||
        ${media.small`
 | 
					 | 
				
			||||||
            margin-bottom: 1.875rem;
 | 
					 | 
				
			||||||
        `};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledTitle = styled(Alpha)`
 | 
					 | 
				
			||||||
    color: ${props => props.color};
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        & + div {
 | 
					 | 
				
			||||||
            margin-top: 1.5rem;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ContentBlockProps extends ContextInterface {
 | 
					 | 
				
			||||||
    title: string;
 | 
					 | 
				
			||||||
    main?: boolean;
 | 
					 | 
				
			||||||
    children?: React.ReactNode;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ContentBlock: React.StatelessComponent<ContentBlockProps> = props => {
 | 
					 | 
				
			||||||
    const children = React.Children.map(props.children, child => {
 | 
					 | 
				
			||||||
        return <Item>{child}</Item>;
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const Title = props.main ? StyledTitle : Beta;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return (
 | 
					 | 
				
			||||||
        <Base>
 | 
					 | 
				
			||||||
            <Title color={props.colors}>{props.title}</Title>
 | 
					 | 
				
			||||||
            {children === undefined ? null : <Content>{children}</Content>}
 | 
					 | 
				
			||||||
        </Base>
 | 
					 | 
				
			||||||
    );
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { ContentBlock };
 | 
					 | 
				
			||||||
@@ -1,31 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledMain = styled.div<MainProps>`
 | 
					 | 
				
			||||||
    padding-top: 6.25rem;
 | 
					 | 
				
			||||||
    padding-bottom: 6.25rem;
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        props.dark
 | 
					 | 
				
			||||||
            ? `
 | 
					 | 
				
			||||||
        background-color: #000;
 | 
					 | 
				
			||||||
        color: #fff;
 | 
					 | 
				
			||||||
        p:not([class]) {
 | 
					 | 
				
			||||||
            color: #CCC;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `
 | 
					 | 
				
			||||||
            : ''};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface MainProps {
 | 
					 | 
				
			||||||
    dark?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Content: React.StatelessComponent<MainProps> = props => (
 | 
					 | 
				
			||||||
    <StyledMain dark={props.dark}>
 | 
					 | 
				
			||||||
        <Container>{props.children}</Container>
 | 
					 | 
				
			||||||
    </StyledMain>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Content };
 | 
					 | 
				
			||||||
@@ -1,137 +0,0 @@
 | 
				
			|||||||
import * as _ from 'lodash';
 | 
					 | 
				
			||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { context as compiler } from 'ts/context/compiler';
 | 
					 | 
				
			||||||
import { context as coverage } from 'ts/context/coverage';
 | 
					 | 
				
			||||||
import { context as profiler } from 'ts/context/profiler';
 | 
					 | 
				
			||||||
import { context as trace } from 'ts/context/trace';
 | 
					 | 
				
			||||||
import MainIcon from 'ts/icons/logos/0x.svg';
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
import { Alpha, Beta } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const tools = [trace, coverage, compiler, profiler];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Footer: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <StyledFooter>
 | 
					 | 
				
			||||||
        <Container>
 | 
					 | 
				
			||||||
            <Top>
 | 
					 | 
				
			||||||
                <Alpha>Other tools by 0x</Alpha>
 | 
					 | 
				
			||||||
                <List>
 | 
					 | 
				
			||||||
                    {_.map(tools, ({ title, subtitle, icon, name }) => (
 | 
					 | 
				
			||||||
                        <ListItem key={title}>
 | 
					 | 
				
			||||||
                            <ListLink href={`https://sol-${name}.com`}>
 | 
					 | 
				
			||||||
                                <Icon as={icon as 'svg'} />
 | 
					 | 
				
			||||||
                                <div>
 | 
					 | 
				
			||||||
                                    <Beta>{title}</Beta>
 | 
					 | 
				
			||||||
                                    <p>{subtitle}</p>
 | 
					 | 
				
			||||||
                                </div>
 | 
					 | 
				
			||||||
                            </ListLink>
 | 
					 | 
				
			||||||
                        </ListItem>
 | 
					 | 
				
			||||||
                    ))}
 | 
					 | 
				
			||||||
                </List>
 | 
					 | 
				
			||||||
            </Top>
 | 
					 | 
				
			||||||
            <Media as="aside">
 | 
					 | 
				
			||||||
                <Icon as={MainIcon} />
 | 
					 | 
				
			||||||
                <Small>
 | 
					 | 
				
			||||||
                    0x is an open, permissionless protocol allowing for tokens to be traded on the Ethereum blockchain.
 | 
					 | 
				
			||||||
                    Interested in joining our team?{' '}
 | 
					 | 
				
			||||||
                    <a href="https://0x.org/careers" target="_blank">
 | 
					 | 
				
			||||||
                        We're hiring
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                </Small>
 | 
					 | 
				
			||||||
            </Media>
 | 
					 | 
				
			||||||
        </Container>
 | 
					 | 
				
			||||||
    </StyledFooter>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledFooter = styled.footer`
 | 
					 | 
				
			||||||
    background-color: ${props => props.theme.colors.secondary};
 | 
					 | 
				
			||||||
    padding-top: 6.25rem;
 | 
					 | 
				
			||||||
    padding-bottom: 5.4375rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`padding-top: 2.5rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Top = styled.div`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    justify-content: space-between;
 | 
					 | 
				
			||||||
    margin-bottom: 9.375rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
        margin-bottom: 5.3125rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${Alpha} {
 | 
					 | 
				
			||||||
        ${media.medium`margin-bottom: 3.8125rem;`};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Icon = styled.div`
 | 
					 | 
				
			||||||
    margin-right: 1.3125rem;
 | 
					 | 
				
			||||||
    flex-shrink: 0;
 | 
					 | 
				
			||||||
    ${media.small`margin-right: 0.9375rem`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Media = styled.div`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${Icon} {
 | 
					 | 
				
			||||||
        margin-top: 0.5rem;
 | 
					 | 
				
			||||||
        align-self: flex-start;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const List = styled.ul`
 | 
					 | 
				
			||||||
    list-style: none;
 | 
					 | 
				
			||||||
    margin: 0;
 | 
					 | 
				
			||||||
    padding: 0;
 | 
					 | 
				
			||||||
    width: 66.693548387%;
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    flex-wrap: wrap;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        width: 100%;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ListItem = styled.li`
 | 
					 | 
				
			||||||
    margin-bottom: 3.3125rem;
 | 
					 | 
				
			||||||
    padding-right: 1rem;
 | 
					 | 
				
			||||||
    flex-basis: 50%;
 | 
					 | 
				
			||||||
    :nth-last-of-type(-n + 2) {
 | 
					 | 
				
			||||||
        margin-bottom: 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ${media.small`margin-bottom: 1.875rem`};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        margin-bottom: 1.875rem
 | 
					 | 
				
			||||||
        :last-of-type {
 | 
					 | 
				
			||||||
            margin-bottom: 0;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ListLink = styled.a`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
    :hover {
 | 
					 | 
				
			||||||
        color: ${props => props.theme.colors.dark};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Small = styled.small`
 | 
					 | 
				
			||||||
    font-size: 1em;
 | 
					 | 
				
			||||||
    max-width: 37.5rem;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Footer };
 | 
					 | 
				
			||||||
@@ -1,76 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface, ThemeContext } from 'ts/context';
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
import { Small } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Header: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <ThemeContext.Consumer>
 | 
					 | 
				
			||||||
        {({ icon, title }: ContextInterface) => (
 | 
					 | 
				
			||||||
            <StyledHeader>
 | 
					 | 
				
			||||||
                <Container>
 | 
					 | 
				
			||||||
                    <LogoMark>
 | 
					 | 
				
			||||||
                        <Logo as={icon as 'svg'} />
 | 
					 | 
				
			||||||
                        <Title>{title}</Title>
 | 
					 | 
				
			||||||
                    </LogoMark>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    <Link as="a" href="https://0x.org/" target="_blank">
 | 
					 | 
				
			||||||
                        Built by 0x
 | 
					 | 
				
			||||||
                    </Link>
 | 
					 | 
				
			||||||
                </Container>
 | 
					 | 
				
			||||||
            </StyledHeader>
 | 
					 | 
				
			||||||
        )}
 | 
					 | 
				
			||||||
    </ThemeContext.Consumer>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledHeader = styled.header`
 | 
					 | 
				
			||||||
    padding-top: 3.75rem;
 | 
					 | 
				
			||||||
    padding-bottom: 0.875rem;
 | 
					 | 
				
			||||||
    width: 100%;
 | 
					 | 
				
			||||||
    position: absolute;
 | 
					 | 
				
			||||||
    top: 0;
 | 
					 | 
				
			||||||
    left: 0;
 | 
					 | 
				
			||||||
    z-index: 2;
 | 
					 | 
				
			||||||
    ${Container} {
 | 
					 | 
				
			||||||
        display: flex;
 | 
					 | 
				
			||||||
        justify-content: space-between;
 | 
					 | 
				
			||||||
        align-items: center;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`padding-top: 2.125rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const LogoMark = styled.div`
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    height: 1.75rem;
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Logo = styled.div`
 | 
					 | 
				
			||||||
    color: ${props => props.theme.colors.main};
 | 
					 | 
				
			||||||
    width: 1.75rem;
 | 
					 | 
				
			||||||
    height: 100%;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Title = styled.h1`
 | 
					 | 
				
			||||||
    font-size: 1.5rem;
 | 
					 | 
				
			||||||
    line-height: 1;
 | 
					 | 
				
			||||||
    white-space: nowrap;
 | 
					 | 
				
			||||||
    margin-top: 2px;
 | 
					 | 
				
			||||||
    margin-bottom: 0;
 | 
					 | 
				
			||||||
    margin-left: 0.8125rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`font-size: 1.25rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Link = styled(Small)`
 | 
					 | 
				
			||||||
    :hover {
 | 
					 | 
				
			||||||
        text-decoration: underline;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Header };
 | 
					 | 
				
			||||||
@@ -1,63 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface, ThemeContext } from 'ts/context';
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Button } from './button';
 | 
					 | 
				
			||||||
import { Beta } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Hero: React.StatelessComponent<ContextInterface> = ({ children }) => (
 | 
					 | 
				
			||||||
    <ThemeContext.Consumer>
 | 
					 | 
				
			||||||
        {({ subtitle, tagline, docLink }: ContextInterface) => (
 | 
					 | 
				
			||||||
            <StyledHero>
 | 
					 | 
				
			||||||
                <HeroContainer>
 | 
					 | 
				
			||||||
                    <Subtitle>{subtitle}</Subtitle>
 | 
					 | 
				
			||||||
                    <Tagline as="p">{tagline}</Tagline>
 | 
					 | 
				
			||||||
                    <Button as="a" href={docLink} target="_blank" large={true}>
 | 
					 | 
				
			||||||
                        Read the Docs
 | 
					 | 
				
			||||||
                    </Button>
 | 
					 | 
				
			||||||
                </HeroContainer>
 | 
					 | 
				
			||||||
                {children}
 | 
					 | 
				
			||||||
            </StyledHero>
 | 
					 | 
				
			||||||
        )}
 | 
					 | 
				
			||||||
    </ThemeContext.Consumer>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledHero = styled.section`
 | 
					 | 
				
			||||||
    text-align: center;
 | 
					 | 
				
			||||||
    padding-top: 9.375rem;
 | 
					 | 
				
			||||||
    padding-bottom: 2rem;
 | 
					 | 
				
			||||||
    padding-left: 2.5rem;
 | 
					 | 
				
			||||||
    padding-right: 2.5rem;
 | 
					 | 
				
			||||||
    min-height: min-content;
 | 
					 | 
				
			||||||
    max-height: 37.5rem;
 | 
					 | 
				
			||||||
    height: 80vh;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const HeroContainer = styled.div`
 | 
					 | 
				
			||||||
    margin: 0 auto;
 | 
					 | 
				
			||||||
    max-width: 590px;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Subtitle = styled.h2`
 | 
					 | 
				
			||||||
    font-size: 3.75rem;
 | 
					 | 
				
			||||||
    line-height: 1.16;
 | 
					 | 
				
			||||||
    margin-bottom: 1.5rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        font-size: 2.25rem;
 | 
					 | 
				
			||||||
        line-height: 1.1;
 | 
					 | 
				
			||||||
        margin-bottom: 1.375rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Tagline = styled(Beta)`
 | 
					 | 
				
			||||||
    margin-bottom: 2rem;
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        margin-bottom: 1.25rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Hero };
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors } from '../variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface InlineCodeProps {
 | 
					 | 
				
			||||||
    isAlt?: boolean;
 | 
					 | 
				
			||||||
    children: React.ReactNode;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Code: React.StatelessComponent<InlineCodeProps> = ({ isAlt, children, ...props }) => (
 | 
					 | 
				
			||||||
    <code {...props}>{children}</code>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const InlineCode = styled(Code)`
 | 
					 | 
				
			||||||
    background-color: ${props => (props.isAlt ? '#E5E8E9' : colors.blueGray)};
 | 
					 | 
				
			||||||
    padding: 0.3125rem;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { InlineCode };
 | 
					 | 
				
			||||||
@@ -1,70 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors, media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Breakout } from './breakout';
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
import { Alpha, Lead } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Main = styled.div`
 | 
					 | 
				
			||||||
    background-color: ${colors.lightGray};
 | 
					 | 
				
			||||||
    padding: 6.25rem;
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    justify-content: space-between;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.large`
 | 
					 | 
				
			||||||
        padding: 2.5rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Title = styled(Alpha)`
 | 
					 | 
				
			||||||
    margin-bottom: 2.5rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.medium`margin-bottom: 2.25rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledIntroLead = styled(Lead)`
 | 
					 | 
				
			||||||
    max-width: 25.9375rem;
 | 
					 | 
				
			||||||
    margin-right: 2rem;
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        max-width: 100%;
 | 
					 | 
				
			||||||
        margin-bottom: 1.5625rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledIntroAside = styled.div`
 | 
					 | 
				
			||||||
    max-width: 32.5rem;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    ${media.medium`
 | 
					 | 
				
			||||||
        max-width: 100%;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface IntroLeadProps {
 | 
					 | 
				
			||||||
    title: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const IntroLead: React.StatelessComponent<IntroLeadProps> = props => (
 | 
					 | 
				
			||||||
    <StyledIntroLead as="div">
 | 
					 | 
				
			||||||
        <Title>{props.title}</Title>
 | 
					 | 
				
			||||||
        {props.children}
 | 
					 | 
				
			||||||
    </StyledIntroLead>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const IntroAside: React.StatelessComponent<{}> = props => (
 | 
					 | 
				
			||||||
    <Breakout>
 | 
					 | 
				
			||||||
        <StyledIntroAside>{props.children}</StyledIntroAside>
 | 
					 | 
				
			||||||
    </Breakout>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Intro: React.StatelessComponent<{}> = props => (
 | 
					 | 
				
			||||||
    <Container wide={true}>
 | 
					 | 
				
			||||||
        <Main>{props.children}</Main>
 | 
					 | 
				
			||||||
    </Container>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { IntroLead, IntroAside, Intro };
 | 
					 | 
				
			||||||
@@ -1,50 +0,0 @@
 | 
				
			|||||||
import * as _ from 'lodash';
 | 
					 | 
				
			||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledList = styled.ul`
 | 
					 | 
				
			||||||
    list-style-type: none;
 | 
					 | 
				
			||||||
    margin: 0;
 | 
					 | 
				
			||||||
    padding: 0;
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledItem = styled.li`
 | 
					 | 
				
			||||||
    position: relative;
 | 
					 | 
				
			||||||
    padding-left: 1.625rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    :before {
 | 
					 | 
				
			||||||
        content: '';
 | 
					 | 
				
			||||||
        border: 1px solid black;
 | 
					 | 
				
			||||||
        width: 0.625rem;
 | 
					 | 
				
			||||||
        height: 0.625rem;
 | 
					 | 
				
			||||||
        display: inline-block;
 | 
					 | 
				
			||||||
        position: absolute;
 | 
					 | 
				
			||||||
        margin-top: 2px;
 | 
					 | 
				
			||||||
        top: 0.3125rem;
 | 
					 | 
				
			||||||
        left: 0;
 | 
					 | 
				
			||||||
        transform: rotate(45deg);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    :not(:last-child) {
 | 
					 | 
				
			||||||
        margin-bottom: 0.5625rem;
 | 
					 | 
				
			||||||
        ${media.small`
 | 
					 | 
				
			||||||
            margin-bottom: 0.375rem;
 | 
					 | 
				
			||||||
        `};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ListProps {
 | 
					 | 
				
			||||||
    items?: [];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const List: React.StatelessComponent<ListProps> = props => (
 | 
					 | 
				
			||||||
    <StyledList>
 | 
					 | 
				
			||||||
        {props.children !== undefined
 | 
					 | 
				
			||||||
            ? props.children
 | 
					 | 
				
			||||||
            : _.map(props.items, (bullet, index) => <StyledItem key={index}>{bullet}</StyledItem>)}
 | 
					 | 
				
			||||||
    </StyledList>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { List, StyledItem as ListItem };
 | 
					 | 
				
			||||||
@@ -1,66 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { Tab, TabList, TabPanel, Tabs as ReactTabs } from 'react-tabs';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { colors } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Breakout } from './breakout';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledTabList = styled(TabList)`
 | 
					 | 
				
			||||||
    text-transform: uppercase;
 | 
					 | 
				
			||||||
    list-style: none;
 | 
					 | 
				
			||||||
    margin: 0;
 | 
					 | 
				
			||||||
    padding: 0;
 | 
					 | 
				
			||||||
    overflow: hidden;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledTab = styled(Tab)`
 | 
					 | 
				
			||||||
    background-color: ${props => props.theme.colors.secondary};
 | 
					 | 
				
			||||||
    height: 2.5rem;
 | 
					 | 
				
			||||||
    padding-left: 1rem;
 | 
					 | 
				
			||||||
    padding-right: 1rem;
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    justify-content: space-around;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
    float: left;
 | 
					 | 
				
			||||||
    &:not(:first-of-type) {
 | 
					 | 
				
			||||||
        margin-left: 0.25rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    &[aria-selected='true'] {
 | 
					 | 
				
			||||||
        background-color: ${colors.gray};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    &[aria-selected='false']:focus,
 | 
					 | 
				
			||||||
    &[aria-selected='false']:hover {
 | 
					 | 
				
			||||||
        background-color: ${props => props.theme.colors.secondary_alt};
 | 
					 | 
				
			||||||
        cursor: pointer;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Tabs: React.StatelessComponent<{}> = props => (
 | 
					 | 
				
			||||||
    <Breakout>
 | 
					 | 
				
			||||||
        <ReactTabs>
 | 
					 | 
				
			||||||
            <StyledTabList>
 | 
					 | 
				
			||||||
                {React.Children.map(props.children, child => {
 | 
					 | 
				
			||||||
                    const { title } = React.cloneElement(child as React.ReactElement<any>).props;
 | 
					 | 
				
			||||||
                    return <StyledTab>{title}</StyledTab>;
 | 
					 | 
				
			||||||
                })}
 | 
					 | 
				
			||||||
            </StyledTabList>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            {React.Children.map(props.children, child => (
 | 
					 | 
				
			||||||
                <TabPanel>{child}</TabPanel>
 | 
					 | 
				
			||||||
            ))}
 | 
					 | 
				
			||||||
        </ReactTabs>
 | 
					 | 
				
			||||||
    </Breakout>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface TabBlockProps {
 | 
					 | 
				
			||||||
    title: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const TabBlock: React.StatelessComponent<TabBlockProps> = props => <React.Fragment>{props.children}</React.Fragment>;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ContextTabs = Tabs;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { ContextTabs as Tabs, TabBlock };
 | 
					 | 
				
			||||||
@@ -1,213 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface, ThemeContext } from 'ts/context';
 | 
					 | 
				
			||||||
import ExactLocation from 'ts/icons/exact-location.svg';
 | 
					 | 
				
			||||||
import NoLocation from 'ts/icons/no-location.svg';
 | 
					 | 
				
			||||||
import TimeConsuming from 'ts/icons/time-consuming.svg';
 | 
					 | 
				
			||||||
import TimeSaving from 'ts/icons/time-saving.svg';
 | 
					 | 
				
			||||||
import { colors, media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Breakout } from './breakout';
 | 
					 | 
				
			||||||
import { Code } from './code';
 | 
					 | 
				
			||||||
import { Container } from './container';
 | 
					 | 
				
			||||||
import { Alpha, Gamma, Lead } from './typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Trace: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <ThemeContext.Consumer>
 | 
					 | 
				
			||||||
        {(props: ContextInterface) => (
 | 
					 | 
				
			||||||
            <StyledSection background={props.colors.secondary}>
 | 
					 | 
				
			||||||
                <Wrapper>
 | 
					 | 
				
			||||||
                    <Block>
 | 
					 | 
				
			||||||
                        <Alpha>The Issue</Alpha>
 | 
					 | 
				
			||||||
                        <MainCopy>
 | 
					 | 
				
			||||||
                            Every time an Ethereum transaction fails, it's extremely hard to trace down the
 | 
					 | 
				
			||||||
                            troublemaking line of code. The only hint you'll get is a generic error.
 | 
					 | 
				
			||||||
                        </MainCopy>
 | 
					 | 
				
			||||||
                        <Breakout>
 | 
					 | 
				
			||||||
                            <Code isLight={true}>Error: VM Exception while processing transaction: revert</Code>
 | 
					 | 
				
			||||||
                        </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        <List>
 | 
					 | 
				
			||||||
                            <Item>
 | 
					 | 
				
			||||||
                                <Copy dark={true}>
 | 
					 | 
				
			||||||
                                    <Gamma as="h3">No location</Gamma>
 | 
					 | 
				
			||||||
                                    <p>
 | 
					 | 
				
			||||||
                                        The error basically says "anything could have gone wrong here", which keeps you
 | 
					 | 
				
			||||||
                                        completely in the dark about its exact location.
 | 
					 | 
				
			||||||
                                    </p>
 | 
					 | 
				
			||||||
                                </Copy>
 | 
					 | 
				
			||||||
                                <Icon as={NoLocation} />
 | 
					 | 
				
			||||||
                            </Item>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            <Item>
 | 
					 | 
				
			||||||
                                <Copy dark={true}>
 | 
					 | 
				
			||||||
                                    <Gamma as="h3">Time-consuming</Gamma>
 | 
					 | 
				
			||||||
                                    <p>
 | 
					 | 
				
			||||||
                                        Working within a large code-base that contains many smart contracts, finding the
 | 
					 | 
				
			||||||
                                        failing line of code quickly becomes a daunting task.
 | 
					 | 
				
			||||||
                                    </p>
 | 
					 | 
				
			||||||
                                </Copy>
 | 
					 | 
				
			||||||
                                <Icon as={TimeConsuming} />
 | 
					 | 
				
			||||||
                            </Item>
 | 
					 | 
				
			||||||
                        </List>
 | 
					 | 
				
			||||||
                    </Block>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    <Block background={props.colors.secondary}>
 | 
					 | 
				
			||||||
                        <Alpha>The Fix</Alpha>
 | 
					 | 
				
			||||||
                        <MainCopy>
 | 
					 | 
				
			||||||
                            Sol-trace will give you full stack traces, including contract names, line numbers and code
 | 
					 | 
				
			||||||
                            snippets, every time you encounter an error.
 | 
					 | 
				
			||||||
                        </MainCopy>
 | 
					 | 
				
			||||||
                        <Breakout>
 | 
					 | 
				
			||||||
                            <Code isLight={true} language="javascript">
 | 
					 | 
				
			||||||
                                {`contracts/src/2.0.0/protocol/Exchange/MixinSignatureValidator.sol:51:8
 | 
					 | 
				
			||||||
    require(
 | 
					 | 
				
			||||||
        isValidSignature(
 | 
					 | 
				
			||||||
            hash,
 | 
					 | 
				
			||||||
            signerAddress,
 | 
					 | 
				
			||||||
            signature
 | 
					 | 
				
			||||||
        ),
 | 
					 | 
				
			||||||
        "INVALID_SIGNATURE"
 | 
					 | 
				
			||||||
    )`}
 | 
					 | 
				
			||||||
                            </Code>
 | 
					 | 
				
			||||||
                        </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        <List>
 | 
					 | 
				
			||||||
                            <Item>
 | 
					 | 
				
			||||||
                                <Copy>
 | 
					 | 
				
			||||||
                                    <Gamma as="h3">Exact location</Gamma>
 | 
					 | 
				
			||||||
                                    <p>
 | 
					 | 
				
			||||||
                                        It shows you the exact location of the offending line and where it was called
 | 
					 | 
				
			||||||
                                        from.
 | 
					 | 
				
			||||||
                                    </p>
 | 
					 | 
				
			||||||
                                </Copy>
 | 
					 | 
				
			||||||
                                <Icon as={ExactLocation} />
 | 
					 | 
				
			||||||
                            </Item>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            <Item>
 | 
					 | 
				
			||||||
                                <Copy>
 | 
					 | 
				
			||||||
                                    <Gamma as="h3">Time-saving</Gamma>
 | 
					 | 
				
			||||||
                                    <p>
 | 
					 | 
				
			||||||
                                        Turning "Your code failed somewhere, good luck debugging it" into "Your code
 | 
					 | 
				
			||||||
                                        failed on line X of contract Y", drastically improves the developer experience.
 | 
					 | 
				
			||||||
                                    </p>
 | 
					 | 
				
			||||||
                                </Copy>
 | 
					 | 
				
			||||||
                                <Icon as={TimeSaving} />
 | 
					 | 
				
			||||||
                            </Item>
 | 
					 | 
				
			||||||
                        </List>
 | 
					 | 
				
			||||||
                    </Block>
 | 
					 | 
				
			||||||
                </Wrapper>
 | 
					 | 
				
			||||||
            </StyledSection>
 | 
					 | 
				
			||||||
        )}
 | 
					 | 
				
			||||||
    </ThemeContext.Consumer>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface TraceProps {
 | 
					 | 
				
			||||||
    background?: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const StyledSection = styled.section<TraceProps>`
 | 
					 | 
				
			||||||
    max-width: 90rem;
 | 
					 | 
				
			||||||
    margin: 0 auto;
 | 
					 | 
				
			||||||
    background: linear-gradient(to right, ${colors.black} 50%, ${props => props.background} 50%);
 | 
					 | 
				
			||||||
    overflow: hidden;
 | 
					 | 
				
			||||||
    ${media.large`
 | 
					 | 
				
			||||||
        background: none
 | 
					 | 
				
			||||||
        padding-top: 0;
 | 
					 | 
				
			||||||
        padding-bottom: 0;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Wrapper = styled(Container)`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${Alpha} {
 | 
					 | 
				
			||||||
        padding-bottom: 2.5rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ${media.small`padding-bottom: 1.875rem;`};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.large`
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
        width: 100%;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Block = styled.div<TraceProps>`
 | 
					 | 
				
			||||||
    width: 50%;
 | 
					 | 
				
			||||||
    background: ${props => (props.background ? props.background : colors.black)};
 | 
					 | 
				
			||||||
    color: ${props => (props.background ? 'inherit' : colors.white)};
 | 
					 | 
				
			||||||
    padding-top: 6.25rem;
 | 
					 | 
				
			||||||
    padding-bottom: 5.25rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    :first-of-type {
 | 
					 | 
				
			||||||
        padding-right: 6.25rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    :last-of-type {
 | 
					 | 
				
			||||||
        padding-left: 6.25rem;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.xlarge`
 | 
					 | 
				
			||||||
        :first-of-type {
 | 
					 | 
				
			||||||
            padding-right: 2.5rem;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        :last-of-type {
 | 
					 | 
				
			||||||
            padding-left: 2.5rem;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `}
 | 
					 | 
				
			||||||
    ${media.large`
 | 
					 | 
				
			||||||
        width: 100%;
 | 
					 | 
				
			||||||
        padding: 2.5rem;
 | 
					 | 
				
			||||||
    `}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        padding-left: 1.875rem;
 | 
					 | 
				
			||||||
        padding-right: 1.875rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const MainCopy = styled(Lead)`
 | 
					 | 
				
			||||||
    margin-bottom: 3.1875rem;
 | 
					 | 
				
			||||||
    ${media.small`
 | 
					 | 
				
			||||||
        margin-bottom: 1.125rem;
 | 
					 | 
				
			||||||
    `};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const List = styled.ul`
 | 
					 | 
				
			||||||
    margin-top: 6.25rem;
 | 
					 | 
				
			||||||
    margin-bottom: 0;
 | 
					 | 
				
			||||||
    padding: 0;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`margin-top: 3.4375rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Item = styled.li`
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    align-items: center;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    :not(:last-child) {
 | 
					 | 
				
			||||||
        margin-bottom: 4.4375rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ${media.small`margin-bottom: 3.4375rem;`};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Copy = styled.div<{ dark: boolean }>`
 | 
					 | 
				
			||||||
    margin-right: 5.875rem;
 | 
					 | 
				
			||||||
    ${props =>
 | 
					 | 
				
			||||||
        props.dark &&
 | 
					 | 
				
			||||||
        `
 | 
					 | 
				
			||||||
        p {
 | 
					 | 
				
			||||||
            color: #ccc;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`margin-right: 2.0625rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Icon = styled.div`
 | 
					 | 
				
			||||||
    flex-shrink: 0;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Trace };
 | 
					 | 
				
			||||||
@@ -1,33 +0,0 @@
 | 
				
			|||||||
import styled from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { media } from '../variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Alpha = styled.h2`
 | 
					 | 
				
			||||||
    font-size: 1.75rem;
 | 
					 | 
				
			||||||
    line-height: 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`font-size: 1.5rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Beta = styled.h3`
 | 
					 | 
				
			||||||
    font-size: 1.25rem;
 | 
					 | 
				
			||||||
    line-height: 1.65;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Gamma = styled.h4`
 | 
					 | 
				
			||||||
    font-size: 1rem;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    ${media.small`font-size: 0.875rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Lead = styled.p`
 | 
					 | 
				
			||||||
    font-size: 1.25rem;
 | 
					 | 
				
			||||||
    line-height: 1.6;
 | 
					 | 
				
			||||||
    ${media.small`font-size: 1rem;`};
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Small = styled.p`
 | 
					 | 
				
			||||||
    font-size: 0.875rem;
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { Alpha, Beta, Gamma, Lead, Small };
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
import Icon from 'ts/icons/logos/compiler.svg';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from './index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const context: ContextInterface = {
 | 
					 | 
				
			||||||
    title: 'sol-compiler',
 | 
					 | 
				
			||||||
    name: 'compiler',
 | 
					 | 
				
			||||||
    docLink: 'https://0x.org/docs/sol-compiler',
 | 
					 | 
				
			||||||
    subtitle: 'Solidity compilation that just works',
 | 
					 | 
				
			||||||
    tagline: 'Seamlessly compile an entire solidity project and generate customisable artifacts',
 | 
					 | 
				
			||||||
    icon: Icon,
 | 
					 | 
				
			||||||
    colors: {
 | 
					 | 
				
			||||||
        main: '#1EADCD',
 | 
					 | 
				
			||||||
        secondary: '#D1F4FC',
 | 
					 | 
				
			||||||
        secondary_alt: '#C4F2FC',
 | 
					 | 
				
			||||||
        type: '#30C3E3',
 | 
					 | 
				
			||||||
        type_alt: '#16A9C9',
 | 
					 | 
				
			||||||
        dark: '#4B818D',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
import Icon from 'ts/icons/logos/cov.svg';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from './index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const context: ContextInterface = {
 | 
					 | 
				
			||||||
    title: 'sol-coverage',
 | 
					 | 
				
			||||||
    name: 'coverage',
 | 
					 | 
				
			||||||
    subtitle: 'Solidity code coverage',
 | 
					 | 
				
			||||||
    docLink: 'https://0x.org/docs/sol-coverage',
 | 
					 | 
				
			||||||
    tagline: 'Measure Solidity code coverage',
 | 
					 | 
				
			||||||
    icon: Icon,
 | 
					 | 
				
			||||||
    colors: {
 | 
					 | 
				
			||||||
        main: '#BB9200',
 | 
					 | 
				
			||||||
        secondary: '#F1DB8D',
 | 
					 | 
				
			||||||
        secondary_alt: '#F1D882',
 | 
					 | 
				
			||||||
        type: '#D7AE1B',
 | 
					 | 
				
			||||||
        type_alt: '#BD9406',
 | 
					 | 
				
			||||||
        dark: '#817033',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
import { createContext } from 'react';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ContextInterface {
 | 
					 | 
				
			||||||
    title?: string;
 | 
					 | 
				
			||||||
    name?: string;
 | 
					 | 
				
			||||||
    docLink?: string;
 | 
					 | 
				
			||||||
    subtitle?: string;
 | 
					 | 
				
			||||||
    tagline?: string;
 | 
					 | 
				
			||||||
    icon?: React.ReactNode;
 | 
					 | 
				
			||||||
    colors?: {
 | 
					 | 
				
			||||||
        main: string;
 | 
					 | 
				
			||||||
        secondary: string;
 | 
					 | 
				
			||||||
        secondary_alt: string;
 | 
					 | 
				
			||||||
        type: string;
 | 
					 | 
				
			||||||
        type_alt: string;
 | 
					 | 
				
			||||||
        dark: string;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const ThemeContext = createContext({});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { ThemeContext, ContextInterface };
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
import Icon from 'ts/icons/logos/profiler.svg';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from './index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const context: ContextInterface = {
 | 
					 | 
				
			||||||
    title: 'sol-profiler',
 | 
					 | 
				
			||||||
    name: 'profiler',
 | 
					 | 
				
			||||||
    docLink: 'https://0x.org/docs/sol-profiler',
 | 
					 | 
				
			||||||
    subtitle: 'Gas profiling for Solidity',
 | 
					 | 
				
			||||||
    tagline: "Implement data-guided optimizations by profiling your contract's gas usage",
 | 
					 | 
				
			||||||
    icon: Icon,
 | 
					 | 
				
			||||||
    colors: {
 | 
					 | 
				
			||||||
        main: '#FF7144',
 | 
					 | 
				
			||||||
        secondary: '#FED7CB',
 | 
					 | 
				
			||||||
        secondary_alt: '#FECEBE',
 | 
					 | 
				
			||||||
        type: '#EB8666',
 | 
					 | 
				
			||||||
        type_alt: '#D16745',
 | 
					 | 
				
			||||||
        dark: '#985C49',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,20 +0,0 @@
 | 
				
			|||||||
import Icon from 'ts/icons/logos/trace.svg';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from './index';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export const context: ContextInterface = {
 | 
					 | 
				
			||||||
    title: 'sol-trace',
 | 
					 | 
				
			||||||
    name: 'trace',
 | 
					 | 
				
			||||||
    subtitle: 'Human-readable stack traces',
 | 
					 | 
				
			||||||
    docLink: 'https://0x.org/docs/sol-trace',
 | 
					 | 
				
			||||||
    tagline: 'Immediately locate Solidity errors and rapidly debug failed transactions',
 | 
					 | 
				
			||||||
    icon: Icon,
 | 
					 | 
				
			||||||
    colors: {
 | 
					 | 
				
			||||||
        main: '#4F76FF',
 | 
					 | 
				
			||||||
        secondary: '#CDD8FF',
 | 
					 | 
				
			||||||
        secondary_alt: '#BFCDFF',
 | 
					 | 
				
			||||||
        type: '#7090FF',
 | 
					 | 
				
			||||||
        type_alt: '#355CE5',
 | 
					 | 
				
			||||||
        dark: '#2A4ABC',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -1,87 +0,0 @@
 | 
				
			|||||||
import hljsStyles from 'highlight.js/styles/github-gist.css';
 | 
					 | 
				
			||||||
import { createGlobalStyle } from 'styled-components';
 | 
					 | 
				
			||||||
import styledNormalize from 'styled-normalize';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { ContextInterface } from 'ts/context';
 | 
					 | 
				
			||||||
import { media } from 'ts/variables';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const GlobalStyles = createGlobalStyle<ContextInterface>`
 | 
					 | 
				
			||||||
    ${styledNormalize}
 | 
					 | 
				
			||||||
    ${hljsStyles}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @font-face {
 | 
					 | 
				
			||||||
        font-family: "Maison Neue";
 | 
					 | 
				
			||||||
        src: url("/fonts/MaisonNeue-Book-subset.woff2") format("woff2"), url("/fonts/MaisonNeue-Book-subset.woff") format("woff");
 | 
					 | 
				
			||||||
        font-weight: 300;
 | 
					 | 
				
			||||||
        font-display: swap;
 | 
					 | 
				
			||||||
        unicode-range: U+20-7E;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    @font-face {
 | 
					 | 
				
			||||||
        font-family: "Maison Neue";
 | 
					 | 
				
			||||||
        src: url("/fonts/MaisonNeue-Bold-subset.woff2") format("woff2"), url("/fonts/MaisonNeue-Bold-subset.woff") format("woff");
 | 
					 | 
				
			||||||
        font-weight: 500;
 | 
					 | 
				
			||||||
        font-display: swap;
 | 
					 | 
				
			||||||
        unicode-range: U+20-7E;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    @font-face {
 | 
					 | 
				
			||||||
        font-family: "Maison Neue Mono";
 | 
					 | 
				
			||||||
        src: url("/fonts/MaisonNeue-Mono-subset.woff2") format("woff2"), url("/fonts/MaisonNeue-Mono-subset.woff") format("woff");
 | 
					 | 
				
			||||||
        font-weight: 300;
 | 
					 | 
				
			||||||
        font-display: optional;
 | 
					 | 
				
			||||||
        unicode-range: U+20-7E;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    html {
 | 
					 | 
				
			||||||
        font-size: 100%;
 | 
					 | 
				
			||||||
        box-sizing: border-box;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    *, *::before, *::after {
 | 
					 | 
				
			||||||
        box-sizing: inherit;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    body {
 | 
					 | 
				
			||||||
        font-family: "Maison Neue", system-ui, sans-serif;
 | 
					 | 
				
			||||||
        font-weight: 300;
 | 
					 | 
				
			||||||
        font-size: 1rem;
 | 
					 | 
				
			||||||
        line-height: 1.8;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        ${media.small`font-size: 0.875rem;`};
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    a {
 | 
					 | 
				
			||||||
        color: inherit;
 | 
					 | 
				
			||||||
        text-decoration: none;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    a:not([class]) {
 | 
					 | 
				
			||||||
        color: ${props => props.colors.type_alt};
 | 
					 | 
				
			||||||
        text-decoration: none;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        &:hover {
 | 
					 | 
				
			||||||
            color: ${props => props.colors.type_alt};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    h1, h2, h3, h4 {
 | 
					 | 
				
			||||||
        font-weight: 500;
 | 
					 | 
				
			||||||
        margin: 0;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    p {
 | 
					 | 
				
			||||||
        margin-top: 0;
 | 
					 | 
				
			||||||
        margin-bottom: 1em;
 | 
					 | 
				
			||||||
        &:not([class]):last-of-type {
 | 
					 | 
				
			||||||
            margin-bottom: 0;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    code {
 | 
					 | 
				
			||||||
        font-family: "Maison Neue Mono", monospace;
 | 
					 | 
				
			||||||
        ${media.small`
 | 
					 | 
				
			||||||
            font-size: .75rem;
 | 
					 | 
				
			||||||
        `}
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
`;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { GlobalStyles };
 | 
					 | 
				
			||||||
							
								
								
									
										24
									
								
								packages/dev-tools-pages/ts/globals.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						@@ -1,24 +0,0 @@
 | 
				
			|||||||
declare module 'whatwg-fetch';
 | 
					 | 
				
			||||||
declare module 'react-document-title';
 | 
					 | 
				
			||||||
declare module 'highlight.js/lib/highlight';
 | 
					 | 
				
			||||||
declare module 'highlight.js/lib/languages/javascript';
 | 
					 | 
				
			||||||
declare module 'highlight.js/lib/languages/json';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare var System: any;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare module '*.json' {
 | 
					 | 
				
			||||||
    const json: any;
 | 
					 | 
				
			||||||
    /* tslint:disable */
 | 
					 | 
				
			||||||
    export default json;
 | 
					 | 
				
			||||||
    /* tslint:enable */
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare module '*.css' {
 | 
					 | 
				
			||||||
    const css: any;
 | 
					 | 
				
			||||||
    export default css;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
declare module '*.svg' {
 | 
					 | 
				
			||||||
    const svg: any;
 | 
					 | 
				
			||||||
    export default svg;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,67 +0,0 @@
 | 
				
			|||||||
import * as hljs from 'highlight.js/lib/highlight';
 | 
					 | 
				
			||||||
import * as javascript from 'highlight.js/lib/languages/javascript';
 | 
					 | 
				
			||||||
import * as json from 'highlight.js/lib/languages/json';
 | 
					 | 
				
			||||||
import * as _ from 'lodash';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
hljs.registerLanguage('javascript', javascript);
 | 
					 | 
				
			||||||
hljs.registerLanguage('json', json);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface PatchInterface {
 | 
					 | 
				
			||||||
    [key: string]: string;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const PATCH_TYPES: PatchInterface = {
 | 
					 | 
				
			||||||
    '+': 'addition',
 | 
					 | 
				
			||||||
    '-': 'deletion',
 | 
					 | 
				
			||||||
    '!': 'change',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function diffHighlight(language: string, code: any, gutter: any): string {
 | 
					 | 
				
			||||||
    return _.map(code.split(/\r?\n/g), (line: string, index: number) => {
 | 
					 | 
				
			||||||
        let type;
 | 
					 | 
				
			||||||
        let currentLine = line;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (/^-{3} [^-]+ -{4}$|^\*{3} [^*]+ \*{4}$|^@@ [^@]+ @@$/.test(currentLine)) {
 | 
					 | 
				
			||||||
            type = 'chunk';
 | 
					 | 
				
			||||||
        } else if (/^Index: |^[+\-*]{3}|^[*=]{5,}$/.test(currentLine)) {
 | 
					 | 
				
			||||||
            type = 'header';
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            type = PATCH_TYPES[currentLine[0]] || 'null';
 | 
					 | 
				
			||||||
            currentLine = currentLine.replace(/^[+\-! ]/, '');
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const g = gutter[index];
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return `<span data-gutter="${g !== undefined ? `${g}x` : ''}" class="line-${type}">${
 | 
					 | 
				
			||||||
            hljs.highlight(language, currentLine).value
 | 
					 | 
				
			||||||
        }</span>`;
 | 
					 | 
				
			||||||
    }).join('\n');
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface HighlightProps {
 | 
					 | 
				
			||||||
    language: string;
 | 
					 | 
				
			||||||
    code: string;
 | 
					 | 
				
			||||||
    isDiff?: boolean;
 | 
					 | 
				
			||||||
    gutter?: [];
 | 
					 | 
				
			||||||
    isEtc?: boolean;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
function highlight({ language, code, isDiff, gutter, isEtc }: HighlightProps): string {
 | 
					 | 
				
			||||||
    if (isDiff) {
 | 
					 | 
				
			||||||
        return diffHighlight(language, code, gutter);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const hlCode = hljs.highlight(language, code).value;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if (!isEtc) {
 | 
					 | 
				
			||||||
        return hlCode;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    const hc = hlCode.split(/\r?\n/g);
 | 
					 | 
				
			||||||
    hc.splice(1, 0, '    ...');
 | 
					 | 
				
			||||||
    hc.splice(hc.length - 1, 0, '    ...');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return hc.join('\n');
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { highlight };
 | 
					 | 
				
			||||||
@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M80 33.6772c0 5.1116-1.8855 10.4454-4.7935 15.617-2.9036 5.1637-6.7886 10.0987-10.6962 14.3941-3.9047 4.2922-7.8128 7.9248-10.746 10.4851-1.4659 1.2795-2.6866 2.2897-3.5393 2.9788-.2841.2296-.5273.4235-.725.5798-.1977-.1563-.4409-.3502-.725-.5798-.8527-.6891-2.0734-1.6993-3.5393-2.9788-2.9332-2.5603-6.8413-6.1929-10.746-10.4851-3.9076-4.2954-7.7926-9.2304-10.6962-14.3941C20.8855 44.1226 19 38.7888 19 33.6772 19 16.7294 32.6606 3 49.5 3 66.3394 3 80 16.7294 80 33.6772z" stroke="#fff" stroke-width="2"/><path d="M50 98V55M27.5 77H73" stroke="#000" stroke-width="2"/><circle cx="50" cy="34" r="10" stroke="#fff" stroke-width="2"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 746 B  | 
							
								
								
									
										1
									
								
								packages/dev-tools-pages/ts/icons/logos/0x.svg
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="37" height="37" viewBox="0 0 37 37" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M9.20465 34.4904c2.38415 1.3926 5.13725 2.2736 8.08905 2.4725 4.0871.2558 7.9188-.8242 11.1261-2.8704 1.5894-1.0232 3.0085-2.2737 4.229-3.7231-.9934-1.3926-2.0719-2.842-3.2072-4.3199-.3123-.3979-.6245-.7958-.9367-1.1937-1.1921 1.9042-2.9518 3.4389-4.9953 4.4052l-3.1789-3.0978-11.12605 8.3272zM2.44955 9.30988C1.08718 11.6972.235696 14.3971.0370167 17.3244-.218428 21.417.860116 25.2821 2.90368 28.4652c1.02177 1.5916 2.27062 3.0126 3.71814 4.2347 1.39075-.9947 2.83827-2.0747 4.31418-3.2115.3974-.3127.7947-.6253 1.1921-.9379-1.9017-1.2221-3.43434-2.9841-4.39936-5.0304l3.12206-3.1831L2.44955 9.30988zM27.7954 2.51741C25.4112 1.12481 22.6581.243776 19.7063.0448336 15.6192-.23937 11.7591.840605 8.55184 2.91529 6.96241 3.93843 5.54327 5.18893 4.32281 6.63837c.9934 1.3926 2.07194 2.84204 3.20725 4.31993.31221.3979.62442.7957.93663 1.1936 1.22046-1.9041 2.95181-3.43884 5.02371-4.40514l2.9802 2.87044 11.3248-8.09979zM34.5788 27.6126c1.334-2.3589 2.1855-5.0304 2.3842-7.9293.2554-4.0925-.8231-7.9293-2.8667-11.14077-1.0218-1.59154-2.2706-3.01256-3.7181-4.23464-1.3908.99472-2.8383 2.07469-4.3142 3.21151-.3974.31262-.7947.62525-1.1921.93787 1.9301 1.22208 3.4627 2.98413 4.4277 5.03043l.0284.0568-3.0085 3.1263 8.2593 10.9418z"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 1.3 KiB  | 
@@ -1,3 +0,0 @@
 | 
				
			|||||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 28V15V0H15H28V15V28H15H0ZM26 13V2H15V13H26ZM15 15H26V26H15V15ZM13 13V2H2V13H13ZM2 15H13V26H2V15Z" />
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 264 B  | 
							
								
								
									
										3
									
								
								packages/dev-tools-pages/ts/icons/logos/cov.svg
									
									
									
										generated
									
									
									
								
							
							
						
						@@ -1,3 +0,0 @@
 | 
				
			|||||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M0 0H28V28H0V0ZM2 2V26H26V16H12V2H2ZM14 2V14H26V2H14Z"/>
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 217 B  | 
@@ -1,3 +0,0 @@
 | 
				
			|||||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
 | 
					 | 
				
			||||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M2 2H26V9H2V2ZM2 11V26H26V11H2ZM0 0H2H26H28V2V26V28H26H2H0V26V2V0Z" />
 | 
					 | 
				
			||||||
</svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 231 B  | 
@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="28" height="28" viewBox="0 0 28 28" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M10 15H2V2h24v13H10zm0 2H2v9h8v-9zm2 9h14v-9H12v9zm-2 2H0V0h28v28H10z"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 230 B  | 
@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><path opacity=".5" d="M88.2609 41.4937c0 6.4322-2.3631 13.1253-5.9866 19.5928-3.6191 6.4597-8.4581 12.6276-13.3196 17.9909-4.8586 5.3602-9.7205 9.8958-13.3691 13.0921-1.8236 1.5975-3.3423 2.8589-4.4037 3.7198-.4285.3475-.7823.6297-1.0515.8423-.2692-.2126-.623-.4948-1.0514-.8423-1.0614-.8609-2.5802-2.1223-4.4038-3.7198-3.6486-3.1963-8.5105-7.7319-13.3691-13.0921-4.8614-5.3633-9.7004-11.5312-13.3196-17.9909C14.363 54.619 12 47.9259 12 41.4937 12 20.2255 29.0803 3 50.1304 3c21.0502 0 38.1305 17.2255 38.1305 38.4937z" stroke="#CDD8FF" stroke-width="2"/><circle opacity=".5" cx="50" cy="42" r="18" stroke="#CDD8FF" stroke-width="2"/><path d="M22.5 69.5L78 14" stroke="#fff" stroke-width="2"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 798 B  | 
@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><circle opacity=".5" cx="50" cy="50" r="42" stroke="#CDD8FF" stroke-width="2"/><path opacity=".5" d="M34.6621 79.4343c6.9918 3.5363 15.2613 4.61 23.4252 2.4225 8.1639-2.1875 14.7886-7.2521 19.0755-13.8105M33.8711 58c2.9454 5.9269 9.0615 10 16.129 10 1.5538 0 3.0617-.1969 4.5-.5671M30 25.0185C35.4784 20.6269 42.4324 18 50 18c13.4295 0 24.9268 8.2727 29.6739 20" stroke="#CDD8FF" stroke-width="2"/><path d="M35 64l17.5-12.5L37.5 9" stroke="#fff" stroke-width="2"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 569 B  | 
@@ -1 +0,0 @@
 | 
				
			|||||||
<svg width="100" height="100" viewBox="0 0 100 100" fill="none" xmlns="http://www.w3.org/2000/svg"><circle cx="49.9092" cy="49.7499" r="40.4824" transform="rotate(45 49.9092 49.7499)" stroke="#fff" stroke-width="2"/><path d="M21.5991 79.4236l8.5269-8.5269M71.3965 29.6267l8.5268-8.5268M69.6914 70.8967l8.5269 8.5269M20.5761 21.7819l9.2091 9.2091M9.01002 50.4736H21.0688M79.4334 50.4736h12.0588M49.0449 78.45v12.0588M49.0449 8.99112V22.0146" stroke="#fff" stroke-width="2"/><path d="M35.584 36.789l14.3252 14.3252 30.0146-30.0146" stroke="#000" stroke-width="2"/></svg>
 | 
					 | 
				
			||||||
| 
		 Before Width: | Height: | Size: 568 B  | 
@@ -1,182 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { hydrate, render } from 'react-dom';
 | 
					 | 
				
			||||||
import * as Loadable from 'react-loadable';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { context } from 'ts/context/compiler';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Base } from 'ts/components/base';
 | 
					 | 
				
			||||||
import { Breakout } from 'ts/components/breakout';
 | 
					 | 
				
			||||||
import { CallToAction } from 'ts/components/call_to_action';
 | 
					 | 
				
			||||||
import { Code } from 'ts/components/code';
 | 
					 | 
				
			||||||
import { Compiler as CompilerComponent } from 'ts/components/compiler';
 | 
					 | 
				
			||||||
import { Content } from 'ts/components/content';
 | 
					 | 
				
			||||||
import { ContentBlock } from 'ts/components/content-block';
 | 
					 | 
				
			||||||
import { Hero } from 'ts/components/hero';
 | 
					 | 
				
			||||||
import { InlineCode } from 'ts/components/inline-code';
 | 
					 | 
				
			||||||
import { Lead } from 'ts/components/typography';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Animation = Loadable({
 | 
					 | 
				
			||||||
    loader: () => System.import(/* webpackChunkName: 'compiler-animation' */ 'ts/components/animations/compiler'),
 | 
					 | 
				
			||||||
    loading: () => <div />,
 | 
					 | 
				
			||||||
    delay: 1000,
 | 
					 | 
				
			||||||
    render(loadable: { CompilerAnimation: any }): React.ReactNode {
 | 
					 | 
				
			||||||
        const Component = loadable.CompilerAnimation;
 | 
					 | 
				
			||||||
        return <Component />;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const SOLIDITY_INPUT_FORMAT_DOCS =
 | 
					 | 
				
			||||||
    'https://solidity.readthedocs.io/en/v0.4.24/using-the-compiler.html#compiler-input-and-output-json-description';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Compiler: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <Base context={context}>
 | 
					 | 
				
			||||||
        <Hero>
 | 
					 | 
				
			||||||
            <Animation />
 | 
					 | 
				
			||||||
        </Hero>
 | 
					 | 
				
			||||||
        <CompilerComponent />
 | 
					 | 
				
			||||||
        <Content>
 | 
					 | 
				
			||||||
            <ContentBlock main={true} title="Get started" />
 | 
					 | 
				
			||||||
            <ContentBlock title="Install">
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>npm install @0x/sol-compiler --g</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <ContentBlock title="Run">
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>cd /your_project_dir && sol-compiler</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <ContentBlock title="Configure">
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Configure via a <InlineCode>compiler.json</InlineCode> file.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>mkdir compiler.json</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
                <p>Example of settings:</p>
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code language="json" canCopy={true}>
 | 
					 | 
				
			||||||
                        {`{
 | 
					 | 
				
			||||||
    "contractsDir": "contracts",
 | 
					 | 
				
			||||||
    "artifactsDir": "artifacts",
 | 
					 | 
				
			||||||
    "contracts": "*",
 | 
					 | 
				
			||||||
    "compilerSettings": {
 | 
					 | 
				
			||||||
        "optimizer": { "enabled": false },
 | 
					 | 
				
			||||||
        "outputSelection": {
 | 
					 | 
				
			||||||
            "*": {
 | 
					 | 
				
			||||||
                "*": ["abi", "evm.bytecode.object"]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
        </Content>
 | 
					 | 
				
			||||||
        <Content dark={true}>
 | 
					 | 
				
			||||||
            <ContentBlock main={true} title="Artifacts">
 | 
					 | 
				
			||||||
                <Lead>
 | 
					 | 
				
			||||||
                    Sol compiler uses{' '}
 | 
					 | 
				
			||||||
                    <a href={SOLIDITY_INPUT_FORMAT_DOCS} target="_blank">
 | 
					 | 
				
			||||||
                        Solidity standard JSON input format
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    to specify what to include in the generated artifacts. This way, you have complete flexibility on
 | 
					 | 
				
			||||||
                    what is included.
 | 
					 | 
				
			||||||
                </Lead>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            <ContentBlock title="Production">
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    In production, you want to optimize for a small bundle size, so your compiler.json config would
 | 
					 | 
				
			||||||
                    instruct sol-compiler to only output the contract ABI.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code isLight={true} language="json" isEtc={true}>
 | 
					 | 
				
			||||||
                        {`{
 | 
					 | 
				
			||||||
    "compilerSettings": {
 | 
					 | 
				
			||||||
        "outputSelection": {
 | 
					 | 
				
			||||||
            "*": {
 | 
					 | 
				
			||||||
                "*": ["abi"]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code isLight={true} language="json" isEtc={true}>
 | 
					 | 
				
			||||||
                        {`{
 | 
					 | 
				
			||||||
    "compilerOutput": {
 | 
					 | 
				
			||||||
        "abi": [...],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
            <ContentBlock title="Development">
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    In development, you need to use profiler and other dev tools that require more information from the
 | 
					 | 
				
			||||||
                    artifact. To do this, you can specify that the artifact also contain the bytecode, deployed bytecode
 | 
					 | 
				
			||||||
                    and source maps.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code isLight={true} language="json" isEtc={true}>
 | 
					 | 
				
			||||||
                        {`{
 | 
					 | 
				
			||||||
    "compilerSettings": {
 | 
					 | 
				
			||||||
        "outputSelection": {
 | 
					 | 
				
			||||||
            "*": {
 | 
					 | 
				
			||||||
                "*": [
 | 
					 | 
				
			||||||
                    "abi",
 | 
					 | 
				
			||||||
                    "evm.bytecode.object",
 | 
					 | 
				
			||||||
                    "evm.bytecode.sourceMap",
 | 
					 | 
				
			||||||
                    "evm.deployedBytecode.object",
 | 
					 | 
				
			||||||
                    "evm.deployedBytecode.sourceMap"
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code isLight={true} language="json" isEtc={true}>
 | 
					 | 
				
			||||||
                        {`{
 | 
					 | 
				
			||||||
    "compilerOutput": {
 | 
					 | 
				
			||||||
        "abi": [...],
 | 
					 | 
				
			||||||
        "evm": {
 | 
					 | 
				
			||||||
            "bytecode": {
 | 
					 | 
				
			||||||
                "object": "0xdeadbeef",
 | 
					 | 
				
			||||||
                "sourceMap": "26:480:..."
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "deployedBytecode": {
 | 
					 | 
				
			||||||
                "object": "0xdeadbeef",
 | 
					 | 
				
			||||||
                "sourceMap": "26:480:0..."
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    "sources": {
 | 
					 | 
				
			||||||
        "Migrations.sol": {
 | 
					 | 
				
			||||||
            "id": 0
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
        </Content>
 | 
					 | 
				
			||||||
        <div style={{ paddingTop: '5rem' }}>
 | 
					 | 
				
			||||||
            <CallToAction />
 | 
					 | 
				
			||||||
        </div>
 | 
					 | 
				
			||||||
    </Base>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const root = document.getElementById('app');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (root.hasChildNodes()) {
 | 
					 | 
				
			||||||
    hydrate(<Compiler />, root);
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    render(<Compiler />, root);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,172 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { hydrate, render } from 'react-dom';
 | 
					 | 
				
			||||||
import * as Loadable from 'react-loadable';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { context } from 'ts/context/coverage';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Base } from 'ts/components/base';
 | 
					 | 
				
			||||||
import { Breakout } from 'ts/components/breakout';
 | 
					 | 
				
			||||||
import { CallToAction } from 'ts/components/call_to_action';
 | 
					 | 
				
			||||||
import { Code } from 'ts/components/code';
 | 
					 | 
				
			||||||
import { Content } from 'ts/components/content';
 | 
					 | 
				
			||||||
import { ContentBlock } from 'ts/components/content-block';
 | 
					 | 
				
			||||||
import { Hero } from 'ts/components/hero';
 | 
					 | 
				
			||||||
import { InlineCode } from 'ts/components/inline-code';
 | 
					 | 
				
			||||||
import { Intro, IntroAside, IntroLead } from 'ts/components/intro';
 | 
					 | 
				
			||||||
import { List, ListItem } from 'ts/components/list';
 | 
					 | 
				
			||||||
import { TabBlock, Tabs } from 'ts/components/tabs';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Animation = Loadable({
 | 
					 | 
				
			||||||
    loader: () => System.import(/* webpackChunkName: 'cov-animation' */ 'ts/components/animations/cov'),
 | 
					 | 
				
			||||||
    loading: () => <div />,
 | 
					 | 
				
			||||||
    delay: 1000,
 | 
					 | 
				
			||||||
    render(loadable: { CovAnimation: any }): React.ReactNode {
 | 
					 | 
				
			||||||
        const Component = loadable.CovAnimation;
 | 
					 | 
				
			||||||
        return <Component />;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Coverage: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <Base context={context}>
 | 
					 | 
				
			||||||
        <Hero>
 | 
					 | 
				
			||||||
            <Animation />
 | 
					 | 
				
			||||||
        </Hero>
 | 
					 | 
				
			||||||
        <Intro>
 | 
					 | 
				
			||||||
            <IntroLead title="Measure your tests">
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    When it comes to writing secure smart contracts, testing is one of the most important steps in the
 | 
					 | 
				
			||||||
                    process. In order to quantify the robustness of your Solidity testing suite, you need to measure its
 | 
					 | 
				
			||||||
                    code coverage.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
            </IntroLead>
 | 
					 | 
				
			||||||
            <IntroAside>
 | 
					 | 
				
			||||||
                <Code
 | 
					 | 
				
			||||||
                    language="javascript"
 | 
					 | 
				
			||||||
                    isDiff={true}
 | 
					 | 
				
			||||||
                    gutterLength={2}
 | 
					 | 
				
			||||||
                    gutter={[4, undefined, 4, 4, 4, undefined, 4, 2, 2, 2]}
 | 
					 | 
				
			||||||
                >
 | 
					 | 
				
			||||||
                    {`+function executeTransaction(uint transactionId)
 | 
					 | 
				
			||||||
     public
 | 
					 | 
				
			||||||
+    notExecuted(transactionId)
 | 
					 | 
				
			||||||
+    fullyConfirmed(transactionId)
 | 
					 | 
				
			||||||
+    pastTimeLock(transactionId)
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
+    Transaction storage tx = transactions[transactionId]
 | 
					 | 
				
			||||||
+    tx.executed = true
 | 
					 | 
				
			||||||
+    if (tx.destination.call.value(tx.value)(tx.data))
 | 
					 | 
				
			||||||
+        Execution(transactionId)
 | 
					 | 
				
			||||||
     else {
 | 
					 | 
				
			||||||
-        ExecutionFailure(transactionId)
 | 
					 | 
				
			||||||
-        tx.executed = false
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                </Code>
 | 
					 | 
				
			||||||
            </IntroAside>
 | 
					 | 
				
			||||||
        </Intro>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        <Content>
 | 
					 | 
				
			||||||
            <ContentBlock main={true} title="Get started" />
 | 
					 | 
				
			||||||
            <ContentBlock title="Prerequisites">
 | 
					 | 
				
			||||||
                <List>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/trufflesuite/ganache-cli" target="_blank">
 | 
					 | 
				
			||||||
                            Ganache
 | 
					 | 
				
			||||||
                        </a>{' '}
 | 
					 | 
				
			||||||
                        as a backing node.
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Understand and use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                            web3-provider-engine
 | 
					 | 
				
			||||||
                        </a>
 | 
					 | 
				
			||||||
                        .
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                </List>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
            <ContentBlock title="Installation">
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>npm install @0x/sol-coverage --save</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Sol-coverage is a subprovider that needs to be prepended to your{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                        provider engine
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                    . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-coverage
 | 
					 | 
				
			||||||
                    ships with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
 | 
					 | 
				
			||||||
                    <a href="https://sol-compiler.com" target="_blank">
 | 
					 | 
				
			||||||
                        Sol-compiler
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
 | 
					 | 
				
			||||||
                    <a href="https://truffleframework.com/truffle" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle framework
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    (Also see our{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle example project
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    for a complete walk-through). You can also write your own and support any artifact format.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Tabs>
 | 
					 | 
				
			||||||
                    <TabBlock title="Sol-compiler">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { SolCompilerArtifactAdapter } 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);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Truffle">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { TruffleArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const projectRoot = '.';
 | 
					 | 
				
			||||||
const solcVersion = '0.5.0';
 | 
					 | 
				
			||||||
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Custom">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { AbstractArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
 | 
					 | 
				
			||||||
const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                </Tabs>
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
 | 
					 | 
				
			||||||
                    <InlineCode>CoverageSubprovider</InlineCode> and append it to our provider engine.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                        {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
 | 
					 | 
				
			||||||
import { CoverageSubprovider } from '@0x/sol-coverage';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const defaultFromAddress = "..."; // Some ethereum address with test funds
 | 
					 | 
				
			||||||
const coverageSubprovider = new CoverageSubprovider(artifactAdapter, defaultFromAddress);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const providerEngine = new ProviderEngine();
 | 
					 | 
				
			||||||
providerEngine.addProvider(coverageSubprovider);
 | 
					 | 
				
			||||||
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
 | 
					 | 
				
			||||||
providerEngine.start();`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
        </Content>
 | 
					 | 
				
			||||||
        <CallToAction />
 | 
					 | 
				
			||||||
    </Base>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const root = document.getElementById('app');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (root.hasChildNodes()) {
 | 
					 | 
				
			||||||
    hydrate(<Coverage />, root);
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    render(<Coverage />, root);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,169 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { hydrate, render } from 'react-dom';
 | 
					 | 
				
			||||||
import * as Loadable from 'react-loadable';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { context } from 'ts/context/profiler';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Base } from 'ts/components/base';
 | 
					 | 
				
			||||||
import { Breakout } from 'ts/components/breakout';
 | 
					 | 
				
			||||||
import { CallToAction } from 'ts/components/call_to_action';
 | 
					 | 
				
			||||||
import { Code } from 'ts/components/code';
 | 
					 | 
				
			||||||
import { Content } from 'ts/components/content';
 | 
					 | 
				
			||||||
import { ContentBlock } from 'ts/components/content-block';
 | 
					 | 
				
			||||||
import { Hero } from 'ts/components/hero';
 | 
					 | 
				
			||||||
import { InlineCode } from 'ts/components/inline-code';
 | 
					 | 
				
			||||||
import { Intro, IntroAside, IntroLead } from 'ts/components/intro';
 | 
					 | 
				
			||||||
import { List, ListItem } from 'ts/components/list';
 | 
					 | 
				
			||||||
import { TabBlock, Tabs } from 'ts/components/tabs';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Animation = Loadable({
 | 
					 | 
				
			||||||
    loader: () => System.import(/* webpackChunkName: 'profiler-animation' */ 'ts/components/animations/profiler'),
 | 
					 | 
				
			||||||
    loading: () => <div />,
 | 
					 | 
				
			||||||
    delay: 1000,
 | 
					 | 
				
			||||||
    render(loadable: { ProfilerAnimation: any }): React.ReactNode {
 | 
					 | 
				
			||||||
        const Component = loadable.ProfilerAnimation;
 | 
					 | 
				
			||||||
        return <Component />;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Profiler: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <Base context={context}>
 | 
					 | 
				
			||||||
        <Hero>
 | 
					 | 
				
			||||||
            <Animation />
 | 
					 | 
				
			||||||
        </Hero>
 | 
					 | 
				
			||||||
        <Intro>
 | 
					 | 
				
			||||||
            <IntroLead title="Outline gas usage">
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Sol-profiler gathers line-by-line gas usage for any transaction submitted through your provider.
 | 
					 | 
				
			||||||
                    This will help you find unexpected inefficiencies in parts of your smart contract, and take a
 | 
					 | 
				
			||||||
                    data-driven approach to optimizing it.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
            </IntroLead>
 | 
					 | 
				
			||||||
            <IntroAside>
 | 
					 | 
				
			||||||
                <Code
 | 
					 | 
				
			||||||
                    language="javascript"
 | 
					 | 
				
			||||||
                    isDiff={true}
 | 
					 | 
				
			||||||
                    gutterLength={6}
 | 
					 | 
				
			||||||
                    gutter={[15, 15, undefined, 21747, 20303, 1435]}
 | 
					 | 
				
			||||||
                >
 | 
					 | 
				
			||||||
                    {`+function() public payable {
 | 
					 | 
				
			||||||
+    deposit();
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
+function deposit() public payabble {
 | 
					 | 
				
			||||||
+    balanceOf[msg.sender] += msg.value;
 | 
					 | 
				
			||||||
+    Deposit(msg.sender, msg.value);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
-function withdraw(uint wad) public {
 | 
					 | 
				
			||||||
-    require(balanceOf[msg.sender] >= wad);
 | 
					 | 
				
			||||||
-    balanceOf[msg.sender] -= wad;
 | 
					 | 
				
			||||||
-    msg.sender.transfer(wad);
 | 
					 | 
				
			||||||
-    Withdrawal(msg.sender, wad);
 | 
					 | 
				
			||||||
}`}
 | 
					 | 
				
			||||||
                </Code>
 | 
					 | 
				
			||||||
            </IntroAside>
 | 
					 | 
				
			||||||
        </Intro>
 | 
					 | 
				
			||||||
        <Content>
 | 
					 | 
				
			||||||
            <ContentBlock main={true} title="Get started" />
 | 
					 | 
				
			||||||
            <ContentBlock title="Prerequisites">
 | 
					 | 
				
			||||||
                <List>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/trufflesuite/ganache-cli" target="_blank">
 | 
					 | 
				
			||||||
                            Ganache
 | 
					 | 
				
			||||||
                        </a>{' '}
 | 
					 | 
				
			||||||
                        as a backing node.
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Understand and use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                            web3-provider-engine
 | 
					 | 
				
			||||||
                        </a>
 | 
					 | 
				
			||||||
                        .
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                </List>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
            <ContentBlock title="Installation">
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>npm install @0x/sol-trace --save</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Sol-trace is a subprovider that needs to be prepended to your{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                        provider engine
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                    . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
 | 
					 | 
				
			||||||
                    with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
 | 
					 | 
				
			||||||
                    <a href="https://sol-compiler.com" target="_blank">
 | 
					 | 
				
			||||||
                        Sol-compiler
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
 | 
					 | 
				
			||||||
                    <a href="https://truffleframework.com/truffle" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle framework
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    (Also see our{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle example project
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    for a complete walk-through). You can also write your own and support any artifact format.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Tabs>
 | 
					 | 
				
			||||||
                    <TabBlock title="Sol-compiler">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { SolCompilerArtifactAdapter } 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);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Truffle">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { TruffleArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const projectRoot = '.';
 | 
					 | 
				
			||||||
const solcVersion = '0.5.0';
 | 
					 | 
				
			||||||
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Custom">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { AbstractArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
 | 
					 | 
				
			||||||
const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                </Tabs>
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
 | 
					 | 
				
			||||||
                    <InlineCode>ProfilerSubprovider</InlineCode> and append it to our provider engine.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                        {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
 | 
					 | 
				
			||||||
import { ProfilerSubprovider } from '@0x/sol-profiler';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const defaultFromAddress = "..."; // Some ethereum address with test funds
 | 
					 | 
				
			||||||
const profilerSubprovider = new ProfilerSubprovider(artifactAdapter, defaultFromAddress);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const providerEngine = new ProviderEngine();
 | 
					 | 
				
			||||||
providerEngine.addProvider(profilerSubprovider);
 | 
					 | 
				
			||||||
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
 | 
					 | 
				
			||||||
providerEngine.start();`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
        </Content>
 | 
					 | 
				
			||||||
        <CallToAction />
 | 
					 | 
				
			||||||
    </Base>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const root = document.getElementById('app');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (root.hasChildNodes()) {
 | 
					 | 
				
			||||||
    hydrate(<Profiler />, root);
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    render(<Profiler />, root);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,140 +0,0 @@
 | 
				
			|||||||
import * as React from 'react';
 | 
					 | 
				
			||||||
import { hydrate, render } from 'react-dom';
 | 
					 | 
				
			||||||
import * as Loadable from 'react-loadable';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { context } from 'ts/context/trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import { Base } from 'ts/components/base';
 | 
					 | 
				
			||||||
import { Breakout } from 'ts/components/breakout';
 | 
					 | 
				
			||||||
import { CallToAction } from 'ts/components/call_to_action';
 | 
					 | 
				
			||||||
import { Code } from 'ts/components/code';
 | 
					 | 
				
			||||||
import { Content } from 'ts/components/content';
 | 
					 | 
				
			||||||
import { ContentBlock } from 'ts/components/content-block';
 | 
					 | 
				
			||||||
import { Hero } from 'ts/components/hero';
 | 
					 | 
				
			||||||
import { InlineCode } from 'ts/components/inline-code';
 | 
					 | 
				
			||||||
import { List, ListItem } from 'ts/components/list';
 | 
					 | 
				
			||||||
import { TabBlock, Tabs } from 'ts/components/tabs';
 | 
					 | 
				
			||||||
import { Trace as TraceComponent } from 'ts/components/trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Animation = Loadable({
 | 
					 | 
				
			||||||
    loader: () => System.import(/* webpackChunkName: 'trace-animation' */ 'ts/components/animations/trace'),
 | 
					 | 
				
			||||||
    loading: () => <div />,
 | 
					 | 
				
			||||||
    delay: 1000,
 | 
					 | 
				
			||||||
    render(loadable: { TraceAnimation: any }): React.ReactNode {
 | 
					 | 
				
			||||||
        const Component = loadable.TraceAnimation;
 | 
					 | 
				
			||||||
        return <Component />;
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const Trace: React.StatelessComponent<{}> = () => (
 | 
					 | 
				
			||||||
    <Base context={context}>
 | 
					 | 
				
			||||||
        <Hero>
 | 
					 | 
				
			||||||
            <Animation />
 | 
					 | 
				
			||||||
        </Hero>
 | 
					 | 
				
			||||||
        <TraceComponent />
 | 
					 | 
				
			||||||
        <Content>
 | 
					 | 
				
			||||||
            <ContentBlock main={true} title="Get started" />
 | 
					 | 
				
			||||||
            <ContentBlock title="Prerequisites">
 | 
					 | 
				
			||||||
                <List>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/trufflesuite/ganache-cli" target="_blank">
 | 
					 | 
				
			||||||
                            Ganache
 | 
					 | 
				
			||||||
                        </a>{' '}
 | 
					 | 
				
			||||||
                        as a backing node.
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                    <ListItem>
 | 
					 | 
				
			||||||
                        Understand and use{' '}
 | 
					 | 
				
			||||||
                        <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                            web3-provider-engine
 | 
					 | 
				
			||||||
                        </a>
 | 
					 | 
				
			||||||
                        .
 | 
					 | 
				
			||||||
                    </ListItem>
 | 
					 | 
				
			||||||
                </List>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
            <ContentBlock title="Installation">
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code canCopy={true}>npm install @0x/sol-trace --save</Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Sol-trace is a subprovider that needs to be prepended to your{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/MetaMask/provider-engine" target="_blank">
 | 
					 | 
				
			||||||
                        provider engine
 | 
					 | 
				
			||||||
                    </a>
 | 
					 | 
				
			||||||
                    . Depending on your project setup, you will need to use a specific ArtifactAdapter. Sol-trace ships
 | 
					 | 
				
			||||||
                    with the <InlineCode>SolCompilerArtifactAdapter</InlineCode> for use with{' '}
 | 
					 | 
				
			||||||
                    <a href="https://sol-compiler.com" target="_blank">
 | 
					 | 
				
			||||||
                        Sol-compiler
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    and <InlineCode>TruffleArtifactAdapter</InlineCode> for use with the{' '}
 | 
					 | 
				
			||||||
                    <a href="https://truffleframework.com/truffle" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle framework
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    (Also see our{' '}
 | 
					 | 
				
			||||||
                    <a href="https://github.com/0xProject/dev-tools-truffle-example" target="_blank">
 | 
					 | 
				
			||||||
                        Truffle example project
 | 
					 | 
				
			||||||
                    </a>{' '}
 | 
					 | 
				
			||||||
                    for a complete walk-through). You can also write your own and support any artifact format.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Tabs>
 | 
					 | 
				
			||||||
                    <TabBlock title="Sol-compiler">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { SolCompilerArtifactAdapter } 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);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Truffle">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { TruffleArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const projectRoot = '.';
 | 
					 | 
				
			||||||
const solcVersion = '0.5.0';
 | 
					 | 
				
			||||||
const artifactAdapter = new TruffleArtifactAdapter(projectRoot, solcVersion);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                    <TabBlock title="Custom">
 | 
					 | 
				
			||||||
                        <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                            {`import { AbstractArtifactAdapter } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class YourCustomArtifactsAdapter extends AbstractArtifactAdapter {...};
 | 
					 | 
				
			||||||
const artifactAdapter = new YourCustomArtifactsAdapter(...);`}
 | 
					 | 
				
			||||||
                        </Code>
 | 
					 | 
				
			||||||
                    </TabBlock>
 | 
					 | 
				
			||||||
                </Tabs>
 | 
					 | 
				
			||||||
                <p>
 | 
					 | 
				
			||||||
                    Now that we have an <InlineCode>artifactAdapter</InlineCode>, we can create a{' '}
 | 
					 | 
				
			||||||
                    <InlineCode>revertTraceSubprovider</InlineCode> and append it to our provider engine.
 | 
					 | 
				
			||||||
                </p>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                <Breakout>
 | 
					 | 
				
			||||||
                    <Code language="javascript" canCopy={true}>
 | 
					 | 
				
			||||||
                        {`import { ProviderEngine, RpcSubprovider } from 'web3-provider-engine';
 | 
					 | 
				
			||||||
import { RevertTraceSubprovider } from '@0x/sol-trace';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const defaultFromAddress = "..."; // Some ethereum address with test funds
 | 
					 | 
				
			||||||
const revertTraceSubprovider = new RevertTraceSubprovider(artifactAdapter, defaultFromAddress);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const providerEngine = new ProviderEngine();
 | 
					 | 
				
			||||||
providerEngine.addProvider(revertTraceSubprovider);
 | 
					 | 
				
			||||||
providerEngine.addProvider(new RpcSubprovider({rpcUrl: 'http://localhost:8545'}));
 | 
					 | 
				
			||||||
providerEngine.start();`}
 | 
					 | 
				
			||||||
                    </Code>
 | 
					 | 
				
			||||||
                </Breakout>
 | 
					 | 
				
			||||||
                <p>Stack traces will now be printed whenever your contracts revert!</p>
 | 
					 | 
				
			||||||
            </ContentBlock>
 | 
					 | 
				
			||||||
        </Content>
 | 
					 | 
				
			||||||
        <CallToAction />
 | 
					 | 
				
			||||||
    </Base>
 | 
					 | 
				
			||||||
);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const root = document.getElementById('app');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if (root.hasChildNodes()) {
 | 
					 | 
				
			||||||
    hydrate(<Trace />, root);
 | 
					 | 
				
			||||||
} else {
 | 
					 | 
				
			||||||
    render(<Trace />, root);
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,34 +0,0 @@
 | 
				
			|||||||
import { css } from 'styled-components';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const colors = {
 | 
					 | 
				
			||||||
    black: '#000000',
 | 
					 | 
				
			||||||
    white: '#FFFFFF',
 | 
					 | 
				
			||||||
    lightGray: '#F1F4F5',
 | 
					 | 
				
			||||||
    gray: '#F1F2F7',
 | 
					 | 
				
			||||||
    darkGray: '#E9ECED',
 | 
					 | 
				
			||||||
    darkestGray: '#E2E5E6',
 | 
					 | 
				
			||||||
    blueGray: '#ECEFF9',
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface SizesInterface {
 | 
					 | 
				
			||||||
    [key: string]: number;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const sizes: SizesInterface = {
 | 
					 | 
				
			||||||
    xlarge: 1420,
 | 
					 | 
				
			||||||
    large: 1000,
 | 
					 | 
				
			||||||
    medium: 900,
 | 
					 | 
				
			||||||
    small: 650,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const media = Object.keys(sizes).reduce((acc: any, label: string) => {
 | 
					 | 
				
			||||||
    acc[label] = (args: any) => css`
 | 
					 | 
				
			||||||
        @media (max-width: ${sizes[label] / 16}em) {
 | 
					 | 
				
			||||||
            ${css(args)};
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    `;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return acc;
 | 
					 | 
				
			||||||
}, {});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
export { colors, media };
 | 
					 | 
				
			||||||
@@ -1,22 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "extends": "../../tsconfig",
 | 
					 | 
				
			||||||
    "compilerOptions": {
 | 
					 | 
				
			||||||
        "allowSyntheticDefaultImports": true,
 | 
					 | 
				
			||||||
        "outDir": "./transpiled/",
 | 
					 | 
				
			||||||
        "jsx": "react",
 | 
					 | 
				
			||||||
        "baseUrl": "./",
 | 
					 | 
				
			||||||
        "allowJs": true,
 | 
					 | 
				
			||||||
        "strictNullChecks": false,
 | 
					 | 
				
			||||||
        "noImplicitThis": false,
 | 
					 | 
				
			||||||
        // tsconfig.json at the monorepo root contains some options required for
 | 
					 | 
				
			||||||
        // project references which do not work for website. We override those
 | 
					 | 
				
			||||||
        // options here.
 | 
					 | 
				
			||||||
        "declaration": false,
 | 
					 | 
				
			||||||
        "declarationMap": false,
 | 
					 | 
				
			||||||
        "composite": false,
 | 
					 | 
				
			||||||
        "paths": {
 | 
					 | 
				
			||||||
            "*": ["node_modules/@types/*", "*"]
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "include": ["./ts/**/*"]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,10 +0,0 @@
 | 
				
			|||||||
{
 | 
					 | 
				
			||||||
    "extends": ["@0x/tslint-config"],
 | 
					 | 
				
			||||||
    "rules": {
 | 
					 | 
				
			||||||
        "no-implicit-dependencies": false,
 | 
					 | 
				
			||||||
        "no-object-literal-type-assertion": false,
 | 
					 | 
				
			||||||
        "completed-docs": false,
 | 
					 | 
				
			||||||
        "prefer-function-over-method": false,
 | 
					 | 
				
			||||||
        "custom-no-magic-numbers": false
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@@ -1,118 +0,0 @@
 | 
				
			|||||||
const path = require('path');
 | 
					 | 
				
			||||||
const webpack = require('webpack');
 | 
					 | 
				
			||||||
const TerserPlugin = require('terser-webpack-plugin');
 | 
					 | 
				
			||||||
const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
 | 
					 | 
				
			||||||
const HtmlWebpackPlugin = require('html-webpack-plugin');
 | 
					 | 
				
			||||||
const CopyWebpackPlugin = require('copy-webpack-plugin');
 | 
					 | 
				
			||||||
const CleanWebpackPlugin = require('clean-webpack-plugin');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const pages = require('./pages');
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const config = {
 | 
					 | 
				
			||||||
    entry: {
 | 
					 | 
				
			||||||
        compiler: './ts/pages/compiler.tsx',
 | 
					 | 
				
			||||||
        coverage: './ts/pages/coverage.tsx',
 | 
					 | 
				
			||||||
        profiler: './ts/pages/profiler.tsx',
 | 
					 | 
				
			||||||
        trace: './ts/pages/trace.tsx',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    output: {
 | 
					 | 
				
			||||||
        path: path.join(__dirname, '/public'),
 | 
					 | 
				
			||||||
        filename: 'bundle-[name].js',
 | 
					 | 
				
			||||||
        chunkFilename: 'bundle-[name].js',
 | 
					 | 
				
			||||||
        publicPath: '/',
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    devtool: 'source-map',
 | 
					 | 
				
			||||||
    resolve: {
 | 
					 | 
				
			||||||
        modules: [path.join(__dirname, '/ts'), 'node_modules'],
 | 
					 | 
				
			||||||
        extensions: ['.ts', '.tsx', '.js', '.jsx', '.json'],
 | 
					 | 
				
			||||||
        alias: {
 | 
					 | 
				
			||||||
            ts: path.join(__dirname, '/ts'),
 | 
					 | 
				
			||||||
            less: path.join(__dirname, '/less'),
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    module: {
 | 
					 | 
				
			||||||
        rules: [
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.js$/,
 | 
					 | 
				
			||||||
                loader: 'source-map-loader',
 | 
					 | 
				
			||||||
                exclude: [
 | 
					 | 
				
			||||||
                    // instead of /\/node_modules\//
 | 
					 | 
				
			||||||
                    path.join(process.cwd(), 'node_modules'),
 | 
					 | 
				
			||||||
                    path.join(process.cwd(), '../..', 'node_modules'),
 | 
					 | 
				
			||||||
                ],
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.tsx?$/,
 | 
					 | 
				
			||||||
                loader: 'awesome-typescript-loader',
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.md$/,
 | 
					 | 
				
			||||||
                use: 'raw-loader',
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.less$/,
 | 
					 | 
				
			||||||
                loader: 'style-loader!css-loader!less-loader',
 | 
					 | 
				
			||||||
                exclude: /node_modules/,
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.css$/,
 | 
					 | 
				
			||||||
                loaders: ['style-loader', 'css-loader'],
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                test: /\.svg$/,
 | 
					 | 
				
			||||||
                loaders: ['react-svg-loader'],
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    optimization: {
 | 
					 | 
				
			||||||
        minimizer: [
 | 
					 | 
				
			||||||
            new TerserPlugin({
 | 
					 | 
				
			||||||
                sourceMap: true,
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
        ],
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    devServer: {
 | 
					 | 
				
			||||||
        port: 3572,
 | 
					 | 
				
			||||||
        disableHostCheck: true,
 | 
					 | 
				
			||||||
        overlay: true,
 | 
					 | 
				
			||||||
        historyApiFallback: true,
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
module.exports = (_env, argv) => {
 | 
					 | 
				
			||||||
    let plugins = [
 | 
					 | 
				
			||||||
        new CleanWebpackPlugin('public'),
 | 
					 | 
				
			||||||
        ...pages.map(p => {
 | 
					 | 
				
			||||||
            p.environment = argv.mode;
 | 
					 | 
				
			||||||
            return new HtmlWebpackPlugin(p);
 | 
					 | 
				
			||||||
        }),
 | 
					 | 
				
			||||||
        new CopyWebpackPlugin([
 | 
					 | 
				
			||||||
            { from: 'assets/crawl.html', to: 'index.html' },
 | 
					 | 
				
			||||||
            { from: 'assets/fonts', to: 'fonts' },
 | 
					 | 
				
			||||||
            { from: 'assets/images', to: 'images' },
 | 
					 | 
				
			||||||
        ]),
 | 
					 | 
				
			||||||
    ];
 | 
					 | 
				
			||||||
    if (argv.mode === 'development') {
 | 
					 | 
				
			||||||
        config.mode = 'development';
 | 
					 | 
				
			||||||
    } else {
 | 
					 | 
				
			||||||
        config.mode = 'production';
 | 
					 | 
				
			||||||
        config.output.filename = 'bundle-[name].[chunkhash].js';
 | 
					 | 
				
			||||||
        config.output.chunkFilename = 'bundle-[name].[chunkhash].js';
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        plugins = plugins.concat([
 | 
					 | 
				
			||||||
            new webpack.DefinePlugin({
 | 
					 | 
				
			||||||
                'process.env': {
 | 
					 | 
				
			||||||
                    NODE_ENV: JSON.stringify(process.env.NODE_ENV || config.mode),
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
            }),
 | 
					 | 
				
			||||||
            // commented out to check the bundle when needed
 | 
					 | 
				
			||||||
            //new BundleAnalyzerPlugin(),
 | 
					 | 
				
			||||||
        ]);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    console.log('i 「atl」: Mode: ', config.mode);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    config.plugins = plugins;
 | 
					 | 
				
			||||||
    console.log('i 「atl」: Plugin Count: ', config.plugins.length);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    return config;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										278
									
								
								yarn.lock
									
									
									
									
									
								
							
							
						
						@@ -758,7 +758,6 @@
 | 
				
			|||||||
"@0x/json-schemas@^3.0.1", "@0x/json-schemas@^3.0.11", "@0x/json-schemas@^3.0.2", "@0x/json-schemas@^3.0.3", "@0x/json-schemas@^3.1.11":
 | 
					"@0x/json-schemas@^3.0.1", "@0x/json-schemas@^3.0.11", "@0x/json-schemas@^3.0.2", "@0x/json-schemas@^3.0.3", "@0x/json-schemas@^3.1.11":
 | 
				
			||||||
  version "3.1.13"
 | 
					  version "3.1.13"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-3.1.13.tgz#4b9010f1bdeaf2aef1daba1753aa2e5ecf57f654"
 | 
					  resolved "https://registry.yarnpkg.com/@0x/json-schemas/-/json-schemas-3.1.13.tgz#4b9010f1bdeaf2aef1daba1753aa2e5ecf57f654"
 | 
				
			||||||
  integrity sha512-V93sF6seHDHFCSLZOOEhgY5k+w+78tLmxJRhj8XvsW4+EnXcgpshxK38P6SQAmBoNLDutmM8Wk1inf6ghiW0qA==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@0x/typescript-typings" "^4.2.4"
 | 
					    "@0x/typescript-typings" "^4.2.4"
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
@@ -819,7 +818,6 @@
 | 
				
			|||||||
"@0x/ts-doc-gen@^0.0.17":
 | 
					"@0x/ts-doc-gen@^0.0.17":
 | 
				
			||||||
  version "0.0.17"
 | 
					  version "0.0.17"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@0x/ts-doc-gen/-/ts-doc-gen-0.0.17.tgz#2c3c8e96aad4476e3a13608d3f1b516b87e17665"
 | 
					  resolved "https://registry.yarnpkg.com/@0x/ts-doc-gen/-/ts-doc-gen-0.0.17.tgz#2c3c8e96aad4476e3a13608d3f1b516b87e17665"
 | 
				
			||||||
  integrity sha512-0+ErnVixm804BkYHt7sYe10rc8w9Nf4qO2Ecp9ljzNliEVgwMV7zBSOFFk1CUSbTPYXqDSLuP79y7CxlWXmxdA==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@0x/typescript-typings" "^4.2.2"
 | 
					    "@0x/typescript-typings" "^4.2.2"
 | 
				
			||||||
    "@0x/utils" "^4.3.3"
 | 
					    "@0x/utils" "^4.3.3"
 | 
				
			||||||
@@ -1808,14 +1806,6 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/node" "*"
 | 
					    "@types/node" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/highlight.js@^9.12.3":
 | 
					 | 
				
			||||||
  version "9.12.3"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/highlight.js/-/highlight.js-9.12.3.tgz#b672cfaac25cbbc634a0fd92c515f66faa18dbca"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/history@*":
 | 
					 | 
				
			||||||
  version "4.6.2"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/history/-/history-4.6.2.tgz#12cfaba693ba20f114ed5765467ff25fdf67ddb0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/is-mobile@0.3.0":
 | 
					"@types/is-mobile@0.3.0":
 | 
				
			||||||
  version "0.3.0"
 | 
					  version "0.3.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/is-mobile/-/is-mobile-0.3.0.tgz#821825eeddb9016c41dd11c0dd6d2db8621432fc"
 | 
					  resolved "https://registry.yarnpkg.com/@types/is-mobile/-/is-mobile-0.3.0.tgz#821825eeddb9016c41dd11c0dd6d2db8621432fc"
 | 
				
			||||||
@@ -1963,13 +1953,6 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/react" "*"
 | 
					    "@types/react" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/react-dom@^16.0.7":
 | 
					 | 
				
			||||||
  version "16.0.7"
 | 
					 | 
				
			||||||
  resolved "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.0.7.tgz#54d0f867a76b90597e8432030d297982f25c20ba"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/node" "*"
 | 
					 | 
				
			||||||
    "@types/react" "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react-helmet@^5.0.6":
 | 
					"@types/react-helmet@^5.0.6":
 | 
				
			||||||
  version "5.0.6"
 | 
					  version "5.0.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-5.0.6.tgz#49607cbb72e1bb7dcefa9174cb591434d3b6f0af"
 | 
					  resolved "https://registry.yarnpkg.com/@types/react-helmet/-/react-helmet-5.0.6.tgz#49607cbb72e1bb7dcefa9174cb591434d3b6f0af"
 | 
				
			||||||
@@ -1989,12 +1972,6 @@
 | 
				
			|||||||
    "@types/react" "*"
 | 
					    "@types/react" "*"
 | 
				
			||||||
    "@types/webpack" "*"
 | 
					    "@types/webpack" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/react-lottie@^1.2.0":
 | 
					 | 
				
			||||||
  version "1.2.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-lottie/-/react-lottie-1.2.0.tgz#87eccca2580a18c95a3fbb9f421c85debafb95e4"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/react" "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react-redux@^4.4.37":
 | 
					"@types/react-redux@^4.4.37":
 | 
				
			||||||
  version "4.4.47"
 | 
					  version "4.4.47"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-4.4.47.tgz#12af1677116e08d413fe2620d0a85560c8a0536e"
 | 
					  resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-4.4.47.tgz#12af1677116e08d413fe2620d0a85560c8a0536e"
 | 
				
			||||||
@@ -2009,21 +1986,6 @@
 | 
				
			|||||||
    "@types/react" "*"
 | 
					    "@types/react" "*"
 | 
				
			||||||
    redux "^4.0.0"
 | 
					    redux "^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/react-router-dom@^4.0.4":
 | 
					 | 
				
			||||||
  version "4.2.6"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-4.2.6.tgz#9f7eb3c0e6661a9607d878ff8675cc4ea95cd276"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/history" "*"
 | 
					 | 
				
			||||||
    "@types/react" "*"
 | 
					 | 
				
			||||||
    "@types/react-router" "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react-router@*":
 | 
					 | 
				
			||||||
  version "4.0.23"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-4.0.23.tgz#d0509dcbdb1c686aed8f3d5cb186f42e5fbe7c2a"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/history" "*"
 | 
					 | 
				
			||||||
    "@types/react" "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react-scroll@1.5.3":
 | 
					"@types/react-scroll@1.5.3":
 | 
				
			||||||
  version "1.5.3"
 | 
					  version "1.5.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-scroll/-/react-scroll-1.5.3.tgz#cc4e94db3d7d5b1cd244bfee24091c335d3e2598"
 | 
					  resolved "https://registry.yarnpkg.com/@types/react-scroll/-/react-scroll-1.5.3.tgz#cc4e94db3d7d5b1cd244bfee24091c335d3e2598"
 | 
				
			||||||
@@ -2036,12 +1998,6 @@
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/react" "*"
 | 
					    "@types/react" "*"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/react-tabs@^2.3.0":
 | 
					 | 
				
			||||||
  version "2.3.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-tabs/-/react-tabs-2.3.0.tgz#6afdf6e85c3a68ffe33824c65fee641982ef2b48"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/react" "*"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react-tap-event-plugin@0.0.30":
 | 
					"@types/react-tap-event-plugin@0.0.30":
 | 
				
			||||||
  version "0.0.30"
 | 
					  version "0.0.30"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react-tap-event-plugin/-/react-tap-event-plugin-0.0.30.tgz#123f35080412f489b6770c5a65c159ff96654cb5"
 | 
					  resolved "https://registry.yarnpkg.com/@types/react-tap-event-plugin/-/react-tap-event-plugin-0.0.30.tgz#123f35080412f489b6770c5a65c159ff96654cb5"
 | 
				
			||||||
@@ -2059,13 +2015,6 @@
 | 
				
			|||||||
    "@types/prop-types" "*"
 | 
					    "@types/prop-types" "*"
 | 
				
			||||||
    csstype "^2.2.0"
 | 
					    csstype "^2.2.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"@types/react@^16.4.2":
 | 
					 | 
				
			||||||
  version "16.4.11"
 | 
					 | 
				
			||||||
  resolved "https://registry.npmjs.org/@types/react/-/react-16.4.11.tgz#330f3d864300f71150dc2d125e48644c098f8770"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    "@types/prop-types" "*"
 | 
					 | 
				
			||||||
    csstype "^2.2.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"@types/react@^16.7.7":
 | 
					"@types/react@^16.7.7":
 | 
				
			||||||
  version "16.7.18"
 | 
					  version "16.7.18"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.18.tgz#f4ce0d539a893dd61e36cd11ae3a5e54f5a48337"
 | 
					  resolved "https://registry.yarnpkg.com/@types/react/-/react-16.7.18.tgz#f4ce0d539a893dd61e36cd11ae3a5e54f5a48337"
 | 
				
			||||||
@@ -3676,7 +3625,6 @@ bach@^1.0.0:
 | 
				
			|||||||
backbone@^1.4.0:
 | 
					backbone@^1.4.0:
 | 
				
			||||||
  version "1.4.0"
 | 
					  version "1.4.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12"
 | 
					  resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12"
 | 
				
			||||||
  integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    underscore ">=1.8.3"
 | 
					    underscore ">=1.8.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -4463,7 +4411,7 @@ callsites@^3.0.0:
 | 
				
			|||||||
  version "3.0.0"
 | 
					  version "3.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3"
 | 
					  resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
camel-case@3.0.x, camel-case@^3.0.0:
 | 
					camel-case@^3.0.0:
 | 
				
			||||||
  version "3.0.0"
 | 
					  version "3.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
 | 
					  resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
@@ -4800,18 +4748,6 @@ classnames@^2.2.5:
 | 
				
			|||||||
  version "2.2.5"
 | 
					  version "2.2.5"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
 | 
					  resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean-css@4.2.x:
 | 
					 | 
				
			||||||
  version "4.2.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    source-map "~0.6.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
clean-webpack-plugin@^0.1.19:
 | 
					 | 
				
			||||||
  version "0.1.19"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/clean-webpack-plugin/-/clean-webpack-plugin-0.1.19.tgz#ceda8bb96b00fe168e9b080272960d20fdcadd6d"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    rimraf "^2.6.1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
cli-boxes@^1.0.0:
 | 
					cli-boxes@^1.0.0:
 | 
				
			||||||
  version "1.0.0"
 | 
					  version "1.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
 | 
					  resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
 | 
				
			||||||
@@ -5066,10 +5002,6 @@ command-exists@^1.2.8:
 | 
				
			|||||||
  version "1.2.8"
 | 
					  version "1.2.8"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
 | 
					  resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.8.tgz#715acefdd1223b9c9b37110a149c6392c2852291"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
commander@2.17.x, commander@^2.7.1, commander@~2.17.1:
 | 
					 | 
				
			||||||
  version "2.17.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
commander@2.18.0:
 | 
					commander@2.18.0:
 | 
				
			||||||
  version "2.18.0"
 | 
					  version "2.18.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970"
 | 
				
			||||||
@@ -5082,6 +5014,10 @@ commander@^2.15.1, commander@^2.18.0:
 | 
				
			|||||||
  version "2.19.0"
 | 
					  version "2.19.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					commander@^2.7.1, commander@~2.17.1:
 | 
				
			||||||
 | 
					  version "2.17.1"
 | 
				
			||||||
 | 
					  resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
commander@~2.13.0:
 | 
					commander@~2.13.0:
 | 
				
			||||||
  version "2.13.0"
 | 
					  version "2.13.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
 | 
					  resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
 | 
				
			||||||
@@ -5426,19 +5362,6 @@ copy-to-clipboard@^3, copy-to-clipboard@^3.0.8:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    toggle-selection "^1.0.3"
 | 
					    toggle-selection "^1.0.3"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
copy-webpack-plugin@^4.5.4:
 | 
					 | 
				
			||||||
  version "4.5.4"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-4.5.4.tgz#f2b2782b3cd5225535c3dc166a80067e7d940f27"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    cacache "^10.0.4"
 | 
					 | 
				
			||||||
    find-cache-dir "^1.0.0"
 | 
					 | 
				
			||||||
    globby "^7.1.1"
 | 
					 | 
				
			||||||
    is-glob "^4.0.0"
 | 
					 | 
				
			||||||
    loader-utils "^1.1.0"
 | 
					 | 
				
			||||||
    minimatch "^3.0.4"
 | 
					 | 
				
			||||||
    p-limit "^1.0.0"
 | 
					 | 
				
			||||||
    serialize-javascript "^1.4.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
copyfiles@^2.0.0:
 | 
					copyfiles@^2.0.0:
 | 
				
			||||||
  version "2.0.0"
 | 
					  version "2.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.0.0.tgz#bbd78bb78e8fd6db5c67adf54249317b24560f2a"
 | 
					  resolved "https://registry.yarnpkg.com/copyfiles/-/copyfiles-2.0.0.tgz#bbd78bb78e8fd6db5c67adf54249317b24560f2a"
 | 
				
			||||||
@@ -5669,7 +5592,7 @@ css-mediaquery@^0.1.2:
 | 
				
			|||||||
  version "0.1.2"
 | 
					  version "0.1.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
 | 
					  resolved "https://registry.yarnpkg.com/css-mediaquery/-/css-mediaquery-0.1.2.tgz#6a2c37344928618631c54bd33cedd301da18bea0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
css-select@^1.1.0, css-select@~1.2.0:
 | 
					css-select@~1.2.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
 | 
					  resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
@@ -6282,12 +6205,6 @@ dom-align@^1.7.0:
 | 
				
			|||||||
  version "1.8.0"
 | 
					  version "1.8.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654"
 | 
					  resolved "https://registry.yarnpkg.com/dom-align/-/dom-align-1.8.0.tgz#c0e89b5b674c6e836cd248c52c2992135f093654"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
dom-converter@~0.2:
 | 
					 | 
				
			||||||
  version "0.2.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    utila "~0.4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
dom-helpers@^3.2.0:
 | 
					dom-helpers@^3.2.0:
 | 
				
			||||||
  version "3.3.1"
 | 
					  version "3.3.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
 | 
					  resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6"
 | 
				
			||||||
@@ -6327,12 +6244,6 @@ domexception@^1.0.1:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    webidl-conversions "^4.0.2"
 | 
					    webidl-conversions "^4.0.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
domhandler@2.1:
 | 
					 | 
				
			||||||
  version "2.1.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    domelementtype "1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
domhandler@^2.3.0:
 | 
					domhandler@^2.3.0:
 | 
				
			||||||
  version "2.4.1"
 | 
					  version "2.4.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
 | 
					  resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259"
 | 
				
			||||||
@@ -6349,12 +6260,6 @@ dompurify@^1.0.6:
 | 
				
			|||||||
  version "1.0.7"
 | 
					  version "1.0.7"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/dompurify/-/dompurify-1.0.7.tgz#33e5c4a5fc84df93b58ca162d1d3f28537aa3ec2"
 | 
					  resolved "https://registry.npmjs.org/dompurify/-/dompurify-1.0.7.tgz#33e5c4a5fc84df93b58ca162d1d3f28537aa3ec2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
domutils@1.1:
 | 
					 | 
				
			||||||
  version "1.1.6"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    domelementtype "1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
domutils@1.5.1:
 | 
					domutils@1.5.1:
 | 
				
			||||||
  version "1.5.1"
 | 
					  version "1.5.1"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
 | 
					  resolved "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf"
 | 
				
			||||||
@@ -8737,17 +8642,6 @@ globby@^6.1.0:
 | 
				
			|||||||
    pify "^2.0.0"
 | 
					    pify "^2.0.0"
 | 
				
			||||||
    pinkie-promise "^2.0.0"
 | 
					    pinkie-promise "^2.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
globby@^7.1.1:
 | 
					 | 
				
			||||||
  version "7.1.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    array-union "^1.0.1"
 | 
					 | 
				
			||||||
    dir-glob "^2.0.0"
 | 
					 | 
				
			||||||
    glob "^7.1.2"
 | 
					 | 
				
			||||||
    ignore "^3.3.5"
 | 
					 | 
				
			||||||
    pify "^3.0.0"
 | 
					 | 
				
			||||||
    slash "^1.0.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
globby@^8.0.1:
 | 
					globby@^8.0.1:
 | 
				
			||||||
  version "8.0.1"
 | 
					  version "8.0.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50"
 | 
					  resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50"
 | 
				
			||||||
@@ -8839,7 +8733,6 @@ got@^6.7.1:
 | 
				
			|||||||
graceful-fs@^3.0.0:
 | 
					graceful-fs@^3.0.0:
 | 
				
			||||||
  version "3.0.11"
 | 
					  version "3.0.11"
 | 
				
			||||||
  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
 | 
					  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
 | 
				
			||||||
  integrity sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    natives "^1.1.0"
 | 
					    natives "^1.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -8850,12 +8743,10 @@ graceful-fs@^4.0.0, graceful-fs@^4.1.10, graceful-fs@^4.1.11, graceful-fs@^4.1.1
 | 
				
			|||||||
graceful-fs@^4.2.0:
 | 
					graceful-fs@^4.2.0:
 | 
				
			||||||
  version "4.2.1"
 | 
					  version "4.2.1"
 | 
				
			||||||
  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d"
 | 
					  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.1.tgz#1c1f0c364882c868f5bff6512146328336a11b1d"
 | 
				
			||||||
  integrity sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
graceful-fs@~1.2.0:
 | 
					graceful-fs@~1.2.0:
 | 
				
			||||||
  version "1.2.3"
 | 
					  version "1.2.3"
 | 
				
			||||||
  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
 | 
					  resolved "http://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
 | 
				
			||||||
  integrity sha1-FaSAaldUfLLS2/J/QuiajDRRs2Q=
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
"graceful-readlink@>= 1.0.0":
 | 
					"graceful-readlink@>= 1.0.0":
 | 
				
			||||||
  version "1.0.1"
 | 
					  version "1.0.1"
 | 
				
			||||||
@@ -9152,10 +9043,6 @@ hdkey@^1.1.0:
 | 
				
			|||||||
    safe-buffer "^5.1.1"
 | 
					    safe-buffer "^5.1.1"
 | 
				
			||||||
    secp256k1 "^3.0.1"
 | 
					    secp256k1 "^3.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
he@1.1.x:
 | 
					 | 
				
			||||||
  version "1.1.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
he@1.2.0:
 | 
					he@1.2.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
 | 
					  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
 | 
				
			||||||
@@ -9175,14 +9062,9 @@ highlight.js@^9.11.0, highlight.js@~9.12.0:
 | 
				
			|||||||
  version "9.12.0"
 | 
					  version "9.12.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
 | 
					  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
highlight.js@^9.13.1:
 | 
					 | 
				
			||||||
  version "9.13.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.13.1.tgz#054586d53a6863311168488a0f58d6c505ce641e"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
highlight.js@^9.15.8, highlight.js@^9.6.0:
 | 
					highlight.js@^9.15.8, highlight.js@^9.6.0:
 | 
				
			||||||
  version "9.15.9"
 | 
					  version "9.15.9"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.9.tgz#865257da1dbb4a58c4552d46c4b3854f77f0e6d5"
 | 
					  resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.9.tgz#865257da1dbb4a58c4552d46c4b3854f77f0e6d5"
 | 
				
			||||||
  integrity sha512-M0zZvfLr5p0keDMCAhNBp03XJbKBxUx5AfyfufMdFMEP4N/Xj6dh0IqC75ys7BAzceR34NgcvXjupRVaHBPPVQ==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
highlightjs-solidity@^1.0.5:
 | 
					highlightjs-solidity@^1.0.5:
 | 
				
			||||||
  version "1.0.6"
 | 
					  version "1.0.6"
 | 
				
			||||||
@@ -9276,18 +9158,6 @@ html-entities@^1.2.0:
 | 
				
			|||||||
  version "1.2.1"
 | 
					  version "1.2.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
 | 
					  resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
html-minifier@^3.2.3:
 | 
					 | 
				
			||||||
  version "3.5.20"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    camel-case "3.0.x"
 | 
					 | 
				
			||||||
    clean-css "4.2.x"
 | 
					 | 
				
			||||||
    commander "2.17.x"
 | 
					 | 
				
			||||||
    he "1.1.x"
 | 
					 | 
				
			||||||
    param-case "2.1.x"
 | 
					 | 
				
			||||||
    relateurl "0.2.x"
 | 
					 | 
				
			||||||
    uglify-js "3.4.x"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
html-to-react@^1.3.4:
 | 
					html-to-react@^1.3.4:
 | 
				
			||||||
  version "1.3.4"
 | 
					  version "1.3.4"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz#647b3a54fdec73a6461864b129fb0d1eec7d4589"
 | 
					  resolved "https://registry.npmjs.org/html-to-react/-/html-to-react-1.3.4.tgz#647b3a54fdec73a6461864b129fb0d1eec7d4589"
 | 
				
			||||||
@@ -9298,18 +9168,6 @@ html-to-react@^1.3.4:
 | 
				
			|||||||
    lodash.camelcase "^4.3.0"
 | 
					    lodash.camelcase "^4.3.0"
 | 
				
			||||||
    ramda "^0.26"
 | 
					    ramda "^0.26"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
html-webpack-plugin@^3.2.0:
 | 
					 | 
				
			||||||
  version "3.2.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    html-minifier "^3.2.3"
 | 
					 | 
				
			||||||
    loader-utils "^0.2.16"
 | 
					 | 
				
			||||||
    lodash "^4.17.3"
 | 
					 | 
				
			||||||
    pretty-error "^2.0.2"
 | 
					 | 
				
			||||||
    tapable "^1.0.0"
 | 
					 | 
				
			||||||
    toposort "^1.0.0"
 | 
					 | 
				
			||||||
    util.promisify "1.0.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
htmlparser2@^3.10.0:
 | 
					htmlparser2@^3.10.0:
 | 
				
			||||||
  version "3.10.0"
 | 
					  version "3.10.0"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
 | 
					  resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz#5f5e422dcf6119c0d983ed36260ce9ded0bee464"
 | 
				
			||||||
@@ -9332,15 +9190,6 @@ htmlparser2@^3.9.1:
 | 
				
			|||||||
    inherits "^2.0.1"
 | 
					    inherits "^2.0.1"
 | 
				
			||||||
    readable-stream "^2.0.2"
 | 
					    readable-stream "^2.0.2"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
htmlparser2@~3.3.0:
 | 
					 | 
				
			||||||
  version "3.3.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    domelementtype "1"
 | 
					 | 
				
			||||||
    domhandler "2.1"
 | 
					 | 
				
			||||||
    domutils "1.1"
 | 
					 | 
				
			||||||
    readable-stream "1.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
http-cache-semantics@^3.8.1:
 | 
					http-cache-semantics@^3.8.1:
 | 
				
			||||||
  version "3.8.1"
 | 
					  version "3.8.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
 | 
					  resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2"
 | 
				
			||||||
@@ -10654,7 +10503,6 @@ jmespath@0.15.0:
 | 
				
			|||||||
jquery@^3.4.1:
 | 
					jquery@^3.4.1:
 | 
				
			||||||
  version "3.4.1"
 | 
					  version "3.4.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
 | 
					  resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.4.1.tgz#714f1f8d9dde4bdfa55764ba37ef214630d80ef2"
 | 
				
			||||||
  integrity sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
js-base64@^2.1.8:
 | 
					js-base64@^2.1.8:
 | 
				
			||||||
  version "2.5.1"
 | 
					  version "2.5.1"
 | 
				
			||||||
@@ -11339,15 +11187,6 @@ loader-utils@1.1.0, loader-utils@^1.1.0:
 | 
				
			|||||||
    emojis-list "^2.0.0"
 | 
					    emojis-list "^2.0.0"
 | 
				
			||||||
    json5 "^0.5.0"
 | 
					    json5 "^0.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
loader-utils@^0.2.16, loader-utils@~0.2.2:
 | 
					 | 
				
			||||||
  version "0.2.17"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    big.js "^3.1.3"
 | 
					 | 
				
			||||||
    emojis-list "^2.0.0"
 | 
					 | 
				
			||||||
    json5 "^0.5.0"
 | 
					 | 
				
			||||||
    object-assign "^4.0.1"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loader-utils@^1.0.1, loader-utils@^1.0.2:
 | 
					loader-utils@^1.0.1, loader-utils@^1.0.2:
 | 
				
			||||||
  version "1.2.3"
 | 
					  version "1.2.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
 | 
					  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7"
 | 
				
			||||||
@@ -11356,6 +11195,15 @@ loader-utils@^1.0.1, loader-utils@^1.0.2:
 | 
				
			|||||||
    emojis-list "^2.0.0"
 | 
					    emojis-list "^2.0.0"
 | 
				
			||||||
    json5 "^1.0.1"
 | 
					    json5 "^1.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					loader-utils@~0.2.2:
 | 
				
			||||||
 | 
					  version "0.2.17"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    big.js "^3.1.3"
 | 
				
			||||||
 | 
					    emojis-list "^2.0.0"
 | 
				
			||||||
 | 
					    json5 "^0.5.0"
 | 
				
			||||||
 | 
					    object-assign "^4.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
locate-path@^2.0.0:
 | 
					locate-path@^2.0.0:
 | 
				
			||||||
  version "2.0.0"
 | 
					  version "2.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
 | 
					  resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
 | 
				
			||||||
@@ -11622,7 +11470,7 @@ lodash@=4.17.4:
 | 
				
			|||||||
  version "4.17.4"
 | 
					  version "4.17.4"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 | 
					  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.10:
 | 
					lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@~4.17.10:
 | 
				
			||||||
  version "4.17.15"
 | 
					  version "4.17.15"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
 | 
					  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -11688,10 +11536,6 @@ loose-envify@^1.4.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    js-tokens "^3.0.0 || ^4.0.0"
 | 
					    js-tokens "^3.0.0 || ^4.0.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
lottie-web@^5.1.3:
 | 
					 | 
				
			||||||
  version "5.4.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/lottie-web/-/lottie-web-5.4.1.tgz#98465741d4907293656cab31e395d79d0546ef26"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
loud-rejection@^1.0.0:
 | 
					loud-rejection@^1.0.0:
 | 
				
			||||||
  version "1.6.0"
 | 
					  version "1.6.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
 | 
					  resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
 | 
				
			||||||
@@ -11769,7 +11613,6 @@ lunr@^2.3.0:
 | 
				
			|||||||
lunr@^2.3.6:
 | 
					lunr@^2.3.6:
 | 
				
			||||||
  version "2.3.6"
 | 
					  version "2.3.6"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.6.tgz#f278beee7ffd56ad86e6e478ce02ab2b98c78dd5"
 | 
					  resolved "https://registry.yarnpkg.com/lunr/-/lunr-2.3.6.tgz#f278beee7ffd56ad86e6e478ce02ab2b98c78dd5"
 | 
				
			||||||
  integrity sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
macaddress@^0.2.8:
 | 
					macaddress@^0.2.8:
 | 
				
			||||||
  version "0.2.8"
 | 
					  version "0.2.8"
 | 
				
			||||||
@@ -11891,7 +11734,6 @@ marked@0.3.18:
 | 
				
			|||||||
marked@^0.7.0:
 | 
					marked@^0.7.0:
 | 
				
			||||||
  version "0.7.0"
 | 
					  version "0.7.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
 | 
					  resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e"
 | 
				
			||||||
  integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
matchdep@^2.0.0:
 | 
					matchdep@^2.0.0:
 | 
				
			||||||
  version "2.0.0"
 | 
					  version "2.0.0"
 | 
				
			||||||
@@ -12503,7 +12345,6 @@ nanomatch@^1.2.9:
 | 
				
			|||||||
natives@^1.1.0:
 | 
					natives@^1.1.0:
 | 
				
			||||||
  version "1.1.6"
 | 
					  version "1.1.6"
 | 
				
			||||||
  resolved "http://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb"
 | 
					  resolved "http://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb"
 | 
				
			||||||
  integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
natural-compare@^1.4.0:
 | 
					natural-compare@^1.4.0:
 | 
				
			||||||
  version "1.4.0"
 | 
					  version "1.4.0"
 | 
				
			||||||
@@ -13472,12 +13313,6 @@ p-is-promise@^1.1.0:
 | 
				
			|||||||
  version "1.1.0"
 | 
					  version "1.1.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
 | 
					  resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
p-limit@^1.0.0:
 | 
					 | 
				
			||||||
  version "1.3.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    p-try "^1.0.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
p-limit@^1.1.0:
 | 
					p-limit@^1.1.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
 | 
					  resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c"
 | 
				
			||||||
@@ -13603,7 +13438,7 @@ parallel-transform@^1.1.0:
 | 
				
			|||||||
    inherits "^2.0.3"
 | 
					    inherits "^2.0.3"
 | 
				
			||||||
    readable-stream "^2.1.5"
 | 
					    readable-stream "^2.1.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
param-case@2.1.x, param-case@^2.1.0:
 | 
					param-case@^2.1.0:
 | 
				
			||||||
  version "2.1.1"
 | 
					  version "2.1.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
 | 
					  resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247"
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
@@ -14267,13 +14102,6 @@ pretty-bytes@^1.0.4:
 | 
				
			|||||||
    get-stdin "^4.0.1"
 | 
					    get-stdin "^4.0.1"
 | 
				
			||||||
    meow "^3.1.0"
 | 
					    meow "^3.1.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pretty-error@^2.0.2:
 | 
					 | 
				
			||||||
  version "2.1.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    renderkid "^2.0.1"
 | 
					 | 
				
			||||||
    utila "~0.4"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
pretty-format@^23.6.0:
 | 
					pretty-format@^23.6.0:
 | 
				
			||||||
  version "23.6.0"
 | 
					  version "23.6.0"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
 | 
					  resolved "https://registry.npmjs.org/pretty-format/-/pretty-format-23.6.0.tgz#5eaac8eeb6b33b987b7fe6097ea6a8a146ab5760"
 | 
				
			||||||
@@ -14328,7 +14156,6 @@ progress@^2.0.0:
 | 
				
			|||||||
progress@^2.0.3:
 | 
					progress@^2.0.3:
 | 
				
			||||||
  version "2.0.3"
 | 
					  version "2.0.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
 | 
					  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
 | 
				
			||||||
  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
promise-inflight@^1.0.1:
 | 
					promise-inflight@^1.0.1:
 | 
				
			||||||
  version "1.0.1"
 | 
					  version "1.0.1"
 | 
				
			||||||
@@ -14361,7 +14188,6 @@ promisify-child-process@^1.0.5:
 | 
				
			|||||||
promisify-child-process@^3.1.1:
 | 
					promisify-child-process@^3.1.1:
 | 
				
			||||||
  version "3.1.1"
 | 
					  version "3.1.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-3.1.1.tgz#3a029c1d97bdb8bbcc8862c765b91f1cee0f2691"
 | 
					  resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-3.1.1.tgz#3a029c1d97bdb8bbcc8862c765b91f1cee0f2691"
 | 
				
			||||||
  integrity sha512-683UHZEP4Bm75BvBujEe87AdE9lxnoWpcU5pEw4FG9HCSwwZC9pF7HUj3QmlDAvhyvulkWHLZs1lVRBNTvkbXQ==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@babel/runtime" "^7.1.5"
 | 
					    "@babel/runtime" "^7.1.5"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -14961,13 +14787,6 @@ react-loadable@^5.5.0:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    prop-types "^15.5.0"
 | 
					    prop-types "^15.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
react-lottie@^1.2.3:
 | 
					 | 
				
			||||||
  version "1.2.3"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/react-lottie/-/react-lottie-1.2.3.tgz#8544b96939e088658072eea5e12d912cdaa3acc1"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    babel-runtime "^6.26.0"
 | 
					 | 
				
			||||||
    lottie-web "^5.1.3"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
react-markdown@^4.0.6:
 | 
					react-markdown@^4.0.6:
 | 
				
			||||||
  version "4.0.6"
 | 
					  version "4.0.6"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.6.tgz#927d44421735cd90b7634bb221e9d7d8656e01e9"
 | 
					  resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-4.0.6.tgz#927d44421735cd90b7634bb221e9d7d8656e01e9"
 | 
				
			||||||
@@ -15102,13 +14921,6 @@ react-tabs@^2.0.0:
 | 
				
			|||||||
    classnames "^2.2.0"
 | 
					    classnames "^2.2.0"
 | 
				
			||||||
    prop-types "^15.5.0"
 | 
					    prop-types "^15.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
react-tabs@^2.3.0:
 | 
					 | 
				
			||||||
  version "2.3.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/react-tabs/-/react-tabs-2.3.0.tgz#0c37e786f288d369824acd06a96bd1818ab8b0dc"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    classnames "^2.2.0"
 | 
					 | 
				
			||||||
    prop-types "^15.5.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
react-test-renderer@^16.0.0-0:
 | 
					react-test-renderer@^16.0.0-0:
 | 
				
			||||||
  version "16.5.2"
 | 
					  version "16.5.2"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae"
 | 
					  resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.5.2.tgz#92e9d2c6f763b9821b2e0b22f994ee675068b5ae"
 | 
				
			||||||
@@ -15258,15 +15070,6 @@ read@1, read@1.0.x, read@~1.0.1, read@~1.0.5:
 | 
				
			|||||||
    string_decoder "~1.1.1"
 | 
					    string_decoder "~1.1.1"
 | 
				
			||||||
    util-deprecate "~1.0.1"
 | 
					    util-deprecate "~1.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.15, readable-stream@~1.0.26, readable-stream@~1.0.31:
 | 
					 | 
				
			||||||
  version "1.0.34"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    core-util-is "~1.0.0"
 | 
					 | 
				
			||||||
    inherits "~2.0.1"
 | 
					 | 
				
			||||||
    isarray "0.0.1"
 | 
					 | 
				
			||||||
    string_decoder "~0.10.x"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
"readable-stream@2 || 3", readable-stream@^3.0.2:
 | 
					"readable-stream@2 || 3", readable-stream@^3.0.2:
 | 
				
			||||||
  version "3.4.0"
 | 
					  version "3.4.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
 | 
					  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc"
 | 
				
			||||||
@@ -15275,6 +15078,15 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0
 | 
				
			|||||||
    string_decoder "^1.1.1"
 | 
					    string_decoder "^1.1.1"
 | 
				
			||||||
    util-deprecate "^1.0.1"
 | 
					    util-deprecate "^1.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"readable-stream@>=1.0.33-1 <1.1.0-0", readable-stream@~1.0.15, readable-stream@~1.0.26, readable-stream@~1.0.31:
 | 
				
			||||||
 | 
					  version "1.0.34"
 | 
				
			||||||
 | 
					  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
 | 
				
			||||||
 | 
					  dependencies:
 | 
				
			||||||
 | 
					    core-util-is "~1.0.0"
 | 
				
			||||||
 | 
					    inherits "~2.0.1"
 | 
				
			||||||
 | 
					    isarray "0.0.1"
 | 
				
			||||||
 | 
					    string_decoder "~0.10.x"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
readable-stream@^1.0.33, readable-stream@~1.1.9:
 | 
					readable-stream@^1.0.33, readable-stream@~1.1.9:
 | 
				
			||||||
  version "1.1.14"
 | 
					  version "1.1.14"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
 | 
					  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
 | 
				
			||||||
@@ -15522,10 +15334,6 @@ regjsparser@^0.1.4:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    jsesc "~0.5.0"
 | 
					    jsesc "~0.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
relateurl@0.2.x:
 | 
					 | 
				
			||||||
  version "0.2.7"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
remark-parse@^5.0.0:
 | 
					remark-parse@^5.0.0:
 | 
				
			||||||
  version "5.0.0"
 | 
					  version "5.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95"
 | 
					  resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95"
 | 
				
			||||||
@@ -15565,16 +15373,6 @@ remove-trailing-separator@^1.0.1, remove-trailing-separator@^1.1.0:
 | 
				
			|||||||
  version "1.1.0"
 | 
					  version "1.1.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
 | 
					  resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
renderkid@^2.0.1:
 | 
					 | 
				
			||||||
  version "2.0.2"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.2.tgz#12d310f255360c07ad8fde253f6c9e9de372d2aa"
 | 
					 | 
				
			||||||
  dependencies:
 | 
					 | 
				
			||||||
    css-select "^1.1.0"
 | 
					 | 
				
			||||||
    dom-converter "~0.2"
 | 
					 | 
				
			||||||
    htmlparser2 "~3.3.0"
 | 
					 | 
				
			||||||
    strip-ansi "^3.0.0"
 | 
					 | 
				
			||||||
    utila "^0.4.0"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
repeat-element@^1.1.2:
 | 
					repeat-element@^1.1.2:
 | 
				
			||||||
  version "1.1.2"
 | 
					  version "1.1.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
 | 
					  resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
 | 
				
			||||||
@@ -16409,7 +16207,6 @@ shelljs@^0.7.3:
 | 
				
			|||||||
shelljs@^0.8.3:
 | 
					shelljs@^0.8.3:
 | 
				
			||||||
  version "0.8.3"
 | 
					  version "0.8.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
 | 
					  resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.3.tgz#a7f3319520ebf09ee81275b2368adb286659b097"
 | 
				
			||||||
  integrity sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    glob "^7.0.0"
 | 
					    glob "^7.0.0"
 | 
				
			||||||
    interpret "^1.0.0"
 | 
					    interpret "^1.0.0"
 | 
				
			||||||
@@ -16732,7 +16529,7 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
 | 
				
			|||||||
  version "0.5.7"
 | 
					  version "0.5.7"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
 | 
					  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1:
 | 
					source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
 | 
				
			||||||
  version "0.6.1"
 | 
					  version "0.6.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 | 
					  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17166,10 +16963,6 @@ styled-components@^4.1.1:
 | 
				
			|||||||
    stylis-rule-sheet "^0.0.10"
 | 
					    stylis-rule-sheet "^0.0.10"
 | 
				
			||||||
    supports-color "^5.5.0"
 | 
					    supports-color "^5.5.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
styled-normalize@^8.0.1:
 | 
					 | 
				
			||||||
  version "8.0.1"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/styled-normalize/-/styled-normalize-8.0.1.tgz#f1c390de61075cdcc45ae38a1c8c381c5667a0af"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
stylis-rule-sheet@^0.0.10:
 | 
					stylis-rule-sheet@^0.0.10:
 | 
				
			||||||
  version "0.0.10"
 | 
					  version "0.0.10"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
 | 
					  resolved "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430"
 | 
				
			||||||
@@ -17699,10 +17492,6 @@ toidentifier@1.0.0:
 | 
				
			|||||||
  version "1.0.0"
 | 
					  version "1.0.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
 | 
					  resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
toposort@^1.0.0:
 | 
					 | 
				
			||||||
  version "1.0.7"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
toposort@^2.0.2:
 | 
					toposort@^2.0.2:
 | 
				
			||||||
  version "2.0.2"
 | 
					  version "2.0.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
 | 
					  resolved "https://registry.yarnpkg.com/toposort/-/toposort-2.0.2.tgz#ae21768175d1559d48bef35420b2f4962f09c330"
 | 
				
			||||||
@@ -17961,7 +17750,6 @@ typedarray@^0.0.6:
 | 
				
			|||||||
typedoc-default-themes@^0.6.0:
 | 
					typedoc-default-themes@^0.6.0:
 | 
				
			||||||
  version "0.6.0"
 | 
					  version "0.6.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz#7e73bf54dd9e11550dd0fb576d5176b758f8f8b5"
 | 
					  resolved "https://registry.yarnpkg.com/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz#7e73bf54dd9e11550dd0fb576d5176b758f8f8b5"
 | 
				
			||||||
  integrity sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    backbone "^1.4.0"
 | 
					    backbone "^1.4.0"
 | 
				
			||||||
    jquery "^3.4.1"
 | 
					    jquery "^3.4.1"
 | 
				
			||||||
@@ -17971,12 +17759,10 @@ typedoc-default-themes@^0.6.0:
 | 
				
			|||||||
typedoc-plugin-markdown@^2.1.0:
 | 
					typedoc-plugin-markdown@^2.1.0:
 | 
				
			||||||
  version "2.1.0"
 | 
					  version "2.1.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.1.0.tgz#17b7b97415b97214985d1a61ef7b9a4dce3e8305"
 | 
					  resolved "https://registry.yarnpkg.com/typedoc-plugin-markdown/-/typedoc-plugin-markdown-2.1.0.tgz#17b7b97415b97214985d1a61ef7b9a4dce3e8305"
 | 
				
			||||||
  integrity sha512-f7CgreapeUIpm85BnC4ec9PZp10INOpLpItSCV4YFlZS4VaBA/a1D2nYv9+7TVJugc084XlSFUY+OX9fwGAUpA==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedoc@^0.15.0:
 | 
					typedoc@^0.15.0:
 | 
				
			||||||
  version "0.15.0"
 | 
					  version "0.15.0"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.15.0.tgz#21eaf4db41cf2797bad027a74f2a75cd08ae0c2d"
 | 
					  resolved "https://registry.yarnpkg.com/typedoc/-/typedoc-0.15.0.tgz#21eaf4db41cf2797bad027a74f2a75cd08ae0c2d"
 | 
				
			||||||
  integrity sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw==
 | 
					 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    "@types/minimatch" "3.0.3"
 | 
					    "@types/minimatch" "3.0.3"
 | 
				
			||||||
    fs-extra "^8.1.0"
 | 
					    fs-extra "^8.1.0"
 | 
				
			||||||
@@ -18029,7 +17815,6 @@ typescript@3.0.1:
 | 
				
			|||||||
typescript@3.5.x:
 | 
					typescript@3.5.x:
 | 
				
			||||||
  version "3.5.3"
 | 
					  version "3.5.3"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
 | 
					  resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.5.3.tgz#c830f657f93f1ea846819e929092f5fe5983e977"
 | 
				
			||||||
  integrity sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
typewise-core@^1.2, typewise-core@^1.2.0:
 | 
					typewise-core@^1.2, typewise-core@^1.2.0:
 | 
				
			||||||
  version "1.2.0"
 | 
					  version "1.2.0"
 | 
				
			||||||
@@ -18064,7 +17849,7 @@ uglify-es@^3.3.4:
 | 
				
			|||||||
    commander "~2.13.0"
 | 
					    commander "~2.13.0"
 | 
				
			||||||
    source-map "~0.6.1"
 | 
					    source-map "~0.6.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uglify-js@3.4.x, uglify-js@^3.0.0:
 | 
					uglify-js@^3.0.0:
 | 
				
			||||||
  version "3.4.9"
 | 
					  version "3.4.9"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
 | 
					  resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3"
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
@@ -18140,7 +17925,6 @@ underscore@1.8.3:
 | 
				
			|||||||
underscore@>=1.8.3, underscore@^1.9.1:
 | 
					underscore@>=1.8.3, underscore@^1.9.1:
 | 
				
			||||||
  version "1.9.1"
 | 
					  version "1.9.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
 | 
					  resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961"
 | 
				
			||||||
  integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
underscore@~1.4.4:
 | 
					underscore@~1.4.4:
 | 
				
			||||||
  version "1.4.4"
 | 
					  version "1.4.4"
 | 
				
			||||||
@@ -18427,7 +18211,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1:
 | 
				
			|||||||
  version "1.0.2"
 | 
					  version "1.0.2"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
 | 
					  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
util.promisify@1.0.0, util.promisify@^1.0.0:
 | 
					util.promisify@^1.0.0:
 | 
				
			||||||
  version "1.0.0"
 | 
					  version "1.0.0"
 | 
				
			||||||
  resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
 | 
					  resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030"
 | 
				
			||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
@@ -18440,10 +18224,6 @@ util@0.10.3, util@^0.10.3:
 | 
				
			|||||||
  dependencies:
 | 
					  dependencies:
 | 
				
			||||||
    inherits "2.0.1"
 | 
					    inherits "2.0.1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
utila@^0.4.0, utila@~0.4:
 | 
					 | 
				
			||||||
  version "0.4.0"
 | 
					 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
utile@0.2.1, utile@0.2.x, utile@~0.2.1:
 | 
					utile@0.2.1, utile@0.2.x, utile@~0.2.1:
 | 
				
			||||||
  version "0.2.1"
 | 
					  version "0.2.1"
 | 
				
			||||||
  resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7"
 | 
					  resolved "https://registry.yarnpkg.com/utile/-/utile-0.2.1.tgz#930c88e99098d6220834c356cbd9a770522d90d7"
 | 
				
			||||||
 
 | 
				
			|||||||