You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@atlas.apache.org by sa...@apache.org on 2019/11/06 21:28:57 UTC

[atlas] 01/09: ATLAS-3386 : Atlas documentation website with new template

This is an automated email from the ASF dual-hosted git repository.

sarath pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/atlas.git

commit 897bc84d425cea1d85ce468a54b10fa512a57fce
Author: kevalbhatt <kb...@apache.org>
AuthorDate: Tue Sep 17 17:32:31 2019 +0530

    ATLAS-3386 : Atlas documentation website with new template
    
    Signed-off-by: nixonrodrigues <ni...@apache.org>
    (cherry picked from commit f31db4c397ea035259a21666551a381ef747ba1d)
---
 docs/.gitignore                                    |    24 +
 docs/docz-lib/config/aliases.js                    |     3 +
 docs/docz-lib/config/menu.js                       |   103 +
 docs/docz-lib/config/versions.js                   |    39 +
 docs/docz-lib/docz-core/dist/bundler/build.d.ts    |     2 +
 docs/docz-lib/docz-core/dist/bundler/config.d.ts   |     4 +
 .../docz-lib/docz-core/dist/bundler/devserver.d.ts |    25 +
 docs/docz-lib/docz-core/dist/bundler/index.d.ts    |     4 +
 docs/docz-lib/docz-core/dist/bundler/loaders.d.ts  |    17 +
 docs/docz-lib/docz-core/dist/bundler/minifier.d.ts |     3 +
 docs/docz-lib/docz-core/dist/bundler/plugins.d.ts  |    11 +
 docs/docz-lib/docz-core/dist/bundler/server.d.ts   |     6 +
 docs/docz-lib/docz-core/dist/cli.d.ts              |     5 +
 docs/docz-lib/docz-core/dist/commands/build.d.ts   |     1 +
 docs/docz-lib/docz-core/dist/commands/dev.d.ts     |     1 +
 docs/docz-lib/docz-core/dist/commands/index.d.ts   |     3 +
 docs/docz-lib/docz-core/dist/commands/serve.d.ts   |     1 +
 docs/docz-lib/docz-core/dist/config/argv.d.ts      |   128 +
 docs/docz-lib/docz-core/dist/config/babel.d.ts     |     8 +
 docs/docz-lib/docz-core/dist/config/docz.d.ts      |    22 +
 docs/docz-lib/docz-core/dist/config/env.d.ts       |    10 +
 docs/docz-lib/docz-core/dist/config/paths.d.ts     |    43 +
 docs/docz-lib/docz-core/dist/index.d.ts            |    14 +
 docs/docz-lib/docz-core/dist/index.esm.js          |  2008 ++++
 docs/docz-lib/docz-core/dist/index.js              |  2024 ++++
 docs/docz-lib/docz-core/dist/lib/Bundler.d.ts      |    35 +
 docs/docz-lib/docz-core/dist/lib/DataServer.d.ts   |    28 +
 docs/docz-lib/docz-core/dist/lib/Entries.d.ts      |    13 +
 docs/docz-lib/docz-core/dist/lib/Entry.d.ts        |    33 +
 docs/docz-lib/docz-core/dist/lib/Plugin.d.ts       |    49 +
 docs/docz-lib/docz-core/dist/lib/Socket.d.ts       |     8 +
 docs/docz-lib/docz-core/dist/states/config.d.ts    |     3 +
 docs/docz-lib/docz-core/dist/states/entries.d.ts   |     4 +
 docs/docz-lib/docz-core/dist/states/index.d.ts     |     3 +
 docs/docz-lib/docz-core/dist/states/props.d.ts     |     3 +
 .../docz-core/dist/templates/imports.tpl.js        |     4 +
 .../docz-core/dist/templates/index.tpl.html        |    15 +
 .../docz-lib/docz-core/dist/templates/index.tpl.js |    17 +
 docs/docz-lib/docz-core/dist/templates/root.tpl.js |    24 +
 .../docz-core/dist/utils/docgen/index.d.ts         |     2 +
 .../docz-core/dist/utils/docgen/javascript.d.ts    |     5 +
 .../docz-core/dist/utils/docgen/typescript.d.ts    |     6 +
 docs/docz-lib/docz-core/dist/utils/on-signal.d.ts  |     1 +
 .../docz-core/dist/utils/open-browser.d.ts         |    11 +
 docs/docz-lib/docz-core/dist/utils/parse-html.d.ts |    11 +
 docs/docz-lib/docz-core/dist/utils/repo-info.d.ts  |     3 +
 docs/docz-lib/docz/bin/index.js                    |     2 +
 docs/docz-lib/docz/dist/Playground.esm.js          |    42 +
 docs/docz-lib/docz/dist/Playground.js              |    44 +
 docs/docz-lib/docz/dist/chunk.esm.js               |   311 +
 docs/docz-lib/docz/dist/chunk.js                   |   324 +
 .../docz/dist/components/AsyncComponent.d.ts       |     7 +
 .../docz/dist/components/AsyncPlayground.d.ts      |     2 +
 docs/docz-lib/docz/dist/components/AsyncRoute.d.ts |    13 +
 docs/docz-lib/docz/dist/components/Link.d.ts       |     4 +
 docs/docz-lib/docz/dist/components/Playground.d.ts |    13 +
 docs/docz-lib/docz/dist/components/Props.d.ts      |    65 +
 docs/docz-lib/docz/dist/components/Routes.d.ts     |     8 +
 docs/docz-lib/docz/dist/hooks/index.d.ts           |     7 +
 docs/docz-lib/docz/dist/hooks/useComponents.d.ts   |    44 +
 docs/docz-lib/docz/dist/hooks/useConfig.d.ts       |     7 +
 docs/docz-lib/docz/dist/hooks/useDataServer.d.ts   |     1 +
 docs/docz-lib/docz/dist/hooks/useDocs.d.ts         |     2 +
 docs/docz-lib/docz/dist/hooks/useMenus.d.ts        |     8 +
 docs/docz-lib/docz/dist/hooks/usePrevious.d.ts     |     1 +
 docs/docz-lib/docz/dist/hooks/useWindowSize.d.ts   |     6 +
 docs/docz-lib/docz/dist/index.d.ts                 |     8 +
 docs/docz-lib/docz/dist/index.esm.js               |   302 +
 docs/docz-lib/docz/dist/index.js                   |   321 +
 docs/docz-lib/docz/dist/state.d.ts                 |    59 +
 docs/docz-lib/docz/dist/theme.d.ts                 |    10 +
 docs/docz-lib/docz/dist/utils/createState.d.ts     |    13 +
 docs/docz-lib/docz/dist/utils/helpers.d.ts         |     3 +
 docs/docz-lib/docz/dist/utils/humanize-prop.d.ts   |     2 +
 docs/doczrc.js                                     |    51 +
 docs/package-lock.json                             | 11891 +++++++++++++++++++
 docs/package.json                                  |    39 +
 docs/pom.xml                                       |   104 +-
 docs/src/documents/Asf/asfinfo.md                  |    17 +
 docs/src/documents/ClassificationPropagation.md    |    94 +
 docs/src/documents/Downloads/Downloads.md          |   187 +
 docs/src/{site/markdown => documents}/Glossary.md  |   154 +-
 .../HighAvailability.md}                           |   167 +-
 .../HighLevelArchitecture.md}                      |    55 +-
 .../Hook/Hook-Falcon.md}                           |    48 +-
 .../Hook/Hook-HBase.md}                            |    72 +-
 .../Hook/Hook-Hive.md}                             |   114 +-
 docs/src/documents/Hook/Hook-Kafka.md              |    50 +
 .../Hook/Hook-Sqoop.md}                            |    60 +-
 .../Hook/Hook-Storm.md}                            |    53 +-
 .../Import-Export/Export-API.md}                   |    96 +-
 .../src/documents/Import-Export/Export-HDFS-API.md |    52 +
 .../Import-Export}/ExportImportAudits.md           |    38 +-
 .../Import-Export/Import-API-Options.md}           |   102 +-
 .../Import-Export/Import-API.md}                   |    94 +-
 .../documents/Import-Export/Import-Export-API.md   |    56 +
 .../Import-Export}/ImportEntityTransforms.md       |    67 +-
 .../Import-Export}/Incremental-Export.md           |    19 +-
 .../index.twiki => documents/Introduction.md}      |    75 +-
 .../Migration/Migration-0.8-to-1.0.md}             |    99 +-
 .../markdown => documents/Misc}/AtlasServer.md     |    70 +-
 .../Misc/ReplicatedAttributes.md}                  |     7 +-
 docs/src/documents/Misc/SoftReference.md           |    40 +
 docs/src/documents/Notifications.md                |    87 +
 docs/src/documents/Project-Info/Mailing-Lists.md   |    18 +
 docs/src/documents/Project-Info/issue-tracking.md  |    23 +
 docs/src/documents/Project-Info/project-info.md    |    22 +
 docs/src/documents/Project-Info/project-license.md |   279 +
 .../documents/Project-Info/source-repository.md    |    33 +
 docs/src/documents/Project-Info/team-list.md       |    19 +
 docs/src/documents/RestAPI.md                      |    13 +
 .../Search/Search-Advanced.md}                     |   334 +-
 .../Search/Search-Basic.md}                        |    98 +-
 .../documents/Security/AtlasRangerAuthorizer.md    |    83 +
 .../Security/AtlasSimpleAuthorizer.md}             |    63 +-
 docs/src/documents/Security/Authentication.md      |   155 +
 .../Security/AuthorizationModel.md}                |    71 +-
 docs/src/documents/Security/security.md            |   278 +
 docs/src/documents/Setup/BuildInstruction.md       |    81 +
 .../Setup/Configuration.md}                        |   193 +-
 .../Setup/EclipseSetup.md}                         |    63 +-
 .../src/documents/Setup/InstallationInstruction.md |   327 +
 .../Setup/QuickStart.md}                           |    26 +-
 docs/src/documents/Tools/AtlasRepairIndex.md       |    78 +
 .../TypeSystem.twiki => documents/TypeSystem.md}   |   122 +-
 .../Whats-New}/WhatsNew-1.0.md                     |    33 +-
 .../Whats-New}/WhatsNew-2.0.md                     |    49 +-
 .../resources/images/accessories-text-editor.png   |   Bin
 .../resources/images/application-certificate.png   |   Bin
 docs/src/resources/images/atlas-logo-grey.png      |   Bin 0 -> 4935 bytes
 .../src/{site => }/resources/images/atlas-logo.png |   Bin
 .../resources/images/column_lineage_ex1.png        |   Bin
 .../{site => }/resources/images/contact-new.png    |   Bin
 .../resources/images/document-properties.png       |   Bin
 .../{site => }/resources/images/drive-harddisk.png |   Bin
 .../resources/images/image-x-generic.png           |   Bin
 .../resources/images/internet-web-browser.png      |   Bin
 .../resources/images/logos/maven-feather.png       |   Bin
 .../markdown/atlas-server-exp-imp-audits.png       |   Bin
 .../images/markdown/atlas-server-properties.png    |   Bin
 .../images/markdown/category_add_term.png          |   Bin
 .../images/markdown/category_add_term_1.png        |   Bin
 .../images/markdown/category_add_term_2.png        |   Bin
 .../markdown/category_details_with_terms.png       |   Bin
 .../resources/images/markdown/category_view_1.png  |   Bin
 .../resources/images/markdown/category_view_2.png  |   Bin
 .../markdown/category_view_category_context.png    |   Bin
 .../markdown/category_view_category_context_1.png  |   Bin
 .../markdown/category_view_glossary_context.png    |   Bin
 .../images/markdown/entity_add_term_modal.png      |   Bin
 .../markdown/entity_assigned_term_with_tag.png     |   Bin
 .../images/markdown/entity_details_add_term.png    |   Bin
 .../images/markdown/entity_search_add_term.png     |   Bin
 .../images/markdown/term_add_category.png          |   Bin
 .../images/markdown/term_add_classification_1.png  |   Bin
 .../images/markdown/term_add_classification_2.png  |   Bin
 .../images/markdown/term_delete_context.png        |   Bin
 .../resources/images/markdown/term_details.png     |   Bin
 .../markdown/term_details_with_classification.png  |   Bin
 .../images/markdown/term_related_term_1.png        |   Bin
 .../resources/images/markdown/term_search.png      |   Bin
 .../images/markdown/term_view_context.png          |   Bin
 .../images/markdown/term_with_classification.png   |   Bin
 .../images/markdown/terms_related_terms.png        |   Bin
 .../resources/images/markdown/terms_view.png       |   Bin
 .../{site => }/resources/images/network-server.png |   Bin
 .../resources/images/package-x-generic.png         |   Bin
 .../resources/images/twiki/architecture.png        |   Bin
 .../images/twiki/classification-propagation-1.png  |   Bin
 .../images/twiki/classification-propagation-2.png  |   Bin
 .../images/twiki/classification-propagation-3.png  |   Bin
 .../images/twiki/classification-propagation-4.png  |   Bin
 .../images/twiki/classification-propagation-5.png  |   Bin
 .../images/twiki/classification-propagation-6.png  |   Bin
 .../images/twiki/classification-propagation-7.png  |   Bin
 .../images/twiki/classification-propagation-8.png  |   Bin
 .../classification-propagation-entity-delete-1.png |   Bin
 .../classification-propagation-entity-delete-2.png |   Bin
 .../classification-propagation-entity-delete-3.png |   Bin
 .../classification-propagation-entity-delete-4.png |   Bin
 .../resources/images/twiki/guide-class-diagram.png |   Bin
 .../images/twiki/guide-instance-graph.png          |   Bin
 .../resources/images/twiki/ranger-audit.png        |   Bin
 .../resources/images/twiki/ranger-policy-admin.png |   Bin
 .../images/twiki/ranger-policy-entities.png        |   Bin
 .../resources/images/twiki/ranger-policy-types.png |   Bin
 .../images/twiki/search-basic-hive_column-PII.png  |   Bin
 ...arch-basic-hive_table-customers-or-provider.png |   Bin
 ...ch-basic-hive_table-customers-owner_is_hive.png |   Bin
 .../twiki/search-basic-hive_table-customers.png    |   Bin
 .../src/{site => }/resources/images/window-new.png |   Bin
 docs/src/site/markdown/AtlasRepairIndex.md         |    59 -
 docs/src/site/markdown/SoftReference.md            |    31 -
 docs/src/site/twiki/Atlas-Authentication.twiki     |   141 -
 .../Atlas-Authorization-Ranger-Authorizer.twiki    |    63 -
 docs/src/site/twiki/Bridge-Kafka.twiki             |    37 -
 .../src/site/twiki/ClassificationPropagation.twiki |   108 -
 docs/src/site/twiki/Export-HDFS-API.twiki          |    81 -
 docs/src/site/twiki/Import-Export-API.twiki        |    43 -
 docs/src/site/twiki/InstallationSteps.twiki        |   348 -
 docs/src/site/twiki/LICENSE.txt                    |     3 -
 docs/src/site/twiki/Notifications.twiki            |    73 -
 docs/src/site/twiki/security.twiki                 |   263 -
 .../components/shared/Header/GithubLink/index.js   |    64 +
 .../shared/Header/HeaderDropDown/Basic.js          |    69 +
 .../shared/Header/HeaderDropDown/index.js          |    46 +
 docs/theme/components/shared/Header/index.js       |    46 +
 docs/theme/components/shared/Img/index.js          |    37 +
 docs/theme/components/shared/LegalFooter/index.js  |    89 +
 docs/theme/components/shared/Logo/index.js         |    96 +
 docs/theme/components/shared/Main/index.js         |    23 +
 docs/theme/components/shared/Search/index.js       |    71 +
 docs/theme/components/shared/Sidebar/Docz.js       |    27 +
 docs/theme/components/shared/Sidebar/Hamburger.js  |   135 +
 docs/theme/components/shared/Sidebar/Menu.js       |   127 +
 .../components/shared/Sidebar/MenuHeadings.js      |    51 +
 docs/theme/components/shared/Sidebar/MenuLink.js   |   191 +
 docs/theme/components/shared/Sidebar/SmallLink.js  |    90 +
 docs/theme/components/shared/Sidebar/SubMenu.js    |   137 +
 docs/theme/components/shared/Sidebar/index.js      |   478 +
 docs/theme/components/shared/TeamList/index.js     |   140 +
 docs/theme/components/shared/common/CustomLink.js  |    30 +
 docs/theme/components/shared/index.js              |    21 +
 docs/theme/components/ui/Blockquote.js             |    32 +
 docs/theme/components/ui/Button.js                 |    31 +
 docs/theme/components/ui/CodeMirror/index.js       |   150 +
 .../theme/components/ui/CodeMirror/ps-scrollbar.js |   115 +
 docs/theme/components/ui/CodeMirror/themes/dark.js |   151 +
 .../theme/components/ui/CodeMirror/themes/index.js |    20 +
 .../theme/components/ui/CodeMirror/themes/light.js |   125 +
 docs/theme/components/ui/InlineCode.js             |    26 +
 docs/theme/components/ui/Link.js                   |    70 +
 docs/theme/components/ui/Loading.js                |   108 +
 docs/theme/components/ui/NotFound.js               |    58 +
 docs/theme/components/ui/OrderedList.js            |    39 +
 docs/theme/components/ui/Page.js                   |   106 +
 docs/theme/components/ui/Paragraph.js              |    25 +
 docs/theme/components/ui/Pre.js                    |    25 +
 docs/theme/components/ui/Props/PropsRaw.js         |   116 +
 docs/theme/components/ui/Props/PropsTable.js       |   157 +
 docs/theme/components/ui/Props/index.js            |    90 +
 docs/theme/components/ui/Table.js                  |   111 +
 docs/theme/components/ui/UnorderedList.js          |    38 +
 docs/theme/components/ui/index.js                  |    45 +
 docs/theme/config.js                               |    31 +
 docs/theme/index.js                                |    55 +
 docs/theme/styles/colors.js                        |    34 +
 docs/theme/styles/fonts.js                         |    32 +
 docs/theme/styles/global.js                        |    47 +
 docs/theme/styles/index.js                         |   105 +
 docs/theme/styles/modes.js                         |    73 +
 docs/theme/styles/responsive.js                    |    32 +
 docs/theme/styles/styled-colors.js                 |    23 +
 docs/theme/utils/hotkeys.js                        |    30 +
 docs/theme/utils/storage.js                        |    80 +
 docs/theme/utils/theme.js                          |    35 +
 docs/theme/utils/utils.js                          |    33 +
 pom.xml                                            |     5 +
 258 files changed, 26045 insertions(+), 2361 deletions(-)

diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..9cd933f
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,24 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+.DS_Store
+.bower-*/
+.idea/
+node_modules/
+.docz
+target/
+*.log
+*.tgz
diff --git a/docs/docz-lib/config/aliases.js b/docs/docz-lib/config/aliases.js
new file mode 100644
index 0000000..e7e49eb
--- /dev/null
+++ b/docs/docz-lib/config/aliases.js
@@ -0,0 +1,3 @@
+export default {
+    '~docz-theme-component': '../node_modules/theme/dist/components/ui/index.ts'
+}
\ No newline at end of file
diff --git a/docs/docz-lib/config/menu.js b/docs/docz-lib/config/menu.js
new file mode 100644
index 0000000..13fe4a0
--- /dev/null
+++ b/docs/docz-lib/config/menu.js
@@ -0,0 +1,103 @@
+export default [
+    "Introduction",
+    {
+        name: "Documentation",
+        menu: [
+            {
+                name: "Features",
+                menu: [
+                    "High Level Architecture",
+                    "Type System",
+                    "Glossary",
+                    "Classification Propagation",
+                    "Notifications",
+                    "High Availability"
+                ]
+            },
+            {
+                name: "Search",
+                menu: [
+                    "Basic Search",
+                    "Advance Search"
+                ]
+            },
+            {
+                name: "Hooks",
+                menu: [
+                    "HBase",
+                    "Hive",
+                    "Sqoop",
+                    "Storm",
+                    "Kafka",
+                    "Falcon"
+                ]
+            },
+            {
+                name: "Import/Export",
+                menu: [
+                    "Import API",
+                    "Import API Options",
+                    "Import Entity Transforms",
+                    "Import Export API",
+                    "Export API",
+                    "Export HDFS API",
+                    "Export Import Audits",
+                    "Incremental Export"
+                ]
+            },
+            {
+                name: "Security",
+                menu: [
+                    "Security Details",
+                    "Authentication",
+                    "Authorization Model",
+                    "Atlas Simple Authorizer",
+                    "Atlas Ranger Authorizer"
+                ]
+            },
+            {
+                name: "Setup",
+                menu: [
+                    "Quick Start",
+                    "Configuration",
+                    "Build Instruction",
+                    "Installation Instruction"
+                ]
+            },
+            "REST API",
+            {
+                name: "Tools",
+                menu: [
+                    "Atlas Repair Index"
+                ]
+            },
+            {
+                name: "Misc",
+                menu: [
+                    "Atlas Server",
+                    "Replicated Attributes",
+                    "Soft Reference"
+                ]
+            }
+        ]
+    },  {
+        name: "Downloads",
+        menu: [
+            "Download",
+            {
+                name: "Whats New",
+                menu: ["WhatsNew-2.0", "WhatsNew-1.0"]
+            },
+            "Migration"
+        ]
+    } ,"For Developers",
+    {
+        name: "Project Info", menu: [
+            "Project Information",
+            "Mailing Lists",
+            "Team List",
+            "Issue Tracking",
+            "License",
+            "Source Repository"
+        ]
+    },  "ASF" ];
diff --git a/docs/docz-lib/config/versions.js b/docs/docz-lib/config/versions.js
new file mode 100644
index 0000000..6c86283
--- /dev/null
+++ b/docs/docz-lib/config/versions.js
@@ -0,0 +1,39 @@
+export default  [
+	{ id: 1, href: "/Doc-test/", title: "Latest", label: "Latest" },
+	{ id: 2, href: "/2.0.0/index.html", title: "2.0.0", label: "2.0.0" },
+	{ id: 4, href: "/1.1.0/index.html", title: "1.1.0", label: "1.1.0" },
+	{ id: 5, href: "/1.0.0/index.html", title: "1.0.0", label: "1.0.0" },
+	{ id: 7, href: "/0.8.3/index.html", title: "0.8.3", label: "0.8.3" },
+	{ id: 8, href: "/0.8.2/index.html", title: "0.8.2", label: "0.8.2" },
+	{ id: 9, href: "/0.8.1/index.html", title: "0.8.1", label: "0.8.1" },
+	{
+		id: 10,
+		href: "/0.8.0-incubating/index.html",
+		title: "0.8-incubating",
+		label: "0.8-incubating"
+	},
+	{
+		id: 11,
+		href: "/0.7.1-incubating/index.html",
+		title: "0.7.1-incubating",
+		label: "0.7.1-incubating"
+	},
+	{
+		id: 12,
+		href: "/0.7.0-incubating/index.html",
+		title: "0.7-incubating",
+		label: "0.7-incubating"
+	},
+	{
+		id: 13,
+		href: "/0.6.0-incubating/index.html",
+		title: "0.6-incubating",
+		label: "0.6-incubating"
+	},
+	{
+		id: 14,
+		href: "/0.5.0-incubating/index.html",
+		title: "0.5-incubating",
+		label: "0.5-incubating"
+	}
+];
diff --git a/docs/docz-lib/docz-core/dist/bundler/build.d.ts b/docs/docz-lib/docz-core/dist/bundler/build.d.ts
new file mode 100644
index 0000000..2d42a3b
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/build.d.ts
@@ -0,0 +1,2 @@
+import webpack from 'webpack';
+export declare const build: (config: webpack.Configuration, dist: string, publicDir: string) => Promise<void>;
diff --git a/docs/docz-lib/docz-core/dist/bundler/config.d.ts b/docs/docz-lib/docz-core/dist/bundler/config.d.ts
new file mode 100644
index 0000000..d5f2307
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/config.d.ts
@@ -0,0 +1,4 @@
+import { Configuration } from 'webpack';
+import { ServerHooks as Hooks } from '../lib/Bundler';
+import { Config as Args, Env } from '../config/argv';
+export declare const createConfig: (args: Args, env: Env) => (hooks: Hooks) => Promise<Configuration>;
diff --git a/docs/docz-lib/docz-core/dist/bundler/devserver.d.ts b/docs/docz-lib/docz-core/dist/bundler/devserver.d.ts
new file mode 100644
index 0000000..eccf794
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/devserver.d.ts
@@ -0,0 +1,25 @@
+import { Config as Args } from '../config/argv';
+import { ServerHooks } from '../lib/Bundler';
+export declare const devServerConfig: (hooks: ServerHooks, args: Args) => {
+    publicPath: string;
+    compress: boolean;
+    logLevel: string;
+    clientLogLevel: string;
+    contentBase: string[];
+    watchContentBase: boolean;
+    hot: boolean;
+    quiet: boolean;
+    open: boolean;
+    watchOptions: {
+        ignored: any;
+    };
+    overlay: boolean;
+    host: string;
+    port: number;
+    historyApiFallback: {
+        disableDotRule: boolean;
+    };
+    disableHostCheck: boolean;
+    before(app: any, server: any): void;
+    after(app: any): void;
+};
diff --git a/docs/docz-lib/docz-core/dist/bundler/index.d.ts b/docs/docz-lib/docz-core/dist/bundler/index.d.ts
new file mode 100644
index 0000000..243ebec
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/index.d.ts
@@ -0,0 +1,4 @@
+import { Configuration as CFG } from 'webpack';
+import { Bundler } from '../lib/Bundler';
+import { Config as Args, Env } from '../config/argv';
+export declare const bundler: (args: Args, env: Env) => Bundler<CFG>;
diff --git a/docs/docz-lib/docz-core/dist/bundler/loaders.d.ts b/docs/docz-lib/docz-core/dist/bundler/loaders.d.ts
new file mode 100644
index 0000000..d8c5bce
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/loaders.d.ts
@@ -0,0 +1,17 @@
+import Config from 'webpack-chain';
+import { Config as Args } from '../config/argv';
+import { BabelRC } from '../config/babel';
+export declare const sourceMaps: (config: Config, args: Args) => void;
+export interface AddScriptLoaderOpts {
+    threadLoader?: boolean;
+    rule: Config.Rule;
+    babelrc: BabelRC;
+    args: Args;
+}
+export declare const js: (config: Config, args: Args, babelrc: BabelRC) => void;
+export declare const ts: (config: Config, args: Args, babelrc: BabelRC) => void;
+export declare const mdx: (config: Config, args: Args, babelrc: BabelRC) => void;
+export declare const images: (config: Config) => void;
+export declare const svg: (config: Config) => void;
+export declare const media: (config: Config) => void;
+export declare const fonts: (config: Config) => void;
diff --git a/docs/docz-lib/docz-core/dist/bundler/minifier.d.ts b/docs/docz-lib/docz-core/dist/bundler/minifier.d.ts
new file mode 100644
index 0000000..3cbf010
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/minifier.d.ts
@@ -0,0 +1,3 @@
+import Config from 'webpack-chain';
+import { Config as Args } from '../config/argv';
+export declare const minifier: (config: Config, args: Args) => void;
diff --git a/docs/docz-lib/docz-core/dist/bundler/plugins.d.ts b/docs/docz-lib/docz-core/dist/bundler/plugins.d.ts
new file mode 100644
index 0000000..f931cb8
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/plugins.d.ts
@@ -0,0 +1,11 @@
+import Config from 'webpack-chain';
+import { Config as Args, Env } from '../config/argv';
+export declare const assets: (config: Config, args: Args, env: Env) => void;
+export declare const analyzer: (config: Config) => void;
+export declare const injections: (config: Config, args: Args, env: Env) => void;
+export declare const ignore: (config: Config) => void;
+export declare const hot: (config: Config) => void;
+export declare const html: (config: Config, args: Args, env: Env) => Promise<void>;
+export declare const webpackBar: (config: Config, args: Args) => void;
+export declare const watchNodeModulesPlugin: (config: Config) => void;
+export declare const notFoundPlugin: (config: Config) => void;
diff --git a/docs/docz-lib/docz-core/dist/bundler/server.d.ts b/docs/docz-lib/docz-core/dist/bundler/server.d.ts
new file mode 100644
index 0000000..3642ce2
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/bundler/server.d.ts
@@ -0,0 +1,6 @@
+import webpack from 'webpack';
+import { Config as Args } from '../config/argv';
+import { ServerHooks as Hooks } from '../lib/Bundler';
+export declare const server: (args: Args) => (config: webpack.Configuration, hooks: Hooks) => Promise<{
+    start: () => Promise<any>;
+}>;
diff --git a/docs/docz-lib/docz-core/dist/cli.d.ts b/docs/docz-lib/docz-core/dist/cli.d.ts
new file mode 100644
index 0000000..2da5a6c
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/cli.d.ts
@@ -0,0 +1,5 @@
+export declare const cli: () => {
+    [x: string]: unknown;
+    _: string[];
+    $0: string;
+};
diff --git a/docs/docz-lib/docz-core/dist/commands/build.d.ts b/docs/docz-lib/docz-core/dist/commands/build.d.ts
new file mode 100644
index 0000000..60ed76b
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/commands/build.d.ts
@@ -0,0 +1 @@
+export declare const build: (args: any) => Promise<void>;
diff --git a/docs/docz-lib/docz-core/dist/commands/dev.d.ts b/docs/docz-lib/docz-core/dist/commands/dev.d.ts
new file mode 100644
index 0000000..83c9fc6
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/commands/dev.d.ts
@@ -0,0 +1 @@
+export declare const dev: (args: any) => Promise<void>;
diff --git a/docs/docz-lib/docz-core/dist/commands/index.d.ts b/docs/docz-lib/docz-core/dist/commands/index.d.ts
new file mode 100644
index 0000000..ed3e4e4
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/commands/index.d.ts
@@ -0,0 +1,3 @@
+export { dev } from './dev';
+export { build } from './build';
+export { serve } from './serve';
diff --git a/docs/docz-lib/docz-core/dist/commands/serve.d.ts b/docs/docz-lib/docz-core/dist/commands/serve.d.ts
new file mode 100644
index 0000000..a588871
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/commands/serve.d.ts
@@ -0,0 +1 @@
+export declare const serve: (args: any) => Promise<void>;
diff --git a/docs/docz-lib/docz-core/dist/config/argv.d.ts b/docs/docz-lib/docz-core/dist/config/argv.d.ts
new file mode 100644
index 0000000..5cce012
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/config/argv.d.ts
@@ -0,0 +1,128 @@
+import { Argv as Yargs } from 'yargs';
+import { Plugin } from '../lib/Plugin';
+import { BabelRC } from '../config/babel';
+export declare type Env = 'production' | 'development';
+export declare type ThemeConfig = Record<string, any>;
+export interface DocgenConfig {
+    handlers?: any[];
+    resolver?: (ast: any, recast: any) => any;
+    propFilter?: (prop: any) => boolean;
+    searchPath: string;
+}
+export interface Menu {
+    name: string;
+    route?: string;
+    href?: string;
+    menu?: Menu[];
+}
+export interface HtmlContext {
+    lang: string;
+    favicon?: string;
+    head?: {
+        meta: any[];
+        links: any[];
+        raw: string;
+        scripts: any[];
+    };
+    body?: {
+        raw: string;
+        scripts: any[];
+    };
+}
+export interface Argv {
+    base: string;
+    src: string;
+    files: string | string[];
+    ignore: string[];
+    watchIgnore: string;
+    public: string;
+    dest: string;
+    editBranch: string;
+    config: string;
+    debug: boolean;
+    clearConsole: boolean;
+    typescript: boolean;
+    propsParser: boolean;
+    host: string;
+    port: number;
+    websocketPort: number;
+    websocketHost: string;
+    native: boolean;
+    codeSandbox: boolean;
+    sourcemaps: boolean;
+    notUseSpecifiers: boolean;
+    title: string;
+    description: string;
+    theme: string;
+    wrapper?: string;
+    indexHtml?: string;
+    /** slugify separator */
+    separator: string;
+}
+export interface Config extends Argv {
+    paths: Record<string, any>;
+    plugins: Plugin[];
+    mdPlugins: any[];
+    hastPlugins: any[];
+    menu: Menu[];
+    htmlContext: HtmlContext;
+    themeConfig: ThemeConfig;
+    docgenConfig: DocgenConfig;
+    filterComponents: (files: string[]) => string[];
+    modifyBundlerConfig<C>(config: C, dev: boolean, args: Config): C;
+    modifyBabelRc(babelrc: BabelRC, args: Config): BabelRC;
+    onCreateWebpackChain<C>(c: C, dev: boolean, args: Config): void;
+}
+export declare const setArgs: (yargs: Yargs<{}>) => Yargs<{
+    base: any;
+} & {
+    source: any;
+} & {
+    files: any;
+} & {
+    ignore: any;
+} & {
+    public: any;
+} & {
+    dest: any;
+} & {
+    editBranch: any;
+} & {
+    config: any;
+} & {
+    title: any;
+} & {
+    description: any;
+} & {
+    theme: any;
+} & {
+    typescript: any;
+} & {
+    propsParser: any;
+} & {
+    wrapper: any;
+} & {
+    indexHtml: any;
+} & {
+    debug: any;
+} & {
+    clearConsole: any;
+} & {
+    host: any;
+} & {
+    port: any;
+} & {
+    websocketHost: any;
+} & {
+    websocketPort: any;
+} & {
+    native: any;
+} & {
+    codeSandbox: any;
+} & {
+    sourcemaps: any;
+} & {
+    separator: any;
+} & {
+    open: boolean;
+}>;
diff --git a/docs/docz-lib/docz-core/dist/config/babel.d.ts b/docs/docz-lib/docz-core/dist/config/babel.d.ts
new file mode 100644
index 0000000..09f2ba2
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/config/babel.d.ts
@@ -0,0 +1,8 @@
+import { Config, Env } from '../config/argv';
+export interface BabelRC {
+    presets: any[];
+    plugins: any[];
+    cacheDirectory?: boolean;
+    babelrc?: boolean;
+}
+export declare const getBabelConfig: (args: Config, env: Env, typescript?: boolean | undefined) => Promise<BabelRC>;
diff --git a/docs/docz-lib/docz-core/dist/config/docz.d.ts b/docs/docz-lib/docz-core/dist/config/docz.d.ts
new file mode 100644
index 0000000..5ea09e0
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/config/docz.d.ts
@@ -0,0 +1,22 @@
+import { Arguments } from 'yargs';
+import { BabelRC } from '../config/babel';
+import { Config, Argv } from '../config/argv';
+export declare const doczRcBaseConfig: {
+    htmlContext: {
+        lang: string;
+        favicon: string;
+    };
+    themeConfig: {};
+    docgenConfig: {};
+    filterComponents: (files: string[]) => string[];
+    modifyBundlerConfig: (config: any) => any;
+    modifyBabelRc: (babelrc: BabelRC) => BabelRC;
+    onCreateWebpackChain: () => null;
+    menu: never[];
+    plugins: never[];
+    mdPlugins: never[];
+    hastPlugins: never[];
+    ignore: string[];
+};
+export declare const getBaseConfig: (argv: Arguments<Argv>, custom?: Partial<Config> | undefined) => Config;
+export declare const parseConfig: (argv: Arguments<Argv>, custom?: Partial<Config> | undefined) => Promise<Config>;
diff --git a/docs/docz-lib/docz-core/dist/config/env.d.ts b/docs/docz-lib/docz-core/dist/config/env.d.ts
new file mode 100644
index 0000000..fe5afd0
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/config/env.d.ts
@@ -0,0 +1,10 @@
+export declare const setEnv: (env: string) => void;
+export interface RT {
+    [key: string]: any;
+}
+export declare const getClientEnvironment: (publicUrl: string) => {
+    raw: RT;
+    stringified: {
+        'process.env': {};
+    };
+};
diff --git a/docs/docz-lib/docz-core/dist/config/paths.d.ts b/docs/docz-lib/docz-core/dist/config/paths.d.ts
new file mode 100644
index 0000000..f393eec
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/config/paths.d.ts
@@ -0,0 +1,43 @@
+export declare const ensureSlash: (filepath: any, needsSlash: boolean) => any;
+export declare const root: string;
+export declare const resolveApp: (to: string) => string;
+export declare const resolveOwn: (to: string) => string;
+export interface Paths {
+    root: string;
+    templates: string;
+    packageJson: string;
+    servedPath: (base: string) => string;
+    docz: string;
+    app: string;
+    cache: string;
+    appPublic: string;
+    appNodeModules: string;
+    appPackageJson: string;
+    appYarnLock: string;
+    ownNodeModules: string;
+    getDist: (dest: string) => string;
+    distPublic: (dest: string) => string;
+    importsJs: string;
+    rootJs: string;
+    indexJs: string;
+    indexHtml: string;
+    db: string;
+}
+export declare const templates: string;
+export declare const packageJson: string;
+export declare const servedPath: (base: string) => any;
+export declare const docz: string;
+export declare const app: string;
+export declare const cache: string;
+export declare const appPublic: string;
+export declare const appNodeModules: string;
+export declare const appPackageJson: string;
+export declare const appYarnLock: string;
+export declare const ownNodeModules: string;
+export declare const getDist: (dest: string) => string;
+export declare const distPublic: (dest: string) => string;
+export declare const importsJs: string;
+export declare const rootJs: string;
+export declare const indexJs: string;
+export declare const indexHtml: string;
+export declare const db: string;
diff --git a/docs/docz-lib/docz-core/dist/index.d.ts b/docs/docz-lib/docz-core/dist/index.d.ts
new file mode 100644
index 0000000..61609dc
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/index.d.ts
@@ -0,0 +1,14 @@
+/** cli exports */
+export { cli } from './cli';
+/** config exports */
+export { parseConfig, getBaseConfig } from './config/docz';
+export { Config, setArgs } from './config/argv';
+export { BabelRC } from './config/babel';
+/** states */
+import * as states from './states';
+export { states };
+/** lib exports */
+export { Plugin, createPlugin } from './lib/Plugin';
+export { DataServer } from './lib/DataServer';
+export { Entries } from './lib/Entries';
+export { Entry } from './lib/Entry';
diff --git a/docs/docz-lib/docz-core/dist/index.esm.js b/docs/docz-lib/docz-core/dist/index.esm.js
new file mode 100644
index 0000000..1df3339
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/index.esm.js
@@ -0,0 +1,2008 @@
+import { command } from 'yargs';
+import _get from 'lodash/fp/get';
+import { readJsonSync, ensureDir, remove as remove$1, outputJSONSync, emptyDir, pathExists, copy, readFileSync, readJSONSync, pathExistsSync, existsSync as existsSync$1 } from 'fs-extra';
+import { get, set } from 'env-dot-prop';
+import humanize from 'humanize-string';
+import titleize from 'titleize';
+import { realpathSync, existsSync } from 'fs';
+import { join, resolve, delimiter, isAbsolute, relative, parse, extname, normalize, dirname } from 'path';
+import { sync } from 'resolve';
+import logger__default, { error, Signale, warn, fatal, log } from 'signale';
+import { __rest } from 'tslib';
+import { getParsedData, headingsFromAst, parseMdx } from 'docz-utils/lib/mdast';
+import { compiled, touch } from 'docz-utils/lib/fs';
+import glob from 'fast-glob';
+import { createHash } from 'crypto';
+import slugify from '@sindresorhus/slugify';
+import _isFunction from 'lodash/fp/isFunction';
+import pReduce from 'p-reduce';
+import getPkgRepo from 'get-pkg-repo';
+import findup from 'find-up';
+import WS from 'ws';
+import _merge from 'lodash/fp/merge';
+import _omit from 'lodash/fp/omit';
+import { loadFrom, load, finds } from 'load-cfg';
+import detectPort from 'detect-port';
+import Config from 'webpack-chain';
+import frontmatter from 'remark-frontmatter';
+import remarkDocz from 'remark-docz';
+import rehypeDocz from 'rehype-docz';
+import slug from 'rehype-slug';
+import webpack, { IgnorePlugin, HotModuleReplacementPlugin } from 'webpack';
+import webpackBarPlugin from 'webpackbar';
+import { minify } from 'html-minifier';
+import miniHtmlWebpack, { generateCSSReferences, generateJSReferences } from 'mini-html-webpack-plugin';
+import manifestPlugin from 'webpack-manifest-plugin';
+import watchMissingNodeModules from 'react-dev-utils/WatchMissingNodeModulesPlugin';
+import 'react-dev-utils/ModuleNotFoundPlugin';
+import { BundleAnalyzerPlugin } from 'webpack-bundle-analyzer';
+import { TemplateTag, replaceResultTransformer, trimResultTransformer, oneLineTrim, html as html$1 } from 'common-tags';
+import * as TerserPlugin from 'terser-webpack-plugin';
+import getCacheIdentifier from 'react-dev-utils/getCacheIdentifier';
+import WebpackDevServer from 'webpack-dev-server';
+import { prepareUrls, createCompiler } from 'react-dev-utils/WebpackDevServerUtils';
+import { static as static$1 } from 'express';
+import errorOverlayMiddleware from 'react-dev-utils/errorOverlayMiddleware';
+import evalSourceMapMiddleware from 'react-dev-utils/evalSourceMapMiddleware';
+import ignoredFiles from 'react-dev-utils/ignoredFiles';
+import chalk$1 from 'chalk';
+import chokidar from 'chokidar';
+import equal from 'fast-deep-equal';
+import get$1 from 'lodash/get';
+import _propEq from 'lodash/fp/propEq';
+import externalProptypesHandler from 'react-docgen-external-proptypes-handler';
+import actualNameHandler from 'react-docgen-actual-name-handler';
+import reactDocgen from 'react-docgen';
+import _entries from 'lodash/fp/entries';
+import _contains from 'lodash/fp/contains';
+import _prop from 'lodash/fp/prop';
+import _isEmpty from 'lodash/fp/isEmpty';
+import reactDocgenTs from 'react-docgen-typescript';
+import ts$1 from 'typescript';
+import spawn$1 from 'cross-spawn';
+
+const ensureSlash = (filepath, needsSlash) => {
+  const hasSlash = filepath.endsWith('/');
+
+  if (hasSlash && !needsSlash) {
+    return filepath.substr(filepath, filepath.length - 1);
+  } else if (!hasSlash && needsSlash) {
+    return `${filepath}/`;
+  } else {
+    return filepath;
+  }
+};
+const root = realpathSync(process.cwd());
+const resolveApp = to => resolve(root, to);
+const resolveOwn = to => resolve(__dirname, '../', to);
+const templates = join(sync('docz-core'), '../templates');
+const packageJson = resolveApp('package.json');
+const servedPath = base => ensureSlash(base, true);
+const docz = resolveApp('.docz');
+const app = resolve(docz, 'app/');
+const cache = resolve(docz, 'cache/');
+const appPublic = resolve(docz, 'public/');
+const appNodeModules = resolveApp('node_modules');
+const appPackageJson = resolveApp('package.json');
+const appYarnLock = resolveOwn('yarn.lock');
+const ownNodeModules = resolveOwn('node_modules');
+const getDist = dest => join(root, dest);
+const distPublic = dest => join(dest, 'public/');
+const importsJs = resolve(app, 'imports.js');
+const rootJs = resolve(app, 'root.jsx');
+const indexJs = resolve(app, 'index.jsx');
+const indexHtml = resolve(app, 'index.html');
+const db = resolve(app, 'db.json');
+
+var paths = /*#__PURE__*/Object.freeze({
+  ensureSlash: ensureSlash,
+  root: root,
+  resolveApp: resolveApp,
+  resolveOwn: resolveOwn,
+  templates: templates,
+  packageJson: packageJson,
+  servedPath: servedPath,
+  docz: docz,
+  app: app,
+  cache: cache,
+  appPublic: appPublic,
+  appNodeModules: appNodeModules,
+  appPackageJson: appPackageJson,
+  appYarnLock: appYarnLock,
+  ownNodeModules: ownNodeModules,
+  getDist: getDist,
+  distPublic: distPublic,
+  importsJs: importsJs,
+  rootJs: rootJs,
+  indexJs: indexJs,
+  indexHtml: indexHtml,
+  db: db
+});
+
+const getEnv = (val, defaultValue = null) => get(val, defaultValue, {
+  parse: true
+});
+
+const getInitialTitle = pkg => {
+  const name = _get('name', pkg) || 'MyDoc';
+  return titleize(humanize(name.replace(/^@.*\//, '')));
+};
+
+const getInitialDescription = pkg => _get('description', pkg) || 'My awesome app using docz';
+
+const setArgs = yargs => {
+  const pkg = readJsonSync(appPackageJson, {
+    throws: false
+  });
+  return yargs.option('base', {
+    type: 'string',
+    default: getEnv('docz.base', '/')
+  }).option('source', {
+    alias: 'src',
+    type: 'string',
+    default: getEnv('docz.source', './')
+  }).option('files', {
+    type: 'string',
+    default: getEnv('docz.files', '**/*.{md,markdown,mdx}')
+  }).option('ignore', {
+    type: 'array',
+    default: getEnv('docz.ignore', [])
+  }).option('public', {
+    type: 'string',
+    default: getEnv('docz.public', '/public')
+  }).option('dest', {
+    alias: 'd',
+    type: 'string',
+    default: getEnv('docz.dest', '.docz/dist')
+  }).option('editBranch', {
+    alias: 'eb',
+    type: 'string',
+    default: getEnv('docz.edit.branch', 'master')
+  }).option('config', {
+    type: 'string',
+    default: getEnv('docz.config', '')
+  }).option('title', {
+    type: 'string',
+    default: getEnv('docz.title', getInitialTitle(pkg))
+  }).option('description', {
+    type: 'string',
+    default: getEnv('docz.description', getInitialDescription(pkg))
+  }).option('theme', {
+    type: 'string',
+    default: getEnv('docz.theme', 'theme')
+  }).option('typescript', {
+    alias: 'ts',
+    type: 'boolean',
+    default: getEnv('docz.typescript', false)
+  }).option('propsParser', {
+    type: 'boolean',
+    default: getEnv('docz.props.parser', true)
+  }).option('wrapper', {
+    type: 'string',
+    default: getEnv('docz.wrapper', null)
+  }).option('indexHtml', {
+    type: 'string',
+    default: getEnv('docz.index.html', null)
+  }).option('debug', {
+    type: 'boolean',
+    default: getEnv('docz.debug', false)
+  }).option('clearConsole', {
+    type: 'boolean',
+    default: getEnv('docz.clear.console', true)
+  }).option('host', {
+    type: 'string',
+    default: getEnv('docz.host', '127.0.0.1')
+  }).option('port', {
+    alias: 'p',
+    type: 'number',
+    default: getEnv('docz.port', 3000)
+  }).option('websocketHost', {
+    type: 'string',
+    default: getEnv('docz.websocket.host', '127.0.0.1')
+  }).option('websocketPort', {
+    type: 'number',
+    default: getEnv('docz.websocket.port', 60505)
+  }).option('native', {
+    type: 'boolean',
+    default: getEnv('docz.native', false)
+  }).option('codeSandbox', {
+    type: 'boolean',
+    default: getEnv('docz.codeSandbox', true)
+  }).option('sourcemaps', {
+    type: 'boolean',
+    default: getEnv('docz.sourcemaps', true)
+  }).option('separator', {
+    type: 'string',
+    default: getEnv('docz.separator', '-')
+  }).option('open', {
+    alias: 'o',
+    describe: 'auto open browser in dev mode',
+    type: 'boolean',
+    default: false
+  });
+};
+
+const populateNodePath = () => {
+  // We support resolving modules according to `NODE_PATH`.
+  // It works similar to `NODE_PATH` in Node itself:
+  // https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
+  // Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
+  // Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
+  // https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421
+  // We also resolve them to make sure all tools using them work consistently.
+  set('node.path', get('node.path', '').split(delimiter).filter(folder => folder && !isAbsolute(folder)).map(folder => resolve(root, folder)).join(delimiter));
+};
+
+const configDotEnv = () => {
+  const NODE_ENV = get('node.env');
+  const dotenv = resolveApp('.env');
+  const dotenvFiles = [`${dotenv}.${NODE_ENV}.local`, `${dotenv}.${NODE_ENV}`, // Don't include `.env.local` for `test` environment
+  // since normally you expect tests to produce the same
+  // results for everyone
+  NODE_ENV !== 'test' && `${dotenv}.local`, dotenv]; // Load environment variables from .env* files. Suppress warnings using silent
+  // if this file is missing. dotenv will never modify any environment variables
+  // that have already been set.  Variable expansion is supported in .env files.
+  // https://github.com/motdotla/dotenv
+
+  dotenvFiles.filter(Boolean).forEach(dotenvFile => {
+    require('dotenv').config({
+      path: dotenvFile
+    });
+  });
+};
+
+const setEnv = env => {
+  set('babel.env', env);
+  set('node.env', env);
+  configDotEnv();
+  populateNodePath();
+};
+const getClientEnvironment = publicUrl => {
+  const APP_TEST = /^(REACT_APP_)|(ANGULAR_APP_)|(VUE_APP_)|(DOCZ_)/i;
+  const raw = Object.keys(process.env).filter(key => APP_TEST.test(key)).reduce((env, key) => {
+    env[key] = process.env[key];
+    return env;
+  }, {
+    // Useful for determining whether we’re running in production mode. Most
+    // importantly, it switches React into the correct mode.
+    NODE_ENV: get('node.env') || 'development',
+    // Useful for resolving the correct path to static assets in `public`. For
+    // example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />. This should
+    // only be used as an escape hatch. Normally you would put images into the `src`
+    // and `import` them in code to get their
+    PUBLIC_URL: publicUrl
+  });
+  const stringified = {
+    'process.env': Object.keys(raw).reduce((env, key) => {
+      env[key] = JSON.stringify(raw[key]);
+      return env;
+    }, {})
+  };
+  return {
+    raw,
+    stringified
+  };
+};
+
+const createId = file => createHash('md5').update(file).digest('hex');
+
+const mountRoute = (base, route) => {
+  if (base === '/') return route;
+  const baseHasSlash = base.endsWith('/');
+  if (baseHasSlash) return base.substr(0, base.length - 1) + route;
+  return base + route;
+};
+
+class Entry {
+  constructor(ast, file, src, config) {
+    const filepath = this.getFilepath(file, src);
+    const parsed = getParsedData(ast);
+    const name = this.getName(filepath, parsed);
+    this.id = createId(file);
+    this.filepath = filepath;
+    this.link = '';
+    this.slug = this.slugify(filepath, config.separator);
+    this.route = this.getRoute(parsed, config.base);
+    this.name = name;
+    this.menu = parsed.menu || '';
+    this.headings = headingsFromAst(ast);
+    this.settings = parsed;
+  }
+
+  setLink(url) {
+    if (url) {
+      this.link = url.replace('{{filepath}}', this.filepath);
+    }
+  }
+
+  getFilepath(file, src) {
+    const srcPath = resolve(root, src);
+    const filepath = relative(srcPath, file);
+
+    if (process.platform === 'win32') {
+      return filepath.split('\\').join('/');
+    }
+
+    return filepath;
+  }
+
+  getName(filepath, parsed) {
+    const filename = humanize(parse(filepath).name);
+    return parsed && parsed.name ? parsed.name : filename;
+  }
+
+  slugify(filepath, separator) {
+    const ext = extname(filepath);
+    const fileWithoutExt = filepath.replace(ext, '');
+    return slugify(fileWithoutExt, {
+      separator
+    });
+  }
+
+  getRoute(parsed, base) {
+    const parsedRoute = _get('route', parsed);
+
+    const route = parsedRoute || `/${this.slug}`;
+    return mountRoute(base, route);
+  }
+
+}
+
+class Plugin {
+  constructor(p) {
+    this.setConfig = p.setConfig;
+    this.modifyBundlerConfig = p.modifyBundlerConfig;
+    this.modifyBabelRc = p.modifyBabelRc;
+    this.modifyFiles = p.modifyFiles;
+    this.onPreCreateApp = p.onPreCreateApp;
+    this.onCreateWebpackChain = p.onCreateWebpackChain;
+    this.onCreateApp = p.onCreateApp;
+    this.onServerListening = p.onServerListening;
+    this.onPreBuild = p.onPreBuild;
+    this.onPostBuild = p.onPostBuild;
+    this.onPreRender = p.onPreRender;
+    this.onPostRender = p.onPostRender;
+  }
+
+  static runPluginsMethod(plugins) {
+    return (method, ...args) => {
+      if (plugins && plugins.length > 0) {
+        for (const plugin of plugins) {
+          const fn = _get(method, plugin);
+
+          _isFunction(fn) && fn(...args);
+        }
+      }
+    };
+  }
+
+  static propsOfPlugins(plugins) {
+    return prop => plugins && plugins.length > 0 ? plugins.map(p => _get(prop, p)).filter(Boolean) : [];
+  }
+
+  static reduceFromPlugins(plugins) {
+    return (method, initial, ...args) => {
+      return [...(plugins || [])].reduce((obj, plugin) => {
+        const fn = _get(method, plugin);
+
+        return fn && _isFunction(fn) ? fn(obj, ...args) : obj;
+      }, initial);
+    };
+  }
+
+  static reduceFromPluginsAsync(plugins) {
+    return (method, initial, ...args) => {
+      return pReduce([...(plugins || [])], (obj, plugin) => {
+        const fn = _get(method, plugin);
+
+        return Promise.resolve(fn && _isFunction(fn) ? fn(obj, ...args) : obj);
+      }, initial);
+    };
+  }
+
+}
+function createPlugin(factory) {
+  return new Plugin(factory);
+}
+
+const parseRepo = () => {
+  try {
+    const pkg = readJsonSync(appPackageJson);
+    return getPkgRepo(pkg);
+  } catch (err) {
+    return null;
+  }
+};
+const getRepoUrl = () => {
+  const repo = parseRepo();
+  return repo && (repo.browsetemplate && repo.browsetemplate.replace('{domain}', repo.domain).replace('{user}', repo.user).replace('{project}', repo.project).replace('{/tree/committish}', '') || repo.browse && repo.browse());
+};
+
+const getBitBucketPath = (branch, relative) => {
+  const querystring = `?mode=edit&spa=0&at=${branch}&fileviewer=file-view-default`;
+  const filepath = join(`/src/${branch}`, relative, `{{filepath}}`);
+  return `${filepath}${querystring}`;
+};
+
+const getTree = (repo, branch, relative) => {
+  const defaultPath = join(`/edit/${branch}`, relative, `{{filepath}}`);
+  const bitBucketPath = getBitBucketPath(branch, relative);
+  if (repo && repo.type === 'bitbucket') return bitBucketPath;
+  return defaultPath;
+};
+
+const getRepoEditUrl = (src, branch) => {
+  try {
+    const repo = parseRepo();
+    const project = parse(findup.sync('.git')).dir;
+    const root$1 = join(root, src);
+    const relative$1 = relative(project, root$1);
+    const tree = getTree(repo, branch, relative$1);
+    return repo && repo.browsetemplate && repo.browsetemplate.replace('{domain}', repo.domain).replace('{user}', repo.user).replace('{project}', repo.project).replace('{/tree/committish}', tree);
+  } catch (err) {
+    return null;
+  }
+};
+
+const fromTemplates = file => join(templates, file);
+
+const mapToObj = map => Array.from(map.entries()).reduce((obj, [key, value]) => Object.assign({}, obj, {
+  [`${key}`]: value
+}), {});
+
+const matchFilesWithSrc = config => files => {
+  const src = relative(root, config.src);
+  return files.map(file => file.startsWith(src) ? file : join(src, file));
+};
+
+const writeAppFiles = async (config, dev) => {
+  const {
+    plugins,
+    theme
+  } = config;
+  const props = Plugin.propsOfPlugins(plugins);
+  const onPreRenders = props('onPreRender');
+  const onPostRenders = props('onPostRender');
+  const isProd = !dev;
+  const root = await compiled(fromTemplates('root.tpl.js'), {
+    minimize: false
+  });
+  const js = await compiled(fromTemplates('index.tpl.js'), {
+    minimize: false
+  });
+  const websocketUrl = `ws://${config.websocketHost}:${config.websocketPort}`;
+  const rawRootJs = root({
+    theme,
+    isProd,
+    wrapper: config.wrapper,
+    websocketUrl
+  });
+  const rawIndexJs = js({
+    onPreRenders,
+    onPostRenders,
+    isProd
+  });
+  await remove$1(rootJs);
+  await remove$1(indexJs);
+  await touch(rootJs, rawRootJs);
+  await touch(indexJs, rawIndexJs);
+};
+
+class Entries {
+  static async writeApp(config, dev) {
+    await ensureDir(app);
+    await writeAppFiles(config, dev);
+  }
+
+  static async writeImports(map) {
+    const imports = await compiled(fromTemplates('imports.tpl.js'));
+    const rawImportsJs = imports({
+      entries: Object.values(map)
+    });
+    await touch(join(app, 'imports.js'), rawImportsJs);
+  }
+
+  constructor(config) {
+    this.repoEditUrl = getRepoEditUrl(config.src, config.editBranch);
+    this.all = new Map();
+
+    this.get = async () => this.getMap(config);
+  }
+
+  async getMap(config) {
+    const {
+      src,
+      files: pattern,
+      ignore,
+      plugins,
+      mdPlugins
+    } = config;
+    const arr = Array.isArray(pattern) ? pattern : [pattern];
+    const toMatch = matchFilesWithSrc(config);
+    const files = await glob(toMatch(arr), {
+      ignore: ['**/node_modules/**'].concat(ignore),
+      onlyFiles: true,
+      unique: true,
+      nocase: true,
+      matchBase: true
+    });
+
+    const createEntry = async file => {
+      try {
+        const ast = await parseMdx(file, mdPlugins);
+        const entry = new Entry(ast, file, src, config);
+        if (this.repoEditUrl) entry.setLink(this.repoEditUrl);
+
+        const {
+          settings
+        } = entry,
+              rest = __rest(entry, ["settings"]);
+
+        return Object.assign({}, settings, rest);
+      } catch (err) {
+        error(err);
+        return null;
+      }
+    };
+
+    const reduce = Plugin.reduceFromPlugins(plugins);
+    const modifiedFiles = reduce('modifyFiles', files);
+    const map = new Map();
+    const entries = await Promise.all(modifiedFiles.map(createEntry).filter(Boolean));
+
+    for (const entry of entries) {
+      if (entry) {
+        map.set(entry.filepath, entry);
+      }
+    }
+
+    this.all = map;
+    return mapToObj(map);
+  }
+
+}
+
+class DataServer {
+  constructor() {
+    this.states = new Set();
+    this.state = new Map();
+    this.listeners = new Set();
+  }
+
+  register(states) {
+    for (const state of states) this.states.add(state);
+
+    return this;
+  }
+
+  async start() {
+    const setState = (key, val) => this.setState(key, val);
+
+    const getState = () => this.getState();
+
+    await Promise.all(Array.from(this.states).map(async state => {
+      if (!_isFunction(state.start)) return;
+      return state.start({
+        setState,
+        getState
+      });
+    }));
+  }
+
+  close() {
+    for (const state of this.states) {
+      _isFunction(state.close) && state.close();
+    }
+  }
+
+  onStateChange(listener) {
+    this.listeners.add(listener);
+    return () => this.listeners.clear();
+  }
+
+  getState() {
+    return this.mapToObject(this.state);
+  }
+
+  setState(key, val) {
+    const prev = _get(key, this.getState());
+
+    const next = typeof val === 'function' ? val(prev) : val;
+    this.state.set(key, next);
+    this.writeDbFile();
+    this.listeners.forEach(listener => {
+      listener({
+        type: `state.${key}`,
+        payload: next
+      });
+    });
+  }
+
+  async writeDbFile() {
+    outputJSONSync(db, this.mapToObject(this.state), {
+      spaces: 2
+    });
+  }
+
+  mapToObject(map) {
+    return Array.from(map.entries()).reduce((obj, [key, val]) => Object.assign({}, obj, {
+      [key]: val
+    }), {});
+  }
+
+}
+
+const onSignal = cb => {
+  const signals = ['SIGINT', 'SIGTERM'];
+
+  for (const sig of signals) {
+    process.on(sig, async () => {
+      await cb();
+      process.exit();
+    });
+  }
+};
+
+const isSocketOpened = socket => socket.readyState === WS.OPEN;
+
+const sender = socket => (type, payload) => {
+  if (socket && isSocketOpened(socket)) {
+    socket.send(JSON.stringify({
+      type,
+      payload
+    }));
+  }
+};
+
+class Socket {
+  constructor(server, host, port) {
+    if (server) {
+      this.client = new WS.Server({
+        server,
+        host,
+        port
+      });
+    }
+  }
+
+  onConnection(listener) {
+    if (!this.client) return;
+    this.client.on('connection', socket => {
+      const emit = sender(socket);
+      const subs = listener(socket, emit);
+
+      const handleClose = async () => {
+        subs();
+        socket.terminate();
+      };
+
+      this.client.on('close', handleClose);
+      onSignal(handleClose);
+    });
+  }
+
+}
+
+const toOmit = ['_', '$0', 'version', 'help'];
+const htmlContext = {
+  lang: 'en',
+  favicon: 'https://cdn-std.dprcdn.net/files/acc_649651/LUKiMl'
+};
+const doczRcBaseConfig = {
+  htmlContext,
+  themeConfig: {},
+  docgenConfig: {},
+  filterComponents: files => files.filter(filepath => /\/[A-Z]\w*\.(js|jsx|ts|tsx)$/.test(filepath)),
+  modifyBundlerConfig: config => config,
+  modifyBabelRc: babelrc => babelrc,
+  onCreateWebpackChain: () => null,
+  menu: [],
+  plugins: [],
+  mdPlugins: [],
+  hastPlugins: [],
+  ignore: ['**/readme.md', '**/changelog.md', '**/code_of_conduct.md', '**/contributing.md', '**/license.md']
+};
+const getBaseConfig = (argv, custom) => {
+  const initial = _omit(toOmit, argv);
+
+  const base = Object.assign({}, initial, doczRcBaseConfig, {
+    paths
+  });
+  return _merge(base, custom);
+};
+const parseConfig = async (argv, custom) => {
+  const port = await detectPort(argv.port);
+  const websocketPort = await detectPort(argv.websocketPort);
+  const defaultConfig = getBaseConfig(argv, Object.assign({
+    port,
+    websocketPort,
+    htmlContext
+  }, custom));
+  const config = argv.config ? loadFrom(resolve(argv.config), defaultConfig) : load('docz', defaultConfig);
+  const reduceAsync = Plugin.reduceFromPluginsAsync(config.plugins);
+  return reduceAsync('setConfig', config);
+};
+
+class Bundler {
+  constructor(params) {
+    const {
+      args,
+      config,
+      server,
+      build
+    } = params;
+    const run = Plugin.runPluginsMethod(args.plugins);
+    this.args = args;
+    this.config = config;
+    this.server = server;
+    this.builder = build;
+    this.hooks = {
+      onCreateWebpackChain(config, dev, args) {
+        run('onCreateWebpackChain', config, dev, args);
+      },
+
+      onPreCreateApp(app) {
+        run('onPreCreateApp', app);
+      },
+
+      onCreateApp(app) {
+        run('onCreateApp', app);
+      },
+
+      onServerListening(server) {
+        run('onServerListening', server);
+      }
+
+    };
+  }
+
+  async mountConfig(env) {
+    const {
+      plugins
+    } = this.args;
+    const isDev = env !== 'production';
+    const reduce = Plugin.reduceFromPlugins(plugins);
+    const userConfig = await this.config(this.hooks);
+    const config = reduce('modifyBundlerConfig', userConfig, isDev, this.args);
+    return this.args.modifyBundlerConfig(config, isDev, this.args);
+  }
+
+  async createApp(config) {
+    return this.server(config, this.hooks);
+  }
+
+  async build(config) {
+    const dist = getDist(this.args.dest);
+    const publicDir = join(root, this.args.public);
+
+    if (root === resolve(dist)) {
+      logger__default.fatal(new Error('Unexpected option: "dest" cannot be set to the current working directory.'));
+      process.exit(1);
+    }
+
+    await this.builder(config, dist, publicDir);
+  }
+
+}
+
+const excludeNodeModules = filepath => /node_modules/.test(filepath) || /@babel(?:\/|\\{1,2})runtime/.test(filepath);
+
+const sourceMaps = (config, args) => {
+  const srcPath = resolve(root, args.src);
+  config.module.rule('sourcemaps').test(/\.(js|mjs|jsx|ts|tsx|md|mdx)$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end().use('sourcemaps').loader(require.resolve('source-map-loader')).end().enforce('pre');
+};
+
+const addScriptLoaders = opts => {
+  const {
+    rule,
+    threadLoader = true,
+    babelrc,
+    args
+  } = opts;
+  return rule.when(!args.debug, rule => rule.use('cache-loader').loader(require.resolve('cache-loader')).options({
+    cacheDirectory: cache
+  })).when(Boolean(threadLoader), rule => rule.use('thread-loader').loader(require.resolve('thread-loader')).options({
+    workers: require('os').cpus().length - 1
+  })).use('babel-loader').loader(require.resolve('babel-loader')).options(babelrc).end();
+};
+
+const js = (config, args, babelrc) => {
+  const srcPath = resolve(root, args.src);
+  const rule = config.module.rule('js').test(/\.(jsx?|mjs)$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args
+  });
+};
+const ts = (config, args, babelrc) => {
+  const srcPath = resolve(root, args.src);
+  const rule = config.module.rule('ts').test(/\.tsx?$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args
+  });
+};
+const mdx = (config, args, babelrc) => {
+  const {
+    mdPlugins,
+    hastPlugins
+  } = args;
+  const srcPath = resolve(root, args.src);
+  const rule = config.module.rule('mdx').test(/\.(md|markdown|mdx)$/).include.add(srcPath).add(root).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args,
+    threadLoader: false
+  }).use('mdx-loader').loader(require.resolve('@mdx-js/loader')).options({
+    remarkPlugins: mdPlugins.concat([[frontmatter, {
+      type: 'yaml',
+      marker: '-'
+    }], remarkDocz]),
+    rehypePlugins: hastPlugins.concat([[rehypeDocz, {
+      root: root,
+      useCodeSandbox: args.codeSandbox
+    }], slug])
+  });
+};
+const INLINE_LIMIT = 10000;
+const images = config => {
+  config.module.rule('images').test(/\.(png|jpe?g|gif)(\?.*)?$/).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/img/[name].[hash:8].[ext]`
+  });
+};
+const svg = config => {
+  config.module.rule('svg').test(/\.(svg)(\?.*)?$/).use('file-loader').loader(require.resolve('file-loader')).options({
+    name: `static/img/[name].[hash:8].[ext]`
+  });
+};
+const media = config => {
+  config.module.rule('media').test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/media/[name].[hash:8].[ext]`
+  });
+};
+const fonts = config => {
+  config.module.rule('fonts').test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/fonts/[name].[hash:8].[ext]`
+  });
+};
+
+const wrapItems = item => Object.keys(item).map(key => `${key}="${item[key]}"`).join(' ');
+
+const generateTags = template => (items = []) => items.map(template).join('');
+
+const generateMetaTags = generateTags(item => `<meta ${wrapItems(item)}>`);
+const generateLinkTags = generateTags(item => `<link ${wrapItems(item)}>`);
+const generateScriptTags = generateTags(item => `<script ${wrapItems(item)}></script>`);
+
+const generateRawTags = (items = []) => {
+  if (typeof items === 'string' || items instanceof String) return items;
+  return items.map(item => item).join('');
+};
+
+const getHtmlFilepath = indexHtml => indexHtml ? resolve(root, indexHtml) : fromTemplates('index.tpl.html');
+
+const getPublicUrl = (config, dev) => {
+  const prefix = config.base === '/' ? '' : config.base;
+  return dev ? prefix : `${prefix}/public`;
+};
+
+const emptyLineTrim = new TemplateTag(replaceResultTransformer(/^\s*[\r\n]/gm, ''), trimResultTransformer);
+const htmlTemplate = async indexHtml => compiled(getHtmlFilepath(indexHtml), {
+  minimize: false,
+  escape: false
+});
+const parseHtml = ({
+  config,
+  ctx,
+  dev,
+  template
+}) => {
+  const {
+    title,
+    description
+  } = config;
+  const {
+    publicPath,
+    css,
+    js,
+    lang = 'en',
+    favicon,
+    head = [],
+    body = [],
+    trimWhitespace
+  } = ctx;
+  const headStr = `
+    ${favicon ? `<link rel="icon" type="image/x-icon" href="${favicon}">` : ''}
+    ${head.meta ? generateMetaTags(head.meta) : ''}
+    ${head.links ? generateLinkTags(head.links) : ''}
+    ${head.raw ? generateRawTags(head.raw) : ''}
+    ${head.scripts ? generateScriptTags(head.scripts) : ''}
+    ${generateCSSReferences(css, publicPath)}`;
+  const footerStr = `
+    ${body.raw ? generateRawTags(body.raw) : ''}
+    ${body.scripts ? generateScriptTags(body.scripts) : ''}
+    ${generateJSReferences(js, publicPath)}`;
+  const doc = html$1(template({
+    title,
+    description,
+    lang,
+    head: headStr,
+    footer: footerStr,
+    publicUrl: getPublicUrl(config, dev)
+  }));
+  return trimWhitespace ? oneLineTrim(doc) : emptyLineTrim(doc);
+};
+
+const assets = (config, args, env) => {
+  const isProd = env === 'production';
+  const base = servedPath(args.base);
+  const publicPath = isProd ? base : '/';
+  config.plugin('assets-plugin').use(manifestPlugin, [{
+    publicPath,
+    fileName: 'assets.json'
+  }]);
+};
+const analyzer = config => {
+  config.plugin('bundle-analyzer').use(BundleAnalyzerPlugin, [{
+    generateStatsFile: true,
+    openAnalyzer: false,
+    analyzerMode: 'static'
+  }]);
+};
+const injections = (config, args, env) => {
+  const {
+    stringify
+  } = JSON;
+  const base = servedPath(args.base);
+
+  const plugin = require('webpack/lib/DefinePlugin');
+
+  config.plugin('injections').use(plugin, [Object.assign({}, getClientEnvironment(base).stringified, {
+    NODE_ENV: stringify(env),
+    DOCZ_BASE_URL: stringify(base)
+  })]);
+};
+const ignore = config => {
+  config.plugin('ignore-plugin').use(IgnorePlugin, [/(regenerate\-unicode\-properties)|(elliptic)/, /node_modules/]);
+};
+const hot = config => {
+  config.plugin('hot-module-replacement').use(HotModuleReplacementPlugin, [{
+    multiStep: true
+  }]);
+};
+const html = async (config, args, env) => {
+  const dev = env !== 'production';
+  const template = await htmlTemplate(args.indexHtml);
+  config.plugin('html-plugin').use(miniHtmlWebpack, [{
+    context: Object.assign({}, args.htmlContext, {
+      trimWhitespace: true
+    }),
+    template: ctx => {
+      const doc = parseHtml({
+        ctx,
+        dev,
+        template,
+        config: args
+      });
+      return dev ? doc : minify(doc, {
+        removeComments: true,
+        collapseWhitespace: true,
+        removeRedundantAttributes: true,
+        useShortDoctype: true,
+        removeEmptyAttributes: true,
+        removeStyleLinkTypeAttributes: true,
+        keepClosingSlash: true,
+        minifyJS: true,
+        minifyCSS: true,
+        minifyURLs: true
+      });
+    }
+  }]);
+};
+const webpackBar = (config, args) => {
+  config.plugin('webpackbar').use(webpackBarPlugin, [{
+    name: 'Docz',
+    color: '#41b883'
+  }]);
+};
+const watchNodeModulesPlugin = config => {
+  config.plugin('watch-missing-node-modules').use(watchMissingNodeModules, [appNodeModules]);
+};
+
+const minifier = (config, args) => {
+  config.optimization.minimizer('js').use(TerserPlugin, [{
+    terserOptions: {
+      parse: {
+        ecma: 8
+      },
+      compress: {
+        ecma: 5,
+        warnings: false,
+        comparisons: false
+      },
+      mangle: {
+        safari10: true
+      },
+      output: {
+        ecma: 5,
+        comments: false,
+        ascii_only: true
+      }
+    },
+    parallel: true,
+    cache: !args.debug,
+    sourceMap: args.sourcemaps
+  }]);
+};
+
+const getBabelConfig = async (args, env, typescript) => {
+  const isProd = env === 'production';
+  const isDev = env === 'development';
+  const localBabelRc = load('babel', {
+    presets: [],
+    plugins: []
+  }, false, true);
+  const presets = [[require.resolve('babel-preset-react-app'), {
+    typescript,
+    flow: !args.typescript
+  }]];
+  const defaultPlugins = [[require.resolve('babel-plugin-export-metadata'), {
+    notUseSpecifiers: args.notUseSpecifiers
+  }], [require.resolve('babel-plugin-named-asset-import'), {
+    loaderMap: {
+      svg: {
+        ReactComponent: '@svgr/webpack?-prettier,-svgo![path]'
+      }
+    }
+  }]];
+
+  const config = _merge(localBabelRc, {
+    presets,
+    babelrc: false,
+    cacheCompression: args.debug ? false : isProd,
+    cacheDirectory: !args.debug,
+    cacheIdentifier: args.debug ? null : getCacheIdentifier(isProd ? 'production' : isDev && 'development', ['docz', 'docz-core']),
+    compact: isProd,
+    customize: require.resolve('babel-preset-react-app/webpack-overrides'),
+    plugins: defaultPlugins.concat(!isProd ? [require.resolve('react-hot-loader/babel')] : [])
+  });
+
+  const reduce = Plugin.reduceFromPlugins(args.plugins);
+  const newConfig = reduce('modifyBabelRc', config, args);
+  return args.modifyBabelRc(newConfig, args);
+};
+
+/* eslint-disable @typescript-eslint/camelcase */
+const createConfig = (args, env) => async hooks => {
+  const {
+    debug
+  } = args;
+  const config = new Config();
+  const isProd = env === 'production';
+  const base = servedPath(args.base);
+  const dist = getDist(args.dest);
+  const srcPath = resolve(root, args.src);
+  const publicPath = isProd ? base : '/';
+  /**
+   * general
+   */
+
+  config.context(root);
+  config.set('mode', env);
+  config.when(args.sourcemaps, cfg => cfg.devtool(isProd ? 'source-map' : 'cheap-module-eval-source-map'), cfg => cfg.devtool(false));
+  config.node.merge({
+    child_process: 'empty',
+    dgram: 'empty',
+    fs: 'empty',
+    net: 'empty',
+    tls: 'empty'
+  });
+  /**
+   * output
+   */
+
+  const outputProd = output => output.filename('static/js/[name].[hash].js').sourceMapFilename('static/js/[name].[hash].js.map').chunkFilename('static/js/[name].[chunkhash:8].js');
+
+  const outputDev = output => output.filename('static/js/[name].js').sourceMapFilename('static/js/[name].js.map');
+
+  config.output.pathinfo(true).path(resolve(root, dist)).publicPath(publicPath).when(isProd, outputProd, outputDev).crossOriginLoading('anonymous').devtoolModuleFilenameTemplate(info => resolve(info.resourcePath).replace(/\\/g, '/'));
+  /**
+   * entries
+   */
+
+  config.entry('app').when(!isProd, entry => entry.add(require.resolve('react-dev-utils/webpackHotDevClient'))).add(indexJs);
+  /**
+   * resolve
+   */
+
+  config.resolve.set('symlinks', true);
+  config.resolve.extensions.add('.web.js').add('.mjs').add('.js').add('.json').add('.web.jsx').add('.jsx').add('.mdx').end();
+  config.resolve.alias.set('react-native$', 'react-native-web');
+
+  const inYarnWorkspaces = __dirname.includes('/docz/core/docz-core');
+
+  const doczDependenciesDir = inYarnWorkspaces ? join(__dirname, '../../../../node_modules') : ownNodeModules;
+  config.resolve.modules.add('node_modules').add(doczDependenciesDir).add(srcPath).add(root).merge(get('node.path').split(delimiter).filter(Boolean));
+  config.resolveLoader.set('symlinks', true).modules // prioritize our own
+  .add('node_modules').add(doczDependenciesDir).add(root);
+  /**
+   * loaders
+   */
+
+  const jsBabelrc = await getBabelConfig(args, env);
+  const tsBabelrc = await getBabelConfig(args, env, true);
+  config.when(args.sourcemaps, cfg => sourceMaps(cfg, args));
+  js(config, args, jsBabelrc);
+  mdx(config, args, jsBabelrc);
+  images(config);
+  svg(config);
+  media(config);
+  fonts(config);
+  await html(config, args, env);
+  assets(config, args, env);
+  ignore(config);
+  injections(config, args, env);
+  isProd && hot(config);
+  config.when(debug, cfg => analyzer(cfg));
+  config.when(!isProd, cfg => watchNodeModulesPlugin(cfg));
+  config.when(!debug && !isProd, cfg => webpackBar(cfg, args));
+  /**
+   * typescript setup
+   */
+
+  config.when(args.typescript, cfg => {
+    cfg.resolve.extensions.prepend('.ts').prepend('.tsx').end();
+    ts(cfg, args, tsBabelrc);
+  });
+  /**
+   * optimization
+   */
+
+  config.optimization.nodeEnv(env).namedModules(true).minimize(isProd).splitChunks({
+    cacheGroups: {
+      vendor: {
+        test: /[\\/]node_modules[\\/]/,
+        name: 'vendors',
+        chunks: 'all'
+      }
+    }
+  });
+  config.performance.hints(false);
+  config.when(isProd, cfg => minifier(cfg, args));
+  hooks.onCreateWebpackChain(config, !isProd, args);
+  args.onCreateWebpackChain(config, !isProd, args);
+  return config.toConfig();
+};
+
+const devServerConfig = (hooks, args) => {
+  const srcPath = resolve(root, args.src);
+  const publicDir = resolve(root, args.public);
+  const nonExistentDir = resolve(__dirname, 'non-existent');
+  return {
+    publicPath: '/',
+    compress: true,
+    logLevel: args.debug ? 'debug' : 'silent',
+    clientLogLevel: args.debug ? 'info' : 'none',
+    contentBase: [nonExistentDir],
+    watchContentBase: true,
+    hot: true,
+    quiet: !args.debug,
+    open: true,
+    watchOptions: {
+      ignored: ignoredFiles(srcPath)
+    },
+    overlay: false,
+    host: args.host,
+    port: args.port,
+    historyApiFallback: {
+      disableDotRule: true
+    },
+    disableHostCheck: true,
+
+    before(app, server) {
+      app.use('/public', static$1(publicDir));
+      app.use(evalSourceMapMiddleware(server));
+      app.use(errorOverlayMiddleware());
+      hooks.onPreCreateApp(app);
+    },
+
+    after(app) {
+      hooks.onCreateApp(app);
+    }
+
+  };
+};
+
+const useYarn = existsSync(appYarnLock);
+const server = args => async (config, hooks) => ({
+  start: async () => {
+    const serverConfig = devServerConfig(hooks, args);
+    const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
+
+    const appName = require(packageJson).name;
+
+    const useTypescript = args.typescript;
+    const urls = prepareUrls(protocol, args.host, args.port);
+    const devSocket = {
+      warnings: warnings => devServer.sockWrite(devServer.sockets, 'warnings', warnings),
+      errors: errors => devServer.sockWrite(devServer.sockets, 'errors', errors)
+    };
+    const compiler = createCompiler({
+      appName,
+      config,
+      devSocket,
+      urls,
+      useYarn,
+      useTypescript,
+      webpack
+    });
+    const devServer = new WebpackDevServer(compiler, serverConfig);
+    return devServer.listen(args.port, args.host, err => {
+      if (err) return logger__default.fatal(err);
+      hooks.onServerListening(devServer);
+    });
+  }
+});
+
+const FSR = require('react-dev-utils/FileSizeReporter');
+
+const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
+const {
+  measureFileSizesBeforeBuild,
+  printFileSizesAfterBuild
+} = FSR;
+const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
+const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
+
+const hasCiEnvVar = () => get('ci', false, {
+  parse: true
+});
+
+const copyPublicFolder = async (dest, publicDir) => {
+  if (await pathExists(publicDir)) {
+    await copy(publicDir, distPublic(dest), {
+      dereference: true,
+      filter: file => file !== indexHtml
+    });
+  }
+};
+
+const compile = config => new Promise((resolve, reject) => {
+  let compiler;
+
+  try {
+    compiler = webpack(config);
+  } catch (err) {
+    onError(err);
+  }
+
+  compiler && compiler.run((err, stats) => {
+    if (err) reject(err);
+    resolve(stats);
+  });
+});
+
+const builder = async (config, previousFileSizes) => new Promise(async (resolve, reject) => {
+  try {
+    const stats = await compile(config);
+    const messages = formatWebpackMessages(stats.toJson({}, true));
+
+    if (messages.errors.length) {
+      return reject(new Error(messages.errors.join('\n\n')));
+    }
+
+    if (hasCiEnvVar() && messages.warnings.length) {
+      warn('\nTreating warnings as errors because process.env.CI = true.\n' + 'Most CI servers set it automatically.\n');
+      return reject(new Error(messages.warnings.join('\n\n')));
+    }
+
+    return resolve({
+      stats,
+      previousFileSizes,
+      warnings: messages.warnings
+    });
+  } catch (err) {
+    reject(err);
+  }
+});
+
+const onSuccess = (dist, {
+  stats,
+  previousFileSizes,
+  warnings
+}) => {
+  if (warnings.length) {
+    log();
+    warn('Compiled with warnings.\n');
+    warn(warnings.join('\n\n'));
+    warn('\nSearch for the ' + chalk$1.underline(chalk$1.yellow('keywords')) + ' to learn more about each warning.');
+    warn('To ignore, add ' + chalk$1.cyan('// eslint-disable-next-line') + ' to the line before.\n');
+  }
+
+  log();
+  log(`File sizes after gzip:\n`);
+  printFileSizesAfterBuild(stats, previousFileSizes, dist, WARN_AFTER_BUNDLE_GZIP_SIZE, WARN_AFTER_CHUNK_GZIP_SIZE);
+  log();
+};
+
+const onError = err => {
+  log();
+  fatal(err);
+  process.exit(1);
+  log();
+};
+
+const build = async (config, dist, publicDir) => {
+  const interactive = new Signale({
+    interactive: true,
+    scope: 'build'
+  });
+
+  try {
+    interactive.start('Creating an optimized bundle');
+    await ensureDir(dist);
+    const previousFileSizes = await measureFileSizesBeforeBuild(dist);
+    await emptyDir(dist);
+    await copyPublicFolder(dist, publicDir);
+    const result = await builder(config, previousFileSizes);
+    interactive.success('Build successfully created');
+    onSuccess(dist, result);
+  } catch (err) {
+    fatal(chalk$1.red('Failed to compile.\n'));
+    onError(err);
+  }
+};
+
+const bundler = (args, env) => new Bundler({
+  args,
+  build,
+  config: createConfig(args, env),
+  server: server(args)
+});
+
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+var chalk = require('chalk');
+
+var execSync = require('child_process').execSync;
+
+var spawn = require('cross-spawn');
+
+var opn = require('opn'); // https://github.com/sindresorhus/opn#app
+
+
+var OSX_CHROME = 'google chrome';
+const Actions = Object.freeze({
+  NONE: 0,
+  BROWSER: 1,
+  SCRIPT: 2
+});
+
+function getBrowserEnv() {
+  // Attempt to honor this environment variable.
+  // It is specific to the operating system.
+  // See https://github.com/sindresorhus/opn#app for documentation.
+  const value = process.env.BROWSER;
+  let action;
+
+  if (!value) {
+    // Default.
+    action = Actions.BROWSER;
+  } else if (value.toLowerCase().endsWith('.js')) {
+    action = Actions.SCRIPT;
+  } else if (value.toLowerCase() === 'none') {
+    action = Actions.NONE;
+  } else {
+    action = Actions.BROWSER;
+  }
+
+  return {
+    action,
+    value
+  };
+}
+
+function executeNodeScript(scriptPath, url) {
+  const extraArgs = process.argv.slice(2);
+  const child = spawn('node', [scriptPath, ...extraArgs, url], {
+    stdio: 'inherit'
+  });
+  child.on('close', code => {
+    if (code !== 0) {
+      console.log();
+      console.log(chalk.red('The script specified as BROWSER environment variable failed.'));
+      console.log(chalk.cyan(scriptPath) + ' exited with code ' + code + '.');
+      console.log();
+      return;
+    }
+  });
+  return true;
+}
+
+function startBrowserProcess(browser, url) {
+  // If we're on OS X, the user hasn't specifically
+  // requested a different browser, we can try opening
+  // Chrome with AppleScript. This lets us reuse an
+  // existing tab when possible instead of creating a new one.
+  const shouldTryOpenChromeWithAppleScript = process.platform === 'darwin' && (typeof browser !== 'string' || browser === OSX_CHROME);
+
+  if (shouldTryOpenChromeWithAppleScript) {
+    try {
+      // Try our best to reuse existing tab
+      // on OS X Google Chrome with AppleScript
+      execSync('ps cax | grep "Google Chrome"');
+      execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', {
+        cwd: __dirname,
+        stdio: 'ignore'
+      });
+      return true;
+    } catch (err) {// Ignore errors.
+    }
+  } // Another special case: on OS X, check if BROWSER has been set to "open".
+  // In this case, instead of passing `open` to `opn` (which won't work),
+  // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser):
+  // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768
+
+
+  if (process.platform === 'darwin' && browser === 'open') {
+    browser = undefined;
+  } // Fallback to opn
+  // (It will always open new tab)
+
+
+  try {
+    var options = {
+      app: browser,
+      wait: false
+    };
+    opn(url, options).catch(() => {}); // Prevent `unhandledRejection` error.
+
+    return true;
+  } catch (err) {
+    return false;
+  }
+}
+/**
+ * Reads the BROWSER environment variable and decides what to do with it. Returns
+ * true if it opened a browser or ran a node.js script, otherwise false.
+ */
+
+
+function openBrowser(url) {
+  const {
+    action,
+    value
+  } = getBrowserEnv();
+
+  switch (action) {
+    case Actions.NONE:
+      // Special case: BROWSER="none" will prevent opening completely.
+      return false;
+
+    case Actions.SCRIPT:
+      return executeNodeScript(value, url);
+
+    case Actions.BROWSER:
+      return startBrowserProcess(value, url);
+
+    default:
+      throw new Error('Not implemented.');
+  }
+}
+
+const mapToArray = (map = []) => Object.entries(map).map(entry => entry && {
+  key: entry[0],
+  value: entry[1]
+}).filter(Boolean);
+
+const updateEntries = entries => async p => {
+  const prev = _get('entries', p.getState());
+
+  const map = await entries.get();
+
+  if (map && !equal(prev, map)) {
+    await Entries.writeImports(map);
+    p.setState('entries', mapToArray(map));
+  }
+};
+
+const state = (entries, config, dev) => {
+  const src = relative(root, config.src);
+  const files = Array.isArray(config.files) ? config.files.map(filePath => join(src, filePath)) : join(src, config.files);
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(files, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'entries',
+    start: async params => {
+      const update = updateEntries(entries);
+      await update(params);
+
+      if (dev) {
+        watcher.on('add', async () => update(params));
+        watcher.on('change', async () => update(params));
+        watcher.on('unlink', async () => update(params));
+        watcher.on('raw', async (event, path, details) => {
+          if (details.event === 'moved' && details.type === 'directory') {
+            await update(params);
+          }
+        });
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+const getInitialConfig = config => {
+  const pkg = readJsonSync(appPackageJson, {
+    throws: false
+  });
+  const repoUrl = getRepoUrl();
+  return {
+    title: config.title,
+    description: config.description,
+    menu: config.menu,
+    version: get$1(pkg, 'version'),
+    repository: repoUrl,
+    native: config.native,
+    codeSandbox: config.codeSandbox,
+    themeConfig: config.themeConfig,
+    separator: config.separator
+  };
+};
+
+const update = async (params, initial, {
+  config
+}) => {
+  const next = config ? loadFrom(resolve(config), initial, true, true) : load('docz', initial, true, true);
+  params.setState('config', next);
+};
+
+const state$1 = (config, dev) => {
+  const initial = getInitialConfig(config);
+  const glob = config.config || finds('docz');
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(glob, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'config',
+    start: async params => {
+      const fn = async () => update(params, initial, config);
+
+      await update(params, initial, config);
+
+      if (dev) {
+        watcher.on('add', fn);
+        watcher.on('change', fn);
+        watcher.on('unlink', fn);
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+const throwError = err => {
+  logger__default.fatal(`Error parsing static types`);
+  logger__default.error(err);
+};
+
+const jsParser = (files, config) => {
+  const resolver = config.docgenConfig.resolver || reactDocgen.resolver.findAllExportedComponentDefinitions;
+
+  const parseFilepathProps = filepath => {
+    const handlers = reactDocgen.defaultHandlers.concat([externalProptypesHandler(filepath), actualNameHandler]);
+
+    try {
+      const code = readFileSync(filepath, 'utf-8');
+      const props = reactDocgen.parse(code, resolver, handlers);
+      return {
+        key: normalize(filepath),
+        value: props
+      };
+    } catch (err) {
+      if (config.debug) throwError(err);
+      return null;
+    }
+  };
+
+  return files.map(parseFilepathProps).filter(Boolean);
+};
+
+const digest = str => createHash('md5').update(str).digest('hex');
+
+const cacheFilepath = join(cache, 'propsParser.json');
+
+const readCacheFile = () => readJSONSync(cacheFilepath, {
+  throws: false
+});
+
+function checkFilesOnCache(files) {
+  const cache = readCacheFile();
+  if (_isEmpty(cache)) return files;
+  return files.filter(filepath => {
+    const normalized = normalize(filepath);
+    const hash = digest(readFileSync(normalized, 'utf-8'));
+
+    const found = _get(normalized, cache);
+
+    return found && hash !== found.hash;
+  });
+}
+
+function writePropsOnCache(items) {
+  const cache = readCacheFile();
+  const newCache = items.reduce((obj, {
+    key: filepath,
+    value
+  }) => {
+    const normalized = normalize(filepath);
+    const hash = digest(readFileSync(normalized, 'utf-8'));
+    return Object.assign({}, obj, {
+      [normalized]: {
+        hash,
+        props: value
+      }
+    });
+  }, {});
+  outputJSONSync(cacheFilepath, Object.assign({}, cache, newCache));
+}
+
+function getPropsOnCache() {
+  const cache = readCacheFile();
+
+  if (_isEmpty(cache)) {
+    warn('Any cache was found with your props definitions');
+    warn("We'll parse your components to get props from them");
+    warn('Depending on your components, this could take while...');
+    return [];
+  }
+
+  return Object.entries(cache).map(([key, value]) => ({
+    key,
+    value: _get('props', value)
+  }));
+}
+
+const mergeWithCache = (cache, props) => {
+  const keys = props.map(_prop('key'));
+  return cache.filter(item => !_contains(item.key, keys)).concat(props);
+};
+
+const removeFromCache = filepath => {
+  const cache = readCacheFile();
+  outputJSONSync(cacheFilepath, _omit(filepath, cache));
+};
+
+const getInitialFilesMap = () => {
+  const cache = readCacheFile();
+  if (_isEmpty(cache)) return new Map();
+  const map = new Map();
+
+  _entries(cache).forEach(([filepath]) => {
+    const exist = pathExistsSync(filepath);
+
+    if (!exist) {
+      removeFromCache(filepath);
+    } else {
+      map.set(filepath, {
+        text: readFileSync(filepath, 'utf-8'),
+        version: 0
+      });
+    }
+  });
+
+  return map;
+};
+
+let languageService = null;
+const filesMap = getInitialFilesMap();
+
+function getTSConfigFile(tsconfigPath) {
+  const basePath = dirname(tsconfigPath);
+  const configFile = ts$1.readConfigFile(tsconfigPath, ts$1.sys.readFile);
+  return ts$1.parseJsonConfigFileContent(configFile.config, ts$1.sys, basePath, {}, tsconfigPath);
+}
+
+function loadFiles(filesToLoad) {
+  filesToLoad.forEach(filepath => {
+    const normalized = normalize(filepath);
+    const found = filesMap.get(normalized);
+    filesMap.set(normalized, {
+      text: readFileSync(normalized, 'utf-8'),
+      version: found ? found.version + 1 : 0
+    });
+  });
+}
+
+function createServiceHost(compilerOptions, files) {
+  return {
+    getScriptFileNames: () => {
+      return [...files.keys()];
+    },
+    getScriptVersion: fileName => {
+      const file = files.get(fileName);
+      return file && file.version.toString() || '';
+    },
+    getScriptSnapshot: fileName => {
+      if (!existsSync$1(fileName)) {
+        return undefined;
+      }
+
+      let file = files.get(fileName);
+
+      if (file === undefined) {
+        const text = readFileSync(fileName).toString();
+        file = {
+          version: 0,
+          text
+        };
+        files.set(fileName, file);
+      }
+
+      return ts$1.ScriptSnapshot.fromString(file.text);
+    },
+    getCurrentDirectory: () => process.cwd(),
+    getCompilationSettings: () => compilerOptions,
+    getDefaultLibFileName: options => ts$1.getDefaultLibFilePath(options),
+    fileExists: ts$1.sys.fileExists,
+    readFile: ts$1.sys.readFile,
+    readDirectory: ts$1.sys.readDirectory
+  };
+}
+
+const parseFiles = (files, config, tsconfig) => {
+  const opts = {
+    propFilter(prop) {
+      if (prop.parent == null) return true;
+      const propFilter = config.docgenConfig.propFilter;
+      const val = propFilter && _isFunction(propFilter) && propFilter(prop);
+      return !prop.parent.fileName.includes('node_modules') || Boolean(val);
+    },
+
+    componentNameResolver(exp, source) {
+      const componentNameResolver = config.docgenConfig.resolver;
+      const val = componentNameResolver && _isFunction(componentNameResolver) && componentNameResolver(exp, source);
+      return val;
+    }
+
+  };
+  loadFiles(files);
+  const parser = reactDocgenTs.withCustomConfig(tsconfig, opts);
+
+  const compilerOptions = _get('options', getTSConfigFile(tsconfig));
+
+  const programProvider = () => {
+    if (languageService) return languageService.getProgram();
+    const servicesHost = createServiceHost(compilerOptions, filesMap);
+    const documentRegistry = ts$1.createDocumentRegistry();
+    languageService = ts$1.createLanguageService(servicesHost, documentRegistry);
+    return languageService.getProgram();
+  };
+
+  return files.map(filepath => ({
+    key: normalize(filepath),
+    value: parser.parseWithProgramProvider(filepath, programProvider)
+  }));
+};
+
+const tsParser = (files, config, tsconfig) => {
+  if (!tsconfig) return null;
+  const filesToLoad = checkFilesOnCache(files);
+  const propsOnCache = getPropsOnCache();
+  if (!filesToLoad.length) return propsOnCache;
+  const next = parseFiles(filesToLoad, config, tsconfig);
+  writePropsOnCache(next);
+  return mergeWithCache(propsOnCache, next);
+};
+
+const docgen = async (files, config) => {
+  const tsconfig = await findup('tsconfig.json', {
+    cwd: root
+  });
+  return config.typescript ? tsParser(files, config, tsconfig) : jsParser(files, config);
+};
+
+const getPattern = config => {
+  const {
+    ignore,
+    src: source,
+    typescript: ts,
+    docgenConfig: docgenConfig
+  } = config;
+  const src = relative(root, docgenConfig.searchPath ? docgenConfig.searchPath : source);
+  return ignore.map(entry => `!**/${entry}`).concat([join(src, ts ? '**/*.{ts,tsx}' : '**/*.{js,jsx,mjs}'), '!**/node_modules', '!**/doczrc.js']);
+};
+
+const removeFilepath = (items, filepath) => items.filter(item => item.key !== filepath);
+
+const initial = (config, pattern) => async p => {
+  const {
+    filterComponents
+  } = config;
+  const files = await glob(pattern, {
+    cwd: root
+  });
+  const filtered = filterComponents ? filterComponents(files) : files;
+  const metadata = await docgen(filtered, config);
+  p.setState('props', metadata);
+};
+
+const change = (p, config) => async filepath => {
+  const prev = _get('props', p.getState());
+
+  const metadata = await docgen([filepath], config);
+  const filtered = metadata.filter(_propEq('key', filepath));
+  const next = removeFilepath(prev, filepath).concat(filtered);
+  p.setState('props', next);
+};
+
+const remove = p => async filepath => {
+  const prev = _get('props', p.getState());
+
+  const next = removeFilepath(prev, filepath);
+  p.setState('props', next);
+};
+
+const state$2 = (config, dev) => {
+  const pattern = getPattern(config);
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(pattern, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'props',
+    start: async params => {
+      const addInitial = initial(config, pattern);
+      await addInitial(params);
+
+      if (dev) {
+        watcher.on('change', change(params, config));
+        watcher.on('unlink', remove(params));
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+
+
+var index = /*#__PURE__*/Object.freeze({
+  entries: state,
+  config: state$1,
+  props: state$2
+});
+
+process.setMaxListeners(Infinity);
+const dev = async args => {
+  const env = get('node.env');
+  const config = await parseConfig(args);
+  const bundler$1 = bundler(config, env);
+  const entries = new Entries(config);
+  const {
+    websocketHost,
+    websocketPort
+  } = config;
+  const bundlerConfig = await bundler$1.mountConfig(env);
+  const app = await bundler$1.createApp(bundlerConfig);
+
+  try {
+    await Entries.writeApp(config, true);
+    await Entries.writeImports((await entries.get()));
+  } catch (err) {
+    fatal('Failed to build your files');
+    error(err);
+    process.exit(1);
+  }
+
+  const server = await app.start();
+  const dataServer = new DataServer();
+  const socket = new Socket(server, websocketHost, websocketPort);
+  if (config.propsParser) dataServer.register([state$2(config, true)]);
+  dataServer.register([state$1(config, true), state(entries, config, true)]);
+
+  try {
+    await dataServer.start();
+    if (args.open || args.o) openBrowser(`http://${config.host}:${config.port}`);
+  } catch (err) {
+    fatal('Failed to process data server');
+    error(err);
+    dataServer.close();
+    process.exit(1);
+  }
+
+  socket.onConnection((_, emit) => {
+    const subscribe = dataServer.onStateChange(action => {
+      emit(action.type, action.payload);
+    });
+    return () => subscribe();
+  });
+  onSignal(async () => {
+    dataServer.close();
+    server.close();
+  });
+  server.on('close', async () => {
+    dataServer.close();
+  });
+};
+
+const build$1 = async args => {
+  const env = get('node.env');
+  const config = await parseConfig(args);
+  const entries = new Entries(config);
+  const bundler$1 = bundler(config, env);
+  const bundlerConfig = await bundler$1.mountConfig(env);
+  const run = Plugin.runPluginsMethod(config.plugins);
+  const dataServer = new DataServer();
+  if (config.propsParser) dataServer.register([state$2(config)]);
+  dataServer.register([state$1(config), state(entries, config)]);
+
+  try {
+    await Entries.writeApp(config, false);
+    await Entries.writeImports((await entries.get()));
+    await dataServer.start();
+    await run('onPreBuild', config);
+    await bundler$1.build(bundlerConfig);
+    await run('onPostBuild', config);
+    dataServer.close();
+  } catch (err) {
+    error(err);
+    process.exit(1);
+    dataServer.close();
+  }
+};
+
+const serve = async args => {
+  const config = await parseConfig(args);
+  const dist = getDist(config.dest);
+  spawn$1.sync('serve', ['-s', dist], {
+    stdio: 'inherit'
+  });
+};
+
+const cli = () => {
+  return command('dev', 'initialize docz dev server', setArgs, async args => {
+    setEnv('development');
+    await dev(args);
+  }).command('build', 'build dir as static site', setArgs, async args => {
+    setEnv('production');
+    await build$1(args);
+    process.exit();
+  }).command('serve', 'serve dir as static site', setArgs, async args => {
+    setEnv('production');
+    await build$1(args);
+    await serve(args);
+    process.exit();
+  }).demandCommand().help().wrap(72).epilog('for more information visit https://github.com/pedronauck/docz').showHelpOnFail(false, 'whoops, something went wrong! run with --help').argv;
+};
+
+/** cli exports */
+
+export { DataServer, Entries, Entry, Plugin, cli, createPlugin, getBaseConfig, parseConfig, setArgs, index as states };
diff --git a/docs/docz-lib/docz-core/dist/index.js b/docs/docz-lib/docz-core/dist/index.js
new file mode 100644
index 0000000..7a752f0
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/index.js
@@ -0,0 +1,2024 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var yargs = require('yargs');
+var _get = _interopDefault(require('lodash/fp/get'));
+var fs = require('fs-extra');
+var envDotProp = require('env-dot-prop');
+var humanize = _interopDefault(require('humanize-string'));
+var titleize = _interopDefault(require('titleize'));
+var fs$1 = require('fs');
+var path = require('path');
+var resolve = require('resolve');
+var logger = require('signale');
+var logger__default = _interopDefault(logger);
+var tslib_1 = require('tslib');
+var mdast = require('docz-utils/lib/mdast');
+var fs$2 = require('docz-utils/lib/fs');
+var glob = _interopDefault(require('fast-glob'));
+var crypto = require('crypto');
+var slugify = _interopDefault(require('@sindresorhus/slugify'));
+var _isFunction = _interopDefault(require('lodash/fp/isFunction'));
+var pReduce = _interopDefault(require('p-reduce'));
+var getPkgRepo = _interopDefault(require('get-pkg-repo'));
+var findup = _interopDefault(require('find-up'));
+var WS = _interopDefault(require('ws'));
+var _merge = _interopDefault(require('lodash/fp/merge'));
+var _omit = _interopDefault(require('lodash/fp/omit'));
+var loadCfg = require('load-cfg');
+var detectPort = _interopDefault(require('detect-port'));
+var Config = _interopDefault(require('webpack-chain'));
+var frontmatter = _interopDefault(require('remark-frontmatter'));
+var remarkDocz = _interopDefault(require('remark-docz'));
+var rehypeDocz = _interopDefault(require('rehype-docz'));
+var slug = _interopDefault(require('rehype-slug'));
+var webpack = require('webpack');
+var webpack__default = _interopDefault(webpack);
+var webpackBarPlugin = _interopDefault(require('webpackbar'));
+var htmlMinifier = require('html-minifier');
+var miniHtmlWebpack = require('mini-html-webpack-plugin');
+var miniHtmlWebpack__default = _interopDefault(miniHtmlWebpack);
+var manifestPlugin = _interopDefault(require('webpack-manifest-plugin'));
+var watchMissingNodeModules = _interopDefault(require('react-dev-utils/WatchMissingNodeModulesPlugin'));
+require('react-dev-utils/ModuleNotFoundPlugin');
+var webpackBundleAnalyzer = require('webpack-bundle-analyzer');
+var ctags = require('common-tags');
+var TerserPlugin = require('terser-webpack-plugin');
+var getCacheIdentifier = _interopDefault(require('react-dev-utils/getCacheIdentifier'));
+var WebpackDevServer = _interopDefault(require('webpack-dev-server'));
+var WebpackDevServerUtils = require('react-dev-utils/WebpackDevServerUtils');
+var express = require('express');
+var errorOverlayMiddleware = _interopDefault(require('react-dev-utils/errorOverlayMiddleware'));
+var evalSourceMapMiddleware = _interopDefault(require('react-dev-utils/evalSourceMapMiddleware'));
+var ignoredFiles = _interopDefault(require('react-dev-utils/ignoredFiles'));
+var chalk$1 = _interopDefault(require('chalk'));
+var chokidar = _interopDefault(require('chokidar'));
+var equal = _interopDefault(require('fast-deep-equal'));
+var get = _interopDefault(require('lodash/get'));
+var _propEq = _interopDefault(require('lodash/fp/propEq'));
+var externalProptypesHandler = _interopDefault(require('react-docgen-external-proptypes-handler'));
+var actualNameHandler = _interopDefault(require('react-docgen-actual-name-handler'));
+var reactDocgen = _interopDefault(require('react-docgen'));
+var _entries = _interopDefault(require('lodash/fp/entries'));
+var _contains = _interopDefault(require('lodash/fp/contains'));
+var _prop = _interopDefault(require('lodash/fp/prop'));
+var _isEmpty = _interopDefault(require('lodash/fp/isEmpty'));
+var reactDocgenTs = _interopDefault(require('react-docgen-typescript'));
+var ts$1 = _interopDefault(require('typescript'));
+var spawn$1 = _interopDefault(require('cross-spawn'));
+
+const ensureSlash = (filepath, needsSlash) => {
+  const hasSlash = filepath.endsWith('/');
+
+  if (hasSlash && !needsSlash) {
+    return filepath.substr(filepath, filepath.length - 1);
+  } else if (!hasSlash && needsSlash) {
+    return `${filepath}/`;
+  } else {
+    return filepath;
+  }
+};
+const root = fs$1.realpathSync(process.cwd());
+const resolveApp = to => path.resolve(root, to);
+const resolveOwn = to => path.resolve(__dirname, '../', to);
+const templates = path.join(resolve.sync('./'), '../templates');
+const packageJson = resolveApp('package.json');
+const servedPath = base => ensureSlash(base, true);
+const docz = resolveApp('.docz');
+const app = path.resolve(docz, 'app/');
+const cache = path.resolve(docz, 'cache/');
+const appPublic = path.resolve(docz, 'public/');
+const appNodeModules = resolveApp('node_modules');
+const appPackageJson = resolveApp('package.json');
+const appYarnLock = resolveOwn('yarn.lock');
+const ownNodeModules = resolveOwn('node_modules');
+const getDist = dest => path.join(root, dest);
+const distPublic = dest => path.join(dest, 'public/');
+const importsJs = path.resolve(app, 'imports.js');
+const rootJs = path.resolve(app, 'root.jsx');
+const indexJs = path.resolve(app, 'index.jsx');
+const indexHtml = path.resolve(app, 'index.html');
+const db = path.resolve(app, 'db.json');
+
+var paths = /*#__PURE__*/Object.freeze({
+  ensureSlash: ensureSlash,
+  root: root,
+  resolveApp: resolveApp,
+  resolveOwn: resolveOwn,
+  templates: templates,
+  packageJson: packageJson,
+  servedPath: servedPath,
+  docz: docz,
+  app: app,
+  cache: cache,
+  appPublic: appPublic,
+  appNodeModules: appNodeModules,
+  appPackageJson: appPackageJson,
+  appYarnLock: appYarnLock,
+  ownNodeModules: ownNodeModules,
+  getDist: getDist,
+  distPublic: distPublic,
+  importsJs: importsJs,
+  rootJs: rootJs,
+  indexJs: indexJs,
+  indexHtml: indexHtml,
+  db: db
+});
+
+const getEnv = (val, defaultValue = null) => envDotProp.get(val, defaultValue, {
+  parse: true
+});
+
+const getInitialTitle = pkg => {
+  const name = _get('name', pkg) || 'MyDoc';
+  return titleize(humanize(name.replace(/^@.*\//, '')));
+};
+
+const getInitialDescription = pkg => _get('description', pkg) || 'My awesome app using docz';
+
+const setArgs = yargs => {
+  const pkg = fs.readJsonSync(appPackageJson, {
+    throws: false
+  });
+  return yargs.option('base', {
+    type: 'string',
+    default: getEnv('docz.base', '/')
+  }).option('source', {
+    alias: 'src',
+    type: 'string',
+    default: getEnv('docz.source', './')
+  }).option('files', {
+    type: 'string',
+    default: getEnv('docz.files', '**/*.{md,markdown,mdx}')
+  }).option('ignore', {
+    type: 'array',
+    default: getEnv('docz.ignore', [])
+  }).option('public', {
+    type: 'string',
+    default: getEnv('docz.public', '/public')
+  }).option('dest', {
+    alias: 'd',
+    type: 'string',
+    default: getEnv('docz.dest', '.docz/dist')
+  }).option('editBranch', {
+    alias: 'eb',
+    type: 'string',
+    default: getEnv('docz.edit.branch', 'master')
+  }).option('config', {
+    type: 'string',
+    default: getEnv('docz.config', '')
+  }).option('title', {
+    type: 'string',
+    default: getEnv('docz.title', getInitialTitle(pkg))
+  }).option('description', {
+    type: 'string',
+    default: getEnv('docz.description', getInitialDescription(pkg))
+  }).option('theme', {
+    type: 'string',
+    default: getEnv('docz.theme', 'theme')
+  }).option('typescript', {
+    alias: 'ts',
+    type: 'boolean',
+    default: getEnv('docz.typescript', false)
+  }).option('propsParser', {
+    type: 'boolean',
+    default: getEnv('docz.props.parser', true)
+  }).option('wrapper', {
+    type: 'string',
+    default: getEnv('docz.wrapper', null)
+  }).option('indexHtml', {
+    type: 'string',
+    default: getEnv('docz.index.html', null)
+  }).option('debug', {
+    type: 'boolean',
+    default: getEnv('docz.debug', false)
+  }).option('clearConsole', {
+    type: 'boolean',
+    default: getEnv('docz.clear.console', true)
+  }).option('host', {
+    type: 'string',
+    default: getEnv('docz.host', '127.0.0.1')
+  }).option('port', {
+    alias: 'p',
+    type: 'number',
+    default: getEnv('docz.port', 3000)
+  }).option('websocketHost', {
+    type: 'string',
+    default: getEnv('docz.websocket.host', '127.0.0.1')
+  }).option('websocketPort', {
+    type: 'number',
+    default: getEnv('docz.websocket.port', 60505)
+  }).option('native', {
+    type: 'boolean',
+    default: getEnv('docz.native', false)
+  }).option('codeSandbox', {
+    type: 'boolean',
+    default: getEnv('docz.codeSandbox', true)
+  }).option('sourcemaps', {
+    type: 'boolean',
+    default: getEnv('docz.sourcemaps', true)
+  }).option('separator', {
+    type: 'string',
+    default: getEnv('docz.separator', '-')
+  }).option('open', {
+    alias: 'o',
+    describe: 'auto open browser in dev mode',
+    type: 'boolean',
+    default: false
+  });
+};
+
+const populateNodePath = () => {
+  // We support resolving modules according to `NODE_PATH`.
+  // It works similar to `NODE_PATH` in Node itself:
+  // https://nodejs.org/api/modules.html#modules_loading_from_the_global_folders
+  // Note that unlike in Node, only *relative* paths from `NODE_PATH` are honored.
+  // Otherwise, we risk importing Node.js core modules into an app instead of Webpack shims.
+  // https://github.com/facebook/create-react-app/issues/1023#issuecomment-265344421
+  // We also resolve them to make sure all tools using them work consistently.
+  envDotProp.set('node.path', envDotProp.get('node.path', '').split(path.delimiter).filter(folder => folder && !path.isAbsolute(folder)).map(folder => path.resolve(root, folder)).join(path.delimiter));
+};
+
+const configDotEnv = () => {
+  const NODE_ENV = envDotProp.get('node.env');
+  const dotenv = resolveApp('.env');
+  const dotenvFiles = [`${dotenv}.${NODE_ENV}.local`, `${dotenv}.${NODE_ENV}`, // Don't include `.env.local` for `test` environment
+  // since normally you expect tests to produce the same
+  // results for everyone
+  NODE_ENV !== 'test' && `${dotenv}.local`, dotenv]; // Load environment variables from .env* files. Suppress warnings using silent
+  // if this file is missing. dotenv will never modify any environment variables
+  // that have already been set.  Variable expansion is supported in .env files.
+  // https://github.com/motdotla/dotenv
+
+  dotenvFiles.filter(Boolean).forEach(dotenvFile => {
+    require('dotenv').config({
+      path: dotenvFile
+    });
+  });
+};
+
+const setEnv = env => {
+  envDotProp.set('babel.env', env);
+  envDotProp.set('node.env', env);
+  configDotEnv();
+  populateNodePath();
+};
+const getClientEnvironment = publicUrl => {
+  const APP_TEST = /^(REACT_APP_)|(ANGULAR_APP_)|(VUE_APP_)|(DOCZ_)/i;
+  const raw = Object.keys(process.env).filter(key => APP_TEST.test(key)).reduce((env, key) => {
+    env[key] = process.env[key];
+    return env;
+  }, {
+    // Useful for determining whether we’re running in production mode. Most
+    // importantly, it switches React into the correct mode.
+    NODE_ENV: envDotProp.get('node.env') || 'development',
+    // Useful for resolving the correct path to static assets in `public`. For
+    // example, <img src={process.env.PUBLIC_URL + '/img/logo.png'} />. This should
+    // only be used as an escape hatch. Normally you would put images into the `src`
+    // and `import` them in code to get their
+    PUBLIC_URL: publicUrl
+  });
+  const stringified = {
+    'process.env': Object.keys(raw).reduce((env, key) => {
+      env[key] = JSON.stringify(raw[key]);
+      return env;
+    }, {})
+  };
+  return {
+    raw,
+    stringified
+  };
+};
+
+const createId = file => crypto.createHash('md5').update(file).digest('hex');
+
+const mountRoute = (base, route) => {
+  if (base === '/') return route;
+  const baseHasSlash = base.endsWith('/');
+  if (baseHasSlash) return base.substr(0, base.length - 1) + route;
+  return base + route;
+};
+
+class Entry {
+  constructor(ast, file, src, config) {
+    const filepath = this.getFilepath(file, src);
+    const parsed = mdast.getParsedData(ast);
+    const name = this.getName(filepath, parsed);
+    this.id = createId(file);
+    this.filepath = filepath;
+    this.link = '';
+    this.slug = this.slugify(filepath, config.separator);
+    this.route = this.getRoute(parsed, config.base);
+    this.name = name;
+    this.menu = parsed.menu || '';
+    this.headings = mdast.headingsFromAst(ast);
+    this.settings = parsed;
+  }
+
+  setLink(url) {
+    if (url) {
+      this.link = url.replace('{{filepath}}', this.filepath);
+    }
+  }
+
+  getFilepath(file, src) {
+    const srcPath = path.resolve(root, src);
+    const filepath = path.relative(srcPath, file);
+
+    if (process.platform === 'win32') {
+      return filepath.split('\\').join('/');
+    }
+
+    return filepath;
+  }
+
+  getName(filepath, parsed) {
+    const filename = humanize(path.parse(filepath).name);
+    return parsed && parsed.name ? parsed.name : filename;
+  }
+
+  slugify(filepath, separator) {
+    const ext = path.extname(filepath);
+    const fileWithoutExt = filepath.replace(ext, '');
+    return slugify(fileWithoutExt, {
+      separator
+    });
+  }
+
+  getRoute(parsed, base) {
+    const parsedRoute = _get('route', parsed);
+    const route = parsedRoute || `/${this.slug}`;
+    return mountRoute('/', route);
+  }
+}
+
+class Plugin {
+  constructor(p) {
+    this.setConfig = p.setConfig;
+    this.modifyBundlerConfig = p.modifyBundlerConfig;
+    this.modifyBabelRc = p.modifyBabelRc;
+    this.modifyFiles = p.modifyFiles;
+    this.onPreCreateApp = p.onPreCreateApp;
+    this.onCreateWebpackChain = p.onCreateWebpackChain;
+    this.onCreateApp = p.onCreateApp;
+    this.onServerListening = p.onServerListening;
+    this.onPreBuild = p.onPreBuild;
+    this.onPostBuild = p.onPostBuild;
+    this.onPreRender = p.onPreRender;
+    this.onPostRender = p.onPostRender;
+  }
+
+  static runPluginsMethod(plugins) {
+    return (method, ...args) => {
+      if (plugins && plugins.length > 0) {
+        for (const plugin of plugins) {
+          const fn = _get(method, plugin);
+
+          _isFunction(fn) && fn(...args);
+        }
+      }
+    };
+  }
+
+  static propsOfPlugins(plugins) {
+    return prop => plugins && plugins.length > 0 ? plugins.map(p => _get(prop, p)).filter(Boolean) : [];
+  }
+
+  static reduceFromPlugins(plugins) {
+    return (method, initial, ...args) => {
+      return [...(plugins || [])].reduce((obj, plugin) => {
+        const fn = _get(method, plugin);
+
+        return fn && _isFunction(fn) ? fn(obj, ...args) : obj;
+      }, initial);
+    };
+  }
+
+  static reduceFromPluginsAsync(plugins) {
+    return (method, initial, ...args) => {
+      return pReduce([...(plugins || [])], (obj, plugin) => {
+        const fn = _get(method, plugin);
+
+        return Promise.resolve(fn && _isFunction(fn) ? fn(obj, ...args) : obj);
+      }, initial);
+    };
+  }
+
+}
+function createPlugin(factory) {
+  return new Plugin(factory);
+}
+
+const parseRepo = () => {
+  try {
+    const pkg = fs.readJsonSync(appPackageJson);
+    return getPkgRepo(pkg);
+  } catch (err) {
+    return null;
+  }
+};
+const getRepoUrl = () => {
+  const repo = parseRepo();
+  return repo && (repo.browsetemplate && repo.browsetemplate.replace('{domain}', repo.domain).replace('{user}', repo.user).replace('{project}', repo.project).replace('{/tree/committish}', '') || repo.browse && repo.browse());
+};
+
+const getBitBucketPath = (branch, relative) => {
+  const querystring = `?mode=edit&spa=0&at=${branch}&fileviewer=file-view-default`;
+  const filepath = path.join(`/src/${branch}`, relative, `{{filepath}}`);
+  return `${filepath}${querystring}`;
+};
+
+const getTree = (repo, branch, relative) => {
+  const defaultPath = path.join(`/edit/${branch}`, relative, `{{filepath}}`);
+  const bitBucketPath = getBitBucketPath(branch, relative);
+  if (repo && repo.type === 'bitbucket') return bitBucketPath;
+  return defaultPath;
+};
+
+const getRepoEditUrl = (src, branch) => {
+  try {
+    const repo = parseRepo();
+    const project = path.parse(findup.sync('.git')).dir;
+    const root$1 = path.join(root, src);
+    const relative = path.relative(project, root$1);
+    const tree = getTree(repo, branch, relative);
+    return repo && repo.browsetemplate && repo.browsetemplate.replace('{domain}', repo.domain).replace('{user}', repo.user).replace('{project}', repo.project).replace('{/tree/committish}', tree);
+  } catch (err) {
+    return null;
+  }
+};
+
+const fromTemplates = file => path.join(templates, file);
+
+const mapToObj = map => Array.from(map.entries()).reduce((obj, [key, value]) => Object.assign({}, obj, {
+  [`${key}`]: value
+}), {});
+
+const matchFilesWithSrc = config => files => {
+  const src = path.relative(root, config.src);
+  return files.map(file => file.startsWith(src) ? file : path.join(src, file));
+};
+
+const writeAppFiles = async (config, dev) => {
+  const {
+    plugins,
+    theme
+  } = config;
+  const props = Plugin.propsOfPlugins(plugins);
+  const onPreRenders = props('onPreRender');
+  const onPostRenders = props('onPostRender');
+  const isProd = !dev;
+  const root = await fs$2.compiled(fromTemplates('root.tpl.js'), {
+    minimize: false
+  });
+  const js = await fs$2.compiled(fromTemplates('index.tpl.js'), {
+    minimize: false
+  });
+  const websocketUrl = `ws://${config.websocketHost}:${config.websocketPort}`;
+  const rawRootJs = root({
+    theme,
+    isProd,
+    wrapper: config.wrapper,
+    websocketUrl
+  });
+  const rawIndexJs = js({
+    onPreRenders,
+    onPostRenders,
+    isProd
+  });
+  await fs.remove(rootJs);
+  await fs.remove(indexJs);
+  await fs$2.touch(rootJs, rawRootJs);
+  await fs$2.touch(indexJs, rawIndexJs);
+};
+
+class Entries {
+  static async writeApp(config, dev) {
+    await fs.ensureDir(app);
+    await writeAppFiles(config, dev);
+  }
+
+  static async writeImports(map) {
+    const imports = await fs$2.compiled(fromTemplates('imports.tpl.js'));
+    const rawImportsJs = imports({
+      entries: Object.values(map)
+    });
+    await fs$2.touch(path.join(app, 'imports.js'), rawImportsJs);
+  }
+
+  constructor(config) {
+    this.repoEditUrl = getRepoEditUrl(config.src, config.editBranch);
+    this.all = new Map();
+
+    this.get = async () => this.getMap(config);
+  }
+
+  async getMap(config) {
+    const {
+      src,
+      files: pattern,
+      ignore,
+      plugins,
+      mdPlugins
+    } = config;
+    const arr = Array.isArray(pattern) ? pattern : [pattern];
+    const toMatch = matchFilesWithSrc(config);
+    const files = await glob(toMatch(arr), {
+      ignore: ['**/node_modules/**'].concat(ignore),
+      onlyFiles: true,
+      unique: true,
+      nocase: true,
+      matchBase: true
+    });
+
+    const createEntry = async file => {
+      try {
+        const ast = await mdast.parseMdx(file, mdPlugins);
+        const entry = new Entry(ast, file, src, config);
+        if (this.repoEditUrl) entry.setLink(this.repoEditUrl);
+
+        const {
+          settings
+        } = entry,
+              rest = tslib_1.__rest(entry, ["settings"]);
+
+        return Object.assign({}, settings, rest);
+      } catch (err) {
+        logger.error(err);
+        return null;
+      }
+    };
+
+    const reduce = Plugin.reduceFromPlugins(plugins);
+    const modifiedFiles = reduce('modifyFiles', files);
+    const map = new Map();
+    const entries = await Promise.all(modifiedFiles.map(createEntry).filter(Boolean));
+
+    for (const entry of entries) {
+      if (entry) {
+        map.set(entry.filepath, entry);
+      }
+    }
+
+    this.all = map;
+    return mapToObj(map);
+  }
+
+}
+
+class DataServer {
+  constructor() {
+    this.states = new Set();
+    this.state = new Map();
+    this.listeners = new Set();
+  }
+
+  register(states) {
+    for (const state of states) this.states.add(state);
+
+    return this;
+  }
+
+  async start() {
+    const setState = (key, val) => this.setState(key, val);
+
+    const getState = () => this.getState();
+
+    await Promise.all(Array.from(this.states).map(async state => {
+      if (!_isFunction(state.start)) return;
+      return state.start({
+        setState,
+        getState
+      });
+    }));
+  }
+
+  close() {
+    for (const state of this.states) {
+      _isFunction(state.close) && state.close();
+    }
+  }
+
+  onStateChange(listener) {
+    this.listeners.add(listener);
+    return () => this.listeners.clear();
+  }
+
+  getState() {
+    return this.mapToObject(this.state);
+  }
+
+  setState(key, val) {
+    const prev = _get(key, this.getState());
+
+    const next = typeof val === 'function' ? val(prev) : val;
+    this.state.set(key, next);
+    this.writeDbFile();
+    this.listeners.forEach(listener => {
+      listener({
+        type: `state.${key}`,
+        payload: next
+      });
+    });
+  }
+
+  async writeDbFile() {
+    fs.outputJSONSync(db, this.mapToObject(this.state), {
+      spaces: 2
+    });
+  }
+
+  mapToObject(map) {
+    return Array.from(map.entries()).reduce((obj, [key, val]) => Object.assign({}, obj, {
+      [key]: val
+    }), {});
+  }
+
+}
+
+const onSignal = cb => {
+  const signals = ['SIGINT', 'SIGTERM'];
+
+  for (const sig of signals) {
+    process.on(sig, async () => {
+      await cb();
+      process.exit();
+    });
+  }
+};
+
+const isSocketOpened = socket => socket.readyState === WS.OPEN;
+
+const sender = socket => (type, payload) => {
+  if (socket && isSocketOpened(socket)) {
+    socket.send(JSON.stringify({
+      type,
+      payload
+    }));
+  }
+};
+
+class Socket {
+  constructor(server, host, port) {
+    if (server) {
+      this.client = new WS.Server({
+        server,
+        host,
+        port
+      });
+    }
+  }
+
+  onConnection(listener) {
+    if (!this.client) return;
+    this.client.on('connection', socket => {
+      const emit = sender(socket);
+      const subs = listener(socket, emit);
+
+      const handleClose = async () => {
+        subs();
+        socket.terminate();
+      };
+
+      this.client.on('close', handleClose);
+      onSignal(handleClose);
+    });
+  }
+
+}
+
+const toOmit = ['_', '$0', 'version', 'help'];
+const htmlContext = {
+  lang: 'en',
+  favicon: 'https://cdn-std.dprcdn.net/files/acc_649651/LUKiMl'
+};
+const doczRcBaseConfig = {
+  htmlContext,
+  themeConfig: {},
+  docgenConfig: {},
+  filterComponents: files => files.filter(filepath => /\/[A-Z]\w*\.(js|jsx|ts|tsx)$/.test(filepath)),
+  modifyBundlerConfig: config => config,
+  modifyBabelRc: babelrc => babelrc,
+  onCreateWebpackChain: () => null,
+  menu: [],
+  plugins: [],
+  mdPlugins: [],
+  hastPlugins: [],
+  ignore: ['**/readme.md', '**/changelog.md', '**/code_of_conduct.md', '**/contributing.md', '**/license.md']
+};
+const getBaseConfig = (argv, custom) => {
+  const initial = _omit(toOmit, argv);
+
+  const base = Object.assign({}, initial, doczRcBaseConfig, {
+    paths
+  });
+  return _merge(base, custom);
+};
+const parseConfig = async (argv, custom) => {
+  const port = await detectPort(argv.port);
+  const websocketPort = await detectPort(argv.websocketPort);
+  const defaultConfig = getBaseConfig(argv, Object.assign({
+    port,
+    websocketPort,
+    htmlContext
+  }, custom));
+  const config = argv.config ? loadCfg.loadFrom(path.resolve(argv.config), defaultConfig) : loadCfg.load('docz', defaultConfig);
+  const reduceAsync = Plugin.reduceFromPluginsAsync(config.plugins);
+  return reduceAsync('setConfig', config);
+};
+
+class Bundler {
+  constructor(params) {
+    const {
+      args,
+      config,
+      server,
+      build
+    } = params;
+    const run = Plugin.runPluginsMethod(args.plugins);
+    this.args = args;
+    this.config = config;
+    this.server = server;
+    this.builder = build;
+    this.hooks = {
+      onCreateWebpackChain(config, dev, args) {
+        run('onCreateWebpackChain', config, dev, args);
+      },
+
+      onPreCreateApp(app) {
+        run('onPreCreateApp', app);
+      },
+
+      onCreateApp(app) {
+        run('onCreateApp', app);
+      },
+
+      onServerListening(server) {
+        run('onServerListening', server);
+      }
+
+    };
+  }
+
+  async mountConfig(env) {
+    const {
+      plugins
+    } = this.args;
+    const isDev = env !== 'production';
+    const reduce = Plugin.reduceFromPlugins(plugins);
+    const userConfig = await this.config(this.hooks);
+    const config = reduce('modifyBundlerConfig', userConfig, isDev, this.args);
+    return this.args.modifyBundlerConfig(config, isDev, this.args);
+  }
+
+  async createApp(config) {
+    return this.server(config, this.hooks);
+  }
+
+  async build(config) {
+    const dist = getDist(this.args.dest);
+    const publicDir = path.join(root, this.args.public);
+
+    if (root === path.resolve(dist)) {
+      logger__default.fatal(new Error('Unexpected option: "dest" cannot be set to the current working directory.'));
+      process.exit(1);
+    }
+
+    await this.builder(config, dist, publicDir);
+  }
+
+}
+
+const excludeNodeModules = filepath => /node_modules/.test(filepath) || /@babel(?:\/|\\{1,2})runtime/.test(filepath);
+
+const sourceMaps = (config, args) => {
+  const srcPath = path.resolve(root, args.src);
+  config.module.rule('sourcemaps').test(/\.(js|mjs|jsx|ts|tsx|md|mdx)$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end().use('sourcemaps').loader(require.resolve('source-map-loader')).end().enforce('pre');
+};
+
+const addScriptLoaders = opts => {
+  const {
+    rule,
+    threadLoader = true,
+    babelrc,
+    args
+  } = opts;
+  return rule.when(!args.debug, rule => rule.use('cache-loader').loader(require.resolve('cache-loader')).options({
+    cacheDirectory: cache
+  })).when(Boolean(threadLoader), rule => rule.use('thread-loader').loader(require.resolve('thread-loader')).options({
+    workers: require('os').cpus().length - 1
+  })).use('babel-loader').loader(require.resolve('babel-loader')).options(babelrc).end();
+};
+
+const js = (config, args, babelrc) => {
+  const srcPath = path.resolve(root, args.src);
+  const rule = config.module.rule('js').test(/\.(jsx?|mjs)$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args
+  });
+};
+const ts = (config, args, babelrc) => {
+  const srcPath = path.resolve(root, args.src);
+  const rule = config.module.rule('ts').test(/\.tsx?$/).include.add(srcPath).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args
+  });
+};
+const mdx = (config, args, babelrc) => {
+  const {
+    mdPlugins,
+    hastPlugins
+  } = args;
+  const srcPath = path.resolve(root, args.src);
+  const rule = config.module.rule('mdx').test(/\.(md|markdown|mdx)$/).include.add(srcPath).add(root).add(app).end().exclude.add(excludeNodeModules).end();
+  addScriptLoaders({
+    rule,
+    babelrc,
+    args,
+    threadLoader: false
+  }).use('mdx-loader').loader(require.resolve('@mdx-js/loader')).options({
+    remarkPlugins: mdPlugins.concat([[frontmatter, {
+      type: 'yaml',
+      marker: '-'
+    }], remarkDocz]),
+    rehypePlugins: hastPlugins.concat([[rehypeDocz, {
+      root: root,
+      useCodeSandbox: args.codeSandbox
+    }], slug])
+  });
+};
+const INLINE_LIMIT = 10000;
+const images = config => {
+  config.module.rule('images').test(/\.(png|jpe?g|gif)(\?.*)?$/).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/img/[name].[hash:8].[ext]`
+  });
+};
+const svg = config => {
+  config.module.rule('svg').test(/\.(svg)(\?.*)?$/).use('file-loader').loader(require.resolve('file-loader')).options({
+    name: `static/img/[name].[hash:8].[ext]`
+  });
+};
+const media = config => {
+  config.module.rule('media').test(/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/media/[name].[hash:8].[ext]`
+  });
+};
+const fonts = config => {
+  config.module.rule('fonts').test(/\.(woff2?|eot|ttf|otf)(\?.*)?$/i).use('url-loader').loader(require.resolve('url-loader')).options({
+    limit: INLINE_LIMIT,
+    name: `static/fonts/[name].[hash:8].[ext]`
+  });
+};
+
+const wrapItems = item => Object.keys(item).map(key => `${key}="${item[key]}"`).join(' ');
+
+const generateTags = template => (items = []) => items.map(template).join('');
+
+const generateMetaTags = generateTags(item => `<meta ${wrapItems(item)}>`);
+const generateLinkTags = generateTags(item => `<link ${wrapItems(item)}>`);
+const generateScriptTags = generateTags(item => `<script ${wrapItems(item)}></script>`);
+
+const generateRawTags = (items = []) => {
+  if (typeof items === 'string' || items instanceof String) return items;
+  return items.map(item => item).join('');
+};
+
+const getHtmlFilepath = indexHtml => indexHtml ? path.resolve(root, indexHtml) : fromTemplates('index.tpl.html');
+
+const getPublicUrl = (config, dev) => {
+  const prefix = config.base === '/' ? '' : config.base;
+  return dev ? prefix : `${prefix}/public`;
+};
+
+const emptyLineTrim = new ctags.TemplateTag(ctags.replaceResultTransformer(/^\s*[\r\n]/gm, ''), ctags.trimResultTransformer);
+const htmlTemplate = async indexHtml => fs$2.compiled(getHtmlFilepath(indexHtml), {
+  minimize: false,
+  escape: false
+});
+const parseHtml = ({
+  config,
+  ctx,
+  dev,
+  template
+}) => {
+  const {
+    title,
+    description
+  } = config;
+  const {
+    publicPath,
+    css,
+    js,
+    lang = 'en',
+    favicon,
+    head = [],
+    body = [],
+    trimWhitespace
+  } = ctx;
+  const headStr = `
+    ${favicon ? `<link rel="icon" type="image/x-icon" href="${favicon}">` : ''}
+    ${head.meta ? generateMetaTags(head.meta) : ''}
+    ${head.links ? generateLinkTags(head.links) : ''}
+    ${head.raw ? generateRawTags(head.raw) : ''}
+    ${head.scripts ? generateScriptTags(head.scripts) : ''}
+    ${miniHtmlWebpack.generateCSSReferences(css, publicPath)}`;
+  const footerStr = `
+    ${body.raw ? generateRawTags(body.raw) : ''}
+    ${body.scripts ? generateScriptTags(body.scripts) : ''}
+    ${miniHtmlWebpack.generateJSReferences(js, publicPath)}`;
+  const doc = ctags.html(template({
+    title,
+    description,
+    lang,
+    head: headStr,
+    footer: footerStr,
+    publicUrl: getPublicUrl(config, dev)
+  }));
+  return trimWhitespace ? ctags.oneLineTrim(doc) : emptyLineTrim(doc);
+};
+
+const assets = (config, args, env) => {
+  const isProd = env === 'production';
+  const base = servedPath(args.base);
+  const publicPath = isProd ? base : '/';
+  config.plugin('assets-plugin').use(manifestPlugin, [{
+    publicPath,
+    fileName: 'assets.json'
+  }]);
+};
+const analyzer = config => {
+  config.plugin('bundle-analyzer').use(webpackBundleAnalyzer.BundleAnalyzerPlugin, [{
+    generateStatsFile: true,
+    openAnalyzer: false,
+    analyzerMode: 'static'
+  }]);
+};
+const injections = (config, args, env) => {
+  const {
+    stringify
+  } = JSON;
+  const base = servedPath(args.base);
+
+  const plugin = require('webpack/lib/DefinePlugin');
+
+  config.plugin('injections').use(plugin, [Object.assign({}, getClientEnvironment(base).stringified, {
+    NODE_ENV: stringify(env),
+    DOCZ_BASE_URL: stringify(base)
+  })]);
+};
+const ignore = config => {
+  config.plugin('ignore-plugin').use(webpack.IgnorePlugin, [/(regenerate\-unicode\-properties)|(elliptic)/, /node_modules/]);
+};
+const hot = config => {
+  config.plugin('hot-module-replacement').use(webpack.HotModuleReplacementPlugin, [{
+    multiStep: true
+  }]);
+};
+const html = async (config, args, env) => {
+  const dev = env !== 'production';
+  const template = await htmlTemplate(args.indexHtml);
+  config.plugin('html-plugin').use(miniHtmlWebpack__default, [{
+    context: Object.assign({}, args.htmlContext, {
+      trimWhitespace: true
+    }),
+    template: ctx => {
+      const doc = parseHtml({
+        ctx,
+        dev,
+        template,
+        config: args
+      });
+      return dev ? doc : htmlMinifier.minify(doc, {
+        removeComments: true,
+        collapseWhitespace: true,
+        removeRedundantAttributes: true,
+        useShortDoctype: true,
+        removeEmptyAttributes: true,
+        removeStyleLinkTypeAttributes: true,
+        keepClosingSlash: true,
+        minifyJS: true,
+        minifyCSS: true,
+        minifyURLs: true
+      });
+    }
+  }]);
+};
+const webpackBar = (config, args) => {
+  config.plugin('webpackbar').use(webpackBarPlugin, [{
+    name: 'Docz',
+    color: '#41b883'
+  }]);
+};
+const watchNodeModulesPlugin = config => {
+  config.plugin('watch-missing-node-modules').use(watchMissingNodeModules, [appNodeModules]);
+};
+
+const minifier = (config, args) => {
+  config.optimization.minimizer('js').use(TerserPlugin, [{
+    terserOptions: {
+      parse: {
+        ecma: 8
+      },
+      compress: {
+        ecma: 5,
+        warnings: false,
+        comparisons: false
+      },
+      mangle: {
+        safari10: true
+      },
+      output: {
+        ecma: 5,
+        comments: false,
+        ascii_only: true
+      }
+    },
+    parallel: true,
+    cache: !args.debug,
+    sourceMap: args.sourcemaps
+  }]);
+};
+
+const getBabelConfig = async (args, env, typescript) => {
+  const isProd = env === 'production';
+  const isDev = env === 'development';
+  const localBabelRc = loadCfg.load('babel', {
+    presets: [],
+    plugins: []
+  }, false, true);
+  const presets = [[require.resolve('babel-preset-react-app'), {
+    typescript,
+    flow: !args.typescript
+  }]];
+  const defaultPlugins = [[require.resolve('babel-plugin-export-metadata'), {
+    notUseSpecifiers: args.notUseSpecifiers
+  }], [require.resolve('babel-plugin-named-asset-import'), {
+    loaderMap: {
+      svg: {
+        ReactComponent: '@svgr/webpack?-prettier,-svgo![path]'
+      }
+    }
+  }]];
+
+  const config = _merge(localBabelRc, {
+    presets,
+    babelrc: false,
+    cacheCompression: args.debug ? false : isProd,
+    cacheDirectory: !args.debug,
+    cacheIdentifier: args.debug ? null : getCacheIdentifier(isProd ? 'production' : isDev && 'development', ['docz', 'docz-core']),
+    compact: isProd,
+    customize: require.resolve('babel-preset-react-app/webpack-overrides'),
+    plugins: defaultPlugins.concat(!isProd ? [require.resolve('react-hot-loader/babel')] : [])
+  });
+
+  const reduce = Plugin.reduceFromPlugins(args.plugins);
+  const newConfig = reduce('modifyBabelRc', config, args);
+  return args.modifyBabelRc(newConfig, args);
+};
+
+/* eslint-disable @typescript-eslint/camelcase */
+const createConfig = (args, env) => async hooks => {
+  const {
+    debug
+  } = args;
+  const config = new Config();
+  const isProd = env === 'production';
+  const base = servedPath(args.base);
+  const dist = getDist(args.dest);
+  const srcPath = path.resolve(root, args.src);
+  const publicPath = isProd ? base : '/';
+  /**
+   * general
+   */
+
+  config.context(root);
+  config.set('mode', env);
+  config.when(args.sourcemaps, cfg => cfg.devtool(isProd ? 'source-map' : 'cheap-module-eval-source-map'), cfg => cfg.devtool(false));
+  config.node.merge({
+    child_process: 'empty',
+    dgram: 'empty',
+    fs: 'empty',
+    net: 'empty',
+    tls: 'empty'
+  });
+  /**
+   * output
+   */
+
+  const outputProd = output => output.filename('static/js/[name].[hash].js').sourceMapFilename('static/js/[name].[hash].js.map').chunkFilename('static/js/[name].[chunkhash:8].js');
+
+  const outputDev = output => output.filename('static/js/[name].js').sourceMapFilename('static/js/[name].js.map');
+
+  config.output.pathinfo(true).path(path.resolve(root, dist)).publicPath(publicPath).when(isProd, outputProd, outputDev).crossOriginLoading('anonymous').devtoolModuleFilenameTemplate(info => path.resolve(info.resourcePath).replace(/\\/g, '/'));
+  /**
+   * entries
+   */
+
+  config.entry('app').when(!isProd, entry => entry.add(require.resolve('react-dev-utils/webpackHotDevClient'))).add(indexJs);
+  /**
+   * resolve
+   */
+
+  config.resolve.set('symlinks', true);
+  config.resolve.extensions.add('.web.js').add('.mjs').add('.js').add('.json').add('.web.jsx').add('.jsx').add('.mdx').end();
+  config.resolve.alias.set('react-native$', 'react-native-web');
+
+  const inYarnWorkspaces = __dirname.includes('/docz/core/docz-core');
+
+  const doczDependenciesDir = inYarnWorkspaces ? path.join(__dirname, '../../../../node_modules') : ownNodeModules;
+  config.resolve.modules.add('node_modules').add(doczDependenciesDir).add(srcPath).add(root).merge(envDotProp.get('node.path').split(path.delimiter).filter(Boolean));
+  config.resolveLoader.set('symlinks', true).modules // prioritize our own
+  .add('node_modules').add(doczDependenciesDir).add(root);
+  /**
+   * loaders
+   */
+
+  const jsBabelrc = await getBabelConfig(args, env);
+  const tsBabelrc = await getBabelConfig(args, env, true);
+  config.when(args.sourcemaps, cfg => sourceMaps(cfg, args));
+  js(config, args, jsBabelrc);
+  mdx(config, args, jsBabelrc);
+  images(config);
+  svg(config);
+  media(config);
+  fonts(config);
+  await html(config, args, env);
+  assets(config, args, env);
+  ignore(config);
+  injections(config, args, env);
+  isProd && hot(config);
+  config.when(debug, cfg => analyzer(cfg));
+  config.when(!isProd, cfg => watchNodeModulesPlugin(cfg));
+  config.when(!debug && !isProd, cfg => webpackBar(cfg, args));
+  /**
+   * typescript setup
+   */
+
+  config.when(args.typescript, cfg => {
+    cfg.resolve.extensions.prepend('.ts').prepend('.tsx').end();
+    ts(cfg, args, tsBabelrc);
+  });
+  /**
+   * optimization
+   */
+
+  config.optimization.nodeEnv(env).namedModules(true).minimize(isProd).splitChunks({
+    cacheGroups: {
+      vendor: {
+        test: /[\\/]node_modules[\\/]/,
+        name: 'vendors',
+        chunks: 'all'
+      }
+    }
+  });
+  config.performance.hints(false);
+  config.when(isProd, cfg => minifier(cfg, args));
+  hooks.onCreateWebpackChain(config, !isProd, args);
+  args.onCreateWebpackChain(config, !isProd, args);
+  return config.toConfig();
+};
+
+const devServerConfig = (hooks, args) => {
+  const srcPath = path.resolve(root, args.src);
+  const publicDir = path.resolve(root, args.public);
+  const nonExistentDir = path.resolve(__dirname, 'non-existent');
+  return {
+    publicPath: '/',
+    compress: true,
+    logLevel: args.debug ? 'debug' : 'silent',
+    clientLogLevel: args.debug ? 'info' : 'none',
+    contentBase: [nonExistentDir],
+    watchContentBase: true,
+    hot: true,
+    quiet: !args.debug,
+    open: true,
+    watchOptions: {
+      ignored: ignoredFiles(srcPath)
+    },
+    overlay: false,
+    host: args.host,
+    port: args.port,
+    historyApiFallback: {
+      disableDotRule: true
+    },
+    disableHostCheck: true,
+
+    before(app, server) {
+      app.use('/public', express.static(publicDir));
+      app.use(evalSourceMapMiddleware(server));
+      app.use(errorOverlayMiddleware());
+      hooks.onPreCreateApp(app);
+    },
+
+    after(app) {
+      hooks.onCreateApp(app);
+    }
+
+  };
+};
+
+const useYarn = fs$1.existsSync(appYarnLock);
+const server = args => async (config, hooks) => ({
+  start: async () => {
+    const serverConfig = devServerConfig(hooks, args);
+    const protocol = process.env.HTTPS === 'true' ? 'https' : 'http';
+
+    const appName = require(packageJson).name;
+
+    const useTypescript = args.typescript;
+    const urls = WebpackDevServerUtils.prepareUrls(protocol, args.host, args.port);
+    const devSocket = {
+      warnings: warnings => devServer.sockWrite(devServer.sockets, 'warnings', warnings),
+      errors: errors => devServer.sockWrite(devServer.sockets, 'errors', errors)
+    };
+    const compiler = WebpackDevServerUtils.createCompiler({
+      appName,
+      config,
+      devSocket,
+      urls,
+      useYarn,
+      useTypescript,
+      webpack: webpack__default
+    });
+    const devServer = new WebpackDevServer(compiler, serverConfig);
+    return devServer.listen(args.port, args.host, err => {
+      if (err) return logger__default.fatal(err);
+      hooks.onServerListening(devServer);
+    });
+  }
+});
+
+const FSR = require('react-dev-utils/FileSizeReporter');
+
+const formatWebpackMessages = require('react-dev-utils/formatWebpackMessages');
+const {
+  measureFileSizesBeforeBuild,
+  printFileSizesAfterBuild
+} = FSR;
+const WARN_AFTER_BUNDLE_GZIP_SIZE = 512 * 1024;
+const WARN_AFTER_CHUNK_GZIP_SIZE = 1024 * 1024;
+
+const hasCiEnvVar = () => envDotProp.get('ci', false, {
+  parse: true
+});
+
+const copyPublicFolder = async (dest, publicDir) => {
+  if (await fs.pathExists(publicDir)) {
+    await fs.copy(publicDir, distPublic(dest), {
+      dereference: true,
+      filter: file => file !== indexHtml
+    });
+  }
+};
+
+const compile = config => new Promise((resolve, reject) => {
+  let compiler;
+
+  try {
+    compiler = webpack__default(config);
+  } catch (err) {
+    onError(err);
+  }
+
+  compiler && compiler.run((err, stats) => {
+    if (err) reject(err);
+    resolve(stats);
+  });
+});
+
+const builder = async (config, previousFileSizes) => new Promise(async (resolve, reject) => {
+  try {
+    const stats = await compile(config);
+    const messages = formatWebpackMessages(stats.toJson({}, true));
+
+    if (messages.errors.length) {
+      return reject(new Error(messages.errors.join('\n\n')));
+    }
+
+    if (hasCiEnvVar() && messages.warnings.length) {
+      logger.warn('\nTreating warnings as errors because process.env.CI = true.\n' + 'Most CI servers set it automatically.\n');
+      return reject(new Error(messages.warnings.join('\n\n')));
+    }
+
+    return resolve({
+      stats,
+      previousFileSizes,
+      warnings: messages.warnings
+    });
+  } catch (err) {
+    reject(err);
+  }
+});
+
+const onSuccess = (dist, {
+  stats,
+  previousFileSizes,
+  warnings
+}) => {
+  if (warnings.length) {
+    logger.log();
+    logger.warn('Compiled with warnings.\n');
+    logger.warn(warnings.join('\n\n'));
+    logger.warn('\nSearch for the ' + chalk$1.underline(chalk$1.yellow('keywords')) + ' to learn more about each warning.');
+    logger.warn('To ignore, add ' + chalk$1.cyan('// eslint-disable-next-line') + ' to the line before.\n');
+  }
+
+  logger.log();
+  logger.log(`File sizes after gzip:\n`);
+  printFileSizesAfterBuild(stats, previousFileSizes, dist, WARN_AFTER_BUNDLE_GZIP_SIZE, WARN_AFTER_CHUNK_GZIP_SIZE);
+  logger.log();
+};
+
+const onError = err => {
+  logger.log();
+  logger.fatal(err);
+  process.exit(1);
+  logger.log();
+};
+
+const build = async (config, dist, publicDir) => {
+  const interactive = new logger.Signale({
+    interactive: true,
+    scope: 'build'
+  });
+
+  try {
+    interactive.start('Creating an optimized bundle');
+    await fs.ensureDir(dist);
+    const previousFileSizes = await measureFileSizesBeforeBuild(dist);
+    await fs.emptyDir(dist);
+    await copyPublicFolder(dist, publicDir);
+    const result = await builder(config, previousFileSizes);
+    interactive.success('Build successfully created');
+    onSuccess(dist, result);
+  } catch (err) {
+    logger.fatal(chalk$1.red('Failed to compile.\n'));
+    onError(err);
+  }
+};
+
+const bundler = (args, env) => new Bundler({
+  args,
+  build,
+  config: createConfig(args, env),
+  server: server(args)
+});
+
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+var chalk = require('chalk');
+
+var execSync = require('child_process').execSync;
+
+var spawn = require('cross-spawn');
+
+var opn = require('opn'); // https://github.com/sindresorhus/opn#app
+
+
+var OSX_CHROME = 'google chrome';
+const Actions = Object.freeze({
+  NONE: 0,
+  BROWSER: 1,
+  SCRIPT: 2
+});
+
+function getBrowserEnv() {
+  // Attempt to honor this environment variable.
+  // It is specific to the operating system.
+  // See https://github.com/sindresorhus/opn#app for documentation.
+  const value = process.env.BROWSER;
+  let action;
+
+  if (!value) {
+    // Default.
+    action = Actions.BROWSER;
+  } else if (value.toLowerCase().endsWith('.js')) {
+    action = Actions.SCRIPT;
+  } else if (value.toLowerCase() === 'none') {
+    action = Actions.NONE;
+  } else {
+    action = Actions.BROWSER;
+  }
+
+  return {
+    action,
+    value
+  };
+}
+
+function executeNodeScript(scriptPath, url) {
+  const extraArgs = process.argv.slice(2);
+  const child = spawn('node', [scriptPath, ...extraArgs, url], {
+    stdio: 'inherit'
+  });
+  child.on('close', code => {
+    if (code !== 0) {
+      console.log();
+      console.log(chalk.red('The script specified as BROWSER environment variable failed.'));
+      console.log(chalk.cyan(scriptPath) + ' exited with code ' + code + '.');
+      console.log();
+      return;
+    }
+  });
+  return true;
+}
+
+function startBrowserProcess(browser, url) {
+  // If we're on OS X, the user hasn't specifically
+  // requested a different browser, we can try opening
+  // Chrome with AppleScript. This lets us reuse an
+  // existing tab when possible instead of creating a new one.
+  const shouldTryOpenChromeWithAppleScript = process.platform === 'darwin' && (typeof browser !== 'string' || browser === OSX_CHROME);
+
+  if (shouldTryOpenChromeWithAppleScript) {
+    try {
+      // Try our best to reuse existing tab
+      // on OS X Google Chrome with AppleScript
+      execSync('ps cax | grep "Google Chrome"');
+      execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', {
+        cwd: __dirname,
+        stdio: 'ignore'
+      });
+      return true;
+    } catch (err) {// Ignore errors.
+    }
+  } // Another special case: on OS X, check if BROWSER has been set to "open".
+  // In this case, instead of passing `open` to `opn` (which won't work),
+  // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser):
+  // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768
+
+
+  if (process.platform === 'darwin' && browser === 'open') {
+    browser = undefined;
+  } // Fallback to opn
+  // (It will always open new tab)
+
+
+  try {
+    var options = {
+      app: browser,
+      wait: false
+    };
+    opn(url, options).catch(() => {}); // Prevent `unhandledRejection` error.
+
+    return true;
+  } catch (err) {
+    return false;
+  }
+}
+/**
+ * Reads the BROWSER environment variable and decides what to do with it. Returns
+ * true if it opened a browser or ran a node.js script, otherwise false.
+ */
+
+
+function openBrowser(url) {
+  const {
+    action,
+    value
+  } = getBrowserEnv();
+
+  switch (action) {
+    case Actions.NONE:
+      // Special case: BROWSER="none" will prevent opening completely.
+      return false;
+
+    case Actions.SCRIPT:
+      return executeNodeScript(value, url);
+
+    case Actions.BROWSER:
+      return startBrowserProcess(value, url);
+
+    default:
+      throw new Error('Not implemented.');
+  }
+}
+
+const mapToArray = (map = []) => Object.entries(map).map(entry => entry && {
+  key: entry[0],
+  value: entry[1]
+}).filter(Boolean);
+
+const updateEntries = entries => async p => {
+  const prev = _get('entries', p.getState());
+
+  const map = await entries.get();
+
+  if (map && !equal(prev, map)) {
+    await Entries.writeImports(map);
+    p.setState('entries', mapToArray(map));
+  }
+};
+
+const state = (entries, config, dev) => {
+  const src = path.relative(root, config.src);
+  const files = Array.isArray(config.files) ? config.files.map(filePath => path.join(src, filePath)) : path.join(src, config.files);
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(files, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'entries',
+    start: async params => {
+      const update = updateEntries(entries);
+      await update(params);
+
+      if (dev) {
+        watcher.on('add', async () => update(params));
+        watcher.on('change', async () => update(params));
+        watcher.on('unlink', async () => update(params));
+        watcher.on('raw', async (event, path, details) => {
+          if (details.event === 'moved' && details.type === 'directory') {
+            await update(params);
+          }
+        });
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+const getInitialConfig = config => {
+  const pkg = fs.readJsonSync(appPackageJson, {
+    throws: false
+  });
+  const repoUrl = getRepoUrl();
+  return {
+    title: config.title,
+    description: config.description,
+    menu: config.menu,
+    version: get(pkg, 'version'),
+    repository: repoUrl,
+    native: config.native,
+    codeSandbox: config.codeSandbox,
+    themeConfig: config.themeConfig,
+    separator: config.separator
+  };
+};
+
+const update = async (params, initial, {
+  config
+}) => {
+  const next = config ? loadCfg.loadFrom(path.resolve(config), initial, true, true) : loadCfg.load('docz', initial, true, true);
+  params.setState('config', next);
+};
+
+const state$1 = (config, dev) => {
+  const initial = getInitialConfig(config);
+  const glob = config.config || loadCfg.finds('docz');
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(glob, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'config',
+    start: async params => {
+      const fn = async () => update(params, initial, config);
+
+      await update(params, initial, config);
+
+      if (dev) {
+        watcher.on('add', fn);
+        watcher.on('change', fn);
+        watcher.on('unlink', fn);
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+const throwError = err => {
+  logger__default.fatal(`Error parsing static types`);
+  logger__default.error(err);
+};
+
+const jsParser = (files, config) => {
+  const resolver = config.docgenConfig.resolver || reactDocgen.resolver.findAllExportedComponentDefinitions;
+
+  const parseFilepathProps = filepath => {
+    const handlers = reactDocgen.defaultHandlers.concat([externalProptypesHandler(filepath), actualNameHandler]);
+
+    try {
+      const code = fs.readFileSync(filepath, 'utf-8');
+      const props = reactDocgen.parse(code, resolver, handlers);
+      return {
+        key: path.normalize(filepath),
+        value: props
+      };
+    } catch (err) {
+      if (config.debug) throwError(err);
+      return null;
+    }
+  };
+
+  return files.map(parseFilepathProps).filter(Boolean);
+};
+
+const digest = str => crypto.createHash('md5').update(str).digest('hex');
+
+const cacheFilepath = path.join(cache, 'propsParser.json');
+
+const readCacheFile = () => fs.readJSONSync(cacheFilepath, {
+  throws: false
+});
+
+function checkFilesOnCache(files) {
+  const cache = readCacheFile();
+  if (_isEmpty(cache)) return files;
+  return files.filter(filepath => {
+    const normalized = path.normalize(filepath);
+    const hash = digest(fs.readFileSync(normalized, 'utf-8'));
+
+    const found = _get(normalized, cache);
+
+    return found && hash !== found.hash;
+  });
+}
+
+function writePropsOnCache(items) {
+  const cache = readCacheFile();
+  const newCache = items.reduce((obj, {
+    key: filepath,
+    value
+  }) => {
+    const normalized = path.normalize(filepath);
+    const hash = digest(fs.readFileSync(normalized, 'utf-8'));
+    return Object.assign({}, obj, {
+      [normalized]: {
+        hash,
+        props: value
+      }
+    });
+  }, {});
+  fs.outputJSONSync(cacheFilepath, Object.assign({}, cache, newCache));
+}
+
+function getPropsOnCache() {
+  const cache = readCacheFile();
+
+  if (_isEmpty(cache)) {
+    logger.warn('Any cache was found with your props definitions');
+    logger.warn("We'll parse your components to get props from them");
+    logger.warn('Depending on your components, this could take while...');
+    return [];
+  }
+
+  return Object.entries(cache).map(([key, value]) => ({
+    key,
+    value: _get('props', value)
+  }));
+}
+
+const mergeWithCache = (cache, props) => {
+  const keys = props.map(_prop('key'));
+  return cache.filter(item => !_contains(item.key, keys)).concat(props);
+};
+
+const removeFromCache = filepath => {
+  const cache = readCacheFile();
+  fs.outputJSONSync(cacheFilepath, _omit(filepath, cache));
+};
+
+const getInitialFilesMap = () => {
+  const cache = readCacheFile();
+  if (_isEmpty(cache)) return new Map();
+  const map = new Map();
+
+  _entries(cache).forEach(([filepath]) => {
+    const exist = fs.pathExistsSync(filepath);
+
+    if (!exist) {
+      removeFromCache(filepath);
+    } else {
+      map.set(filepath, {
+        text: fs.readFileSync(filepath, 'utf-8'),
+        version: 0
+      });
+    }
+  });
+
+  return map;
+};
+
+let languageService = null;
+const filesMap = getInitialFilesMap();
+
+function getTSConfigFile(tsconfigPath) {
+  const basePath = path.dirname(tsconfigPath);
+  const configFile = ts$1.readConfigFile(tsconfigPath, ts$1.sys.readFile);
+  return ts$1.parseJsonConfigFileContent(configFile.config, ts$1.sys, basePath, {}, tsconfigPath);
+}
+
+function loadFiles(filesToLoad) {
+  filesToLoad.forEach(filepath => {
+    const normalized = path.normalize(filepath);
+    const found = filesMap.get(normalized);
+    filesMap.set(normalized, {
+      text: fs.readFileSync(normalized, 'utf-8'),
+      version: found ? found.version + 1 : 0
+    });
+  });
+}
+
+function createServiceHost(compilerOptions, files) {
+  return {
+    getScriptFileNames: () => {
+      return [...files.keys()];
+    },
+    getScriptVersion: fileName => {
+      const file = files.get(fileName);
+      return file && file.version.toString() || '';
+    },
+    getScriptSnapshot: fileName => {
+      if (!fs.existsSync(fileName)) {
+        return undefined;
+      }
+
+      let file = files.get(fileName);
+
+      if (file === undefined) {
+        const text = fs.readFileSync(fileName).toString();
+        file = {
+          version: 0,
+          text
+        };
+        files.set(fileName, file);
+      }
+
+      return ts$1.ScriptSnapshot.fromString(file.text);
+    },
+    getCurrentDirectory: () => process.cwd(),
+    getCompilationSettings: () => compilerOptions,
+    getDefaultLibFileName: options => ts$1.getDefaultLibFilePath(options),
+    fileExists: ts$1.sys.fileExists,
+    readFile: ts$1.sys.readFile,
+    readDirectory: ts$1.sys.readDirectory
+  };
+}
+
+const parseFiles = (files, config, tsconfig) => {
+  const opts = {
+    propFilter(prop) {
+      if (prop.parent == null) return true;
+      const propFilter = config.docgenConfig.propFilter;
+      const val = propFilter && _isFunction(propFilter) && propFilter(prop);
+      return !prop.parent.fileName.includes('node_modules') || Boolean(val);
+    },
+
+    componentNameResolver(exp, source) {
+      const componentNameResolver = config.docgenConfig.resolver;
+      const val = componentNameResolver && _isFunction(componentNameResolver) && componentNameResolver(exp, source);
+      return val;
+    }
+
+  };
+  loadFiles(files);
+  const parser = reactDocgenTs.withCustomConfig(tsconfig, opts);
+
+  const compilerOptions = _get('options', getTSConfigFile(tsconfig));
+
+  const programProvider = () => {
+    if (languageService) return languageService.getProgram();
+    const servicesHost = createServiceHost(compilerOptions, filesMap);
+    const documentRegistry = ts$1.createDocumentRegistry();
+    languageService = ts$1.createLanguageService(servicesHost, documentRegistry);
+    return languageService.getProgram();
+  };
+
+  return files.map(filepath => ({
+    key: path.normalize(filepath),
+    value: parser.parseWithProgramProvider(filepath, programProvider)
+  }));
+};
+
+const tsParser = (files, config, tsconfig) => {
+  if (!tsconfig) return null;
+  const filesToLoad = checkFilesOnCache(files);
+  const propsOnCache = getPropsOnCache();
+  if (!filesToLoad.length) return propsOnCache;
+  const next = parseFiles(filesToLoad, config, tsconfig);
+  writePropsOnCache(next);
+  return mergeWithCache(propsOnCache, next);
+};
+
+const docgen = async (files, config) => {
+  const tsconfig = await findup('tsconfig.json', {
+    cwd: root
+  });
+  return config.typescript ? tsParser(files, config, tsconfig) : jsParser(files, config);
+};
+
+const getPattern = config => {
+  const {
+    ignore,
+    src: source,
+    typescript: ts,
+    docgenConfig: docgenConfig
+  } = config;
+  const src = path.relative(root, docgenConfig.searchPath ? docgenConfig.searchPath : source);
+  return ignore.map(entry => `!**/${entry}`).concat([path.join(src, ts ? '**/*.{ts,tsx}' : '**/*.{js,jsx,mjs}'), '!**/node_modules', '!**/doczrc.js']);
+};
+
+const removeFilepath = (items, filepath) => items.filter(item => item.key !== filepath);
+
+const initial = (config, pattern) => async p => {
+  const {
+    filterComponents
+  } = config;
+  const files = await glob(pattern, {
+    cwd: root
+  });
+  const filtered = filterComponents ? filterComponents(files) : files;
+  const metadata = await docgen(filtered, config);
+  p.setState('props', metadata);
+};
+
+const change = (p, config) => async filepath => {
+  const prev = _get('props', p.getState());
+
+  const metadata = await docgen([filepath], config);
+  const filtered = metadata.filter(_propEq('key', filepath));
+  const next = removeFilepath(prev, filepath).concat(filtered);
+  p.setState('props', next);
+};
+
+const remove = p => async filepath => {
+  const prev = _get('props', p.getState());
+
+  const next = removeFilepath(prev, filepath);
+  p.setState('props', next);
+};
+
+const state$2 = (config, dev) => {
+  const pattern = getPattern(config);
+  const ignored = config.watchIgnore || /(((^|[\/\\])\..+)|(node_modules))/;
+  const watcher = chokidar.watch(pattern, {
+    cwd: root,
+    ignored,
+    persistent: true
+  });
+  watcher.setMaxListeners(Infinity);
+  return {
+    id: 'props',
+    start: async params => {
+      const addInitial = initial(config, pattern);
+      await addInitial(params);
+
+      if (dev) {
+        watcher.on('change', change(params, config));
+        watcher.on('unlink', remove(params));
+      }
+    },
+    close: () => {
+      watcher.close();
+    }
+  };
+};
+
+
+
+var index = /*#__PURE__*/Object.freeze({
+  entries: state,
+  config: state$1,
+  props: state$2
+});
+
+process.setMaxListeners(Infinity);
+const dev = async args => {
+  const env = envDotProp.get('node.env');
+  const config = await parseConfig(args);
+  const bundler$1 = bundler(config, env);
+  const entries = new Entries(config);
+  const {
+    websocketHost,
+    websocketPort
+  } = config;
+  const bundlerConfig = await bundler$1.mountConfig(env);
+  const app = await bundler$1.createApp(bundlerConfig);
+
+  try {
+    await Entries.writeApp(config, true);
+    await Entries.writeImports((await entries.get()));
+  } catch (err) {
+    logger.fatal('Failed to build your files');
+    logger.error(err);
+    process.exit(1);
+  }
+
+  const server = await app.start();
+  const dataServer = new DataServer();
+  const socket = new Socket(server, websocketHost, websocketPort);
+  if (config.propsParser) dataServer.register([state$2(config, true)]);
+  dataServer.register([state$1(config, true), state(entries, config, true)]);
+
+  try {
+    await dataServer.start();
+    if (args.open || args.o) openBrowser(`http://${config.host}:${config.port}`);
+  } catch (err) {
+    logger.fatal('Failed to process data server');
+    logger.error(err);
+    dataServer.close();
+    process.exit(1);
+  }
+
+  socket.onConnection((_, emit) => {
+    const subscribe = dataServer.onStateChange(action => {
+      emit(action.type, action.payload);
+    });
+    return () => subscribe();
+  });
+  onSignal(async () => {
+    dataServer.close();
+    server.close();
+  });
+  server.on('close', async () => {
+    dataServer.close();
+  });
+};
+
+const build$1 = async args => {
+  const env = envDotProp.get('node.env');
+  const config = await parseConfig(args);
+  const entries = new Entries(config);
+  const bundler$1 = bundler(config, env);
+  const bundlerConfig = await bundler$1.mountConfig(env);
+  const run = Plugin.runPluginsMethod(config.plugins);
+  const dataServer = new DataServer();
+  if (config.propsParser) dataServer.register([state$2(config)]);
+  dataServer.register([state$1(config), state(entries, config)]);
+
+  try {
+    await Entries.writeApp(config, false);
+    await Entries.writeImports((await entries.get()));
+    await dataServer.start();
+    await run('onPreBuild', config);
+    await bundler$1.build(bundlerConfig);
+    await run('onPostBuild', config);
+    dataServer.close();
+  } catch (err) {
+    logger.error(err);
+    process.exit(1);
+    dataServer.close();
+  }
+};
+
+const serve = async args => {
+  const config = await parseConfig(args);
+  const dist = getDist(config.dest);
+  spawn$1.sync('serve', ['-s', dist], {
+    stdio: 'inherit'
+  });
+};
+
+const cli = () => {
+  return yargs.command('dev', 'initialize docz dev server', setArgs, async args => {
+    setEnv('development');
+    await dev(args);
+  }).command('build', 'build dir as static site', setArgs, async args => {
+    setEnv('production');
+    await build$1(args);
+    process.exit();
+  }).command('serve', 'serve dir as static site', setArgs, async args => {
+    setEnv('production');
+    await build$1(args);
+    await serve(args);
+    process.exit();
+  }).demandCommand().help().wrap(72).epilog('for more information visit https://github.com/pedronauck/docz').showHelpOnFail(false, 'whoops, something went wrong! run with --help').argv;
+};
+
+/** cli exports */
+
+exports.DataServer = DataServer;
+exports.Entries = Entries;
+exports.Entry = Entry;
+exports.Plugin = Plugin;
+exports.cli = cli;
+exports.createPlugin = createPlugin;
+exports.getBaseConfig = getBaseConfig;
+exports.parseConfig = parseConfig;
+exports.setArgs = setArgs;
+exports.states = index;
diff --git a/docs/docz-lib/docz-core/dist/lib/Bundler.d.ts b/docs/docz-lib/docz-core/dist/lib/Bundler.d.ts
new file mode 100644
index 0000000..227c18f
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/Bundler.d.ts
@@ -0,0 +1,35 @@
+/// <reference types="node" />
+import * as http from 'http';
+import { Config as Args, Env } from '../config/argv';
+export interface ServerHooks {
+    onCreateWebpackChain<C>(config: C, dev: boolean, args: Args): void;
+    onPreCreateApp<A>(app: A): void;
+    onCreateApp<A>(app: A): void;
+    onServerListening<S>(server: S): void;
+}
+export interface BundlerServer {
+    start(): Promise<http.Server>;
+}
+export declare type ConfigFn<C> = (hooks: ServerHooks) => Promise<C>;
+export declare type BuildFn<C> = (config: C, dist: string, publicDir: string) => void;
+export declare type ServerFn<C> = (config: C, hooks: ServerHooks) => BundlerServer | Promise<BundlerServer>;
+export interface BundlerConstructor<Config> {
+    args: Args;
+    config: ConfigFn<Config>;
+    server: ServerFn<Config>;
+    build: BuildFn<Config>;
+}
+export interface ConfigObj {
+    [key: string]: any;
+}
+export declare class Bundler<C = ConfigObj> {
+    private readonly args;
+    private config;
+    private server;
+    private builder;
+    private hooks;
+    constructor(params: BundlerConstructor<C>);
+    mountConfig(env: Env): Promise<C>;
+    createApp(config: C): Promise<BundlerServer>;
+    build(config: C): Promise<void>;
+}
diff --git a/docs/docz-lib/docz-core/dist/lib/DataServer.d.ts b/docs/docz-lib/docz-core/dist/lib/DataServer.d.ts
new file mode 100644
index 0000000..2fec3af
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/DataServer.d.ts
@@ -0,0 +1,28 @@
+export interface Params {
+    getState: () => Record<string, any>;
+    setState: (key: string, val: any) => void;
+}
+export interface State {
+    id: string;
+    start: (params: Params) => Promise<void>;
+    close: () => void;
+}
+export interface Action {
+    type: string;
+    payload: any;
+}
+export declare type Listener = (action: Action) => void;
+export declare class DataServer {
+    private states;
+    private state;
+    private listeners;
+    constructor();
+    register(states: State[]): DataServer;
+    start(): Promise<void>;
+    close(): void;
+    onStateChange(listener: Listener): () => void;
+    getState(): Map<string, any>;
+    private setState;
+    private writeDbFile;
+    private mapToObject;
+}
diff --git a/docs/docz-lib/docz-core/dist/lib/Entries.d.ts b/docs/docz-lib/docz-core/dist/lib/Entries.d.ts
new file mode 100644
index 0000000..9b7cc16
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/Entries.d.ts
@@ -0,0 +1,13 @@
+import { EntryObj } from './Entry';
+import { Config } from '../config/argv';
+export declare const fromTemplates: (file: string) => string;
+export declare type EntryMap = Record<string, EntryObj>;
+export declare class Entries {
+    static writeApp(config: Config, dev: boolean): Promise<void>;
+    static writeImports(map: EntryMap): Promise<void>;
+    all: Map<string, EntryObj>;
+    get: () => Promise<EntryMap>;
+    repoEditUrl: string | null;
+    constructor(config: Config);
+    private getMap;
+}
diff --git a/docs/docz-lib/docz-core/dist/lib/Entry.d.ts b/docs/docz-lib/docz-core/dist/lib/Entry.d.ts
new file mode 100644
index 0000000..a9dc790
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/Entry.d.ts
@@ -0,0 +1,33 @@
+import { Heading } from 'docz-utils/lib/mdast';
+import { Config } from '../config/argv';
+export interface EntryObj {
+    id: string;
+    filepath: string;
+    link: string | null;
+    slug: string;
+    name: string;
+    route: string;
+    menu: string | null;
+    headings: Heading[];
+    [key: string]: any;
+}
+export declare class Entry {
+    readonly [key: string]: any;
+    id: string;
+    filepath: string;
+    link: string | null;
+    slug: string;
+    route: string;
+    name: string;
+    menu: string | null;
+    headings: Heading[];
+    settings: {
+        [key: string]: any;
+    };
+    constructor(ast: any, file: string, src: string, config: Config);
+    setLink(url: string): void;
+    private getFilepath;
+    private getName;
+    private slugify;
+    private getRoute;
+}
diff --git a/docs/docz-lib/docz-core/dist/lib/Plugin.d.ts b/docs/docz-lib/docz-core/dist/lib/Plugin.d.ts
new file mode 100644
index 0000000..9c6917c
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/Plugin.d.ts
@@ -0,0 +1,49 @@
+import WebpackChainConfig from 'webpack-chain';
+import { Config } from '../config/argv';
+import { BabelRC } from '../config/babel';
+export declare type SetConfig = (config: Config) => Config | Promise<Config>;
+export declare type ModifyBundlerConfig<C = any> = (config: C, dev: boolean, args: Config) => C;
+export declare type ModifyBabelRC = (babelrc: BabelRC, args: Config) => BabelRC;
+export declare type ModifyFiles = (files: string[], args: Config) => string[];
+export declare type OnCreateWebpackChain = (config: WebpackChainConfig, dev: boolean, args: Config) => void;
+export declare type onPreCreateApp = <A>(app: A) => void;
+export declare type onCreateApp = <A>(app: A) => void;
+export declare type OnServerListening = <S>(server: S) => void;
+export declare type OnPreBuild = (args: Config) => void;
+export declare type OnPostBuild = (args: Config) => void;
+export declare type OnPreRender = () => void;
+export declare type OnPostRender = () => void;
+export interface PluginFactory {
+    setConfig?: SetConfig;
+    modifyBundlerConfig?: ModifyBundlerConfig;
+    modifyBabelRc?: ModifyBabelRC;
+    modifyFiles?: ModifyFiles;
+    onCreateWebpackChain?: OnCreateWebpackChain;
+    onPreCreateApp?: onPreCreateApp;
+    onCreateApp?: onCreateApp;
+    onServerListening?: OnServerListening;
+    onPreBuild?: OnPreBuild;
+    onPostBuild?: OnPostBuild;
+    onPreRender?: OnPreRender;
+    onPostRender?: OnPostRender;
+}
+export declare class Plugin<C = any> implements PluginFactory {
+    static runPluginsMethod(plugins: Plugin[] | undefined): (method: keyof Plugin, ...args: any[]) => void;
+    static propsOfPlugins(plugins: Plugin[]): (prop: keyof Plugin) => any[];
+    static reduceFromPlugins<C>(plugins: Plugin[] | undefined): (method: keyof Plugin, initial: C, ...args: any[]) => C;
+    static reduceFromPluginsAsync<C>(plugins: Plugin[] | undefined): (method: keyof Plugin, initial: C, ...args: any[]) => Promise<C>;
+    readonly setConfig?: SetConfig;
+    readonly modifyBundlerConfig?: ModifyBundlerConfig<C>;
+    readonly modifyBabelRc?: ModifyBabelRC;
+    readonly modifyFiles?: ModifyFiles;
+    readonly onCreateWebpackChain?: OnCreateWebpackChain;
+    readonly onPreCreateApp?: onPreCreateApp;
+    readonly onCreateApp?: onCreateApp;
+    readonly onServerListening?: OnServerListening;
+    readonly onPreBuild?: OnPreBuild;
+    readonly onPostBuild?: OnPostBuild;
+    readonly onPreRender?: OnPreRender;
+    readonly onPostRender?: OnPostRender;
+    constructor(p: PluginFactory);
+}
+export declare function createPlugin<C = any>(factory: PluginFactory): Plugin<C>;
diff --git a/docs/docz-lib/docz-core/dist/lib/Socket.d.ts b/docs/docz-lib/docz-core/dist/lib/Socket.d.ts
new file mode 100644
index 0000000..d4254ff
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/lib/Socket.d.ts
@@ -0,0 +1,8 @@
+import WS from 'ws';
+export declare type Send = (type: string, payload: any) => void;
+export declare type On = (type: string) => Promise<any>;
+export declare class Socket {
+    private client?;
+    constructor(server?: any, host?: string, port?: number);
+    onConnection(listener: (socket: WS, emit: Send) => () => void): void;
+}
diff --git a/docs/docz-lib/docz-core/dist/states/config.d.ts b/docs/docz-lib/docz-core/dist/states/config.d.ts
new file mode 100644
index 0000000..c2205d5
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/states/config.d.ts
@@ -0,0 +1,3 @@
+import { State } from '../lib/DataServer';
+import { Config } from '../config/argv';
+export declare const state: (config: Config, dev?: boolean | undefined) => State;
diff --git a/docs/docz-lib/docz-core/dist/states/entries.d.ts b/docs/docz-lib/docz-core/dist/states/entries.d.ts
new file mode 100644
index 0000000..cc04acd
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/states/entries.d.ts
@@ -0,0 +1,4 @@
+import { State } from '../lib/DataServer';
+import { Entries } from '../lib/Entries';
+import { Config } from '../config/argv';
+export declare const state: (entries: Entries, config: Config, dev?: boolean | undefined) => State;
diff --git a/docs/docz-lib/docz-core/dist/states/index.d.ts b/docs/docz-lib/docz-core/dist/states/index.d.ts
new file mode 100644
index 0000000..36f20b5
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/states/index.d.ts
@@ -0,0 +1,3 @@
+export { state as entries } from './entries';
+export { state as config } from './config';
+export { state as props } from './props';
diff --git a/docs/docz-lib/docz-core/dist/states/props.d.ts b/docs/docz-lib/docz-core/dist/states/props.d.ts
new file mode 100644
index 0000000..c2205d5
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/states/props.d.ts
@@ -0,0 +1,3 @@
+import { State } from '../lib/DataServer';
+import { Config } from '../config/argv';
+export declare const state: (config: Config, dev?: boolean | undefined) => State;
diff --git a/docs/docz-lib/docz-core/dist/templates/imports.tpl.js b/docs/docz-lib/docz-core/dist/templates/imports.tpl.js
new file mode 100644
index 0000000..a511179
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/templates/imports.tpl.js
@@ -0,0 +1,4 @@
+export const imports = {
+  <% entries.forEach(function(entry) { %>'<%- entry.filepath %>': () =>
+    import(/* webpackPrefetch: true, webpackChunkName: "<%- entry.slug %>" */ '<%- entry.filepath %>'),<% }) %>
+}
diff --git a/docs/docz-lib/docz-core/dist/templates/index.tpl.html b/docs/docz-lib/docz-core/dist/templates/index.tpl.html
new file mode 100644
index 0000000..fdb737c
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/templates/index.tpl.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<html lang="{{ lang }}">
+  <head>
+    <meta charset="UTF-8">
+    <meta name="description" content="{{ description }}">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta http-equiv="X-UA-Compatible" content="ie=edge">
+    <title>{{ title }}</title>
+    {{ head }}
+  </head>
+  <body>
+    <div id="root"></div>
+    {{ footer }}
+  </body>
+</html>
diff --git a/docs/docz-lib/docz-core/dist/templates/index.tpl.js b/docs/docz-lib/docz-core/dist/templates/index.tpl.js
new file mode 100644
index 0000000..a828a1a
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/templates/index.tpl.js
@@ -0,0 +1,17 @@
+import React from 'react'
+import ReactDOM from 'react-dom'
+import Root from './root'
+
+const _onPreRenders = [<% if (onPreRenders) {%><%- onPreRenders %><%}%>]
+const _onPostRenders = [<% if (onPostRenders) {%><%- onPostRenders %><%}%>]
+
+const onPreRender = () => _onPreRenders.forEach(f => f && f())
+const onPostRender = () => _onPostRenders.forEach(f => f && f())
+
+const root = document.querySelector('#root')
+const render = (Component = Root) => {
+  onPreRender()
+  ReactDOM.render(<Component />, root, onPostRender)
+}
+
+render(Root)
diff --git a/docs/docz-lib/docz-core/dist/templates/root.tpl.js b/docs/docz-lib/docz-core/dist/templates/root.tpl.js
new file mode 100644
index 0000000..596c5ef
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/templates/root.tpl.js
@@ -0,0 +1,24 @@
+import React from 'react'
+import { Link, Router, Routes<% if (!isProd) {%>, useDataServer<%}%> } from '../../docz-lib/docz/dist'
+<% if (!isProd) {%>import { hot } from 'react-hot-loader'<%}%>
+import Theme from '<%- theme %>'
+
+import { imports } from './imports'
+import database from './db.json'
+<% if (wrapper) {%>import Wrapper from '<%- wrapper %>'<%}%>
+
+const Root = () => {
+  <% if (!isProd && websocketUrl) {%>useDataServer('<%- websocketUrl %>')<%}%>
+  return (
+    <Theme
+      <% if (wrapper) {%>wrapper={Wrapper}<%}%>
+      linkComponent={Link}
+      db={database}
+      >
+        <Routes imports={imports} />
+    </Theme>
+  )
+}
+
+<% if (!isProd) {%>export default hot(module)(Root)<%}%>
+<% if (isProd) {%>export default Root<%}%>
diff --git a/docs/docz-lib/docz-core/dist/utils/docgen/index.d.ts b/docs/docz-lib/docz-core/dist/utils/docgen/index.d.ts
new file mode 100644
index 0000000..7223731
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/docgen/index.d.ts
@@ -0,0 +1,2 @@
+import { Config } from '../../config/argv';
+export declare const docgen: (files: string[], config: Config) => Promise<any>;
diff --git a/docs/docz-lib/docz-core/dist/utils/docgen/javascript.d.ts b/docs/docz-lib/docz-core/dist/utils/docgen/javascript.d.ts
new file mode 100644
index 0000000..e1ff6e3
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/docgen/javascript.d.ts
@@ -0,0 +1,5 @@
+import { Config } from '../../config/argv';
+export declare const jsParser: (files: string[], config: Config) => ({
+    key: string;
+    value: any;
+} | null)[];
diff --git a/docs/docz-lib/docz-core/dist/utils/docgen/typescript.d.ts b/docs/docz-lib/docz-core/dist/utils/docgen/typescript.d.ts
new file mode 100644
index 0000000..72a9e07
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/docgen/typescript.d.ts
@@ -0,0 +1,6 @@
+import { Config } from '../../config/argv';
+export interface TSFile {
+    text?: string;
+    version: number;
+}
+export declare const tsParser: (files: string[], config: Config, tsconfig?: string | undefined) => any;
diff --git a/docs/docz-lib/docz-core/dist/utils/on-signal.d.ts b/docs/docz-lib/docz-core/dist/utils/on-signal.d.ts
new file mode 100644
index 0000000..e1a70b4
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/on-signal.d.ts
@@ -0,0 +1 @@
+export declare const onSignal: (cb: () => any) => void;
diff --git a/docs/docz-lib/docz-core/dist/utils/open-browser.d.ts b/docs/docz-lib/docz-core/dist/utils/open-browser.d.ts
new file mode 100644
index 0000000..04e169f
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/open-browser.d.ts
@@ -0,0 +1,11 @@
+/**
+ * Copyright (c) 2015-present, Facebook, Inc.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+/**
+ * Reads the BROWSER environment variable and decides what to do with it. Returns
+ * true if it opened a browser or ran a node.js script, otherwise false.
+ */
+export declare function openBrowser(url: any): boolean;
diff --git a/docs/docz-lib/docz-core/dist/utils/parse-html.d.ts b/docs/docz-lib/docz-core/dist/utils/parse-html.d.ts
new file mode 100644
index 0000000..aa74032
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/parse-html.d.ts
@@ -0,0 +1,11 @@
+import { Config } from '../config/argv';
+export declare type tagsTemplate = (type: string) => string;
+export declare const htmlTemplate: (indexHtml: string | undefined) => Promise<(data: any) => string>;
+interface ParseHtmlParams {
+    config: Config;
+    ctx: Record<string, any>;
+    dev: boolean;
+    template: (props: Record<string, any>) => string;
+}
+export declare const parseHtml: ({ config, ctx, dev, template }: ParseHtmlParams) => any;
+export {};
diff --git a/docs/docz-lib/docz-core/dist/utils/repo-info.d.ts b/docs/docz-lib/docz-core/dist/utils/repo-info.d.ts
new file mode 100644
index 0000000..916ee05
--- /dev/null
+++ b/docs/docz-lib/docz-core/dist/utils/repo-info.d.ts
@@ -0,0 +1,3 @@
+export declare const parseRepo: () => any;
+export declare const getRepoUrl: () => any;
+export declare const getRepoEditUrl: (src: string, branch: string) => string | null;
diff --git a/docs/docz-lib/docz/bin/index.js b/docs/docz-lib/docz/bin/index.js
new file mode 100755
index 0000000..044994a
--- /dev/null
+++ b/docs/docz-lib/docz/bin/index.js
@@ -0,0 +1,2 @@
+#!/usr/bin/env nodejs
+require('../../docz-core/dist/index.js').cli()
diff --git a/docs/docz-lib/docz/dist/Playground.esm.js b/docs/docz-lib/docz/dist/Playground.esm.js
new file mode 100644
index 0000000..382066e
--- /dev/null
+++ b/docs/docz-lib/docz/dist/Playground.esm.js
@@ -0,0 +1,42 @@
+import { createElement } from 'react';
+import 'lodash/fp/get';
+import { b as useComponents } from './chunk.esm.js';
+import 'lodash/fp/omit';
+import 'fast-deep-equal';
+import 'lodash/fp/merge';
+import 'array-sort';
+import 'lodash/fp/unionBy';
+import 'lodash/fp/flattenDepth';
+import 'lodash/fp/pipe';
+import 'ulid';
+import 'match-sorter';
+import 'lodash/fp/throttle';
+
+const Playground = ({
+  className,
+  style,
+  wrapper: Wrapper,
+  children,
+  __scope,
+  __position,
+  __code,
+  __codesandbox
+}) => {
+  const components = useComponents();
+  if (!components || !components.playground) return null;
+  const props = {
+    className,
+    style,
+    components
+  };
+  return createElement(components.playground, Object.assign({}, props, {
+    component: children,
+    wrapper: Wrapper,
+    scope: __scope,
+    position: __position,
+    code: __code,
+    codesandbox: __codesandbox
+  }));
+};
+
+export default Playground;
diff --git a/docs/docz-lib/docz/dist/Playground.js b/docs/docz-lib/docz/dist/Playground.js
new file mode 100644
index 0000000..82ed23f
--- /dev/null
+++ b/docs/docz-lib/docz/dist/Playground.js
@@ -0,0 +1,44 @@
+'use strict';
+
+var React = require('react');
+require('lodash/fp/get');
+var __chunk_1 = require('./chunk.js');
+require('lodash/fp/omit');
+require('fast-deep-equal');
+require('lodash/fp/merge');
+require('array-sort');
+require('lodash/fp/unionBy');
+require('lodash/fp/flattenDepth');
+require('lodash/fp/pipe');
+require('ulid');
+require('match-sorter');
+require('lodash/fp/throttle');
+
+const Playground = ({
+  className,
+  style,
+  wrapper: Wrapper,
+  children,
+  __scope,
+  __position,
+  __code,
+  __codesandbox
+}) => {
+  const components = __chunk_1.useComponents();
+  if (!components || !components.playground) return null;
+  const props = {
+    className,
+    style,
+    components
+  };
+  return React.createElement(components.playground, Object.assign({}, props, {
+    component: children,
+    wrapper: Wrapper,
+    scope: __scope,
+    position: __position,
+    code: __code,
+    codesandbox: __codesandbox
+  }));
+};
+
+exports.default = Playground;
diff --git a/docs/docz-lib/docz/dist/chunk.esm.js b/docs/docz-lib/docz/dist/chunk.esm.js
new file mode 100644
index 0000000..d9ea02c
--- /dev/null
+++ b/docs/docz-lib/docz/dist/chunk.esm.js
@@ -0,0 +1,311 @@
+import { createContext, createElement, useContext, Fragment, Component, useEffect, useMemo, useRef, useState } from 'react';
+import _get from 'lodash/fp/get';
+import _omit from 'lodash/fp/omit';
+import equal from 'fast-deep-equal';
+import _merge from 'lodash/fp/merge';
+import sort from 'array-sort';
+import _unionBy from 'lodash/fp/unionBy';
+import _flattenDepth from 'lodash/fp/flattenDepth';
+import _pipe from 'lodash/fp/pipe';
+import { ulid } from 'ulid';
+import match from 'match-sorter';
+import _throttle from 'lodash/fp/throttle';
+
+const DefaultNotFound = () => createElement(Fragment, null, "Not found");
+
+const DefaultLoading = () => createElement(Fragment, null, "Loading");
+
+const DefaultPage = ({
+  children
+}) => createElement(Fragment, null, children);
+
+const DefaultPlayground = ({
+  component,
+  code
+}) => createElement(Fragment, null, component, code);
+
+const defaultComponents = {
+  loading: DefaultLoading,
+  playground: DefaultPlayground,
+  notFound: DefaultNotFound,
+  page: DefaultPage
+};
+const ctx = createContext({});
+const ComponentsProvider = ({
+  components: themeComponents = {},
+  children
+}) => createElement(ctx.Provider, {
+  value: Object.assign({}, defaultComponents, themeComponents)
+}, children);
+const useComponents = () => {
+  return useContext(ctx);
+};
+
+const isFn = value => typeof value === 'function';
+function flatArrFromObject(arr, prop) {
+  const reducer = (arr, obj) => {
+    const value = _get(prop)(obj);
+
+    return value ? arr.concat([value]) : arr;
+  };
+
+  return Array.from(new Set(arr.reduce(reducer, [])));
+}
+function compare(a, b, reverse) {
+  if (a < b) return reverse ? 1 : -1;
+  if (a > b) return reverse ? -1 : 1;
+  return 0;
+}
+
+function create(initial) {
+  var _a;
+
+  const ctx = createContext(initial);
+  const listeners = new Set();
+
+  const dispatch = fn => {
+    listeners.forEach(listener => listener(fn));
+  };
+
+  return {
+    context: ctx,
+    set: fn => dispatch(fn),
+    Provider: (_a = class Provider extends Component {
+      constructor() {
+        super(...arguments);
+        this.state = this.props.initial || initial || {};
+      }
+
+      static getDerivedStateFromProps(props, state) {
+        if (!equal(props.initial, state)) return props.initial;
+        return null;
+      }
+
+      componentDidMount() {
+        listeners.add(fn => this.setState(fn));
+      }
+
+      componentWillUnmount() {
+        listeners.clear();
+      }
+
+      render() {
+        return createElement(ctx.Provider, {
+          value: this.state
+        }, this.props.children);
+      }
+
+    }, _a.displayName = 'DoczStateProvider', _a)
+  };
+}
+
+const doczState = create({});
+
+const useConfig = () => {
+  const state = useContext(doczState.context);
+  const {
+    linkComponent,
+    transform,
+    config,
+    themeConfig = {}
+  } = state;
+
+  const newConfig = _merge(themeConfig, config ? config.themeConfig : {});
+
+  const transformed = transform ? transform(newConfig) : newConfig;
+  return Object.assign({}, config, {
+    linkComponent,
+    themeConfig: transformed
+  });
+};
+
+const updateState = ev => {
+  const {
+    type,
+    payload
+  } = JSON.parse(ev.data);
+  const prop = type.startsWith('state.') && type.split('.')[1];
+
+  if (prop) {
+    doczState.set(state => Object.assign({}, state, {
+      [prop]: payload
+    }));
+  }
+};
+
+const useDataServer = url => {
+  useEffect(() => {
+    if (!url) return;
+    const socket = new WebSocket(url);
+    socket.onmessage = updateState;
+    return () => socket.close();
+  }, []);
+};
+
+const useDocs = () => {
+  const {
+    entries = []
+  } = useContext(doczState.context);
+  const arr = entries.map(({
+    value
+  }) => value);
+  return sort(arr, (a, b) => compare(a.name, b.name));
+};
+
+const noMenu = entry => !entry.menu;
+
+const fromMenu = menu => entry => entry.menu === menu;
+
+const entryAsMenu = entry => ({
+  name: entry.name,
+  route: entry.route,
+  parent: entry.parent
+});
+
+const entriesOfMenu = (menu, entries) => entries.filter(fromMenu(menu)).map(entryAsMenu);
+
+const parseMenu = entries => name => ({
+  name,
+  menu: entriesOfMenu(name, entries)
+});
+
+const menusFromEntries = entries => {
+  const entriesWithoutMenu = entries.filter(noMenu).map(entryAsMenu);
+  const menus = flatArrFromObject(entries, 'menu').map(parseMenu(entries));
+  return _unionBy('name', menus, entriesWithoutMenu);
+};
+
+const parseItemStr = item => typeof item === 'string' ? {
+  name: item
+} : item;
+
+const normalize = item => {
+  const selected = parseItemStr(item);
+  return Object.assign({}, selected, {
+    id: selected.id || ulid(),
+    parent: _get('parent', selected) || _get('parent', item),
+    menu: Array.isArray(selected.menu) ? selected.menu.map(normalize) : selected.menu
+  });
+};
+
+const clean = item => item.href || item.route ? _omit('menu', item) : item;
+
+const normalizeAndClean = _pipe(normalize, clean);
+
+const mergeMenus = (entriesMenu, configMenu) => {
+  const first = entriesMenu.map(normalizeAndClean);
+  const second = configMenu.map(normalizeAndClean);
+
+  const merged = _unionBy('name', first, second);
+
+  return merged.map(item => {
+    if (!item.menu) return item;
+    const found = second.find(i => i.name === item.name);
+    const foundMenu = found && found.menu;
+    return Object.assign({}, item, {
+      menu: foundMenu ? mergeMenus(item.menu, foundMenu) : item.menu || found.menu
+    });
+  });
+};
+
+const UNKNOWN_POS = Infinity;
+
+const findPos = (item, orderedList = []) => {
+  const name = typeof item !== 'string' ? _get('name', item) : item;
+  const pos = orderedList.findIndex(item => item === name);
+  return pos !== -1 ? pos : UNKNOWN_POS;
+};
+
+const compareWithMenu = (to = []) => (a, b) => {
+  const list = to.map(i => i.name || i);
+  return compare(findPos(a, list), findPos(b, list));
+};
+
+const sortByName = (a, b) => {
+  return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
+};
+
+const sortMenus = (first, second = []) => {
+  const sorted = sort(first, compareWithMenu(second), sortByName);
+  return sorted.map(item => {
+    if (!item.menu) return item;
+    const found = second.find(menu => menu.name === item.name);
+    const foundMenu = found && found.menu;
+    return Object.assign({}, item, {
+      menu: foundMenu ? sortMenus(item.menu, foundMenu) : sort(item.menu, sortByName)
+    });
+  });
+};
+
+const search = (val, menu) => {
+  const items = menu.map(item => [item].concat(item.menu || []));
+
+  const flattened = _flattenDepth(2, items);
+
+  const flattenedDeduplicated = [...new Set(flattened)];
+  return match(flattenedDeduplicated, val, {
+    keys: ['name']
+  });
+};
+
+const filterMenus = (items, filter) => {
+  if (!filter) return items;
+  return items.filter(filter).map(item => {
+    if (!item.menu) return item;
+    return Object.assign({}, item, {
+      menu: item.menu.filter(filter)
+    });
+  });
+};
+
+const useMenus = opts => {
+  const {
+    query = ''
+  } = opts || {};
+  const {
+    entries,
+    config
+  } = useContext(doczState.context);
+  if (!entries) return null;
+  const arr = entries.map(({
+    value
+  }) => value);
+  const entriesMenu = menusFromEntries(arr);
+  const sorted = useMemo(() => {
+    const merged = mergeMenus(entriesMenu, config.menu);
+    const result = sortMenus(merged, config.menu);
+    return filterMenus(result, opts && opts.filter);
+  }, [entries, config]);
+  return query && query.length > 0 ? search(query, sorted) : sorted;
+};
+
+const usePrevious = (value, defaultValue) => {
+  const ref = useRef(defaultValue);
+  useEffect(() => {
+    ref.current = value;
+  });
+  return ref.current;
+};
+
+const isClient = typeof window === 'object';
+
+const getSize = (initialWidth, initialHeight) => ({
+  innerHeight: isClient ? window.innerHeight : initialHeight,
+  innerWidth: isClient ? window.innerWidth : initialWidth,
+  outerHeight: isClient ? window.outerHeight : initialHeight,
+  outerWidth: isClient ? window.outerWidth : initialWidth
+});
+
+const useWindowSize = (throttleMs = 300, initialWidth = Infinity, initialHeight = Infinity) => {
+  const [windowSize, setWindowSize] = useState(getSize(initialHeight, initialHeight));
+
+  const tSetWindowResize = _throttle(throttleMs, () => setWindowSize(getSize(initialHeight, initialHeight)));
+
+  useEffect(() => {
+    window.addEventListener('resize', tSetWindowResize);
+    return () => void window.removeEventListener('resize', tSetWindowResize);
+  }, []);
+  return windowSize;
+};
+
+export { isFn as a, useComponents as b, doczState as c, useConfig as d, useDataServer as e, useDocs as f, useMenus as g, usePrevious as h, useWindowSize as i, ComponentsProvider as j };
diff --git a/docs/docz-lib/docz/dist/chunk.js b/docs/docz-lib/docz/dist/chunk.js
new file mode 100644
index 0000000..c68a824
--- /dev/null
+++ b/docs/docz-lib/docz/dist/chunk.js
@@ -0,0 +1,324 @@
+'use strict';
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var React = require('react');
+var _get = _interopDefault(require('lodash/fp/get'));
+var _omit = _interopDefault(require('lodash/fp/omit'));
+var equal = _interopDefault(require('fast-deep-equal'));
+var _merge = _interopDefault(require('lodash/fp/merge'));
+var sort = _interopDefault(require('array-sort'));
+var _unionBy = _interopDefault(require('lodash/fp/unionBy'));
+var _flattenDepth = _interopDefault(require('lodash/fp/flattenDepth'));
+var _pipe = _interopDefault(require('lodash/fp/pipe'));
+var ulid = require('ulid');
+var match = _interopDefault(require('match-sorter'));
+var _throttle = _interopDefault(require('lodash/fp/throttle'));
+
+const DefaultNotFound = () => React.createElement(React.Fragment, null, "Not found");
+
+const DefaultLoading = () => React.createElement(React.Fragment, null, "Loading");
+
+const DefaultPage = ({
+  children
+}) => React.createElement(React.Fragment, null, children);
+
+const DefaultPlayground = ({
+  component,
+  code
+}) => React.createElement(React.Fragment, null, component, code);
+
+const defaultComponents = {
+  loading: DefaultLoading,
+  playground: DefaultPlayground,
+  notFound: DefaultNotFound,
+  page: DefaultPage
+};
+const ctx = React.createContext({});
+const ComponentsProvider = ({
+  components: themeComponents = {},
+  children
+}) => React.createElement(ctx.Provider, {
+  value: Object.assign({}, defaultComponents, themeComponents)
+}, children);
+const useComponents = () => {
+  return React.useContext(ctx);
+};
+
+const isFn = value => typeof value === 'function';
+function flatArrFromObject(arr, prop) {
+  const reducer = (arr, obj) => {
+    const value = _get(prop)(obj);
+
+    return value ? arr.concat([value]) : arr;
+  };
+
+  return Array.from(new Set(arr.reduce(reducer, [])));
+}
+function compare(a, b, reverse) {
+  if (a < b) return reverse ? 1 : -1;
+  if (a > b) return reverse ? -1 : 1;
+  return 0;
+}
+
+function create(initial) {
+  var _a;
+
+  const ctx = React.createContext(initial);
+  const listeners = new Set();
+
+  const dispatch = fn => {
+    listeners.forEach(listener => listener(fn));
+  };
+
+  return {
+    context: ctx,
+    set: fn => dispatch(fn),
+    Provider: (_a = class Provider extends React.Component {
+      constructor() {
+        super(...arguments);
+        this.state = this.props.initial || initial || {};
+      }
+
+      static getDerivedStateFromProps(props, state) {
+        if (!equal(props.initial, state)) return props.initial;
+        return null;
+      }
+
+      componentDidMount() {
+        listeners.add(fn => this.setState(fn));
+      }
+
+      componentWillUnmount() {
+        listeners.clear();
+      }
+
+      render() {
+        return React.createElement(ctx.Provider, {
+          value: this.state
+        }, this.props.children);
+      }
+
+    }, _a.displayName = 'DoczStateProvider', _a)
+  };
+}
+
+const doczState = create({});
+
+const useConfig = () => {
+  const state = React.useContext(doczState.context);
+  const {
+    linkComponent,
+    transform,
+    config,
+    themeConfig = {}
+  } = state;
+
+  const newConfig = _merge(themeConfig, config ? config.themeConfig : {});
+
+  const transformed = transform ? transform(newConfig) : newConfig;
+  return Object.assign({}, config, {
+    linkComponent,
+    themeConfig: transformed
+  });
+};
+
+const updateState = ev => {
+  const {
+    type,
+    payload
+  } = JSON.parse(ev.data);
+  const prop = type.startsWith('state.') && type.split('.')[1];
+
+  if (prop) {
+    doczState.set(state => Object.assign({}, state, {
+      [prop]: payload
+    }));
+  }
+};
+
+const useDataServer = url => {
+  React.useEffect(() => {
+    if (!url) return;
+    const socket = new WebSocket(url);
+    socket.onmessage = updateState;
+    return () => socket.close();
+  }, []);
+};
+
+const useDocs = () => {
+  const {
+    entries = []
+  } = React.useContext(doczState.context);
+  const arr = entries.map(({
+    value
+  }) => value);
+  return sort(arr, (a, b) => compare(a.name, b.name));
+};
+
+const noMenu = entry => !entry.menu;
+
+const fromMenu = menu => entry => entry.menu === menu;
+
+const entryAsMenu = entry => ({
+  name: entry.name,
+  route: entry.route,
+  parent: entry.parent
+});
+
+const entriesOfMenu = (menu, entries) => entries.filter(fromMenu(menu)).map(entryAsMenu);
+
+const parseMenu = entries => name => ({
+  name,
+  menu: entriesOfMenu(name, entries)
+});
+
+const menusFromEntries = entries => {
+  const entriesWithoutMenu = entries.filter(noMenu).map(entryAsMenu);
+  const menus = flatArrFromObject(entries, 'menu').map(parseMenu(entries));
+  return _unionBy('name', menus, entriesWithoutMenu);
+};
+
+const parseItemStr = item => typeof item === 'string' ? {
+  name: item
+} : item;
+
+const normalize = item => {
+  const selected = parseItemStr(item);
+  return Object.assign({}, selected, {
+    id: selected.id || ulid.ulid(),
+    parent: _get('parent', selected) || _get('parent', item),
+    menu: Array.isArray(selected.menu) ? selected.menu.map(normalize) : selected.menu
+  });
+};
+
+const clean = item => item.href || item.route ? _omit('menu', item) : item;
+
+const normalizeAndClean = _pipe(normalize, clean);
+
+const mergeMenus = (entriesMenu, configMenu) => {
+  const first = entriesMenu.map(normalizeAndClean);
+  const second = configMenu.map(normalizeAndClean);
+
+  const merged = _unionBy('name', first, second);
+
+  return merged.map(item => {
+    if (!item.menu) return item;
+    const found = second.find(i => i.name === item.name);
+    const foundMenu = found && found.menu;
+    return Object.assign({}, item, {
+      menu: foundMenu ? mergeMenus(item.menu, foundMenu) : item.menu || found.menu
+    });
+  });
+};
+
+const UNKNOWN_POS = Infinity;
+
+const findPos = (item, orderedList = []) => {
+  const name = typeof item !== 'string' ? _get('name', item) : item;
+  const pos = orderedList.findIndex(item => item === name);
+  return pos !== -1 ? pos : UNKNOWN_POS;
+};
+
+const compareWithMenu = (to = []) => (a, b) => {
+  const list = to.map(i => i.name || i);
+  return compare(findPos(a, list), findPos(b, list));
+};
+
+const sortByName = (a, b) => {
+  return a.name < b.name ? -1 : a.name > b.name ? 1 : 0;
+};
+
+const sortMenus = (first, second = []) => {
+  const sorted = sort(first, compareWithMenu(second), sortByName);
+  return sorted.map(item => {
+    if (!item.menu) return item;
+    const found = second.find(menu => menu.name === item.name);
+    const foundMenu = found && found.menu;
+    return Object.assign({}, item, {
+      menu: foundMenu ? sortMenus(item.menu, foundMenu) : sort(item.menu, sortByName)
+    });
+  });
+};
+
+const search = (val, menu) => {
+  const items = menu.map(item => [item].concat(item.menu || []));
+
+  const flattened = _flattenDepth(2, items);
+
+  const flattenedDeduplicated = [...new Set(flattened)];
+  return match(flattenedDeduplicated, val, {
+    keys: ['name']
+  });
+};
+
+const filterMenus = (items, filter) => {
+  if (!filter) return items;
+  return items.filter(filter).map(item => {
+    if (!item.menu) return item;
+    return Object.assign({}, item, {
+      menu: item.menu.filter(filter)
+    });
+  });
+};
+
+const useMenus = opts => {
+  const {
+    query = ''
+  } = opts || {};
+  const {
+    entries,
+    config
+  } = React.useContext(doczState.context);
+  if (!entries) return null;
+  const arr = entries.map(({
+    value
+  }) => value);
+  const entriesMenu = menusFromEntries(arr);
+  const sorted = React.useMemo(() => {
+    const merged = mergeMenus(entriesMenu, config.menu);
+    const result = sortMenus(merged, config.menu);
+    return filterMenus(result, opts && opts.filter);
+  }, [entries, config]);
+  return query && query.length > 0 ? search(query, sorted) : sorted;
+};
+
+const usePrevious = (value, defaultValue) => {
+  const ref = React.useRef(defaultValue);
+  React.useEffect(() => {
+    ref.current = value;
+  });
+  return ref.current;
+};
+
+const isClient = typeof window === 'object';
+
+const getSize = (initialWidth, initialHeight) => ({
+  innerHeight: isClient ? window.innerHeight : initialHeight,
+  innerWidth: isClient ? window.innerWidth : initialWidth,
+  outerHeight: isClient ? window.outerHeight : initialHeight,
+  outerWidth: isClient ? window.outerWidth : initialWidth
+});
+
+const useWindowSize = (throttleMs = 300, initialWidth = Infinity, initialHeight = Infinity) => {
+  const [windowSize, setWindowSize] = React.useState(getSize(initialHeight, initialHeight));
+
+  const tSetWindowResize = _throttle(throttleMs, () => setWindowSize(getSize(initialHeight, initialHeight)));
+
+  React.useEffect(() => {
+    window.addEventListener('resize', tSetWindowResize);
+    return () => void window.removeEventListener('resize', tSetWindowResize);
+  }, []);
+  return windowSize;
+};
+
+exports.ComponentsProvider = ComponentsProvider;
+exports.doczState = doczState;
+exports.isFn = isFn;
+exports.useComponents = useComponents;
+exports.useConfig = useConfig;
+exports.useDataServer = useDataServer;
+exports.useDocs = useDocs;
+exports.useMenus = useMenus;
+exports.usePrevious = usePrevious;
+exports.useWindowSize = useWindowSize;
diff --git a/docs/docz-lib/docz/dist/components/AsyncComponent.d.ts b/docs/docz-lib/docz/dist/components/AsyncComponent.d.ts
new file mode 100644
index 0000000..9470a46
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/AsyncComponent.d.ts
@@ -0,0 +1,7 @@
+import { SFC, ComponentType } from 'react';
+interface Props {
+    as: ComponentType<any>;
+    getInitialProps?: (props: any) => any;
+}
+export declare const AsyncComponent: SFC<Props>;
+export {};
diff --git a/docs/docz-lib/docz/dist/components/AsyncPlayground.d.ts b/docs/docz-lib/docz/dist/components/AsyncPlayground.d.ts
new file mode 100644
index 0000000..c597825
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/AsyncPlayground.d.ts
@@ -0,0 +1,2 @@
+import * as React from 'react';
+export declare const Playground: React.SFC<any>;
diff --git a/docs/docz-lib/docz/dist/components/AsyncRoute.d.ts b/docs/docz-lib/docz/dist/components/AsyncRoute.d.ts
new file mode 100644
index 0000000..0f6ad6e
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/AsyncRoute.d.ts
@@ -0,0 +1,13 @@
+import { SFC } from 'react';
+import { Entry } from '../state';
+import { ComponentsMap } from '../hooks/useComponents';
+export declare type Imports = Record<string, () => Promise<any>>;
+export declare const loadRoute: (path: string, imports: Record<string, () => Promise<any>>, components: ComponentsMap) => import("@loadable/component").LoadableComponent<any>;
+interface AsyncRouteProps {
+    asyncComponent: any;
+    components: ComponentsMap;
+    path: string;
+    entry: Entry;
+}
+export declare const AsyncRoute: SFC<AsyncRouteProps>;
+export {};
diff --git a/docs/docz-lib/docz/dist/components/Link.d.ts b/docs/docz-lib/docz/dist/components/Link.d.ts
new file mode 100644
index 0000000..00ab189
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/Link.d.ts
@@ -0,0 +1,4 @@
+import * as React from 'react';
+import { LinkProps } from '@reach/router';
+export { LinkProps };
+export declare const Link: React.ForwardRefExoticComponent<Pick<LinkProps<any>, "key" | "download" | "hrefLang" | "media" | "rel" | "target" | "type" | "referrerPolicy" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "placeholder" | "slot" | "spellCheck" | "style" | "tabIndex" | "title" | "inputMode" | "is" | "radioGroup" | [...]
diff --git a/docs/docz-lib/docz/dist/components/Playground.d.ts b/docs/docz-lib/docz/dist/components/Playground.d.ts
new file mode 100644
index 0000000..1179bbf
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/Playground.d.ts
@@ -0,0 +1,13 @@
+import { ComponentType, SFC } from 'react';
+export interface PlaygroundProps {
+    className?: string;
+    style?: any;
+    wrapper?: ComponentType<any>;
+    children: any;
+    __scope: Record<string, any>;
+    __position: number;
+    __code: string;
+    __codesandbox: string;
+}
+declare const Playground: SFC<PlaygroundProps>;
+export default Playground;
diff --git a/docs/docz-lib/docz/dist/components/Props.d.ts b/docs/docz-lib/docz/dist/components/Props.d.ts
new file mode 100644
index 0000000..5729b46
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/Props.d.ts
@@ -0,0 +1,65 @@
+import { SFC, ComponentType } from 'react';
+export interface EnumValue {
+    value: string;
+    computed: boolean;
+}
+export interface FlowTypeElement {
+    name: string;
+    value: string;
+}
+export interface FlowTypeArgs {
+    name: string;
+    type: {
+        name: string;
+    };
+}
+export interface PropType {
+    name: string;
+    value?: any;
+    raw?: any;
+    computed?: boolean;
+}
+export interface FlowType extends PropType {
+    elements: FlowTypeElement[];
+    name: string;
+    raw: string;
+    type?: string;
+    computed?: boolean;
+    signature?: {
+        arguments: FlowTypeArgs[];
+        return: {
+            name: string;
+        };
+    };
+}
+export interface Prop {
+    required: boolean;
+    description?: string;
+    type: PropType;
+    defaultValue?: {
+        value: string;
+        computed: boolean;
+    };
+    flowType?: FlowType;
+}
+export declare type ComponentWithDocGenInfo = ComponentType & {
+    __docgenInfo: {
+        description?: string;
+        props?: Record<string, Prop>;
+    };
+};
+export interface PropsProps {
+    title?: Node;
+    isRaw?: boolean;
+    isToggle?: boolean;
+    of: ComponentWithDocGenInfo;
+}
+export declare const getPropType: (prop: Prop) => any;
+export interface PropsComponentProps {
+    title?: Node;
+    isRaw?: boolean;
+    isToggle?: boolean;
+    props: Record<string, Prop>;
+    getPropType(prop: Prop): string;
+}
+export declare const Props: SFC<PropsProps>;
diff --git a/docs/docz-lib/docz/dist/components/Routes.d.ts b/docs/docz-lib/docz/dist/components/Routes.d.ts
new file mode 100644
index 0000000..27776c9
--- /dev/null
+++ b/docs/docz-lib/docz/dist/components/Routes.d.ts
@@ -0,0 +1,8 @@
+import { SFC } from 'react';
+import { ComponentsMap } from '../hooks/useComponents';
+import { Imports } from './AsyncRoute';
+export interface RoutesProps {
+    components: ComponentsMap;
+    imports: Imports;
+}
+export declare const Routes: SFC<RoutesProps>;
diff --git a/docs/docz-lib/docz/dist/hooks/index.d.ts b/docs/docz-lib/docz/dist/hooks/index.d.ts
new file mode 100644
index 0000000..d02f7b8
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/index.d.ts
@@ -0,0 +1,7 @@
+export * from './useComponents';
+export { useConfig, UseConfigObj } from './useConfig';
+export { useDataServer } from './useDataServer';
+export { useDocs } from './useDocs';
+export { useMenus } from './useMenus';
+export { usePrevious } from './usePrevious';
+export { useWindowSize } from './useWindowSize';
diff --git a/docs/docz-lib/docz/dist/hooks/useComponents.d.ts b/docs/docz-lib/docz/dist/hooks/useComponents.d.ts
new file mode 100644
index 0000000..01e03cf
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useComponents.d.ts
@@ -0,0 +1,44 @@
+import { SFC, ComponentType as CT } from 'react';
+import { RouteComponentProps } from '@reach/router';
+import { Entry } from '../state';
+export declare type PageProps = RouteComponentProps<any> & {
+    doc: Entry;
+};
+export interface PlaygroundProps {
+    className?: string;
+    style?: any;
+    wrapper?: CT<any>;
+    components: ComponentsMap;
+    component: JSX.Element;
+    position: number;
+    code: string;
+    codesandbox: string;
+    scope: Record<string, any>;
+}
+export declare type PlaygroundComponent = CT<PlaygroundProps>;
+export interface ComponentsMap {
+    loading?: CT;
+    page?: CT<PageProps>;
+    notFound?: CT<RouteComponentProps<any>>;
+    playground?: PlaygroundComponent;
+    h1?: CT<any> | string;
+    h2?: CT<any> | string;
+    h3?: CT<any> | string;
+    h4?: CT<any> | string;
+    h5?: CT<any> | string;
+    h6?: CT<any> | string;
+    span?: CT<any> | string;
+    a?: CT<any> | string;
+    ul?: CT<any> | string;
+    table?: CT<any> | string;
+    pre?: CT<any> | string;
+    code?: CT<any> | string;
+    inlineCode?: CT<any> | string;
+    [key: string]: any;
+}
+export declare type NotFoundComponent = CT<RouteComponentProps<any>>;
+export interface ComponentsProviderProps {
+    components: ComponentsMap;
+}
+export declare const ComponentsProvider: SFC<ComponentsProviderProps>;
+export declare const useComponents: () => ComponentsMap;
diff --git a/docs/docz-lib/docz/dist/hooks/useConfig.d.ts b/docs/docz-lib/docz/dist/hooks/useConfig.d.ts
new file mode 100644
index 0000000..857250e
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useConfig.d.ts
@@ -0,0 +1,7 @@
+/// <reference types="react" />
+import { ThemeConfig, Config } from '../state';
+export interface UseConfigObj extends Config {
+    themeConfig: ThemeConfig;
+    linkComponent?: React.ComponentType<any>;
+}
+export declare const useConfig: () => UseConfigObj;
diff --git a/docs/docz-lib/docz/dist/hooks/useDataServer.d.ts b/docs/docz-lib/docz/dist/hooks/useDataServer.d.ts
new file mode 100644
index 0000000..6f66307
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useDataServer.d.ts
@@ -0,0 +1 @@
+export declare const useDataServer: (url: string | undefined) => void;
diff --git a/docs/docz-lib/docz/dist/hooks/useDocs.d.ts b/docs/docz-lib/docz/dist/hooks/useDocs.d.ts
new file mode 100644
index 0000000..b245978
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useDocs.d.ts
@@ -0,0 +1,2 @@
+import { Entry } from '../state';
+export declare const useDocs: () => Entry[] | null;
diff --git a/docs/docz-lib/docz/dist/hooks/useMenus.d.ts b/docs/docz-lib/docz/dist/hooks/useMenus.d.ts
new file mode 100644
index 0000000..88bb144
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useMenus.d.ts
@@ -0,0 +1,8 @@
+import { MenuItem } from '../state';
+declare type FilterFn = (item: MenuItem) => boolean;
+export interface UseMenusParams {
+    query?: string;
+    filter?: FilterFn;
+}
+export declare const useMenus: (opts?: UseMenusParams | undefined) => MenuItem[] | null;
+export {};
diff --git a/docs/docz-lib/docz/dist/hooks/usePrevious.d.ts b/docs/docz-lib/docz/dist/hooks/usePrevious.d.ts
new file mode 100644
index 0000000..2a58025
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/usePrevious.d.ts
@@ -0,0 +1 @@
+export declare const usePrevious: (value: any, defaultValue?: any) => any;
diff --git a/docs/docz-lib/docz/dist/hooks/useWindowSize.d.ts b/docs/docz-lib/docz/dist/hooks/useWindowSize.d.ts
new file mode 100644
index 0000000..006a9de
--- /dev/null
+++ b/docs/docz-lib/docz/dist/hooks/useWindowSize.d.ts
@@ -0,0 +1,6 @@
+export declare const useWindowSize: (throttleMs?: number, initialWidth?: number, initialHeight?: number) => {
+    innerHeight: number;
+    innerWidth: number;
+    outerHeight: number;
+    outerWidth: number;
+};
diff --git a/docs/docz-lib/docz/dist/index.d.ts b/docs/docz-lib/docz/dist/index.d.ts
new file mode 100644
index 0000000..cc8dd20
--- /dev/null
+++ b/docs/docz-lib/docz/dist/index.d.ts
@@ -0,0 +1,8 @@
+export { Playground } from './components/AsyncPlayground';
+export { AsyncRoute, loadRoute } from './components/AsyncRoute';
+export { Link, LinkProps } from './components/Link';
+export { Props, PropsComponentProps } from './components/Props';
+export { Routes } from './components/Routes';
+export * from './hooks';
+export { theme } from './theme';
+export { doczState, Entry, MenuItem, ThemeConfig } from './state';
diff --git a/docs/docz-lib/docz/dist/index.esm.js b/docs/docz-lib/docz/dist/index.esm.js
new file mode 100644
index 0000000..1f8671d
--- /dev/null
+++ b/docs/docz-lib/docz/dist/index.esm.js
@@ -0,0 +1,302 @@
+import * as React from 'react';
+import { createElement, Suspense, useState, useEffect, forwardRef, useCallback, useContext, useMemo, memo, Fragment } from 'react';
+import loadable from '@loadable/component';
+import _get from 'lodash/fp/get';
+import { __rest } from 'tslib';
+import { a as isFn, b as useComponents, c as doczState } from './chunk.esm.js';
+export { j as ComponentsProvider, c as doczState, b as useComponents, d as useConfig, e as useDataServer, f as useDocs, g as useMenus, h as usePrevious, i as useWindowSize } from './chunk.esm.js';
+import _omit from 'lodash/fp/omit';
+import { Link as Link$1, createHistory, LocationProvider, Router } from '@reach/router';
+import _first from 'lodash/fp/first';
+import capitalize from 'capitalize';
+import 'fast-deep-equal';
+import 'lodash/fp/merge';
+import 'array-sort';
+import 'lodash/fp/unionBy';
+import 'lodash/fp/flattenDepth';
+import 'lodash/fp/pipe';
+import 'ulid';
+import 'match-sorter';
+import 'lodash/fp/throttle';
+import { MDXProvider } from '@mdx-js/react';
+import createHashSource from 'hash-source';
+let source = createHashSource();
+
+const BasePlayground = loadable(() => import('./Playground.esm.js'));
+const Playground = props => typeof window !== 'undefined' ? createElement(Suspense, {
+  fallback: null
+}, createElement(BasePlayground, Object.assign({}, props))) : null;
+
+const AsyncComponent = defaultProps => {
+  const [loading, setLoading] = useState(true);
+  const [error, setError] = useState(null);
+  const [data, setData] = useState({});
+  useEffect(() => {
+    const {
+      getInitialProps
+    } = defaultProps;
+
+    if (getInitialProps && isFn(getInitialProps)) {
+      setLoading(true);
+      getInitialProps(defaultProps).then(data => {
+        setLoading(false);
+        setError(null);
+        setData(data);
+      }).catch(err => {
+        setLoading(false);
+        setError(err);
+        setData({});
+      });
+    }
+  }, []);
+
+  const {
+    as: Comp,
+    getInitialProps
+  } = defaultProps,
+        props = __rest(defaultProps, ["as", "getInitialProps"]);
+
+  return createElement(Comp, Object.assign({}, props, {
+    data: Object.assign({}, data, {
+      loading,
+      error
+    })
+  }));
+};
+
+const loadRoute = (path, imports, components) => {
+  const Loading = components.loading;
+
+  const fn = async () => {
+    const importFn = _get(path, imports);
+
+    const {
+      default: Component,
+      getInitialProps
+    } = await importFn();
+
+    const ExportedComponent = props => createElement(AsyncComponent, Object.assign({}, props, {
+      as: Component || 'div',
+      getInitialProps: getInitialProps
+    }));
+
+    return ExportedComponent;
+  };
+
+  return loadable(fn, {
+    fallback: createElement(Loading, null)
+  });
+};
+const AsyncRoute = defaultProps => {
+  const {
+    asyncComponent,
+    path,
+    entry
+  } = defaultProps,
+        routeProps = __rest(defaultProps, ["asyncComponent", "path", "entry"]);
+
+  const components = useComponents();
+  const Page = components.page;
+  const Component = asyncComponent;
+  const props = Object.assign({}, routeProps, {
+    doc: entry
+  });
+  return Page ? createElement(Page, Object.assign({}, props), createElement(Component, Object.assign({}, props))) : createElement(Component, Object.assign({}, props));
+};
+
+const Link = forwardRef((defaultProps, ref) => {
+  const props = _omit(['activeClassName', 'partiallyActive'], defaultProps);
+
+  const isActive = useCallback(({
+    isCurrent
+  }) => {
+    return isCurrent ? {
+      className: `${props.className} active`
+    } : {};
+  }, [props.className]);
+  return createElement(Link$1, Object.assign({}, props, {
+    getProps: isActive,
+    ref: ref
+  }));
+});
+Link.displayName = 'Link';
+
+const RE_OBJECTOF = /(?:React\.)?(?:PropTypes\.)?objectOf\((?:React\.)?(?:PropTypes\.)?(\w+)\)/;
+
+const getTypeStr = type => {
+  switch (type.name.toLowerCase()) {
+    case 'instanceof':
+      return `Class(${type.value})`;
+
+    case 'enum':
+      if (type.computed) return type.value;
+      return type.value ? type.value.map(v => `${v.value}`).join(' │ ') : type.raw;
+
+    case 'union':
+      return type.value ? type.value.map(t => `${getTypeStr(t)}`).join(' │ ') : type.raw;
+
+    case 'array':
+      return type.raw;
+
+    case 'arrayof':
+      return `Array<${getTypeStr(type.value)}>`;
+
+    case 'custom':
+      if (type.raw.indexOf('function') !== -1 || type.raw.indexOf('=>') !== -1) return 'Custom(Function)';else if (type.raw.toLowerCase().indexOf('objectof') !== -1) {
+        const m = type.raw.match(RE_OBJECTOF);
+        if (m && m[1]) return `ObjectOf(${capitalize(m[1])})`;
+        return 'ObjectOf';
+      }
+      return 'Custom';
+
+    case 'bool':
+      return 'Boolean';
+
+    case 'func':
+      return 'Function';
+
+    case 'shape':
+      const shape = type.value;
+      const rst = {};
+      Object.keys(shape).forEach(key => {
+        rst[key] = getTypeStr(shape[key]);
+      });
+      return JSON.stringify(rst, null, 2);
+
+    default:
+      return capitalize(type.name);
+  }
+};
+
+const humanize = type => getTypeStr(type);
+
+const getPropType = prop => {
+  const propName = _get('name', prop.flowType || prop.type);
+
+  if (!propName) return null;
+  const isEnum = propName.startsWith('"') || propName === 'enum';
+  const name = capitalize(isEnum ? 'enum' : propName);
+
+  const value = _get('type.value', prop);
+
+  if (!name) return null;
+
+  if (isEnum && typeof value === 'string' || !prop.flowType && !isEnum && !value || prop.flowType && !prop.flowType.elements) {
+    return name;
+  }
+
+  return prop.flowType ? humanize(prop.flowType) : humanize(prop.type);
+};
+const Props = ({
+  title,
+  isToggle,
+  isRaw,
+  of: component
+}) => {
+  const components = useComponents();
+  const {
+    props: stateProps
+  } = useContext(doczState.context);
+  const PropsComponent = components.props;
+
+  const filename = _get('__filemeta.filename', component);
+
+  const filemetaName = _get('__filemeta.name', component);
+
+  const componentName = filemetaName || component.displayName || component.name;
+  const found = stateProps && stateProps.length > 0 && stateProps.find(item => filename ? item.key === filename : item.key.includes(`${componentName}.`));
+  const value = _get('value', found) || [];
+
+  const firstDefinition = _first(value);
+
+  const definition = value.find(i => i.displayName === componentName);
+
+  const props = _get('props', definition || firstDefinition);
+
+  if (!props) return null;
+  if (!PropsComponent) return null;
+  return createElement(PropsComponent, {
+    title: title,
+    isRaw: isRaw,
+    isToggle: isToggle,
+    props: props,
+    getPropType: getPropType
+  });
+};
+
+const goToHash = ({
+  location
+}) => {
+  setTimeout(() => {
+    if (location && location.hash) {
+      const decodedHash = decodeURI(location.hash);
+      const id = decodedHash.substring(1);
+      const el = document.getElementById(id);
+      if (el) el.scrollIntoView();
+    }
+  });
+};
+
+const Routes = ({
+  imports
+}) => {
+  const components = useComponents();
+  const {
+    entries
+  } = useContext(doczState.context);
+  const NotFound = components.notFound;
+  const history = useMemo(() => createHistory(source), []);
+  useEffect(() => {
+    history.listen(goToHash);
+  }, []);
+  return createElement(MDXProvider, {
+    components: components
+  }, createElement(LocationProvider, {
+    history: history
+  }, createElement(Router, null, createElement(NotFound, {
+    default: true
+  }), entries && entries.map(({
+    key: path,
+    value: entry
+  }) => {
+    const props = {
+      path,
+      entries,
+      components
+    };
+    const component = loadRoute(path, imports, components);
+    return createElement(AsyncRoute, Object.assign({}, props, {
+      entry: entry,
+      key: entry.id,
+      path: entry.route,
+      asyncComponent: component
+    }));
+  }))));
+};
+
+function theme(themeConfig, transform = c => c) {
+  return WrappedComponent => {
+    const Theme = memo(props => {
+      const {
+        linkComponent
+      } = props;
+      const {
+        db,
+        children,
+        wrapper: Wrapper = Fragment
+      } = props;
+      const initial = Object.assign({}, db, {
+        themeConfig,
+        transform,
+        linkComponent
+      });
+      return createElement(doczState.Provider, {
+        initial: initial
+      }, createElement(Wrapper, null, createElement(WrappedComponent, null, children)));
+    });
+    Theme.displayName = WrappedComponent.displayName || 'DoczTheme';
+    return Theme;
+  };
+}
+
+export { AsyncRoute, Link, Playground, Props, Routes, loadRoute, theme };
diff --git a/docs/docz-lib/docz/dist/index.js b/docs/docz-lib/docz/dist/index.js
new file mode 100644
index 0000000..97256b3
--- /dev/null
+++ b/docs/docz-lib/docz/dist/index.js
@@ -0,0 +1,321 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
+
+var React = require('react');
+var loadable = _interopDefault(require('@loadable/component'));
+var _get = _interopDefault(require('lodash/fp/get'));
+var tslib_1 = require('tslib');
+var __chunk_1 = require('./chunk.js');
+var _omit = _interopDefault(require('lodash/fp/omit'));
+var router = require('@reach/router');
+var _first = _interopDefault(require('lodash/fp/first'));
+var capitalize = _interopDefault(require('capitalize'));
+require('fast-deep-equal');
+require('lodash/fp/merge');
+require('array-sort');
+require('lodash/fp/unionBy');
+require('lodash/fp/flattenDepth');
+require('lodash/fp/pipe');
+require('ulid');
+require('match-sorter');
+require('lodash/fp/throttle');
+var react = require('@mdx-js/react');
+var createHashSource = require('hash-source');
+let source = createHashSource.default();;
+
+const BasePlayground = loadable(() => Promise.resolve(require('./Playground.js')));
+const Playground = props => typeof window !== 'undefined' ? React.createElement(React.Suspense, {
+  fallback: null
+}, React.createElement(BasePlayground, Object.assign({}, props))) : null;
+
+const AsyncComponent = defaultProps => {
+  const [loading, setLoading] = React.useState(true);
+  const [error, setError] = React.useState(null);
+  const [data, setData] = React.useState({});
+  React.useEffect(() => {
+    const {
+      getInitialProps
+    } = defaultProps;
+
+    if (getInitialProps && __chunk_1.isFn(getInitialProps)) {
+      setLoading(true);
+      getInitialProps(defaultProps).then(data => {
+        setLoading(false);
+        setError(null);
+        setData(data);
+      }).catch(err => {
+        setLoading(false);
+        setError(err);
+        setData({});
+      });
+    }
+  }, []);
+
+  const {
+    as: Comp,
+    getInitialProps
+  } = defaultProps,
+        props = tslib_1.__rest(defaultProps, ["as", "getInitialProps"]);
+
+  return React.createElement(Comp, Object.assign({}, props, {
+    data: Object.assign({}, data, {
+      loading,
+      error
+    })
+  }));
+};
+
+const loadRoute = (path, imports, components) => {
+  const Loading = components.loading;
+
+  const fn = async () => {
+    const importFn = _get(path, imports);
+
+    const {
+      default: Component,
+      getInitialProps
+    } = await importFn();
+
+    const ExportedComponent = props => React.createElement(AsyncComponent, Object.assign({}, props, {
+      as: Component || 'div',
+      getInitialProps: getInitialProps
+    }));
+
+    return ExportedComponent;
+  };
+
+  return loadable(fn, {
+    fallback: React.createElement(Loading, null)
+  });
+};
+const AsyncRoute = defaultProps => {
+  const {
+    asyncComponent,
+    path,
+    entry
+  } = defaultProps,
+        routeProps = tslib_1.__rest(defaultProps, ["asyncComponent", "path", "entry"]);
+
+  const components = __chunk_1.useComponents();
+  const Page = components.page;
+  const Component = asyncComponent;
+  const props = Object.assign({}, routeProps, {
+    doc: entry
+  });
+  return Page ? React.createElement(Page, Object.assign({}, props), React.createElement(Component, Object.assign({}, props))) : React.createElement(Component, Object.assign({}, props));
+};
+
+const Link = React.forwardRef((defaultProps, ref) => {
+  const props = _omit(['activeClassName', 'partiallyActive'], defaultProps);
+
+  const isActive = React.useCallback(({
+    isCurrent
+  }) => {
+    return isCurrent ? {
+      className: `${props.className} active`
+    } : {};
+  }, [props.className]);
+  return React.createElement(router.Link, Object.assign({}, props, {
+    getProps: isActive,
+    ref: ref
+  }));
+});
+Link.displayName = 'Link';
+
+const RE_OBJECTOF = /(?:React\.)?(?:PropTypes\.)?objectOf\((?:React\.)?(?:PropTypes\.)?(\w+)\)/;
+
+const getTypeStr = type => {
+  switch (type.name.toLowerCase()) {
+    case 'instanceof':
+      return `Class(${type.value})`;
+
+    case 'enum':
+      if (type.computed) return type.value;
+      return type.value ? type.value.map(v => `${v.value}`).join(' │ ') : type.raw;
+
+    case 'union':
+      return type.value ? type.value.map(t => `${getTypeStr(t)}`).join(' │ ') : type.raw;
+
+    case 'array':
+      return type.raw;
+
+    case 'arrayof':
+      return `Array<${getTypeStr(type.value)}>`;
+
+    case 'custom':
+      if (type.raw.indexOf('function') !== -1 || type.raw.indexOf('=>') !== -1) return 'Custom(Function)';else if (type.raw.toLowerCase().indexOf('objectof') !== -1) {
+        const m = type.raw.match(RE_OBJECTOF);
+        if (m && m[1]) return `ObjectOf(${capitalize(m[1])})`;
+        return 'ObjectOf';
+      }
+      return 'Custom';
+
+    case 'bool':
+      return 'Boolean';
+
+    case 'func':
+      return 'Function';
+
+    case 'shape':
+      const shape = type.value;
+      const rst = {};
+      Object.keys(shape).forEach(key => {
+        rst[key] = getTypeStr(shape[key]);
+      });
+      return JSON.stringify(rst, null, 2);
+
+    default:
+      return capitalize(type.name);
+  }
+};
+
+const humanize = type => getTypeStr(type);
+
+const getPropType = prop => {
+  const propName = _get('name', prop.flowType || prop.type);
+
+  if (!propName) return null;
+  const isEnum = propName.startsWith('"') || propName === 'enum';
+  const name = capitalize(isEnum ? 'enum' : propName);
+
+  const value = _get('type.value', prop);
+
+  if (!name) return null;
+
+  if (isEnum && typeof value === 'string' || !prop.flowType && !isEnum && !value || prop.flowType && !prop.flowType.elements) {
+    return name;
+  }
+
+  return prop.flowType ? humanize(prop.flowType) : humanize(prop.type);
+};
+const Props = ({
+  title,
+  isToggle,
+  isRaw,
+  of: component
+}) => {
+  const components = __chunk_1.useComponents();
+  const {
+    props: stateProps
+  } = React.useContext(__chunk_1.doczState.context);
+  const PropsComponent = components.props;
+
+  const filename = _get('__filemeta.filename', component);
+
+  const filemetaName = _get('__filemeta.name', component);
+
+  const componentName = filemetaName || component.displayName || component.name;
+  const found = stateProps && stateProps.length > 0 && stateProps.find(item => filename ? item.key === filename : item.key.includes(`${componentName}.`));
+  const value = _get('value', found) || [];
+
+  const firstDefinition = _first(value);
+
+  const definition = value.find(i => i.displayName === componentName);
+
+  const props = _get('props', definition || firstDefinition);
+
+  if (!props) return null;
+  if (!PropsComponent) return null;
+  return React.createElement(PropsComponent, {
+    title: title,
+    isRaw: isRaw,
+    isToggle: isToggle,
+    props: props,
+    getPropType: getPropType
+  });
+};
+
+const goToHash = ({
+  location
+}) => {
+  setTimeout(() => {
+    if (location && location.hash) {
+      const decodedHash = decodeURI(location.hash);
+      const id = decodedHash.substring(1);
+      const el = document.getElementById(id);
+      if (el) el.scrollIntoView();
+    }
+  });
+};
+
+const Routes = ({
+  imports
+}) => {
+  const components = __chunk_1.useComponents();
+  const {
+    entries
+  } = React.useContext(__chunk_1.doczState.context);
+  const NotFound = components.notFound;
+  const history = React.useMemo(() => router.createHistory(source), []);
+  React.useEffect(() => {
+    history.listen(goToHash);
+  }, []);
+  return React.createElement(react.MDXProvider, {
+    components: components
+  }, React.createElement(router.LocationProvider, {
+    history: history
+  }, React.createElement(router.Router, null, React.createElement(NotFound, {
+    default: true
+  }), entries && entries.map(({
+    key: path,
+    value: entry
+  }) => {
+    const props = {
+      path,
+      entries,
+      components
+    };
+    const component = loadRoute(path, imports, components);
+    return React.createElement(AsyncRoute, Object.assign({}, props, {
+      entry: entry,
+      key: entry.id,
+      path: entry.route,
+      asyncComponent: component
+    }));
+  }))));
+};
+
+function theme(themeConfig, transform = c => c) {
+  return WrappedComponent => {
+    const Theme = React.memo(props => {
+      const {
+        linkComponent
+      } = props;
+      const {
+        db,
+        children,
+        wrapper: Wrapper = React.Fragment
+      } = props;
+      const initial = Object.assign({}, db, {
+        themeConfig,
+        transform,
+        linkComponent
+      });
+      return React.createElement(__chunk_1.doczState.Provider, {
+        initial: initial
+      }, React.createElement(Wrapper, null, React.createElement(WrappedComponent, null, children)));
+    });
+    Theme.displayName = WrappedComponent.displayName || 'DoczTheme';
+    return Theme;
+  };
+}
+
+exports.ComponentsProvider = __chunk_1.ComponentsProvider;
+exports.doczState = __chunk_1.doczState;
+exports.useComponents = __chunk_1.useComponents;
+exports.useConfig = __chunk_1.useConfig;
+exports.useDataServer = __chunk_1.useDataServer;
+exports.useDocs = __chunk_1.useDocs;
+exports.useMenus = __chunk_1.useMenus;
+exports.usePrevious = __chunk_1.usePrevious;
+exports.useWindowSize = __chunk_1.useWindowSize;
+exports.AsyncRoute = AsyncRoute;
+exports.Link = Link;
+exports.Playground = Playground;
+exports.Props = Props;
+exports.Routes = Routes;
+exports.loadRoute = loadRoute;
+exports.theme = theme;
diff --git a/docs/docz-lib/docz/dist/state.d.ts b/docs/docz-lib/docz/dist/state.d.ts
new file mode 100644
index 0000000..a0a9a9e
--- /dev/null
+++ b/docs/docz-lib/docz/dist/state.d.ts
@@ -0,0 +1,59 @@
+import { ComponentType } from 'react';
+export interface Heading {
+    depth: number;
+    slug: string;
+    value: string;
+}
+export interface Entry {
+    id: string;
+    filepath: string;
+    slug: string;
+    route: string;
+    name: string;
+    order: number;
+    menu: string | null;
+    headings: Heading[];
+    [key: string]: any;
+}
+export interface MenuItem {
+    id: string;
+    name: string;
+    route?: string;
+    href?: string;
+    menu?: MenuItem[];
+    order?: number;
+    parent?: string;
+}
+export declare type ThemeConfig = Record<string, any>;
+export interface Config {
+    title: string;
+    description: string;
+    themeConfig: ThemeConfig;
+    menu: MenuItem[];
+    version: string | null;
+    repository: string | null;
+    native: boolean;
+    separator: string;
+    codeSandbox: boolean;
+    base?: string;
+}
+export declare type Entries = {
+    key: string;
+    value: Entry;
+}[];
+export declare type Props = {
+    key: string;
+    value: any;
+}[];
+export declare type TransformFn = (config: ThemeConfig) => ThemeConfig;
+export interface Database {
+    config: Config;
+    props?: Props;
+    entries?: Entries;
+}
+export interface DoczState extends Database {
+    linkComponent: ComponentType<any>;
+    themeConfig?: ThemeConfig;
+    transform?: TransformFn;
+}
+export declare const doczState: import("./utils/createState").State<DoczState>;
diff --git a/docs/docz-lib/docz/dist/theme.d.ts b/docs/docz-lib/docz/dist/theme.d.ts
new file mode 100644
index 0000000..1dab68f
--- /dev/null
+++ b/docs/docz-lib/docz/dist/theme.d.ts
@@ -0,0 +1,10 @@
+import { ComponentType as CT } from 'react';
+import { Database, ThemeConfig, TransformFn } from './state';
+export interface ThemeProps {
+    db: Database;
+    wrapper?: CT;
+    linkComponent?: CT;
+    children(WrappedComponent: CT): JSX.Element;
+}
+export declare type ThemeReturn = (WrappedComponent: CT) => CT<ThemeProps>;
+export declare function theme(themeConfig: ThemeConfig, transform?: TransformFn): ThemeReturn;
diff --git a/docs/docz-lib/docz/dist/utils/createState.d.ts b/docs/docz-lib/docz/dist/utils/createState.d.ts
new file mode 100644
index 0000000..cad3c8e
--- /dev/null
+++ b/docs/docz-lib/docz/dist/utils/createState.d.ts
@@ -0,0 +1,13 @@
+import * as React from 'react';
+export interface ProviderProps<T> {
+    initial?: T;
+}
+export declare type PrevState<T> = (prevState: T) => T;
+export declare type GetFn<T> = (state: T) => React.ReactNode;
+export declare type Dispatch<T> = T | PrevState<T>;
+export interface State<T> {
+    context: React.Context<T>;
+    set: (param: Dispatch<T>) => void;
+    Provider: React.ComponentType<ProviderProps<T>>;
+}
+export declare function create<T = any>(initial: T): State<T>;
diff --git a/docs/docz-lib/docz/dist/utils/helpers.d.ts b/docs/docz-lib/docz/dist/utils/helpers.d.ts
new file mode 100644
index 0000000..087b6eb
--- /dev/null
+++ b/docs/docz-lib/docz/dist/utils/helpers.d.ts
@@ -0,0 +1,3 @@
+export declare const isFn: (value: any) => boolean;
+export declare function flatArrFromObject<T>(arr: T[], prop: string): string[];
+export declare function compare<T>(a: T, b: T, reverse?: boolean): number;
diff --git a/docs/docz-lib/docz/dist/utils/humanize-prop.d.ts b/docs/docz-lib/docz/dist/utils/humanize-prop.d.ts
new file mode 100644
index 0000000..f9d1124
--- /dev/null
+++ b/docs/docz-lib/docz/dist/utils/humanize-prop.d.ts
@@ -0,0 +1,2 @@
+import { PropType, FlowType } from '../components/Props';
+export declare const humanize: (type: PropType | FlowType) => any;
diff --git a/docs/doczrc.js b/docs/doczrc.js
new file mode 100644
index 0000000..be24d36
--- /dev/null
+++ b/docs/doczrc.js
@@ -0,0 +1,51 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import menu from "./docz-lib/config/menu";
+import versions from './docz-lib/config/versions';
+
+module.exports = {
+	title: "Apache Atlas",
+	files: "**/*.{md,mdx}",
+	base: "/",
+	baseUrl:"./public",
+	src: "./src",
+	public: "./src/resources",
+	menu: menu,
+	atlasVersions: versions,
+	theme: "theme/",
+	modifyBundlerConfig: config => {
+		config.module.rules.push(
+			{
+				test: /\.(js)$/,
+				exclude: /node_modules/,
+				use: {
+					loader: "babel-loader",
+					query: {
+						presets: ["@babel/react"],
+						plugins: [
+							"@babel/plugin-proposal-class-properties",
+							"@babel/plugin-syntax-dynamic-import"
+						]
+					}
+				}
+			}
+		);
+		return config;
+	}
+};
diff --git a/docs/package-lock.json b/docs/package-lock.json
new file mode 100644
index 0000000..ed2c499
--- /dev/null
+++ b/docs/package-lock.json
@@ -0,0 +1,11891 @@
+{
+  "name": "doc",
+  "version": "1.0.0",
+  "lockfileVersion": 1,
+  "requires": true,
+  "dependencies": {
+    "@babel/cli": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.4.4.tgz",
+      "integrity": "sha512-XGr5YjQSjgTa6OzQZY57FAJsdeVSAKR/u/KA5exWIz66IKtv/zXtHy+fIZcMry/EgYegwuHE7vzGnrFhjdIAsQ==",
+      "requires": {
+        "chokidar": "^2.0.4",
+        "commander": "^2.8.1",
+        "convert-source-map": "^1.1.0",
+        "fs-readdir-recursive": "^1.1.0",
+        "glob": "^7.0.0",
+        "lodash": "^4.17.11",
+        "mkdirp": "^0.5.1",
+        "output-file-sync": "^2.0.0",
+        "slash": "^2.0.0",
+        "source-map": "^0.5.0"
+      }
+    },
+    "@babel/code-frame": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+      "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+      "requires": {
+        "@babel/highlight": "^7.0.0"
+      }
+    },
+    "@babel/core": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz",
+      "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/generator": "^7.4.4",
+        "@babel/helpers": "^7.4.4",
+        "@babel/parser": "^7.4.5",
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.4.5",
+        "@babel/types": "^7.4.4",
+        "convert-source-map": "^1.1.0",
+        "debug": "^4.1.0",
+        "json5": "^2.1.0",
+        "lodash": "^4.17.11",
+        "resolve": "^1.3.2",
+        "semver": "^5.4.1",
+        "source-map": "^0.5.0"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "@babel/generator": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz",
+      "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==",
+      "requires": {
+        "@babel/types": "^7.4.4",
+        "jsesc": "^2.5.1",
+        "lodash": "^4.17.11",
+        "source-map": "^0.5.0",
+        "trim-right": "^1.0.1"
+      }
+    },
+    "@babel/helper-annotate-as-pure": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz",
+      "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-builder-binary-assignment-operator-visitor": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz",
+      "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==",
+      "requires": {
+        "@babel/helper-explode-assignable-expression": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-builder-react-jsx": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz",
+      "integrity": "sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw==",
+      "requires": {
+        "@babel/types": "^7.3.0",
+        "esutils": "^2.0.0"
+      }
+    },
+    "@babel/helper-call-delegate": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz",
+      "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-create-class-features-plugin": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.5.tgz",
+      "integrity": "sha512-ZsxkyYiRA7Bg+ZTRpPvB6AbOFKTFFK4LrvTet8lInm0V468MWCaSYJE+I7v2z2r8KNLtYiV+K5kTCnR7dvyZjg==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-member-expression-to-functions": "^7.5.5",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5",
+        "@babel/helper-split-export-declaration": "^7.4.4"
+      }
+    },
+    "@babel/helper-define-map": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz",
+      "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz",
+      "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==",
+      "requires": {
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-function-name": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+      "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+      "requires": {
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-get-function-arity": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+      "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-hoist-variables": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz",
+      "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-member-expression-to-functions": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz",
+      "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==",
+      "requires": {
+        "@babel/types": "^7.5.5"
+      },
+      "dependencies": {
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/helper-module-imports": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+      "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-module-transforms": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz",
+      "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/template": "^7.4.4",
+        "@babel/types": "^7.5.5",
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/helper-optimise-call-expression": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz",
+      "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==",
+      "requires": {
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-plugin-utils": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+      "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA=="
+    },
+    "@babel/helper-regex": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz",
+      "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==",
+      "requires": {
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz",
+      "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-wrap-function": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-replace-supers": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz",
+      "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==",
+      "requires": {
+        "@babel/helper-member-expression-to-functions": "^7.5.5",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/traverse": "^7.5.5",
+        "@babel/types": "^7.5.5"
+      },
+      "dependencies": {
+        "@babel/code-frame": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+          "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+          "requires": {
+            "@babel/highlight": "^7.0.0"
+          }
+        },
+        "@babel/generator": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
+          "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
+          "requires": {
+            "@babel/types": "^7.5.5",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.17.13",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
+          }
+        },
+        "@babel/parser": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
+          "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g=="
+        },
+        "@babel/traverse": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
+          "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
+          "requires": {
+            "@babel/code-frame": "^7.5.5",
+            "@babel/generator": "^7.5.5",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.4.4",
+            "@babel/parser": "^7.5.5",
+            "@babel/types": "^7.5.5",
+            "debug": "^4.1.0",
+            "globals": "^11.1.0",
+            "lodash": "^4.17.13"
+          }
+        },
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "@babel/helper-simple-access": {
+      "version": "7.1.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz",
+      "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==",
+      "requires": {
+        "@babel/template": "^7.1.0",
+        "@babel/types": "^7.0.0"
+      }
+    },
+    "@babel/helper-split-export-declaration": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz",
+      "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/helper-wrap-function": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz",
+      "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/template": "^7.1.0",
+        "@babel/traverse": "^7.1.0",
+        "@babel/types": "^7.2.0"
+      }
+    },
+    "@babel/helpers": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz",
+      "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==",
+      "requires": {
+        "@babel/template": "^7.4.4",
+        "@babel/traverse": "^7.4.4",
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/highlight": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
+      "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
+      "requires": {
+        "chalk": "^2.0.0",
+        "esutils": "^2.0.2",
+        "js-tokens": "^4.0.0"
+      }
+    },
+    "@babel/parser": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz",
+      "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew=="
+    },
+    "@babel/plugin-proposal-async-generator-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz",
+      "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0",
+        "@babel/plugin-syntax-async-generators": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-class-properties": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.5.tgz",
+      "integrity": "sha512-AF79FsnWFxjlaosgdi421vmYG6/jg79bVD0dpD44QdgobzHKuLZ6S3vl8la9qIeSwGi8i1fS0O1mfuDAAdo1/A==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.5.5",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-proposal-decorators": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz",
+      "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-decorators": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz",
+      "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz",
+      "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-object-rest-spread": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.5.tgz",
+      "integrity": "sha512-F2DxJJSQ7f64FyTVl5cw/9MWn6naXGdk3Q3UhDbFEEHv+EilCPoeRD3Zh/Utx1CJz4uyKlQ4uH+bJPbEhMV7Zw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0"
+      }
+    },
+    "@babel/plugin-proposal-unicode-property-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz",
+      "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/plugin-syntax-async-generators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz",
+      "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-decorators": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz",
+      "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-dynamic-import": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+      "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-flow": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz",
+      "integrity": "sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-json-strings": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz",
+      "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-jsx": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz",
+      "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-object-rest-spread": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz",
+      "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-optional-catch-binding": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz",
+      "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-syntax-typescript": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.3.3.tgz",
+      "integrity": "sha512-dGwbSMA1YhVS8+31CnPR7LB4pcbrzcV99wQzby4uAfrkZPYZlQ7ImwdpzLqi6Z6IL02b8IAL379CaMwo0x5Lag==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz",
+      "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-async-to-generator": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz",
+      "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-remap-async-to-generator": "^7.1.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoped-functions": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz",
+      "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-block-scoping": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.5.5.tgz",
+      "integrity": "sha512-82A3CLRRdYubkG85lKwhZB0WZoHxLGsJdux/cOVaJCJpvYFl1LVzAIFyRsa7CvXqW8rBM4Zf3Bfn8PHt5DP0Sg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "lodash": "^4.17.13"
+      },
+      "dependencies": {
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/plugin-transform-classes": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz",
+      "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-define-map": "^7.5.5",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-optimise-call-expression": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "globals": "^11.1.0"
+      }
+    },
+    "@babel/plugin-transform-computed-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz",
+      "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-destructuring": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz",
+      "integrity": "sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-dotall-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz",
+      "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/plugin-transform-duplicate-keys": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz",
+      "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-exponentiation-operator": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz",
+      "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==",
+      "requires": {
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-flow-strip-types": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz",
+      "integrity": "sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-flow": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-for-of": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz",
+      "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-function-name": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz",
+      "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==",
+      "requires": {
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz",
+      "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz",
+      "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-modules-amd": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz",
+      "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-commonjs": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz",
+      "integrity": "sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-simple-access": "^7.1.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-systemjs": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz",
+      "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==",
+      "requires": {
+        "@babel/helper-hoist-variables": "^7.4.4",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "babel-plugin-dynamic-import-node": "^2.3.0"
+      }
+    },
+    "@babel/plugin-transform-modules-umd": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz",
+      "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==",
+      "requires": {
+        "@babel/helper-module-transforms": "^7.1.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-named-capturing-groups-regex": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz",
+      "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==",
+      "requires": {
+        "regexp-tree": "^0.1.6"
+      }
+    },
+    "@babel/plugin-transform-new-target": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz",
+      "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-object-super": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz",
+      "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-replace-supers": "^7.5.5"
+      }
+    },
+    "@babel/plugin-transform-parameters": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz",
+      "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==",
+      "requires": {
+        "@babel/helper-call-delegate": "^7.4.4",
+        "@babel/helper-get-function-arity": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz",
+      "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-constant-elements": {
+      "version": "7.5.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.5.0.tgz",
+      "integrity": "sha512-c5Ba8cpybZFp1Izkf2sWGuNjOxoQ32tFgBvvYvwGhi4+9f6vGiSK9Gex4uVuO/Va6YJFu41aAh1MzMjUWkp0IQ==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-display-name": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz",
+      "integrity": "sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx": {
+      "version": "7.3.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz",
+      "integrity": "sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg==",
+      "requires": {
+        "@babel/helper-builder-react-jsx": "^7.3.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx-self": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz",
+      "integrity": "sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-react-jsx-source": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.2.0.tgz",
+      "integrity": "sha512-A32OkKTp4i5U6aE88GwwcuV4HAprUgHcTq0sSafLxjr6AW0QahrCRCjxogkbbcdtpbXkuTOlgpjophCxb6sh5g==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-regenerator": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz",
+      "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==",
+      "requires": {
+        "regenerator-transform": "^0.14.0"
+      }
+    },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz",
+      "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-runtime": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.5.5.tgz",
+      "integrity": "sha512-6Xmeidsun5rkwnGfMOp6/z9nSzWpHFNVr2Jx7kwoq4mVatQfQx5S56drBgEHF+XQbKOdIaOiMIINvp/kAwMN+w==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "resolve": "^1.8.1",
+        "semver": "^5.5.1"
+      }
+    },
+    "@babel/plugin-transform-shorthand-properties": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz",
+      "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-spread": {
+      "version": "7.2.2",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz",
+      "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-sticky-regex": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz",
+      "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-template-literals": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz",
+      "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typeof-symbol": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz",
+      "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0"
+      }
+    },
+    "@babel/plugin-transform-typescript": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.5.5.tgz",
+      "integrity": "sha512-pehKf4m640myZu5B2ZviLaiBlxMCjSZ1qTEO459AXKX5GnPueyulJeCqZFs1nz/Ya2dDzXQ1NxZ/kKNWyD4h6w==",
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.5.5",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-syntax-typescript": "^7.2.0"
+      }
+    },
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz",
+      "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/helper-regex": "^7.4.4",
+        "regexpu-core": "^4.5.4"
+      }
+    },
+    "@babel/polyfill": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.4.4.tgz",
+      "integrity": "sha512-WlthFLfhQQhh+A2Gn5NSFl0Huxz36x86Jn+E9OW7ibK8edKPq+KLy4apM1yDpQ8kJOVi1OVjpP4vSDLdrI04dg==",
+      "requires": {
+        "core-js": "^2.6.5",
+        "regenerator-runtime": "^0.13.2"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+          "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+        }
+      }
+    },
+    "@babel/preset-env": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.5.5.tgz",
+      "integrity": "sha512-GMZQka/+INwsMz1A5UEql8tG015h5j/qjptpKY2gJ7giy8ohzU710YciJB5rcKsWGWHiW3RUnHib0E5/m3Tp3A==",
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
+        "@babel/plugin-proposal-dynamic-import": "^7.5.0",
+        "@babel/plugin-proposal-json-strings": "^7.2.0",
+        "@babel/plugin-proposal-object-rest-spread": "^7.5.5",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-syntax-async-generators": "^7.2.0",
+        "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+        "@babel/plugin-syntax-json-strings": "^7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
+        "@babel/plugin-transform-arrow-functions": "^7.2.0",
+        "@babel/plugin-transform-async-to-generator": "^7.5.0",
+        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
+        "@babel/plugin-transform-block-scoping": "^7.5.5",
+        "@babel/plugin-transform-classes": "^7.5.5",
+        "@babel/plugin-transform-computed-properties": "^7.2.0",
+        "@babel/plugin-transform-destructuring": "^7.5.0",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/plugin-transform-duplicate-keys": "^7.5.0",
+        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
+        "@babel/plugin-transform-for-of": "^7.4.4",
+        "@babel/plugin-transform-function-name": "^7.4.4",
+        "@babel/plugin-transform-literals": "^7.2.0",
+        "@babel/plugin-transform-member-expression-literals": "^7.2.0",
+        "@babel/plugin-transform-modules-amd": "^7.5.0",
+        "@babel/plugin-transform-modules-commonjs": "^7.5.0",
+        "@babel/plugin-transform-modules-systemjs": "^7.5.0",
+        "@babel/plugin-transform-modules-umd": "^7.2.0",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.4.5",
+        "@babel/plugin-transform-new-target": "^7.4.4",
+        "@babel/plugin-transform-object-super": "^7.5.5",
+        "@babel/plugin-transform-parameters": "^7.4.4",
+        "@babel/plugin-transform-property-literals": "^7.2.0",
+        "@babel/plugin-transform-regenerator": "^7.4.5",
+        "@babel/plugin-transform-reserved-words": "^7.2.0",
+        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
+        "@babel/plugin-transform-spread": "^7.2.0",
+        "@babel/plugin-transform-sticky-regex": "^7.2.0",
+        "@babel/plugin-transform-template-literals": "^7.4.4",
+        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
+        "@babel/plugin-transform-unicode-regex": "^7.4.4",
+        "@babel/types": "^7.5.5",
+        "browserslist": "^4.6.0",
+        "core-js-compat": "^3.1.1",
+        "invariant": "^2.2.2",
+        "js-levenshtein": "^1.1.3",
+        "semver": "^5.5.0"
+      },
+      "dependencies": {
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/preset-react": {
+      "version": "7.0.0",
+      "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.0.0.tgz",
+      "integrity": "sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-transform-react-display-name": "^7.0.0",
+        "@babel/plugin-transform-react-jsx": "^7.0.0",
+        "@babel/plugin-transform-react-jsx-self": "^7.0.0",
+        "@babel/plugin-transform-react-jsx-source": "^7.0.0"
+      }
+    },
+    "@babel/preset-typescript": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz",
+      "integrity": "sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg==",
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-transform-typescript": "^7.3.2"
+      }
+    },
+    "@babel/register": {
+      "version": "7.5.5",
+      "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.5.5.tgz",
+      "integrity": "sha512-pdd5nNR+g2qDkXZlW1yRCWFlNrAn2PPdnZUB72zjX4l1Vv4fMRRLwyf+n/idFCLI1UgVGboUU8oVziwTBiyNKQ==",
+      "requires": {
+        "core-js": "^3.0.0",
+        "find-cache-dir": "^2.0.0",
+        "lodash": "^4.17.13",
+        "mkdirp": "^0.5.1",
+        "pirates": "^4.0.0",
+        "source-map-support": "^0.5.9"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.2.1",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.2.1.tgz",
+          "integrity": "sha512-Qa5XSVefSVPRxy2XfUC13WbvqkxhkwB3ve+pgCQveNgYzbM/UxZeu1dcOX/xr4UmfUd+muuvsaxilQzCyUurMw=="
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        }
+      }
+    },
+    "@babel/runtime": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz",
+      "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==",
+      "requires": {
+        "regenerator-runtime": "^0.13.2"
+      }
+    },
+    "@babel/template": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz",
+      "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/parser": "^7.4.4",
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@babel/traverse": {
+      "version": "7.4.5",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz",
+      "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==",
+      "requires": {
+        "@babel/code-frame": "^7.0.0",
+        "@babel/generator": "^7.4.4",
+        "@babel/helper-function-name": "^7.1.0",
+        "@babel/helper-split-export-declaration": "^7.4.4",
+        "@babel/parser": "^7.4.5",
+        "@babel/types": "^7.4.4",
+        "debug": "^4.1.0",
+        "globals": "^11.1.0",
+        "lodash": "^4.17.11"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "@babel/types": {
+      "version": "7.4.4",
+      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz",
+      "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==",
+      "requires": {
+        "esutils": "^2.0.2",
+        "lodash": "^4.17.11",
+        "to-fast-properties": "^2.0.0"
+      }
+    },
+    "@emotion/cache": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.14.tgz",
+      "integrity": "sha512-HNGEwWnPlNyy/WPXBXzbjzkzeZFV657Z99/xq2xs5yinJHbMfi3ioCvBJ6Y8Zc8DQzO9F5jDmVXJB41Ytx3QMw==",
+      "dev": true,
+      "requires": {
+        "@emotion/sheet": "0.9.3",
+        "@emotion/stylis": "0.8.4",
+        "@emotion/utils": "0.11.2",
+        "@emotion/weak-memoize": "0.2.3"
+      }
+    },
+    "@emotion/core": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.14.tgz",
+      "integrity": "sha512-G9FbyxLm3lSnPfLDcag8fcOQBKui/ueXmWOhV+LuEQg9HrqExuWnWaO6gm6S5rNe+AMcqLXVljf8pYgAdFLNSg==",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.4.3",
+        "@emotion/cache": "^10.0.14",
+        "@emotion/css": "^10.0.14",
+        "@emotion/serialize": "^0.11.8",
+        "@emotion/sheet": "0.9.3",
+        "@emotion/utils": "0.11.2"
+      }
+    },
+    "@emotion/css": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.14.tgz",
+      "integrity": "sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==",
+      "dev": true,
+      "requires": {
+        "@emotion/serialize": "^0.11.8",
+        "@emotion/utils": "0.11.2",
+        "babel-plugin-emotion": "^10.0.14"
+      }
+    },
+    "@emotion/hash": {
+      "version": "0.7.2",
+      "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.2.tgz",
+      "integrity": "sha512-RMtr1i6E8MXaBWwhXL3yeOU8JXRnz8GNxHvaUfVvwxokvayUY0zoBeWbKw1S9XkufmGEEdQd228pSZXFkAln8Q==",
+      "dev": true
+    },
+    "@emotion/is-prop-valid": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz",
+      "integrity": "sha512-uxJqm/sqwXw3YPA5GXX365OBcJGFtxUVkB6WyezqFHlNe9jqUWH5ur2O2M8dGBz61kn1g3ZBlzUunFQXQIClhA==",
+      "requires": {
+        "@emotion/memoize": "0.7.1"
+      }
+    },
+    "@emotion/memoize": {
+      "version": "0.7.1",
+      "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.1.tgz",
+      "integrity": "sha512-Qv4LTqO11jepd5Qmlp3M1YEjBumoTHcHFdgPTQ+sFlIL5myi/7xu/POwP7IRu6odBdmLXdtIs1D6TuW6kbwbbg=="
+    },
+    "@emotion/serialize": {
+      "version": "0.11.8",
+      "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.8.tgz",
+      "integrity": "sha512-Qb6Us2Yk1ZW8SOYH6s5z7qzXXb2iHwVeqc6FjXtac0vvxC416ki0eTtHNw4Q5smoyxdyZh3519NKGrQvvvrZ/Q==",
+      "dev": true,
+      "requires": {
+        "@emotion/hash": "0.7.2",
+        "@emotion/memoize": "0.7.2",
+        "@emotion/unitless": "0.7.4",
+        "@emotion/utils": "0.11.2",
+        "csstype": "^2.5.7"
+      },
+      "dependencies": {
+        "@emotion/memoize": {
+          "version": "0.7.2",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz",
+          "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==",
+          "dev": true
+        },
+        "@emotion/unitless": {
+          "version": "0.7.4",
+          "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.4.tgz",
+          "integrity": "sha512-kBa+cDHOR9jpRJ+kcGMsysrls0leukrm68DmFQoMIWQcXdr2cZvyvypWuGYT7U+9kAExUE7+T7r6G3C3A6L8MQ==",
+          "dev": true
+        }
+      }
+    },
+    "@emotion/sheet": {
+      "version": "0.9.3",
+      "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.3.tgz",
+      "integrity": "sha512-c3Q6V7Df7jfwSq5AzQWbXHa5soeE4F5cbqi40xn0CzXxWW9/6Mxq48WJEtqfWzbZtW9odZdnRAkwCQwN12ob4A==",
+      "dev": true
+    },
+    "@emotion/styled": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.14.tgz",
+      "integrity": "sha512-Ae8d5N/FmjvZKXjqWcjfhZhjCdkvxZSqD95Q72BYDNQnsOKLHIA4vWlMolLXDNkw1dIxV3l2pp82Z87HXj6eYQ==",
+      "dev": true,
+      "requires": {
+        "@emotion/styled-base": "^10.0.14",
+        "babel-plugin-emotion": "^10.0.14"
+      }
+    },
+    "@emotion/styled-base": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.14.tgz",
+      "integrity": "sha512-1nC5iO/Rk0DY47M5wXCyWpbo/woiwXWfVbNKDM3QRi7CKq8CwC++PQ5HgiYflFrAt1vjzIVZqnzrIn3idUoQgg==",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.4.3",
+        "@emotion/is-prop-valid": "0.8.2",
+        "@emotion/serialize": "^0.11.8",
+        "@emotion/utils": "0.11.2"
+      },
+      "dependencies": {
+        "@emotion/is-prop-valid": {
+          "version": "0.8.2",
+          "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.2.tgz",
+          "integrity": "sha512-ZQIMAA2kLUWiUeMZNJDTeCwYRx1l8SQL0kHktze4COT22occKpDML1GDUXP5/sxhOMrZO8vZw773ni4H5Snrsg==",
+          "dev": true,
+          "requires": {
+            "@emotion/memoize": "0.7.2"
+          }
+        },
+        "@emotion/memoize": {
+          "version": "0.7.2",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz",
+          "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==",
+          "dev": true
+        }
+      }
+    },
+    "@emotion/stylis": {
+      "version": "0.8.4",
+      "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.4.tgz",
+      "integrity": "sha512-TLmkCVm8f8gH0oLv+HWKiu7e8xmBIaokhxcEKPh1m8pXiV/akCiq50FvYgOwY42rjejck8nsdQxZlXZ7pmyBUQ==",
+      "dev": true
+    },
+    "@emotion/unitless": {
+      "version": "0.7.3",
+      "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.3.tgz",
+      "integrity": "sha512-4zAPlpDEh2VwXswwr/t8xGNDGg8RQiPxtxZ3qQEXyQsBV39ptTdESCjuBvGze1nLMVrxmTIKmnO/nAV8Tqjjzg=="
+    },
+    "@emotion/utils": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.2.tgz",
+      "integrity": "sha512-UHX2XklLl3sIaP6oiMmlVzT0J+2ATTVpf0dHQVyPJHTkOITvXfaSqnRk6mdDhV9pR8T/tHc3cex78IKXssmzrA==",
+      "dev": true
+    },
+    "@emotion/weak-memoize": {
+      "version": "0.2.3",
+      "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.3.tgz",
+      "integrity": "sha512-zVgvPwGK7c1aVdUVc9Qv7SqepOGRDrqCw7KZPSZziWGxSlbII3gmvGLPzLX4d0n0BMbamBacUrN22zOMyFFEkQ==",
+      "dev": true
+    },
+    "@hutson/parse-repository-url": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz",
+      "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q=="
+    },
+    "@loadable/component": {
+      "version": "5.10.2",
+      "resolved": "https://registry.npmjs.org/@loadable/component/-/component-5.10.2.tgz",
+      "integrity": "sha512-pUzGRc/mhGzZ0+xJPQErnS68BQEApFYGwn10iSDqBHdDhOruCASTer1J+rYI4jaJJcegJwnuzh7j/SqMoiCyAQ==",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "hoist-non-react-statics": "^3.3.0"
+      }
+    },
+    "@mdx-js/loader": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@mdx-js/loader/-/loader-1.3.1.tgz",
+      "integrity": "sha512-wg1uxBZ+7lkfawtznD29Acrh9UJ/sySeaDzgi+Q3zk55A25tPmVxKVjwGXWDC0mrRRJ8cjcoWant3whok+WPDw==",
+      "requires": {
+        "@mdx-js/mdx": "^1.3.1",
+        "@mdx-js/react": "^1.3.1",
+        "loader-utils": "1.2.3"
+      }
+    },
+    "@mdx-js/mdx": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.3.1.tgz",
+      "integrity": "sha512-mLP4iN6OhDnA9IqAiKAFb/wSnmwU1Mb9gy0szzV0QbDHtlinmzQmK2YyEv9Stf8NXvWbsNVTj9p3hy01nZY9yA==",
+      "requires": {
+        "@babel/core": "7.5.5",
+        "@babel/plugin-syntax-jsx": "7.2.0",
+        "@babel/plugin-syntax-object-rest-spread": "7.2.0",
+        "@mdx-js/util": "^1.3.1",
+        "babel-plugin-apply-mdx-type-prop": "^1.3.1",
+        "babel-plugin-extract-import-names": "^1.3.1",
+        "camelcase-css": "2.0.1",
+        "detab": "2.0.2",
+        "hast-util-raw": "5.0.1",
+        "lodash.uniq": "4.5.0",
+        "mdast-util-to-hast": "6.0.1",
+        "remark-mdx": "^1.3.1",
+        "remark-parse": "7.0.1",
+        "remark-squeeze-paragraphs": "3.0.4",
+        "style-to-object": "0.2.3",
+        "unified": "8.3.2",
+        "unist-builder": "1.0.4",
+        "unist-util-visit": "2.0.0"
+      },
+      "dependencies": {
+        "@babel/code-frame": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+          "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+          "requires": {
+            "@babel/highlight": "^7.0.0"
+          }
+        },
+        "@babel/core": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
+          "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
+          "requires": {
+            "@babel/code-frame": "^7.5.5",
+            "@babel/generator": "^7.5.5",
+            "@babel/helpers": "^7.5.5",
+            "@babel/parser": "^7.5.5",
+            "@babel/template": "^7.4.4",
+            "@babel/traverse": "^7.5.5",
+            "@babel/types": "^7.5.5",
+            "convert-source-map": "^1.1.0",
+            "debug": "^4.1.0",
+            "json5": "^2.1.0",
+            "lodash": "^4.17.13",
+            "resolve": "^1.3.2",
+            "semver": "^5.4.1",
+            "source-map": "^0.5.0"
+          }
+        },
+        "@babel/generator": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
+          "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
+          "requires": {
+            "@babel/types": "^7.5.5",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.17.13",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
+          }
+        },
+        "@babel/helpers": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
+          "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
+          "requires": {
+            "@babel/template": "^7.4.4",
+            "@babel/traverse": "^7.5.5",
+            "@babel/types": "^7.5.5"
+          }
+        },
+        "@babel/parser": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
+          "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g=="
+        },
+        "@babel/traverse": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
+          "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
+          "requires": {
+            "@babel/code-frame": "^7.5.5",
+            "@babel/generator": "^7.5.5",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.4.4",
+            "@babel/parser": "^7.5.5",
+            "@babel/types": "^7.5.5",
+            "debug": "^4.1.0",
+            "globals": "^11.1.0",
+            "lodash": "^4.17.13"
+          }
+        },
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        },
+        "remark-parse": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-7.0.1.tgz",
+          "integrity": "sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ==",
+          "requires": {
+            "collapse-white-space": "^1.0.2",
+            "is-alphabetical": "^1.0.0",
+            "is-decimal": "^1.0.0",
+            "is-whitespace-character": "^1.0.0",
+            "is-word-character": "^1.0.0",
+            "markdown-escapes": "^1.0.0",
+            "parse-entities": "^1.1.0",
+            "repeat-string": "^1.5.4",
+            "state-toggle": "^1.0.0",
+            "trim": "0.0.1",
+            "trim-trailing-lines": "^1.0.0",
+            "unherit": "^1.0.4",
+            "unist-util-remove-position": "^1.0.0",
+            "vfile-location": "^2.0.0",
+            "xtend": "^4.0.1"
+          }
+        }
+      }
+    },
+    "@mdx-js/react": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.3.1.tgz",
+      "integrity": "sha512-HwpA0r4XiydiUXceAtzguLs3FH8Jbfpgoff3L+pejemiqyxol/FYMxwMu0WcBxti5eJYBqZEwL+C5od6OsS7Gw=="
+    },
+    "@mdx-js/util": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.3.1.tgz",
+      "integrity": "sha512-YOlSyl/EfTRoO7Twzad6RYJlHcyW1WZo8gDRO+4uFTy6+AHMaqSCMAPJIJkmKwgi+IPojQUGuMzKJ47qxQ9BbA=="
+    },
+    "@mrmlnc/readdir-enhanced": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
+      "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+      "requires": {
+        "call-me-maybe": "^1.0.1",
+        "glob-to-regexp": "^0.3.0"
+      }
+    },
+    "@nodelib/fs.stat": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
+      "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw=="
+    },
+    "@reach/router": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmjs.org/@reach/router/-/router-1.2.1.tgz",
+      "integrity": "sha512-kTaX08X4g27tzIFQGRukaHmNbtMYDS3LEWIS8+l6OayGIw6Oyo1HIF/JzeuR2FoF9z6oV+x/wJSVSq4v8tcUGQ==",
+      "requires": {
+        "create-react-context": "^0.2.1",
+        "invariant": "^2.2.3",
+        "prop-types": "^15.6.1",
+        "react-lifecycles-compat": "^3.0.4",
+        "warning": "^3.0.0"
+      }
+    },
+    "@sindresorhus/slugify": {
+      "version": "0.9.1",
+      "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-0.9.1.tgz",
+      "integrity": "sha512-b6heYM9dzZD13t2GOiEQTDE0qX+I1GyOotMwKh9VQqzuNiVdPVT8dM43fe9HNb/3ul+Qwd5oKSEDrDIfhq3bnQ==",
+      "requires": {
+        "escape-string-regexp": "^1.0.5",
+        "lodash.deburr": "^4.1.0"
+      }
+    },
+    "@svgr/babel-plugin-add-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig=="
+    },
+    "@svgr/babel-plugin-remove-jsx-attribute": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz",
+      "integrity": "sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ=="
+    },
+    "@svgr/babel-plugin-remove-jsx-empty-expression": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz",
+      "integrity": "sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w=="
+    },
+    "@svgr/babel-plugin-replace-jsx-attribute-value": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz",
+      "integrity": "sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w=="
+    },
+    "@svgr/babel-plugin-svg-dynamic-title": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.1.tgz",
+      "integrity": "sha512-p6z6JJroP989jHWcuraeWpzdejehTmLUpyC9smhTBWyPN0VVGe2phbYxpPTV7Vh8XzmFrcG55idrnfWn/2oQEw=="
+    },
+    "@svgr/babel-plugin-svg-em-dimensions": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz",
+      "integrity": "sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w=="
+    },
+    "@svgr/babel-plugin-transform-react-native-svg": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz",
+      "integrity": "sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw=="
+    },
+    "@svgr/babel-plugin-transform-svg-component": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz",
+      "integrity": "sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw=="
+    },
+    "@svgr/babel-preset": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-4.3.1.tgz",
+      "integrity": "sha512-rPFKLmyhlh6oeBv3j2vEAj2nd2QbWqpoJLKzBLjwQVt+d9aeXajVaPNEqrES2spjXKR4OxfgSs7U0NtmAEkr0Q==",
+      "requires": {
+        "@svgr/babel-plugin-add-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-attribute": "^4.2.0",
+        "@svgr/babel-plugin-remove-jsx-empty-expression": "^4.2.0",
+        "@svgr/babel-plugin-replace-jsx-attribute-value": "^4.2.0",
+        "@svgr/babel-plugin-svg-dynamic-title": "^4.3.1",
+        "@svgr/babel-plugin-svg-em-dimensions": "^4.2.0",
+        "@svgr/babel-plugin-transform-react-native-svg": "^4.2.0",
+        "@svgr/babel-plugin-transform-svg-component": "^4.2.0"
+      }
+    },
+    "@svgr/core": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/core/-/core-4.3.2.tgz",
+      "integrity": "sha512-N+tP5CLFd1hP9RpO83QJPZY3NL8AtrdqNbuhRgBkjE/49RnMrrRsFm1wY8pueUfAGvzn6tSXUq29o6ah8RuR5w==",
+      "requires": {
+        "@svgr/plugin-jsx": "^4.3.2",
+        "camelcase": "^5.3.1",
+        "cosmiconfig": "^5.2.1"
+      }
+    },
+    "@svgr/hast-util-to-babel-ast": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz",
+      "integrity": "sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg==",
+      "requires": {
+        "@babel/types": "^7.4.4"
+      }
+    },
+    "@svgr/plugin-jsx": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-4.3.2.tgz",
+      "integrity": "sha512-+1GW32RvmNmCsOkMoclA/TppNjHPLMnNZG3/Ecscxawp051XJ2MkO09Hn11VcotdC2EPrDfT8pELGRo+kbZ1Eg==",
+      "requires": {
+        "@babel/core": "^7.4.5",
+        "@svgr/babel-preset": "^4.3.1",
+        "@svgr/hast-util-to-babel-ast": "^4.3.2",
+        "svg-parser": "^2.0.0"
+      }
+    },
+    "@svgr/plugin-svgo": {
+      "version": "4.3.1",
+      "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz",
+      "integrity": "sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w==",
+      "requires": {
+        "cosmiconfig": "^5.2.1",
+        "merge-deep": "^3.0.2",
+        "svgo": "^1.2.2"
+      }
+    },
+    "@svgr/webpack": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-4.3.2.tgz",
+      "integrity": "sha512-F3VE5OvyOWBEd2bF7BdtFRyI6E9it3mN7teDw0JQTlVtc4HZEYiiLSl+Uf9Uub6IYHVGc+qIrxxDyeedkQru2w==",
+      "requires": {
+        "@babel/core": "^7.4.5",
+        "@babel/plugin-transform-react-constant-elements": "^7.0.0",
+        "@babel/preset-env": "^7.4.5",
+        "@babel/preset-react": "^7.0.0",
+        "@svgr/core": "^4.3.2",
+        "@svgr/plugin-jsx": "^4.3.2",
+        "@svgr/plugin-svgo": "^4.3.1",
+        "loader-utils": "^1.2.3"
+      }
+    },
+    "@types/events": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
+      "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
+    },
+    "@types/glob": {
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
+      "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+      "requires": {
+        "@types/events": "*",
+        "@types/minimatch": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/minimatch": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
+      "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
+    },
+    "@types/node": {
+      "version": "12.7.2",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-12.7.2.tgz",
+      "integrity": "sha512-dyYO+f6ihZEtNPDcWNR1fkoTDf3zAK3lAABDze3mz6POyIercH0lEUawUFXlG8xaQZmm1yEBON/4TsYv/laDYg=="
+    },
+    "@types/q": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
+      "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="
+    },
+    "@types/unist": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz",
+      "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ=="
+    },
+    "@types/vfile": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz",
+      "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==",
+      "requires": {
+        "@types/node": "*",
+        "@types/unist": "*",
+        "@types/vfile-message": "*"
+      }
+    },
+    "@types/vfile-message": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-1.0.1.tgz",
+      "integrity": "sha512-mlGER3Aqmq7bqR1tTTIVHq8KSAFFRyGbrxuM8C/H82g6k7r2fS+IMEkIu3D7JHzG10NvPdR8DNx0jr0pwpp4dA==",
+      "requires": {
+        "@types/node": "*",
+        "@types/unist": "*"
+      }
+    },
+    "@webassemblyjs/ast": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
+      "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+      "requires": {
+        "@webassemblyjs/helper-module-context": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/floating-point-hex-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
+      "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ=="
+    },
+    "@webassemblyjs/helper-api-error": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
+      "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA=="
+    },
+    "@webassemblyjs/helper-buffer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
+      "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q=="
+    },
+    "@webassemblyjs/helper-code-frame": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
+      "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+      "requires": {
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/helper-fsm": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
+      "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow=="
+    },
+    "@webassemblyjs/helper-module-context": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
+      "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "mamacro": "^0.0.3"
+      }
+    },
+    "@webassemblyjs/helper-wasm-bytecode": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
+      "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ=="
+    },
+    "@webassemblyjs/helper-wasm-section": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
+      "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5"
+      }
+    },
+    "@webassemblyjs/ieee754": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
+      "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+      "requires": {
+        "@xtuc/ieee754": "^1.2.0"
+      }
+    },
+    "@webassemblyjs/leb128": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
+      "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+      "requires": {
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/utf8": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
+      "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw=="
+    },
+    "@webassemblyjs/wasm-edit": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
+      "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/helper-wasm-section": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-opt": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5",
+        "@webassemblyjs/wast-printer": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-gen": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
+      "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-opt": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
+      "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-buffer": "1.8.5",
+        "@webassemblyjs/wasm-gen": "1.8.5",
+        "@webassemblyjs/wasm-parser": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wasm-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
+      "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
+        "@webassemblyjs/ieee754": "1.8.5",
+        "@webassemblyjs/leb128": "1.8.5",
+        "@webassemblyjs/utf8": "1.8.5"
+      }
+    },
+    "@webassemblyjs/wast-parser": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
+      "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/floating-point-hex-parser": "1.8.5",
+        "@webassemblyjs/helper-api-error": "1.8.5",
+        "@webassemblyjs/helper-code-frame": "1.8.5",
+        "@webassemblyjs/helper-fsm": "1.8.5",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webassemblyjs/wast-printer": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
+      "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+      "requires": {
+        "@webassemblyjs/ast": "1.8.5",
+        "@webassemblyjs/wast-parser": "1.8.5",
+        "@xtuc/long": "4.2.2"
+      }
+    },
+    "@webpack-contrib/schema-utils": {
+      "version": "1.0.0-beta.0",
+      "resolved": "https://registry.npmjs.org/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz",
+      "integrity": "sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg==",
+      "requires": {
+        "ajv": "^6.1.0",
+        "ajv-keywords": "^3.1.0",
+        "chalk": "^2.3.2",
+        "strip-ansi": "^4.0.0",
+        "text-table": "^0.2.0",
+        "webpack-log": "^1.1.2"
+      },
+      "dependencies": {
+        "ansi-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+        },
+        "strip-ansi": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+          "requires": {
+            "ansi-regex": "^3.0.0"
+          }
+        },
+        "webpack-log": {
+          "version": "1.2.0",
+          "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz",
+          "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==",
+          "requires": {
+            "chalk": "^2.1.0",
+            "log-symbols": "^2.1.0",
+            "loglevelnext": "^1.0.1",
+            "uuid": "^3.1.0"
+          }
+        }
+      }
+    },
+    "@xtuc/ieee754": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+      "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA=="
+    },
+    "@xtuc/long": {
+      "version": "4.2.2",
+      "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+      "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ=="
+    },
+    "@zeit/schemas": {
+      "version": "2.6.0",
+      "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.6.0.tgz",
+      "integrity": "sha512-uUrgZ8AxS+Lio0fZKAipJjAh415JyrOZowliZAzmnJSsf7piVL5w+G0+gFJ0KSu3QRhvui/7zuvpLz03YjXAhg=="
+    },
+    "accepts": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
+      "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
+      "requires": {
+        "mime-types": "~2.1.24",
+        "negotiator": "0.6.2"
+      }
+    },
+    "acorn": {
+      "version": "6.0.5",
+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.5.tgz",
+      "integrity": "sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg=="
+    },
+    "acorn-walk": {
+      "version": "6.2.0",
+      "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",
+      "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="
+    },
+    "address": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/address/-/address-1.1.0.tgz",
+      "integrity": "sha512-4diPfzWbLEIElVG4AnqP+00SULlPzNuyJFNnmMrLgyaxG6tZXJ1sn7mjBu4fHrJE+Yp/jgylOweJn2xsLMFggQ=="
+    },
+    "ajv": {
+      "version": "6.10.2",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
+      "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+      "requires": {
+        "fast-deep-equal": "^2.0.1",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.4.1",
+        "uri-js": "^4.2.2"
+      }
+    },
+    "ajv-errors": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
+      "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ=="
+    },
+    "ajv-keywords": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
+      "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ=="
+    },
+    "ansi-align": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+      "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+      "requires": {
+        "string-width": "^2.0.0"
+      }
+    },
+    "ansi-colors": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
+      "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA=="
+    },
+    "ansi-escapes": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+      "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ=="
+    },
+    "ansi-html": {
+      "version": "0.0.7",
+      "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz",
+      "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4="
+    },
+    "ansi-regex": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+      "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+    },
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+      "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "anymatch": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+      "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+      "requires": {
+        "micromatch": "^3.1.4",
+        "normalize-path": "^2.1.1"
+      },
+      "dependencies": {
+        "normalize-path": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
+          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+          "requires": {
+            "remove-trailing-separator": "^1.0.1"
+          }
+        }
+      }
+    },
+    "aproba": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+      "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
+    },
+    "arch": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz",
+      "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg=="
+    },
+    "arg": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmjs.org/arg/-/arg-2.0.0.tgz",
+      "integrity": "sha512-XxNTUzKnz1ctK3ZIcI2XUPlD96wbHP2nGqkPKpvk/HNRlPveYrXIVSTk9m3LcqOgDPg3B1nMvdV/K8wZd7PG4w=="
+    },
+    "argparse": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+      "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+      "requires": {
+        "sprintf-js": "~1.0.2"
+      }
+    },
+    "arr-diff": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+      "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA="
+    },
+    "arr-flatten": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+      "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="
+    },
+    "arr-union": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+      "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ="
+    },
+    "array-filter": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz",
+      "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw="
+    },
+    "array-find-index": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E="
+    },
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
+    },
+    "array-includes": {
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz",
+      "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=",
+      "requires": {
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.7.0"
+      }
+    },
+    "array-map": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz",
+      "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI="
+    },
+    "array-reduce": {
+      "version": "0.0.0",
+      "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz",
+      "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys="
+    },
+    "array-sort": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
+      "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
+      "requires": {
+        "default-compare": "^1.0.0",
+        "get-value": "^2.0.6",
+        "kind-of": "^5.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+          "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw=="
+        }
+      }
+    },
+    "array-union": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+      "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+      "requires": {
+        "array-uniq": "^1.0.1"
+      }
+    },
+    "array-uniq": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+      "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY="
+    },
+    "array-unique": {
+      "version": "0.3.2",
+      "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+      "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg="
+    },
+    "arrify": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0="
+    },
+    "art-template": {
+      "version": "4.13.2",
+      "resolved": "https://registry.npmjs.org/art-template/-/art-template-4.13.2.tgz",
+      "integrity": "sha512-04ws5k+ndA5DghfheY4c8F1304XJKeTcaXqZCLpxFkNMSkaR3ChW1pX2i9d3sEEOZuLy7de8lFriRaik1jEeOQ==",
+      "requires": {
+        "acorn": "^5.0.3",
+        "escodegen": "^1.8.1",
+        "estraverse": "^4.2.0",
+        "html-minifier": "^3.4.3",
+        "is-keyword-js": "^1.0.3",
+        "js-tokens": "^3.0.1",
+        "merge-source-map": "^1.0.3",
+        "source-map": "^0.5.6"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "5.7.3",
+          "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz",
+          "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw=="
+        },
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
+          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
+        },
+        "html-minifier": {
+          "version": "3.5.21",
+          "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.21.tgz",
+          "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==",
+          "requires": {
+            "camel-case": "3.0.x",
+            "clean-css": "4.2.x",
+            "commander": "2.17.x",
+            "he": "1.2.x",
+            "param-case": "2.1.x",
+            "relateurl": "0.2.x",
+            "uglify-js": "3.4.x"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+        }
+      }
+    },
+    "asap": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+      "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
+    },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
+    "assert": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
+      "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
+      "requires": {
+        "object-assign": "^4.1.1",
+        "util": "0.10.3"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
+          "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE="
+        },
+        "util": {
+          "version": "0.10.3",
+          "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
+          "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
+          "requires": {
+            "inherits": "2.0.1"
+          }
+        }
+      }
+    },
+    "assign-symbols": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+      "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c="
+    },
+    "ast-types": {
+      "version": "0.12.4",
+      "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.12.4.tgz",
+      "integrity": "sha512-ky/YVYCbtVAS8TdMIaTiPFHwEpRB5z1hctepJplTr3UW5q8TDrpIMCILyk8pmLxGtn2KCtC/lSn7zOsaI7nzDw=="
+    },
+    "async": {
+      "version": "2.6.2",
+      "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz",
+      "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==",
+      "requires": {
+        "lodash": "^4.17.11"
+      }
+    },
+    "async-each": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
+      "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ=="
+    },
+    "async-limiter": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+      "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
+    },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
+    },
+    "atob": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+      "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
+    },
+    "axios": {
+      "version": "0.19.0",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.0.tgz",
+      "integrity": "sha512-1uvKqKQta3KBxIz14F2v06AEHZ/dIoeKfbTRkK1E5oqjDnuEerLmYTgJB5AiQZHJcljpg1TuRzdjDR06qNk0DQ==",
+      "dev": true,
+      "requires": {
+        "follow-redirects": "1.5.10",
+        "is-buffer": "^2.0.2"
+      },
+      "dependencies": {
+        "debug": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+          "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+          "dev": true,
+          "requires": {
+            "ms": "2.0.0"
+          }
+        },
+        "follow-redirects": {
+          "version": "1.5.10",
+          "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
+          "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
+          "dev": true,
+          "requires": {
+            "debug": "=3.1.0"
+          }
+        },
+        "is-buffer": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz",
+          "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==",
+          "dev": true
+        }
+      }
+    },
+    "babel-code-frame": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
+      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
+      "requires": {
+        "chalk": "^1.1.3",
+        "esutils": "^2.0.2",
+        "js-tokens": "^3.0.2"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
+        },
+        "chalk": {
+          "version": "1.1.3",
+          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+          "requires": {
+            "ansi-styles": "^2.2.1",
+            "escape-string-regexp": "^1.0.2",
+            "has-ansi": "^2.0.0",
+            "strip-ansi": "^3.0.0",
+            "supports-color": "^2.0.0"
+          }
+        },
+        "js-tokens": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
+          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="
+        },
+        "strip-ansi": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "requires": {
+            "ansi-regex": "^2.0.0"
+          }
+        },
+        "supports-color": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
+        }
+      }
+    },
+    "babel-core": {
+      "version": "7.0.0-bridge.0",
+      "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+      "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg=="
+    },
+    "babel-loader": {
+      "version": "8.0.6",
+      "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz",
+      "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==",
+      "requires": {
+        "find-cache-dir": "^2.0.0",
+        "loader-utils": "^1.0.2",
+        "mkdirp": "^0.5.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "babel-plugin-apply-mdx-type-prop": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.3.1.tgz",
+      "integrity": "sha512-tyh0iGhU4upNy4ruxOOOnqTO9Ci43gcXrH0vtcVmOMvGjyfhDHzug8ULoZZJqSTl5V77qUskafQsYHF3f1UV9g==",
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0",
+        "@mdx-js/util": "^1.3.1"
+      }
+    },
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
+      "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+      "requires": {
+        "object.assign": "^4.1.0"
+      }
+    },
+    "babel-plugin-emotion": {
+      "version": "10.0.14",
+      "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.14.tgz",
+      "integrity": "sha512-T7hdxJ4xXkKW3OXcizK0pnUJlBeNj/emjQZPDIZvGOuwl2adIgicQWRNkz6BuwKdDTrqaXQn1vayaL6aL8QW5A==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@emotion/hash": "0.7.2",
+        "@emotion/memoize": "0.7.2",
+        "@emotion/serialize": "^0.11.8",
+        "babel-plugin-macros": "^2.0.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "convert-source-map": "^1.5.0",
+        "escape-string-regexp": "^1.0.5",
+        "find-root": "^1.1.0",
+        "source-map": "^0.5.7"
+      },
+      "dependencies": {
+        "@emotion/memoize": {
+          "version": "0.7.2",
+          "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.2.tgz",
+          "integrity": "sha512-hnHhwQzvPCW1QjBWFyBtsETdllOM92BfrKWbUTmh9aeOlcVOiXvlPsK4104xH8NsaKfg86PTFsWkueQeUfMA/w==",
+          "dev": true
+        }
+      }
+    },
+    "babel-plugin-export-metadata": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-export-metadata/-/babel-plugin-export-metadata-1.2.0.tgz",
+      "integrity": "sha512-rOTzhs/rXbuYMm4e8uTgAvTUw8H7QdU8maFy1ClArp/j8cpgzB80/oixQFiT/KAlLB+6ygLxr3befj97k2WppA==",
+      "requires": {
+        "@babel/cli": "^7.4.4",
+        "@babel/core": "^7.4.4",
+        "@babel/preset-env": "^7.4.4",
+        "@babel/template": "^7.4.4",
+        "babel-core": "7.0.0-bridge.0",
+        "lodash": "^4.17.11"
+      }
+    },
+    "babel-plugin-extract-import-names": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.3.1.tgz",
+      "integrity": "sha512-7KqXFwbzj9y6anLoIpMKQsC2J3PsiZMRaSP3qTCP9PY38Bz2cwsJnTIMKvottVQB2evBCYPqjp3VPSZ74jM1Dw==",
+      "requires": {
+        "@babel/helper-plugin-utils": "7.0.0"
+      }
+    },
+    "babel-plugin-lodash": {
+      "version": "3.3.4",
+      "resolved": "https://registry.npmjs.org/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz",
+      "integrity": "sha512-yDZLjK7TCkWl1gpBeBGmuaDIFhZKmkoL+Cu2MUUjv5VxUZx/z7tBGBCBcQs5RI1Bkz5LLmNdjx7paOyQtMovyg==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0-beta.49",
+        "@babel/types": "^7.0.0-beta.49",
+        "glob": "^7.1.1",
+        "lodash": "^4.17.10",
+        "require-package-name": "^2.0.1"
+      }
+    },
+    "babel-plugin-macros": {
+      "version": "2.5.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.5.1.tgz",
+      "integrity": "sha512-xN3KhAxPzsJ6OQTktCanNpIFnnMsCV+t8OloKxIL72D6+SUZYFn9qfklPgef5HyyDtzYZqqb+fs1S12+gQY82Q==",
+      "dev": true,
+      "requires": {
+        "@babel/runtime": "^7.4.2",
+        "cosmiconfig": "^5.2.0",
+        "resolve": "^1.10.0"
+      }
+    },
+    "babel-plugin-named-asset-import": {
+      "version": "0.3.3",
+      "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.3.tgz",
+      "integrity": "sha512-1XDRysF4894BUdMChT+2HHbtJYiO7zx5Be7U6bT8dISy7OdyETMGIAQBMPQCsY1YRf0xcubwnKKaDr5bk15JTA=="
+    },
+    "babel-plugin-react-transform": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-react-transform/-/babel-plugin-react-transform-3.0.0.tgz",
+      "integrity": "sha512-4vJGddwPiHAOgshzZdGwYy4zRjjIr5SMY7gkOaCyIASjgpcsyLTlZNuB5rHOFoaTvGlhfo8/g4pobXPyHqm/3w==",
+      "dev": true,
+      "requires": {
+        "lodash": "^4.6.1"
+      }
+    },
+    "babel-plugin-styled-components": {
+      "version": "1.10.1",
+      "resolved": "https://registry.npmjs.org/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.1.tgz",
+      "integrity": "sha512-F6R2TnPGNN6iuXCs0xQ+EsrunwNoWI55J5I8Pkd/+fzzbv1I4gFgTaZepMOVpLobYWU2XaLIm+73L0zD3CnOdQ==",
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.0.0",
+        "@babel/helper-module-imports": "^7.0.0",
+        "babel-plugin-syntax-jsx": "^6.18.0",
+        "lodash": "^4.17.11"
+      }
+    },
+    "babel-plugin-syntax-jsx": {
+      "version": "6.18.0",
+      "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",
+      "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="
+    },
+    "babel-plugin-transform-react-remove-prop-types": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz",
+      "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA=="
+    },
+    "babel-preset-react-app": {
+      "version": "9.0.1",
+      "resolved": "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-9.0.1.tgz",
+      "integrity": "sha512-v7MeY+QxdBhM9oU5uOQCIHLsErYkEbbjctXsb10II+KAnttbe0rvprvP785dRxfa9dI4ZbsGXsRU07Qdi5BtOw==",
+      "requires": {
+        "@babel/core": "7.5.5",
+        "@babel/plugin-proposal-class-properties": "7.5.5",
+        "@babel/plugin-proposal-decorators": "7.4.4",
+        "@babel/plugin-proposal-object-rest-spread": "7.5.5",
+        "@babel/plugin-syntax-dynamic-import": "7.2.0",
+        "@babel/plugin-transform-destructuring": "7.5.0",
+        "@babel/plugin-transform-flow-strip-types": "7.4.4",
+        "@babel/plugin-transform-react-display-name": "7.2.0",
+        "@babel/plugin-transform-runtime": "7.5.5",
+        "@babel/preset-env": "7.5.5",
+        "@babel/preset-react": "7.0.0",
+        "@babel/preset-typescript": "7.3.3",
+        "@babel/runtime": "7.5.5",
+        "babel-plugin-dynamic-import-node": "2.3.0",
+        "babel-plugin-macros": "2.6.1",
+        "babel-plugin-transform-react-remove-prop-types": "0.4.24"
+      },
+      "dependencies": {
+        "@babel/code-frame": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
+          "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+          "requires": {
+            "@babel/highlight": "^7.0.0"
+          }
+        },
+        "@babel/core": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.5.5.tgz",
+          "integrity": "sha512-i4qoSr2KTtce0DmkuuQBV4AuQgGPUcPXMr9L5MyYAtk06z068lQ10a4O009fe5OB/DfNV+h+qqT7ddNV8UnRjg==",
+          "requires": {
+            "@babel/code-frame": "^7.5.5",
+            "@babel/generator": "^7.5.5",
+            "@babel/helpers": "^7.5.5",
+            "@babel/parser": "^7.5.5",
+            "@babel/template": "^7.4.4",
+            "@babel/traverse": "^7.5.5",
+            "@babel/types": "^7.5.5",
+            "convert-source-map": "^1.1.0",
+            "debug": "^4.1.0",
+            "json5": "^2.1.0",
+            "lodash": "^4.17.13",
+            "resolve": "^1.3.2",
+            "semver": "^5.4.1",
+            "source-map": "^0.5.0"
+          }
+        },
+        "@babel/generator": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.5.5.tgz",
+          "integrity": "sha512-ETI/4vyTSxTzGnU2c49XHv2zhExkv9JHLTwDAFz85kmcwuShvYG2H08FwgIguQf4JC75CBnXAUM5PqeF4fj0nQ==",
+          "requires": {
+            "@babel/types": "^7.5.5",
+            "jsesc": "^2.5.1",
+            "lodash": "^4.17.13",
+            "source-map": "^0.5.0",
+            "trim-right": "^1.0.1"
+          }
+        },
+        "@babel/helpers": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.5.5.tgz",
+          "integrity": "sha512-nRq2BUhxZFnfEn/ciJuhklHvFOqjJUD5wpx+1bxUF2axL9C+v4DE/dmp5sT2dKnpOs4orZWzpAZqlCy8QqE/7g==",
+          "requires": {
+            "@babel/template": "^7.4.4",
+            "@babel/traverse": "^7.5.5",
+            "@babel/types": "^7.5.5"
+          }
+        },
+        "@babel/parser": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.5.5.tgz",
+          "integrity": "sha512-E5BN68cqR7dhKan1SfqgPGhQ178bkVKpXTPEXnFJBrEt8/DKRZlybmy+IgYLTeN7tp1R5Ccmbm2rBk17sHYU3g=="
+        },
+        "@babel/runtime": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",
+          "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",
+          "requires": {
+            "regenerator-runtime": "^0.13.2"
+          }
+        },
+        "@babel/traverse": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.5.5.tgz",
+          "integrity": "sha512-MqB0782whsfffYfSjH4TM+LMjrJnhCNEDMDIjeTpl+ASaUvxcjoiVCo/sM1GhS1pHOXYfWVCYneLjMckuUxDaQ==",
+          "requires": {
+            "@babel/code-frame": "^7.5.5",
+            "@babel/generator": "^7.5.5",
+            "@babel/helper-function-name": "^7.1.0",
+            "@babel/helper-split-export-declaration": "^7.4.4",
+            "@babel/parser": "^7.5.5",
+            "@babel/types": "^7.5.5",
+            "debug": "^4.1.0",
+            "globals": "^11.1.0",
+            "lodash": "^4.17.13"
+          }
+        },
+        "@babel/types": {
+          "version": "7.5.5",
+          "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.5.5.tgz",
+          "integrity": "sha512-s63F9nJioLqOlW3UkyMd+BYhXt44YuaFm/VV0VwuteqjYwRrObkU7ra9pY4wAJR3oXi8hJrMcrcJdO/HH33vtw==",
+          "requires": {
+            "esutils": "^2.0.2",
+            "lodash": "^4.17.13",
+            "to-fast-properties": "^2.0.0"
+          }
+        },
+        "babel-plugin-macros": {
+          "version": "2.6.1",
+          "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz",
+          "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==",
+          "requires": {
+            "@babel/runtime": "^7.4.2",
+            "cosmiconfig": "^5.2.0",
+            "resolve": "^1.10.0"
+          }
+        },
+        "debug": {
+          "version": "4.1.1",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+          "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+          "requires": {
+            "ms": "^2.1.1"
+          }
+        },
+        "lodash": {
+          "version": "4.17.15",
+          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+          "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+        },
+        "ms": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+          "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+        }
+      }
+    },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "2.6.9",
+          "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz",
+          "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A=="
+        },
+        "regenerator-runtime": {
+          "version": "0.11.1",
+          "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
+          "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
+        }
+      }
+    },
+    "bail": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.4.tgz",
+      "integrity": "sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww=="
+    },
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
+    },
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+      "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+      "requires": {
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
+      },
+      "dependencies": {
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+          "requires": {
+            "is-descriptor": "^1.0.0"
+          }
+        },
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+          "requires": {
+            "kind-of": "^6.0.0"
+          }
+        },
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+          "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+          "requires": {
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
+          }
+        }
+      }
+    },
+    "base64-js": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz",
+      "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g=="
+    },
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
+    },
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz",
+      "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==",
+      "requires": {
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
+      }
+    },
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
+      "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
+    },
+    "binary-extensions": {
+      "version": "1.13.1",
+      "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+      "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw=="
+    },
+    "bluebird": {
+      "version": "3.5.5",
+      "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz",
+      "integrity": "sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w=="
+    },
+    "bn.js": {
+      "version": "4.11.8",
+      "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
+      "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA=="
+    },
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
+      "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
+      "requires": {
+        "bytes": "3.1.0",
+        "content-type": "~1.0.4",
+        "debug": "2.6.9",
+        "depd": "~1.1.2",
+        "http-errors": "1.7.2",
+        "iconv-lite": "0.4.24",
+        "on-finished": "~2.3.0",
+        "qs": "6.7.0",
+        "raw-body": "2.4.0",
+        "type-is": "~1.6.17"
+      }
+    },
+    "bonjour": {
+      "version": "3.5.0",
+      "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz",
+      "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=",
+      "requires": {
+        "array-flatten": "^2.1.0",
+        "deep-equal": "^1.0.1",
+        "dns-equal": "^1.0.0",
+        "dns-txt": "^2.0.2",
+        "multicast-dns": "^6.0.1",
+        "multicast-dns-service-types": "^1.1.0"
+      },
+      "dependencies": {
+        "array-flatten": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz",
+          "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ=="
+        }
+      }
+    },
+    "boolbase": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+      "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24="
+    },
+    "boxen": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+      "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+      "requires": {
+        "ansi-align": "^2.0.0",
+        "camelcase": "^4.0.0",
+        "chalk": "^2.0.1",
+        "cli-boxes": "^1.0.0",
+        "string-width": "^2.0.0",
+        "term-size": "^1.2.0",
+        "widest-line": "^2.0.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+          "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+        }
+      }
+    },
+    "brace-expansion": {
+      "version": "1.1.11",
+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+      "requires": {
+        "balanced-match": "^1.0.0",
+        "concat-map": "0.0.1"
+      }
+    },
+    "braces": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+      "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+      "requires": {
+        "arr-flatten": "^1.1.0",
+        "array-unique": "^0.3.2",
+        "extend-shallow": "^2.0.1",
+        "fill-range": "^4.0.0",
+        "isobject": "^3.0.1",
+        "repeat-element": "^1.1.2",
+        "snapdragon": "^0.8.1",
+        "snapdragon-node": "^2.0.1",
+        "split-string": "^3.0.2",
+        "to-regex": "^3.0.1"
+      },
+      "dependencies": {
+        "extend-shallow": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+          "requires": {
+            "is-extendable": "^0.1.0"
+          }
+        }
+      }
+    },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
... 22090 lines suppressed ...