From 401706d8d5e226a1b35a2e86cf991eabf8513742 Mon Sep 17 00:00:00 2001 From: Lua MacDougall Date: Sat, 7 May 2022 19:05:37 -0700 Subject: [PATCH] Implemented website UI --- .dockerignore | 6 + .gitignore | 7 + Dockerfile | 8 +- server/main.go | 26 +- website/.editorconfig | 15 + website/package-lock.json | 4188 +++++++++++++++++ website/package.json | 18 + .../src/assets/favicon/favicon-128x128.png | Bin 0 -> 2148 bytes website/src/assets/favicon/favicon-16x16.png | Bin 0 -> 430 bytes website/src/assets/favicon/favicon-24x24.png | Bin 0 -> 598 bytes website/src/assets/favicon/favicon-32x32.png | Bin 0 -> 726 bytes website/src/assets/favicon/favicon-48x48.png | Bin 0 -> 969 bytes website/src/assets/favicon/favicon-64x64.png | Bin 0 -> 1236 bytes website/src/assets/favicon/favicon.ico | Bin 0 -> 14846 bytes website/src/assets/favicon/favicon.svg | 72 + website/src/assets/style.css | 93 + website/src/assets/svg-heart.svg | 4 + website/src/assets/svg-loading-spinner.svg | 3 + website/src/assets/svg-loading.svg | 3 + website/src/assets/svg-placeholder.svg | 7 + website/src/assets/vikkie.png | Bin 0 -> 9181 bytes website/src/index.html | 104 + website/src/scripts/api.d.ts | 36 + website/src/scripts/api.js | 24 + website/src/scripts/index.js | 446 ++ 25 files changed, 5052 insertions(+), 8 deletions(-) create mode 100644 .gitignore create mode 100644 website/.editorconfig create mode 100644 website/package-lock.json create mode 100644 website/package.json create mode 100644 website/src/assets/favicon/favicon-128x128.png create mode 100644 website/src/assets/favicon/favicon-16x16.png create mode 100644 website/src/assets/favicon/favicon-24x24.png create mode 100644 website/src/assets/favicon/favicon-32x32.png create mode 100644 website/src/assets/favicon/favicon-48x48.png create mode 100644 website/src/assets/favicon/favicon-64x64.png create mode 100644 website/src/assets/favicon/favicon.ico create mode 100644 website/src/assets/favicon/favicon.svg create mode 100644 website/src/assets/style.css create mode 100644 website/src/assets/svg-heart.svg create mode 100644 website/src/assets/svg-loading-spinner.svg create mode 100644 website/src/assets/svg-loading.svg create mode 100644 website/src/assets/svg-placeholder.svg create mode 100644 website/src/assets/vikkie.png create mode 100644 website/src/index.html create mode 100644 website/src/scripts/api.d.ts create mode 100644 website/src/scripts/api.js create mode 100644 website/src/scripts/index.js diff --git a/.dockerignore b/.dockerignore index 68f9f66..9527dc7 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,5 +2,11 @@ **/.gitignore **/.dockerignore **/.editorconfig +**/node_modules + +core/build +server/main +website/.parcel-cache +website/dist Dockerfile diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..96b7156 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +**/.vscode +**/node_modules + +core/build +server/main +website/.parcel-cache +website/dist diff --git a/Dockerfile b/Dockerfile index 32fae2c..10cb9d3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,10 @@ FROM archlinux:base-devel -RUN pacman -Syu --noconfirm go meson libvips +RUN pacman -Syu --noconfirm nodejs-lts-gallium npm go meson libvips COPY ./core /app/build/core COPY ./server /app/build/server +COPY ./website /app/build/website WORKDIR /app/build/core RUN meson build && cd build && meson compile @@ -11,6 +12,8 @@ RUN meson build && cd build && meson compile WORKDIR /app/build/server RUN go build -o gifspin-server main.go +WORKDIR /app/build/website +RUN npm ci && npm run build FROM archlinux:base @@ -18,7 +21,8 @@ RUN pacman -Syu --noconfirm libvips COPY --from=0 /app/build/core/build/gifspin-core /app/bin/gifspin-core COPY --from=0 /app/build/server/gifspin-server /app/bin/gifspin-server +COPY --from=0 /app/build/website/dist /app/public -RUN mkdir -p /app/public /data +RUN mkdir -p /data CMD ["/app/bin/gifspin-server"] diff --git a/server/main.go b/server/main.go index 2545518..c3fdc6e 100644 --- a/server/main.go +++ b/server/main.go @@ -251,7 +251,7 @@ func nanoid() string { return nanoidEncode.EncodeToString(b) } -var replaceUnsafePattern = regexp.MustCompile("[a-zA-Z0-9.~_-]") +var replaceUnsafePattern = regexp.MustCompile("[^a-zA-Z0-9.~_-]") func replaceUnsafe(s string) string { return replaceUnsafePattern.ReplaceAllString(s, "_") @@ -311,7 +311,7 @@ func sendError(res http.ResponseWriter, err error) { } func sendErrorMessage(res http.ResponseWriter, status int, message string) { - res.Header().Set("X-Error", message) + res.Header().Set("X-Spin-Error", message) sendJSON(res, status, map[string]string{"err": message}) } @@ -352,6 +352,8 @@ func handleUpload(res http.ResponseWriter, req *http.Request) { token := generateTokenInput(extension) + res.Header().Set("X-Spin-Token", token) + var err error tempPath := getPathFromToken(settings.PathTemp, token) @@ -382,12 +384,24 @@ func handleSpin(res http.ResponseWriter, req *http.Request) { } tokenOutput = generateTokenOutput(tokenInput) - ctx := req.Context() + pathInput := getPathFromToken(settings.PathTemp, tokenInput) + pathOutput := getPathFromToken(settings.PathTemp, tokenOutput) - body := newContextReader(http.MaxBytesReader(res, req.Body, 65536), ctx) + res.Header().Set("X-Spin-Token", tokenInput) + res.Header().Set("X-Spin-TokenOutput", tokenOutput) var err error + _, err = os.Stat(pathInput) + if errors.Is(err, os.ErrNotExist) { + sendErrorMessage(res, http.StatusNotFound, "query parameter \"file\" not found") + return + } + + ctx := req.Context() + + body := newContextReader(http.MaxBytesReader(res, req.Body, 65536), ctx) + var opts *CompositeOptions var task *CompositeTask @@ -405,8 +419,8 @@ func handleSpin(res http.ResponseWriter, req *http.Request) { task = new(CompositeTask) task.Options = opts - task.PathInput = getPathFromToken(settings.PathTemp, tokenInput) - task.PathOutput = getPathFromToken(settings.PathTemp, tokenOutput) + task.PathInput = pathInput + task.PathOutput = pathOutput task.PathBinary = settings.PathBinary err = dispatch.Execute(ctx, task) diff --git a/website/.editorconfig b/website/.editorconfig new file mode 100644 index 0000000..54013ba --- /dev/null +++ b/website/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf + +indent_size = 4 +indent_style = space + +insert_final_newline = true +trim_trailing_whitespace = true + +[*.html] +indent_size = 2 +indent_style = space diff --git a/website/package-lock.json b/website/package-lock.json new file mode 100644 index 0000000..68e489e --- /dev/null +++ b/website/package-lock.json @@ -0,0 +1,4188 @@ +{ + "name": "gifsave-website", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "gifsave-website", + "version": "0.0.0", + "dependencies": { + "@fontsource/noto-sans": "^4.5.9", + "@picocss/pico": "^1.5.0", + "patella": "^2.2.2" + }, + "devDependencies": { + "parcel": "^2.5.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@fontsource/noto-sans": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-4.5.9.tgz", + "integrity": "sha512-T/5WYsgKV14CGOtE1mTG5D/kyvgn1Vjn8sd2cYRH+J4ZFin2Tc9xRWEtu2DocDfiiI1e9B10LdSf8NN2+sxlKg==" + }, + "node_modules/@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.0" + } + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@parcel/bundler-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.5.0.tgz", + "integrity": "sha512-7CJzE17SirCXjcRgBcnqWO/5EOA1raq/3OIKtT4cxbjpDQGHZpjpEEZiMNRpEpdNMxDSlsG8mAkXTYGL2VVWRw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.5.0.tgz", + "integrity": "sha512-3kOO3cZQv0FAKhrMHGLdb4Qtzpmy78Q6jPN3u8eCY4yqeDTnyQBZvWNHoyCm5WlmL8y6Q6REYMbETLxSH1ggAQ==", + "dev": true, + "dependencies": { + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/utils": "2.5.0", + "lmdb": "2.2.4" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.5.0.tgz", + "integrity": "sha512-qafqL8Vu2kr932cCWESoDEEoAeKVi7/xdzTBuhzEJng1AfmRT0rCbt/P4ao3RjiDyozPSjXsHOqM6GDZcto4eQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.5.0.tgz", + "integrity": "sha512-I5Zs+2f1ue4sTPdfT8BNsLfTZl48sMWLk2Io3elUJjH/SS9kO7ut5ChkuJtt77ZS35m0OF+ZCt3ICTJdnDG8eA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.5.0.tgz", + "integrity": "sha512-r30V61958SONvP9I8KV8s44ZOFq0H219VyFjPysraSabHjZ+KMaCTQOuqaDtUMa272sHUQkBcZxKYj5jYPJlZg==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.5.0", + "@parcel/compressor-raw": "2.5.0", + "@parcel/namer-default": "2.5.0", + "@parcel/optimizer-css": "2.5.0", + "@parcel/optimizer-htmlnano": "2.5.0", + "@parcel/optimizer-image": "2.5.0", + "@parcel/optimizer-svgo": "2.5.0", + "@parcel/optimizer-terser": "2.5.0", + "@parcel/packager-css": "2.5.0", + "@parcel/packager-html": "2.5.0", + "@parcel/packager-js": "2.5.0", + "@parcel/packager-raw": "2.5.0", + "@parcel/packager-svg": "2.5.0", + "@parcel/reporter-dev-server": "2.5.0", + "@parcel/resolver-default": "2.5.0", + "@parcel/runtime-browser-hmr": "2.5.0", + "@parcel/runtime-js": "2.5.0", + "@parcel/runtime-react-refresh": "2.5.0", + "@parcel/runtime-service-worker": "2.5.0", + "@parcel/transformer-babel": "2.5.0", + "@parcel/transformer-css": "2.5.0", + "@parcel/transformer-html": "2.5.0", + "@parcel/transformer-image": "2.5.0", + "@parcel/transformer-js": "2.5.0", + "@parcel/transformer-json": "2.5.0", + "@parcel/transformer-postcss": "2.5.0", + "@parcel/transformer-posthtml": "2.5.0", + "@parcel/transformer-raw": "2.5.0", + "@parcel/transformer-react-refresh-wrap": "2.5.0", + "@parcel/transformer-svg": "2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.5.0.tgz", + "integrity": "sha512-dygDmPsfAYJKTnUftcbEzjCik7AAaPbFvJW8ETYz8diyjkAG9y6hvCAZIrJE5pNOjFzg32en4v4UWv8Sqlzl9g==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/graph": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.8.2.tgz", + "integrity": "sha512-3vTyKHy2LnZ3YJEut+UQPVIxsaY/mdGk7cDXtmvH4xR48Pd6rYzChHCMl4Ru2DUkCBpr0KCQRPZTdYcsJhUmIA==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/css-darwin-arm64": "1.8.2", + "@parcel/css-darwin-x64": "1.8.2", + "@parcel/css-linux-arm-gnueabihf": "1.8.2", + "@parcel/css-linux-arm64-gnu": "1.8.2", + "@parcel/css-linux-arm64-musl": "1.8.2", + "@parcel/css-linux-x64-gnu": "1.8.2", + "@parcel/css-linux-x64-musl": "1.8.2", + "@parcel/css-win32-x64-msvc": "1.8.2" + } + }, + "node_modules/@parcel/css-darwin-arm64": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.8.2.tgz", + "integrity": "sha512-p5etxX3kPCuEQcipjqH9yc5j0x5/Yc++uB4MvG/sFbRgL2gI2zUuRo9sIgqA21boOP8lE4bQgz1ovPD/W1hj+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-darwin-x64": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.8.2.tgz", + "integrity": "sha512-c3xi5DXRZYec5db4KPTxp69eHbomOuasgZNiuPPOi80k7jlOwfzCFQs0h6/KwWvTcJrKEFsLl8BKJU/aX7mETw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm-gnueabihf": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.8.2.tgz", + "integrity": "sha512-+ih3+mMpwbwtOjr/XW5pP0frsV1PMN+Qz7jCAM84h8xX+8UE/1IR0UVi3EPa8wQiIlcVcEwszQ1MV2UHacvo/A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm64-gnu": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.8.2.tgz", + "integrity": "sha512-jIoyXbjJ1trUHXtyJhi3hlF1ck6xM4CDyaY5N6eN+3+ovkdw6wxog9IiheYJ1jf9ellYevLvTF5kiYE9MiP04A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-arm64-musl": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.8.2.tgz", + "integrity": "sha512-QVTc5a+HatoywIei3djKYmp3s5dbI2Q3QaYZf3gqhyjOkeC7bm6j5eeNzFO+wa5xtga5jdHkIuTRrJ/wCojKKw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-x64-gnu": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.8.2.tgz", + "integrity": "sha512-9r2tSfa6i3ZQ3a6C9XufJWuTv3LB7JYzxzEqsI35SSA8D/DrfAHMaIhqog5wSxKZRWmQxckh2wdT96eIIGHSGA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-linux-x64-musl": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.8.2.tgz", + "integrity": "sha512-5SetLWkxXRQ3NU6QwwbGf9tOmGW2m1cGt07Moybbe4RCXOY6R5wAYUtauZUp7pD/fJlE9mHge4jnNHKpVO9pvw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/css-win32-x64-msvc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.8.2.tgz", + "integrity": "sha512-/EdW5Ejlnkvc/AYrAi/FmLNvM6a6eAx+A4Y7oW+8JSMvk6bYa2zmXi7XLU/QOQuH2VQa/3gIIMA+sYjPndvDpw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.5.0.tgz", + "integrity": "sha512-KiMGGRpEV7wl5gjcxBKcgX84a+cG+IEn94gwy5LK3lENR09nuKShqqgKGAmj/17CobJgw1QNP94/H4Md+oxIWg==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.5.0.tgz", + "integrity": "sha512-Gc2LPwL1H34Ony5MENbKZg7wvCscZ4x9y7Fu92sfbdWpLo3K13hVtsX3TMIIgYt3B7R7OmO8yR880U2T+JfVkQ==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.5.0.tgz", + "integrity": "sha512-YYr14BWtx/bJ+hu6PPQQ6G/3omOTWgVqEw+UFI3iQH3P6+e0LRXW/Ja1yAcJeepGcTwIP0opnXZBQOm8PBQ2SA==", + "dev": true, + "dependencies": { + "@parcel/fs-search": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/watcher": "^2.0.0", + "@parcel/workers": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/fs-search": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.5.0.tgz", + "integrity": "sha512-uBONkz9ZCNSOqbPGWJY3MNl+pqBTfvzHH9+4UhzHEHPArvK2oD0+syYPVE60+zGrxybXTESYMCJp4bHvH6Z2hA==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/graph": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.5.0.tgz", + "integrity": "sha512-qa2VtG08dJyTaWrxYAkMIlkoDRSPoiqLDNxxHKplkcxAjXBUw0/AkWaz82VO5r1G6jfOj+nM30ajH9uygZYwbw==", + "dev": true, + "dependencies": { + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/hash": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.5.0.tgz", + "integrity": "sha512-47JL0XpB7UvIW6Ijf8vv+yVMt9dLvB/lRlBHFmAkmovisueVMVbYD7smxVZnCSehD8UH8BcymKbMzyL5dimgoQ==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.5.0.tgz", + "integrity": "sha512-pT1L3ceH6trL1N3I3r2HawPjz/PCubOo/Kazu7IeXsMsKVjj1a6AeieZHzkNZIbhiGPtm/cHbBNLz2zTWDLeOA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.5.0.tgz", + "integrity": "sha512-ixkNF3KWIqxMlfxTe9Gb2cp/uNmklQev8VEUxujMVxmUfGyQs4859zdJIQlIinabWYhArhsXATkVf3MzCUN6TQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.5.0.tgz", + "integrity": "sha512-ahGQqHJzsWE5Qux8zXMAU+lyNBOl+ZpcOFzRGE2DWOsmAlytsHl7DBVCQvzUyNBFg1/HmIj+7D4efv2kjR7rTg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.5.0.tgz", + "integrity": "sha512-XQvpguiIwQcu75cscLDFOVhjsjuPzXbuMaaZ7XxxUEl0PscIgu/GfKYxTfTruN3cRl+CaQH6qBAMfjLaFng6lQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.5.0.tgz", + "integrity": "sha512-J00bLF+4SsnKc+YbYrNuBr44/zz3cg++CoXteXhH27PxP1rScGQx36Rui8WORgil5mlX2VYN79DuqJC7V3Ynbg==", + "dev": true, + "dependencies": { + "@parcel/css": "^1.8.1", + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.5.0.tgz", + "integrity": "sha512-Fr0zPqgxoNaOVdROAjNGDWCts3+wByNQ82Mxhu8Tzc25A2cPjcr1H2sa/TE3hf79c92DxdKf2FaC1ZOgR5YPdg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.5.0.tgz", + "integrity": "sha512-nbo2pdnAt21WLGjzTpsE8ZEL0xNoP7c3wBj9y70Pysmasg1SrRVCbfE8jTy+lHBQwq2yjC6lV/Usv+9lfA7S/w==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-svgo": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.5.0.tgz", + "integrity": "sha512-pgZqwU0RLc/wr4WcQY/W1GJmddnEANDEpz1mdppUOqBz1EfTQ7zh5NgUA3hV1i05Hbecp3mHSvXJPV0mhNOl5Q==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-terser": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.5.0.tgz", + "integrity": "sha512-PZ3UHBGfjE49/Jloopsd38Hxg4qzsrdepWP53mCuVP7Aw605Y4QtYuB1ho3VV0oXfKQVq+uI7lVIBsuW4K6vqA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.5.0.tgz", + "integrity": "sha512-zTuF55/lITUjw9dUU/X0HiF++589xbPXw/zUiG9T6s8BQThLvrxAhYP89S719pw7cTqDimGkTxnIuK+a0djEkg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.5.0.tgz", + "integrity": "sha512-c0mGBFdVSPhAxaX3+zN8KEIqOOUhkIPKbZex1pnGYfy03Qe2/Mb4nyt5DAGlw9gjka1UCHIN/wszLmKC8YyUeg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.5.0.tgz", + "integrity": "sha512-ZFGUPRMWKrm8kQHdkEJ5S22C05qpSymx+o+57EfuNjCrGyj3M59WyGYYXYJ175bFYZ/jp5yy+VxMh6fZefe+Pw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.5.0.tgz", + "integrity": "sha512-aJAKOTgXdxO3V9O7+2DCVOtne128WwXmUAOVThnMRo7f3zMVSAR7Mxc9pEsuTzPfj8UBXgFBRfdJUSCgsMxiSw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.5.0.tgz", + "integrity": "sha512-aHV0oogeiqxhxS1lsttw15EvG3DDWK3FV7+F+7hoaAy+xg89K56NTp6j43Jtw9iyU1/HnZRGBE2hF3C7N73oKw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.5.0.tgz", + "integrity": "sha512-XSMFn30K/kpjcPpQqt88GmPJsNUSVL3RNeigXkIAcLpfO6Tb2eV4iOt4yVCagaDrRJ19alXut0TxjMm5bm41/g==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.5.0.tgz", + "integrity": "sha512-obtb6/Gql6YFQ86bdv75A2Noabx8679reFZeyfKKf0L7Lppx4DFQetXwM9XVy7Gx6hJ1Ekm3UMuuIyVJk33YHQ==", + "dev": true, + "dependencies": { + "@parcel/types": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.5.0.tgz", + "integrity": "sha512-miJt2YbRJBmYSVeoUWUj8YL85Pwj1CmGQB0/btqhulGLH/Fvkbv6T4sJ4gl4l5xIt9mJQsZ70pOWwa8BId3rWw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.5.0.tgz", + "integrity": "sha512-wvxAiW42AxJ3B8jtvowJcP4/cTV8zY48SfKg61YKYu1yUO+TtyJIjHQzDW2XuT34cIGFY97Gr0i+AVu44RyUuQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.5.0.tgz", + "integrity": "sha512-39PkZpVr/+iYS11u+lA84vIsKm/yisltTVmUjlYsDnExiuV1c8OSbSdYZ3JMx+7CYPE0bWbosX2AGilIwIMWpQ==", + "dev": true, + "dependencies": { + "@parcel/node-resolver-core": "2.5.0", + "@parcel/plugin": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.5.0.tgz", + "integrity": "sha512-oPAo8Zf06gXCpt41nyvK7kv2HH1RrHAGgOqttyjStwAFlm5MZKs7BgtJzO58LfJN8g3sMY0cNdG17fB/4f8q6Q==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.5.0.tgz", + "integrity": "sha512-gPC2PbNAiooULP71wF5twe4raekuXsR1Hw/ahITDoqsZdXHzG3CkoCjYL3CkmBGiKQgMMocCyN1E2oBzAH8Kyw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.5.0.tgz", + "integrity": "sha512-+8RuDKFdFYIQTrXG4MRhG9XqkkYEHn0zxKyOJ/IkDDfSEhY0na+EyhrneFUwIvDX63gLPkxceXAg0gwBqXPK/Q==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.5.0.tgz", + "integrity": "sha512-STuDlU0fPXeWpAmbayY7o04F0eHy6FTOFeT5KQ0PTxtdEa3Ey8QInP/NVE52Yv0aVQtesWukGrNEFCERlkbFRw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.0.2.tgz", + "integrity": "sha512-NnUrPYLpYB6qyx2v6bcRPn/gVigmGG6M6xL8wIg/i0dP1GLkuY1nf+Hqdf63FzPTqqT7K3k6eE5yHPQVMO5jcA==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.5.0.tgz", + "integrity": "sha512-EFb866C9jCoBHIcebWF7goAcYj1wkObx0GDxshlazFtvym1RM27xSWWjRYyqb5+HNOxB3voaNvQOVjcD+DXjCA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.5.0.tgz", + "integrity": "sha512-p8FOvKWWSbS6H8PbD9a0KZqyaKNpSD2BUTzSRYnNj3TBUv7/ZXaP6Om295XTQ/MPht1o7XTQzvfpF/7yEhr02Q==", + "dev": true, + "dependencies": { + "@parcel/css": "^1.8.1", + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.5.0.tgz", + "integrity": "sha512-iEjNyAF0wQmY3DMw7FS+UzoOMng76UsSngh+WWA1E5lv5XyqrP8Mk2QLTJp1nWetUhSLhZr58LGmPYBTB4l9ZQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.5.0.tgz", + "integrity": "sha512-vVEXTHZl8m/9yopgK0dWHLOQX2zOnghq6pZnWdWVG6fsvXZln7kP1YN5iwWDoADQYkiKzP+Ymn6UwP9pZpHFzA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/workers": "2.5.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.5.0.tgz", + "integrity": "sha512-Cp8Ic+Au3OcskCRZszmo47z3bqcZ7rfPv2xZYXpXY2TzEc3IV0bKje57bZektoY8LW9LkYM9iBO/WhkVoT6LIg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "@swc/helpers": "^0.3.6", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.5.0.tgz", + "integrity": "sha512-661sByA7TkR6Lmxt+hqV4h2SAt+7lgc58DzmUYArpEl1fQnMuQuaB0kQeHzi6fDD2+2G6o7EC+DuwBZKa479TA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.5.0.tgz", + "integrity": "sha512-IPNlWElekdQHMTBqhdwJNBCQomuYyo7xgNBdnTrt9VJ+R5ihy6n7ZJSWIAJXAH9VZxETTtunfrzRtgkmtjTeZQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.5.0.tgz", + "integrity": "sha512-AZxg1XD8OXOS4bEGEmBBR+X9T9qoFdVsbVUg498zzejYSka1ZQHF7TgLI/+pUnE+ZVYNIp7/G0xXqsRVKMKmdQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.5.0.tgz", + "integrity": "sha512-I3zjE1u9+Wj90Qqs1V2FTm6iC6SAyOVUthwVZkZey+qbQG/ok682Ez2XjLu7MyQCo9BJNwF/nfOa1hHr3MaJEQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.5.0.tgz", + "integrity": "sha512-VPqVBxhTN4OQwcjsdyxrv+smjAm4s6dbSWAplgPwdOITMv+a0tjhhJU37WnRC+xxTrbEqRcOt96JvGOkPb8i7g==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.5.0.tgz", + "integrity": "sha512-zCGJcrCpICFe0Q/dgjQZfW7sYFkbJEC7NGT4zEJnMo8Cm/kq8Qh6+2ApX6c+vv5Q0WZn5Ic+N0OvxIMkvgdC/w==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.5.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.5.0.tgz", + "integrity": "sha512-bA0fhG6aXSGYEVo5Dt96x6lseUQHeVZVzgmiRdZsvb614Gvx22ItfaKhPmAVbM9vzbObZDHl9l9G2Ovw8Xve4g==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/workers": "2.5.0", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-kaLGXtQuOOH55KZqXdYDvczhh3mk2eeTVqrrXuuihGjbLKYFlUW2tFDm+5r2s9nCPwTQxOO43ZEOCKSnia+e4w==", + "dev": true, + "dependencies": { + "@parcel/codeframe": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/markdown-ansi": "2.5.0", + "@parcel/source-map": "^2.0.0", + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.5.tgz", + "integrity": "sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.5.0.tgz", + "integrity": "sha512-/Ow5OKJWs+9OzV3Jy4J++VnbNx0j3ls/M1CGVBLiBWyCada9DMtquYoBQ4Sk6Uam50BKkIFYetGOeXPNQyyMjg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.5.0" + } + }, + "node_modules/@picocss/pico": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-1.5.0.tgz", + "integrity": "sha512-1sLeGqpIYHf2ZgVEVqpewWFkfYMCMt4eUU8uINRXI21cUKAPv7Jxft+4567SEWLOjzQKH5EhlbkQdC9tGi/c+A==" + }, + "node_modules/@swc/helpers": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.13.tgz", + "integrity": "sha512-A1wswJhnqaLRn8uYVQ8YiNTtY5i/JIPmV08EXXjjTresIkUVUEUaFv/wXVhGXfRNYMvHPkuoMR1Nb6NgpxGjNg==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001335", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", + "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.132", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.132.tgz", + "integrity": "sha512-JYdZUw/1068NWN+SwXQ7w6Ue0bWYGihvSUNNQwurvcDV/SM7vSiGZ3NuFvFgoEiCs4kB8xs3cX2an3wB7d4TBw==", + "dev": true + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/htmlnano": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.2.tgz", + "integrity": "sha512-+ZrQFS4Ub+zd+/fWwfvoYCEGNEa0/zrpys6CyXxvZDwtL7Pl+pOtRkiujyvBQ7Lmfp7/iEPxtOFgxWA16Gkj3w==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + }, + "peerDependencies": { + "cssnano": "^5.0.11", + "postcss": "^8.3.11", + "purgecss": "^4.0.3", + "relateurl": "^0.2.7", + "srcset": "^5.0.0", + "svgo": "^2.8.0", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha1-a+Fm0USCihMdaGiRuYPfYsOUkf8=", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lmdb": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.4.tgz", + "integrity": "sha512-gto+BB2uEob8qRiTlOq+R3uX0YNHsX9mjxj9Sbdue/LIKqu6IlZjrsjKeGyOMquc/474GEqFyX2pdytpydp0rQ==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "^1.5.4", + "nan": "^2.14.2", + "node-gyp-build": "^4.2.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + } + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/msgpackr": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.7.tgz", + "integrity": "sha512-Hsa80i8W4BiObSMHslfnwC+CC1CYHZzoXJZn0+3EvoCEOgt3c5QlXhdcjgFk2aZxMgpV8aUFZqJyQUCIp4UrzA==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^1.1.4" + } + }, + "node_modules/msgpackr-extract": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-1.1.4.tgz", + "integrity": "sha512-WQbHvsThprXh+EqZYy+SQFEs7z6bNM7a0vgirwUfwUcphWGT2mdPcpyLCNiRsN6w5q5VKJUMblHY+tNEyceb9Q==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "^4.3.2" + }, + "optionalDependencies": { + "msgpackr-extract-darwin-arm64": "1.1.0", + "msgpackr-extract-darwin-x64": "1.1.0", + "msgpackr-extract-linux-arm": "1.1.0", + "msgpackr-extract-linux-arm64": "1.1.0", + "msgpackr-extract-linux-x64": "1.1.0", + "msgpackr-extract-win32-x64": "1.1.0" + } + }, + "node_modules/msgpackr-extract-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-s1kHoT12tS2cCQOv+Wl3I+/cYNJXBPtwQqGA+dPYoXmchhXiE0Nso+BIfvQ5PxbmAyjj54Q5o7PnLTqVquNfZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/msgpackr-extract-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-1.1.0.tgz", + "integrity": "sha512-yx/H/i12IKg4eWGu/eKdKzJD4jaYvvujQSaVmeOMCesbSQnWo5X6YR9TFjoiNoU9Aexk1KufzL9gW+1DozG1yw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/msgpackr-extract-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-1.1.0.tgz", + "integrity": "sha512-0VvSCqi12xpavxl14gMrauwIzHqHbmSChUijy/uo3mpjB1Pk4vlisKpZsaOZvNJyNKj0ACi5jYtbWnnOd7hYGw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/msgpackr-extract-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-1.1.0.tgz", + "integrity": "sha512-AxFle3fHNwz2V4CYDIGFxI6o/ZuI0lBKg0uHI8EcCMUmDE5mVAUWYge5WXmORVvb8sVWyVgFlmi3MTu4Ve6tNQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/msgpackr-extract-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-1.1.0.tgz", + "integrity": "sha512-O+XoyNFWpdB8oQL6O/YyzffPpmG5rTNrr1nKLW70HD2ENJUhcITzbV7eZimHPzkn8LAGls1tBaMTHQezTBpFOw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/msgpackr-extract-win32-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-1.1.0.tgz", + "integrity": "sha512-6AJdM5rNsL4yrskRfhujVSPEd6IBpgvsnIT/TPowKNLQ62iIdryizPY2PJNFiW3AJcY249AHEiDBXS1cTDPxzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-4.3.2.tgz", + "integrity": "sha512-P5Ep3ISdmwcCkZIaBaQamQtWAG0facC89phWZgi5Z3hBU//J6S48OIvyZWSPPf6yQMklLZiqoosWAZUj7N+esA==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build-optional": "optional.js", + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "dev": true + }, + "node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/ordered-binary": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.2.5.tgz", + "integrity": "sha512-djRmZoEpOGvIRW7ufsCDHtvcUa18UC9TxnPbHhSVFZHsoyg0dtut1bWtBZ/fmxdPN62oWXrV6adM7NoWU+CneA==", + "dev": true + }, + "node_modules/parcel": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.5.0.tgz", + "integrity": "sha512-er0mj/BaMjWyzQ/jedLUi/LNAuQcFT8lCvoNqANF+jTaX9rohaBwxIvKVJVAZgyCnmyfbbldp496wPMW0R0+CA==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.5.0", + "@parcel/core": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/reporter-cli": "2.5.0", + "@parcel/reporter-dev-server": "2.5.0", + "@parcel/utils": "2.5.0", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/patella": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/patella/-/patella-2.2.2.tgz", + "integrity": "sha512-hmwYmU1e3fLooxSUG4N5LO7xehycU8UblTQgc8menKWjqGh9FtNCfPW6hf7E9EeU05XHl1dFEobgIMX3jYukwA==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", + "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.8.0-beta.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dev": true, + "requires": { + "@babel/highlight": "^7.16.7" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@fontsource/noto-sans": { + "version": "4.5.9", + "resolved": "https://registry.npmjs.org/@fontsource/noto-sans/-/noto-sans-4.5.9.tgz", + "integrity": "sha512-T/5WYsgKV14CGOtE1mTG5D/kyvgn1Vjn8sd2cYRH+J4ZFin2Tc9xRWEtu2DocDfiiI1e9B10LdSf8NN2+sxlKg==" + }, + "@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.0" + } + }, + "@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + } + }, + "@parcel/bundler-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.5.0.tgz", + "integrity": "sha512-7CJzE17SirCXjcRgBcnqWO/5EOA1raq/3OIKtT4cxbjpDQGHZpjpEEZiMNRpEpdNMxDSlsG8mAkXTYGL2VVWRw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/cache": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.5.0.tgz", + "integrity": "sha512-3kOO3cZQv0FAKhrMHGLdb4Qtzpmy78Q6jPN3u8eCY4yqeDTnyQBZvWNHoyCm5WlmL8y6Q6REYMbETLxSH1ggAQ==", + "dev": true, + "requires": { + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/utils": "2.5.0", + "lmdb": "2.2.4" + } + }, + "@parcel/codeframe": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.5.0.tgz", + "integrity": "sha512-qafqL8Vu2kr932cCWESoDEEoAeKVi7/xdzTBuhzEJng1AfmRT0rCbt/P4ao3RjiDyozPSjXsHOqM6GDZcto4eQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/compressor-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.5.0.tgz", + "integrity": "sha512-I5Zs+2f1ue4sTPdfT8BNsLfTZl48sMWLk2Io3elUJjH/SS9kO7ut5ChkuJtt77ZS35m0OF+ZCt3ICTJdnDG8eA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0" + } + }, + "@parcel/config-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.5.0.tgz", + "integrity": "sha512-r30V61958SONvP9I8KV8s44ZOFq0H219VyFjPysraSabHjZ+KMaCTQOuqaDtUMa272sHUQkBcZxKYj5jYPJlZg==", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.5.0", + "@parcel/compressor-raw": "2.5.0", + "@parcel/namer-default": "2.5.0", + "@parcel/optimizer-css": "2.5.0", + "@parcel/optimizer-htmlnano": "2.5.0", + "@parcel/optimizer-image": "2.5.0", + "@parcel/optimizer-svgo": "2.5.0", + "@parcel/optimizer-terser": "2.5.0", + "@parcel/packager-css": "2.5.0", + "@parcel/packager-html": "2.5.0", + "@parcel/packager-js": "2.5.0", + "@parcel/packager-raw": "2.5.0", + "@parcel/packager-svg": "2.5.0", + "@parcel/reporter-dev-server": "2.5.0", + "@parcel/resolver-default": "2.5.0", + "@parcel/runtime-browser-hmr": "2.5.0", + "@parcel/runtime-js": "2.5.0", + "@parcel/runtime-react-refresh": "2.5.0", + "@parcel/runtime-service-worker": "2.5.0", + "@parcel/transformer-babel": "2.5.0", + "@parcel/transformer-css": "2.5.0", + "@parcel/transformer-html": "2.5.0", + "@parcel/transformer-image": "2.5.0", + "@parcel/transformer-js": "2.5.0", + "@parcel/transformer-json": "2.5.0", + "@parcel/transformer-postcss": "2.5.0", + "@parcel/transformer-posthtml": "2.5.0", + "@parcel/transformer-raw": "2.5.0", + "@parcel/transformer-react-refresh-wrap": "2.5.0", + "@parcel/transformer-svg": "2.5.0" + } + }, + "@parcel/core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.5.0.tgz", + "integrity": "sha512-dygDmPsfAYJKTnUftcbEzjCik7AAaPbFvJW8ETYz8diyjkAG9y6hvCAZIrJE5pNOjFzg32en4v4UWv8Sqlzl9g==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/graph": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^5.7.1" + } + }, + "@parcel/css": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css/-/css-1.8.2.tgz", + "integrity": "sha512-3vTyKHy2LnZ3YJEut+UQPVIxsaY/mdGk7cDXtmvH4xR48Pd6rYzChHCMl4Ru2DUkCBpr0KCQRPZTdYcsJhUmIA==", + "dev": true, + "requires": { + "@parcel/css-darwin-arm64": "1.8.2", + "@parcel/css-darwin-x64": "1.8.2", + "@parcel/css-linux-arm-gnueabihf": "1.8.2", + "@parcel/css-linux-arm64-gnu": "1.8.2", + "@parcel/css-linux-arm64-musl": "1.8.2", + "@parcel/css-linux-x64-gnu": "1.8.2", + "@parcel/css-linux-x64-musl": "1.8.2", + "@parcel/css-win32-x64-msvc": "1.8.2", + "detect-libc": "^1.0.3" + } + }, + "@parcel/css-darwin-arm64": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-arm64/-/css-darwin-arm64-1.8.2.tgz", + "integrity": "sha512-p5etxX3kPCuEQcipjqH9yc5j0x5/Yc++uB4MvG/sFbRgL2gI2zUuRo9sIgqA21boOP8lE4bQgz1ovPD/W1hj+Q==", + "dev": true, + "optional": true + }, + "@parcel/css-darwin-x64": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-darwin-x64/-/css-darwin-x64-1.8.2.tgz", + "integrity": "sha512-c3xi5DXRZYec5db4KPTxp69eHbomOuasgZNiuPPOi80k7jlOwfzCFQs0h6/KwWvTcJrKEFsLl8BKJU/aX7mETw==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm-gnueabihf": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm-gnueabihf/-/css-linux-arm-gnueabihf-1.8.2.tgz", + "integrity": "sha512-+ih3+mMpwbwtOjr/XW5pP0frsV1PMN+Qz7jCAM84h8xX+8UE/1IR0UVi3EPa8wQiIlcVcEwszQ1MV2UHacvo/A==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm64-gnu": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-gnu/-/css-linux-arm64-gnu-1.8.2.tgz", + "integrity": "sha512-jIoyXbjJ1trUHXtyJhi3hlF1ck6xM4CDyaY5N6eN+3+ovkdw6wxog9IiheYJ1jf9ellYevLvTF5kiYE9MiP04A==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-arm64-musl": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-arm64-musl/-/css-linux-arm64-musl-1.8.2.tgz", + "integrity": "sha512-QVTc5a+HatoywIei3djKYmp3s5dbI2Q3QaYZf3gqhyjOkeC7bm6j5eeNzFO+wa5xtga5jdHkIuTRrJ/wCojKKw==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-x64-gnu": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-gnu/-/css-linux-x64-gnu-1.8.2.tgz", + "integrity": "sha512-9r2tSfa6i3ZQ3a6C9XufJWuTv3LB7JYzxzEqsI35SSA8D/DrfAHMaIhqog5wSxKZRWmQxckh2wdT96eIIGHSGA==", + "dev": true, + "optional": true + }, + "@parcel/css-linux-x64-musl": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-linux-x64-musl/-/css-linux-x64-musl-1.8.2.tgz", + "integrity": "sha512-5SetLWkxXRQ3NU6QwwbGf9tOmGW2m1cGt07Moybbe4RCXOY6R5wAYUtauZUp7pD/fJlE9mHge4jnNHKpVO9pvw==", + "dev": true, + "optional": true + }, + "@parcel/css-win32-x64-msvc": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@parcel/css-win32-x64-msvc/-/css-win32-x64-msvc-1.8.2.tgz", + "integrity": "sha512-/EdW5Ejlnkvc/AYrAi/FmLNvM6a6eAx+A4Y7oW+8JSMvk6bYa2zmXi7XLU/QOQuH2VQa/3gIIMA+sYjPndvDpw==", + "dev": true, + "optional": true + }, + "@parcel/diagnostic": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.5.0.tgz", + "integrity": "sha512-KiMGGRpEV7wl5gjcxBKcgX84a+cG+IEn94gwy5LK3lENR09nuKShqqgKGAmj/17CobJgw1QNP94/H4Md+oxIWg==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.5.0.tgz", + "integrity": "sha512-Gc2LPwL1H34Ony5MENbKZg7wvCscZ4x9y7Fu92sfbdWpLo3K13hVtsX3TMIIgYt3B7R7OmO8yR880U2T+JfVkQ==", + "dev": true + }, + "@parcel/fs": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.5.0.tgz", + "integrity": "sha512-YYr14BWtx/bJ+hu6PPQQ6G/3omOTWgVqEw+UFI3iQH3P6+e0LRXW/Ja1yAcJeepGcTwIP0opnXZBQOm8PBQ2SA==", + "dev": true, + "requires": { + "@parcel/fs-search": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/watcher": "^2.0.0", + "@parcel/workers": "2.5.0" + } + }, + "@parcel/fs-search": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.5.0.tgz", + "integrity": "sha512-uBONkz9ZCNSOqbPGWJY3MNl+pqBTfvzHH9+4UhzHEHPArvK2oD0+syYPVE60+zGrxybXTESYMCJp4bHvH6Z2hA==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "@parcel/graph": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.5.0.tgz", + "integrity": "sha512-qa2VtG08dJyTaWrxYAkMIlkoDRSPoiqLDNxxHKplkcxAjXBUw0/AkWaz82VO5r1G6jfOj+nM30ajH9uygZYwbw==", + "dev": true, + "requires": { + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/hash": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.5.0.tgz", + "integrity": "sha512-47JL0XpB7UvIW6Ijf8vv+yVMt9dLvB/lRlBHFmAkmovisueVMVbYD7smxVZnCSehD8UH8BcymKbMzyL5dimgoQ==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "xxhash-wasm": "^0.4.2" + } + }, + "@parcel/logger": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.5.0.tgz", + "integrity": "sha512-pT1L3ceH6trL1N3I3r2HawPjz/PCubOo/Kazu7IeXsMsKVjj1a6AeieZHzkNZIbhiGPtm/cHbBNLz2zTWDLeOA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0" + } + }, + "@parcel/markdown-ansi": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.5.0.tgz", + "integrity": "sha512-ixkNF3KWIqxMlfxTe9Gb2cp/uNmklQev8VEUxujMVxmUfGyQs4859zdJIQlIinabWYhArhsXATkVf3MzCUN6TQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/namer-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.5.0.tgz", + "integrity": "sha512-ahGQqHJzsWE5Qux8zXMAU+lyNBOl+ZpcOFzRGE2DWOsmAlytsHl7DBVCQvzUyNBFg1/HmIj+7D4efv2kjR7rTg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/node-resolver-core": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-2.5.0.tgz", + "integrity": "sha512-XQvpguiIwQcu75cscLDFOVhjsjuPzXbuMaaZ7XxxUEl0PscIgu/GfKYxTfTruN3cRl+CaQH6qBAMfjLaFng6lQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/optimizer-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.5.0.tgz", + "integrity": "sha512-J00bLF+4SsnKc+YbYrNuBr44/zz3cg++CoXteXhH27PxP1rScGQx36Rui8WORgil5mlX2VYN79DuqJC7V3Ynbg==", + "dev": true, + "requires": { + "@parcel/css": "^1.8.1", + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" + } + }, + "@parcel/optimizer-htmlnano": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.5.0.tgz", + "integrity": "sha512-Fr0zPqgxoNaOVdROAjNGDWCts3+wByNQ82Mxhu8Tzc25A2cPjcr1H2sa/TE3hf79c92DxdKf2FaC1ZOgR5YPdg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + } + }, + "@parcel/optimizer-image": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.5.0.tgz", + "integrity": "sha512-nbo2pdnAt21WLGjzTpsE8ZEL0xNoP7c3wBj9y70Pysmasg1SrRVCbfE8jTy+lHBQwq2yjC6lV/Usv+9lfA7S/w==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "detect-libc": "^1.0.3" + } + }, + "@parcel/optimizer-svgo": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.5.0.tgz", + "integrity": "sha512-pgZqwU0RLc/wr4WcQY/W1GJmddnEANDEpz1mdppUOqBz1EfTQ7zh5NgUA3hV1i05Hbecp3mHSvXJPV0mhNOl5Q==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "svgo": "^2.4.0" + } + }, + "@parcel/optimizer-terser": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-terser/-/optimizer-terser-2.5.0.tgz", + "integrity": "sha512-PZ3UHBGfjE49/Jloopsd38Hxg4qzsrdepWP53mCuVP7Aw605Y4QtYuB1ho3VV0oXfKQVq+uI7lVIBsuW4K6vqA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "terser": "^5.2.0" + } + }, + "@parcel/package-manager": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.5.0.tgz", + "integrity": "sha512-zTuF55/lITUjw9dUU/X0HiF++589xbPXw/zUiG9T6s8BQThLvrxAhYP89S719pw7cTqDimGkTxnIuK+a0djEkg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "semver": "^5.7.1" + } + }, + "@parcel/packager-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.5.0.tgz", + "integrity": "sha512-c0mGBFdVSPhAxaX3+zN8KEIqOOUhkIPKbZex1pnGYfy03Qe2/Mb4nyt5DAGlw9gjka1UCHIN/wszLmKC8YyUeg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-html": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.5.0.tgz", + "integrity": "sha512-ZFGUPRMWKrm8kQHdkEJ5S22C05qpSymx+o+57EfuNjCrGyj3M59WyGYYXYJ175bFYZ/jp5yy+VxMh6fZefe+Pw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + } + }, + "@parcel/packager-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.5.0.tgz", + "integrity": "sha512-aJAKOTgXdxO3V9O7+2DCVOtne128WwXmUAOVThnMRo7f3zMVSAR7Mxc9pEsuTzPfj8UBXgFBRfdJUSCgsMxiSw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.5.0.tgz", + "integrity": "sha512-aHV0oogeiqxhxS1lsttw15EvG3DDWK3FV7+F+7hoaAy+xg89K56NTp6j43Jtw9iyU1/HnZRGBE2hF3C7N73oKw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0" + } + }, + "@parcel/packager-svg": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.5.0.tgz", + "integrity": "sha512-XSMFn30K/kpjcPpQqt88GmPJsNUSVL3RNeigXkIAcLpfO6Tb2eV4iOt4yVCagaDrRJ19alXut0TxjMm5bm41/g==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "posthtml": "^0.16.4" + } + }, + "@parcel/plugin": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.5.0.tgz", + "integrity": "sha512-obtb6/Gql6YFQ86bdv75A2Noabx8679reFZeyfKKf0L7Lppx4DFQetXwM9XVy7Gx6hJ1Ekm3UMuuIyVJk33YHQ==", + "dev": true, + "requires": { + "@parcel/types": "2.5.0" + } + }, + "@parcel/reporter-cli": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.5.0.tgz", + "integrity": "sha512-miJt2YbRJBmYSVeoUWUj8YL85Pwj1CmGQB0/btqhulGLH/Fvkbv6T4sJ4gl4l5xIt9mJQsZ70pOWwa8BId3rWw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + } + }, + "@parcel/reporter-dev-server": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.5.0.tgz", + "integrity": "sha512-wvxAiW42AxJ3B8jtvowJcP4/cTV8zY48SfKg61YKYu1yUO+TtyJIjHQzDW2XuT34cIGFY97Gr0i+AVu44RyUuQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0" + } + }, + "@parcel/resolver-default": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.5.0.tgz", + "integrity": "sha512-39PkZpVr/+iYS11u+lA84vIsKm/yisltTVmUjlYsDnExiuV1c8OSbSdYZ3JMx+7CYPE0bWbosX2AGilIwIMWpQ==", + "dev": true, + "requires": { + "@parcel/node-resolver-core": "2.5.0", + "@parcel/plugin": "2.5.0" + } + }, + "@parcel/runtime-browser-hmr": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.5.0.tgz", + "integrity": "sha512-oPAo8Zf06gXCpt41nyvK7kv2HH1RrHAGgOqttyjStwAFlm5MZKs7BgtJzO58LfJN8g3sMY0cNdG17fB/4f8q6Q==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0" + } + }, + "@parcel/runtime-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.5.0.tgz", + "integrity": "sha512-gPC2PbNAiooULP71wF5twe4raekuXsR1Hw/ahITDoqsZdXHzG3CkoCjYL3CkmBGiKQgMMocCyN1E2oBzAH8Kyw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/runtime-react-refresh": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.5.0.tgz", + "integrity": "sha512-+8RuDKFdFYIQTrXG4MRhG9XqkkYEHn0zxKyOJ/IkDDfSEhY0na+EyhrneFUwIvDX63gLPkxceXAg0gwBqXPK/Q==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "react-refresh": "^0.9.0" + } + }, + "@parcel/runtime-service-worker": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.5.0.tgz", + "integrity": "sha512-STuDlU0fPXeWpAmbayY7o04F0eHy6FTOFeT5KQ0PTxtdEa3Ey8QInP/NVE52Yv0aVQtesWukGrNEFCERlkbFRw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/source-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.0.2.tgz", + "integrity": "sha512-NnUrPYLpYB6qyx2v6bcRPn/gVigmGG6M6xL8wIg/i0dP1GLkuY1nf+Hqdf63FzPTqqT7K3k6eE5yHPQVMO5jcA==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "@parcel/transformer-babel": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.5.0.tgz", + "integrity": "sha512-EFb866C9jCoBHIcebWF7goAcYj1wkObx0GDxshlazFtvym1RM27xSWWjRYyqb5+HNOxB3voaNvQOVjcD+DXjCA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^5.7.0" + } + }, + "@parcel/transformer-css": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.5.0.tgz", + "integrity": "sha512-p8FOvKWWSbS6H8PbD9a0KZqyaKNpSD2BUTzSRYnNj3TBUv7/ZXaP6Om295XTQ/MPht1o7XTQzvfpF/7yEhr02Q==", + "dev": true, + "requires": { + "@parcel/css": "^1.8.1", + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-html": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.5.0.tgz", + "integrity": "sha512-iEjNyAF0wQmY3DMw7FS+UzoOMng76UsSngh+WWA1E5lv5XyqrP8Mk2QLTJp1nWetUhSLhZr58LGmPYBTB4l9ZQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-image": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.5.0.tgz", + "integrity": "sha512-vVEXTHZl8m/9yopgK0dWHLOQX2zOnghq6pZnWdWVG6fsvXZln7kP1YN5iwWDoADQYkiKzP+Ymn6UwP9pZpHFzA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/workers": "2.5.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-js": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.5.0.tgz", + "integrity": "sha512-Cp8Ic+Au3OcskCRZszmo47z3bqcZ7rfPv2xZYXpXY2TzEc3IV0bKje57bZektoY8LW9LkYM9iBO/WhkVoT6LIg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/utils": "2.5.0", + "@parcel/workers": "2.5.0", + "@swc/helpers": "^0.3.6", + "browserslist": "^4.6.6", + "detect-libc": "^1.0.3", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-json": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.5.0.tgz", + "integrity": "sha512-661sByA7TkR6Lmxt+hqV4h2SAt+7lgc58DzmUYArpEl1fQnMuQuaB0kQeHzi6fDD2+2G6o7EC+DuwBZKa479TA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "json5": "^2.2.0" + } + }, + "@parcel/transformer-postcss": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.5.0.tgz", + "integrity": "sha512-IPNlWElekdQHMTBqhdwJNBCQomuYyo7xgNBdnTrt9VJ+R5ihy6n7ZJSWIAJXAH9VZxETTtunfrzRtgkmtjTeZQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-posthtml": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.5.0.tgz", + "integrity": "sha512-AZxg1XD8OXOS4bEGEmBBR+X9T9qoFdVsbVUg498zzejYSka1ZQHF7TgLI/+pUnE+ZVYNIp7/G0xXqsRVKMKmdQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + } + }, + "@parcel/transformer-raw": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.5.0.tgz", + "integrity": "sha512-I3zjE1u9+Wj90Qqs1V2FTm6iC6SAyOVUthwVZkZey+qbQG/ok682Ez2XjLu7MyQCo9BJNwF/nfOa1hHr3MaJEQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0" + } + }, + "@parcel/transformer-react-refresh-wrap": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.5.0.tgz", + "integrity": "sha512-VPqVBxhTN4OQwcjsdyxrv+smjAm4s6dbSWAplgPwdOITMv+a0tjhhJU37WnRC+xxTrbEqRcOt96JvGOkPb8i7g==", + "dev": true, + "requires": { + "@parcel/plugin": "2.5.0", + "@parcel/utils": "2.5.0", + "react-refresh": "^0.9.0" + } + }, + "@parcel/transformer-svg": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.5.0.tgz", + "integrity": "sha512-zCGJcrCpICFe0Q/dgjQZfW7sYFkbJEC7NGT4zEJnMo8Cm/kq8Qh6+2ApX6c+vv5Q0WZn5Ic+N0OvxIMkvgdC/w==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/plugin": "2.5.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^5.7.1" + } + }, + "@parcel/types": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.5.0.tgz", + "integrity": "sha512-bA0fhG6aXSGYEVo5Dt96x6lseUQHeVZVzgmiRdZsvb614Gvx22ItfaKhPmAVbM9vzbObZDHl9l9G2Ovw8Xve4g==", + "dev": true, + "requires": { + "@parcel/cache": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/source-map": "^2.0.0", + "@parcel/workers": "2.5.0", + "utility-types": "^3.10.0" + } + }, + "@parcel/utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.5.0.tgz", + "integrity": "sha512-kaLGXtQuOOH55KZqXdYDvczhh3mk2eeTVqrrXuuihGjbLKYFlUW2tFDm+5r2s9nCPwTQxOO43ZEOCKSnia+e4w==", + "dev": true, + "requires": { + "@parcel/codeframe": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/hash": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/markdown-ansi": "2.5.0", + "@parcel/source-map": "^2.0.0", + "chalk": "^4.1.0" + } + }, + "@parcel/watcher": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.5.tgz", + "integrity": "sha512-x0hUbjv891omnkcHD7ZOhiyyUqUUR6MNjq89JhEI3BxppeKWAm6NPQsqqRrAkCJBogdT/o/My21sXtTI9rJIsw==", + "dev": true, + "requires": { + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" + } + }, + "@parcel/workers": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.5.0.tgz", + "integrity": "sha512-/Ow5OKJWs+9OzV3Jy4J++VnbNx0j3ls/M1CGVBLiBWyCada9DMtquYoBQ4Sk6Uam50BKkIFYetGOeXPNQyyMjg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/types": "2.5.0", + "@parcel/utils": "2.5.0", + "chrome-trace-event": "^1.0.2", + "nullthrows": "^1.1.1" + } + }, + "@picocss/pico": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@picocss/pico/-/pico-1.5.0.tgz", + "integrity": "sha512-1sLeGqpIYHf2ZgVEVqpewWFkfYMCMt4eUU8uINRXI21cUKAPv7Jxft+4567SEWLOjzQKH5EhlbkQdC9tGi/c+A==" + }, + "@swc/helpers": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.3.13.tgz", + "integrity": "sha512-A1wswJhnqaLRn8uYVQ8YiNTtY5i/JIPmV08EXXjjTresIkUVUEUaFv/wXVhGXfRNYMvHPkuoMR1Nb6NgpxGjNg==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.3.tgz", + "integrity": "sha512-zetDJxd89y3X99Kvo4qFx8GKlt6GsvN3UcRZHwU6iFA/0KiOmhkTVhe8oRoTBiTVPZu09x3vCra47+w8Yz1+2Q==", + "dev": true + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001335", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001335.tgz", + "integrity": "sha512-ddP1Tgm7z2iIxu6QTtbZUv6HJxSaV/PZeSrWFZtbY4JZ69tOeNhBCl3HyRQgeNZKE5AOn1kpV7fhljigy0Ty3w==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.132", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.132.tgz", + "integrity": "sha512-JYdZUw/1068NWN+SwXQ7w6Ue0bWYGihvSUNNQwurvcDV/SM7vSiGZ3NuFvFgoEiCs4kB8xs3cX2an3wB7d4TBw==", + "dev": true + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true + }, + "globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "htmlnano": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.2.tgz", + "integrity": "sha512-+ZrQFS4Ub+zd+/fWwfvoYCEGNEa0/zrpys6CyXxvZDwtL7Pl+pOtRkiujyvBQ7Lmfp7/iEPxtOFgxWA16Gkj3w==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.1", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha1-a+Fm0USCihMdaGiRuYPfYsOUkf8=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lmdb": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.2.4.tgz", + "integrity": "sha512-gto+BB2uEob8qRiTlOq+R3uX0YNHsX9mjxj9Sbdue/LIKqu6IlZjrsjKeGyOMquc/474GEqFyX2pdytpydp0rQ==", + "dev": true, + "requires": { + "msgpackr": "^1.5.4", + "nan": "^2.14.2", + "node-gyp-build": "^4.2.3", + "ordered-binary": "^1.2.4", + "weak-lru-cache": "^1.2.2" + } + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "msgpackr": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.5.7.tgz", + "integrity": "sha512-Hsa80i8W4BiObSMHslfnwC+CC1CYHZzoXJZn0+3EvoCEOgt3c5QlXhdcjgFk2aZxMgpV8aUFZqJyQUCIp4UrzA==", + "dev": true, + "requires": { + "msgpackr-extract": "^1.1.4" + } + }, + "msgpackr-extract": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-1.1.4.tgz", + "integrity": "sha512-WQbHvsThprXh+EqZYy+SQFEs7z6bNM7a0vgirwUfwUcphWGT2mdPcpyLCNiRsN6w5q5VKJUMblHY+tNEyceb9Q==", + "dev": true, + "optional": true, + "requires": { + "msgpackr-extract-darwin-arm64": "1.1.0", + "msgpackr-extract-darwin-x64": "1.1.0", + "msgpackr-extract-linux-arm": "1.1.0", + "msgpackr-extract-linux-arm64": "1.1.0", + "msgpackr-extract-linux-x64": "1.1.0", + "msgpackr-extract-win32-x64": "1.1.0", + "node-gyp-build-optional-packages": "^4.3.2" + } + }, + "msgpackr-extract-darwin-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-1.1.0.tgz", + "integrity": "sha512-s1kHoT12tS2cCQOv+Wl3I+/cYNJXBPtwQqGA+dPYoXmchhXiE0Nso+BIfvQ5PxbmAyjj54Q5o7PnLTqVquNfZA==", + "dev": true, + "optional": true + }, + "msgpackr-extract-darwin-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-1.1.0.tgz", + "integrity": "sha512-yx/H/i12IKg4eWGu/eKdKzJD4jaYvvujQSaVmeOMCesbSQnWo5X6YR9TFjoiNoU9Aexk1KufzL9gW+1DozG1yw==", + "dev": true, + "optional": true + }, + "msgpackr-extract-linux-arm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-1.1.0.tgz", + "integrity": "sha512-0VvSCqi12xpavxl14gMrauwIzHqHbmSChUijy/uo3mpjB1Pk4vlisKpZsaOZvNJyNKj0ACi5jYtbWnnOd7hYGw==", + "dev": true, + "optional": true + }, + "msgpackr-extract-linux-arm64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-1.1.0.tgz", + "integrity": "sha512-AxFle3fHNwz2V4CYDIGFxI6o/ZuI0lBKg0uHI8EcCMUmDE5mVAUWYge5WXmORVvb8sVWyVgFlmi3MTu4Ve6tNQ==", + "dev": true, + "optional": true + }, + "msgpackr-extract-linux-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-1.1.0.tgz", + "integrity": "sha512-O+XoyNFWpdB8oQL6O/YyzffPpmG5rTNrr1nKLW70HD2ENJUhcITzbV7eZimHPzkn8LAGls1tBaMTHQezTBpFOw==", + "dev": true, + "optional": true + }, + "msgpackr-extract-win32-x64": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-1.1.0.tgz", + "integrity": "sha512-6AJdM5rNsL4yrskRfhujVSPEd6IBpgvsnIT/TPowKNLQ62iIdryizPY2PJNFiW3AJcY249AHEiDBXS1cTDPxzA==", + "dev": true, + "optional": true + }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "dev": true + }, + "node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node-gyp-build": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", + "dev": true + }, + "node-gyp-build-optional-packages": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-4.3.2.tgz", + "integrity": "sha512-P5Ep3ISdmwcCkZIaBaQamQtWAG0facC89phWZgi5Z3hBU//J6S48OIvyZWSPPf6yQMklLZiqoosWAZUj7N+esA==", + "dev": true, + "optional": true + }, + "node-releases": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.4.tgz", + "integrity": "sha512-gbMzqQtTtDz/00jQzZ21PQzdI9PyLYqUSvD0p3naOhX4odFji0ZxYdnVwPTxmSwkmxhcFImpozceidSG+AgoPQ==", + "dev": true + }, + "nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "ordered-binary": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.2.5.tgz", + "integrity": "sha512-djRmZoEpOGvIRW7ufsCDHtvcUa18UC9TxnPbHhSVFZHsoyg0dtut1bWtBZ/fmxdPN62oWXrV6adM7NoWU+CneA==", + "dev": true + }, + "parcel": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.5.0.tgz", + "integrity": "sha512-er0mj/BaMjWyzQ/jedLUi/LNAuQcFT8lCvoNqANF+jTaX9rohaBwxIvKVJVAZgyCnmyfbbldp496wPMW0R0+CA==", + "dev": true, + "requires": { + "@parcel/config-default": "2.5.0", + "@parcel/core": "2.5.0", + "@parcel/diagnostic": "2.5.0", + "@parcel/events": "2.5.0", + "@parcel/fs": "2.5.0", + "@parcel/logger": "2.5.0", + "@parcel/package-manager": "2.5.0", + "@parcel/reporter-cli": "2.5.0", + "@parcel/reporter-dev-server": "2.5.0", + "@parcel/utils": "2.5.0", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0", + "v8-compile-cache": "^2.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "patella": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/patella/-/patella-2.2.2.tgz", + "integrity": "sha512-hmwYmU1e3fLooxSUG4N5LO7xehycU8UblTQgc8menKWjqGh9FtNCfPW6hf7E9EeU05XHl1dFEobgIMX3jYukwA==" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "requires": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "dependencies": { + "posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + } + } + }, + "posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + }, + "posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "requires": { + "is-json": "^2.0.1" + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "5.13.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", + "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map": "~0.8.0-beta.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "dev": true, + "requires": { + "whatwg-url": "^7.0.0" + } + } + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + } + } +} diff --git a/website/package.json b/website/package.json new file mode 100644 index 0000000..15b03a5 --- /dev/null +++ b/website/package.json @@ -0,0 +1,18 @@ +{ + "name": "gifsave-website", + "version": "0.0.0", + "private": true, + "source": "src/index.html", + "scripts": { + "serve": "parcel", + "build": "parcel build" + }, + "devDependencies": { + "parcel": "^2.5.0" + }, + "dependencies": { + "@fontsource/noto-sans": "^4.5.9", + "@picocss/pico": "^1.5.0", + "patella": "^2.2.2" + } +} diff --git a/website/src/assets/favicon/favicon-128x128.png b/website/src/assets/favicon/favicon-128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..3b1c215a1e398f8a3bc6ea6b427d198f6d7d79e9 GIT binary patch literal 2148 zcmXBWhdD-wsX8-^=r=tAiC4J)m6cYoz?~x-9=>vvV z*2e&VqSv1SNjNR~0$j$z^{`qF7Fe8#lR1FH;Y6(MZ81m_w7H0blV#%O<0}9FiFxr{ z8!oSHD*wt<;T2L*$LxtNojIIN&*G`Rg_6Fdl7XeNft9kMmC7I1&tB8ns2b7PK7V7Y zW^AX1K&czssUuJtCiX8(>@`gtG?D0+NVJxjqqaGn(<=*%jwMFd602*4)w6civvx7C zaWSyP8QQwOwsSQ?xxKM>H+JwaMtdL}JP>G4QztK^lQ$CMZHD!+aK>A>ytVwp*9zxr zSycz&ffFAgLfd>C&-Zw|G^0#jCmW3^$l_M3w3!HhVu`14Tx|Hh;V-&=^hyA z5g6qe6z%naF2*}J1|JfO4~=~r7UvsA@QaA|k4y-NN_-!k6d02f6qEcRHYGSVH6$)A zgpd|WNDqro4@>wIo{$lllo^$r6`hhDLzkKpo0c1!o)?#%NBEQD!ZgQr?fh^tR}ClHm|%kzoM?7 zqOP#AzOa&5SVb(VB9_!Nmew|v)issZHJ8_uDu|>?VoP;nYfV#YP4kyJQd@n?zr@e& z4XquGbYD7~+B!+?-Jd&pT07}_zjXDsb@%=IwZFaRTSw2g&c4B}zQOMPp|9VD`vyn* zhQ|7b$G#1Z4~&ctj!q7ZO%9Jw4UbQcj8BbBOpi`}AETR^8J{Lk(0!ksoSB`P`7uqN zo1UGU`LRHrTbP|+oLgL;Us_pQUR_*STUuRPUR_^V+gRJ!T;JSU-`w8V+TPm!x%G2r zduR9O&hF0c-p(FncaO41p;D-H`_%n|{R4Uq4-O9xkLdaJC&%>sriVtOot&KX++ptm zfK!?(Pvo^-CpIS547K5$z_#_MldA7}z|*&zFKf*fvh0L9S@>Xgb$Ucg&)y`mjKd$= zU*jJSC4GLbd`_i7`=+WHzoxSMB`1AEUDBcDQ3OV!yIg9E3!Rd()WEwhvDF~kD{3g662}%Ii5Rm71*ue~h_UP4;n|-ttCi&NjLSIhKFA+h+aiyRT&nbUtOB~Tf z0#Hmv)q-lQRNsrJ0MK#=`C<&Mv)9KZXY0uX4=V_ES8Td}=|Kj*RW(xYs~c^LJas4T zI@UJJ0@~knCP-IIwdUG6(-@$dAW^0dC$ zQ4Kho_G^>uU42MKm6mY@39l~iEE({Hv45fsH1Nm#Ca7l%#N1?(Yvb<{5}` z4hOn`v@oMp7Obb=JC(bd#xWBJeoyo3=Vb41zQIL4CCr$10+T+^dvwfkD>zD^edD1K zX2ZxBArElN?Ei=lXTi(3cQ@Dom3Q=&hJe*&98dtdGLbdmfMj~F7SuHgc*YJ+LCKm> z*AO6|9UNhm%eqElgKpPfBZ)&?HCf5#kg^*R+in4GC@+5xH7Z0_<)9}GcKGA zF#`c%ctB}frp@g-g_vQjD2oROMWWd@I~1|%g<7sw;Qg2nMQQ;YzB#}~aIbp&5!J{Y zS2QD@C|-U=5tJ>PKQNwOHAWcnR7kb}-tE`xjI(Lv#zKG7v!~BGdbo)2HZ;llFG#)T z2gYpYpkxp79QC+Z(%&4go8;w-89G&P^2_VBlSC{7!h81)&(Nh_0jE4$F@1da3{bVn z&KpT})cEUmW1u-$t5L&7>u_t?jBBx+9`RcMYYlN0U#a<|8b@r6eYejWL2(FaX)kBw z!akgk9x^KB3@eMIHeBbKT~;3{*%#3Ej~AqARVe#7ALGVu0{cZw22LrBv=<$dERT|| za$r|}bokYh?((F143y)vCk&0(Xc%sr$!O=_ncV|Wfnf!~JR3W{8d;qs)QsjEO@jvh z>B}}5pLY_Jn>nPq7M!o4ABDlhZo3jtxnCHC9LC*QH3WgVVyv>)DD0aHc=}2r56kV; z24l}5#^hTlb=F(Wg<$z4OnS&bRMwLsQ733}+c%sNCT^cJz>+)&q)2vh*^NjR+~;nQ zmgQ^3ytI&qA6eBjXQWrUPA;ws?`y%$DMbU!u*DVk|6erG|D89y54iTXbMmDdR3-X{ O0I0y#pA;(~eE$O?!#?@| literal 0 HcmV?d00001 diff --git a/website/src/assets/favicon/favicon-16x16.png b/website/src/assets/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..afdd8aca807e9f3625a35e75eeca231fb9362be2 GIT binary patch literal 430 zcmV;f0a5;mP)*oB#j-8FWQhbW?9;ba!ELWdL_~cP?peYja~^aAhuUa%Y?FJQ@H10I^U^ zR7FHrWkpzKMpUVOI>P9U29NcZ&G7$RAq5mYj<95dTDrraDRz$fQod2 zjCX~Pc!rR9hLC=Xlz)tsfQ^=cj+cXvn1qm-ou{s#sj#4`v7)Q8qpY)|t+S-9w56`J zrmwZ9u(qnRxvaFiw7kK!y~4@P($CY^(%0J4*W1+C+tu0K*4o|U=IG?->E`L{=j!X~ z?C$LD@9*&O^7Hif`1t$${Qmy_|NsBD<}IiI004eTL_t&-m1D3%0}R*&jN~LlWlgOt z&7lIyEP}F9{A}uKq7VUPE^Uyo2D^wLSiqQ355%|7RAt}=3&;zC&C%!K=HLShNXnqu zBBp>QASVpt7(fIJne`xiEmkv#wTfK2AifT#3e=^RO3XrX(gI8>NKTg*msB*t=Q$(* Y025p>h}I_&RsaA107*qoM6N<$f^odaWdHyG literal 0 HcmV?d00001 diff --git a/website/src/assets/favicon/favicon-24x24.png b/website/src/assets/favicon/favicon-24x24.png new file mode 100644 index 0000000000000000000000000000000000000000..d151a912e396bf771d9f17b1541be48600122aad GIT binary patch literal 598 zcmV-c0;&CpP)P@ zR7F8lVnJ17LRDi!R%Aq1WJOnHMObD>S!Yyba$0J3UT%6|aC~8Ld}DKdWORRKc7bSk zgK2n!YkGxleTa2}jed)ifQ*)bj+cUtn1hd)gpiqqk(!8xtevK=ou{szsIQ`|vaYtgu(-alxxTWwzq7l*w7bE#zr?t|#ks)6yTZr4 z!^pnH$-l+Qz{bnL$IQvj(#z1)%+b}&($>$@*V5P8*4o|I+uqsT;M(2b+TP*Y-{IWf z;@#lm-QnZlE`I_=IQJ6^!4-g_4W4l_4fDn_xSz&{r>*` z|NsA@2WYnd007cSL_t(2&tnL~0T?Kd@YYjT(Q?O-uo7Yb17U}-P+5DpM5rPIn}n%@ ztC=`6i@pzoJX}J7f!771(~g5lok0#JVZp#12s7K4lMx}o$KnMQ4mQx$U}unlN;or! z!PJ|BT_6IL&}1-%Nrc#1Sy>qdKqZtI?6G@LmB9(Sgf@d2b_q`gX=EWsKX{M`uzDiI zo!KPe5;jb{K`?QD9wuuv7@cCrLMH5 zueGPJwyCkWt+l(ax4pBwz_h%=|==<4U{>*(t2>Fe$3?CtCA?(FXG z?C$XG@9^^U_4D-g_4fDn_xSht`1ttw`TF|%`}_O+{QUg={r&y^{{H{}|8YojCIA2d zC`m*?R5;7U(^)?PQ5?qcU!stuNtP_ft|1{?X+cuir7RO7&3XT?!9}0yOlsV5ZlCYW zIWzy~Ab(l>HMl#C#m`FJfDsu7fT?IjN?E>Y1Bnp;ug?Yevr^8HRzXdN!C?MF%Fp~- zFV3i(^cAkRuG4f**eavz@e$Y7-Gp(&t93OM+G~0URvq%maeZ1z7tPA;h%*wh2yfRc(KDj4}IJB+%?Z2B-ZN1<2WtJ3y#C$VF=k z*u`D6<|Pm33V8D(zSP{DXVg&pkbjQ?9ol5(@H&dVDM5NrU_Qg!{C|&s9tJh(D1379^=4+C>@&Et;07*qo IM6N<$f*llm*#H0l literal 0 HcmV?d00001 diff --git a/website/src/assets/favicon/favicon-48x48.png b/website/src/assets/favicon/favicon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..9b54190dd9f9323067e9c5d3cb32068db0b618d9 GIT binary patch literal 969 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 + + + + + + + + + + + + + + + diff --git a/website/src/assets/style.css b/website/src/assets/style.css new file mode 100644 index 0000000..c53f244 --- /dev/null +++ b/website/src/assets/style.css @@ -0,0 +1,93 @@ +@import "npm:@picocss/pico"; +@import "npm:@fontsource/noto-sans"; + +:root { + --font-family: "Noto Sans", "Cantarell", sans-serif; +} + +.gs-hidden { + display: none !important; +} + +.gs-noselect { + user-select: none; +} + +#gs-app { + margin: 0; + padding: var(--block-spacing-horizontal); + + --grid-spacing-app: calc(var(--spacing) * 2); + grid-column-gap: var(--grid-spacing-app); + grid-row-gap: var(--grid-spacing-app); +} + +#gs-settings { + margin: 0; + padding: 0; +} + +#gs-settings-color { + display: flex; +} + +#gs-settings-color-picker { + width: 4rem; + margin-right: var(--grid-spacing-horizontal); +} + +#gs-settings-submit { + margin-bottom: calc(var(--spacing) * -1); +} + +#gs-preview, #gs-preview-overlay { + position: relative; + display: flex; + align-items: center; + justify-content: center; + min-width: 64px; + min-height: 64px; +} + +#gs-preview-overlay { + position: absolute; + top: 0; right: 0; bottom: 0; left: 0; + background-color: rgba(255, 255, 255, 0.8); +} + +/* +#gs-preview-icon-loading { + animation: spinner 2s linear infinite; +} +*/ + +#gs-preview-error { + max-width: 100%; +} + +#gs-preview-error-content { + white-space: pre-wrap; +} + +#gs-preview-image { + width: 100%; + height: auto; + border-radius: var(--border-radius); +} + +#gs-footer { + display: flex; + justify-content: center; + margin: calc(var(--spacing) * 2) 0; + color: #6c757d !important; +} + +#gs-footer-heart { + width: 1rem; + height: 1rem; + vertical-align: sub; +} + +#gs-footer-twitter { + color: inherit !important; +} diff --git a/website/src/assets/svg-heart.svg b/website/src/assets/svg-heart.svg new file mode 100644 index 0000000..34b69fa --- /dev/null +++ b/website/src/assets/svg-heart.svg @@ -0,0 +1,4 @@ + + + + diff --git a/website/src/assets/svg-loading-spinner.svg b/website/src/assets/svg-loading-spinner.svg new file mode 100644 index 0000000..247931a --- /dev/null +++ b/website/src/assets/svg-loading-spinner.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/src/assets/svg-loading.svg b/website/src/assets/svg-loading.svg new file mode 100644 index 0000000..954ba80 --- /dev/null +++ b/website/src/assets/svg-loading.svg @@ -0,0 +1,3 @@ + + + diff --git a/website/src/assets/svg-placeholder.svg b/website/src/assets/svg-placeholder.svg new file mode 100644 index 0000000..21b2058 --- /dev/null +++ b/website/src/assets/svg-placeholder.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/website/src/assets/vikkie.png b/website/src/assets/vikkie.png new file mode 100644 index 0000000000000000000000000000000000000000..813631eaa146c13078e1f03977861b69f754f8ae GIT binary patch literal 9181 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 literal 0 HcmV?d00001 diff --git a/website/src/index.html b/website/src/index.html new file mode 100644 index 0000000..bebc373 --- /dev/null +++ b/website/src/index.html @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + Gifspin + + + +
+ +
+ +
+ + + + + + +
+ Spin direction + + + + +
+ +
+ Options + + + + +
+ +
+ Background color + + +
+ +
+ + +
+
+ +
+ +
+ +
+ +
+ + + +
+ + + + + diff --git a/website/src/scripts/api.d.ts b/website/src/scripts/api.d.ts new file mode 100644 index 0000000..872cb7f --- /dev/null +++ b/website/src/scripts/api.d.ts @@ -0,0 +1,36 @@ +export interface ApiOptions { + width: number; + height: number; + + frameCount: number; + frameDelay: number; + + flagCrop: boolean; + flagReverse: boolean; + flagFlatten: boolean; + + background: number; +} + +export interface ApiLimits { + sizeMax: number; + widthMax: number; + heightMax: number; + + frameCountMin: number; + frameCountMax: number; + frameDelayMin: number; + frameDelayMax: number; +} + +export interface ApiToken { + file: string; +} + +export type ApiResponse = + | { status: number; error: null; value: T } + | { status: number; error: string; value: null }; + +export declare function apiUpload(body: Blob): Promise>; + +export declare function apiSpin(token: ApiToken, options: ApiOptions): Promise>; diff --git a/website/src/scripts/api.js b/website/src/scripts/api.js new file mode 100644 index 0000000..077fb36 --- /dev/null +++ b/website/src/scripts/api.js @@ -0,0 +1,24 @@ +async function apiPost(url, body) { + const response = await fetch(url, { method: 'POST', body }); + + const status = response.status; + + const value = await response.json(); + const error = value?.err; + + if (error == null) { + return { status, error: null, value }; + } else { + return { status, error: String(error), value: null }; + } +} + +export function apiUpload(body) { + return apiPost('/api/upload', body); +} + +export function apiSpin(token, options) { + const url = '/api/spin?' + new URLSearchParams([['file', String(token.file)]]); + const body = new Blob([JSON.stringify(options)], { type: 'application/json' }); + return apiPost(url, body); +} diff --git a/website/src/scripts/index.js b/website/src/scripts/index.js new file mode 100644 index 0000000..d914d31 --- /dev/null +++ b/website/src/scripts/index.js @@ -0,0 +1,446 @@ +import { observe, computed, ignore } from 'patella'; + +import { apiUpload, apiSpin } from './api.js'; + +const envMaxFileSize = 5 * 1024 * 1024; +const envResolutionTarget = 400; + +const speedConfigs = [ + { frameCount: 90, frameDelay: 32, name: 'Slowest' }, + { frameCount: 60, frameDelay: 32, name: 'Slow' }, + { frameCount: 60, frameDelay: 16, name: 'Normal' }, + { frameCount: 48, frameDelay: 16, name: 'Fast' }, + { frameCount: 32, frameDelay: 16, name: 'Faster' }, + { frameCount: 24, frameDelay: 16, name: 'Fastest' }, + { frameCount: 16, frameDelay: 16, name: 'HELP' } +]; + +for (const speedConfig of speedConfigs) ignore(speedConfig); + +const $ = (id) => document.getElementById(id); + +const $settings = $('gs-settings') + , $settingsFile = $('gs-settings-file') + , $settingsSpeed = $('gs-settings-speed') + , $settingsDirectionRight = $('gs-settings-direction-right') + , $settingsDirectionLeft = $('gs-settings-direction-left') + , $settingsOptionsCrop = $('gs-settings-options-crop') + , $settingsOptionsFlatten = $('gs-settings-options-flatten') + , $settingsColor = $('gs-settings-color') + , $settingsColorPicker = $('gs-settings-color-picker') + , $settingsColorText = $('gs-settings-color-text') + , $settingsSubmitApply = $('gs-settings-submit-apply') + , $settingsSubmitDownload = $('gs-settings-submit-download') + , $previewOverlay = $('gs-preview-overlay') + , $previewIconPlaceholder = $('gs-preview-icon-placeholder') + , $previewIconLoading = $('gs-preview-icon-loading') + , $previewError = $('gs-preview-error') + , $previewErrorContent = $('gs-preview-error-content') + , $previewImage = $('gs-preview-image'); + +$settings.addEventListener('submit', (ev) => ev.preventDefault()); + +$settingsFile.value = ''; +$settingsSpeed.value = '2'; +$settingsDirectionRight.checked = true; +$settingsDirectionLeft.checked = false; +$settingsOptionsCrop.checked = false; +$settingsOptionsFlatten.checked = false; + +const settings = observe({ + speedIndex: 2, + speedConfig: null, + + flagReverse: false, + + flagCrop: false, + flagFlatten: false, + + colorString: '#0eaaaa', + colorValue: 0 +}); + +computed(() => { + settings.speedConfig = speedConfigs[settings.speedIndex] ?? null; +}); + +$settingsSpeed.addEventListener('change', () => { + settings.speedIndex = Number($settingsSpeed.value); +}); + +$settingsDirectionRight.addEventListener('change', () => { + if ($settingsDirectionRight.checked) settings.flagReverse = false; +}); + +$settingsDirectionLeft.addEventListener('change', () => { + if ($settingsDirectionLeft.checked) settings.flagReverse = true; +}); + +const colorParse = (string) => { + if (string == null) return null; + + let result = /([\da-f]{6})/i.exec(string); + if (result == null) return null; + + return parseInt(result[1], 16); +}; + +const colorStringify = (value) => { + return '#' + Number(value).toString(16); +}; + +computed(() => { + settings.colorValue = colorParse(settings.colorString); +}); + +computed(() => { + $settingsColor.disabled = !settings.flagFlatten; +}); + +computed(() => { + $settingsColorPicker.value = settings.colorString; +}); + +$settingsColorPicker.addEventListener('change', () => { + settings.colorString = $settingsColorText.value = $settingsColorPicker.value; +}); + +$settingsColorText.value = ''; +$settingsColorText.placeholder = settings.colorString; + +$settingsColorText.addEventListener('input', () => { + let value = colorParse($settingsColorText.value); + if (value != null) settings.colorString = colorStringify(value); +}); + +$settingsColorText.addEventListener('change', () => { + let value = colorParse($settingsColorText.value); + if (value != null) $settingsColorText.value = colorStringify(value); +}); + +const preview = observe({ + overlay: 'placeholder', + content: null +}); + +const hide = ($el) => $el.classList.add('gs-hidden'); +const show = ($el) => $el.classList.remove('gs-hidden'); + +computed(() => { + hide($previewOverlay); + hide($previewIconPlaceholder); + hide($previewIconLoading); + + if (preview.overlay === 'placeholder') { + show($previewIconPlaceholder); + show($previewOverlay); + return; + } + + if (preview.overlay === 'loading') { + show($previewIconLoading); + show($previewOverlay); + return; + } +}); + +computed(() => { + hide($previewError); + hide($previewImage); + + let content = preview.content; + if (content == null) return; + + if (content.type === 'error') { + let error = content.error; + if (error != null) $previewErrorContent.innerText = error; + show($previewError); + return; + } + + if (content.type === 'image') { + show($previewImage); + return; + } +}); + +const task = observe({ + value: null, + locked: false +}); + +const taskNext = (provider) => { + if (task.value == null) { + task.value = (async () => { + try { + await provider(); + } catch (err) { + console.error(err); + } finally { + task.value = null; + } + })(); + } +}; + +computed(() => { + task.locked = task.value != null; +}); + +const state = observe({ + source: null, + tokenInput: null, + tokenOutput: null +}); + +computed(() => { + $settingsFile.disabled = task.locked; +}); + +computed(() => { + $settingsSubmitApply.disabled = task.locked || state.source == null; +}); + +computed(() => { + $settingsSubmitDownload.disabled = task.locked || state.tokenOutput == null; +}); + +$settingsFile.addEventListener('change', () => { + taskNext(async () => { + + let file = $settingsFile.files.item(0); + if (file == null) return; + + preview.overlay = 'loading'; + preview.content = null; + + let urlPrev = state.source?.url; + if (urlPrev != null) URL.revokeObjectURL(urlPrev); + + state.source = null; + state.tokenInput = null; + state.tokenOutput = null; + + if (file.size > envMaxFileSize) { + preview.overlay = null; + preview.content = ignore({ type: 'error', error: 'Uploaded image is too large, maximum file size is 5mb' }); + return; + } + + let url = URL.createObjectURL(file); + + await new Promise((resolve, reject) => { + + $previewImage.decoding = 'sync'; + $previewImage.src = ''; + + let onLoad = () => { + let width = $previewImage.naturalWidth; + let height = $previewImage.naturalHeight; + + if (width < 4 || height < 4) { + preview.overlay = null; + preview.content = ignore({ type: 'error', error: 'Uploaded image is invalid / too small' }); + } else { + preview.overlay = null; + preview.content = ignore({ type: 'image' }); + state.source = ignore({ file, url, width, height }); + } + + removeListeners(); + resolve(); + }; + + let onError = () => { + preview.overlay = null; + preview.content = ignore({ type: 'error', error: 'Uploaded image is invalid' }); + + removeListeners(); + resolve(); + }; + + let removeListeners = () => { + $previewImage.removeEventListener('load', onLoad); + $previewImage.removeEventListener('error', onError); + }; + + $previewImage.addEventListener('load', onLoad); + $previewImage.addEventListener('error', onError); + + $previewImage.src = url; + + }); + + }); +}); + +const optionsGetResolution = () => { + let actual = state.source; + if (actual == null) return null; + + let target = { width: actual.width, height: actual.height }; + + if (target.width > envResolutionTarget) { + target = { + width: envResolutionTarget, + height: (target.height / target.width) * envResolutionTarget + }; + } + + if (target.height > envResolutionTarget) { + target = { + width: (target.width / target.height) * envResolutionTarget, + height: envResolutionTarget + }; + } + + target = { + width: Math.round(target.width), + height: Math.round(target.height) + }; + + return ignore(target); +}; + +const optionsFromSettings = () => { + let options = {}; + + let resolution = optionsGetResolution(); + options.width = resolution.width; + options.height = resolution.height; + + options.frameCount = settings.speedConfig.frameCount; + options.frameDelay = settings.speedConfig.frameDelay; + + options.flagCrop = settings.flagCrop; + options.flagReverse = settings.flagReverse; + options.flagFlatten = settings.flagFlatten; + + if (settings.flagFlatten) { + options.background = (settings.colorValue << 8 | 0xFF) >>> 0; + } else { + options.background = 0; + } + + return ignore(options); +}; + +$settingsSubmitApply.addEventListener('click', () => { + taskNext(async () => { + + let source = state.source; + if (source == null) return; + + preview.overlay = 'loading'; + + let tokenInput = state.tokenInput; + if (tokenInput == null) { + try { + let { status, error, value } = await apiUpload(source.file); + if (value != null) { + tokenInput = ignore(value); + } else { + preview.overlay = null; + preview.content = ignore({ + type: 'error', + error: 'Failed to upload source image, server responded with status ' + status + ', message:\n' + error + }); + return; + } + } catch (err) { + preview.overlay = null; + preview.content = ignore({ + type: 'error', + error: 'Failed to upload source image, unexpected internal error occurred:\n' + err + }); + return; + } + } + + let tokenOutput; + try { + let { status, error, value } = await apiSpin(tokenInput, optionsFromSettings()); + if (value != null) { + tokenOutput = ignore(value); + } else { + preview.overlay = null; + preview.content = ignore({ + type: 'error', + error: 'Failed to spin image, server responded with status ' + status + ', message:\n' + error + }); + return; + } + } catch (err) { + preview.overlay = null; + preview.content = ignore({ + type: 'error', + error: 'Failed to spin image, unexpected internal error occurred:\n' + err + }); + return; + } + + state.tokenInput = tokenInput; + state.tokenOutput = tokenOutput; + + await new Promise((resolve, reject) => { + + let onLoad = () => { + preview.overlay = null; + preview.content = ignore({ type: 'image' }); + + removeListeners(); + resolve(); + }; + + let onError = () => { + preview.overlay = null; + preview.content = ignore({ type: 'error', error: 'Failed to load output image' }); + + removeListeners(); + resolve(); + }; + + let removeListeners = () => { + $previewImage.removeEventListener('load', onLoad); + $previewImage.removeEventListener('error', onError); + }; + + $previewImage.addEventListener('load', onLoad); + $previewImage.addEventListener('error', onError); + + preview.content = null; + + $previewImage.decoding = 'sync'; + $previewImage.src = tokenOutput.file; + + }); + + }); +}); + +$settingsSubmitDownload.addEventListener('click', () => { + taskNext(async () => { + + let source = state.source; + if (source == null) return; + + let tokenOutput = state.tokenOutput; + if (tokenOutput == null) return; + + let filename; + filename = source.file.name; + filename = filename.replace(/\.[^/.]*?$/, ''); + filename = filename + '-' + tokenOutput.file.substring(23, 27) + '.gif'; + + let url = new URL(location.href); + url.pathname = tokenOutput.file; + url.search = String(new URLSearchParams([['attachment', filename]])); + url.hash = ''; + + let $link = document.body.appendChild(document.createElement('a')); + $link.href = String(url); + $link.click(); + $link.remove(); + + }); +});