From 4608c9b2b0b6865398c94f9b420803d6f735203b Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sun, 28 Mar 2021 14:25:24 -0400 Subject: [PATCH 01/37] Add a tag to allow ignoring the CORS test --- tests/spec/requests/cors_spec.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/spec/requests/cors_spec.rb b/tests/spec/requests/cors_spec.rb index d798a54b0..a4c051af3 100644 --- a/tests/spec/requests/cors_spec.rb +++ b/tests/spec/requests/cors_spec.rb @@ -1,7 +1,9 @@ + + require 'net/http' require 'spec_helper' -RSpec.feature "Cross-origin requests", type: :request do +RSpec.feature "Cross-origin requests", :cors, type: :request do let(:evaluate_json_uri) { URI.join(Capybara.app_host, '/evaluate.json') } it "allows preflight requests for POSTing to evaluate.json" do From 9bd7e0465163115d647ea705f9c4a820942e0b8d Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 13:35:02 -0400 Subject: [PATCH 02/37] Remove dead CSS --- ui/frontend/index.scss | 80 ------------------------------------------ 1 file changed, 80 deletions(-) diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index e06a60f24..96e9fcc99 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -2,8 +2,6 @@ $background: #E1E1DB; $rust: #AA4422; -$selected-radio: desaturate(lighten($rust, 30%), 20%); -$unselected-radio: lighten($selected-radio, 20%); $border-color: #BBBBBB; $border: 1px solid $border-color; @@ -137,31 +135,6 @@ body { } } -.configuration { - position: relative; - width: 100%; - height: 100%; - - &-item { - display: flex; - margin-bottom: 0.5em; - } - - &-label { - flex: 1 1 100%; - } - - &-value { - flex: 1 1 100%; - } - - &-actions { - right: 0; - bottom: 0; - position: absolute; - } -} - @mixin body-monospace { font-size: 0.9em; // http://code.stephenmorley.org/html-and-css/fixing-browsers-broken-monospace-font-handling/ @@ -307,52 +280,6 @@ body { } } -.drop { - &__toggle { - font-size: 50%; - height: 100%; - } - - &__menu { - display: none; - - position: absolute; - top: 90%; - left: 0; - z-index: 10; - - margin: 0; - padding: 0; - - border: $border; - box-shadow: 0.5px 0.5px 10px 1px rgba(0, 0, 0, 0.2); - - &--open { - display: inherit; - } - } - - &__menu-item { - list-style: none; - white-space: nowrap; - border-bottom: $border; - &:last-child { - border-bottom: none; - } - } - - &__button { - width: 100%; - background: white; - border: none; - cursor: pointer; - text-align: left; - &:hover { - background-color: darken(white, 10%); - } - } -} - @keyframes loader-fade { 0% { opacity: 0; @@ -725,13 +652,6 @@ $header-transition: 0.2s ease-in-out; } } -.advanced-options-menu { - &__aside { - margin: 0.25em 0 1em 0; - color: #888; - } -} - .tools-menu { &__aside { margin: 0.25em 0 0 0; From 4c17dcfca107262d6f13e11458b415164bc0e823 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 21:29:34 -0400 Subject: [PATCH 03/37] Enable webpack persistent caching --- ui/frontend/webpack.config.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/ui/frontend/webpack.config.js b/ui/frontend/webpack.config.js index c7e9a0199..02a2887b2 100644 --- a/ui/frontend/webpack.config.js +++ b/ui/frontend/webpack.config.js @@ -47,6 +47,14 @@ module.exports = function(_, argv) { devtool, + cache: { + type: 'filesystem', + + buildDependencies: { + config: [__filename], + }, + }, + output: { publicPath: 'assets/', path: `${__dirname}/build/assets`, From 44d4ba8e7a949eea3d80a3872b8f6dc809eb9e23 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 10:52:42 -0400 Subject: [PATCH 04/37] Use Webpack 5 asset modules for SVGs --- ui/frontend/declarations.d.ts | 2 +- ui/frontend/package.json | 1 - ui/frontend/webpack.config.js | 7 +------ ui/frontend/yarn.lock | 18 +----------------- 4 files changed, 3 insertions(+), 25 deletions(-) diff --git a/ui/frontend/declarations.d.ts b/ui/frontend/declarations.d.ts index c44743d7c..3c474e95d 100644 --- a/ui/frontend/declarations.d.ts +++ b/ui/frontend/declarations.d.ts @@ -1,5 +1,5 @@ declare module '*.svg' { - const content: any; + const content: string; export default content; } diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 899a2b4f2..3f237ba70 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -62,7 +62,6 @@ "postcss-loader": "^5.0.0", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", - "svg-url-loader": "^7.1.1", "ts-jest": "^26.0.0", "ts-loader": "^8.0.0", "typescript": "^4.2.2", diff --git a/ui/frontend/webpack.config.js b/ui/frontend/webpack.config.js index 02a2887b2..767da8097 100644 --- a/ui/frontend/webpack.config.js +++ b/ui/frontend/webpack.config.js @@ -89,12 +89,7 @@ module.exports = function(_, argv) { }, { test: /\.svg$/, - use: { - loader: 'svg-url-loader', - options: { - noquotes: true, - }, - }, + type: 'asset/inline', }, ], }, diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index abe947590..8da9e30dd 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -3140,14 +3140,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -file-loader@~6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" - integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== - dependencies: - loader-utils "^2.0.0" - schema-utils "^3.0.0" - fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -4595,7 +4587,7 @@ loader-utils@^1.4.0: emojis-list "^3.0.0" json5 "^1.0.1" -loader-utils@^2.0.0, loader-utils@~2.0.0: +loader-utils@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== @@ -6490,14 +6482,6 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -svg-url-loader@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/svg-url-loader/-/svg-url-loader-7.1.1.tgz#0cbdb30beb8679cb060c12eaf30085747fa7591f" - integrity sha512-NlsMCePODm7FQhU9aEZyGLPx5Xe1QRI1cSEUE6vTq5LJc9l9pStagvXoEIyZ9O3r00w6G3+Wbkimb+SC3DI/Aw== - dependencies: - file-loader "~6.2.0" - loader-utils "~2.0.0" - symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" From 946471c99b95317fb1b5367d12dbac655ee2ff79 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Tue, 23 Mar 2021 20:35:41 -0400 Subject: [PATCH 05/37] Install and configure CSS modules --- ui/frontend/declarations.d.ts | 5 + ui/frontend/package.json | 1 + ui/frontend/tsconfig.json | 3 +- ui/frontend/webpack.config.js | 19 ++ ui/frontend/yarn.lock | 426 ++++++++++++++++++++++++++++++++-- 5 files changed, 437 insertions(+), 17 deletions(-) diff --git a/ui/frontend/declarations.d.ts b/ui/frontend/declarations.d.ts index 3c474e95d..cf66d4cce 100644 --- a/ui/frontend/declarations.d.ts +++ b/ui/frontend/declarations.d.ts @@ -1,3 +1,8 @@ +declare module '*.module.css' { + const classes: { [key: string]: string }; + export default classes; +} + declare module '*.svg' { const content: string; export default content; diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 3f237ba70..3befbf385 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -65,6 +65,7 @@ "ts-jest": "^26.0.0", "ts-loader": "^8.0.0", "typescript": "^4.2.2", + "typescript-plugin-css-modules": "^3.2.0", "webpack": "^5.24.3", "webpack-cli": "^4.5.0" }, diff --git a/ui/frontend/tsconfig.json b/ui/frontend/tsconfig.json index b31f5a3ca..4e636aa3e 100644 --- a/ui/frontend/tsconfig.json +++ b/ui/frontend/tsconfig.json @@ -9,6 +9,7 @@ "target": "ES2017", "module": "esnext", "sourceMap": true, - "jsx": "preserve" + "jsx": "preserve", + "plugins": [{ "name": "typescript-plugin-css-modules" }], } } diff --git a/ui/frontend/webpack.config.js b/ui/frontend/webpack.config.js index 767da8097..b0c162695 100644 --- a/ui/frontend/webpack.config.js +++ b/ui/frontend/webpack.config.js @@ -40,6 +40,10 @@ module.exports = function(_, argv) { false : 'inline-source-map'; + const localIdentName = isProduction ? + "[hash:base64]" : + "[path][name]__[local]--[hash:base64]"; + return { entry: { app: ['./index.tsx', './index.scss'], @@ -87,6 +91,21 @@ module.exports = function(_, argv) { "sass-loader", ], }, + { + test: /\.module.css$/, + use: [ + MiniCssExtractPlugin.loader, + { + loader: "css-loader", + options: { + modules: { + localIdentName, + }, + }, + }, + "postcss-loader", + ], + }, { test: /\.svg$/, type: 'asset/inline', diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index 8da9e30dd..8c2f732fe 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -1262,6 +1262,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA== +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/lodash@^4.14.118": version "4.14.168" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" @@ -1684,7 +1689,7 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -anymatch@^3.0.3: +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== @@ -1965,11 +1970,21 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1999,7 +2014,7 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -braces@^3.0.1: +braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== @@ -2064,6 +2079,25 @@ call-bind@^1.0.0, call-bind@^1.0.2: function-bind "^1.1.1" get-intrinsic "^1.0.2" +caller-callsite@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" + integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= + dependencies: + callsites "^2.0.0" + +caller-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" + integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= + dependencies: + caller-callsite "^2.0.0" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2128,7 +2162,7 @@ chalk@^1.1.1: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2150,6 +2184,21 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +"chokidar@>=2.0.0 <4.0.0": + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chownr@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" @@ -2339,6 +2388,13 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +copy-anything@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87" + integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ== + dependencies: + is-what "^3.12.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2383,6 +2439,16 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cosmiconfig@^5.0.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" + integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== + dependencies: + import-fresh "^2.0.0" + is-directory "^0.3.1" + js-yaml "^3.13.1" + parse-json "^4.0.0" + cosmiconfig@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" @@ -2432,6 +2498,13 @@ css-loader@^5.1.1: schema-utils "^3.0.0" semver "^7.3.4" +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + css-select@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" @@ -2442,11 +2515,29 @@ css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-selector-tokenizer@^0.7.0: + version "0.7.3" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" + integrity sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -2511,6 +2602,13 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2666,6 +2764,11 @@ dot-case@^3.0.4: no-case "^3.0.4" tslib "^2.0.3" +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + ecc-jsbn@~0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" @@ -2694,6 +2797,11 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + emojis-list@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" @@ -2750,7 +2858,7 @@ envinfo@^7.7.3: resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320" integrity sha512-TQXTYFVVwwluWSFis6K2XKxgrD22jEv0FTuLCQI+OjH7rn93+iY0fSSFM5lrSxFY+H1+B0/cvvlamr3UsBivdQ== -errno@^0.1.3: +errno@^0.1.1, errno@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== @@ -3119,6 +3227,11 @@ fastest-levenshtein@^1.0.12: resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -3245,7 +3358,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.1.2: +fsevents@^2.1.2, fsevents@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -3281,6 +3394,13 @@ gaze@^1.0.0: dependencies: globule "^1.0.0" +generic-names@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/generic-names/-/generic-names-1.0.3.tgz#2d786a121aee508876796939e8e3bff836c20917" + integrity sha1-LXhqEhruUIh2eWk56OO/+DbCCRc= + dependencies: + loader-utils "^0.2.16" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3348,12 +3468,19 @@ glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@^5.1.1: dependencies: is-glob "^4.0.1" +glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-to-regexp@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -3602,6 +3729,20 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +icss-utils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-3.0.1.tgz#ee70d3ae8cac38c6be5ed91e851b27eed343ad0f" + integrity sha1-7nDTroysOMa+XtkehRsn7tNDrQ8= + dependencies: + postcss "^6.0.2" + +icss-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" + integrity sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA== + dependencies: + postcss "^7.0.14" + icss-utils@^5.0.0, icss-utils@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" @@ -3617,6 +3758,26 @@ ignore@^5.1.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +import-cwd@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" + integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= + dependencies: + import-from "^2.1.0" + +import-fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" + integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= + dependencies: + caller-path "^2.0.0" + resolve-from "^3.0.0" + import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -3625,6 +3786,13 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" +import-from@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" + integrity sha1-M1238qev/VOqpHHUuAId7ja387E= + dependencies: + resolve-from "^3.0.0" + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -3706,6 +3874,13 @@ is-bigint@^1.0.1: resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-boolean-object@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" @@ -3774,6 +3949,11 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= + is-docker@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" @@ -3823,7 +4003,7 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== -is-glob@^4.0.0, is-glob@^4.0.1: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -3904,6 +4084,11 @@ is-utf8@^0.2.0: resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= +is-what@^3.12.0: + version "3.14.1" + resolved "https://registry.yarnpkg.com/is-what/-/is-what-3.14.1.tgz#e1222f46ddda85dead0fd1c9df131760e77755c1" + integrity sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA== + is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -4435,7 +4620,7 @@ json-loader@^0.5.4: resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== -json-parse-better-errors@^1.0.2: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== @@ -4477,6 +4662,11 @@ json5@2.x, json5@^2.1.2: dependencies: minimist "^1.2.5" +json5@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + json5@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" @@ -4536,6 +4726,22 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +less@^3.11.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" + integrity sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw== + dependencies: + copy-anything "^2.0.1" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + make-dir "^2.1.0" + mime "^1.4.1" + native-request "^1.0.5" + source-map "~0.6.0" + leven@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" @@ -4578,6 +4784,16 @@ loader-runner@^4.2.0: resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.2.0.tgz#d7022380d66d14c5fb1d496b89864ebcfd478384" integrity sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw== +loader-utils@^0.2.16: + version "0.2.17" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + loader-utils@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" @@ -4611,6 +4827,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" @@ -4621,7 +4842,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@~4.17.10: +lodash@4.x, lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4655,6 +4876,14 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" @@ -4764,6 +4993,11 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19: dependencies: mime-db "1.46.0" +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -4813,7 +5047,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@1.x, mkdirp@^1.0.3: +mkdirp@1.x, mkdirp@^1.0.3, mkdirp@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== @@ -4862,6 +5096,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +native-request@^1.0.5: + version "1.0.8" + resolved "https://registry.yarnpkg.com/native-request/-/native-request-1.0.8.tgz#8f66bf606e0f7ea27c0e5995eb2f5d03e33ae6fb" + integrity sha512-vU2JojJVelUGp6jRcLwToPoWGxSx23z/0iX+I77J3Ht17rf2INGjrhOoQnjVo60nQd8wVsgzKkPfRXBiVdD2ag== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4979,7 +5218,7 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -5221,6 +5460,14 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-json@^5.0.0: version "5.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" @@ -5315,6 +5562,11 @@ pify@^2.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -5346,6 +5598,41 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= +postcss-filter-plugins@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-3.0.1.tgz#9d226e946d56542ab7c26123053459a331df545d" + integrity sha512-tRKbW4wWBEkSSFuJtamV2wkiV9rj6Yy7P3Y13+zaynlPEEZt8EgYKn3y/RBpMeIhNmHXFlSdzofml65hD5OafA== + dependencies: + postcss "^6.0.14" + +postcss-icss-keyframes@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/postcss-icss-keyframes/-/postcss-icss-keyframes-0.2.1.tgz#80c4455e0112b0f2f9c3c05ac7515062bb9ff295" + integrity sha1-gMRFXgESsPL5w8Bax1FQYruf8pU= + dependencies: + icss-utils "^3.0.1" + postcss "^6.0.2" + postcss-value-parser "^3.3.0" + +postcss-icss-selectors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-icss-selectors/-/postcss-icss-selectors-2.0.3.tgz#27fa1afcaab6c602c866cbb298f3218e9bc1c9b3" + integrity sha1-J/oa/Kq2xgLIZsuymPMhjpvBybM= + dependencies: + css-selector-tokenizer "^0.7.0" + generic-names "^1.0.2" + icss-utils "^3.0.1" + lodash "^4.17.4" + postcss "^6.0.2" + +postcss-load-config@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" + integrity sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw== + dependencies: + cosmiconfig "^5.0.0" + import-cwd "^2.0.0" + postcss-loader@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-5.0.0.tgz#bea95363dcb550d72ceb612ce44663356b7782d7" @@ -5393,11 +5680,34 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-value-parser@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== +postcss@^6.0.14, postcss@^6.0.2: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +postcss@^7.0.14, postcss@^7.0.27: + version "7.0.35" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" + integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + postcss@^8.2.6, postcss@^8.2.7: version "8.2.7" resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.2.7.tgz#48ed8d88b4de10afa0dfd1c3f840aa57b55c4d47" @@ -5653,6 +5963,13 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + rechoir@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.7.0.tgz#32650fd52c21ab252aa5d65b19310441c7e03aca" @@ -5855,6 +6172,11 @@ reselect@^4.0.0: resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== +reserved-words@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" + integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -5862,6 +6184,11 @@ resolve-cwd@^3.0.0: dependencies: resolve-from "^5.0.0" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha1-six699nWiBvItuZTM17rywoYh0g= + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" @@ -5941,7 +6268,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5979,6 +6306,18 @@ sass-loader@^11.0.1: klona "^2.0.4" neo-async "^2.6.2" +sass@^1.26.5: + version "1.32.8" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.8.tgz#f16a9abd8dc530add8834e506878a2808c037bdc" + integrity sha512-Sl6mIeGpzjIUZqvKnKETfMf0iDAswD9TNlv13A7aAF3XZlRPMq4VvJWBC2N2DXbp94MQVdNSFG6LfF/iOXrPHQ== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + saxes@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" @@ -6025,7 +6364,7 @@ select@^1.1.2: resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= -"semver@2 || 3 || 4 || 5", semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6173,7 +6512,7 @@ source-list-map@^2.0.0, source-list-map@^2.0.1: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-resolve@^0.5.0: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== @@ -6420,6 +6759,11 @@ strip-bom@^2.0.0: dependencies: is-utf8 "^0.2.0" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + strip-bom@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" @@ -6455,18 +6799,39 @@ style-loader@^2.0.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +stylus@^0.54.7: + version "0.54.8" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" + integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== + dependencies: + css-parse "~2.0.0" + debug "~3.1.0" + glob "^7.1.6" + mkdirp "~1.0.4" + safer-buffer "^2.1.2" + sax "~1.2.4" + semver "^6.3.0" + source-map "^0.7.3" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -6707,7 +7072,17 @@ ts-loader@^8.0.0: micromatch "^4.0.0" semver "^7.3.4" -tslib@^1.8.1, tslib@^1.9.0: +tsconfig-paths@^3.9.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz#098547a6c4448807e8fcb8eae081064ee9a3c90b" + integrity sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== @@ -6777,6 +7152,25 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typescript-plugin-css-modules@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/typescript-plugin-css-modules/-/typescript-plugin-css-modules-3.2.0.tgz#44241064395d565f242689b96eb50bf413e68ddf" + integrity sha512-oMe5IDKuPvLBOeaYupAqqq8UMTu7Jo5e0InqkQSSKXuZCcRm0+LQfUVMyM62IFpgzxHLuN32a7YdBxAaSXZrRQ== + dependencies: + dotenv "^8.2.0" + icss-utils "^4.1.1" + less "^3.11.1" + lodash.camelcase "^4.3.0" + postcss "^7.0.27" + postcss-filter-plugins "^3.0.1" + postcss-icss-keyframes "^0.2.1" + postcss-icss-selectors "^2.0.3" + postcss-load-config "^2.1.0" + reserved-words "^0.1.2" + sass "^1.26.5" + stylus "^0.54.7" + tsconfig-paths "^3.9.0" + typescript@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c" From 5cc46c1fc4c6f503b178d00ad1fee93a9b376e6b Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 13:15:34 -0400 Subject: [PATCH 06/37] Use Prettier for CSS files --- ci/workflows.yml | 4 ++++ ui/frontend/.prettierignore | 10 ++++++++++ ui/frontend/.prettierrc.json | 3 +++ ui/frontend/package.json | 4 ++++ ui/frontend/yarn.lock | 5 +++++ 5 files changed, 26 insertions(+) create mode 100644 ui/frontend/.prettierignore create mode 100644 ui/frontend/.prettierrc.json diff --git a/ci/workflows.yml b/ci/workflows.yml index 999cf9d9d..1bdbe6eef 100644 --- a/ci/workflows.yml +++ b/ci/workflows.yml @@ -336,6 +336,10 @@ workflows: run: >- yarn --cwd ui/frontend/ test:lint + - name: "Style" + run: >- + yarn --cwd ui/frontend/ test:style + - name: "Build frontend" run: >- yarn --cwd ui/frontend/ run build:production diff --git a/ui/frontend/.prettierignore b/ui/frontend/.prettierignore new file mode 100644 index 000000000..99dda5005 --- /dev/null +++ b/ui/frontend/.prettierignore @@ -0,0 +1,10 @@ +build +node_modules + +# Not for these ready yet +.babelrc +*.js +*.json +*.ts +*.tsx +*.scss diff --git a/ui/frontend/.prettierrc.json b/ui/frontend/.prettierrc.json new file mode 100644 index 000000000..544138be4 --- /dev/null +++ b/ui/frontend/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 3befbf385..711a30217 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -60,6 +60,7 @@ "normalize.css": "^8.0.0", "postcss": "^8.2.7", "postcss-loader": "^5.0.0", + "prettier": "2.2.1", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", "ts-jest": "^26.0.0", @@ -75,6 +76,9 @@ "scripts": { "test": "jest", "test:lint": "eslint '**/*.tsx' '**/*.ts'", + "test:lint:fix": "eslint --fix '**/*.tsx' '**/*.ts'", + "test:style": "prettier --check .", + "test:style:fix": "prettier --write .", "build": "webpack --progress --color --mode development", "build:production": "webpack --progress --color --mode production", "watch": "yarn run build --watch" diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index 8c2f732fe..4f73fe908 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -5727,6 +5727,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prettier@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== + pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" From 9293047de36f5470672d849f9eeac1a4ad089f7a Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 19:17:23 -0400 Subject: [PATCH 07/37] Use stylelint for CSS files --- ui/frontend/.stylelintignore | 1 + ui/frontend/.stylelintrc.json | 14 + ui/frontend/package.json | 12 +- ui/frontend/yarn.lock | 797 +++++++++++++++++++++++++++++++++- 4 files changed, 805 insertions(+), 19 deletions(-) create mode 100644 ui/frontend/.stylelintignore create mode 100644 ui/frontend/.stylelintrc.json diff --git a/ui/frontend/.stylelintignore b/ui/frontend/.stylelintignore new file mode 100644 index 000000000..378eac25d --- /dev/null +++ b/ui/frontend/.stylelintignore @@ -0,0 +1 @@ +build diff --git a/ui/frontend/.stylelintrc.json b/ui/frontend/.stylelintrc.json new file mode 100644 index 000000000..f053dccd4 --- /dev/null +++ b/ui/frontend/.stylelintrc.json @@ -0,0 +1,14 @@ +{ + "extends": [ + "stylelint-config-standard", + "stylelint-config-css-modules", + "stylelint-config-idiomatic-order" + ], + "rules": { + "value-keyword-case": ["lower", { + "ignoreProperties": [ + "composes" + ] + }] + } +} diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 711a30217..8987046af 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -63,6 +63,10 @@ "prettier": "2.2.1", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", + "stylelint": "^13.12.0", + "stylelint-config-css-modules": "^2.2.0", + "stylelint-config-idiomatic-order": "^8.1.0", + "stylelint-config-standard": "^21.0.0", "ts-jest": "^26.0.0", "ts-loader": "^8.0.0", "typescript": "^4.2.2", @@ -77,8 +81,12 @@ "test": "jest", "test:lint": "eslint '**/*.tsx' '**/*.ts'", "test:lint:fix": "eslint --fix '**/*.tsx' '**/*.ts'", - "test:style": "prettier --check .", - "test:style:fix": "prettier --write .", + "test:style": "yarn run test:style:prettier && yarn run test:style:stylelint", + "test:style:fix": "yarn run test:style:prettier:fix && yarn run test:style:stylelint:fix", + "test:style:prettier": "prettier --check .", + "test:style:prettier:fix": "prettier --write .", + "test:style:stylelint": "stylelint '**/*.css'", + "test:style:stylelint:fix": "stylelint --fix '**/*.css'", "build": "webpack --progress --color --mode development", "build:production": "webpack --progress --color --mode production", "watch": "yarn run build --watch" diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index 4f73fe908..f53ff1a23 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -21,6 +21,33 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.8.tgz#5b783b9808f15cef71547f1b691f34f8ff6003a6" integrity sha512-EaI33z19T4qN3xLXsGf48M2cDqa6ei9tPZlfLdb2HC+e/cFtREiRd8hdSqDbwdLB0/+gLwqJmCYASH0z2bUdog== +"@babel/compat-data@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.13.12.tgz#a8a5ccac19c200f9dd49624cac6e19d7be1236a1" + integrity sha512-3eJJ841uKxeV8dcN/2yGEUy+RfgQspPEgQat85umsE1rotuquQ2AbIub4S6j7c50a2d+4myc+zSlnXeIHrOnhQ== + +"@babel/core@>=7.9.0": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.13.tgz#bc44c4a2be2288ec4ddf56b66fc718019c76ac29" + integrity sha512-1xEs9jZAyKIouOoCmpsgk/I26PoKyvzQ2ixdRpRzfbcp1fL+ozw7TUgdDgwonbTovqRaTfRh50IXuw4QrWO0GA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-compilation-targets" "^7.13.13" + "@babel/helper-module-transforms" "^7.13.12" + "@babel/helpers" "^7.13.10" + "@babel/parser" "^7.13.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.13" + "@babel/types" "^7.13.13" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + lodash "^4.17.19" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/core@^7.0.0", "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.13.8.tgz#c191d9c5871788a591d69ea1dc03e5843a3680fb" @@ -43,7 +70,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.13.0": +"@babel/generator@^7.13.0", "@babel/generator@^7.13.9": version "7.13.9" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.13.9.tgz#3a7aa96f9efb8e2be42d38d80e2ceb4c64d8de39" integrity sha512-mHOOmY0Axl/JCTkxTU6Lf5sWOg/v8nUa+Xkt4zMTftX0wqmb6Sh7J8gvcehBw7q0AhrhAR+FDacKjCZ2X8K+Sw== @@ -77,6 +104,16 @@ browserslist "^4.14.5" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.13.13.tgz#2b2972a0926474853f41e4adbc69338f520600e5" + integrity sha512-q1kcdHNZehBwD9jYPh3WyXcsFERi39X4I59I3NadciWtNDyZ6x+GboOxncFK0kXlKIv6BJm5acncehXWUjWQMQ== + dependencies: + "@babel/compat-data" "^7.13.12" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.14.5" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.13.0": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.13.8.tgz#0367bd0a7505156ce018ca464f7ac91ba58c1a04" @@ -148,6 +185,13 @@ dependencies: "@babel/types" "^7.13.0" +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + "@babel/helper-module-imports@^7.0.0-beta.49", "@babel/helper-module-imports@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.13.tgz#ec67e4404f41750463e455cc3203f6a32e93fcb0" @@ -155,6 +199,13 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + "@babel/helper-module-transforms@^7.13.0": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.0.tgz#42eb4bd8eea68bab46751212c357bfed8b40f6f1" @@ -170,6 +221,20 @@ "@babel/types" "^7.13.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.13.12.tgz#600e58350490828d82282631a1422268e982ba96" + integrity sha512-7zVQqMO3V+K4JOOj40kxiCrMf6xlQAkewBB0eu2b03OO/Q21ZutOzjpfD79A5gtE/2OWi1nv625MrDlGlkbknQ== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.12.11" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -201,6 +266,16 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" +"@babel/helper-replace-supers@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.13.12.tgz#6442f4c1ad912502481a564a7386de0c77ff3804" + integrity sha512-Gz1eiX+4yDO8mT+heB94aLVNCL+rbuT2xy4YfyNqu8F+OI6vMvJK891qGBTqL9Uc8wxEvRW92Id6G7sDen3fFw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.12" + "@babel/helper-simple-access@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.13.tgz#8478bcc5cacf6aa1672b251c1d2dde5ccd61a6c4" @@ -208,6 +283,13 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -251,6 +333,15 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" +"@babel/helpers@^7.13.10": + version "7.13.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.13.10.tgz#fd8e2ba7488533cdeac45cc158e9ebca5e3c7df8" + integrity sha512-4VO883+MWPDUVRF3PhiLBUFHoX/bsLTGFpFK/HqvvfBZz2D57u9XzPVNFVBTc0PW/CWR9BXTOKt8NF4DInUHcQ== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.8.tgz#10b2dac78526424dfc1f47650d0e415dfd9dc481" @@ -265,6 +356,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.9.tgz#ca34cb95e1c2dd126863a84465ae8ef66114be99" integrity sha512-nEUfRiARCcaVo3ny3ZQjURjHQZUo/JkEw7rLlSZy/psWGnvwXFtPcr6jb7Yb41DVW5LTe6KRq9LGleRNsg1Frw== +"@babel/parser@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.13.13.tgz#42f03862f4aed50461e543270916b47dd501f0df" + integrity sha512-OhsyMrqygfk5v8HmWwOzlYjJrtLaFhF34MrfG/Z73DgYCI6ojNUTUp2TYbtnjo8PegeJp12eamsNettCQjKjVw== + "@babel/plugin-proposal-async-generator-functions@^7.13.8": version "7.13.8" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.13.8.tgz#87aacb574b3bc4b5603f6fe41458d72a5a2ec4b1" @@ -887,6 +983,20 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.13.13.tgz#39aa9c21aab69f74d948a486dd28a2dbdbf5114d" + integrity sha512-CblEcwmXKR6eP43oQGG++0QMTtCjAsa3frUuzHoiIJWpaIIi8dwMyEFUJoXRLxagGqCK+jALRwIO+o3R9p/uUg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.13.9" + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.13.13" + "@babel/types" "^7.13.13" + debug "^4.1.0" + globals "^11.1.0" + "@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.12.17", "@babel/types@^7.13.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": version "7.13.0" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.0.tgz#74424d2816f0171b4100f0ab34e9a374efdf7f80" @@ -896,6 +1006,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.13.12", "@babel/types@^7.13.13": + version "7.13.13" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.13.13.tgz#dcd8b815b38f537a3697ce84c8e3cc62197df96f" + integrity sha512-kt+EpC6qDfIaqlP+DIbIJOclYy/A1YXs9dAf/ljbi+39Bcbc073H6jKVpXEr/EoIh5anGn5xq/yRVzKl+uIc9w== + dependencies: + "@babel/helper-validator-identifier" "^7.12.11" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -1156,6 +1275,21 @@ dependencies: "@sinonjs/commons" "^1.7.0" +"@stylelint/postcss-css-in-js@^0.37.2": + version "0.37.2" + resolved "https://registry.yarnpkg.com/@stylelint/postcss-css-in-js/-/postcss-css-in-js-0.37.2.tgz#7e5a84ad181f4234a2480803422a47b8749af3d2" + integrity sha512-nEhsFoJurt8oUmieT8qy4nk81WRHmJynmVwn/Vts08PL9fhgIsMhk1GId5yAN643OzqEEb5S/6At2TZW7pqPDA== + dependencies: + "@babel/core" ">=7.9.0" + +"@stylelint/postcss-markdown@^0.36.2": + version "0.36.2" + resolved "https://registry.yarnpkg.com/@stylelint/postcss-markdown/-/postcss-markdown-0.36.2.tgz#0a540c4692f8dcdfc13c8e352c17e7bfee2bb391" + integrity sha512-2kGbqUVJUGE8dM+bMzXG/PYUWKkjLIkRLWNh39OaADkiabDRdw8ATFCgbMz5xdIcvwspPAluSL7uY+ZiTWdWmQ== + dependencies: + remark "^13.0.0" + unist-util-find-all-after "^3.0.2" + "@types/babel__core@^7.0.0", "@types/babel__core@^7.1.7": version "7.1.12" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.12.tgz#4d8e9e51eb265552a7e4f1ff2219ab6133bdfb2d" @@ -1272,6 +1406,18 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== +"@types/mdast@^3.0.0": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" + integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== + dependencies: + "@types/unist" "*" + +"@types/minimist@^1.2.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.1.tgz#283f669ff76d7b8260df8ab7a4262cc83d988256" + integrity sha512-fZQQafSREFyuZcdWFAExYjBiCL7AUCdgsk80iO0q4yihYYdcIiH28CcuPTGFgLOCC8RlW49GSQxdHwZP+I7CNg== + "@types/node@*": version "14.14.31" resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" @@ -1327,6 +1473,11 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + "@types/yargs-parser@*": version "20.2.0" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.0.tgz#dd3e6699ba3237f0348cd085e4698780204842f9" @@ -1768,6 +1919,11 @@ array.prototype.flatmap@^1.2.3: es-abstract "^1.18.0-next.1" function-bind "^1.1.1" +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + asn1@~0.2.3: version "0.2.4" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" @@ -1817,6 +1973,19 @@ autoprefixer@^10.2.4: normalize-range "^0.1.2" postcss-value-parser "^4.1.0" +autoprefixer@^9.8.6: + version "9.8.6" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" + integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== + dependencies: + browserslist "^4.12.0" + caniuse-lite "^1.0.30001109" + colorette "^1.2.1" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1940,6 +2109,11 @@ babel-preset-jest@^26.6.2: babel-plugin-jest-hoist "^26.6.2" babel-preset-current-node-syntax "^1.0.0" +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -2026,7 +2200,7 @@ browser-process-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== -browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3: +browserslist@^4.12.0, browserslist@^4.14.5, browserslist@^4.16.1, browserslist@^4.16.3: version "4.16.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.3.tgz#340aa46940d7db878748567c5dea24a48ddf3717" integrity sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw== @@ -2119,6 +2293,15 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" @@ -2134,6 +2317,11 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== +caniuse-lite@^1.0.30001109: + version "1.0.30001204" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz#256c85709a348ec4d175e847a3b515c66e79f2aa" + integrity sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ== + caniuse-lite@^1.0.30001181: version "1.0.30001194" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001194.tgz#3d16ff3d734a5a7d9818402c28b1f636c5be5bed" @@ -2184,6 +2372,21 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + "chokidar@>=2.0.0 <4.0.0": version "3.5.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -2274,6 +2477,13 @@ clone-deep@^4.0.1: kind-of "^6.0.2" shallow-clone "^3.0.0" +clone-regexp@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-2.2.0.tgz#7d65e00885cd8796405c35a737e7a86b7429e36f" + integrity sha512-beMpP7BOtTipFuW8hrJvREQ2DrRu3BE7by0ZpibtfBA+qfHYvMGTc2Yb1JMYPKg/JUw0CHYvpg796aNTSW9z7Q== + dependencies: + is-regexp "^2.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -2595,7 +2805,7 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: +debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -2609,7 +2819,15 @@ debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.1.2, decamelize@^1.2.0: +decamelize-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -3121,6 +3339,13 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execall@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/execall/-/execall-2.0.0.tgz#16a06b5fe5099df7d00be5d9c06eecded1663b45" + integrity sha512-0FU2hZ5Hh6iQnarpRtQurM/aAvp3RIbfvgLHrcqJYzhXyV2KFruhuChf9NC6waAhiUR7FFtlugkI4p7f2Fqlow== + dependencies: + clone-regexp "^2.1.0" + exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -3166,7 +3391,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.2: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -3200,7 +3425,7 @@ fast-deep-equal@^3.1.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.1.1, fast-glob@^3.2.4: +fast-glob@^3.1.1, fast-glob@^3.2.4, fast-glob@^3.2.5: version "3.2.5" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== @@ -3430,6 +3655,11 @@ get-stdin@^4.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= +get-stdin@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-8.0.0.tgz#cbad6a73feb75f6eeb22ba9e01f89aa28aa97a53" + integrity sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg== + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3492,6 +3722,22 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, gl once "^1.3.0" path-is-absolute "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + globals@^11.1.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" @@ -3516,6 +3762,23 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" +globby@^11.0.2: + version "11.0.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb" + integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.1.1" + ignore "^5.1.4" + merge2 "^1.3.0" + slash "^3.0.0" + +globjoin@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= + globule@^1.0.0: version "1.3.2" resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.2.tgz#d8bdd9e9e4eef8f96e245999a5dee7eb5d8529c4" @@ -3525,6 +3788,13 @@ globule@^1.0.0: lodash "~4.17.10" minimatch "~3.0.2" +gonzales-pe@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" + integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== + dependencies: + minimist "^1.2.5" + good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -3555,6 +3825,11 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -3654,6 +3929,13 @@ hosted-git-info@^2.1.4: resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== +hosted-git-info@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.0.2.tgz#5e425507eede4fea846b7262f0838456c4209961" + integrity sha512-c9OGXbZ3guC/xOlCg1Ci/VgWlwsqDv1yMQL1CWqXDL0hDjXuNcq0zuR4xqPSuasI3kqFDhqSyTjREz5gzq0fXg== + dependencies: + lru-cache "^6.0.0" + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -3679,6 +3961,11 @@ html-minifier-terser@^5.0.1: relateurl "^0.2.7" terser "^4.6.3" +html-tags@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" + integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== + html-webpack-plugin@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.2.0.tgz#d675ad0027a89de6b3d9950e0b57656dcfd97fbf" @@ -3691,7 +3978,7 @@ html-webpack-plugin@^5.2.0: pretty-error "^2.1.1" tapable "^2.0.0" -htmlparser2@^3.10.1: +htmlparser2@^3.10.0, htmlparser2@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== @@ -3753,7 +4040,7 @@ ignore@^4.0.6: resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== -ignore@^5.1.4: +ignore@^5.1.4, ignore@^5.1.8: version "5.1.8" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== @@ -3793,6 +4080,11 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" +import-lazy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-4.0.0.tgz#e8eb627483a0a43da3c03f3e35548be5cb0cc153" + integrity sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw== + import-local@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" @@ -3813,6 +4105,11 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -3831,6 +4128,11 @@ inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -3864,6 +4166,19 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -3893,6 +4208,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + is-callable@^1.1.4, is-callable@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" @@ -3931,6 +4251,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -4010,6 +4335,11 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -4032,6 +4362,16 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -4052,6 +4392,11 @@ is-regex@^1.1.2: call-bind "^1.0.2" has-symbols "^1.0.1" +is-regexp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-2.1.0.tgz#cd734a56864e23b956bf4e7c66c396a4c0b22c2d" + integrity sha512-OZ4IlER3zmRIoB9AqNhEggVxqIH4ofDns5nRrPS6yQxXE1TPCUpFznBfRQmQa8uC+pXqjMnukiJBxCisIxiLGA== + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4079,6 +4424,11 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" @@ -4711,7 +5061,7 @@ kind-of@^5.0.0: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -kind-of@^6.0.0, kind-of@^6.0.2: +kind-of@^6.0.0, kind-of@^6.0.2, kind-of@^6.0.3: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4726,6 +5076,11 @@ klona@^2.0.4: resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== +known-css-properties@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.21.0.tgz#15fbd0bbb83447f3ce09d8af247ed47c68ede80d" + integrity sha512-sZLUnTqimCkvkgRS+kbPlYW5o8q5w1cu+uIisKpEWkj31I8mx8kNG162DwRav8Zirkva6N5uoFsm9kzK4mUXjw== + less@^3.11.1: version "3.13.1" resolved "https://registry.yarnpkg.com/less/-/less-3.13.1.tgz#0ebc91d2a0e9c0c6735b83d496b0ab0583077909" @@ -4842,11 +5197,24 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= -lodash@4.x, lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@~4.17.10: +lodash@4.x, lodash@^4.0.0, lodash@^4.17.0, lodash@^4.17.10, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21, lodash@^4.17.4, lodash@~4.17.10: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +longest-streak@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" + integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -4913,6 +5281,11 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-obj@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.2.0.tgz#0e8bc823e2aaca8a0942567d12ed14f389eec153" + integrity sha512-NAq0fCmZYGz9UFEQyndp7sisrow4GroyGeKluyKC/chuITZsPyOyC1UJZPJlVFImhXdROIP5xqouRLThT3BbpQ== + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -4920,6 +5293,39 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +mathml-tag-names@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" + integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== + +mdast-util-from-markdown@^0.8.0: + version "0.8.5" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" + integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ== + dependencies: + "@types/mdast" "^3.0.0" + mdast-util-to-string "^2.0.0" + micromark "~2.11.0" + parse-entities "^2.0.0" + unist-util-stringify-position "^2.0.0" + +mdast-util-to-markdown@^0.6.0: + version "0.6.5" + resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" + integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== + dependencies: + "@types/unist" "^2.0.0" + longest-streak "^2.0.0" + mdast-util-to-string "^2.0.0" + parse-entities "^2.0.0" + repeat-string "^1.0.0" + zwitch "^1.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + memory-fs@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" @@ -4944,6 +5350,24 @@ meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +meow@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-9.0.0.tgz#cd9510bc5cac9dee7d03c73ee1f9ad959f4ea364" + integrity sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize "^1.2.0" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -4954,6 +5378,14 @@ merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +micromark@~2.11.0: + version "2.11.4" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" + integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== + dependencies: + debug "^4.0.0" + parse-entities "^2.0.0" + micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5003,6 +5435,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + mini-css-extract-plugin@^1.3.9: version "1.3.9" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-1.3.9.tgz#47a32132b0fd97a119acd530e8421e8f6ab16d5e" @@ -5019,6 +5456,15 @@ minimatch@^3.0.4, minimatch@~3.0.2: dependencies: brace-expansion "^1.1.7" +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" @@ -5211,6 +5657,16 @@ normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package- semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-package-data@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.2.tgz#cae5c410ae2434f9a6c1baa65d5bc3b9366c8699" + integrity sha512-6CdZocmfGaKnIHPVFhJJZ3GuR8SsLKvDANFp47Jmy51aKIr8akjAWTSxtpI+MBgBFdSMRyo4hMpDlT6dTffgZg== + dependencies: + hosted-git-info "^4.0.1" + resolve "^1.20.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" @@ -5228,6 +5684,11 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= +normalize-selector@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= + normalize.css@^8.0.0: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" @@ -5264,6 +5725,11 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" @@ -5453,6 +5919,18 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" @@ -5605,6 +6083,13 @@ postcss-filter-plugins@^3.0.1: dependencies: postcss "^6.0.14" +postcss-html@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" + integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== + dependencies: + htmlparser2 "^3.10.0" + postcss-icss-keyframes@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/postcss-icss-keyframes/-/postcss-icss-keyframes-0.2.1.tgz#80c4455e0112b0f2f9c3c05ac7515062bb9ff295" @@ -5625,6 +6110,13 @@ postcss-icss-selectors@^2.0.3: lodash "^4.17.4" postcss "^6.0.2" +postcss-less@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" + integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== + dependencies: + postcss "^7.0.14" + postcss-load-config@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz#c5ea504f2c4aef33c7359a34de3573772ad7502a" @@ -5642,6 +6134,11 @@ postcss-loader@^5.0.0: klona "^2.0.4" semver "^7.3.4" +postcss-media-query-parser@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= + postcss-modules-extract-imports@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" @@ -5670,6 +6167,33 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-resolve-nested-selector@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= + +postcss-safe-parser@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" + integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== + dependencies: + postcss "^7.0.26" + +postcss-sass@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.4.4.tgz#91f0f3447b45ce373227a98b61f8d8f0785285a3" + integrity sha512-BYxnVYx4mQooOhr+zer0qWbSPYnarAy8ZT7hAQtbxtgVf8gy+LSLT/hHGe35h14/pZDTw1DsxdbrwxBN++H+fg== + dependencies: + gonzales-pe "^4.3.0" + postcss "^7.0.21" + +postcss-scss@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.1.1.tgz#ec3a75fa29a55e016b90bf3269026c53c1d2b383" + integrity sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA== + dependencies: + postcss "^7.0.6" + postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz#56075a1380a04604c38b063ea7767a129af5c2b3" @@ -5680,6 +6204,19 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-sorting@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-5.0.1.tgz#10d5d0059eea8334dacc820c0121864035bc3f11" + integrity sha512-Y9fUFkIhfrm6i0Ta3n+89j56EFqaNRdUKqXyRp6kvTcSXnmgEjaVowCXH+JBe9+YKWqd4nc28r2sgwnzJalccA== + dependencies: + lodash "^4.17.14" + postcss "^7.0.17" + +postcss-syntax@^0.36.2: + version "0.36.2" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" + integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== + postcss-value-parser@^3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" @@ -5699,7 +6236,7 @@ postcss@^6.0.14, postcss@^6.0.2: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.14, postcss@^7.0.27: +postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.21, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.35, postcss@^7.0.6: version "7.0.35" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.35.tgz#d2be00b998f7f211d8a276974079f2e92b970e24" integrity sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg== @@ -5832,6 +6369,11 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.2.tgz#abf64491e6ecf0f38a6502403d4cda04f372dfd3" integrity sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg== +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5990,6 +6532,14 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + redux-thunk@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622" @@ -6077,6 +6627,29 @@ relateurl@^0.2.7: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remark-parse@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640" + integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw== + dependencies: + mdast-util-from-markdown "^0.8.0" + +remark-stringify@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" + integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== + dependencies: + mdast-util-to-markdown "^0.6.0" + +remark@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425" + integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA== + dependencies: + remark-parse "^9.0.0" + remark-stringify "^9.0.0" + unified "^9.1.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -6098,7 +6671,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.0.0, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -6214,7 +6787,7 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.9.0: +resolve@^1.10.0, resolve@^1.14.2, resolve@^1.18.1, resolve@^1.20.0, resolve@^1.9.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -6589,6 +7162,11 @@ spdx-license-ids@^3.0.0: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz#e9c18a410e5ed7e12442a549fbd8afa767038d65" integrity sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ== +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" @@ -6677,7 +7255,7 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== @@ -6791,6 +7369,13 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -6804,6 +7389,98 @@ style-loader@^2.0.0: loader-utils "^2.0.0" schema-utils "^3.0.0" +style-search@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= + +stylelint-config-css-modules@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/stylelint-config-css-modules/-/stylelint-config-css-modules-2.2.0.tgz#8ed2a54b1bdf637219e37cdeea1950405fd022ff" + integrity sha512-+zjcDbot+zbuxy1UA31k4G2lUG+nHUwnLyii3uT2F09B8kT2YrT9LZYNfMtAWlDidrxr7sFd5HX9EqPHGU3WKA== + +stylelint-config-idiomatic-order@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-8.1.0.tgz#7ca7fa92eb79369948dd4977499466c844ace21d" + integrity sha512-iTPY6JjbkIdzy+21x3a1xi/tG33zKhLJb6lZl1xg6jZrXjgIYelnRZ5xVtbcEP9rElxZq/Zu1eGthfvI+ri+YQ== + dependencies: + stylelint-order "^3.1.1" + +stylelint-config-recommended@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-4.0.0.tgz#665a0034065e6704d5032ba51bf4efa37d328ef9" + integrity sha512-sgna89Ng+25Hr9kmmaIxpGWt2LStVm1xf1807PdcWasiPDaOTkOHRL61sINw0twky7QMzafCGToGDnHT/kTHtQ== + +stylelint-config-standard@^21.0.0: + version "21.0.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-21.0.0.tgz#4942cfa27301eb6702fa8fc46a44da35d1a5cfd7" + integrity sha512-Yf6mx5oYEbQQJxWuW7X3t1gcxqbUx52qC9SMS3saC2ruOVYEyqmr5zSW6k3wXflDjjFrPhar3kp68ugRopmlzg== + dependencies: + stylelint-config-recommended "^4.0.0" + +stylelint-order@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/stylelint-order/-/stylelint-order-3.1.1.tgz#ba9ea6844d1482f97f31204e7c9605c7b792c294" + integrity sha512-4gP/r8j/6JGZ/LL41b2sYtQqfwZl4VSqTp7WeIwI67v/OXNQ08dnn64BGXNwAUSgb2+YIvIOxQaMzqMyQMzoyQ== + dependencies: + lodash "^4.17.15" + postcss "^7.0.17" + postcss-sorting "^5.0.1" + +stylelint@^13.12.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-13.12.0.tgz#cceb922be0d0c7b7b6926271eea2b90cb924733e" + integrity sha512-P8O1xDy41B7O7iXaSlW+UuFbE5+ZWQDb61ndGDxKIt36fMH50DtlQTbwLpFLf8DikceTAb3r6nPrRv30wBlzXw== + dependencies: + "@stylelint/postcss-css-in-js" "^0.37.2" + "@stylelint/postcss-markdown" "^0.36.2" + autoprefixer "^9.8.6" + balanced-match "^1.0.0" + chalk "^4.1.0" + cosmiconfig "^7.0.0" + debug "^4.3.1" + execall "^2.0.0" + fast-glob "^3.2.5" + fastest-levenshtein "^1.0.12" + file-entry-cache "^6.0.1" + get-stdin "^8.0.0" + global-modules "^2.0.0" + globby "^11.0.2" + globjoin "^0.1.4" + html-tags "^3.1.0" + ignore "^5.1.8" + import-lazy "^4.0.0" + imurmurhash "^0.1.4" + known-css-properties "^0.21.0" + lodash "^4.17.21" + log-symbols "^4.0.0" + mathml-tag-names "^2.1.3" + meow "^9.0.0" + micromatch "^4.0.2" + normalize-selector "^0.2.0" + postcss "^7.0.35" + postcss-html "^0.36.0" + postcss-less "^3.1.4" + postcss-media-query-parser "^0.2.3" + postcss-resolve-nested-selector "^0.1.1" + postcss-safe-parser "^4.0.2" + postcss-sass "^0.4.4" + postcss-scss "^2.1.1" + postcss-selector-parser "^6.0.4" + postcss-syntax "^0.36.2" + postcss-value-parser "^4.1.0" + resolve-from "^5.0.0" + slash "^3.0.0" + specificity "^0.4.1" + string-width "^4.2.2" + strip-ansi "^6.0.0" + style-search "^0.1.0" + sugarss "^2.0.0" + svg-tags "^1.0.0" + table "^6.0.7" + v8-compile-cache "^2.2.0" + write-file-atomic "^3.0.3" + stylus@^0.54.7: version "0.54.8" resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" @@ -6818,6 +7495,13 @@ stylus@^0.54.7: semver "^6.3.0" source-map "^0.7.3" +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== + dependencies: + postcss "^7.0.2" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -6852,6 +7536,11 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" +svg-tags@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= + symbol-observable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -6862,7 +7551,7 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -table@^6.0.4: +table@^6.0.4, table@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== @@ -7042,6 +7731,16 @@ trim-newlines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= +trim-newlines@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30" + integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + "true-case-path@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" @@ -7140,6 +7839,11 @@ type-fest@^0.11.0: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + type-fest@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" @@ -7214,6 +7918,18 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +unified@^9.1.0: + version "9.2.1" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" + integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -7229,6 +7945,25 @@ uniq@^1.0.1: resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= +unist-util-find-all-after@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" + integrity sha512-xaTC/AGZ0rIM2gM28YVRAFPIZpzbpDtU3dRmp7EXlNVA8ziQc4hY3H7BHXM1J49nEmiqc3svnqMReW+PGqbZKQ== + dependencies: + unist-util-is "^4.0.0" + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -7318,6 +8053,24 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" @@ -7479,7 +8232,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.9: +which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -7533,7 +8286,7 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0: +write-file-atomic@^3.0.0, write-file-atomic@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== @@ -7594,6 +8347,11 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^20.2.3: + version "20.2.7" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.7.tgz#61df85c113edfb5a7a4e36eb8aa60ef423cbc90a" + integrity sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw== + yargs@^13.3.2: version "13.3.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" @@ -7631,3 +8389,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 4741a66992a96e24ec23117e62da9b369dcc025a Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 21:53:46 -0400 Subject: [PATCH 08/37] Support simple build-time variables with PostCSS --- ui/frontend/package.json | 1 + ui/frontend/postcss.config.js | 1 + ui/frontend/yarn.lock | 5 +++++ 3 files changed, 7 insertions(+) diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 8987046af..2e5faad6d 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -60,6 +60,7 @@ "normalize.css": "^8.0.0", "postcss": "^8.2.7", "postcss-loader": "^5.0.0", + "postcss-simple-vars": "^6.0.3", "prettier": "2.2.1", "sass-loader": "^11.0.1", "style-loader": "^2.0.0", diff --git a/ui/frontend/postcss.config.js b/ui/frontend/postcss.config.js index 9a8828295..2a7b3748b 100644 --- a/ui/frontend/postcss.config.js +++ b/ui/frontend/postcss.config.js @@ -1,5 +1,6 @@ module.exports = { plugins: [ + require('postcss-simple-vars'), require('autoprefixer')(), ] }; diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index f53ff1a23..11338da99 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -6204,6 +6204,11 @@ postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4: uniq "^1.0.1" util-deprecate "^1.0.2" +postcss-simple-vars@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-simple-vars/-/postcss-simple-vars-6.0.3.tgz#e66516c7fe980da3498f4a8ad400b9c53861806c" + integrity sha512-fkNn4Zio8vN4vIig9IFdb8lVlxWnYR769RgvxCM6YWlFKie/nQaOcaMMMFz/s4gsfHW4/5bJW+i57zD67mQU7g== + postcss-sorting@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/postcss-sorting/-/postcss-sorting-5.0.1.tgz#10d5d0059eea8334dacc820c0121864035bc3f11" From 119da78d06c4f9417390d347122086e259a74a1b Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 14:00:42 -0400 Subject: [PATCH 09/37] Support nesting rules with PostCSS --- ui/frontend/package.json | 1 + ui/frontend/postcss.config.js | 1 + ui/frontend/yarn.lock | 7 +++++++ 3 files changed, 9 insertions(+) diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 2e5faad6d..39d8c624f 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -60,6 +60,7 @@ "normalize.css": "^8.0.0", "postcss": "^8.2.7", "postcss-loader": "^5.0.0", + "postcss-nesting": "^7.0.1", "postcss-simple-vars": "^6.0.3", "prettier": "2.2.1", "sass-loader": "^11.0.1", diff --git a/ui/frontend/postcss.config.js b/ui/frontend/postcss.config.js index 2a7b3748b..43bbf5702 100644 --- a/ui/frontend/postcss.config.js +++ b/ui/frontend/postcss.config.js @@ -1,6 +1,7 @@ module.exports = { plugins: [ require('postcss-simple-vars'), + require('postcss-nesting'), require('autoprefixer')(), ] }; diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index 11338da99..fe139ba23 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -6167,6 +6167,13 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" +postcss-nesting@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-7.0.1.tgz#b50ad7b7f0173e5b5e3880c3501344703e04c052" + integrity sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg== + dependencies: + postcss "^7.0.2" + postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" From 32104207c3bc851267bee6295707792e63507660 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Tue, 23 Mar 2021 20:36:10 -0400 Subject: [PATCH 10/37] Convert HelpExample to CSS modules --- ui/frontend/HelpExample.module.css | 21 +++++++++++++++++++++ ui/frontend/HelpExample.tsx | 6 ++++-- ui/frontend/index.scss | 22 ---------------------- 3 files changed, 25 insertions(+), 24 deletions(-) create mode 100644 ui/frontend/HelpExample.module.css diff --git a/ui/frontend/HelpExample.module.css b/ui/frontend/HelpExample.module.css new file mode 100644 index 000000000..e83065c35 --- /dev/null +++ b/ui/frontend/HelpExample.module.css @@ -0,0 +1,21 @@ +.container { + position: relative; +} + +.loadExample { + position: absolute; + top: 0; + right: 0; + border: none; + background: rgba(255, 255, 255, 0.8); + border-bottom-left-radius: 0.5em; + cursor: pointer; + opacity: 0; + transition: all 0.5s; + visibility: hidden; +} + +.container:hover .loadExample { + opacity: 1; + visibility: visible; +} diff --git a/ui/frontend/HelpExample.tsx b/ui/frontend/HelpExample.tsx index 8fa6797ea..ca018059d 100644 --- a/ui/frontend/HelpExample.tsx +++ b/ui/frontend/HelpExample.tsx @@ -6,6 +6,8 @@ import { PrismCode } from 'react-prism'; import * as actions from './actions'; +import styles from './HelpExample.module.css'; + export interface HelpExampleProps { code: string; } @@ -18,8 +20,8 @@ const HelpExample: React.SFC = ({ code }) => { ); return ( -
-      
       
diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss
index 96e9fcc99..2f75f1885 100644
--- a/ui/frontend/index.scss
+++ b/ui/frontend/index.scss
@@ -344,28 +344,6 @@ body {
            text-decoration: underline;
        }
     }
-
-    &__example {
-        position: relative;
-    }
-
-    &__load_example {
-        position: absolute;
-        right: 0;
-        top: 0;
-        border: none;
-        background: rgba(255, 255, 255, 0.8);
-        border-bottom-left-radius: 0.5em;
-        visibility: hidden;
-        opacity: 0;
-        transition: all 0.5s;
-        cursor: pointer;
-    }
-
-    &__example:hover &__load_example {
-        visibility: visible;
-        opacity: 1;
-    }
 }
 
 $header-tint: #428bca;

From f533a18fb0f84b6332995056631e595093d0fa94 Mon Sep 17 00:00:00 2001
From: Jake Goulding 
Date: Tue, 23 Mar 2021 21:45:22 -0400
Subject: [PATCH 11/37] Convert Help to CSS modules

Leaving the SASS scoping of Prism CSS until I figure out a better alternative.
---
 ui/frontend/Help.module.css | 31 +++++++++++++++++++++++++++++++
 ui/frontend/Help.tsx        | 14 ++++++++------
 ui/frontend/index.scss      | 28 ----------------------------
 3 files changed, 39 insertions(+), 34 deletions(-)
 create mode 100644 ui/frontend/Help.module.css

