diff --git a/package-lock.json b/package-lock.json
index 0a2836ac4bd62b8f94eabf68d06f105e1aa580c8..424d64e2e290b16696d3c84cbc1a746b131b2463 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1144,11 +1144,11 @@
       }
     },
     "node_modules/internal-slot": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-      "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
       "dependencies": {
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "has": "^1.0.3",
         "side-channel": "^1.0.4"
       },
@@ -2562,13 +2562,13 @@
       }
     },
     "node_modules/jss-plugin-camel-case": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz",
-      "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz",
+      "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "hyphenate-style-name": "^1.0.3",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/workbox-broadcast-update": {
@@ -3119,9 +3119,9 @@
       }
     },
     "node_modules/jss": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz",
-      "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz",
+      "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "csstype": "^3.0.2",
@@ -9510,9 +9510,9 @@
       "dev": true
     },
     "node_modules/remark-rehype/node_modules/vfile": {
-      "version": "5.3.6",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-      "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+      "version": "5.3.7",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
       "dependencies": {
         "@types/unist": "^2.0.0",
         "is-buffer": "^2.0.0",
@@ -9890,9 +9890,9 @@
       "dev": true
     },
     "node_modules/electron-to-chromium": {
-      "version": "1.4.289",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.289.tgz",
-      "integrity": "sha512-relLdMfPBxqGCxy7Gyfm1HcbRPcFUJdlgnCPVgQ23sr1TvUrRJz0/QPoGP0+x41wOVSTN/Wi3w6YDgHiHJGOzg==",
+      "version": "1.4.294",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
+      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
       "dev": true
     },
     "node_modules/@babel/parser": {
@@ -13270,12 +13270,12 @@
       }
     },
     "node_modules/jss-plugin-rule-value-function": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz",
-      "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz",
+      "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
@@ -18423,13 +18423,13 @@
       "dev": true
     },
     "node_modules/jss-plugin-vendor-prefixer": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz",
-      "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz",
+      "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
         "css-vendor": "^2.0.8",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/react-markdown/node_modules/style-to-object": {
@@ -19309,12 +19309,6 @@
       "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
       "dev": true
     },
-    "node_modules/regjsgen": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
-      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
-      "dev": true
-    },
     "node_modules/flat-cache": {
       "version": "3.0.4",
       "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
@@ -19497,9 +19491,9 @@
       }
     },
     "node_modules/eslint-plugin-testing-library": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz",
-      "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==",
+      "version": "5.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz",
+      "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==",
       "dev": true,
       "dependencies": {
         "@typescript-eslint/utils": "^5.43.0"
@@ -19522,12 +19516,12 @@
       }
     },
     "node_modules/jss-plugin-props-sort": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz",
-      "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz",
+      "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/infer-owner": {
@@ -22505,9 +22499,9 @@
       }
     },
     "node_modules/recharts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.3.2.tgz",
-      "integrity": "sha512-2II30fGzKaypHfHNQNUhCfiLMxrOS/gF0WFahDIEFgXtJkVEe2DpZWFfEfAn+RU3B7/h2V/B05Bwmqq3rTXwLw==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.4.1.tgz",
+      "integrity": "sha512-mX/R6wUFquFKbvqfa2VUFfrtqydzNp6f2b74NKVmk3Zt3m/uPD6hQYST2/1j/YXv0ZbNWE4xAyVp98tMBVxOsA==",
       "dependencies": {
         "classnames": "^2.2.5",
         "eventemitter3": "^4.0.1",
@@ -24851,6 +24845,12 @@
         "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
       }
     },
+    "node_modules/@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
     "node_modules/import-local/node_modules/locate-path": {
       "version": "5.0.0",
       "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
@@ -29227,12 +29227,12 @@
       }
     },
     "node_modules/jss-plugin-nested": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz",
-      "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz",
+      "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
@@ -31823,9 +31823,9 @@
       "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
     },
     "node_modules/minimist": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true,
       "funding": {
         "url": "https://github.com/sponsors/ljharb"
@@ -32338,12 +32338,12 @@
       }
     },
     "node_modules/jss-plugin-default-unit": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz",
