From 3627b39af468b8e88163667969bc3a1f94238750 Mon Sep 17 00:00:00 2001 From: nucleogenic Date: Mon, 14 Nov 2022 17:32:15 +0000 Subject: [PATCH] New theme for web UI (#957) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Docker environment fixes * New theme for web UI * Apply breaking wrap to filenames only * Reduce font sizes, whitespace and padding * Right align action fields/buttons * Improve mobile header, hide superfluous UI elements when logged out, drop placeholders from login labels, various other adjustments * Force footer to bottom of screen * Show manual link to logged out users * Reduce header text size on desktop * Fix incorrect selector ID * Fix selector referencing old class name * Fix right-aligned message when images table empty * Add CSS linter/auto-formatter * Run Stylelint + Prettier against modern theme CSS * Select default theme based on browser’s user agent * Style inputs on mobile/tablet devices * Fixes for Safari 14 on iOS + iPad OS * Explicitly define mobile browser support, switch to bare ua-parser without user-agent wrapper * Add LICENSE file for modern theme icons * Improve theme selection query string/field naming. * Remove patch workaround from Docker build * Update log level for UAs to info * Move Bootstrap Reboot CSS to CDN * Account for LUN column in attached devices table * Prevent wrapping of config forms on small viewports * Fix Stylelint issues * Auto-format CSS with Prettier --- .dockerignore | 3 +- .gitignore | 1 + docker/rascsi-web/Dockerfile | 14 +- docker/rascsi/Dockerfile | 8 +- docker/rascsi/cfilesystem.patch | 24 - python/web/.prettierrc.json | 3 + python/web/.stylelintrc.json | 6 + python/web/package-lock.json | 3343 +++++++++++++++++ python/web/package.json | 8 + python/web/requirements.txt | 1 + python/web/src/settings.py | 9 + python/web/src/static/logo.png | Bin 0 -> 60324 bytes .../src/static/{ => themes/classic}/style.css | 15 +- .../src/static/themes/modern/icons/LICENSE | 26 + .../themes/modern/icons/device-hard-drive.svg | 1 + .../themes/modern/icons/device-network.svg | 1 + .../themes/modern/icons/device-optical.svg | 1 + .../themes/modern/icons/device-other.svg | 1 + .../themes/modern/icons/device-printer.svg | 1 + .../themes/modern/icons/device-removable.svg | 1 + .../themes/modern/icons/device-reserved.svg | 1 + .../src/static/themes/modern/icons/error.svg | 1 + .../static/themes/modern/icons/file-copy.svg | 1 + .../themes/modern/icons/file-delete.svg | 1 + .../modern/icons/file-device-attach.svg | 1 + .../themes/modern/icons/file-extract.svg | 1 + .../static/themes/modern/icons/file-info.svg | 1 + .../themes/modern/icons/file-rename.svg | 1 + .../src/static/themes/modern/icons/info.svg | 1 + .../static/themes/modern/icons/log-out.svg | 1 + .../themes/modern/icons/manual copy.svg | 1 + .../src/static/themes/modern/icons/manual.svg | 1 + .../static/themes/modern/icons/success.svg | 1 + .../themes/modern/icons/upload-error.svg | 1 + .../modern/icons/upload-in-progress.svg | 1 + .../themes/modern/icons/upload-queued.svg | 1 + .../themes/modern/icons/upload-success.svg | 1 + .../static/themes/modern/icons/warning.svg | 1 + python/web/src/static/themes/modern/style.css | 890 +++++ python/web/src/templates/base.html | 91 +- python/web/src/templates/deviceinfo.html | 2 +- python/web/src/templates/diskinfo.html | 2 +- python/web/src/templates/drives.html | 2 +- python/web/src/templates/index.html | 157 +- python/web/src/templates/logs.html | 2 +- python/web/src/templates/manpage.html | 7 +- python/web/src/web.py | 32 +- python/web/src/web_utils.py | 33 + python/web/tests/api/test_settings.py | 46 + 49 files changed, 4610 insertions(+), 139 deletions(-) delete mode 100644 docker/rascsi/cfilesystem.patch create mode 100644 python/web/.prettierrc.json create mode 100644 python/web/.stylelintrc.json create mode 100644 python/web/package-lock.json create mode 100644 python/web/package.json create mode 100644 python/web/src/static/logo.png rename python/web/src/static/{ => themes/classic}/style.css (95%) create mode 100644 python/web/src/static/themes/modern/icons/LICENSE create mode 100644 python/web/src/static/themes/modern/icons/device-hard-drive.svg create mode 100644 python/web/src/static/themes/modern/icons/device-network.svg create mode 100644 python/web/src/static/themes/modern/icons/device-optical.svg create mode 100644 python/web/src/static/themes/modern/icons/device-other.svg create mode 100644 python/web/src/static/themes/modern/icons/device-printer.svg create mode 100644 python/web/src/static/themes/modern/icons/device-removable.svg create mode 100644 python/web/src/static/themes/modern/icons/device-reserved.svg create mode 100644 python/web/src/static/themes/modern/icons/error.svg create mode 100644 python/web/src/static/themes/modern/icons/file-copy.svg create mode 100644 python/web/src/static/themes/modern/icons/file-delete.svg create mode 100644 python/web/src/static/themes/modern/icons/file-device-attach.svg create mode 100644 python/web/src/static/themes/modern/icons/file-extract.svg create mode 100644 python/web/src/static/themes/modern/icons/file-info.svg create mode 100644 python/web/src/static/themes/modern/icons/file-rename.svg create mode 100644 python/web/src/static/themes/modern/icons/info.svg create mode 100644 python/web/src/static/themes/modern/icons/log-out.svg create mode 100644 python/web/src/static/themes/modern/icons/manual copy.svg create mode 100644 python/web/src/static/themes/modern/icons/manual.svg create mode 100644 python/web/src/static/themes/modern/icons/success.svg create mode 100644 python/web/src/static/themes/modern/icons/upload-error.svg create mode 100644 python/web/src/static/themes/modern/icons/upload-in-progress.svg create mode 100644 python/web/src/static/themes/modern/icons/upload-queued.svg create mode 100644 python/web/src/static/themes/modern/icons/upload-success.svg create mode 100644 python/web/src/static/themes/modern/icons/warning.svg create mode 100644 python/web/src/static/themes/modern/style.css diff --git a/.dockerignore b/.dockerignore index ce6e2cda..3f5010b3 100644 --- a/.dockerignore +++ b/.dockerignore @@ -7,11 +7,10 @@ !/docker/rascsi-web/start.sh !/doc !/python -!/src +!/cpp !/test !/easyinstall.sh !/LICENCE -!/lido-driver.img !/README.md # From .gitignore diff --git a/.gitignore b/.gitignore index c2ce1632..09aa2a39 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ rascsi_interface_pb2.py messages.pot messages.mo report.xml +node_modules # Intermediate files from astyle *.orig diff --git a/docker/rascsi-web/Dockerfile b/docker/rascsi-web/Dockerfile index 106137be..3937b3c0 100644 --- a/docker/rascsi-web/Dockerfile +++ b/docker/rascsi-web/Dockerfile @@ -6,19 +6,27 @@ FROM "${OS_ARCH}/${OS_DISTRO}:${OS_VERSION}" EXPOSE 80 443 ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y --no-install-recommends sudo systemd rsyslog procps man-db man2html +RUN apt-get update \ + && apt-get install -y --no-install-recommends \ + sudo \ + systemd \ + rsyslog \ + procps \ + man-db \ + wget \ + git RUN groupadd pi RUN useradd --create-home --shell /bin/bash -g pi pi RUN echo "pi ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers RUN echo "pi:rascsi" | chpasswd -RUN mkdir /home/pi/afpshare +RUN mkdir /home/pi/shared_files RUN touch /etc/dhcpcd.conf RUN mkdir -p /etc/network/interfaces.d/ -WORKDIR /home/pi/RASCSI USER pi +WORKDIR /home/pi/RASCSI COPY --chown=pi:pi . . # Install standalone RaSCSI web UI diff --git a/docker/rascsi/Dockerfile b/docker/rascsi/Dockerfile index 0eb42378..174846ad 100644 --- a/docker/rascsi/Dockerfile +++ b/docker/rascsi/Dockerfile @@ -6,20 +6,16 @@ FROM "${OS_ARCH}/${OS_DISTRO}:${OS_VERSION}" EXPOSE 6868 ARG DEBIAN_FRONTEND=noninteractive -RUN apt-get update && apt-get install -y --no-install-recommends sudo systemd rsyslog patch +RUN apt-get update && apt-get install -y --no-install-recommends sudo systemd rsyslog patch wget RUN groupadd pi RUN useradd --create-home --shell /bin/bash -g pi pi RUN echo "pi ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers -WORKDIR /home/pi/RASCSI USER pi +WORKDIR /home/pi/RASCSI COPY --chown=pi:pi . . -# Workaround for Bullseye amd64 compilation error -# https://github.com/akuker/RASCSI/issues/821 -RUN patch -p0 < docker/rascsi/cfilesystem.patch - # Install RaSCSI standalone RUN ./easyinstall.sh --run_choice=10 --cores=`nproc` diff --git a/docker/rascsi/cfilesystem.patch b/docker/rascsi/cfilesystem.patch deleted file mode 100644 index 32d96e93..00000000 --- a/docker/rascsi/cfilesystem.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- src/raspberrypi/devices/cfilesystem.cpp 2022-09-08 12:07:14.000000000 +0100 -+++ src/raspberrypi/devices/cfilesystem.cpp.patched 2022-09-08 12:12:55.000000000 +0100 -@@ -1075,12 +1075,15 @@ - m_dirHuman.name[i] = ' '; - } - -- for (i = 0; i < 10; i++) { -- if (p < m_pszHumanExt) -- m_dirHuman.add[i] = *p++; -- else -- m_dirHuman.add[i] = '\0'; -- } -+ // This code causes a compilation error on Debian "bullseye" (amd64) -+ // https://github.com/akuker/RASCSI/issues/821 -+ // -+ // for (i = 0; i < 10; i++) { -+ // if (p < m_pszHumanExt) -+ // m_dirHuman.add[i] = *p++; -+ // else -+ // m_dirHuman.add[i] = '\0'; -+ // } - - if (*p == '.') - p++; diff --git a/python/web/.prettierrc.json b/python/web/.prettierrc.json new file mode 100644 index 00000000..de753c53 --- /dev/null +++ b/python/web/.prettierrc.json @@ -0,0 +1,3 @@ +{ + "printWidth": 100 +} diff --git a/python/web/.stylelintrc.json b/python/web/.stylelintrc.json new file mode 100644 index 00000000..d7b63129 --- /dev/null +++ b/python/web/.stylelintrc.json @@ -0,0 +1,6 @@ +{ + "extends": ["stylelint-config-standard", "stylelint-config-prettier"], + "rules": { + "no-descending-specificity": null + } +} \ No newline at end of file diff --git a/python/web/package-lock.json b/python/web/package-lock.json new file mode 100644 index 00000000..d2bae6b7 --- /dev/null +++ b/python/web/package-lock.json @@ -0,0 +1,3343 @@ +{ + "name": "web", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "2.7.1", + "stylelint": "^14.14.1", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-standard": "^29.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2", + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "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/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/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/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "dev": true, + "engines": { + "node": ">=12.22" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "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/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "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/import-fresh/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/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "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/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "dev": true + }, + "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/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "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/prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "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/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/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/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/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/slice-ansi/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/slice-ansi/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/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "node_modules/stylelint": { + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.1.tgz", + "integrity": "sha512-Jnftu+lSD8cSpcV/+Z2nfgfgFpTIS1FcujezXPngtoIQ6wtwutL22MsNE0dJuMiM1h1790g2qIjAyUZCMrX4sw==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + }, + "bin": { + "stylelint": "bin/stylelint.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-prettier": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", + "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", + "dev": true, + "bin": { + "stylelint-config-prettier": "bin/check.js", + "stylelint-config-prettier-check": "bin/check.js" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "stylelint": ">=11.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "dev": true, + "peerDependencies": { + "stylelint": "^14.10.0" + } + }, + "node_modules/stylelint-config-standard": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz", + "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==", + "dev": true, + "dependencies": { + "stylelint-config-recommended": "^9.0.0" + }, + "peerDependencies": { + "stylelint": "^14.14.0" + } + }, + "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/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/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/supports-hyperlinks/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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "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/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@csstools/selector-specificity": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.0.2.tgz", + "integrity": "sha512-IkpVW/ehM1hWKln4fCA3NzJU8KwD+kIOvPZA4cqxoJHtE21CCzjyp+Kxbu0i5I4tBNOlXPL9mjwnWlL0VEG4Fg==", + "dev": true, + "requires": {} + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "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 + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "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" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + } + }, + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "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-functions-list": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.1.0.tgz", + "integrity": "sha512-/9lCvYZaUbBGvYUgYGFJ4dcYiyqdhSjG7IPVluoV8A1ILjkF7ilmhp1OGUz8n+nmBcu0RNrQAzgD8B6FJbrt2w==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "requires": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "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" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true + }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "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" + }, + "dependencies": { + "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 + } + } + }, + "import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "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 + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.26.0.tgz", + "integrity": "sha512-5FZRzrZzNTBruuurWpvZnvP9pum+fe0HcK8z/ooo+U+Hmp4vtbyp1/QDsqmufirXy4egGzbaH/y2uCZf+6W5Kg==", + "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 + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + } + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "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" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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 + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.4.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", + "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", + "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "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 + }, + "prettier": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", + "dev": true + }, + "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 + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "requires": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "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" + } + }, + "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 + } + } + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz", + "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "requires": { + "min-indent": "^1.0.0" + } + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true + }, + "stylelint": { + "version": "14.14.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-14.14.1.tgz", + "integrity": "sha512-Jnftu+lSD8cSpcV/+Z2nfgfgFpTIS1FcujezXPngtoIQ6wtwutL22MsNE0dJuMiM1h1790g2qIjAyUZCMrX4sw==", + "dev": true, + "requires": { + "@csstools/selector-specificity": "^2.0.2", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^7.0.1", + "css-functions-list": "^3.1.0", + "debug": "^4.3.4", + "fast-glob": "^3.2.12", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^6.0.1", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.2.0", + "ignore": "^5.2.0", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.26.0", + "mathml-tag-names": "^2.1.3", + "meow": "^9.0.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.18", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^2.3.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "v8-compile-cache": "^2.3.0", + "write-file-atomic": "^4.0.2" + } + }, + "stylelint-config-prettier": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier/-/stylelint-config-prettier-9.0.3.tgz", + "integrity": "sha512-5n9gUDp/n5tTMCq1GLqSpA30w2sqWITSSEiAWQlpxkKGAUbjcemQ0nbkRvRUa0B1LgD3+hCvdL7B1eTxy1QHJg==", + "dev": true, + "requires": {} + }, + "stylelint-config-recommended": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-9.0.0.tgz", + "integrity": "sha512-9YQSrJq4NvvRuTbzDsWX3rrFOzOlYBmZP+o513BJN/yfEmGSr0AxdvrWs0P/ilSpVV/wisamAHu5XSk8Rcf4CQ==", + "dev": true, + "requires": {} + }, + "stylelint-config-standard": { + "version": "29.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-29.0.0.tgz", + "integrity": "sha512-uy8tZLbfq6ZrXy4JKu3W+7lYLgRQBxYTUUB88vPgQ+ZzAxdrvcaSUW9hOMNLYBnwH+9Kkj19M2DHdZ4gKwI7tg==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^9.0.0" + } + }, + "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" + } + }, + "supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "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 + }, + "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" + } + } + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "table": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", + "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "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 + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "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 + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + } + } +} diff --git a/python/web/package.json b/python/web/package.json new file mode 100644 index 00000000..56ef0a57 --- /dev/null +++ b/python/web/package.json @@ -0,0 +1,8 @@ +{ + "devDependencies": { + "prettier": "2.7.1", + "stylelint": "^14.14.1", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-standard": "^29.0.0" + } +} diff --git a/python/web/requirements.txt b/python/web/requirements.txt index 43736967..83045903 100644 --- a/python/web/requirements.txt +++ b/python/web/requirements.txt @@ -5,3 +5,4 @@ protobuf==3.20.2 requests==2.28.1 simplepam==0.1.5 flask_babel==2.0.0 +ua-parser==0.16.1 \ No newline at end of file diff --git a/python/web/src/settings.py b/python/web/src/settings.py index f33fc52a..538c7bfe 100644 --- a/python/web/src/settings.py +++ b/python/web/src/settings.py @@ -22,3 +22,12 @@ AUTH_GROUP = "rascsi" # The language locales supported by RaSCSI LANGUAGES = ["en", "de", "sv", "fr", "es"] + +# Available themes +TEMPLATE_THEMES = ["classic", "modern"] + +# Default theme for modern browsers +TEMPLATE_THEME_DEFAULT = "modern" + +# Fallback theme for older browsers +TEMPLATE_THEME_LEGACY = "classic" \ No newline at end of file diff --git a/python/web/src/static/logo.png b/python/web/src/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1caa4d438b9bcf6d75124630369493bd189ea33a GIT binary patch literal 60324 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 lL=X1UbRai^4{!z?FeZ*{)I!0+)J3D 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 literal 0 HcmV?d00001 diff --git a/python/web/src/static/style.css b/python/web/src/static/themes/classic/style.css similarity index 95% rename from python/web/src/static/style.css rename to python/web/src/static/themes/classic/style.css index 15ea683c..a3c2b85c 100644 --- a/python/web/src/static/style.css +++ b/python/web/src/static/themes/classic/style.css @@ -47,11 +47,15 @@ div.footer { font-family: monospace; } -div.logged_in { +div.footer div.theme-change-hint { + margin-bottom: 15px; +} + +div.logged-in { background-color: green; } -div.logged_out { +div.logged-out { background-color: red; } @@ -66,9 +70,12 @@ div.flash { div.flash div { color: white; - font-size: 18px; - white-space: pre-line; padding: 2px 5px; + font-size: 18px; +} + +div.flash div div { + white-space: pre-line; } div.flash div.success { diff --git a/python/web/src/static/themes/modern/icons/LICENSE b/python/web/src/static/themes/modern/icons/LICENSE new file mode 100644 index 00000000..be59e696 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/LICENSE @@ -0,0 +1,26 @@ +Feather Icons +https://github.com/feathericons/feather + +--- + +The MIT License (MIT) + +Copyright (c) 2013-2017 Cole Bemis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-hard-drive.svg b/python/web/src/static/themes/modern/icons/device-hard-drive.svg new file mode 100644 index 00000000..8e90fa1b --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-hard-drive.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-network.svg b/python/web/src/static/themes/modern/icons/device-network.svg new file mode 100644 index 00000000..0a0586d3 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-network.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-optical.svg b/python/web/src/static/themes/modern/icons/device-optical.svg new file mode 100644 index 00000000..2595b444 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-optical.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-other.svg b/python/web/src/static/themes/modern/icons/device-other.svg new file mode 100644 index 00000000..54ce094a --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-other.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-printer.svg b/python/web/src/static/themes/modern/icons/device-printer.svg new file mode 100644 index 00000000..8a9a7ace --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-printer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-removable.svg b/python/web/src/static/themes/modern/icons/device-removable.svg new file mode 100644 index 00000000..46c72990 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-removable.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/device-reserved.svg b/python/web/src/static/themes/modern/icons/device-reserved.svg new file mode 100644 index 00000000..f4131b85 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/device-reserved.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/error.svg b/python/web/src/static/themes/modern/icons/error.svg new file mode 100644 index 00000000..fc52172a --- /dev/null +++ b/python/web/src/static/themes/modern/icons/error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-copy.svg b/python/web/src/static/themes/modern/icons/file-copy.svg new file mode 100644 index 00000000..4e0b09f1 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-delete.svg b/python/web/src/static/themes/modern/icons/file-delete.svg new file mode 100644 index 00000000..55650bd4 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-delete.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-device-attach.svg b/python/web/src/static/themes/modern/icons/file-device-attach.svg new file mode 100644 index 00000000..c89dd41c --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-device-attach.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-extract.svg b/python/web/src/static/themes/modern/icons/file-extract.svg new file mode 100644 index 00000000..8fdafa93 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-extract.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-info.svg b/python/web/src/static/themes/modern/icons/file-info.svg new file mode 100644 index 00000000..8710306d --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/file-rename.svg b/python/web/src/static/themes/modern/icons/file-rename.svg new file mode 100644 index 00000000..ec7b4ca2 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/file-rename.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/info.svg b/python/web/src/static/themes/modern/icons/info.svg new file mode 100644 index 00000000..a09fa5f1 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/info.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/log-out.svg b/python/web/src/static/themes/modern/icons/log-out.svg new file mode 100644 index 00000000..628a96de --- /dev/null +++ b/python/web/src/static/themes/modern/icons/log-out.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/manual copy.svg b/python/web/src/static/themes/modern/icons/manual copy.svg new file mode 100644 index 00000000..12ffcbc4 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/manual copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/manual.svg b/python/web/src/static/themes/modern/icons/manual.svg new file mode 100644 index 00000000..12ffcbc4 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/manual.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/success.svg b/python/web/src/static/themes/modern/icons/success.svg new file mode 100644 index 00000000..27682f73 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/success.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/upload-error.svg b/python/web/src/static/themes/modern/icons/upload-error.svg new file mode 100644 index 00000000..b102dd46 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/upload-error.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/upload-in-progress.svg b/python/web/src/static/themes/modern/icons/upload-in-progress.svg new file mode 100644 index 00000000..044a75d3 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/upload-in-progress.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/upload-queued.svg b/python/web/src/static/themes/modern/icons/upload-queued.svg new file mode 100644 index 00000000..f6b1a8df --- /dev/null +++ b/python/web/src/static/themes/modern/icons/upload-queued.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/upload-success.svg b/python/web/src/static/themes/modern/icons/upload-success.svg new file mode 100644 index 00000000..08ff317c --- /dev/null +++ b/python/web/src/static/themes/modern/icons/upload-success.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/icons/warning.svg b/python/web/src/static/themes/modern/icons/warning.svg new file mode 100644 index 00000000..6dcb0963 --- /dev/null +++ b/python/web/src/static/themes/modern/icons/warning.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/python/web/src/static/themes/modern/style.css b/python/web/src/static/themes/modern/style.css new file mode 100644 index 00000000..dbc53dca --- /dev/null +++ b/python/web/src/static/themes/modern/style.css @@ -0,0 +1,890 @@ +@import url("//cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.2/css/bootstrap-reboot.min.css"); + +:root { + --success: var(--bs-success); + --danger: var(--bs-danger); + --info: #80eaff; + --warning: var(--bs-warning); + --dark: var(--bs-dark); + --light: var(--bs-light); + --primary: var(--bs-primary); + --secondary: var(--bs-secondary); + --text-color: var(--bs-body-color); + --border-radius: 0.2rem; + --input-padding: 0.25rem 0.5rem; + --font-size: 0.85rem; + --icon-size: 1.2rem; +} + +/* + ------------------------------------------------------------------------------ + General layout + ------------------------------------------------------------------------------ + */ +html, +body { + height: 100%; +} + +body { + display: flex; + flex-direction: column; + font-size: var(--font-size); +} + +div.content { + flex-grow: 1; + padding: 1rem; + margin: auto; + width: 100%; +} + +hr { + display: none; +} + +a:hover { + text-decoration: none; +} + +/* + ------------------------------------------------------------------------------ + Tables + ------------------------------------------------------------------------------ + */ +table { + width: 100%; + border: 1px solid var(--dark); + border-collapse: collapse; +} + +table th, +table td { + padding: 0.5rem; + text-align: left; + height: 2.5rem; +} + +table th { + background: var(--dark); + border: 1px solid var(--dark); + color: #fff; +} + +table td { + border: 1px solid #ccc; + padding: 0.25rem 0.5rem; +} + +/* + ------------------------------------------------------------------------------ + Forms + ------------------------------------------------------------------------------ + */ +form { + display: inline-block; +} + +input, +select, +button, +label { + margin: 0.15rem 0; +} + +input, +select, +button { + border-radius: var(--border-radius); + border: 1px solid #ccc; + font-size: var(--font-size); + font-weight: 400; + line-height: 1.25; + color: var(--text-color); +} + +input[type="submit"], +button { + padding: var(--input-padding); + background-color: #efefef; +} + +input[type="text"], +input[type="number"], +input[type="url"], +input[type="password"] { + display: inline-block; + padding: var(--input-padding); + background-color: #fff; + background-clip: padding-box; + appearance: none; +} + +select { + display: inline-block; + padding: 0.275rem 2.25rem 0.275em 0.75rem; + -moz-padding-start: calc(0.75rem - 3px); + background-color: #fff; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + background-size: 16px 12px; + appearance: none; +} + +/* + ------------------------------------------------------------------------------ + Dropzone + ------------------------------------------------------------------------------ + */ +.dropzone { + display: flex; + flex-wrap: wrap; +} + +.dropzone p, +.dropzone .dz-default { + flex: 0 0 100%; +} + +.dropzone .dz-button { + width: 100%; + padding: 2rem 4rem; + border: 2px dashed darkcyan; + background: lightcyan; +} + +.dropzone .dz-preview .dz-image, +.dropzone .dz-preview .dz-success-mark, +.dropzone .dz-preview .dz-error-mark { + display: none; +} + +.dropzone .dz-preview { + display: inline-block; + background: var(--light) url("icons/upload-queued.svg") no-repeat 1rem center; + padding: 1rem 1rem 1rem 3.5rem; + margin: 1rem 1rem 0 0; + border-radius: var(--border-radius); +} + +.dropzone .dz-preview.dz-processing { + background: #ededbe url("icons/upload-in-progress.svg") no-repeat 1rem center; +} + +.dropzone .dz-preview.dz-success { + background: #e0f5df url("icons/upload-success.svg") no-repeat 1rem center; +} + +.dropzone .dz-preview.dz-error { + background: #fae2e2 url("icons/upload-error.svg") no-repeat 1rem center; +} + +.dropzone .dz-preview .dz-error-message { + color: var(--danger); +} + +.dropzone .dz-preview.dz-processing .dz-progress { + display: block; +} + +.dropzone .dz-preview.dz-error .dz-progress, +.dropzone .dz-preview:not(.dz-processing) .dz-progress { + display: none; +} + +.dropzone .dz-preview .dz-progress .dz-upload { + width: 1px; + background: var(--dark); + display: block; + height: 0.5rem; + margin-top: 0.25rem; +} + +/* + ------------------------------------------------------------------------------ + Header + ------------------------------------------------------------------------------ + */ +div.header { + display: flex; +} + +div.header div.title { + order: 1; + text-align: left; + flex-grow: 1; +} + +div.header div.title h1 { + margin: 0; + color: #f9f9f9; + font-size: 1.25rem; +} + +div.header div.title a { + text-decoration: none; +} + +div.header div.hostname { + display: none; +} + +div.header div.login-status { + order: 10; +} + +div.header div.login-status form { + display: flex; +} + +div.header span.logged-in-as-text em { + font-weight: bold; + font-style: normal; +} + +div.header div.login-form-title { + display: none; +} + +div.header div.authentication-disabled { + background: var(--danger); + border-radius: var(--border-radius); + padding: 0 0.5rem; +} + +@media (max-width: 820px) { + div.header { + min-height: 3.5rem; /* Safari 14 iOS and iPad OS */ + } + + body:not(.logged-in) div.header { + flex-wrap: wrap; + min-height: 8.875rem; /* Safari 14 iOS and iPad OS */ + } + + div.header div.title { + background: var(--dark); + } + + div.header div.title a { + display: block; + background: url("/static/logo.png") no-repeat; + background-size: auto 2rem; + background-position: 1rem center; + padding: 1rem 1rem 1rem 3.5rem; + } + + div.header div.login-status.logged-out { + flex: 0 0 100%; + } + + div.header div.login-status.logged-out form { + align-items: end; + padding: 1rem; + background: var(--light); + border-bottom: 1px solid #ccc; + } + + div.header div.login-status.logged-out form span { + display: block; + padding: 0 0.1rem; + flex-grow: 1; + } + + div.header div.login-status.logged-out form label { + display: block; + text-align: left; + margin: 0; + padding: 0; + } + + div.header div.login-status.logged-out form input[type="submit"] { + flex-grow: 0.5; + margin-top: auto; /* Safari 14 iOS and iPad OS */ + } + + div.header div.login-status.logged-out form input:not([type="submit"]) { + width: 100%; + } + + div.header div.login-status.logged-in { + background: var(--dark); + display: flex; + align-items: center; + } + + div.header div.login-status.logged-in span.logged-in-as-text, + div.header div.login-status.logged-in span.separator { + display: none; + } + + div.header div.login-status.logged-in a { + margin-right: 1rem; + color: var(--secondary); + text-decoration: none; + } +} + +@media (min-width: 821px) { + div.header { + background: var(--dark); + align-items: center; + padding: 0.5rem 1.25rem; + color: #fff; + } + + div.header div.title a { + display: inline-block; + background: url("/static/logo.png") no-repeat; + background-size: auto 40px; + background-position: left center; + padding-left: 3rem; + } + + div.header div.title a h1 { + font-size: 1.5rem; + padding: 0.25rem; + } + + @supports (-webkit-background-clip: text) { + div.header div.title a:hover h1 { + background: linear-gradient( + to right, + rgb(101 204 51 / 100%) 0%, + rgb(255 204 51 / 100%) 10%, + rgb(255 153 51 / 100%) 20%, + rgb(205 51 50 / 100%) 55%, + rgb(152 50 153 / 100%) 100% + ); + + -webkit-background-clip: text; /* stylelint-disable-line */ + -webkit-text-fill-color: transparent; /* stylelint-disable-line */ + } + } + + div.header div.login-status.logged-out form label, + div.header div.login-status.logged-out form input { + margin-left: 0.5rem; + } + + div.header div.login-status.logged-out form input:not([type="submit"]) { + width: 8rem; + background: var(--dark); + border-color: var(--secondary); + color: #fff; + } + + div.header div.login-status.logged-out form input::-webkit-credentials-auto-fill-button { + background-color: #ccc; + } + + div.header div.login-status.logged-out form input[type="submit"] { + background: var(--secondary); + border-color: var(--secondary); + color: #fff; + } + + div.header div.login-status.logged-in a { + background: var(--danger) url("icons/log-out.svg") no-repeat right 0.5rem center; + background-size: var(--icon-size); + border-radius: var(--border-radius); + padding: 0.25rem 2.25rem 0.25rem 0.75rem; + display: inline-block; + text-decoration: none; + color: #fff; + } + + div.header div.login-status.logged-in span.logged-in-as-text { + margin-right: 1rem; + } + + div.header div.login-status.logged-in span.separator { + display: none; + } +} + +/* + ------------------------------------------------------------------------------ + Footer + ------------------------------------------------------------------------------ + */ +div.footer { + flex-shrink: 0; + background: var(--dark); + padding: 1rem; + color: #fff; +} + +div.footer a { + color: #ccc; +} + +div.footer div.theme-change-hint { + margin-bottom: 1rem; +} + +div.footer div.theme-change-hint a { + color: yellow; +} + +/* + ------------------------------------------------------------------------------ + Flash messages + ------------------------------------------------------------------------------ + */ +div.flash > div { + margin: 1rem 1rem 0; + padding: 0.5rem 0.75rem 0.5rem 3rem; + border-radius: var(--border-radius); + background-color: #efefef; + background-repeat: no-repeat; + background-position: 1rem center; + display: flex; + align-items: center; +} + +div.flash > div a { + display: inline-block !important; + padding: 0.25rem 0.75rem; + margin-left: auto; + color: #fff; + text-decoration: none; + font-size: 1.25rem; + font-weight: bold; +} + +div.flash > div a::before { + content: "×"; +} + +div.flash > div.info { + background-color: var(--info); + background-image: url("icons/info.svg"); +} + +div.flash > div.error { + background-color: var(--danger); + background-image: url("icons/error.svg"); + color: #fff; +} + +div.flash > div.success { + background-color: var(--success); + background-image: url("icons/success.svg"); + color: #fff; +} + +div.flash > div.warning { + background-color: var(--warning); + background-image: url("icons/warning.svg"); +} + +/* + ------------------------------------------------------------------------------ + Section headings + ------------------------------------------------------------------------------ + */ +section > details { + margin: 1rem auto; +} + +div.content > section:first-child > details { + margin-top: 0; +} + +section > details summary { + background: var(--secondary); + border-radius: var(--border-radius); + padding: 0.5rem 1rem; + color: #fff; + font-size: 1rem; +} + +section > details ul { + background-color: lightcyan; + border: 2px solid var(--secondary); + padding: 1rem 1rem 1rem 2rem; + margin-top: 1rem; + border-radius: 0.5rem; +} + +@media (max-width: 820px) { + section > details summary { + font-size: 0.9rem; + } +} + +/* + ------------------------------------------------------------------------------ + Index > Section: Current RaSCSI configuration + ------------------------------------------------------------------------------ + */ +body:not(.logged-in) section:not(#current-config, #manual) { + display: none; +} + +body:not(.logged-in) section#current-config form#config-actions, +body:not(.logged-in) section#current-config form#config-save { + display: none; +} + +body:not(.logged-in) section#current-config table#attached-devices th.actions, +body:not(.logged-in) section#current-config table#attached-devices td.actions, +body:not(.logged-in) section#current-config table#attached-devices form { + display: none; +} + +body:not(.logged-in) section#current-config form#detach-all-devices { + display: none; +} + +section#current-config form#config-actions select, +section#current-config form#config-save input[type="text"] { + max-width: 10rem; +} + +table#attached-devices th.id, +table#attached-devices td.id, +table#attached-devices th.unit, +table#attached-devices td.unit { + text-align: center; +} + +table#attached-devices th.actions, +table#attached-devices td.actions { + text-align: center; +} + +table#attached-devices td.parameters form { + display: flex; +} + +table#attached-devices td.parameters form label { + display: none; +} + +table#attached-devices td.parameters form select { + width: 100%; + flex-grow: 1; + margin-right: 0.5rem; +} + +table#attached-devices span.filename { + word-break: break-all; +} + +table#attached-devices tr.reserved td { + background-color: #ffe9e9; +} + +@media (max-width: 820px) { + table#attached-devices th.product, + table#attached-devices td.product { + display: none; + } +} + +@media (max-width: 625px) { + table#attached-devices td.parameters form { + display: block; + max-width: none; + text-align: left; + } + + table#attached-devices td.parameters form select { + margin-right: 0; + } +} + +@media (min-width: 821px) { + section#current-config form#config-actions { + float: left; + height: 2.75rem; + } + + section#current-config form#config-save { + float: right; + height: 2.75rem; + } + + section#current-config form#config-save input[type="text"] { + width: 10rem; + } + + table#attached-devices tr.device-assigned td.name, + table#attached-devices tr.reserved td.name { + background-image: url("icons/device-other.svg"); + background-repeat: no-repeat; + background-position: 1rem center; + background-size: var(--icon-size); + padding-left: 3rem; + } + + table#attached-devices tr.reserved td.name { + background-image: url("icons/device-reserved.svg"); + } + + table#attached-devices tr.device-sccd td.name, + table#attached-devices tr.device-scmo td.name { + background-image: url("icons/device-optical.svg"); + } + + table#attached-devices tr.device-scdp td.name { + background-image: url("icons/device-network.svg"); + } + + table#attached-devices tr.device-schd td.name { + background-image: url("icons/device-hard-drive.svg"); + } + + table#attached-devices tr.device-scrm td.name { + background-image: url("icons/device-removable.svg"); + } + + table#attached-devices tr.device-sclp td.name { + background-image: url("icons/device-printer.svg"); + } +} + +/* + ------------------------------------------------------------------------------ + Index > Section:Image/file management + ------------------------------------------------------------------------------ + */ +section#files table#images td:first-child { + word-break: break-all; + width: 25%; +} + +section#files table#images th:last-child, +section#files table#images td:last-child { + text-align: right; +} + +section#files table#images tr.directory-empty td { + text-align: center; +} + +section#files p { + margin-top: 1rem; +} + +@media (max-width: 820px) { + section#files table#images tr th:nth-child(2), + section#files table#images tr td:nth-child(2) { + display: none; + } + + section#files table#images form.file-attach { + width: 100%; + margin-bottom: 0.5rem; + padding-bottom: 0.5rem; + border-bottom: 1px dotted #ccc; + } +} + +@media (min-width: 821px) { + section#files table#images form.file-copy input[type="submit"], + section#files table#images form.file-rename input[type="submit"], + section#files table#images form.file-delete input[type="submit"], + section#files table#images form.file-info input[type="submit"] { + background-repeat: no-repeat; + background-position: center; + background-size: 1rem; + text-indent: -1000px; + width: 2.5rem; + } + + section#files table#images form.file-attach input[type="submit"], + section#attach-devices form.device-attach input[type="submit"] { + background: #efefef url("icons/file-device-attach.svg") no-repeat 0.5rem center; + background-size: 1rem; + padding-left: 2rem; + } + + section#files table#images form.file-copy input[type="submit"] { + background-image: url("icons/file-copy.svg"); + } + + section#files table#images form.file-rename input[type="submit"] { + background-image: url("icons/file-rename.svg"); + } + + section#files table#images form.file-delete input[type="submit"] { + background-image: url("icons/file-delete.svg"); + } + + section#files table#images form.file-info input[type="submit"] { + background-image: url("icons/file-info.svg"); + } + + section#files table#images form.file-extract input[type="submit"] { + background: #efefef url("icons/file-extract.svg") no-repeat 0.5rem center; + background-size: 1rem; + padding-left: 2rem; + } +} + +/* + ------------------------------------------------------------------------------ + Index > Section: Attach peripheral devices + ------------------------------------------------------------------------------ + */ +section#attach-devices table th:last-child, +section#attach-devices table td:last-child { + text-align: right; +} + +section#attach-devices form { + display: block; +} + +@media (max-width: 820px) { + section#attach-devices table tr th:nth-child(2), + section#attach-devices table tr td:nth-child(2) { + display: none; + } + + section#attach-devices form label { + display: none; + } + + section#attach-devices form select { + max-width: 200px; + } +} + +/* + ------------------------------------------------------------------------------ + Index > Section: Create image + ------------------------------------------------------------------------------ + */ +section#create-image > p a { + display: block; + margin-top: 1rem; +} + +/* + ------------------------------------------------------------------------------ + Index > Section: Logging + ------------------------------------------------------------------------------ + */ +section#logging div:first-of-type { + margin-bottom: 0.5rem; +} + +/* + ------------------------------------------------------------------------------ + Index > Section: System + ------------------------------------------------------------------------------ + */ +@media (min-width: 821px) { + section#system input[type="submit"] { + background: var(--danger); + border-color: var(--danger); + color: #fff; + } +} + +/* + ------------------------------------------------------------------------------ + Index > Section: Manual + ------------------------------------------------------------------------------ + */ +section#manual { + margin: 2rem 0 1rem; +} + +section#manual a { + margin: auto; + display: block; + padding: 0 0 0 2rem; + background: url("icons/manual.svg") no-repeat left center; + font-weight: bold; +} + +section#manual a p { + margin: 0; +} + +/* + ------------------------------------------------------------------------------ + Drives page + ------------------------------------------------------------------------------ + */ +body.page-drives div.content h2:first-child { + margin-top: 0; +} + +body.page-drives div.content h2 { + margin: 2rem 0 1rem; +} + +body.page-drives div.content p:first-of-type { + background: lightcyan; + border: 2px solid darkcyan; + padding: 1rem; + border-radius: 0.5rem; +} + +body.page-drives div.content p:nth-of-type(3) { + margin-top: 1rem; +} + +body.page-drives div.content p.home { + font-weight: bold; +} + +/* + ------------------------------------------------------------------------------ + Disk info page + ------------------------------------------------------------------------------ + */ +body.page-diskinfo div.content p.home { + font-weight: bold; +} + +/* + ------------------------------------------------------------------------------ + Device info page + ------------------------------------------------------------------------------ + */ +body.page-deviceinfo div.content table th { + background: #efefef; + color: var(--text-color); + border-color: #ccc; + width: 25%; +} + +body.page-deviceinfo div.content p.home { + font-weight: bold; +} + +/* + ------------------------------------------------------------------------------ + Logs page + ------------------------------------------------------------------------------ + */ +body.page-logs div.content p.home { + font-weight: bold; +} + +/* + ------------------------------------------------------------------------------ + Manual page + ------------------------------------------------------------------------------ + */ +body.page-manpage div#manpage-content { + font-family: monospace; + font-size: 0.9rem; +} + +body.page-manpage div#manpage-content h2 { + margin: 2rem 0 0.5rem; +} + +body.page-manpage div.content p.home { + margin-top: 2rem; + font-weight: bold; +} diff --git a/python/web/src/templates/base.html b/python/web/src/templates/base.html index 10c6b209..cce8a30a 100644 --- a/python/web/src/templates/base.html +++ b/python/web/src/templates/base.html @@ -22,16 +22,16 @@ - + @@ -39,52 +39,77 @@ - +

{% if env["auth_active"] %} - {% if env["username"] %} -
- {{ _("Logged in as %(username)s", username=env["username"]) }} - {{ _("Log Out") }} -
+ {% if env["logged_in"] %} + + {% else %} + + {% endif %} {% else %} -
-
-
{{ _("Log In to Use Web Interface") }}
- - - - - -
-
+ {% endif %} - {% else %} -
- {{ _("Web Interface Authentication Disabled") }} - {{ _("See Wiki for more information", url="https://github.com/akuker/RASCSI/wiki/Web-Interface#enable-authentication") }} -
- {% endif %} -
+ + -
- hostname: {{ env["host"] }} ip: {{ env["ip_addr"] }} + +
+ {{ _("IP") }}: {{ env["ip_addr"] }} + {{ _("Hostname") }}: {{ env["host"] }}
+
- {% for category, message in get_flashed_messages(with_categories=true) %} - {% if category == "stdout" or category == "stderr" %} -
{{ message }}
- {% else %} -
{{ message }}
+ {% if get_flashed_messages(): %} + {% for category, message in get_flashed_messages(with_categories=true) %} +
+ {% if category == "stdout" or category == "stderr" %} +
{{ message }}
+ {% else %} +
{{ message }}
+ {% endif %} + +
+ {% endfor %} {% endif %} - {% endfor %}
+
+ {{ content_class }} {% block content %}{% endblock content %}