diff --git a/ui/frontend/Help.module.css b/ui/frontend/Help.module.css
new file mode 100644
index 000000000..4a6c69284
--- /dev/null
+++ b/ui/frontend/Help.module.css
@@ -0,0 +1,31 @@
+.container {
+  max-width: 800px;
+  padding: 1em;
+  margin: 1em auto;
+  background-color: #fff;
+  line-height: 1.5;
+}
+
+.code {
+  padding: 0 0.25em;
+  background: #eee;
+}
+
+.logo {
+  text-align: center;
+}
+
+.header {
+  &:hover::after {
+    content: ' §';
+  }
+}
+
+.headerLink {
+  color: black;
+  text-decoration: none;
+
+  &:hover {
+    text-decoration: underline;
+  }
+}
diff --git a/ui/frontend/Help.tsx b/ui/frontend/Help.tsx
index f235efb03..68721f0eb 100644
--- a/ui/frontend/Help.tsx
+++ b/ui/frontend/Help.tsx
@@ -4,6 +4,8 @@ import * as actions from './actions';
 import Example from './HelpExample';
 import Link from './uss-router/Link';
 
+import styles from './Help.module.css';
+
 import integer32Logo from './assets/integer32-logo.svg';
 
 const ACE_URL = 'https://github.com/ajaxorg/ace';