-      "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz",
+      "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/patch-package/node_modules/cross-spawn": {
@@ -34739,9 +34739,9 @@
       }
     },
     "node_modules/react-markdown/node_modules/vfile": {
-      "version": "5.3.6",
-      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-      "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+      "version": "5.3.7",
+      "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+      "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
       "dependencies": {
         "@types/unist": "^2.0.0",
         "is-buffer": "^2.0.0",
@@ -39704,14 +39704,14 @@
       "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg=="
     },
     "node_modules/regexpu-core": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
-      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz",
+      "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==",
       "dev": true,
       "dependencies": {
+        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
         "regenerate-unicode-properties": "^10.1.0",
-        "regjsgen": "^0.7.1",
         "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
@@ -42136,12 +42136,12 @@
       }
     },
     "node_modules/jss-plugin-global": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz",
-      "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz",
+      "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==",
       "dependencies": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "node_modules/mdn-data": {
@@ -43791,6 +43791,12 @@
         "source-map-support": "^0.5.16"
       }
     },
+    "@babel/regjsgen": {
+      "version": "0.8.0",
+      "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
+      "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
+      "dev": true
+    },
     "@babel/runtime": {
       "version": "7.20.13",
       "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz",
@@ -55329,9 +55335,9 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.4.289",
-      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.289.tgz",
-      "integrity": "sha512-relLdMfPBxqGCxy7Gyfm1HcbRPcFUJdlgnCPVgQ23sr1TvUrRJz0/QPoGP0+x41wOVSTN/Wi3w6YDgHiHJGOzg==",
+      "version": "1.4.294",
+      "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.294.tgz",
+      "integrity": "sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==",
       "dev": true
     },
     "elliptic": {
@@ -56068,9 +56074,9 @@
       "dev": true
     },
     "eslint-plugin-testing-library": {
-      "version": "5.10.0",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.0.tgz",
-      "integrity": "sha512-aTOsCAEI9trrX3TLOnsskfhe57DmsjP/yMKLPqg4ftdRvfR4qut2PGWUa8TwP7whZbwMzJjh98tgAPcE8vdHow==",
+      "version": "5.10.1",
+      "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.10.1.tgz",
+      "integrity": "sha512-GRy87AqUi2Ij69pe0YnOXm3oGBCgnFwfIv+Hu9q/kT3jL0pX1cXA7aO+oJnvdpbJy2+riOPqGsa3iAkL888NLg==",
       "dev": true,
       "requires": {
         "@typescript-eslint/utils": "^5.43.0"
@@ -58849,11 +58855,11 @@
       }
     },
     "internal-slot": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
-      "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
+      "version": "1.0.5",
+      "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz",
+      "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==",
       "requires": {
-        "get-intrinsic": "^1.1.3",
+        "get-intrinsic": "^1.2.0",
         "has": "^1.0.3",
         "side-channel": "^1.0.4"
       }
@@ -61849,9 +61855,9 @@
       }
     },
     "jss": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss/-/jss-10.9.2.tgz",
-      "integrity": "sha512-b8G6rWpYLR4teTUbGd4I4EsnWjg7MN0Q5bSsjKhVkJVjhQDy2KzkbD2AW3TuT0RYZVmZZHKIrXDn6kjU14qkUg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss/-/jss-10.10.0.tgz",
+      "integrity": "sha512-cqsOTS7jqPsPMjtKYDUpdFC0AbhYFLTcuGRqymgmdJIeQ8cH7+AgX7YSgQy79wXloZq2VvATYxUOUQEvS1V/Zw==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "csstype": "^3.0.2",
@@ -61867,70 +61873,70 @@
       }
     },
     "jss-plugin-camel-case": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.9.2.tgz",
-      "integrity": "sha512-wgBPlL3WS0WDJ1lPJcgjux/SHnDuu7opmgQKSraKs4z8dCCyYMx9IDPFKBXQ8Q5dVYij1FFV0WdxyhuOOAXuTg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.10.0.tgz",
+      "integrity": "sha512-z+HETfj5IYgFxh1wJnUAU8jByI48ED+v0fuTuhKrPR+pRBYS2EDwbusU8aFOpCdYhtRc9zhN+PJ7iNE8pAWyPw==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "hyphenate-style-name": "^1.0.3",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-default-unit": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.9.2.tgz",
-      "integrity": "sha512-pYg0QX3bBEFtTnmeSI3l7ad1vtHU42YEEpgW7pmIh+9pkWNWb5dwS/4onSfAaI0kq+dOZHzz4dWe+8vWnanoSg==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.10.0.tgz",
+      "integrity": "sha512-SvpajxIECi4JDUbGLefvNckmI+c2VWmP43qnEy/0eiwzRUsafg5DVSIWSzZe4d2vFX1u9nRDP46WCFV/PXVBGQ==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-global": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.9.2.tgz",
-      "integrity": "sha512-GcX0aE8Ef6AtlasVrafg1DItlL/tWHoC4cGir4r3gegbWwF5ZOBYhx04gurPvWHC8F873aEGqge7C17xpwmp2g==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.10.0.tgz",
+      "integrity": "sha512-icXEYbMufiNuWfuazLeN+BNJO16Ge88OcXU5ZDC2vLqElmMybA31Wi7lZ3lf+vgufRocvPj8443irhYRgWxP+A==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-nested": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.9.2.tgz",
-      "integrity": "sha512-VgiOWIC6bvgDaAL97XCxGD0BxOKM0K0zeB/ECyNaVF6FqvdGB9KBBWRdy2STYAss4VVA7i5TbxFZN+WSX1kfQA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.10.0.tgz",
+      "integrity": "sha512-9R4JHxxGgiZhurDo3q7LdIiDEgtA1bTGzAbhSPyIOWb7ZubrjQe8acwhEQ6OEKydzpl8XHMtTnEwHXCARLYqYA==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
     "jss-plugin-props-sort": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.9.2.tgz",
-      "integrity": "sha512-AP1AyUTbi2szylgr+O0OB7gkIxEGzySLITZ2GpsaoX72YMCGI2jYAc+WUhPfvUnZYiauF4zTnN4V4TGuvFjJlw==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.10.0.tgz",
+      "integrity": "sha512-5VNJvQJbnq/vRfje6uZLe/FyaOpzP/IH1LP+0fr88QamVrGJa0hpRRyAa0ea4U/3LcorJfBFVyC4yN2QC73lJg==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jss-plugin-rule-value-function": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.9.2.tgz",
-      "integrity": "sha512-vf5ms8zvLFMub6swbNxvzsurHfUZ5Shy5aJB2gIpY6WNA3uLinEcxYyraQXItRHi5ivXGqYciFDRM2ZoVoRZ4Q==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.10.0.tgz",
+      "integrity": "sha512-uEFJFgaCtkXeIPgki8ICw3Y7VMkL9GEan6SqmT9tqpwM+/t+hxfMUdU4wQ0MtOiMNWhwnckBV0IebrKcZM9C0g==",
       "requires": {
         "@babel/runtime": "^7.3.1",
-        "jss": "10.9.2",
+        "jss": "10.10.0",
         "tiny-warning": "^1.0.2"
       }
     },
     "jss-plugin-vendor-prefixer": {
-      "version": "10.9.2",
-      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.9.2.tgz",
-      "integrity": "sha512-SxcEoH+Rttf9fEv6KkiPzLdXRmI6waOTcMkbbEFgdZLDYNIP9UKNHFy6thhbRKqv0XMQZdrEsbDyV464zE/dUA==",
+      "version": "10.10.0",
+      "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.10.0.tgz",
+      "integrity": "sha512-UY/41WumgjW8r1qMCO8l1ARg7NHnfRVWRhZ2E2m0DMYsr2DD91qIXLyNhiX83hHswR7Wm4D+oDYNC1zWCJWtqg==",
       "requires": {
         "@babel/runtime": "^7.3.1",
         "css-vendor": "^2.0.8",
-        "jss": "10.9.2"
+        "jss": "10.10.0"
       }
     },
     "jsx-ast-utils": {
@@ -63158,9 +63164,9 @@
       }
     },
     "minimist": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