@@ -75,7 +77,7 @@ fn main() {
 
 const Help: React.SFC = () => {
   return (
-    
+

The Rust Playground

Return to the playground @@ -98,7 +100,7 @@ const Help: React.SFC = () => { part of Integer 32.

-

+

Integer 32 Logo @@ -178,7 +180,7 @@ const Help: React.SFC = () => { limitations on the maximum length.

-
{LINK_EXAMPLE}
+
{LINK_EXAMPLE}
@@ -322,8 +324,8 @@ const LinkableSection: React.SFC = ({ }) => (
- - {header} + + {header} {children} @@ -337,7 +339,7 @@ interface LinkableSectionProps { } const Code: React.SFC = ({ children }) => ( - {children} + {children} ); export default Help; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 2f75f1885..3bb98ba93 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -316,34 +316,6 @@ body { .help { @import "~prismjs/themes/prism-okaidia"; - - max-width: 800px; - background-color: #fff; - margin: 1em auto; - padding: 1em; - line-height: 1.5; - - &__code { - background: #EEE; - padding: 0 0.25em; - } - - &__logo { - text-align: center; - } - - &__header:hover:after { - content: ' §'; - } - - &__header-link { - color: black; - text-decoration: none; - - &:hover { - text-decoration: underline; - } - } } $header-tint: #428bca; From 1978719ceb1b115280e38ae1aad89d5783896144 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 12:53:58 -0400 Subject: [PATCH 12/37] Use the shadow DOM to scope Prism themes to specific components --- ui/frontend/HelpExample.tsx | 18 ++- ui/frontend/declarations.d.ts | 5 + ui/frontend/index.scss | 3 - ui/frontend/package.json | 1 + ui/frontend/webpack.config.js | 4 + ui/frontend/yarn.lock | 201 +++++++++++++++++++++++++++++++++- 6 files changed, 220 insertions(+), 12 deletions(-) diff --git a/ui/frontend/HelpExample.tsx b/ui/frontend/HelpExample.tsx index ca018059d..dc9046382 100644 --- a/ui/frontend/HelpExample.tsx +++ b/ui/frontend/HelpExample.tsx @@ -1,4 +1,5 @@ import React, { useCallback } from 'react'; +import root from 'react-shadow'; import { useDispatch } from 'react-redux'; import 'prismjs/components/prism-rust.min'; @@ -7,6 +8,7 @@ import { PrismCode } from 'react-prism'; import * as actions from './actions'; import styles from './HelpExample.module.css'; +import prismTheme from 'prismjs/themes/prism-okaidia.css'; export interface HelpExampleProps { code: string; @@ -20,14 +22,20 @@ const HelpExample: React.SFC = ({ code }) => { ); return ( -
+    
- - {code} - -
+ + + +
+          
+            {code}
+          
+        
+
+
); }; diff --git a/ui/frontend/declarations.d.ts b/ui/frontend/declarations.d.ts index cf66d4cce..1adca1a8c 100644 --- a/ui/frontend/declarations.d.ts +++ b/ui/frontend/declarations.d.ts @@ -3,6 +3,11 @@ declare module '*.module.css' { export default classes; } +declare module 'prismjs/themes/*.css' { + const content: string; + export default content; +} + declare module '*.svg' { const content: string; export default content; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 3bb98ba93..8df3706a3 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -314,9 +314,6 @@ body { } } -.help { - @import "~prismjs/themes/prism-okaidia"; -} $header-tint: #428bca; $header-main-border: #dedede; diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 39d8c624f..6a71325bd 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -21,6 +21,7 @@ "react-portal": "^4.1.4", "react-prism": "^4.0.0", "react-redux": "^7.0.0", + "react-shadow": "^19.0.2", "redux": "^4.0.0", "redux-thunk": "^2.1.0", "regenerator-runtime": "^0.13.2", diff --git a/ui/frontend/webpack.config.js b/ui/frontend/webpack.config.js index b0c162695..379b7c784 100644 --- a/ui/frontend/webpack.config.js +++ b/ui/frontend/webpack.config.js @@ -91,6 +91,10 @@ module.exports = function(_, argv) { "sass-loader", ], }, + { + test: /prismjs\/themes\/.*css$/, + type: 'asset/resource', + }, { test: /\.module.css$/, use: [ diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index fe139ba23..e63e45dbb 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -1391,6 +1391,11 @@ jest-diff "^26.0.0" pretty-format "^26.0.0" +"@types/js-cookie@2.2.6": + version "2.2.6" + resolved "https://registry.yarnpkg.com/@types/js-cookie/-/js-cookie-2.2.6.tgz#f1a1cb35aff47bc5cfb05cb0c441ca91e914c26f" + integrity sha512-+oY0FDTO2GYKEV0YPvSshGq9t7YozVkgvXLty7zogQNuCxBhT9/3INX9Q7H1aRZ4SUDRXAKlJuA4EA5nTt7SNw== + "@types/json-schema@*", "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.6": version "7.0.7" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad" @@ -1698,6 +1703,11 @@ resolved "https://registry.yarnpkg.com/@webpack-cli/serve/-/serve-1.3.0.tgz#2730c770f5f1f132767c63dcaaa4ec28f8c56a6c" integrity sha512-k2p2VrONcYVX1wRRrf0f3X2VGltLWcv+JzXRBDmvCxGlCeESx4OXw91TsWeKOkp784uNoVQo313vxJFHXPPwfw== +"@xobotyi/scrollbar-width@1.9.5": + version "1.9.5" + resolved "https://registry.yarnpkg.com/@xobotyi/scrollbar-width/-/scrollbar-width-1.9.5.tgz#80224a6919272f405b87913ca13b92929bdf3c4d" + integrity sha512-N8tkAACJx2ww8vFMneJmaAgmjAG1tnVBZJRLRcx061tmsLRZHSEZSLuGWnwPtunsSLvSqXQ2wfp7Mgqg1I+2dQ== + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -2610,7 +2620,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -copy-to-clipboard@^3: +copy-to-clipboard@^3, copy-to-clipboard@^3.2.0: version "3.3.1" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz#115aa1a9998ffab6196f93076ad6da3b913662ae" integrity sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw== @@ -2690,6 +2700,14 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css-in-js-utils@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/css-in-js-utils/-/css-in-js-utils-2.0.1.tgz#3b472b398787291b47cfe3e44fecfdd9e914ba99" + integrity sha512-PJF0SpJT+WdbVVt0AOYp9C8GnuruRlL/UFW7932nLWmFLQTaWEzTBQEx7/hn4BuV+WON75iAViSUJLiU3PKbpA== + dependencies: + hyphenate-style-name "^1.0.2" + isobject "^3.0.1" + css-loader@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.1.1.tgz#9362d444a0f7c08c148a109596715c904e252879" @@ -2733,6 +2751,14 @@ css-selector-tokenizer@^0.7.0: cssesc "^3.0.0" fastparse "^1.1.2" +css-tree@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.2.tgz#9ae393b5dafd7dae8a622475caec78d3d8fbd7b5" + integrity sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + css-what@^3.2.1: version "3.4.2" resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" @@ -2770,7 +2796,7 @@ cssstyle@^2.2.0: dependencies: cssom "~0.3.6" -csstype@^3.0.2: +csstype@^3.0.2, csstype@^3.0.6: version "3.0.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.7.tgz#2a5fb75e1015e84dd15692f71e89a1450290950b" integrity sha512-KxnUB0ZMlnUWCsx2Z8MUsr6qV6ja1w9ArPErJaJaF8a5SOWoHLIszeCTKGRGRgtLgYrs1E8CHkNSP1VZTTPc9g== @@ -3090,6 +3116,13 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error-stack-parser@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" + integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== + dependencies: + stackframe "^1.1.1" + es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: version "1.18.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" @@ -3420,7 +3453,7 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -3447,11 +3480,21 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-shallow-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-shallow-equal/-/fast-shallow-equal-1.0.0.tgz#d4dcaf6472440dcefa6f88b98e3251e27f25628b" + integrity sha512-HPtaa38cPgWvaCFmRNhlc6NG7pv6NUHqjPgVAkWGoB9mQMwYB27/K0CvOM5Czy+qpT3e8XJ6Q4aPAnzpNpzNaw== + fastest-levenshtein@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz#9990f7d3a88cc5a9ffd1f1745745251700d497e2" integrity sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow== +fastest-stable-stringify@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fastest-stable-stringify/-/fastest-stable-stringify-2.0.2.tgz#3757a6774f6ec8de40c4e86ec28ea02417214c76" + integrity sha512-bijHueCGd0LqqNK9b5oCMHc0MluJAx0cwqASgbWMvkO01lCYgIhacVRLcaDz3QnyYIRNJRDwMb41VuT6pHJ91Q== + fastparse@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" @@ -4009,6 +4052,16 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +humps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" + integrity sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao= + +hyphenate-style-name@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d" + integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ== + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4133,6 +4186,13 @@ ini@^1.3.5: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== +inline-style-prefixer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/inline-style-prefixer/-/inline-style-prefixer-6.0.0.tgz#f73d5dbf2855733d6b153a4d24b7b47a73e9770b" + integrity sha512-XTHvRUS4ZJNzC1GixJRmOlWSS45fSt+DJoyQC9ytj0WxQfcgofQtDtyKKYxHUqEsWCs+LIWftPF1ie7+i012Fg== + dependencies: + css-in-js-utils "^2.0.0" + internal-slot@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" @@ -4905,6 +4965,11 @@ js-base64@^2.1.8: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== +js-cookie@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.1.tgz#69e106dc5d5806894562902aa5baec3744e9b2b8" + integrity sha512-HvdH2LzI/EAZcUwA8+0nKNtWHqS+ZmijLA30RwZA0bo7ToCckjK5MkGhjED9KoRcXO6BaGI3I9UIzSA1FKFPOQ== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -5326,6 +5391,11 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + memory-fs@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c" @@ -5520,6 +5590,20 @@ nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nano-css@^5.2.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/nano-css/-/nano-css-5.3.1.tgz#b709383e07ad3be61f64edffacb9d98250b87a1f" + integrity sha512-ENPIyNzANQRyYVvb62ajDd7PAyIgS2LIUnT9ewih4yrXSZX4hKoUwssy8WjUH++kEOA5wUTMgNnV7ko5n34kUA== + dependencies: + css-tree "^1.1.2" + csstype "^3.0.6" + fastest-stable-stringify "^2.0.2" + inline-style-prefixer "^6.0.0" + rtl-css-js "^1.14.0" + sourcemap-codec "^1.4.8" + stacktrace-js "^2.0.2" + stylis "^4.0.6" + nanoid@^3.1.20: version "3.1.20" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -6456,6 +6540,39 @@ react-redux@^7.0.0: prop-types "^15.7.2" react-is "^16.13.1" +react-shadow@^19.0.2: + version "19.0.2" + resolved "https://registry.yarnpkg.com/react-shadow/-/react-shadow-19.0.2.tgz#af2594efe467ffc8d24789022280a5d2f6fae9cb" + integrity sha512-v0XXiMwIDgnvtT1DX4DU7VRgJO1k1nItDuedvWAWMhHaahagcJti4ffliwdBGRb9O77TFUz0nNKPzNxQQ9y1Ow== + dependencies: + humps "^2.0.1" + react-use "^15.3.3" + +react-universal-interface@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" + integrity sha512-dg8yXdcQmvgR13RIlZbTRQOoUrDciFVoSBZILwjE2LFISxZZ8loVJKAkuzswl5js8BHda79bIb2b84ehU8IjXw== + +react-use@^15.3.3: + version "15.3.8" + resolved "https://registry.yarnpkg.com/react-use/-/react-use-15.3.8.tgz#ca839ac7fb3d696e5ccbeabbc8dadc2698969d30" + integrity sha512-GeGcrmGuUvZrY5wER3Lnph9DSYhZt5nEjped4eKDq8BRGr2CnLf9bDQWG9RFc7oCPphnscUUdOovzq0E5F2c6Q== + dependencies: + "@types/js-cookie" "2.2.6" + "@xobotyi/scrollbar-width" "1.9.5" + copy-to-clipboard "^3.2.0" + fast-deep-equal "^3.1.3" + fast-shallow-equal "^1.0.0" + js-cookie "^2.2.1" + nano-css "^5.2.1" + react-universal-interface "^0.6.2" + resize-observer-polyfill "^1.5.1" + screenfull "^5.0.0" + set-harmonic-interval "^1.0.1" + throttle-debounce "^2.1.0" + ts-easing "^0.2.0" + tslib "^2.0.0" + react@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react/-/react-17.0.1.tgz#6e0600416bd57574e3f86d92edba3d9008726127" @@ -6767,6 +6884,11 @@ reserved-words@^0.1.2: resolved "https://registry.yarnpkg.com/reserved-words/-/reserved-words-0.1.2.tgz#00a0940f98cd501aeaaac316411d9adc52b31ab1" integrity sha1-AKCUD5jNUBrqqsMWQR2a3FKzGrE= +resize-observer-polyfill@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" + integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== + resolve-cwd@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" @@ -6834,6 +6956,13 @@ rsvp@^4.8.4: resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== +rtl-css-js@^1.14.0: + version "1.14.0" + resolved "https://registry.yarnpkg.com/rtl-css-js/-/rtl-css-js-1.14.0.tgz#daa4f192a92509e292a0519f4b255e6e3c076b7d" + integrity sha512-Dl5xDTeN3e7scU1cWX8c9b6/Nqz3u/HgR4gePc1kWXYiQWVQbKCEyK6+Hxve9LbcJ5EieHy1J9nJCN3grTtGwg== + dependencies: + "@babel/runtime" "^7.1.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6941,6 +7070,11 @@ schema-utils@^3.0.0: ajv "^6.12.5" ajv-keywords "^3.5.2" +screenfull@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/screenfull/-/screenfull-5.1.0.tgz#85c13c70f4ead4c1b8a935c70010dfdcd2c0e5c8" + integrity sha512-dYaNuOdzr+kc6J6CFcBrzkLCfyGcMg+gWkJ8us93IQ7y1cevhQAugFsaCdMHb6lw8KV3xPzSxzH7zM1dQap9mA== + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -6988,6 +7122,11 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-harmonic-interval@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-harmonic-interval/-/set-harmonic-interval-1.0.1.tgz#e1773705539cdfb80ce1c3d99e7f298bb3995249" + integrity sha512-AhICkFV84tBP1aWqPwLZqFvAwqEoVA9kxNMniGEUvzOlm4vLmOFLiTT3UZ6bziJTy4bOVpzWGTfSCbmaayGx8g== + set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" @@ -7126,6 +7265,11 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== +source-map@0.5.6: + version "0.5.6" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" + integrity sha1-dc449SvwczxafwwRjYEzSiu19BI= + source-map@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -7148,6 +7292,11 @@ source-map@^0.7.3, source-map@~0.7.2: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -7206,6 +7355,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stack-generator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-generator/-/stack-generator-2.0.5.tgz#fb00e5b4ee97de603e0773ea78ce944d81596c36" + integrity sha512-/t1ebrbHkrLrDuNMdeAcsvynWgoH/i4o8EGGfX7dEYDoTXOYVAkEpFdtshlvabzc6JlJ8Kf9YdFEoz7JkzGN9Q== + dependencies: + stackframe "^1.1.1" + stack-utils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277" @@ -7213,6 +7369,28 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" +stackframe@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" + integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== + +stacktrace-gps@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/stacktrace-gps/-/stacktrace-gps-3.0.4.tgz#7688dc2fc09ffb3a13165ebe0dbcaf41bcf0c69a" + integrity sha512-qIr8x41yZVSldqdqe6jciXEaSCKw1U8XTXpjDuy0ki/apyTn/r3w9hDAAQOhZdxvsC93H+WwwEu5cq5VemzYeg== + dependencies: + source-map "0.5.6" + stackframe "^1.1.1" + +stacktrace-js@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stacktrace-js/-/stacktrace-js-2.0.2.tgz#4ca93ea9f494752d55709a081d400fdaebee897b" + integrity sha512-Je5vBeY4S1r/RnLydLl0TBTi3F2qdfWmYsGvtfZgEI+SCprPppaIhQf5nGcal4gI4cGpCV/duLcAzT1np6sQqg== + dependencies: + error-stack-parser "^2.0.6" + stack-generator "^2.0.5" + stacktrace-gps "^3.0.4" + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -7493,6 +7671,11 @@ stylelint@^13.12.0: v8-compile-cache "^2.2.0" write-file-atomic "^3.0.3" +stylis@^4.0.6: + version "4.0.8" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.0.8.tgz#b03cc47dcedcd2dbac93d8224e687c43ceda4e20" + integrity sha512-WCHD2YHu2gp4GN9M8TqD7DZljL/UC5mIFaKyYJRuRyPdnqkTqzTnxCIQ1Z3VgQvz1aPcua5bSS2h0HrcbDUdBg== + stylus@^0.54.7: version "0.54.8" resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" @@ -7652,6 +7835,11 @@ throat@^5.0.0: resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== +throttle-debounce@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/throttle-debounce/-/throttle-debounce-2.3.0.tgz#fd31865e66502071e411817e241465b3e9c372e2" + integrity sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ== + tiny-emitter@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" @@ -7760,6 +7948,11 @@ trough@^1.0.0: dependencies: glob "^7.1.2" +ts-easing@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/ts-easing/-/ts-easing-0.2.0.tgz#c8a8a35025105566588d87dbda05dd7fbfa5a4ec" + integrity sha512-Z86EW+fFFh/IFB1fqQ3/+7Zpf9t2ebOAxNI/V6Wo7r5gqiqtxmgTlQ1qbqQcjLKYeSHPTsEmvlJUDg/EuL0uHQ== + ts-jest@^26.0.0: version "26.5.2" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.2.tgz#5281d6b44c2f94f71205728a389edc3d7995b0c4" @@ -7803,7 +7996,7 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3: +tslib@^2.0.0, tslib@^2.0.3: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== From 1d8e948b64f28ba6ffd25de8ead766e4b609a8f1 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 13:39:12 -0400 Subject: [PATCH 13/37] Convert BuildMenu to CSS modules --- ui/frontend/BuildMenu.module.css | 9 +++++++++ ui/frontend/BuildMenu.tsx | 12 +++++++----- ui/frontend/index.scss | 12 ------------ 3 files changed, 16 insertions(+), 17 deletions(-) create mode 100644 ui/frontend/BuildMenu.module.css diff --git a/ui/frontend/BuildMenu.module.css b/ui/frontend/BuildMenu.module.css new file mode 100644 index 000000000..a7dc5f80c --- /dev/null +++ b/ui/frontend/BuildMenu.module.css @@ -0,0 +1,9 @@ +.code { + padding: 0 0.25em; + background: #eee; +} + +.aside { + margin: 0.25em 0 0 0; + color: #888; +} diff --git a/ui/frontend/BuildMenu.tsx b/ui/frontend/BuildMenu.tsx index 9a4ea349a..7e25e674c 100644 --- a/ui/frontend/BuildMenu.tsx +++ b/ui/frontend/BuildMenu.tsx @@ -7,6 +7,8 @@ import * as selectors from './selectors'; import ButtonMenuItem from './ButtonMenuItem'; import MenuGroup from './MenuGroup'; +import styles from './BuildMenu.module.css'; + interface BuildMenuProps { close: () => void; } @@ -40,15 +42,15 @@ const BuildMenu: React.SFC = props => { Build and run the code, showing the output. - Equivalent to cargo run. + Equivalent to cargo run. Build the code without running it. - Equivalent to cargo build. + Equivalent to cargo build. Build the code and run all the tests. - Equivalent to cargo test. + Equivalent to cargo test. Build and show the resulting assembly code. @@ -72,14 +74,14 @@ const BuildMenu: React.SFC = props => { }; const HirAside: React.SFC = () => ( -

+

Note: HIR currently requires using the Nightly channel, selecting this option will switch to Nightly.

); const WasmAside: React.SFC = () => ( -

+

Note: WASM currently requires using the Nightly channel, selecting this option will switch to Nightly.

diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 8df3706a3..f4c7dcf01 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -581,18 +581,6 @@ $header-transition: 0.2s ease-in-out; } } -.build-menu { - &__code { - background: #EEE; - padding: 0 0.25em; - } - - &__aside { - margin: 0.25em 0 0 0; - color: #888; - } -} - .channel-menu { &__description { margin: 0; From 47d061e8f03b11d184d54ba8f094d931a89d84cc Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 15:19:49 -0400 Subject: [PATCH 14/37] DRY up menu asides --- ui/frontend/BuildMenu.module.css | 5 ----- ui/frontend/BuildMenu.tsx | 9 +++++---- ui/frontend/MenuAside.module.css | 4 ++++ ui/frontend/MenuAside.tsx | 11 +++++++++++ ui/frontend/ToolsMenu.tsx | 9 +++++---- ui/frontend/index.scss | 7 ------- 6 files changed, 25 insertions(+), 20 deletions(-) create mode 100644 ui/frontend/MenuAside.module.css create mode 100644 ui/frontend/MenuAside.tsx diff --git a/ui/frontend/BuildMenu.module.css b/ui/frontend/BuildMenu.module.css index a7dc5f80c..ba906e4e3 100644 --- a/ui/frontend/BuildMenu.module.css +++ b/ui/frontend/BuildMenu.module.css @@ -2,8 +2,3 @@ padding: 0 0.25em; background: #eee; } - -.aside { - margin: 0.25em 0 0 0; - color: #888; -} diff --git a/ui/frontend/BuildMenu.tsx b/ui/frontend/BuildMenu.tsx index 7e25e674c..e755c0051 100644 --- a/ui/frontend/BuildMenu.tsx +++ b/ui/frontend/BuildMenu.tsx @@ -6,6 +6,7 @@ import * as selectors from './selectors'; import ButtonMenuItem from './ButtonMenuItem'; import MenuGroup from './MenuGroup'; +import MenuAside from './MenuAside'; import styles from './BuildMenu.module.css'; @@ -74,17 +75,17 @@ const BuildMenu: React.SFC = props => { }; const HirAside: React.SFC = () => ( -

+ Note: HIR currently requires using the Nightly channel, selecting this option will switch to Nightly. -

+ ); const WasmAside: React.SFC = () => ( -

+ Note: WASM currently requires using the Nightly channel, selecting this option will switch to Nightly. -

+ ); export default BuildMenu; diff --git a/ui/frontend/MenuAside.module.css b/ui/frontend/MenuAside.module.css new file mode 100644 index 000000000..420a68d04 --- /dev/null +++ b/ui/frontend/MenuAside.module.css @@ -0,0 +1,4 @@ +.aside { + margin: 0.25em 0 0 0; + color: #888; +} diff --git a/ui/frontend/MenuAside.tsx b/ui/frontend/MenuAside.tsx new file mode 100644 index 000000000..46b4d207a --- /dev/null +++ b/ui/frontend/MenuAside.tsx @@ -0,0 +1,11 @@ +import React from 'react'; + +import styles from './MenuAside.module.css'; + +const MenuAside: React.SFC = ({ children }) => ( +

+ {children} +

+); + +export default MenuAside; diff --git a/ui/frontend/ToolsMenu.tsx b/ui/frontend/ToolsMenu.tsx index 846432fbf..3a449450e 100644 --- a/ui/frontend/ToolsMenu.tsx +++ b/ui/frontend/ToolsMenu.tsx @@ -3,6 +3,7 @@ import { useDispatch, useSelector } from 'react-redux'; import ButtonMenuItem from './ButtonMenuItem'; import MenuGroup from './MenuGroup'; +import MenuAside from './MenuAside'; import * as selectors from './selectors'; import * as actions from './actions'; @@ -45,13 +46,13 @@ const ToolsMenu: React.SFC = props => { name="Rustfmt" onClick={format}>
Format this code with Rustfmt.
-
{rustfmtVersion} ({rustfmtVersionDetails})
+ {rustfmtVersion} ({rustfmtVersionDetails})
Catch common mistakes and improve the code using the Clippy linter.
-
{clippyVersion} ({clippyVersionDetails})
+ {clippyVersion} ({clippyVersionDetails})
= props => { Execute this program in the Miri interpreter to detect certain cases of undefined behavior (like out-of-bounds memory access). -
{miriVersion} ({miriVersionDetails})
+ {miriVersion} ({miriVersionDetails})
= props => {
Expand macros in code using the nightly compiler.
-
{nightlyVersion} ({nightlyVersionDetails})
+ {nightlyVersion} ({nightlyVersionDetails})
); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index f4c7dcf01..a93d846c0 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -587,13 +587,6 @@ $header-transition: 0.2s ease-in-out; } } -.tools-menu { - &__aside { - margin: 0.25em 0 0 0; - color: #888; - } -} - .config-element { display: flex; align-items: center; From 9bb9b81669fb858013e39a0e47f4a1993fc8a7b2 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 15:21:55 -0400 Subject: [PATCH 15/37] Convert ChannelMenu to CSS modules --- ui/frontend/ChannelMenu.module.css | 3 +++ ui/frontend/ChannelMenu.tsx | 4 +++- ui/frontend/index.scss | 6 ------ 3 files changed, 6 insertions(+), 7 deletions(-) create mode 100644 ui/frontend/ChannelMenu.module.css diff --git a/ui/frontend/ChannelMenu.module.css b/ui/frontend/ChannelMenu.module.css new file mode 100644 index 000000000..cd2bed250 --- /dev/null +++ b/ui/frontend/ChannelMenu.module.css @@ -0,0 +1,3 @@ +.description { + margin: 0; +} diff --git a/ui/frontend/ChannelMenu.tsx b/ui/frontend/ChannelMenu.tsx index 202a52470..39c454366 100644 --- a/ui/frontend/ChannelMenu.tsx +++ b/ui/frontend/ChannelMenu.tsx @@ -9,6 +9,8 @@ import * as selectors from './selectors'; import State from './state'; import { Channel } from './types'; +import styles from './ChannelMenu.module.css'; + interface ChannelMenuProps { close: () => void; } @@ -62,7 +64,7 @@ const ChannelMenu: React.SFC = props => { }; const Desc: React.SFC<{}> = ({ children }) => ( -

{children}

+

{children}

); export default ChannelMenu; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index a93d846c0..69e4e3b7c 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -581,12 +581,6 @@ $header-transition: 0.2s ease-in-out; } } -.channel-menu { - &__description { - margin: 0; - } -} - .config-element { display: flex; align-items: center; From 092ed8a70ce1c1c1af316e12341d0b311b5b8a01 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 21:24:04 -0400 Subject: [PATCH 16/37] Convert HeaderButton to CSS modules --- ui/frontend/Header.tsx | 2 +- ui/frontend/HeaderButton.module.css | 50 +++++++++++++++++++++++++++++ ui/frontend/HeaderButton.tsx | 24 ++++++++------ ui/frontend/index.scss | 49 ---------------------------- 4 files changed, 65 insertions(+), 60 deletions(-) create mode 100644 ui/frontend/HeaderButton.module.css diff --git a/ui/frontend/Header.tsx b/ui/frontend/Header.tsx index 88ab34ef0..3c5cea90f 100644 --- a/ui/frontend/Header.tsx +++ b/ui/frontend/Header.tsx @@ -69,7 +69,7 @@ const ExecuteButton: React.SFC = () => { return ( - }> + }> {executionLabel} diff --git a/ui/frontend/HeaderButton.module.css b/ui/frontend/HeaderButton.module.css new file mode 100644 index 000000000..f0c3b0f58 --- /dev/null +++ b/ui/frontend/HeaderButton.module.css @@ -0,0 +1,50 @@ +.container { + display: flex; + height: 3em; + align-items: center; + padding: 0 1.25em; + font-weight: 600; + text-decoration: none; + text-transform: uppercase; + white-space: nowrap; +} + +.bold { + font-weight: 700; +} + +.expandable { + composes: container; + padding-right: 1em; +} + +.hasLeftIcon { + composes: container; + padding-left: 1em; +} + +.hasRightIcon { + composes: container; + padding-right: 1em; +} + +.iconOnly { + composes: container; + padding: 0 0.75em; +} + +.leftIcon { + margin-right: 0.5em; +} + +.iconOnly .leftIcon { + margin-right: 0; +} + +.drop { + margin-left: 0.75em; +} + +.rightIcon { + margin-left: 0.75em; +} diff --git a/ui/frontend/HeaderButton.tsx b/ui/frontend/HeaderButton.tsx index 3dfd7f83d..8a5e9b1a6 100644 --- a/ui/frontend/HeaderButton.tsx +++ b/ui/frontend/HeaderButton.tsx @@ -2,26 +2,30 @@ import React from 'react'; import { ExpandableIcon } from './Icon'; +import styles from './HeaderButton.module.css'; + interface HeaderButtonProps { + bold?: boolean; icon?: React.ReactNode; rightIcon?: React.ReactNode; isExpandable?: boolean; } -const HeaderButton: React.SFC = ({ icon, rightIcon, isExpandable, children }) => { - const c = ['header-button']; +const HeaderButton: React.SFC = ({ bold, icon, rightIcon, isExpandable, children }) => { + const c = [styles.container]; - if (icon) { c.push('header-button--has-left-icon'); } - if (rightIcon) { c.push('header-button--has-right-icon'); } - if (isExpandable) { c.push('header-button--expandable'); } - if ((icon || rightIcon) && !isExpandable && !children) { c.push('header-button--icon-only'); } + if (bold) { c.push(styles.bold); } + if (icon) { c.push(styles.hasLeftIcon); } + if (rightIcon) { c.push(styles.hasRightIcon); } + if (isExpandable) { c.push(styles.expandable); } + if ((icon || rightIcon) && !isExpandable && !children) { c.push(styles.iconOnly); } return (
- {icon &&
{icon}
} - {children} - {rightIcon &&
{rightIcon}
} - {isExpandable &&
} + {icon &&
{icon}
} + { children} + { rightIcon &&
{rightIcon}
} + { isExpandable &&
}
); }; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 69e4e3b7c..458668f31 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -411,10 +411,6 @@ $header-transition: 0.2s ease-in-out; border-right-width: 0; } - .header-button { - font-weight: 700; - } - &:hover { background: $rust-dark; color: white; @@ -652,51 +648,6 @@ $header-transition: 0.2s ease-in-out; } } -.header-button { - height: 3em; - padding: 0 1.25em; - display: flex; - align-items: center; - - text-transform: uppercase; - text-decoration: none; - font-weight: 600; - - white-space: nowrap; - - &--expandable { - padding-right: 1em; - } - - &--has-left-icon { - padding-left: 1em; - } - - &--has-right-icon { - padding-right: 1em; - } - - &--icon-only { - padding: 0 0.75em; - } - - &__left-icon { - margin-right: 0.5em; - } - - &--icon-only &__left-icon { - margin-right: 0; - } - - &__drop { - margin-left: 0.75em; - } - - &__right-icon { - margin-left: 0.75em; - } -} - .icon { display: block; fill: currentColor; From bb3f0f503333d0c6b8845b4075b93f35878335a5 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 21:34:44 -0400 Subject: [PATCH 17/37] Convert Icon to CSS modules --- ui/frontend/Icon.module.css | 4 ++++ ui/frontend/Icon.tsx | 21 ++++++++++++--------- ui/frontend/index.scss | 5 ----- 3 files changed, 16 insertions(+), 14 deletions(-) create mode 100644 ui/frontend/Icon.module.css diff --git a/ui/frontend/Icon.module.css b/ui/frontend/Icon.module.css new file mode 100644 index 000000000..24340597f --- /dev/null +++ b/ui/frontend/Icon.module.css @@ -0,0 +1,4 @@ +.icon { + display: block; + fill: currentColor; +} diff --git a/ui/frontend/Icon.tsx b/ui/frontend/Icon.tsx index 6e44d7fa3..0427caa47 100644 --- a/ui/frontend/Icon.tsx +++ b/ui/frontend/Icon.tsx @@ -1,5 +1,8 @@ import React from 'react'; + +import styles from './Icon.module.css'; + /* eslint-disable max-len */ // These icons came from Material Design originally @@ -7,27 +10,27 @@ import React from 'react'; // M.D. 'play_arrow' export const BuildIcon = () => ( - + ); // M.D. 'keyboard_arrow_down' export const ExpandableIcon = () => ( - + ); // M.D. 'more_horiz' export const MoreOptionsIcon = () => ( - + ); export const MoreOptionsActiveIcon = () => ( - + + ); // M.D. 'help_outline' export const HelpIcon = () => ( - + ); export const CheckmarkIcon = () => ( - + ); // M.D. 'assignment' (outline) export const ClipboardIcon = () => ( - + @@ -68,7 +71,7 @@ export const ClipboardIcon = () => ( // M.D. 'close' export const Close = () => ( - + ); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 458668f31..fd91811a7 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -648,11 +648,6 @@ $header-transition: 0.2s ease-in-out; } } -.icon { - display: block; - fill: currentColor; -} - .notifications { position: absolute; z-index: 10; From fd6b67a28d2bd5388c5fa1ce968c65886cee8454 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Wed, 24 Mar 2021 21:56:57 -0400 Subject: [PATCH 18/37] Convert Notifications to CSS modules --- ui/frontend/Notifications.module.css | 30 ++++++++++++++++++++++++ ui/frontend/Notifications.tsx | 10 ++++---- ui/frontend/index.scss | 35 ---------------------------- ui/frontend/shared.module.css | 9 +++++++ 4 files changed, 45 insertions(+), 39 deletions(-) create mode 100644 ui/frontend/Notifications.module.css create mode 100644 ui/frontend/shared.module.css diff --git a/ui/frontend/Notifications.module.css b/ui/frontend/Notifications.module.css new file mode 100644 index 000000000..941dded05 --- /dev/null +++ b/ui/frontend/Notifications.module.css @@ -0,0 +1,30 @@ +$buffer: 0.5em; +$space: 0.25em; + +.container { + position: absolute; + z-index: 10; + right: $buffer; + bottom: $buffer; + left: $buffer; + max-width: 50em; + border: 2px solid #428bca; + margin-right: auto; + margin-left: auto; + background: white; +} + +.notification { + display: flex; +} + +.notificationContent { + padding: $space 0 $space $space; +} + +.close { + composes: -buttonReset from './shared.module.css'; + padding: $space; + background: #e1e1db; + cursor: pointer; +} diff --git a/ui/frontend/Notifications.tsx b/ui/frontend/Notifications.tsx index e95ee6e4f..a55f74bab 100644 --- a/ui/frontend/Notifications.tsx +++ b/ui/frontend/Notifications.tsx @@ -7,12 +7,14 @@ import { Close } from './Icon'; import * as actions from './actions'; import * as selectors from './selectors'; +import styles from './Notifications.module.css'; + const SURVEY_URL = 'https://blog.rust-lang.org/2020/09/10/survey-launch.html'; const Notifications: React.SFC = () => { return ( -
+
@@ -40,9 +42,9 @@ interface NotificationProps { } const Notification: React.SFC = ({ onClose, children }) => ( -
-
{children}
- +
+
{children}
+
); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index fd91811a7..c275fd5d7 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -647,38 +647,3 @@ $header-transition: 0.2s ease-in-out; } } } - -.notifications { - position: absolute; - z-index: 10; - - $buffer: 0.5em; - - bottom: $buffer; - left: $buffer; - right: $buffer; - - margin-left: auto; - margin-right: auto; - max-width: 50em; - - background: white; - border: 2px solid #428bca; - - &__notification { - display: flex; - } - - $space: 0.25em; - - &__notification-content { - padding: $space 0 $space $space; - } - - &__close { - @include button-reset; - padding: $space; - background: #e1e1db; - cursor: pointer; - } -} diff --git a/ui/frontend/shared.module.css b/ui/frontend/shared.module.css new file mode 100644 index 000000000..23fe1c1ff --- /dev/null +++ b/ui/frontend/shared.module.css @@ -0,0 +1,9 @@ +.-buttonReset { + padding: 0; + border: none; + background: inherit; + background-color: transparent; /* IE 11 */ + font: inherit; + line-height: inherit; + text-align: inherit; +} From f8f0bc1546bdd6341b4a1419edc513be1557b83c Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Thu, 25 Mar 2021 14:29:45 -0400 Subject: [PATCH 19/37] Convert Playground to CSS modules --- ui/frontend/Output.tsx | 8 ++- ui/frontend/Playground.module.css | 97 +++++++++++++++++++++++++++++++ ui/frontend/Playground.tsx | 28 +++++---- ui/frontend/index.scss | 94 ++---------------------------- 4 files changed, 126 insertions(+), 101 deletions(-) create mode 100644 ui/frontend/Playground.module.css diff --git a/ui/frontend/Output.tsx b/ui/frontend/Output.tsx index ae5535e2d..4874adb79 100644 --- a/ui/frontend/Output.tsx +++ b/ui/frontend/Output.tsx @@ -44,7 +44,11 @@ interface PaneWithCodeProps extends SimplePaneProps { code?: string; } -const Output: React.SFC = () => { +interface OutputProps { + isFocused?: boolean; +} + +const Output: React.SFC = ({ isFocused }) => { const somethingToShow = useSelector(selectors.getSomethingToShow); const { meta: { focus }, execute, format, clippy, miri, macroExpansion, assembly, llvmIr, mir, hir, wasm, gist } = useSelector((state: State) => state.output); @@ -93,7 +97,7 @@ const Output: React.SFC = () => { } return ( -
+
* { + /* FIXME: remove this, when the output-rules are 'aware' of the + * orientation (this disables the extra margin-top for the spacing + * between editor and output in the horizontal split mode) + */ + margin-top: -0.2em; + + /* for the border of the editor */ + margin-bottom: 4px; + + /* space between the split */ + margin-left: 0.5em; +} + +.splitVertical > *:first-child { + /* the first child, i.e. the editor has the border already */ + margin-top: 0; + margin-bottom: 0; + margin-left: 0; +} + +@media screen and (min-width: 1600px) { + /* automatic vertical */ + .splitAutomatic > *:first-child { + /* the first child, i.e. the editor has the border already */ + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + } +} + +/* automatic vertical */ +@media screen and (min-width: 1600px) { + .splitAutomatic > * { + /* FIXME: remove this, when the output-rules are 'aware' of the + * orientation (this disables the extra margin-top for the spacing + * between editor and output in the horizontal split mode) + */ + margin-top: -0.2em; + + /* for the border of the editor */ + margin-bottom: 4px; + + /* space between the split */ + margin-left: 0.5em; + } +} + +.editor { + position: relative; + flex: 1 1 auto; + border: 4px solid var(--border-color); + border-radius: 4px; +} + +.outputFocused { + position: relative; + flex: 1 1 auto; +} diff --git a/ui/frontend/Playground.tsx b/ui/frontend/Playground.tsx index c99c1a244..4a14b5ed8 100644 --- a/ui/frontend/Playground.tsx +++ b/ui/frontend/Playground.tsx @@ -7,32 +7,40 @@ import Notifications from './Notifications'; import Output from './Output'; import * as selectors from './selectors'; import State from './state'; +import { Orientation } from './types'; + +import styles from './Playground.module.css'; + +const ORIENTATION_STYLE_MAP = { + [Orientation.Automatic]: styles.splitAutomatic, + [Orientation.Horizontal]: styles.splitHorizontal, + [Orientation.Vertical]: styles.splitVertical, +} const Playground: React.SFC = () => { const showNotifications = useSelector(selectors.anyNotificationsToShowSelector); const focus = useSelector((state: State) => state.output.meta.focus); const splitOrientation = useSelector((state: State) => state.configuration.orientation); - const outputFocused = focus ? 'playground-output-focused' : ''; - const splitClass = 'playground-split'; - const orientation = splitClass + '-' + splitOrientation; + const outputFocused = focus ? styles.outputFocused : ''; + const splitClass = ORIENTATION_STYLE_MAP[splitOrientation]; return (
-
-
+
+
-
-
+
+
-
- +
+
- {showNotifications && } + { showNotifications && }
); }; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index c275fd5d7..0e84f7252 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -29,26 +29,6 @@ body { font-family: $primary-font; } -@mixin split-first-child() { - // the first child, i.e. the editor has the border already - margin-top: 0; - margin-bottom: 0; - margin-left: 0; -} - -@mixin split-all-children() { - // space between the split - margin-left: 0.5em; - - // FIXME: remove this, when the output-rules are 'aware' of the orientation - // (this disables the extra margin-top for the spacing between editor - // and output in the horizontal split mode) - margin-top: -0.2em; - - // for the border of the editor - margin-bottom: 4px; -} - @mixin button-reset { border: none; padding: 0; @@ -67,74 +47,6 @@ body { color: #0000EE; } -.playground { - display: flex; - height: 100vh; - flex-direction: column; - - padding-bottom: 1em; - - &-split { - display: flex; - height: 100%; - - &-automatic { - @media screen and (max-width: 1600px) { - flex-direction: column; - } - - @media screen and (min-width: 1600px) { - flex-direction: row; - } - } - - &-horizontal { - flex-direction: column; - } - - &-vertical { - flex-direction: row; - } - - &-vertical > *:first-child { - @include split-first-child(); - } - - // automatic vertical - &-automatic > *:first-child { - @media screen and (min-width: 1600px) { - @include split-first-child(); - } - } - - &-vertical > * { - @include split-all-children(); - } - - // automatic vertical - &-automatic > * { - @media screen and (min-width: 1600px) { - @include split-all-children(); - } - } - } - - &-editor { - flex: 1 1 auto; - position: relative; - - border: 4px solid $border-color; - border-radius: 4px; - } - - &-output { - &-focused { - flex: 1 1 auto; - position: relative; - } - } -} - @mixin body-monospace { font-size: 0.9em; // http://code.stephenmorley.org/html-and-css/fixing-browsers-broken-monospace-font-handling/ @@ -173,7 +85,7 @@ body { margin-top: 0.2em; - .playground-output-focused & { + &--focused { position: absolute; width: 100%; height: 100%; @@ -647,3 +559,7 @@ $header-transition: 0.2s ease-in-out; } } } + +:root { + --border-color: #{$border-color}; +} From d407d599c8f1894c41b4b01836e253b0eebaa254 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 19:43:33 -0400 Subject: [PATCH 20/37] Allow the editor/output panels to be resized Closes #302 --- ui/frontend/AdvancedEditor.tsx | 17 ++--- ui/frontend/Output.tsx | 8 +-- ui/frontend/Playground.module.css | 101 +++++++++++----------------- ui/frontend/Playground.tsx | 106 ++++++++++++++++++++++++------ ui/frontend/actions.ts | 11 ++++ ui/frontend/index.scss | 10 +-- ui/frontend/index.tsx | 7 ++ ui/frontend/package.json | 1 + ui/frontend/reducers/browser.ts | 26 ++++++++ ui/frontend/reducers/index.ts | 2 + ui/frontend/selectors/index.ts | 31 ++++++++- ui/frontend/types.ts | 2 + ui/frontend/yarn.lock | 15 ++++- 13 files changed, 230 insertions(+), 107 deletions(-) create mode 100644 ui/frontend/reducers/browser.ts diff --git a/ui/frontend/AdvancedEditor.tsx b/ui/frontend/AdvancedEditor.tsx index 35f27b4a9..8ec2af535 100644 --- a/ui/frontend/AdvancedEditor.tsx +++ b/ui/frontend/AdvancedEditor.tsx @@ -1,8 +1,9 @@ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { connect } from 'react-redux'; +import { aceResizeKey } from './selectors'; import State from './state'; -import { CommonEditorProps, Crate, Edition, Focus, PairCharacters, Position, Selection } from './types'; +import { AceResizeKey, CommonEditorProps, Crate, Edition, PairCharacters, Position, Selection } from './types'; type Ace = typeof import('ace-builds'); type AceEditor = import('ace-builds').Ace.Editor; @@ -67,7 +68,7 @@ interface AdvancedEditorProps { selection: Selection; theme: string; crates: Crate[]; - focus?: Focus; + resizeKey?: AceResizeKey; pairCharacters: PairCharacters; } @@ -281,9 +282,9 @@ const AdvancedEditor: React.SFC = props => { // 4. Try to scroll // // Ace doesn't know that we changed the visible area and so - // doesn't recalculate. Knowing if the focus changed is enough - // to force such a recalculation. - useEditorProp(editor, props.focus, useCallback((editor, _focus) => { + // doesn't recalculate. We track factors that lead to this case to + // force such a recalculation. + useEditorProp(editor, props.resizeKey, useCallback((editor, _resizeKey) => { editor.resize(); }, [])); @@ -321,7 +322,7 @@ interface AdvancedEditorAsyncProps { selection: Selection; theme: string; crates: Crate[]; - focus?: Focus; + resizeKey?: AceResizeKey; pairCharacters: PairCharacters; } @@ -462,7 +463,7 @@ interface AdvancedEditorAsyncState { interface PropsFromState { theme: string; keybinding?: string; - focus?: Focus; + resizeKey?: AceResizeKey; autocompleteOnUse: boolean; pairCharacters: PairCharacters; } @@ -474,7 +475,7 @@ const mapStateToProps = (state: State) => { theme, pairCharacters, keybinding: keybinding === 'ace' ? null : keybinding, - focus: state.output.meta.focus, + resizeKey: aceResizeKey(state), autocompleteOnUse: state.configuration.edition === Edition.Rust2018, }; }; diff --git a/ui/frontend/Output.tsx b/ui/frontend/Output.tsx index 4874adb79..ae5535e2d 100644 --- a/ui/frontend/Output.tsx +++ b/ui/frontend/Output.tsx @@ -44,11 +44,7 @@ interface PaneWithCodeProps extends SimplePaneProps { code?: string; } -interface OutputProps { - isFocused?: boolean; -} - -const Output: React.SFC = ({ isFocused }) => { +const Output: React.SFC = () => { const somethingToShow = useSelector(selectors.getSomethingToShow); const { meta: { focus }, execute, format, clippy, miri, macroExpansion, assembly, llvmIr, mir, hir, wasm, gist } = useSelector((state: State) => state.output); @@ -97,7 +93,7 @@ const Output: React.SFC = ({ isFocused }) => { } return ( -
+
* { - /* FIXME: remove this, when the output-rules are 'aware' of the - * orientation (this disables the extra margin-top for the spacing - * between editor and output in the horizontal split mode) - */ - margin-top: -0.2em; +$splitPrimaryDimension: 1fr 12px 1fr; +$splitSecondaryDimension: 1fr; - /* for the border of the editor */ - margin-bottom: 4px; - - /* space between the split */ - margin-left: 0.5em; +.splitRows { + composes: -parent; + grid-template-columns: $splitSecondaryDimension; + grid-template-rows: $splitPrimaryDimension; } -.splitVertical > *:first-child { - /* the first child, i.e. the editor has the border already */ - margin-top: 0; - margin-bottom: 0; - margin-left: 0; +.splitRowsGutter { + composes: -gutter; + cursor: row-resize; + transform: rotate(90deg); } -@media screen and (min-width: 1600px) { - /* automatic vertical */ - .splitAutomatic > *:first-child { - /* the first child, i.e. the editor has the border already */ - margin-top: 0; - margin-bottom: 0; - margin-left: 0; - } +.splitColumns { + composes: -parent; + grid-template-columns: $splitPrimaryDimension; + grid-template-rows: $splitSecondaryDimension; } -/* automatic vertical */ -@media screen and (min-width: 1600px) { - .splitAutomatic > * { - /* FIXME: remove this, when the output-rules are 'aware' of the - * orientation (this disables the extra margin-top for the spacing - * between editor and output in the horizontal split mode) - */ - margin-top: -0.2em; - - /* for the border of the editor */ - margin-bottom: 4px; - - /* space between the split */ - margin-left: 0.5em; - } +.splitColumnsGutter { + composes: -gutter; + cursor: col-resize; } .editor { - position: relative; - flex: 1 1 auto; + composes: -autoSize; border: 4px solid var(--border-color); border-radius: 4px; } -.outputFocused { - position: relative; - flex: 1 1 auto; +.output { + composes: -autoSize; } diff --git a/ui/frontend/Playground.tsx b/ui/frontend/Playground.tsx index 4a14b5ed8..4b312a861 100644 --- a/ui/frontend/Playground.tsx +++ b/ui/frontend/Playground.tsx @@ -1,47 +1,111 @@ -import React from 'react'; -import { useSelector } from 'react-redux'; +import React, { useCallback } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import Split from 'react-split-grid'; import Editor from './Editor'; import Header from './Header'; import Notifications from './Notifications'; import Output from './Output'; import * as selectors from './selectors'; -import State from './state'; import { Orientation } from './types'; +import * as actions from './actions'; import styles from './Playground.module.css'; -const ORIENTATION_STYLE_MAP = { - [Orientation.Automatic]: styles.splitAutomatic, - [Orientation.Horizontal]: styles.splitHorizontal, - [Orientation.Vertical]: styles.splitVertical, +const NoOutput: React.SFC = () => ( +
+); + +const PlainRows: React.SFC = () => ( +
+
+
+
+); + +const PlainColumns: React.SFC = () => ( +
+
+
+
+); + +interface SplitProps { + resizeComplete: () => void; +} + +const SplitRows: React.SFC = ({ resizeComplete }) => ( + ( +
+
+
⣿
+
+
+ )} /> +) + +const SplitColumns: React.SFC = ({ resizeComplete }) => ( + ( +
+
+
⣿
+
+
+ )} /> +) + +const ORIENTATION_PLAIN_MAP = { + [Orientation.Horizontal]: PlainRows, + [Orientation.Vertical]: PlainColumns, +} + +const ORIENTATION_SPLIT_MAP = { + [Orientation.Horizontal]: SplitRows, + [Orientation.Vertical]: SplitColumns, } const Playground: React.SFC = () => { const showNotifications = useSelector(selectors.anyNotificationsToShowSelector); - const focus = useSelector((state: State) => state.output.meta.focus); - const splitOrientation = useSelector((state: State) => state.configuration.orientation); + const somethingToShow = useSelector(selectors.getSomethingToShow); + const isFocused = useSelector(selectors.isOutputFocused); + const orientation = useSelector(selectors.orientation); + + const dispatch = useDispatch(); + const resizeComplete = useCallback(() => dispatch(actions.splitRatioChanged()), [dispatch]); - const outputFocused = focus ? styles.outputFocused : ''; - const splitClass = ORIENTATION_STYLE_MAP[splitOrientation]; + let Foo; + if (!somethingToShow) { + Foo = NoOutput; + } else { + if (isFocused) { + Foo = ORIENTATION_SPLIT_MAP[orientation]; + } else { + Foo = ORIENTATION_PLAIN_MAP[orientation]; + } + } return ( -
+ <>
-
-
- -
-
- -
-
+
{ showNotifications && } -
+ ); }; diff --git a/ui/frontend/actions.ts b/ui/frontend/actions.ts index 8b2e30d2d..a0fdcb4e0 100644 --- a/ui/frontend/actions.ts +++ b/ui/frontend/actions.ts @@ -1,3 +1,4 @@ + import fetch from 'isomorphic-fetch'; import { ThunkAction as ReduxThunkAction } from 'redux-thunk'; import url from 'url'; @@ -121,6 +122,8 @@ export enum ActionType { RequestVersionsLoad = 'REQUEST_VERSIONS_LOAD', VersionsLoadSucceeded = 'VERSIONS_LOAD_SUCCEEDED', NotificationSeen = 'NOTIFICATION_SEEN', + BrowserWidthChanged = 'BROWSER_WIDTH_CHANGED', + SplitRatioChanged = 'SPLIT_RATIO_CHANGED', } const setPage = (page: Page) => @@ -700,6 +703,12 @@ const notificationSeen = (notification: Notification) => export const seenRustSurvey2020 = () => notificationSeen(Notification.RustSurvey2020); +export const browserWidthChanged = (isSmall: boolean) => + createAction(ActionType.BrowserWidthChanged, { isSmall }); + +export const splitRatioChanged = () => + createAction(ActionType.SplitRatioChanged); + function parseChannel(s: string): Channel | null { switch (s) { case 'stable': @@ -852,4 +861,6 @@ export type Action = | ReturnType | ReturnType | ReturnType + | ReturnType + | ReturnType ; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 0e84f7252..9cb455e33 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -55,6 +55,7 @@ body { } .editor { + position: relative; width: 100%; height: 100%; @@ -83,13 +84,8 @@ body { display: flex; flex-direction: column; - margin-top: 0.2em; - - &--focused { - position: absolute; - width: 100%; - height: 100%; - } + width: 100%; + height: 100%; &-tabs { display: flex; diff --git a/ui/frontend/index.tsx b/ui/frontend/index.tsx index 1d015dd99..63e7653c5 100644 --- a/ui/frontend/index.tsx +++ b/ui/frontend/index.tsx @@ -19,6 +19,7 @@ import { performCratesLoad, performVersionsLoad, reExecuteWithBacktrace, + browserWidthChanged, } from './actions'; import { configureRustErrors } from './highlighting'; import localStorage from './local_storage'; @@ -47,6 +48,12 @@ const enhancers = composeEnhancers( ); const store = createStore(playgroundApp, initialState, enhancers); +const z = (evt: MediaQueryList | MediaQueryListEvent) => { store.dispatch(browserWidthChanged(evt.matches)); }; + +const maxWidthMediaQuery = window.matchMedia('(max-width: 1600px)'); +z(maxWidthMediaQuery); +maxWidthMediaQuery.addListener(z); + configureRustErrors({ enableFeatureGate: featureGate => store.dispatch(enableFeatureGate(featureGate)), gotoPosition: (line, col) => store.dispatch(gotoPosition(line, col)), diff --git a/ui/frontend/package.json b/ui/frontend/package.json index 6a71325bd..6f39df5d2 100644 --- a/ui/frontend/package.json +++ b/ui/frontend/package.json @@ -22,6 +22,7 @@ "react-prism": "^4.0.0", "react-redux": "^7.0.0", "react-shadow": "^19.0.2", + "react-split-grid": "^1.0.3", "redux": "^4.0.0", "redux-thunk": "^2.1.0", "regenerator-runtime": "^0.13.2", diff --git a/ui/frontend/reducers/browser.ts b/ui/frontend/reducers/browser.ts new file mode 100644 index 000000000..033306d4a --- /dev/null +++ b/ui/frontend/reducers/browser.ts @@ -0,0 +1,26 @@ +import { Action, ActionType } from '../actions'; + +const DEFAULT: State = { + isSmall: true, + ratioGeneration: 0, +}; + +export type State = { + isSmall: boolean; + ratioGeneration: number; +}; + +export default function code(state = DEFAULT, action: Action): State { + switch (action.type) { + case ActionType.BrowserWidthChanged: + return { ...state, isSmall: action.isSmall }; + case ActionType.SplitRatioChanged: { + let { ratioGeneration } = state; + ratioGeneration++; + return { ...state, ratioGeneration }; + } + + default: + return state; + } +} diff --git a/ui/frontend/reducers/index.ts b/ui/frontend/reducers/index.ts index 32d3224ab..058e8c21c 100644 --- a/ui/frontend/reducers/index.ts +++ b/ui/frontend/reducers/index.ts @@ -1,5 +1,6 @@ import { combineReducers } from 'redux'; +import browser from './browser'; import code from './code'; import configuration from './configuration'; import crates from './crates'; @@ -12,6 +13,7 @@ import selection from './selection'; import versions from './versions'; const playgroundApp = combineReducers({ + browser, code, configuration, crates, diff --git a/ui/frontend/selectors/index.ts b/ui/frontend/selectors/index.ts index 39b3d3c9a..30bbf8a3e 100644 --- a/ui/frontend/selectors/index.ts +++ b/ui/frontend/selectors/index.ts @@ -3,7 +3,7 @@ import { createSelector } from 'reselect'; import * as url from 'url'; import { State } from '../reducers'; -import { Backtrace, Channel, Edition, PrimaryActionAuto, PrimaryActionCore } from '../types'; +import { Backtrace, Channel, Edition, Orientation, PrimaryActionAuto, PrimaryActionCore, AceResizeKey } from '../types'; const codeSelector = (state: State) => state.code; @@ -273,3 +273,32 @@ export const formatRequestSelector = createSelector( editionSelector, (code, edition) => ({ code, edition }), ); + +const focus = (state: State) => state.output.meta.focus; +export const isOutputFocused = createSelector( + focus, + (focus) => !!focus, +); + +const orientationConfig = (state: State) => state.configuration.orientation; +const browserWidthIsSmall = (state: State) => state.browser.isSmall; + +export const orientation = createSelector( + orientationConfig, + browserWidthIsSmall, + (orientation, widthIsSmall) => { + if (orientation == Orientation.Automatic) { + if (widthIsSmall) { return Orientation.Horizontal } else { return Orientation.Vertical } + } else { + return orientation; + } + } +) + +const ratioGeneration = (state: State) => state.browser.ratioGeneration; + +export const aceResizeKey = createSelector( + focus, + ratioGeneration, + (focus, ratioGeneration): AceResizeKey => [focus, ratioGeneration], +) diff --git a/ui/frontend/types.ts b/ui/frontend/types.ts index a21518986..a42df20e1 100644 --- a/ui/frontend/types.ts +++ b/ui/frontend/types.ts @@ -120,3 +120,5 @@ export enum Focus { export enum Notification { RustSurvey2020 = 'rust-survey-2020', } + +export type AceResizeKey = [Focus, number]; diff --git a/ui/frontend/yarn.lock b/ui/frontend/yarn.lock index e63e45dbb..55b94aab8 100644 --- a/ui/frontend/yarn.lock +++ b/ui/frontend/yarn.lock @@ -6408,7 +6408,7 @@ prompts@^2.0.1: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5.8, prop-types@^15.7.2: +prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -6548,6 +6548,14 @@ react-shadow@^19.0.2: humps "^2.0.1" react-use "^15.3.3" +react-split-grid@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/react-split-grid/-/react-split-grid-1.0.3.tgz#f3b7e8a7aee6085870521c7b697b4b9147c46edf" + integrity sha512-iE7R7Ne6KOIstKH4hROG3pwPod3LGJ4TB1P2jmPY2/oYI9+Jw8K7Rj0z7C2ZkfDLgMK2vTc+vpYOkFzr/+eaIg== + dependencies: + prop-types "^15.5.7" + split-grid "^1.0.9" + react-universal-interface@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/react-universal-interface/-/react-universal-interface-0.6.2.tgz#5e8d438a01729a4dbbcbeeceb0b86be146fe2b3b" @@ -7328,6 +7336,11 @@ specificity@^0.4.1: resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== +split-grid@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/split-grid/-/split-grid-1.0.9.tgz#d946e4d6d1767a98d6b1a97b338fc60e1f1bc930" + integrity sha512-D7Tgibf7ksIEZKxmAKbXb7kKFANcXRj9j2VgM097KIr146zMXErt9MIHQeEiRxL+HM7WwkJdDyPTxDDsSVUSBA== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" From 2a2fc966c743704c6041549a9d298b238bd87b7c Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 14:00:31 -0400 Subject: [PATCH 21/37] Convert Header to CSS modules --- tests/spec/features/backtrace_spec.rb | 4 ++-- .../highlighting_error_output_spec.rb | 2 +- .../spec/features/sharing_with_others_spec.rb | 2 +- tests/spec/spec_helper.rb | 4 ++++ ui/frontend/Header.module.css | 21 +++++++++++++++++ ui/frontend/Header.tsx | 6 +++-- ui/frontend/index.scss | 23 ------------------- 7 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 ui/frontend/Header.module.css diff --git a/tests/spec/features/backtrace_spec.rb b/tests/spec/features/backtrace_spec.rb index cdbe498fd..e1160baa1 100644 --- a/tests/spec/features/backtrace_spec.rb +++ b/tests/spec/features/backtrace_spec.rb @@ -13,7 +13,7 @@ context "backtraces are enabled" do before do in_advanced_options_menu { choose 'enabled' } - within('.header') { click_on("Run") } + within(:header) { click_on("Run") } end scenario "a backtrace is shown" do @@ -33,7 +33,7 @@ context "backtraces are disabled" do before do - within('.header') { click_on("Run") } + within(:header) { click_on("Run") } end scenario "the backtrace suggestion is a link" do diff --git a/tests/spec/features/highlighting_error_output_spec.rb b/tests/spec/features/highlighting_error_output_spec.rb index f72729d28..cae7601d6 100644 --- a/tests/spec/features/highlighting_error_output_spec.rb +++ b/tests/spec/features/highlighting_error_output_spec.rb @@ -5,7 +5,7 @@ before do visit '/' editor.set(code) - within('.header') { click_on("Run") } + within(:header) { click_on("Run") } end scenario "errors are highlighted" do diff --git a/tests/spec/features/sharing_with_others_spec.rb b/tests/spec/features/sharing_with_others_spec.rb index 637b3aa25..13e3b1b26 100644 --- a/tests/spec/features/sharing_with_others_spec.rb +++ b/tests/spec/features/sharing_with_others_spec.rb @@ -16,7 +16,7 @@ in_mode_menu { click_on("Release") } in_advanced_options_menu { choose("2018") } - within('.header') { click_on 'Share' } + within(:header) { click_on 'Share' } # Save the links before we navigate away perma_link = find_link("Permalink to the playground")[:href] diff --git a/tests/spec/spec_helper.rb b/tests/spec/spec_helper.rb index 52c9f5670..78359e940 100644 --- a/tests/spec/spec_helper.rb +++ b/tests/spec/spec_helper.rb @@ -65,3 +65,7 @@ Capybara.modify_selector(:link_or_button) do expression_filter(:build_button) {|xpath, name| xpath[XPath.css('.button-menu-item__name').contains(name)] } end + +Capybara.add_selector(:header) do + css { |_id| "[data-test-id = 'header']" } +end diff --git a/ui/frontend/Header.module.css b/ui/frontend/Header.module.css new file mode 100644 index 000000000..8d2f7d061 --- /dev/null +++ b/ui/frontend/Header.module.css @@ -0,0 +1,21 @@ +.container { + display: flex; + padding: 1.25em 0; + font-size: 12px; + + & button:enabled { + cursor: pointer; + } +} + +.set { + margin-right: 0.5em; + + &:last-child { + margin-right: 0; + } +} + +.setChannelMode { + margin-right: auto; +} diff --git a/ui/frontend/Header.tsx b/ui/frontend/Header.tsx index 3c5cea90f..6e74d60ba 100644 --- a/ui/frontend/Header.tsx +++ b/ui/frontend/Header.tsx @@ -15,8 +15,10 @@ import ToolsMenu from './ToolsMenu'; import * as actions from './actions'; import * as selectors from './selectors'; +import styles from './Header.module.css'; + const Header: React.SFC = () => ( -
+
@@ -58,7 +60,7 @@ interface HeaderSetProps { } const HeaderSet: React.SFC = ({ id, children }) => ( -
{children}
+
{children}
); const ExecuteButton: React.SFC = () => { diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 9cb455e33..418ae6fcf 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -229,29 +229,6 @@ $header-accent-border: #bdbdbd; $header-border-radius: 4px; $header-transition: 0.2s ease-in-out; -.header { - display: flex; - font-size: 12px; - - padding: 1.25em 0; - - &__set { - margin-right: 0.5em; - - &:last-child { - margin-right: 0; - } - - &--channel-mode { - margin-right: auto; - } - } - - button:enabled { - cursor: pointer; - } -} - @mixin active-button($bg-dark) { background: linear-gradient($bg-dark, #ededed); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2); From 19b117ff4f73f1b3aed77526a4dc9a652fd273b8 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 14:12:16 -0400 Subject: [PATCH 22/37] Convert MenuItem to CSS modules --- ui/frontend/MenuItem.module.css | 7 +++++++ ui/frontend/MenuItem.tsx | 4 +++- ui/frontend/index.scss | 8 -------- 3 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 ui/frontend/MenuItem.module.css diff --git a/ui/frontend/MenuItem.module.css b/ui/frontend/MenuItem.module.css new file mode 100644 index 000000000..3878db3f6 --- /dev/null +++ b/ui/frontend/MenuItem.module.css @@ -0,0 +1,7 @@ +.container { + margin-bottom: 1em; + + &:last-child { + margin-bottom: 0; + } +} diff --git a/ui/frontend/MenuItem.tsx b/ui/frontend/MenuItem.tsx index cbad1ed87..ae9a61471 100644 --- a/ui/frontend/MenuItem.tsx +++ b/ui/frontend/MenuItem.tsx @@ -1,7 +1,9 @@ import React from 'react'; +import styles from './MenuItem.module.css'; + const MenuItem: React.SFC<{}> = ({ children }) => ( -
{children}
+
{children}
); export default MenuItem; diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 418ae6fcf..bb3966d08 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -381,14 +381,6 @@ $header-transition: 0.2s ease-in-out; } } -.menu-item { - margin-bottom: 1em; - - &:last-child { - margin-bottom: 0; - } -} - @mixin menu-item-title { font-size: 13px; font-weight: 600; From d5b817796f86b3679e745b265c2b6f9158221a07 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 14:24:09 -0400 Subject: [PATCH 23/37] Convert MenuGroup to CSS modules --- ui/frontend/MenuGroup.module.css | 22 ++++++++++++++++++++++ ui/frontend/MenuGroup.tsx | 8 +++++--- ui/frontend/index.scss | 26 +------------------------- 3 files changed, 28 insertions(+), 28 deletions(-) create mode 100644 ui/frontend/MenuGroup.module.css diff --git a/ui/frontend/MenuGroup.module.css b/ui/frontend/MenuGroup.module.css new file mode 100644 index 000000000..a9c81ece7 --- /dev/null +++ b/ui/frontend/MenuGroup.module.css @@ -0,0 +1,22 @@ +.container { + width: 27em; + padding: 0.75em 1em 0 1em; + line-height: normal; + + &:last-child { + padding-bottom: 0.75em; + } +} + +.title { + padding-bottom: 10px; + border-bottom: 1px solid var(--header-main-border); + margin: 0; + font-size: 11px; + font-weight: 700; + text-transform: uppercase; +} + +.content { + padding: 1em 0.25em; +} diff --git a/ui/frontend/MenuGroup.tsx b/ui/frontend/MenuGroup.tsx index 972f70dd7..576fc69c1 100644 --- a/ui/frontend/MenuGroup.tsx +++ b/ui/frontend/MenuGroup.tsx @@ -1,13 +1,15 @@ import React from 'react'; +import styles from './MenuGroup.module.css'; + interface MenuGroupProps { title: string; } const MenuGroup: React.SFC = ({ title, children }) => ( -
-

{title}

-
+
+

{title}

+
{children}
diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index bb3966d08..bd08d9e50 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -356,31 +356,6 @@ $header-transition: 0.2s ease-in-out; } } -.menu-group { - width: 27em; - padding: 0.75em 1em 0 1em; - - &:last-child { - padding-bottom: 0.75em; - } - - line-height: normal; - - &__title { - margin: 0; - - text-transform: uppercase; - font-weight: 700; - font-size: 11px; - padding-bottom: 10px; - border-bottom: 1px solid $header-main-border; - } - - &__content { - padding: 1em 0.25em; - } -} - @mixin menu-item-title { font-size: 13px; font-weight: 600; @@ -527,4 +502,5 @@ $header-transition: 0.2s ease-in-out; :root { --border-color: #{$border-color}; + --header-main-border: #{$header-main-border}; } From c06f375bb0103013ef22aa291fc02102068d5ce8 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 20:09:23 -0400 Subject: [PATCH 24/37] Convert ButtonMenuItem to CSS modules --- tests/spec/spec_helper.rb | 2 +- ui/frontend/ButtonMenuItem.module.css | 16 ++++++++++++++++ ui/frontend/ButtonMenuItem.tsx | 8 +++++--- ui/frontend/index.scss | 19 ++----------------- ui/frontend/shared.module.css | 12 ++++++++++++ 5 files changed, 36 insertions(+), 21 deletions(-) create mode 100644 ui/frontend/ButtonMenuItem.module.css diff --git a/tests/spec/spec_helper.rb b/tests/spec/spec_helper.rb index 78359e940..dbdc820c0 100644 --- a/tests/spec/spec_helper.rb +++ b/tests/spec/spec_helper.rb @@ -63,7 +63,7 @@ Capybara.save_path = "./test-failures" Capybara.modify_selector(:link_or_button) do - expression_filter(:build_button) {|xpath, name| xpath[XPath.css('.button-menu-item__name').contains(name)] } + expression_filter(:build_button) {|xpath, name| xpath[XPath.css('[data-test-id="button-menu-item__name"]').contains(name)] } end Capybara.add_selector(:header) do diff --git a/ui/frontend/ButtonMenuItem.module.css b/ui/frontend/ButtonMenuItem.module.css new file mode 100644 index 000000000..b691a3c08 --- /dev/null +++ b/ui/frontend/ButtonMenuItem.module.css @@ -0,0 +1,16 @@ +.container { + composes: -menuItemFullButton from './shared.module.css'; + + &:hover { + color: var(--header-tint); + } +} + +.name { + composes: -menuItemTitle from './shared.module.css'; + margin: 0; +} + +.description { + margin: 0; +} diff --git a/ui/frontend/ButtonMenuItem.tsx b/ui/frontend/ButtonMenuItem.tsx index e802e47fa..1da72a580 100644 --- a/ui/frontend/ButtonMenuItem.tsx +++ b/ui/frontend/ButtonMenuItem.tsx @@ -2,6 +2,8 @@ import React from 'react'; import MenuItem from './MenuItem'; +import styles from './ButtonMenuItem.module.css'; + type Button = JSX.IntrinsicElements['button']; interface ButtonMenuItemProps extends Button { @@ -10,9 +12,9 @@ interface ButtonMenuItemProps extends Button { const ButtonMenuItem: React.SFC = ({ name, children, ...props }) => ( - ); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index bd08d9e50..f4a68619a 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -369,23 +369,6 @@ $header-transition: 0.2s ease-in-out; user-select: text; } -.button-menu-item { - @include full-menu-button; - - &:hover { - color: $header-tint; - } - - &__name { - @include menu-item-title; - margin: 0; - } - - &__description { - margin: 0; - } -} - .selectable-item { @include full-menu-button; @@ -503,4 +486,6 @@ $header-transition: 0.2s ease-in-out; :root { --border-color: #{$border-color}; --header-main-border: #{$header-main-border}; + --header-transition: #{$header-transition}; + --header-tint: #{$header-tint}; } diff --git a/ui/frontend/shared.module.css b/ui/frontend/shared.module.css index 23fe1c1ff..efbc155e4 100644 --- a/ui/frontend/shared.module.css +++ b/ui/frontend/shared.module.css @@ -7,3 +7,15 @@ line-height: inherit; text-align: inherit; } + +.-menuItemTitle { + font-size: 13px; + font-weight: 600; +} + +.-menuItemFullButton { + composes: -buttonReset; + width: 100%; + transition: color var(--header-transition); + user-select: text; +} From 15e539934466b2577ae3cd00dcef05445250912b Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 20:17:46 -0400 Subject: [PATCH 25/37] Convert SelectableMenuItem to CSS modules --- ui/frontend/SelectableMenuItem.module.css | 42 +++++++++++++++++ ui/frontend/SelectableMenuItem.tsx | 12 +++-- ui/frontend/index.scss | 56 ----------------------- 3 files changed, 49 insertions(+), 61 deletions(-) create mode 100644 ui/frontend/SelectableMenuItem.module.css diff --git a/ui/frontend/SelectableMenuItem.module.css b/ui/frontend/SelectableMenuItem.module.css new file mode 100644 index 000000000..2082a7dfc --- /dev/null +++ b/ui/frontend/SelectableMenuItem.module.css @@ -0,0 +1,42 @@ +.container { + composes: -menuItemFullButton from './shared.module.css'; + + &:hover { + color: var(--header-tint); + } +} + +.selected { + composes: container; + color: var(--header-tint); + font-weight: 600; +} + +.header { + display: flex; + align-items: center; +} + +.name { + composes: -menuItemTitle from './shared.module.css'; +} + +.description { + padding-left: 2em; +} + +.checkmark { + margin-right: 0.5em; + opacity: 0; + transition: opacity 0.15s ease-in-out; +} + +.selected .checkmark, +.selected:hover .checkmark { + opacity: 1; +} + +.container:hover .checkmark { + color: var(--header-tint); + opacity: 0.5; +} diff --git a/ui/frontend/SelectableMenuItem.tsx b/ui/frontend/SelectableMenuItem.tsx index a6e0e82cb..a5dac2519 100644 --- a/ui/frontend/SelectableMenuItem.tsx +++ b/ui/frontend/SelectableMenuItem.tsx @@ -3,6 +3,8 @@ import React from 'react'; import { CheckmarkIcon } from './Icon'; import MenuItem from './MenuItem'; +import styles from './SelectableMenuItem.module.css'; + type Button = JSX.IntrinsicElements['button']; interface SelectableMenuItemProps extends Button { @@ -12,14 +14,14 @@ interface SelectableMenuItemProps extends Button { const SelectableMenuItem: React.SFC = ({ name, selected, children, ...props }) => ( - ); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index f4a68619a..9a061cd6f 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -356,62 +356,6 @@ $header-transition: 0.2s ease-in-out; } } -@mixin menu-item-title { - font-size: 13px; - font-weight: 600; -} - -@mixin full-menu-button { - @include button-reset; - - width: 100%; - transition: color $header-transition; - user-select: text; -} - -.selectable-item { - @include full-menu-button; - - &__header { - display: flex; - align-items: center; - } - - &__name { - @include menu-item-title; - } - - &__description { - padding-left: 2em; - } - - &:hover { - color: $header-tint; - } - - &--selected { - font-weight: 600; - color: $header-tint; - } - - &__checkmark { - margin-right: 0.5em; - - opacity: 0; - transition: opacity 0.15s ease-in-out; - } - - &:hover &__checkmark { - opacity: 0.5; - color: $header-tint; - } - - &--selected &__checkmark, - &--selected:hover &__checkmark { - opacity: 1; - } -} - .config-element { display: flex; align-items: center; From 08e263edb45c0e9e4e67598d3fc2047030afdfbe Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 20:50:23 -0400 Subject: [PATCH 26/37] Convert Loader to CSS modules --- ui/frontend/Loader.module.css | 23 +++++++++++++++++++++++ ui/frontend/Loader.tsx | 10 ++++++---- ui/frontend/index.scss | 25 ------------------------- 3 files changed, 29 insertions(+), 29 deletions(-) create mode 100644 ui/frontend/Loader.module.css diff --git a/ui/frontend/Loader.module.css b/ui/frontend/Loader.module.css new file mode 100644 index 000000000..1fc1354ae --- /dev/null +++ b/ui/frontend/Loader.module.css @@ -0,0 +1,23 @@ +@keyframes loader-fade { + 0% { + opacity: 0; + } + + 75% { + opacity: 1; + } +} + +.dot { + animation: loader-fade 1s; + animation-iteration-count: infinite; + opacity: 0; + + &:nth-child(2) { + animation-delay: 0.2s; + } + + &:nth-child(3) { + animation-delay: 0.4s; + } +} diff --git a/ui/frontend/Loader.tsx b/ui/frontend/Loader.tsx index b78d59022..a604ce7dc 100644 --- a/ui/frontend/Loader.tsx +++ b/ui/frontend/Loader.tsx @@ -1,10 +1,12 @@ import React from 'react'; +import styles from './Loader.module.css'; + const Loader: React.SFC = () => ( -
- ⬤ - ⬤ - ⬤ +
+ ⬤ + ⬤ + ⬤
); diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index 9a061cd6f..f149974be 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -188,31 +188,6 @@ body { } } -@keyframes loader-fade { - 0% { - opacity: 0; - } - 75% { - opacity: 1; - } -} - -.loader { - &-dot { - opacity: 0; - animation: loader-fade 1s; - animation-iteration-count: infinite; - - &:nth-child(2) { - animation-delay: 0.2s; - } - - &:nth-child(3) { - animation-delay: 0.4s; - } - } -} - .language-rust_errors { .warning { color: #f79a06; From 4697dfb2019339d0e1f48476cb61d527da59f9a2 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 20:59:42 -0400 Subject: [PATCH 27/37] Convert PopButton to CSS modules --- ui/frontend/PopButton.module.css | 42 ++++++++++++++++++++++++++++ ui/frontend/PopButton.tsx | 8 ++++-- ui/frontend/index.scss | 48 ++------------------------------ 3 files changed, 49 insertions(+), 49 deletions(-) create mode 100644 ui/frontend/PopButton.module.css diff --git a/ui/frontend/PopButton.module.css b/ui/frontend/PopButton.module.css new file mode 100644 index 000000000..d002c2129 --- /dev/null +++ b/ui/frontend/PopButton.module.css @@ -0,0 +1,42 @@ +$fg-color: #222; +$bg-color: white; +$arrow-size: 10px; +$vertical-border-color: #cacaca; + +.container { + z-index: 10; + + /* Prevents the popper from shifting when adding it to the DOM + * triggers showing the scrollbars. + * https://github.com/FezVrasta/popper.js/issues/457#issuecomment-367692177 + */ + top: 0; + font-size: 12px; + + button:enabled { + cursor: pointer; + } +} + +.arrow { + position: absolute; + border: $arrow-size solid transparent; + margin: $arrow-size; +} + +.container[data-placement^='bottom'] .arrow { + border-top-width: 0; + border-bottom-color: $bg-color; + margin-top: 0; +} + +.content { + border-right: 1px solid $vertical-border-color; + border-bottom: 1px solid var(--header-accent-border); + border-left: 1px solid $vertical-border-color; + margin: $arrow-size; + background: $bg-color; + border-radius: var(--header-border-radius); + box-shadow: 0 1px 4px -2px rgba(0, 0, 0, 0.6), inset 0 1px 0 white; + color: $fg-color; +} diff --git a/ui/frontend/PopButton.tsx b/ui/frontend/PopButton.tsx index eca625589..b4307b336 100644 --- a/ui/frontend/PopButton.tsx +++ b/ui/frontend/PopButton.tsx @@ -2,6 +2,8 @@ import React, { useCallback, useRef, useState, useEffect } from 'react'; import { Manager, Popper, Reference } from 'react-popper'; import { Portal } from 'react-portal'; +import styles from './PopButton.module.css'; + const POPPER_MODIFIERS = [ // Issue #303 { name: 'computeStyles', options: { gpuAcceleration: false } }, @@ -47,17 +49,17 @@ const PopButton: React.SFC = ({ Button, Menu }) => { {({ ref, style, arrowProps, placement }) => (
-
+
diff --git a/ui/frontend/index.scss b/ui/frontend/index.scss index f149974be..645db5102 100644 --- a/ui/frontend/index.scss +++ b/ui/frontend/index.scss @@ -285,52 +285,6 @@ $header-transition: 0.2s ease-in-out; } } -.popper { - z-index: 10; - font-size: 12px; - - // Prevents the popper from shifting when adding it to the DOM - // triggers showing the scrollbars. - // https://github.com/FezVrasta/popper.js/issues/457#issuecomment-367692177 - top: 0; - - $fg-color: #222; - $bg-color: white; - $arrow-size: 10px; - $vertical-border-color: #cacaca; - - &__arrow { - position: absolute; - margin: $arrow-size; - border: $arrow-size solid transparent; - } - - &[data-placement^="bottom"] &__arrow { - margin-top: 0; - border-top-width: 0; - border-bottom-color: $bg-color; - } - - &__content { - background: $bg-color; - color: $fg-color; - - margin: $arrow-size; - - border-radius: $header-border-radius; - - box-shadow: 0 1px 4px -2px rgba(0, 0, 0, 0.6), inset 0 1px 0px white; - - border-left: 1px solid $vertical-border-color; - border-right: 1px solid $vertical-border-color; - border-bottom: 1px solid $header-accent-border; - } - - button:enabled { - cursor: pointer; - } -} - .config-element { display: flex; align-items: center; @@ -407,4 +361,6 @@ $header-transition: 0.2s ease-in-out; --header-main-border: #{$header-main-border}; --header-transition: #{$header-transition}; --header-tint: #{$header-tint}; + --header-border-radius: #{$header-border-radius}; + --header-accent-border: #{$header-accent-border}; } From 0d2b0f897148900bd1a031ac532075afb7780b20 Mon Sep 17 00:00:00 2001 From: Jake Goulding Date: Sat, 27 Mar 2021 21:24:37 -0400 Subject: [PATCH 28/37] Convert Editor to CSS modules --- tests/spec/features/assistance_spec.rb | 12 +++--------- tests/spec/features/tools_spec.rb | 4 +--- tests/spec/support/editor.rb | 4 ++-- ui/frontend/AdvancedEditor.tsx | 4 +++- ui/frontend/Editor.module.css | 14 ++++++++++++++ ui/frontend/Editor.tsx | 6 ++++-- ui/frontend/Playground.module.css | 13 +++---------- ui/frontend/index.scss | 23 ----------------------- ui/frontend/shared.module.css | 15 +++++++++++++++ 9 files changed, 45 insertions(+), 50 deletions(-) create mode 100644 ui/frontend/Editor.module.css diff --git a/tests/spec/features/assistance_spec.rb b/tests/spec/features/assistance_spec.rb index 76788ed9f..07be4f84f 100644 --- a/tests/spec/features/assistance_spec.rb +++ b/tests/spec/features/assistance_spec.rb @@ -17,9 +17,7 @@ click_on("add a main function") end - within('.editor') do - expect(editor).to have_line 'println!("Hello, world!")' - end + expect(editor).to have_line 'println!("Hello, world!")' end scenario "using an unstable feature offers adding the feature flag" do @@ -33,9 +31,7 @@ click_on("add `#![feature(abi_avr_interrupt)]`") end - within('.editor') do - expect(editor).to have_line '#![feature(abi_avr_interrupt)]' - end + expect(editor).to have_line '#![feature(abi_avr_interrupt)]' end scenario "using a type that hasn't been imported offers importing it" do @@ -48,9 +44,7 @@ click_on("use std::collections::HashMap;") end - within('.editor') do - expect(editor).to have_line 'use std::collections::HashMap;' - end + expect(editor).to have_line 'use std::collections::HashMap;' end scenario "triggering a panic offers enabling backtraces" do diff --git a/tests/spec/features/tools_spec.rb b/tests/spec/features/tools_spec.rb index e95237dfe..a9f578f24 100644 --- a/tests/spec/features/tools_spec.rb +++ b/tests/spec/features/tools_spec.rb @@ -13,9 +13,7 @@ editor.set 'fn main() { [1,2,3,4]; }' in_tools_menu { click_on("Rustfmt") } - within('.editor') do - expect(editor).to have_line '[1, 2, 3, 4];' - end + expect(editor).to have_line '[1, 2, 3, 4];' end scenario "linting code with Clippy" do diff --git a/tests/spec/support/editor.rb b/tests/spec/support/editor.rb index 5cfb34277..c3e7ab364 100644 --- a/tests/spec/support/editor.rb +++ b/tests/spec/support/editor.rb @@ -5,7 +5,7 @@ def initialize(page) end def set(text) - page.within('.editor .ace_text-input', visible: :any) do + page.within('.ace_text-input', visible: :any) do page.execute_script <<~JS window.rustPlayground.setCode(#{text.to_json}); JS @@ -17,7 +17,7 @@ def has_line?(text) end def has_highlighted_text?(text) - page.within('.editor .ace_text-input', visible: :any) do + page.within('.ace_text-input', visible: :any) do selected = page.evaluate_script <<~JS (() => { const editor = document.querySelector('.ace_editor').env.editor; diff --git a/ui/frontend/AdvancedEditor.tsx b/ui/frontend/AdvancedEditor.tsx index 8ec2af535..0ba0a9cef 100644 --- a/ui/frontend/AdvancedEditor.tsx +++ b/ui/frontend/AdvancedEditor.tsx @@ -5,6 +5,8 @@ import { aceResizeKey } from './selectors'; import State from './state'; import { AceResizeKey, CommonEditorProps, Crate, Edition, PairCharacters, Position, Selection } from './types'; +import styles from './Editor.module.css'; + type Ace = typeof import('ace-builds'); type AceEditor = import('ace-builds').Ace.Editor; type AceCompleter = import('ace-builds').Ace.Completer; @@ -289,7 +291,7 @@ const AdvancedEditor: React.SFC = props => { }, [])); return ( -
+
); }; diff --git a/ui/frontend/Editor.module.css b/ui/frontend/Editor.module.css new file mode 100644 index 000000000..365a1bdfa --- /dev/null +++ b/ui/frontend/Editor.module.css @@ -0,0 +1,14 @@ +.container { + composes: -autoSize from './shared.module.css'; + position: relative; +} + +.advanced { + composes: -bodyMonospace -autoSize from './shared.module.css'; + position: absolute; +} + +.simple { + composes: advanced; + border: none; +} diff --git a/ui/frontend/Editor.tsx b/ui/frontend/Editor.tsx index 400410dac..12f4003db 100644 --- a/ui/frontend/Editor.tsx +++ b/ui/frontend/Editor.tsx @@ -6,6 +6,8 @@ import AdvancedEditor from './AdvancedEditor'; import { CommonEditorProps, Editor as EditorType, Position, Selection } from './types'; import { State } from './reducers'; +import styles from './Editor.module.css'; + class CodeByteOffsets { readonly code: string; readonly lines: string[]; @@ -61,7 +63,7 @@ class SimpleEditor extends React.PureComponent { return (