-      "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+      "version": "1.2.8",
+      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+      "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
       "dev": true
     },
     "minipass": {
@@ -67289,9 +67295,9 @@
           }
         },
         "vfile": {
-          "version": "5.3.6",
-          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-          "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+          "version": "5.3.7",
+          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+          "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
           "requires": {
             "@types/unist": "^2.0.0",
             "is-buffer": "^2.0.0",
@@ -68966,9 +68972,9 @@
       }
     },
     "recharts": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.3.2.tgz",
-      "integrity": "sha512-2II30fGzKaypHfHNQNUhCfiLMxrOS/gF0WFahDIEFgXtJkVEe2DpZWFfEfAn+RU3B7/h2V/B05Bwmqq3rTXwLw==",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmjs.org/recharts/-/recharts-2.4.1.tgz",
+      "integrity": "sha512-mX/R6wUFquFKbvqfa2VUFfrtqydzNp6f2b74NKVmk3Zt3m/uPD6hQYST2/1j/YXv0ZbNWE4xAyVp98tMBVxOsA==",
       "requires": {
         "classnames": "^2.2.5",
         "eventemitter3": "^4.0.1",
@@ -69110,14 +69116,14 @@
       "dev": true
     },
     "regexpu-core": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
-      "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+      "version": "5.3.0",
+      "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.0.tgz",
+      "integrity": "sha512-ZdhUQlng0RoscyW7jADnUZ25F5eVtHdMyXSb2PiwafvteRAOJUjFoUPEYZSIfP99fBIs3maLIRfpEddT78wAAQ==",
       "dev": true,
       "requires": {
+        "@babel/regjsgen": "^0.8.0",
         "regenerate": "^1.4.2",
         "regenerate-unicode-properties": "^10.1.0",
-        "regjsgen": "^0.7.1",
         "regjsparser": "^0.9.1",
         "unicode-match-property-ecmascript": "^2.0.0",
         "unicode-match-property-value-ecmascript": "^2.1.0"
@@ -69142,12 +69148,6 @@
         "rc": "^1.0.1"
       }
     },
-    "regjsgen": {
-      "version": "0.7.1",
-      "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
-      "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
-      "dev": true
-    },
     "regjsparser": {
       "version": "0.9.1",
       "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
@@ -69418,9 +69418,9 @@
           }
         },
         "vfile": {
-          "version": "5.3.6",
-          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz",
-          "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==",
+          "version": "5.3.7",
+          "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.7.tgz",
+          "integrity": "sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==",
           "requires": {
             "@types/unist": "^2.0.0",
             "is-buffer": "^2.0.0",
diff --git a/src/components/Job/index.js b/src/components/Job/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..16f8a576bcb36dcc8580a28803163f9947bb4a73
--- /dev/null
+++ b/src/components/Job/index.js
@@ -0,0 +1,15 @@
+import { JobAsyncList, JobDetailFetcher } from "./JobAsyncList";
+import { JobBadge } from "./JobBadge";
+import { JobDetails } from "./JobDetails";
+import { JobStatusIcon, JobTypeIcon } from "./JobIcons";
+import { JobTable } from "./JobTable";
+
+export {
+  JobAsyncList,
+  JobDetailFetcher,
+  JobBadge,
+  JobDetails,
+  JobStatusIcon,
+  JobTypeIcon,
+  JobTable
+};
diff --git a/src/components/common/Accordion/index.js b/src/components/common/Accordion/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..5ee421810fa6f798f7e24f23d46cd2b8386708db
--- /dev/null
+++ b/src/components/common/Accordion/index.js
@@ -0,0 +1,4 @@
+import { SimpleAccordion } from "./SimpleAccordion";
+
+export { SimpleAccordion };
+export default SimpleAccordion;
diff --git a/src/components/common/Badge/index.js b/src/components/common/Badge/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..557989e21644f6756164fd197badae26ce79b1a4
--- /dev/null
+++ b/src/components/common/Badge/index.js
@@ -0,0 +1,4 @@
+import { IconBadge } from "./IconBadge";
+
+export { IconBadge };
+export default IconBadge;
diff --git a/src/components/common/Console/index.js b/src/components/common/Console/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..f376c27d798669bb118b25b76c695379849837a2
--- /dev/null
+++ b/src/components/common/Console/index.js
@@ -0,0 +1,6 @@
+import { Console } from "./Console";
+import { ConsoleOutput } from "./ConsoleOutput";
+import { LogDialog } from "./LogDialog";
+
+export { Console, ConsoleOutput, LogDialog };
+export default Console;
diff --git a/src/components/common/Container/index.js b/src/components/common/Container/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bbcaefc1015e488b8debb1e7f097a684b3a27aa3
--- /dev/null
+++ b/src/components/common/Container/index.js
@@ -0,0 +1,4 @@
+import { RootContainer } from "./RootContainer";
+
+export { RootContainer };
+export default RootContainer;
diff --git a/src/components/common/KeyValueTable/index.js b/src/components/common/KeyValueTable/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b6ba15a325af7023e5634c9c8a1ab00891b633bc
--- /dev/null
+++ b/src/components/common/KeyValueTable/index.js
@@ -0,0 +1,4 @@
+import { KeyValueTable } from "./KeyValueTable";
+
+export { KeyValueTable };
+export default KeyValueTable;
diff --git a/src/components/common/Loki/index.js b/src/components/common/Loki/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..aeb3a64ab6eb15ab0c167f258fe15dfdf73687e6
--- /dev/null
+++ b/src/components/common/Loki/index.js
@@ -0,0 +1,4 @@
+import { LokiContainer } from "./LokiContainer";
+import { LokiPanel } from "./LokiPanel";
+
+export { LokiContainer, LokiPanel };
diff --git a/src/components/common/PrimeKeyValueTable/index.js b/src/components/common/PrimeKeyValueTable/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..f12f0b0e8aaa876db0bd6bdf6035579e2a0c22f1
--- /dev/null
+++ b/src/components/common/PrimeKeyValueTable/index.js
@@ -0,0 +1,4 @@
+import { PrimeKeyValueTable } from "./PrimeKeyValueTable";
+
+export { PrimeKeyValueTable };
+export default PrimeKeyValueTable;
diff --git a/src/components/common/SearchBar/index.js b/src/components/common/SearchBar/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..df0173df84f505726445b8c40b773578153f62c9
--- /dev/null
+++ b/src/components/common/SearchBar/index.js
@@ -0,0 +1,4 @@
+import { SearchBar } from "./SearchBar";
+
+export { SearchBar };
+export default SearchBar;
diff --git a/src/components/common/SearchBoxFilter/index.js b/src/components/common/SearchBoxFilter/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e657ee56f8b5f9a0846076d10d3b94f4911d6673
--- /dev/null
+++ b/src/components/common/SearchBoxFilter/index.js
@@ -0,0 +1,4 @@
+import { SearchBoxFilter, SearchBoxFilterDemo } from "./SearchBoxFilter";
+import { useTypingTimer } from "./TypingTimer";
+
+export { SearchBoxFilter, SearchBoxFilterDemo, useTypingTimer };
diff --git a/src/components/common/SimpleModal/index.js b/src/components/common/SimpleModal/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e57ea87346a77d76cd001729214eb4991d4fa4be
--- /dev/null
+++ b/src/components/common/SimpleModal/index.js
@@ -0,0 +1,4 @@
+import { SimpleModal } from "./SimpleModal";
+
+export { SimpleModal };
+export default SimpleModal;
diff --git a/src/components/common/URLState/index.js b/src/components/common/URLState/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..778ede8aba4f359f6cdf41a85cff241958d0ff9d
--- /dev/null
+++ b/src/components/common/URLState/index.js
@@ -0,0 +1,3 @@
+import { serialize, deserialize } from "./URLState";
+
+export { serialize, deserialize };
diff --git a/src/components/common/notification/index.js b/src/components/common/notification/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ef3bac74507f2dca0279e8b25597956582f69d2
--- /dev/null
+++ b/src/components/common/notification/index.js
@@ -0,0 +1,39 @@
+import { NotificationProvider, createContext } from "./Notifications";
+import { DeploymentWatcher, CommandWatcher } from "./Watchers";
+import {
+  removeId,
+  clearAll,
+  getStoredNotifications,
+  appendNotification,
+  watchDeployment,
+  watchCommand,
+  getStoredDeplomentIds,
+  getStoredCommandIds,
+  WATCHED_DEPLOYMENT_STORAGE_KEY,
+  DEPLOYMENT_NOTIFICATIONS,
+  WATCHED_COMMAND_STORAGE_KEY,
+  CURRENT_NOTIFICATION_VERSION,
+  TYPE_DEPLOYMENT,
+  TYPE_COMMAND
+} from "./Storage";
+
+export {
+  NotificationProvider,
+  createContext,
+  DeploymentWatcher,
+  CommandWatcher,
+  removeId,
+  clearAll,
+  getStoredNotifications,
+  appendNotification,
+  watchDeployment,
+  watchCommand,
+  getStoredDeplomentIds,
+  getStoredCommandIds,
+  WATCHED_DEPLOYMENT_STORAGE_KEY,
+  DEPLOYMENT_NOTIFICATIONS,
+  WATCHED_COMMAND_STORAGE_KEY,
+  CURRENT_NOTIFICATION_VERSION,
+  TYPE_DEPLOYMENT,
+  TYPE_COMMAND
+};
diff --git a/src/components/common/snackbar/index.js b/src/components/common/snackbar/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0f50baf87984452e02dfcaf458d16544a18a62bb
--- /dev/null
+++ b/src/components/common/snackbar/index.js
@@ -0,0 +1,4 @@
+import { useCustomSnackbar } from "./Snackbar";
+
+export { useCustomSnackbar };
+export default useCustomSnackbar;
diff --git a/src/components/common/stepper/index.js b/src/components/common/stepper/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f1f745847ffac29f845fc43ddcd76c40fb1a787
--- /dev/null
+++ b/src/components/common/stepper/index.js
@@ -0,0 +1,4 @@
+import { StepperWithStyle } from "./StepperWithStyle";
+
+export { StepperWithStyle };
+export default StepperWithStyle;
diff --git a/src/components/common/table/index.js b/src/components/common/table/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..809926a7e333c10c88a684f0a41c84feb513f304
--- /dev/null
+++ b/src/components/common/table/index.js
@@ -0,0 +1,4 @@
+import { CustomTable } from "./CustomTable";
+
+export { CustomTable };
+export default CustomTable;
diff --git a/src/components/deployments/DeploymentAsyncList.js b/src/components/deployments/DeploymentAsyncList.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/components/deployments/index.js b/src/components/deployments/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..22bcc7f7d534f1976694347921a96b9499e7de84
--- /dev/null
+++ b/src/components/deployments/index.js
@@ -0,0 +1,18 @@
+import { DeploymentBadge } from "./DeploymentBadge";
+import { DeploymentDetailFetcher } from "./DeploymentDetailFetcher";
+import { DeploymentDetails } from "./DeploymentDetails";
+import { DeploymentStatusIcon } from "./DeploymentIcons";
+import { DeploymentJobOutput } from "./DeploymentJobOutput";
+import { DeploymentsList, DeploymentListItem } from "./DeploymentsList";
+import { DeploymentStepper } from "./DeploymentStepper";
+
+export {
+  DeploymentBadge,
+  DeploymentDetailFetcher,
+  DeploymentDetails,
+  DeploymentStatusIcon,
+  DeploymentJobOutput,
+  DeploymentsList,
+  DeploymentListItem,
+  DeploymentStepper
+};
diff --git a/src/components/dialog/index.js b/src/components/dialog/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a5263fd66b8b630476110b45b21dd82f781e867
--- /dev/null
+++ b/src/components/dialog/index.js
@@ -0,0 +1,4 @@
+import { ConfirmationDialog } from "./ConfirmationDialog";
+
+export { ConfirmationDialog };
+export default ConfirmationDialog;
diff --git a/src/components/host/index.js b/src/components/host/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..089301f1706529ec710c2ca5306a78bb1ee2104e
--- /dev/null
+++ b/src/components/host/index.js
@@ -0,0 +1,14 @@
+import { HostBadge } from "./HostBadge";
+import { HostStatusIcon } from "./HostIcons";
+import { HostList, HostListItem } from "./HostList";
+import { HostTable, rowDescription, createRow } from "./HostTable";
+
+export {
+  HostBadge,
+  HostStatusIcon,
+  HostList,
+  HostListItem,
+  HostTable,
+  rowDescription,
+  createRow
+};
diff --git a/src/components/navigation/ErrorBoundary/index.js b/src/components/navigation/ErrorBoundary/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee619e282fd231502a52f396257583c0532b6d84
--- /dev/null
+++ b/src/components/navigation/ErrorBoundary/index.js
@@ -0,0 +1,4 @@
+import { AppErrorBoundary, Break } from "./ErrorBoundary";
+
+export { AppErrorBoundary, Break };
+export default AppErrorBoundary;
diff --git a/src/components/navigation/GlobalAppBar/index.js b/src/components/navigation/GlobalAppBar/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..3667500f2ed465e56c4221b7e8cb07ec7a62a860
--- /dev/null
+++ b/src/components/navigation/GlobalAppBar/index.js
@@ -0,0 +1,24 @@
+import {
+  GlobalAppBar,
+  useGlobalAppBar,
+  LoginControls,
+  ButtonAppBar,
+  GlobalAppBarContext,
+  UserInfo,
+  ProfileMenu,
+  NotificationMenu,
+  DRAWER_OPEN
+} from "./GlobalAppBar";
+
+export {
+  GlobalAppBar,
+  useGlobalAppBar,
+  LoginControls,
+  ButtonAppBar,
+  GlobalAppBarContext,
+  UserInfo,
+  ProfileMenu,
+  NotificationMenu,
+  DRAWER_OPEN
+};
+export default GlobalAppBar;
diff --git a/src/components/navigation/LoginSuggester/index.js b/src/components/navigation/LoginSuggester/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e246698adb0372feff0e1caf5be039d06b1c5f2
--- /dev/null
+++ b/src/components/navigation/LoginSuggester/index.js
@@ -0,0 +1,4 @@
+import { LoginSuggester, LoginSuggesterMechanics } from "./LoginSuggester";
+
+export { LoginSuggester, LoginSuggesterMechanics };
+export default LoginSuggester;
diff --git a/src/components/navigation/Menu/index.js b/src/components/navigation/Menu/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..371073860b6bb3b5137c4b6cb5944c1f7e83a29f
--- /dev/null
+++ b/src/components/navigation/Menu/index.js
@@ -0,0 +1,4 @@
+import { MenuDrawer } from "./MenuDrawer";
+
+export { MenuDrawer };
+export default MenuDrawer;
diff --git a/src/components/records/index.js b/src/components/records/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e632404aecd3503940fc7b0ae8283b544da1c4b1
--- /dev/null
+++ b/src/components/records/index.js
@@ -0,0 +1,18 @@
+import {
+  RecordTable,
+  createRecordsRow,
+  createIocDetailsRow
+} from "./RecordTable";
+import { RecordBadge } from "./RecordBadge";
+import { RecordStatusIcon } from "./RecordIcons";
+import { RecordSearch } from "./RecordSearch";
+
+export {
+  RecordTable,
+  createRecordsRow,
+  createIocDetailsRow,
+  RecordBadge,
+  RecordStatusIcon,
+  RecordSearch
+};
+export default RecordTable;
diff --git a/src/views/IOC/index.js b/src/views/IOC/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1940f0fa003d57d93f983de03c81bbbad5326d69
--- /dev/null
+++ b/src/views/IOC/index.js
@@ -0,0 +1,11 @@
+import { IOCDetailsAccessControl } from "./IOCDetailsAccessControl";
+import { IOCDetailsContainer } from "./IOCDetailsContainer";
+import { IOCDetailsView } from "./IOCDetailsView";
+import { IOCListView } from "./IOCListView";
+
+export {
+  IOCDetailsAccessControl,
+  IOCDetailsContainer,
+  IOCDetailsView,
+  IOCListView
+};
diff --git a/src/views/about/index.js b/src/views/about/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9a9df077b4368f7f7d683cbd16f8a674fb3149e2
--- /dev/null
+++ b/src/views/about/index.js
@@ -0,0 +1,4 @@
+import { AboutView } from "./AboutView";
+
+export { AboutView };
+export default AboutView;
diff --git a/src/views/deployments/DeploymentsAccessControl.js b/src/views/deployments/DeploymentsAccessControl.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/views/deployments/DeploymentsView.js b/src/views/deployments/DeploymentsView.js
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/src/views/deployments/index.js b/src/views/deployments/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c9301fe5368a6d73817a6c467e98c8e85e016810
--- /dev/null
+++ b/src/views/deployments/index.js
@@ -0,0 +1,9 @@
+import { DeploymentDetailsAccessControl } from "./DeploymentDetailsAccessControl";
+import { DeploymentDetailsContainer } from "./DeploymentDetailsContainer";
+import { DeploymentDetailsView } from "./DeploymentDetailsView";
+
+export {
+  DeploymentDetailsAccessControl,
+  DeploymentDetailsContainer,
+  DeploymentDetailsView
+};
diff --git a/src/views/help/index.js b/src/views/help/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..878d466352e5bd064b600eb6029550040f0d45e0
--- /dev/null
+++ b/src/views/help/index.js
@@ -0,0 +1,4 @@
+import { HelpView } from "./HelpView";
+
+export { HelpView };
+export default HelpView;
diff --git a/src/views/home/index.js b/src/views/home/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..b924044419a565899659e3847802d359161dbd94
--- /dev/null
+++ b/src/views/home/index.js
@@ -0,0 +1,5 @@
+import { HomeView } from "./HomeView";
+import { HomeVisitorView } from "./HomeVisitorView";
+import { HomeAccessControl } from "./HomeAccessControl";
+
+export { HomeView, HomeVisitorView, HomeAccessControl };
diff --git a/src/views/host/index.js b/src/views/host/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..348a1b83d0225ef227e250936134ef502f1554c6
--- /dev/null
+++ b/src/views/host/index.js
@@ -0,0 +1,11 @@
+import { HostDetailsAccessControl } from "./HostDetailsAccessControl";
+import { HostDetailsContainer } from "./HostDetailsContainer";
+import { HostDetailsView } from "./HostDetailsView";
+import { HostListView } from "./HostListView";
+
+export {
+  HostDetailsAccessControl,
+  HostDetailsContainer,
+  HostDetailsView,
+  HostListView
+};
diff --git a/src/views/jobs/index.js b/src/views/jobs/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6431b08bc6e04770630d29b17de3d6f5a7cae14
--- /dev/null
+++ b/src/views/jobs/index.js
@@ -0,0 +1,13 @@
+import { JobDetailsAccessControl } from "./JobDetailsAccessControl";
+import { JobDetailsContainer } from "./JobDetailsContainer";
+import { JobDetailsView } from "./JobDetailsView";
+import { JobListView } from "./JobListView";
+import { JobLogAccessControl } from "./JobLogAccessControl";
+
+export {
+  JobDetailsAccessControl,
+  JobDetailsContainer,
+  JobDetailsView,
+  JobListView,
+  JobLogAccessControl
+};
diff --git a/src/views/login/index.js b/src/views/login/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc34e52072586def151df10a4d81d945b67298f7
--- /dev/null
+++ b/src/views/login/index.js
@@ -0,0 +1,4 @@
+import { LoginView } from "./LoginView";
+
+export { LoginView };
+export default LoginView;
diff --git a/src/views/records/index.js b/src/views/records/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a7e8b95792e9be8ff33587765e33ef6ab5e144e
--- /dev/null
+++ b/src/views/records/index.js
@@ -0,0 +1,5 @@
+import { RecordListView } from "./RecordListView";
+import { RecordDetailsView } from "./RecordDetailsView";
+
+export { RecordListView, RecordDetailsView };
+export default RecordListView;
diff --git a/src/views/statistics/index.js b/src/views/statistics/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ed5d2d96c3114382b0084cdf08855a121fb7199
--- /dev/null
+++ b/src/views/statistics/index.js
@@ -0,0 +1,4 @@
+import { StatisticsView } from "./StatisticsView";
+
+export { StatisticsView };
+export default StatisticsView;