From 282e66ddc267363366cc491aa6eff2846c6a2222 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 24 Oct 2024 11:00:01 -0400 Subject: [PATCH 01/24] install react-pdf packages --- frontend/package-lock.json | 8342 ++++++++++++++++++++++++++++++++++++ frontend/package.json | 2 + 2 files changed, 8344 insertions(+) create mode 100644 frontend/package-lock.json diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 00000000..55e12480 --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,8342 @@ +{ + "name": "blcc", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "blcc", + "version": "0.0.0", + "dependencies": { + "@lrd/e3-sdk": "^1.0.11", + "@mdi/js": "^7.4.47", + "@mdi/react": "^1.6.1", + "@react-pdf/renderer": "^4.0.0", + "@react-rxjs/core": "^0.10.7", + "@react-rxjs/utils": "^0.9.7", + "antd": "^5.18.0", + "billboard.js": "^3.12.2", + "convert": "^5.2.0", + "decimal.js": "^10.4.3", + "dexie": "^3.2.7", + "dexie-export-import": "^4.1.2", + "fast-xml-parser": "4.4.1", + "framer-motion": "^11.2.10", + "html-to-react": "^1.7.0", + "object-hash": "^3.0.0", + "react": "^18.3.1", + "react-data-grid": "7.0.0-beta.43", + "react-dom": "^18.3.1", + "react-pdf": "^9.1.1", + "react-router-dom": "^6.23.1", + "rxjs": "^7.8.1", + "ts-pattern": "^5.1.2" + }, + "devDependencies": { + "@biomejs/biome": "^1.8.0", + "@types/object-hash": "^3.0.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.0", + "autoprefixer": "^10.4.19", + "cypress": "^13.15.0", + "postcss": "^8.4.38", + "postcss-import": "^16.1.0", + "sass": "^1.77.4", + "tailwindcss": "^3.4.3", + "typescript": "^5.4.5", + "vite": "5.4.6", + "vite-plugin-svgr": "^4.2.0", + "vite-tsconfig-paths": "^4.3.2", + "vitest": "^0.34.6" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-7.1.0.tgz", + "integrity": "sha512-MMoDGWn1y9LdQJQSHiCC20x3uZ3CwQnv9QMz6pCmJOrqdgM9YxsoVVY0wtrdXbmfSgnV0KNk6zi09NAhMR2jvg==", + "dependencies": { + "@ctrl/tinycolor": "^3.6.1" + } + }, + "node_modules/@ant-design/cssinjs": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs/-/cssinjs-1.21.1.tgz", + "integrity": "sha512-tyWnlK+XH7Bumd0byfbCiZNK43HEubMoCcu9VxwsAwiHdHTgWa+tMN0/yvxa+e8EzuFP1WdUNNPclRpVtD33lg==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "@emotion/hash": "^0.8.0", + "@emotion/unitless": "^0.7.5", + "classnames": "^2.3.1", + "csstype": "^3.1.3", + "rc-util": "^5.35.0", + "stylis": "^4.3.3" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/cssinjs-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@ant-design/cssinjs-utils/-/cssinjs-utils-1.1.0.tgz", + "integrity": "sha512-E9nOWObXx7Dy7hdyuYlOFaer/LtPO7oyZVxZphh0CYEslr5EmhJPM3WI0Q2RBHRtYg6dSNqeSK73kvZjPN3IMQ==", + "dependencies": { + "@ant-design/cssinjs": "^1.21.0", + "@babel/runtime": "^7.23.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@ant-design/fast-color": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ant-design/fast-color/-/fast-color-2.0.6.tgz", + "integrity": "sha512-y2217gk4NqL35giHl72o6Zzqji9O7vHh9YmhUVkPtAOpoTCH4uWxo/pr4VE8t0+ChEPs0qo4eJRC5Q1eXWo3vA==", + "dependencies": { + "@babel/runtime": "^7.24.7" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@ant-design/icons": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-5.5.1.tgz", + "integrity": "sha512-0UrM02MA2iDIgvLatWrj6YTCYe0F/cwXvVE0E2SqGrL7PZireQwgEKTKBisWpZyal5eXZLvuM98kju6YtYne8w==", + "dependencies": { + "@ant-design/colors": "^7.0.0", + "@ant-design/icons-svg": "^4.4.0", + "@babel/runtime": "^7.24.8", + "classnames": "^2.2.6", + "rc-util": "^5.31.1" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" + }, + "node_modules/@ant-design/react-slick": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ant-design/react-slick/-/react-slick-1.1.2.tgz", + "integrity": "sha512-EzlvzE6xQUBrZuuhSAFTdsr4P2bBBHGZwKFemEfq8gIGyIQCxalYfZW/T2ORbtQx5rU69o+WycP3exY/7T1hGA==", + "dependencies": { + "@babel/runtime": "^7.10.4", + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "resize-observer-polyfill": "^1.5.1", + "throttle-debounce": "^5.0.0" + }, + "peerDependencies": { + "react": ">=16.9.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.7" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", + "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", + "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.3.tgz", + "integrity": "sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==", + "dev": true, + "hasInstallScript": true, + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "1.9.3", + "@biomejs/cli-darwin-x64": "1.9.3", + "@biomejs/cli-linux-arm64": "1.9.3", + "@biomejs/cli-linux-arm64-musl": "1.9.3", + "@biomejs/cli-linux-x64": "1.9.3", + "@biomejs/cli-linux-x64-musl": "1.9.3", + "@biomejs/cli-win32-arm64": "1.9.3", + "@biomejs/cli-win32-x64": "1.9.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.3.tgz", + "integrity": "sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@cypress/request": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", + "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~4.0.0", + "http-signature": "~1.4.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "performance-now": "^2.1.0", + "qs": "6.13.0", + "safe-buffer": "^5.1.2", + "tough-cookie": "^4.1.3", + "tunnel-agent": "^0.6.0", + "uuid": "^8.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@cypress/xvfb": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@cypress/xvfb/-/xvfb-1.2.4.tgz", + "integrity": "sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==", + "dev": true, + "dependencies": { + "debug": "^3.1.0", + "lodash.once": "^4.1.1" + } + }, + "node_modules/@cypress/xvfb/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==" + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lrd/e3-sdk": { + "version": "1.0.11", + "resolved": "https://gitlab.nist.gov/gitlab/api/v4/projects/8142/packages/npm/@lrd/e3-sdk/-/@lrd/e3-sdk-1.0.11.tgz", + "integrity": "sha1-IPYwfZwszW0opJfFUrtosnn5Org=" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mdi/js": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", + "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==" + }, + "node_modules/@mdi/react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", + "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", + "dependencies": { + "prop-types": "^15.7.2" + } + }, + "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/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@rc-component/async-validator": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", + "integrity": "sha512-qgGdcVIF604M9EqjNF0hbUTz42bz/RDtxWdWuU5EQe3hi7M8ob54B6B35rOsvX5eSvIHIzT9iH1R3n+hk3CGfg==", + "dependencies": { + "@babel/runtime": "^7.24.4" + }, + "engines": { + "node": ">=14.x" + } + }, + "node_modules/@rc-component/color-picker": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@rc-component/color-picker/-/color-picker-2.0.1.tgz", + "integrity": "sha512-WcZYwAThV/b2GISQ8F+7650r5ZZJ043E57aVBFkQ+kSY4C6wdofXgB0hBx+GPGpIU0Z81eETNoDUJMr7oy/P8Q==", + "dependencies": { + "@ant-design/fast-color": "^2.0.6", + "@babel/runtime": "^7.23.6", + "classnames": "^2.2.6", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/context": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@rc-component/context/-/context-1.4.0.tgz", + "integrity": "sha512-kFcNxg9oLRMoL3qki0OMxK+7g5mypjgaaJp/pkOis/6rVxma9nJBF/8kCIuTYHUQNr0ii7MxqE33wirPZLJQ2w==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/mini-decimal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mini-decimal/-/mini-decimal-1.1.0.tgz", + "integrity": "sha512-jS4E7T9Li2GuYwI6PyiVXmxTiM6b07rlD9Ge8uGZSCz3WlzcG5ZK7g5bbuKNeZ9pgUuPK/5guV781ujdVpm4HQ==", + "dependencies": { + "@babel/runtime": "^7.18.0" + }, + "engines": { + "node": ">=8.x" + } + }, + "node_modules/@rc-component/mutate-observer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rc-component/mutate-observer/-/mutate-observer-1.1.0.tgz", + "integrity": "sha512-QjrOsDXQusNwGZPf4/qRQasg7UFEj06XiCJ8iuiq/Io7CrHrgVi6Uuetw60WAMG1799v+aM8kyc+1L/GBbHSlw==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@rc-component/portal/-/portal-1.1.2.tgz", + "integrity": "sha512-6f813C0IsasTZms08kfA8kPAGxbbkYToa8ALaiDIGGECU4i9hj8Plgbx0sNJDrey3EtHO30hmdaxtT0138xZcg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/qrcode": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@rc-component/qrcode/-/qrcode-1.0.0.tgz", + "integrity": "sha512-L+rZ4HXP2sJ1gHMGHjsg9jlYBX/SLN2D6OxP9Zn3qgtpMWtO2vUfxVFwiogHpAIqs54FnALxraUy/BCO1yRIgg==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/tour": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/@rc-component/tour/-/tour-1.15.1.tgz", + "integrity": "sha512-Tr2t7J1DKZUpfJuDZWHxyxWpfmj8EZrqSgyMZ+BCdvKZ6r1UDsfU46M/iWAAFBy961Ssfom2kv5f3UcjIL2CmQ==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/portal": "^1.0.0-9", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.2", + "rc-util": "^5.24.4" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@rc-component/trigger": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@rc-component/trigger/-/trigger-2.2.3.tgz", + "integrity": "sha512-X1oFIpKoXAMXNDYCviOmTfuNuYxE4h5laBsyCqVAVMjNHxoF3/uiyA7XdegK1XbCvBbCZ6P6byWrEoDRpKL8+A==", + "dependencies": { + "@babel/runtime": "^7.23.2", + "@rc-component/portal": "^1.1.0", + "classnames": "^2.3.2", + "rc-motion": "^2.0.0", + "rc-resize-observer": "^1.3.1", + "rc-util": "^5.38.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/@react-pdf/fns": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/fns/-/fns-3.0.0.tgz", + "integrity": "sha512-ICbIWR93PE6+xf2Xd/fXYO1dAuiOAJaszEuGGv3wp5lLSeeelDXlEYLh6R05okxh28YqMzc0Qd85x6n6MtaLUQ==", + "dependencies": { + "@babel/runtime": "^7.20.13" + } + }, + "node_modules/@react-pdf/font": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/font/-/font-3.0.0.tgz", + "integrity": "sha512-/SYEud06maGQiAD0H6J5xnqigKm/FpLKqFYH6+2OjQ2tb32nnKqwqL3pS7glDTFYBJ11B6fVgSNex6tc1V8UDA==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/types": "^2.7.0", + "cross-fetch": "^3.1.5", + "fontkit": "^2.0.2", + "is-url": "^1.2.4" + } + }, + "node_modules/@react-pdf/image": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/image/-/image-3.0.0.tgz", + "integrity": "sha512-l4HV5NutPw52Wbuvxol0BiFc6TkKXK/kJNwVIElphw47nwfueLEjIfBxRTuOeHmpdibvEh3a5STwYmMTQjXSxg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^3.0.0", + "cross-fetch": "^3.1.5", + "jay-peg": "^1.1.0" + } + }, + "node_modules/@react-pdf/layout": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/layout/-/layout-4.0.0.tgz", + "integrity": "sha512-BNipDwULk9ehvf0V5HLrP2QIujkfj2LzHs8yfCQ/Z8TkAX6dEt1AgwDttBpBLfzcu8w8HFjgpLR1TNOTXiOsAQ==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "@react-pdf/image": "^3.0.0", + "@react-pdf/pdfkit": "^4.0.0", + "@react-pdf/primitives": "^4.0.0", + "@react-pdf/stylesheet": "^5.0.0", + "@react-pdf/textkit": "^5.0.0", + "@react-pdf/types": "^2.7.0", + "cross-fetch": "^3.1.5", + "emoji-regex": "^10.3.0", + "queue": "^6.0.1", + "yoga-layout": "^3.1.0" + } + }, + "node_modules/@react-pdf/layout/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==" + }, + "node_modules/@react-pdf/pdfkit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/pdfkit/-/pdfkit-4.0.0.tgz", + "integrity": "sha512-HaaAoBpoRGJ6c1ZOANNQZ3q6Ehmagqa8n40x+OZ5s9HcmUviZ34SCm+QBa42s1o4299M+Lgw3UoqpW7sHv3/Hg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/png-js": "^3.0.0", + "browserify-zlib": "^0.2.0", + "crypto-js": "^4.2.0", + "fontkit": "^2.0.2", + "jay-peg": "^1.1.0", + "vite-compatible-readable-stream": "^3.6.1" + } + }, + "node_modules/@react-pdf/png-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/png-js/-/png-js-3.0.0.tgz", + "integrity": "sha512-eSJnEItZ37WPt6Qv5pncQDxLJRK15eaRwPT+gZoujP548CodenOVp49GST8XJvKMFt9YqIBzGBV/j9AgrOQzVA==", + "dependencies": { + "browserify-zlib": "^0.2.0" + } + }, + "node_modules/@react-pdf/primitives": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/primitives/-/primitives-4.0.0.tgz", + "integrity": "sha512-yp4E0rDL03NaUp/CnDBz3HQNfH2Mzdlgku57yhTMGNzetwB0NJusXcjYg5XsTGIXnR7Tv80JKI4O4ajj+oaLeQ==" + }, + "node_modules/@react-pdf/render": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/render/-/render-4.0.0.tgz", + "integrity": "sha512-gvrw4HM9RocuDLd+19cvP2xaSs3h4OgYn2N6VDXzj6LYQnoHBAazRV9qMpGi8FuNlQ3Va+s82R1ynXYMr0FXIg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "@react-pdf/primitives": "^4.0.0", + "@react-pdf/textkit": "^5.0.0", + "@react-pdf/types": "^2.7.0", + "abs-svg-path": "^0.1.1", + "color-string": "^1.9.1", + "normalize-svg-path": "^1.1.0", + "parse-svg-path": "^0.1.2", + "svg-arc-to-cubic-bezier": "^3.2.0" + } + }, + "node_modules/@react-pdf/renderer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/renderer/-/renderer-4.0.0.tgz", + "integrity": "sha512-yDObqmnF08Mwc24W8axmT/y+JPxJkweVQ/EM3GOXh0qyZN5VP5JvKDiCqmftI6QEKfvTFNsquuEQm13GBjkbMg==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/font": "^3.0.0", + "@react-pdf/layout": "^4.0.0", + "@react-pdf/pdfkit": "^4.0.0", + "@react-pdf/primitives": "^4.0.0", + "@react-pdf/render": "^4.0.0", + "@react-pdf/types": "^2.7.0", + "events": "^3.3.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "queue": "^6.0.1", + "scheduler": "^0.17.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@react-pdf/renderer/node_modules/scheduler": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.17.0.tgz", + "integrity": "sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA==", + "dependencies": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "node_modules/@react-pdf/stylesheet": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/stylesheet/-/stylesheet-5.0.0.tgz", + "integrity": "sha512-FrJXUMsvSGee13gpL82HOhhk16y3IKxLmYvmJU1ZUo9Jm9pLydnHDPlSUDK+rKmxdSD2X+twUR7sv6FlrA5i+A==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "@react-pdf/types": "^2.7.0", + "color-string": "^1.9.1", + "hsl-to-hex": "^1.0.0", + "media-engine": "^1.0.3", + "postcss-value-parser": "^4.1.0" + } + }, + "node_modules/@react-pdf/textkit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@react-pdf/textkit/-/textkit-5.0.0.tgz", + "integrity": "sha512-+K6zkF6lDXHIZZ9nNzplJ48IrjXNGQqVfO5v73AsutHbvx44E62t46EeoGLHsmjGeMG70TooSI1Mwq/7f/5tLw==", + "dependencies": { + "@babel/runtime": "^7.20.13", + "@react-pdf/fns": "3.0.0", + "bidi-js": "^1.0.2", + "hyphen": "^1.6.4", + "unicode-properties": "^1.4.1" + } + }, + "node_modules/@react-pdf/types": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@react-pdf/types/-/types-2.7.0.tgz", + "integrity": "sha512-7KrPPCpgRPKR+g+T127PE4bpw9Q84ZiY07EYRwXKVtTEVW9wJ5BZiF9smT9IvH19s+MQaDLmYRgjESsnqlyH0Q==" + }, + "node_modules/@react-rxjs/core": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@react-rxjs/core/-/core-0.10.7.tgz", + "integrity": "sha512-dornp8pUs9OcdqFKKRh9+I2FVe21gWufNun6RYU1ddts7kUy9i4Thvl0iqcPFbGY61cJQMAJF7dxixWMSD/A/A==", + "dependencies": { + "@rx-state/core": "0.1.4", + "use-sync-external-store": "^1.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "rxjs": ">=7" + } + }, + "node_modules/@react-rxjs/utils": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@react-rxjs/utils/-/utils-0.9.7.tgz", + "integrity": "sha512-m9CUTdRsglObvUAlYfB24QvN+QH4XqCGEKnCdSILIeOx7mMqSi9TTFp2zrj5XqtMiLnj4ReAdDxrXegLPB73bQ==", + "peerDependencies": { + "@react-rxjs/core": ">=0.1.0", + "react": ">=16.8.0", + "rxjs": ">=6" + } + }, + "node_modules/@remix-run/router": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz", + "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rx-state/core": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@rx-state/core/-/core-0.1.4.tgz", + "integrity": "sha512-Z+3hjU2xh1HisLxt+W5hlYX/eGSDaXXP+ns82gq/PLZpkXLu0uwcNUh9RLY3Clq4zT+hSsA3vcpIGt6+UAb8rQ==", + "peerDependencies": { + "rxjs": ">=7" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz", + "integrity": "sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz", + "integrity": "sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-8.0.0.tgz", + "integrity": "sha512-KVQ+PtIjb1BuYT3ht8M5KbzWBhdAjjUPdlMtpuw/VjT8coTrItWX6Qafl9+ji831JaJcu6PJNKCV0bp01lBNzQ==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-8.0.0.tgz", + "integrity": "sha512-omNiKqwjNmOQJ2v6ge4SErBbkooV2aAWwaPFs2vUY7p7GhVkzRkJ00kILXQvRhA6miHnNpXv7MRnnSjdRjK8og==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-8.0.0.tgz", + "integrity": "sha512-mURHYnu6Iw3UBTbhGwE/vsngtCIbHE43xCRK7kCw4t01xyGqb2Pd+WXekRRoFOBIY29ZoOhUCTEweDMdrjfi9g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-8.1.0.tgz", + "integrity": "sha512-Tx8T58CHo+7nwJ+EhUwx3LfdNSG9R2OKfaIXXs5soiy5HtgoAEkDay9LIimLOcG8dJQH1wPZp/cnAv6S9CrR1Q==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-8.0.0.tgz", + "integrity": "sha512-DFx8xa3cZXTdb/k3kfPeaixecQLgKh5NVBMwD0AQxOzcZawK4oo1Jh9LbrcACUivsCA7TLG8eeWgrDXjTMhRmw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/babel-preset": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-8.1.0.tgz", + "integrity": "sha512-7EYDbHE7MxHpv4sxvnVPngw5fuR6pw79SkcrILHJ/iMpuKySNCl5W1qcwPEpU+LgyRXOaAFgH0KhwD18wwg6ug==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-attribute": "8.0.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "8.0.0", + "@svgr/babel-plugin-replace-jsx-attribute-value": "8.0.0", + "@svgr/babel-plugin-svg-dynamic-title": "8.0.0", + "@svgr/babel-plugin-svg-em-dimensions": "8.0.0", + "@svgr/babel-plugin-transform-react-native-svg": "8.1.0", + "@svgr/babel-plugin-transform-svg-component": "8.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@svgr/core": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", + "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "camelcase": "^6.2.0", + "cosmiconfig": "^8.1.3", + "snake-case": "^3.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-8.0.0.tgz", + "integrity": "sha512-EbDKwO9GpfWP4jN9sGdYwPBU0kdomaPIL2Eu4YwmgP+sJeXT+L7bMwJUBnhzfH8Q2qMBqZ4fJwpCyYsAN3mt2Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.21.3", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-8.1.0.tgz", + "integrity": "sha512-0xiIyBsLlr8quN+WyuxooNW9RJ0Dpr8uOnH/xrCVO8GLUcwHISwj1AG0k+LFzteTkAA0GbX0kj9q6Dk70PTiPA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.21.3", + "@svgr/babel-preset": "8.1.0", + "@svgr/hast-util-to-babel-ast": "8.0.0", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "*" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.13.tgz", + "integrity": "sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/chai": { + "version": "4.3.20", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", + "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", + "dev": true + }, + "node_modules/@types/chai-subset": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", + "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", + "dev": true, + "dependencies": { + "@types/chai": "*" + } + }, + "node_modules/@types/d3-selection": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", + "integrity": "sha512-cuHoUgS/V3hLdjJOLTT691+G2QoqAjCVLmr4kJXR4ha56w1Zdu8UUQ5TxLRqudgNjwXeQxKMq4j+lyf9sWuslg==" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.8.tgz", + "integrity": "sha512-ew63aJfQ/ms7QQ4X7pk5NxQ9fZH/z+i24ZfJ6tJSfqxJMrYLiK01EAs2/Rtw/JreGUsS3pLPNV644qXFGnoZNQ==", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.7.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.4.tgz", + "integrity": "sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/object-hash": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-3.0.6.tgz", + "integrity": "sha512-fOBV8C1FIu2ELinoILQ+ApxcUKz4ngq+IWUYrxSGjXzzjUALijilampwkMgEtJ+h2njAW3pi853QpzNVCHB73w==", + "dev": true + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", + "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz", + "integrity": "sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==", + "dev": true + }, + "node_modules/@types/sizzle": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.9.tgz", + "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", + "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, + "dependencies": { + "tinyspy": "^2.1.1" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, + "dependencies": { + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "optional": true + }, + "node_modules/abs-svg-path": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", + "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "optional": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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/antd": { + "version": "5.21.2", + "resolved": "https://registry.npmjs.org/antd/-/antd-5.21.2.tgz", + "integrity": "sha512-ZcyykH58xRkNp5oxFqn255VxrjLj6qG6czHJQPoDHqRdR9roSfWQGTiqYVb4Omg77WZHNgu17QrWzvL4Hp6/FA==", + "dependencies": { + "@ant-design/colors": "^7.1.0", + "@ant-design/cssinjs": "^1.21.1", + "@ant-design/cssinjs-utils": "^1.1.0", + "@ant-design/icons": "^5.5.1", + "@ant-design/react-slick": "~1.1.2", + "@babel/runtime": "^7.25.6", + "@ctrl/tinycolor": "^3.6.1", + "@rc-component/color-picker": "~2.0.1", + "@rc-component/mutate-observer": "^1.1.0", + "@rc-component/qrcode": "~1.0.0", + "@rc-component/tour": "~1.15.1", + "@rc-component/trigger": "^2.2.3", + "classnames": "^2.5.1", + "copy-to-clipboard": "^3.3.3", + "dayjs": "^1.11.11", + "rc-cascader": "~3.28.1", + "rc-checkbox": "~3.3.0", + "rc-collapse": "~3.8.0", + "rc-dialog": "~9.6.0", + "rc-drawer": "~7.2.0", + "rc-dropdown": "~4.2.0", + "rc-field-form": "~2.4.0", + "rc-image": "~7.11.0", + "rc-input": "~1.6.3", + "rc-input-number": "~9.2.0", + "rc-mentions": "~2.16.1", + "rc-menu": "~9.15.1", + "rc-motion": "^2.9.3", + "rc-notification": "~5.6.2", + "rc-pagination": "~4.3.0", + "rc-picker": "~4.6.15", + "rc-progress": "~4.0.0", + "rc-rate": "~2.13.0", + "rc-resize-observer": "^1.4.0", + "rc-segmented": "~2.5.0", + "rc-select": "~14.15.2", + "rc-slider": "~11.1.6", + "rc-steps": "~6.0.1", + "rc-switch": "~4.1.0", + "rc-table": "~7.47.5", + "rc-tabs": "~15.3.0", + "rc-textarea": "~1.8.2", + "rc-tooltip": "~6.2.1", + "rc-tree": "~5.9.0", + "rc-tree-select": "~5.23.0", + "rc-upload": "~4.8.1", + "rc-util": "^5.43.0", + "scroll-into-view-if-needed": "^3.1.0", + "throttle-debounce": "^5.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "optional": true + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "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/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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/async": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "dev": true + }, + "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==", + "devOptional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "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/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz", + "integrity": "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/billboard.js": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/billboard.js/-/billboard.js-3.13.0.tgz", + "integrity": "sha512-zTvDlCRxaxZtgIpook29V87AsVG97CYRmqJJGNwyJS2cT2g43vIhBOksmpsUmF00hppqqinTjiBjE3qE+48mZQ==", + "dependencies": { + "@types/d3-selection": "^3.0.10", + "@types/d3-transition": "^3.0.8", + "d3-axis": "^3.0.0", + "d3-brush": "^3.0.0", + "d3-drag": "^3.0.0", + "d3-dsv": "^3.0.1", + "d3-ease": "^3.0.1", + "d3-hierarchy": "^3.1.2", + "d3-interpolate": "^3.0.1", + "d3-scale": "^4.0.2", + "d3-selection": "^3.0.0", + "d3-shape": "^3.2.0", + "d3-time-format": "^4.1.0", + "d3-transition": "^3.0.1", + "d3-zoom": "^3.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blob-util": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/blob-util/-/blob-util-2.0.2.tgz", + "integrity": "sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==", + "dev": true + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brotli": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/brotli/-/brotli-1.3.3.tgz", + "integrity": "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg==", + "dependencies": { + "base64-js": "^1.1.2" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "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": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cachedir": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.4.0.tgz", + "integrity": "sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001666", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", + "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/canvas": { + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.11.2.tgz", + "integrity": "sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chai": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", + "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "dev": true, + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/check-error": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/check-more-types": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/check-more-types/-/check-more-types-2.24.0.tgz", + "integrity": "sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "optional": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-table3": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", + "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "node_modules/cli-table3/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/cli-table3/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/cli-table3/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/cli-table3/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/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/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/cli-truncate/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/cli-truncate/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/cli-truncate/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/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "optional": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/common-tags": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", + "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-3.1.0.tgz", + "integrity": "sha512-rj8l8pD4bJ1nx+dAkMhV1xB5RuZEyVysfxJqB1pRchh1KVvwOv9b7CGB8ZfjTImVv2oF+sYMUkMZq6Na5Ftmbg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "optional": true + }, + "node_modules/confbox": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", + "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "optional": true + }, + "node_modules/convert": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/convert/-/convert-5.4.1.tgz", + "integrity": "sha512-n5Ob2tBccxPeSd0nIRjKqvzoXw8rk4fDRf3HIJlG9A2M4kTDdu3y+D1y5YrEIksbDLNEjxTyMhdXRA2ttSVPyw==" + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", + "integrity": "sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/cross-fetch": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.8.tgz", + "integrity": "sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "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/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/cypress": { + "version": "13.15.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", + "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@cypress/request": "^3.0.4", + "@cypress/xvfb": "^1.2.4", + "@types/sinonjs__fake-timers": "8.1.1", + "@types/sizzle": "^2.3.2", + "arch": "^2.2.0", + "blob-util": "^2.0.2", + "bluebird": "^3.7.2", + "buffer": "^5.7.1", + "cachedir": "^2.3.0", + "chalk": "^4.1.0", + "check-more-types": "^2.24.0", + "cli-cursor": "^3.1.0", + "cli-table3": "~0.6.1", + "commander": "^6.2.1", + "common-tags": "^1.8.0", + "dayjs": "^1.10.4", + "debug": "^4.3.4", + "enquirer": "^2.3.6", + "eventemitter2": "6.4.7", + "execa": "4.1.0", + "executable": "^4.1.1", + "extract-zip": "2.0.1", + "figures": "^3.2.0", + "fs-extra": "^9.1.0", + "getos": "^3.2.1", + "is-ci": "^3.0.1", + "is-installed-globally": "~0.4.0", + "lazy-ass": "^1.6.0", + "listr2": "^3.8.3", + "lodash": "^4.17.21", + "log-symbols": "^4.0.0", + "minimist": "^1.2.8", + "ospath": "^1.2.2", + "pretty-bytes": "^5.6.0", + "process": "^0.11.10", + "proxy-from-env": "1.0.0", + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" + }, + "bin": { + "cypress": "bin/cypress" + }, + "engines": { + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" + } + }, + "node_modules/cypress/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/cypress/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cypress/node_modules/chalk/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/cypress/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/cypress/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/cypress/node_modules/commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cypress/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/cypress/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cypress/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "devOptional": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, + "node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "dev": true, + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "optional": true + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dexie": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/dexie/-/dexie-3.2.7.tgz", + "integrity": "sha512-2a+BXvVhY5op+smDRLxeBAivE7YcYaneXJ1la3HOkUfX9zKkE/AJ8CNgjiXbtXepFyFmJNGSbmjOwqbT749r/w==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/dexie-export-import": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/dexie-export-import/-/dexie-export-import-4.1.2.tgz", + "integrity": "sha512-dWIkkajX+CsEJ19xMnvyqUDlldIl7jW/G49hy3pXZeIgCei9fPeGSjteoh7BeTujexIM3XZ+uAGCEwgCx2HAsQ==", + "peerDependencies": { + "dexie": "^2.0.4 || ^3.0.0 || ^4.0.1-alpha.5" + } + }, + "node_modules/dfa": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/dfa/-/dfa-1.2.0.tgz", + "integrity": "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.5.31", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", + "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz", + "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/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/enquirer/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/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-6.4.7.tgz", + "integrity": "sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/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/executable": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/executable/-/executable-4.1.1.tgz", + "integrity": "sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==", + "dev": true, + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.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==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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/fast-glob/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/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fontkit": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fontkit/-/fontkit-2.0.4.tgz", + "integrity": "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g==", + "dependencies": { + "@swc/helpers": "^0.5.12", + "brotli": "^1.3.2", + "clone": "^2.1.2", + "dfa": "^1.2.0", + "fast-deep-equal": "^3.1.3", + "restructure": "^3.0.0", + "tiny-inflate": "^1.0.3", + "unicode-properties": "^1.4.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-11.11.0.tgz", + "integrity": "sha512-H6Pv12fcXaebinvnLDabTS9vHwtJKAo7XsnVeNLm5t8Yq5LuVvQ3DtL/2yBa2kGmhdIgx9cw8mbj6I8PYx7jPA==", + "dependencies": { + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": 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==", + "optional": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gauge/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==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/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==", + "optional": true + }, + "node_modules/gauge/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==", + "optional": true + }, + "node_modules/gauge/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==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gauge/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==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", + "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "dev": true, + "dependencies": { + "async": "^3.2.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-dirs": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", + "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "optional": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hsl-to-hex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz", + "integrity": "sha512-K6GVpucS5wFf44X0h2bLVRDsycgJmf9FF2elg+CrqD8GcFU8c6vYhgXn8NjUkFCwj+xDFb70qgLbTUm6sxwPmA==", + "dependencies": { + "hsl-to-rgb-for-reals": "^1.1.0" + } + }, + "node_modules/hsl-to-rgb-for-reals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", + "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==" + }, + "node_modules/html-to-react": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.7.0.tgz", + "integrity": "sha512-b5HTNaTGyOj5GGIMiWVr1k57egAZ/vGy0GGefnCQ1VW5hu9+eku8AXHtf2/DeD95cj/FKBKYa1J7SWBOX41yUQ==", + "dependencies": { + "domhandler": "^5.0", + "htmlparser2": "^9.0", + "lodash.camelcase": "^4.3.0" + }, + "peerDependencies": { + "react": "^0.13.0 || ^0.14.0 || >=15" + } + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/http-signature": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.4.0.tgz", + "integrity": "sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^2.0.2", + "sshpk": "^1.18.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "optional": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/hyphen": { + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/hyphen/-/hyphen-1.10.6.tgz", + "integrity": "sha512-fXHXcGFTXOvZTSkPJuGOQf5Lv5T/R2itiiCVPg9LxAje5D00O0pP83yJShFq5V89Ly//Gt6acj7z8pbBr34stw==" + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "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/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "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/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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "optional": 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==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } + }, + "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-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "dev": true, + "dependencies": { + "ci-info": "^3.2.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "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==", + "devOptional": 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-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==" + }, + "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/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jay-peg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jay-peg/-/jay-peg-1.1.0.tgz", + "integrity": "sha512-WhyKySfx5CEFoKDnpmHyJUrpX5fUrr/X3kqVHISmiO9jrJC73RQBOAZJB8bDrWT4PHEkl0QgNZLlWJfAWAIFew==", + "dependencies": { + "restructure": "^3.0.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "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": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dependencies": { + "string-convert": "^0.2.0" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", + "integrity": "sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "node_modules/lazy-ass": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", + "integrity": "sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==", + "dev": true, + "engines": { + "node": "> 0.8" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "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/listr2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.14.0.tgz", + "integrity": "sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==", + "dev": true, + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/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/listr2/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/listr2/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/listr2/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/listr2/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/listr2/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/listr2/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/listr2/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/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/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/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/log-symbols/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/log-symbols/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/log-symbols/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/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/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/log-update/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/log-update/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/log-update/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/log-update/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/log-update/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/log-update/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/log-update/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/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "dev": true, + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.11", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", + "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-cancellable-promise": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", + "funding": { + "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "optional": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-event-props": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", + "funding": { + "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" + } + }, + "node_modules/media-engine": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz", + "integrity": "sha512-aa5tG6sDoK+k70B9iEX1NeyfT8ObCKhNDs6lJVpwF6r8vhUfuKMslIcirq6HIUYuuUYLefcEQOn9bSBOvawtwg==" + }, + "node_modules/merge-refs": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", + "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", + "funding": { + "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "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.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "optional": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mlly": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "dev": true, + "dependencies": { + "acorn": "^8.11.3", + "pathe": "^1.1.2", + "pkg-types": "^1.1.1", + "ufo": "^1.5.3" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "devOptional": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", + "integrity": "sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "optional": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "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/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-svg-path": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/normalize-svg-path/-/normalize-svg-path-1.1.0.tgz", + "integrity": "sha512-r9KHKG2UUeB5LoTouwDzBy2VxXlHsiM6fyLQvnJa0S5hrhzqElH/CH7TUGhT1fVvIYBIKf3OpY4YJ4CK+iaqHg==", + "dependencies": { + "svg-arc-to-cubic-bezier": "^3.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "optional": true, + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "devOptional": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ospath": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", + "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", + "dev": true + }, + "node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "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/parse-svg-path": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/parse-svg-path/-/parse-svg-path-0.1.2.tgz", + "integrity": "sha512-JyPSBnkTJ0AI8GGJLfMXvKq42cj5c006fnLz6fXy6zfoVjJizi8BNTpu8on8ziI1cKy9d9DGNuY17Ce7wuejpQ==" + }, + "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==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "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/path2d": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", + "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true + }, + "node_modules/pathval": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/pdfjs-dist": { + "version": "4.4.168", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.4.168.tgz", + "integrity": "sha512-MbkAjpwka/dMHaCfQ75RY1FXX3IewBVu6NGZOcxerRFlaBiIkZmUoR0jotX5VUzYZEXAGzSFtknWs5xRKliXPA==", + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "canvas": "^2.11.2", + "path2d": "^0.2.0" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", + "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "dev": true, + "dependencies": { + "confbox": "^0.1.7", + "mlly": "^1.7.1", + "pathe": "^1.1.2" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-16.1.0.tgz", + "integrity": "sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "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==" + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/pretty-format/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", + "integrity": "sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==", + "dev": true + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "dependencies": { + "inherits": "~2.0.3" + } + }, + "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/rc-cascader": { + "version": "3.28.1", + "resolved": "https://registry.npmjs.org/rc-cascader/-/rc-cascader-3.28.1.tgz", + "integrity": "sha512-9+8oHIMWVLHxuaapDiqFNmD9KSyKN/P4bo9x/MBuDbyTqP8f2/POmmZxdXWBO3yq/uE3pKyQCXYNUxrNfHRv2A==", + "dependencies": { + "@babel/runtime": "^7.12.5", + "array-tree-filter": "^2.1.0", + "classnames": "^2.3.1", + "rc-select": "~14.15.0", + "rc-tree": "~5.9.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-checkbox": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/rc-checkbox/-/rc-checkbox-3.3.0.tgz", + "integrity": "sha512-Ih3ZaAcoAiFKJjifzwsGiT/f/quIkxJoklW4yKGho14Olulwn8gN7hOBve0/WGDg5o/l/5mL0w7ff7/YGvefVw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.25.2" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-collapse": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/rc-collapse/-/rc-collapse-3.8.0.tgz", + "integrity": "sha512-YVBkssrKPBG09TGfcWWGj8zJBYD9G3XuTy89t5iUmSXrIXEAnO1M+qjUxRW6b4Qi0+wNWG6MHJF/+US+nmIlzA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.3.4", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dialog": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/rc-dialog/-/rc-dialog-9.6.0.tgz", + "integrity": "sha512-ApoVi9Z8PaCQg6FsUzS8yvBEQy0ZL2PkuvAgrmohPkN3okps5WZ5WQWPc1RNuiOKaAYv8B97ACdsFU5LizzCqg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/portal": "^1.0.0-8", + "classnames": "^2.2.6", + "rc-motion": "^2.3.0", + "rc-util": "^5.21.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-drawer": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/rc-drawer/-/rc-drawer-7.2.0.tgz", + "integrity": "sha512-9lOQ7kBekEJRdEpScHvtmEtXnAsy+NGDXiRWc2ZVC7QXAazNVbeT4EraQKYwCME8BJLa8Bxqxvs5swwyOepRwg==", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@rc-component/portal": "^1.1.1", + "classnames": "^2.2.6", + "rc-motion": "^2.6.1", + "rc-util": "^5.38.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-dropdown": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/rc-dropdown/-/rc-dropdown-4.2.0.tgz", + "integrity": "sha512-odM8Ove+gSh0zU27DUj5cG1gNKg7mLWBYzB5E4nNLrLwBmYEgYP43vHKDGOVZcJSVElQBI0+jTQgjnq0NfLjng==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.11.0", + "react-dom": ">=16.11.0" + } + }, + "node_modules/rc-field-form": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/rc-field-form/-/rc-field-form-2.4.0.tgz", + "integrity": "sha512-XZ/lF9iqf9HXApIHQHqzJK5v2w4mkUMsVqAzOyWVzoiwwXEavY6Tpuw7HavgzIoD+huVff4JghSGcgEfX6eycg==", + "dependencies": { + "@babel/runtime": "^7.18.0", + "@rc-component/async-validator": "^5.0.3", + "rc-util": "^5.32.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-image": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/rc-image/-/rc-image-7.11.0.tgz", + "integrity": "sha512-aZkTEZXqeqfPZtnSdNUnKQA0N/3MbgR7nUnZ+/4MfSFWPFHZau4p5r5ShaI0KPEMnNjv4kijSCFq/9wtJpwykw==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/portal": "^1.0.2", + "classnames": "^2.2.6", + "rc-dialog": "~9.6.0", + "rc-motion": "^2.6.2", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-input": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/rc-input/-/rc-input-1.6.3.tgz", + "integrity": "sha512-wI4NzuqBS8vvKr8cljsvnTUqItMfG1QbJoxovCgL+DX4eVUcHIjVwharwevIxyy7H/jbLryh+K7ysnJr23aWIA==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.18.1" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-input-number": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/rc-input-number/-/rc-input-number-9.2.0.tgz", + "integrity": "sha512-5XZFhBCV5f9UQ62AZ2hFbEY8iZT/dm23Q1kAg0H8EvOgD3UDbYYJAayoVIkM3lQaCqYAW5gV0yV3vjw1XtzWHg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/mini-decimal": "^1.0.1", + "classnames": "^2.2.5", + "rc-input": "~1.6.0", + "rc-util": "^5.40.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-mentions": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/rc-mentions/-/rc-mentions-2.16.1.tgz", + "integrity": "sha512-GnhSTGP9Mtv6pqFFGQze44LlrtWOjHNrUUAcsdo9DnNAhN4pwVPEWy4z+2jpjkiGlJ3VoXdvMHcNDQdfI9fEaw==", + "dependencies": { + "@babel/runtime": "^7.22.5", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.6", + "rc-input": "~1.6.0", + "rc-menu": "~9.15.1", + "rc-textarea": "~1.8.0", + "rc-util": "^5.34.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-menu": { + "version": "9.15.1", + "resolved": "https://registry.npmjs.org/rc-menu/-/rc-menu-9.15.1.tgz", + "integrity": "sha512-UKporqU6LPfHnpPmtP6hdEK4iO5Q+b7BRv/uRpxdIyDGplZy9jwUjsnpev5bs3PQKB0H0n34WAPDfjAfn3kAPA==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.0.0", + "classnames": "2.x", + "rc-motion": "^2.4.3", + "rc-overflow": "^1.3.1", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-motion": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/rc-motion/-/rc-motion-2.9.3.tgz", + "integrity": "sha512-rkW47ABVkic7WEB0EKJqzySpvDqwl60/tdkY7hWP7dYnh5pm0SzJpo54oW3TDUGXV5wfxXFmMkxrzRRbotQ0+w==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-util": "^5.43.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-notification": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/rc-notification/-/rc-notification-5.6.2.tgz", + "integrity": "sha512-Id4IYMoii3zzrG0lB0gD6dPgJx4Iu95Xu0BQrhHIbp7ZnAZbLqdqQ73aIWH0d0UFcElxwaKjnzNovTjo7kXz7g==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.9.0", + "rc-util": "^5.20.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-overflow": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/rc-overflow/-/rc-overflow-1.3.2.tgz", + "integrity": "sha512-nsUm78jkYAoPygDAcGZeC2VwIg/IBGSodtOY3pMof4W3M9qRJgqaDYm03ZayHlde3I6ipliAxbN0RUcGf5KOzw==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.37.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-pagination": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/rc-pagination/-/rc-pagination-4.3.0.tgz", + "integrity": "sha512-UubEWA0ShnroQ1tDa291Fzw6kj0iOeF26IsUObxYTpimgj4/qPCWVFl18RLZE+0Up1IZg0IK4pMn6nB3mjvB7g==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.3.2", + "rc-util": "^5.38.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-picker": { + "version": "4.6.15", + "resolved": "https://registry.npmjs.org/rc-picker/-/rc-picker-4.6.15.tgz", + "integrity": "sha512-OWZ1yrMie+KN2uEUfYCfS4b2Vu6RC1FWwNI0s+qypsc3wRt7g+peuZKVIzXCTaJwyyZruo80+akPg2+GmyiJjw==", + "dependencies": { + "@babel/runtime": "^7.24.7", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.2.1", + "rc-overflow": "^1.3.2", + "rc-resize-observer": "^1.4.0", + "rc-util": "^5.43.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "date-fns": ">= 2.x", + "dayjs": ">= 1.x", + "luxon": ">= 3.x", + "moment": ">= 2.x", + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + }, + "peerDependenciesMeta": { + "date-fns": { + "optional": true + }, + "dayjs": { + "optional": true + }, + "luxon": { + "optional": true + }, + "moment": { + "optional": true + } + } + }, + "node_modules/rc-progress": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/rc-progress/-/rc-progress-4.0.0.tgz", + "integrity": "sha512-oofVMMafOCokIUIBnZLNcOZFsABaUw8PPrf1/y0ZBvKZNpOiu5h4AO9vv11Sw0p4Hb3D0yGWuEattcQGtNJ/aw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.6", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-rate": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/rc-rate/-/rc-rate-2.13.0.tgz", + "integrity": "sha512-oxvx1Q5k5wD30sjN5tqAyWTvJfLNNJn7Oq3IeS4HxWfAiC4BOXMITNAsw7u/fzdtO4MS8Ki8uRLOzcnEuoQiAw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.0.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-resize-observer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/rc-resize-observer/-/rc-resize-observer-1.4.0.tgz", + "integrity": "sha512-PnMVyRid9JLxFavTjeDXEXo65HCRqbmLBw9xX9gfC4BZiSzbLXKzW3jPz+J0P71pLbD5tBMTT+mkstV5gD0c9Q==", + "dependencies": { + "@babel/runtime": "^7.20.7", + "classnames": "^2.2.1", + "rc-util": "^5.38.0", + "resize-observer-polyfill": "^1.5.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-segmented": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/rc-segmented/-/rc-segmented-2.5.0.tgz", + "integrity": "sha512-B28Fe3J9iUFOhFJET3RoXAPFJ2u47QvLSYcZWC4tFYNGPEjug5LAxEasZlA/PpAxhdOPqGWsGbSj7ftneukJnw==", + "dependencies": { + "@babel/runtime": "^7.11.1", + "classnames": "^2.2.1", + "rc-motion": "^2.4.4", + "rc-util": "^5.17.0" + }, + "peerDependencies": { + "react": ">=16.0.0", + "react-dom": ">=16.0.0" + } + }, + "node_modules/rc-select": { + "version": "14.15.2", + "resolved": "https://registry.npmjs.org/rc-select/-/rc-select-14.15.2.tgz", + "integrity": "sha512-oNoXlaFmpqXYcQDzcPVLrEqS2J9c+/+oJuGrlXeVVX/gVgrbHa5YcyiRUXRydFjyuA7GP3elRuLF7Y3Tfwltlw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/trigger": "^2.1.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-overflow": "^1.3.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-slider": { + "version": "11.1.6", + "resolved": "https://registry.npmjs.org/rc-slider/-/rc-slider-11.1.6.tgz", + "integrity": "sha512-LACAaXM0hi+4x4ErDGZLy7weIQwmBIVbIgPE+eDHiHkyzMvKjWHraCG8/B22Y/tCQUPAsP02wBhKhth7mH2PIw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.5", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-steps": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rc-steps/-/rc-steps-6.0.1.tgz", + "integrity": "sha512-lKHL+Sny0SeHkQKKDJlAjV5oZ8DwCdS2hFhAkIjuQt1/pB81M0cA0ErVFdHq9+jmPmFw1vJB2F5NBzFXLJxV+g==", + "dependencies": { + "@babel/runtime": "^7.16.7", + "classnames": "^2.2.3", + "rc-util": "^5.16.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-switch": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rc-switch/-/rc-switch-4.1.0.tgz", + "integrity": "sha512-TI8ufP2Az9oEbvyCeVE4+90PDSljGyuwix3fV58p7HV2o4wBnVToEyomJRVyTaZeqNPAp+vqeo4Wnj5u0ZZQBg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "classnames": "^2.2.1", + "rc-util": "^5.30.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-table": { + "version": "7.47.5", + "resolved": "https://registry.npmjs.org/rc-table/-/rc-table-7.47.5.tgz", + "integrity": "sha512-fzq+V9j/atbPIcvs3emuclaEoXulwQpIiJA6/7ey52j8+9cJ4P8DGmp4YzfUVDrb3qhgedcVeD6eRgUrokwVEQ==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "@rc-component/context": "^1.4.0", + "classnames": "^2.2.5", + "rc-resize-observer": "^1.1.0", + "rc-util": "^5.41.0", + "rc-virtual-list": "^3.14.2" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tabs": { + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/rc-tabs/-/rc-tabs-15.3.0.tgz", + "integrity": "sha512-lzE18r+zppT/jZWOAWS6ntdkDUKHOLJzqMi5UAij1LeKwOaQaupupAoI9Srn73GRzVpmGznkECMRrzkRusC40A==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "classnames": "2.x", + "rc-dropdown": "~4.2.0", + "rc-menu": "~9.15.1", + "rc-motion": "^2.6.2", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.34.1" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-textarea": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/rc-textarea/-/rc-textarea-1.8.2.tgz", + "integrity": "sha512-UFAezAqltyR00a8Lf0IPAyTd29Jj9ee8wt8DqXyDMal7r/Cg/nDt3e1OOv3Th4W6mKaZijjgwuPXhAfVNTN8sw==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "^2.2.1", + "rc-input": "~1.6.0", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.27.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tooltip": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/rc-tooltip/-/rc-tooltip-6.2.1.tgz", + "integrity": "sha512-rws0duD/3sHHsD905Nex7FvoUGy2UBQRhTkKxeEvr2FB+r21HsOxcDJI0TzyO8NHhnAA8ILr8pfbSBg5Jj5KBg==", + "dependencies": { + "@babel/runtime": "^7.11.2", + "@rc-component/trigger": "^2.0.0", + "classnames": "^2.3.1" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-tree": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/rc-tree/-/rc-tree-5.9.0.tgz", + "integrity": "sha512-CPrgOvm9d/9E+izTONKSngNzQdIEjMox2PBufWjS1wf7vxtvmCWzK1SlpHbRY6IaBfJIeZ+88RkcIevf729cRg==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-motion": "^2.0.1", + "rc-util": "^5.16.1", + "rc-virtual-list": "^3.5.1" + }, + "engines": { + "node": ">=10.x" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-tree-select": { + "version": "5.23.0", + "resolved": "https://registry.npmjs.org/rc-tree-select/-/rc-tree-select-5.23.0.tgz", + "integrity": "sha512-aQGi2tFSRw1WbXv0UVXPzHm09E0cSvUVZMLxQtMv3rnZZpNmdRXWrnd9QkLNlVH31F+X5rgghmdSFF3yZW0N9A==", + "dependencies": { + "@babel/runtime": "^7.10.1", + "classnames": "2.x", + "rc-select": "~14.15.0", + "rc-tree": "~5.9.0", + "rc-util": "^5.16.1" + }, + "peerDependencies": { + "react": "*", + "react-dom": "*" + } + }, + "node_modules/rc-upload": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/rc-upload/-/rc-upload-4.8.1.tgz", + "integrity": "sha512-toEAhwl4hjLAI1u8/CgKWt30BR06ulPa4iGQSMvSXoHzO88gPCslxqV/mnn4gJU7PDoltGIC9Eh+wkeudqgHyw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "classnames": "^2.2.5", + "rc-util": "^5.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util": { + "version": "5.43.0", + "resolved": "https://registry.npmjs.org/rc-util/-/rc-util-5.43.0.tgz", + "integrity": "sha512-AzC7KKOXFqAdIBqdGWepL9Xn7cm3vnAmjlHqUnoQaTMZYhM4VlXGLkkHHxj/BZ7Td0+SOPKB4RGPboBVKT9htw==", + "dependencies": { + "@babel/runtime": "^7.18.3", + "react-is": "^18.2.0" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/rc-util/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, + "node_modules/rc-virtual-list": { + "version": "3.14.8", + "resolved": "https://registry.npmjs.org/rc-virtual-list/-/rc-virtual-list-3.14.8.tgz", + "integrity": "sha512-8D0KfzpRYi6YZvlOWIxiOm9BGt4Wf2hQyEaM6RXlDDiY2NhLheuYI+RA+7ZaZj1lq+XQqy3KHlaeeXQfzI5fGg==", + "dependencies": { + "@babel/runtime": "^7.20.0", + "classnames": "^2.2.6", + "rc-resize-observer": "^1.0.0", + "rc-util": "^5.36.0" + }, + "engines": { + "node": ">=8.x" + }, + "peerDependencies": { + "react": ">=16.9.0", + "react-dom": ">=16.9.0" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-data-grid": { + "version": "7.0.0-beta.43", + "resolved": "https://registry.npmjs.org/react-data-grid/-/react-data-grid-7.0.0-beta.43.tgz", + "integrity": "sha512-uqzhXsaeIpCnNsB1zODWzP88od6r5Q5UA5GnEhba9XmUMFUy2VcUTTfABmbAiVGdJkUzWJTx1l0hZn0WNGE/hQ==", + "dependencies": { + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^18.0", + "react-dom": "^18.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-pdf": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.1.1.tgz", + "integrity": "sha512-Cn3RTJZMqVOOCgLMRXDamLk4LPGfyB2Np3OwQAUjmHIh47EpuGW1OpAA1Z1GVDLoHx4d5duEDo/YbUkDbr4QFQ==", + "dependencies": { + "clsx": "^2.0.0", + "dequal": "^2.0.3", + "make-cancellable-promise": "^1.3.1", + "make-event-props": "^1.6.0", + "merge-refs": "^1.3.0", + "pdfjs-dist": "4.4.168", + "tiny-invariant": "^1.0.0", + "warning": "^4.0.0" + }, + "funding": { + "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-router": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz", + "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==", + "dependencies": { + "@remix-run/router": "1.19.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz", + "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==", + "dependencies": { + "@remix-run/router": "1.19.2", + "react-router": "6.26.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "dependencies": { + "throttleit": "^1.0.0" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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": "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/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/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/restructure": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/restructure/-/restructure-3.0.2.tgz", + "integrity": "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw==" + }, + "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/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "optional": 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/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "optional": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "fsevents": "~2.3.2" + } + }, + "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/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "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/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.79.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", + "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-3.1.0.tgz", + "integrity": "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ==", + "dependencies": { + "compute-scroll-into-view": "^3.0.2" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "devOptional": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "optional": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "node_modules/std-env": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "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/string-width-cjs/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/string-width-cjs/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/string-width-cjs/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-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "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-ansi-cjs/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/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-literal": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", + "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", + "dev": true, + "dependencies": { + "acorn": "^8.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/stylis": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", + "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==" + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "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-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-arc-to-cubic-bezier": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/svg-arc-to-cubic-bezier/-/svg-arc-to-cubic-bezier-3.2.0.tgz", + "integrity": "sha512-djbJ/vZKZO+gPoSDThGNpKDO+o+bAeA4XQKovvkNCqnIS2t+S4qnLAGQhyyrulhCFRl1WWzAp0wUDV8PpTVU3g==" + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", + "dev": true + }, + "node_modules/tailwindcss": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", + "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/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/tailwindcss/node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "optional": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "optional": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/throttleit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.1.tgz", + "integrity": "sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tiny-inflate": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz", + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==" + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/ts-pattern": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-5.4.0.tgz", + "integrity": "sha512-hgfOMfjlrARCnYtGD/xEAkFHDXuSyuqjzFSltyQCbN689uNvoQL20TVN2XFcLMjfNuwSsQGU+xtH6MrjIwhwUg==" + }, + "node_modules/tsconfck": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/tsconfck/-/tsconfck-3.1.3.tgz", + "integrity": "sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==", + "dev": true, + "bin": { + "tsconfck": "bin/tsconfck.js" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", + "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/unicode-properties": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.4.1.tgz", + "integrity": "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==", + "dependencies": { + "base64-js": "^1.3.0", + "unicode-trie": "^2.0.0" + } + }, + "node_modules/unicode-trie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz", + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==", + "dependencies": { + "pako": "^0.2.5", + "tiny-inflate": "^1.0.0" + } + }, + "node_modules/unicode-trie/node_modules/pako": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz", + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.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==" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", + "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-compatible-readable-stream": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/vite-compatible-readable-stream/-/vite-compatible-readable-stream-3.6.1.tgz", + "integrity": "sha512-t20zYkrSf868+j/p31cRIGN28Phrjm3nRSLR2fyc2tiWi4cZGVdv68yNlwnIINTkMTmPoMiSlc0OadaO7DXZaQ==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite-plugin-svgr": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", + "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4 || 5" + } + }, + "node_modules/vite-tsconfig-paths": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", + "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^3.0.3" + }, + "peerDependencies": { + "vite": "*" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "dev": true, + "dependencies": { + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "optional": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/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==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/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==", + "optional": true + }, + "node_modules/wide-align/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==", + "optional": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wide-align/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==", + "optional": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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==", + "devOptional": true + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoga-layout": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.1.0.tgz", + "integrity": "sha512-auzJ8lEovThZIpR8wLGWNo/JEj4VTO79q9/gOJ0dWb3shAYPFdX3t9VN0fC0v+jeQF77STUdCzebLwRMqzn5gQ==" + } + } +} diff --git a/frontend/package.json b/frontend/package.json index d92d930d..1910d560 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -15,6 +15,7 @@ "@lrd/e3-sdk": "^1.0.11", "@mdi/js": "^7.4.47", "@mdi/react": "^1.6.1", + "@react-pdf/renderer": "^4.0.0", "@react-rxjs/core": "^0.10.7", "@react-rxjs/utils": "^0.9.7", "antd": "^5.18.0", @@ -30,6 +31,7 @@ "react": "^18.3.1", "react-data-grid": "7.0.0-beta.43", "react-dom": "^18.3.1", + "react-pdf": "^9.1.1", "react-router-dom": "^6.23.1", "rxjs": "^7.8.1", "ts-pattern": "^5.1.2" From d362dc2a48717251f773ca3df8bca79a26ff030a Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 24 Oct 2024 11:17:23 -0400 Subject: [PATCH 02/24] add pdf boilerplate --- frontend/public/645px-nist_logo-svg_1.png | Bin 0 -> 6268 bytes frontend/public/logo.png | Bin 0 -> 16297 bytes frontend/src/components/Pdf.tsx | 80 ++++++++++++++++++ frontend/src/components/ResultsAppBar.tsx | 15 +++- .../pdf-components/PdfDisclaimer.tsx | 20 +++++ frontend/src/images/645px-nist_logo-svg_1.png | Bin 0 -> 6268 bytes 6 files changed, 114 insertions(+), 1 deletion(-) create mode 100644 frontend/public/645px-nist_logo-svg_1.png create mode 100644 frontend/public/logo.png create mode 100644 frontend/src/components/Pdf.tsx create mode 100644 frontend/src/components/pdf-components/PdfDisclaimer.tsx create mode 100644 frontend/src/images/645px-nist_logo-svg_1.png diff --git a/frontend/public/645px-nist_logo-svg_1.png b/frontend/public/645px-nist_logo-svg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9629140334e067215e108f1c9d26b1e3f47e680b GIT binary patch literal 6268 zcmX9@2|Uy9AKwf^HusUEOzz|;$21Y9%#|zU2suNT3M)rj5|Sggh%7|qK2!0HMeZ=S z*r;?2E7!`=|LgaE?e*IBdOgqc{yxv=`F!5*_h(DAu|A97k>G(qAPAfp)(!$;ivzzu z=i&t4XDqc3fghZn7H6@LfBUZ|Z=YpAAmW-htdRquVENO{hQ~f(-M>PDJ&76tiO#%g znKBmn}x|>WSRES+q12$+LWdV^WkLQFEjQ zR-;@aU-SM$HS`c<1(uz<^H+x^N^_*Cc@UmdoPT6N+O0FW3hV(s(NS$xyKjQDVUq_Z zxe0rA0eC) zB4~zQnn4gwYG`Xel&d`JXxqY#*T4(cEPa^Y8s+uadf5G%1Sf^CB@xwAcHYWu%-o=v zQXUV%h|9-2%|-~ktxB^nv;>-c@+z_VHFwR>hs7A0EKQY$f%VH&xM5%+?4tZGm*gtY zCNM&>GR3VdkQf53_Nn2ZPwPnbFoS5Xu}#W}H|4VYkI>Fja{44mx|fZVDm<*j;^5E; zq5RpRd1jy$rATn93XZfKl&#=RMXm7c@uJ08^|R=7>R~I9xO!3_NgX;A@J;*gcPAhx zaWu6)quwmw8OrnU`T&qe`F1)P%}{o8HOtpsb~`em$TVHX@nj4nigVIH zFG)_DTx3c|Qrg~aef&2{iEZGvopdwVu}p6bw5NGd_7)$5n08P9o)=bwRKdcRN7owP zRZ)g+5W@L!%3lSJ!b7|?;(yC2k9n)#uqT~^7Ri?-Q+*H6q89ub=r5@V6JVQI4LfHw zD2s!g$TNt`hZMoSZYf*jOPgF(F_e;Yx6q!sf8|*QiQX_K7r#|Zk`EgvBy}7FU6g!nWnW@UZ*Oa4EcTI2Z0zezHYZ`nr;rNL;=^yYI0UT|;-|-!I%_&`SyqCEMK7*C>D1Xa&CajuJ$I-zECXf z|8Z0Drdj%}ns8gzy-eW^j3D|H<}MXwf-O3avr8RUJH;FD~)bOLa}}@*f~G$NZIBzucgSOrc8dFLUb~f(Oj3^5(JlYxjk~M~Sr|^WPJkA~4@PtDJ@HdADSCVfxiL=mnHN4rG za?Zz)S&k?b5G7&cq>`(t>*&e{q%7{~J>o#U$pbnkEo|rC9XvG_>t2@xe{@B|0IK={ zi4q}~)P^61YT;?fN_7L1FftPMkp}L&d0w^^v~=kfs6TaO^7Nc0QO<<9=L|au|wu z%*5jDW~s@X$)pPzU{z*bmobxQm}2{-7>2B_ks59XSoCO-c(^_9HzjcfZdLfUiXtfh&ld^cc$P`^b>xa3_U=aFh|Djo! z(p6|SxAN2M(v<-{ih)T*(#jB0BbyXaO&tmQDsbC;-_WPA<- zl1@!RP2VW8!$uOH8BEm@wZ5!;V|+YSFe1gmz=&EmFDf{TFtIjQ(( zYEFgH9=zu`!~4Me^ZFiO%N6GZCVFW_0v zQVw-achQ$2u6GuhR7A5k{M$P^rN{yoP+27w#~(3+4Fbo`qt)4l*cDnn*b1A+GbTzqX;u{N51h?a9CwG`kxyY~t2rsW@{$}|P$#T~3VUpN zIV4z?r&DCVXmmom@qHjI9p<(7TY`**oS-FB_Bt(U&<=u09do-FJo`p+=SsC*CT)2?TZ4VpOTxFq;^S9seKO-P4@geqpQ zmy>Fgq}s2OGU`mUXd>W2!_e9oB2{se*v$W)ZqVaIg^I=rUFTsw1d9dD$=YV{kH|%n z{yO6-W(s*-kp(b)HQoCGzP9MlZu_OZ(g?x##SYKMfcQESGXwzD`kAS=QE{ChRTG5WdEC|C)uI~D$*0Lgt6xbr;Hrn zNgaEvW5ctpO<>vZi%E6UE3hv}UKQ1GnGIz*f}<5pACTnVPQsf*b_;wv=tluot};kW%H=t(M(JwTg^D$kD-pCPuzG*HrU*q+5o-x1 zjw3Bj!a9BeOppl?xqLeZH1q9MdVT@PpejNyLJHEPjla|?T^;XEd`M`#d8|eQb63ln z4;F7Te_6x-lBnSFNJ$|GuqsC@st50moz?PyJTI3Avm(j!FB^=&#f?&v@skq{83!roH+oY> zC7~xd2nW>UUj$3Sp83YxY&!`f=hPEAYMO-7P9(bFK^pKkz^#j1%96$gd^DmcIr_g< z<+(m3M={yrgMpnQz{g}%WCoc*&b#Esu)aZnCzGJ9NJO=s_Z_c+{Sjlb- zsSyO7ernw9I}&tFb(pJF2lR-b-%y~B0-FGw`KaQg)MM$>%O|kW@lxhZJOq(YNU4H7 z@izNckbxEGZZtU$9cCzvK8qeH>4$^)S{xqwrzP4^uri>k4>{szpLnxgy&oxSHF64Y zAxS5^rfq%hdZ^&-wNQWNuc2t%as#N%V5}}Z0BC1bVV?2mo<%P<`GF^h@9X~3BF;McW9EYaAB#6kOFd18FvHkeEs;ntU|DU$6v7t)1QWqZ8 zCl4wv*Vn_!rOlOiHm-D1W_zo>;r_sP0JU#Y`Kmaq_pQ?ivb!858u!JSdq=NE4r5ki zCBJfKun$zgXeNsGj=}H6v@V7ub&OO(kdT;1|500IK;dI)Y`VgCUEt;vs*5S-k-^~a z^|QU$<^%MVUzeH_VIdst{_GtCrCw(U`6Nm-F6^TDgU)TM@HB&bobbIFFyl*bES+UT zyyr7MCt=6W3LdvTajz8W6JgpezThBtYt9w>QD4!xI;EHWf;5dEk_UC+EWxmWm~85? zAordrSqu?m$?+vS@+GUFMdl{kV0T+qdhh!D6ts(0XbfTo2rzX)_0~9yjur2d!^z*g z8cx)lEs{R{=iZgu|KzOt&+gOLp93D3!PZIQS!F%!!8@`IukHNaiQRWN;MxDFYZ5er z)TfoiAkf%?!)k{w1d9_+;X}jII1A47i)58F&BSi5#y2TB2$&WtS}XdAfNAn+pSC&B zk_7+##pS1<9>^(9!r|J$2fXV zH)yqI!=|Wc^`U{GdwUS*uL6KIVuUy7hL)$GRHSI!r|TFzWMla-Xl9Z6Rq_AAk9aKk zE?PRb&lfed&kyw=Wi~*5^Se63mrIP`(e5DEXuWpwL?%m23&aZJG=;eyY9hBxlzZM|!Jv?H-eCob>Ktw*~T6;;nS zDRhaqK6sgKg>v@UO{m+{14Z{qc#RUHX|24Td%X<^18jlCMEl+$hygY#QoVR!c=hj2 zRNwYalojD1GkU>f;}^()Zb3ZyVgwBS1k-7{U9h$cL;BYX7D{fm^y%+|kV5u?0x(I# z*$gtIJ?~^g`PTpFt$tfu)Bf_E692s99m{vWJ|lQInAT*p14gU%`?jG3!5a7FwF-tf z-AT52nj$Y@bktqQlpaKxG{HHKj)Cz5Nk*cP2VHV4!f9#J0ipCqG_)UF&cPWI8n zi-Tq?@Tm(aP%ogFrAi^XmD@yRp7Wx_VqU8>?z{JL#lN< zbZ|eg669A_%g_4`0=OxZicY`B%0i{Aubah>vU6-(e(^S#S5Ys2p*dI%;R)uKOnJ)= z-@VSPs-~K@D`cmXhSe!i32!;JO10^k(6;eC{et@LTSH?0lSM0Id)6B>9e9pjZ} ztFQ}5miD|MZ6YJ{=Sdm^9M(-TwxXDO80^!M{2q#~ox>k*EjJdDi&kwpiAk6qAlnEv zvY{c}bgOX$<@*Zn>if5Gc4ATKx!H0-X{N;rUI%N$YP2wB#g4ELg=&p$wH3asfGsZ? zi@~oF3yudW*Qlp-<|ovD__w*I3%u<)D5t$>MB}=8>e(SD;pc~g+1$>kD!bxz zFl~&5lFeFCpm~tPa<$Y%;{rOAdBcs*DrdvuVSGMtr_^ds`@jnCc1rB+N9;+)+F#_Z zM%0ywU^`b`>SG_!PqEr?@~sD4?)s;z@{DC(rZs-n_6^QBPeB!gfF(*=&37m)f~vCz z_aMo2;8}60{O><%PZj`x9}ua%O9+dyW5F+Jxf0DgHPZ@7-`5Go_ANREyRxd9w}AOeRg_e z)j1WgH%a4O-C6^bB!#e{NkL+-`=dL+4C)`}Cf!&cK!bMQ4~Z z5gtgq${fYE)78MSES@Apx|C>tqx5Fll}-KlT4T9HW8now|FR)!m|JQ~KYL;T5ZMjys3(oCsr;mAp zze=0^td(GOeDIR=^#607viH`AkSlJrKkwM&nKF61W#WT-^Y_ufmuyvvNNZKjHj@U@N6IHe)RoV_ zgcnZz+}c)X{G?8jOgI#qBQ%jmr(#ELT@-$<6~X40sxNat`I$hZK!n7f4M)I>G(fZ> z9R%KDw@Zh+he$5tgdJg45pBM literal 0 HcmV?d00001 diff --git a/frontend/public/logo.png b/frontend/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb0c442880b8d640e923df67962b561e5eed8ba GIT binary patch literal 16297 zcmZv@WmsI@vNak(gS$g;f;++8-Ccq;uE8zA-QC@3f_oF(X$T(N-Q92J-Fts0XP^6r zr~j~4&0009YK$5crlcT=^a20Fn>TNeq@~1E-n@C+2KfzugMs`_+cq1hh1Y)P<@4>b z7w|2=JliukEI3#K6Wg{cGylU8uTsR$j>MNvszz&aHd>+CEze^gTnh9sv3w?D(Z%ED ztAoW)))Q`_@MvXexGrh$?Vrq`!$(|m%gck0okUb~;}A&Fvrf7@5YLIFA^%pG5Q=20 zcz*IYf|_9`F6B@3Wr#DdS37ooF4WpCGvM~M2A{Hs_lLD&gOW^mmKa%_)RT~ng;%)E zrNkA{fsj@{wDLZuSkX2aYu|V;_=BhzHY?1|+HBj-M$ap-=czWU6ezHx{ayAp(N4j> zxm9q+V8VPms=C7q{qOhJxNBpL^V##n>>2+$VytUukCAKaLA4DgwZeya?e%Y?PFxer zsoLC5FVmfZ?zm<6GUjkm#SmUnlK}hIV{QvV<(F$Vo9~A8aE&8F6`U=g6s?i5ueZr4 z;>5kyB^vFi7@H|@ZUsK)z^_^zEo*Knm)zj$t?jX_N>kaapq|G4IUi5h{DiBZ-FeII z?Imiqg@jr;jZ;1giyWXkrMs6US={T(6l!*CREYt7&&so;UW22Vv+#h@%Zgtq40m$W z-Kl1Ua-$Kf)nT;t4KMfK&m=n7lQw4{|D>Mhe6bJHw90`KH>4rfMCYng=jg~Di0{~Q zT&L9Vm|LL$9*njDg9_ZY(pU>~>_mPG(T(#6qG%fC#7NsSi7e!2efG^P=Cx?!Y}nny z9tBFYOG3Us***m%063a^$2e%juwoxJ2b5baaI$^#5DOSxKDKmL^@!la8Go6~f=@Bv zAiC5poSoj9CLBnxr>YheGsZ?_!NwM5{T|uSjcO|<7mV}_uKlt!c7L~#!7<;siJGZ! z>nyaLs9tmE*@f|!qmU@RUX_QgOs2zNV%iVbpQH!8h<=J^>p=yWDrZ##TvizPhJs^L z36~reZ7TKZ23#tsie*>C_rdm6#v<`SdtYI5c2Gr=cZ5vi1Bh~p`L*Ka!Qp7+RqmHr zeWmlBsbM8N9{L@@K*_((m^3{*TVP>8dD2|+M*2A_RH~6IQd~>4e z&Jl#qwvt-ySm!=<%;yczrTnuKPLYjyp|!{fD>{*E67vfza?E0;m!Z)+mt_N6yFCW` zb!TD(yqav|&t+ISejUhOH^ej3I~^5jD7{`=up2nJO*(F5#BBvs`=9esyy{#iH)=fV z?qlXB4&LItdx=E&{IwZ5#|QLbSI=TsKM8FJv#*7m3;lDt6)L{{X2L+vMpWqdk24F| zG{7!4Z#W3C2D=c2bt51qx!~n9eAWYf6_H-+^o096N(9%94wU4LXs-x|o6>#y^pP)< z290#TFC#yG`i)?=fuC*ETeZ1s^wOQhkaQpZkvGCU=6Bw9KMoGgE$x&+hS9RHkbwFK zyo>a2iS|wgs)t)OuCWFe=&GlZba&#CR!iWRUvIF6Vsh0|z$0;HNGK*grU-a|MyIY( zOmRBMLdxhJc2d|n&eldv$uP_Mx`)(W#)y~%8c&Q*0mJ7*Zvs$ud+|0drm%|tUZb;F zxqe3WW2Qs=nfk`FALBrC2B2<}buwb~i~rGC=vDrwZqpn*vN{%rW@r-M2Y#G$ph&x< z?SysbXuf5&x{1EDkncaXwv(@bHC~Qvi(54K<9x4RYx0mVZJV;|THvST4jsF|QXeDX zN-UxUah&3Y75UjEyP%{+lrJ)~JWnUz(X$g0#(7zj#A2esfm~Vn@~|Xbco|mx z?@_S7jPbZAAxgRU5O)-W-j*Wi_`rL%O>!X2szXg%lx_#MQdGg0_iJ;EaU2F+6?8)K z`x=eB&-J8<`(wxU9`E32$hD+u3MD+zX>0vC;7c$rn*xb>|Dm6Dc%N*U?nFl>7`W_$ z>tIgR-8^3-#hgSYNZ!B9jv6$!dEw{obnPhs(VcaQN#RWr1koIZ5Z)!}AA5d$ zo=58qZe%-J&<&u@&Hx8~7ng9P5;LQDuc$WpL7JJIl$_vJP%knl!mVpxO+30+B5gun zfB737Fm0%hF)>U=%OCCb8HBq?JA;Li=#$}sjt#9@xa&DCb+n=%Pz_rAhA^;o;T&od zXMu^sS46-WPgN_K!Mq{DTgxCQ1irq8+@FBlr+91m>+d61R3Bf<|M<_&zwtZOl%5|T z&iAO4q%W9LiPN4tQ1>)7Y!4Fyr@Zv53u<_jxD+Qg65e@29H%$089xU5@g*Y%M;#d^ z(ls^n`L(#5kp;0Ha<=yu0c4_Cpo7pO?|Ky-tHZR^6TX623iEBx4-J(?GermoGjS2E_Uz z_Qn{C9x@Gw%2NAvdW?M0yFE;UlOHrki}fm`6#sg4#K71S$$QGs`}_LQL%IQ`nz^QI zUMC7*K-*W6Q{7+V>9RiSI=t^s`!!oc$Iy>Zn_Fw0_j1q_!T7!&uE?5=Vmura z5OsGpRb*kK;$-`)*Y$x372>j>+?V`_;s?<)WdQu(fE9NhW0*~Di{;YDjR?6M?T!Zb6Uj@2Abqi9Ja7I*;

Tt9q8xgJcAOv0{P#(Y| z_%p%-%2=PoLB(pR z?lJ8jJFg7nt|Qheg#PtOfJP-rIsP+)IE)B^8rRSjaZGwUf)ICL9~kv*Qb%t-`!R?c zw?gN^v%^M3vKCCpyfcq%pO3B$YSS4$o>z~G5zr4A$To-^$kq-Y$fnf&HB9Vd4sYvzr9%ECa%s7}v(@by(SsBi-SIY|CL)sgBtvx_rklaK0Fy^# zGZt+#N|;y3eZ$$pS&b<3Mf1j@d3&$LKs}9BS$`*brTQbipPESgLD{5S5Q?NBYJQ?| zAl=1_<>J>qvsl{wgjcpUg}n5*_iyF`$y#@NC=HO{4vSO8%?zG+kLJ6T5bsizg+v zm-nuoiaBv*E=%{{taW9z-JWH%`%an-7hW>F!W~XYWa3O#_FBu$8TAhMI(sCe&!Off zho~r<%v;mkENL&#YMJ-1ou-K@cDJ9zAwdgw7g3$epC-=-@RL^!A%^Q*fv0Kj+0fmO;o>Zg-V|hJm^BwOotE%f z$@f-~V31Z+Y_l9yp!Ob@DJ=}5dgW@`RO~!>5DMHi8eacB4VT%5_My(Uq-O5w`@(QI z)R#24u&l_tD<;&G2PESukc8auoXw&sXbd%ODEgIyH>NttcHfYc{)V8DA;cab;!zO9 z&v`7{cq}WXyii)k99Y*{Q1X!~sZq7V@Iq7c==GCXPw_{x?>^b*Sc|)|*p9wYFM#y( znWjS>@9*XuB-B3uugXh2zS!O9X=_E3xmYr6=9`xn4~VQi$(rkoB@%<_@JD2j0Dadv zxslSsuR4-NOO@RzSo~>K`yCH#L#C4E5A;}+q3PO=d7gJnm3}qoB;eFBJrv9x7Y31c|#}r zc+@q;l0N724;KL$W`#Z$TfEt5-3kAn|DL?^_@3 zZ{EW29E$EMLhnoRqY~&SPJg-m8BBt*wv;n@=6T?$R*a|gP^pAHw&c1?NcdT4ErAFq%CZ&_2x?`##Uow7!d8*visq+n`VRc7NdSvGZTjMJn!oP5xCs?4?= zp9e@MXs~yb@~W0wQe9ILvq}&vFb(_f(N7( zyE;5=N?ii24aZQozxTu%GwI0H)=gEV5kvWt#MAna)8{OiS+u0|R?j8xT|I$7KZUr5 z%F(f1!)lR(eU0|#TS}nfQk;tXGD{>e8!RBxwkr52f84OjGf1jt7v;M zZr%-_icf$9DXJ>v?B4i70#~Gtd5<2pwkkt!ieh>@;3sSyBn125V!-QkSp$U%0N+|N z`l0Zb00tWUN~);jxGa*ZD~_A1b48bT7bIyq8l_CBkOKB68?1@jSnw<3Z(kI(Y4sX! z(YaOJGZv^Gh01VlOfhL(qJ?LhB|0%F8XE)dkil|#kqbe(%FJ$bJ3r>~<89ryqr~B& z#=5}3^r%nVhYNtDRQ(^&&b#WyRyS0L{DL^2o^9_o3ASmnJKxvs*nC-RB8}--;m?DL zlg8F_-n1E|{oOB^qy6&$a4PsGjd|Juj8*Vs}i=fWg4BN^j0B|IO38 z(M)5W5GVKpHPOec@ksv;lRR!GvFk8+Hf7_4voZBgk1@3_~Z4Yu_n;EC; z(dWt*yCB=75XWPrdv7z?2iUiUJxoDP0lyti1H?b~7w~pBt%cnVB6OW?pZ*itIR{^7 z{eFdf_!Z+x%2`hqMV*;?X2F7!vZuyTUNAJp-FysenXfC6pnumu3O3H40sM$#8pqF$ z9Xd!24lOLB|CJW*K$S?5t_K%iJHI=Hnl{)-?KeQyPbi={hME8^+Kah@Wd%q57>tLc zbRQk_bt^#LLKoLZVzJYhGtD-mf0z~FbyhvuhxokZ0zYl2aq>;-sotaCI%^}p6D?VS zrOSIZUXn&dOeEJlpHgHVm*b$l|GFrM|rWGW?Q@A3P%I zf)sIV*oMk+cV(3_Rk(HaqR&`FispKzGIC&lxhfi=H-G1gC_}2INW?_>V}A=nCeSrxQUnOcfEsZ^Ff}z13wTL4cD$`=S!q_y&IVl8yi21Ft z@?Oh;G57mxEQ>Y&MGgKHF@wCC8Z@TP#z42G_@8tL^EZ>fk~^U{WzVw(u;`2yMarXd&pcYvpF# zTyw@Q4MJP3Cs{%zy$E|3YDSNt=th;)5kUCUa@Onyca1c8B8M?`@~1c zErKz~3lp|HPq1^wv4*(L-F(ykPVHEwF8mD!HG`OUjtwUEJ?@?GWD5RwcraE+o}8WL z$RudEqE;X)^kS&}e$jD!&?b}L3T8vA{`v}GyR_;&^Zon>(haiUNaxYt&{lOu#4yw! zEMbVm-T&Dw-j-)7V;Mn}63S_E3&MAONpfGGanf_BA@T{CN1apj5Ez;Yar|;=E_W19 ze|OIWSR0&#@dM>{+{2y~5xzZe#)dE|`?!SCr!Ll~E?(0?bn+kOJ~rv-FI33i9T+FJsV zl64@wGsmM#WN(@ub>kHtMYsou)FscB=q?=(Pd}Xf>+7*lB{sfqlh=v!K|({mTGuv`a`;1ZYbUu zWg#Ftf3T%*JUX_S&^trgLn!0V&1fVM8fgjJT|#r7$-{Y@6$63(bhvRZQ;_bgv$74<4<~Z8R8>|f-a^HKfKSgU6d^Bzs__NGspS_xmWe{O6)rpDslcb6wN9%Y>B#851Q>R<#PJs4SG z79BV3BOG49N6ja*B6<#v#1Z3isiSlI&iuQVu3DOQ6VD+BXM3ub^W5g=Nh1XA6LkkzV@LAwRJ4Y^UX!4R}k~V@3sH0C~O?tF~RldsX}bEh*Gtjx6GJ3 z23dYy38nMpP7qh%^nO~!qG6~Kl9q`bykKn#;isu|=v6$=&ROXV zYBA_Ej{9qqR&2TJu;_W7tu7=$o}Z(9*~PqY+KA+iB=oZ*YPc|SjTh}e)8O%C$+MCs znK-_Wu&S(<+tBvLl70y-FK>T-*7HHE2GyX3Jx4vIWzpEI&{NC?!{*SMnI$O$A;8do zMexmWqaD{dAFow<>lH<=v+Ca|B0ZTvM)qX7T~mYBty%-_(1;ur96cs2;h-&qt+ol}Hc*1%6-L7jo^8m-!)sMr=9=WBq4QPHtVUk?syxu}NF( zu|+oa)3T~3Q?Kx{Qs7UYy|DaTr9vUCtmo^Scjc$1EOYmV@TvesdEe>R4t2|~70G+TDAL(w-dkKVXy;2{j8jFQfuXRVna>~tlZ@+m{bf>P zj!$^_Sejg>BLYHtAW5**wCy~I5LRjwi=ZZ~n8xY9(o?w-tmz+#E%|GLp-$_-nrl~I z>es4RSqw3GhS_AeCCL-m)>F$04GW|Z|K;az-wt^3M?$B)6DR3ZGqI=^lyzv$#n4vy{3mh_BJaY(Gi8m+2VX;34+s}2 zd`coDbe)B`!*dJ#KW6j(V|JQcSnjbDfkmHWPL<7qz&_Kq)KN~9e?BK!8w~DL*y^$%f!hk#NX4?xD&dj`SS}J|6I?rCQ+^6?ZF8Ml+c}4p;)$B!pZ|W<eUW6V=L**Y!uTki86!xWm!BOQ5K%|1Iu99|uwbx_Doe(M7+$@)TL);E4X-iT}`cW%Q1 zmaL;YU0Q1;4TB&Ev8deYfFd*ER@dqFW$2>g^G?l!u&(cf-Q^WtRpQIk2;dAjSBgog zuBFzB7wkZ8;A_hro#RkK37I$IT)n)7QZrP{@La)%km26>f46TsI$BsUM`SVq%aIZ( zYtYD1{e>Q`07Ijmas3eHY8#y3tV1EwUusXgmmKa_Y0y%p#+nmWDlN3G?D$io;)i8n zloobwDlH=CPqd&5?kb@Zx>{?3>(;Drd!F^+B09ItUlr14kxx7pN(x#>n63)h&aZ!1 zkPb+hopGy8^?YHRiuf;+_;j>Wnw6sm!x~nrWJEV&;Sx0qzv@K4pJ z=@H?!2l&1p{>Q=vxenwMm*oHJuKsv4UdT*QZ-;^nBZuDmWsH_aKkYl`#fK}z<63KT z;|Vx|VQlpc3tI-O=-I9XZ^G9ncRch5ZLO~WE9!s`^2kl=H*Mx$cC!OY%PM-}3OH7x zX8Z~pVWw)iKE{XXn>sQ2ncw!kP7cbriYv&V%O~vdM`f>av;;24wZWH_$eVyt{quIy z?RDTu`W?7rm7Fy>Of)c!_?=_m*(Ub60Q4SMe>d74#eaFFZefMl~`2}uF#3sFVt(0^;I*ANWSsDI@%>=*dy zEQ{}?Hmq%EIjoO?9k1_5&$*=ztj*%|36@ip*}>z(B}}+vk;l5G$h>|CU?cP-JJGNG zhyq=UsOj*c?z)`v9@}QNaI*FJt4h3)$>aAwF{ruRg7KSv{~=obU7a|u(*qBW;QlKu zeO@mV;9nU8YH0@{Fg0A7`AlEWx$nf`vKdC!+n|}fq9Cdt(G*Cl)#9NDa+8c`9(Bc2 zjwYY<+ji24=;>P^<+Da2e!Bp&Bcm z>aAn+Hv5v7Z$FyLLglieapfCP(g)@J-G-PhltFq#-19X6&FLuV7V4zI@o)sjp@DA7 z6XnoqkaqMPNSh|}kgisBXF<93N3#I?JukvDI5XH+z~)WeRIn+T$D0VHsif;|3v@0@ zixW3<^F_0eShMrDY?Eaze0k1(*b8ZuFUWTLg#WKsA!a$(yJnVu{*F4~QTBHc<>)RI zPzedirVSvC&!^_dO7cSD3=c(|l!$CIqw-z)DrA$h7}R@GerQf^_6^CTACjVL9mk~* z%yBf%j{STA@aPZQ?pSRMx+ojvhH>+FXxTPBE?nT=Vg|_{r$1SaRy22KZhkdBbKDIK zRG`KgNtoiB(GB%aVWb!joD_gYP5@@Na~H=L#0=)jrSXQUVMm4YE+t{RtI8M$hcs`q z0{-simEPC85Fr1sh{(s~J-tz#HNG63R*Z=J6}Y!}k{(gMd=fbHBId!4?>sv1jYyId zkz`$dMupK7x+jMyxaz-A%izAPh!8i;H6YpgBj64i9AzotUJk9uZ}{$xyUg288jEbx z8C7`Fa*O@x^l&z!>0#r#Nfs^ROCafNzN+bN$D)eZ9~L+Y(*50gq`DIkvB>iiQRbTb zGrRgvTjJsnxB!A)hu7u{p@1hSszdJsil5~>ovjs6e%5i0lt4++cq9ks9kaLxAJm?F9ZnDX-oZJUaDfvSLgh8PF? zaBqn;|E}*!n>xC>Bl$(FFM7ah751tqC??vWP#gp8L8zG8%6b$^e~sSpU^i#8MA8>fn0RUmSa6CnMdUIpRd)mcrc=XtoK3=W*^f0M|;HY8q zxGemvdvuwm`Hq)aZ;)pz{(|<=F?T``dM6ha%UDFU4#>m780l;%+GIh z#&z3?A(JRcNw~e#zcZ6R{v3lYvdJ{A4s|rlw|ZrjgXUjOKYH+?{V6A8QJR4#qw^=A%uqa&5f8;ut+Wi{Eit^GDCj^(=n%`7>yq z_l3ae>VM$$&41fT7QTP4i<;D*pQCpB4YNAgPL!UcUZm&lSdNfLN($WFDX87m_G!`o zSFFCrGJWAy(^^mpj*-(1m0b1>xl`og*+vCItT#Txv&jYMPe(FY-;2WVlpX=0AR|s$ zxlC$N9vLg%8TvJ$L9lk@peeq(B_JQLQ&HsiaxEb@1hi0>sQI8_4-I;{fqi=Vodyv) zm|E~f9F5nLmlRwcHHUNGFP_%Uk{(~#;EJTW<2%JpGZ9QVP49+eJ5fV$8q_8vsab2t zGcZjrV810&{5xbaEo^!(tLeq0-c>csKHz0pO?TjBDO6Zb`4_X>N8w>e5?>>76c|^y z{*d?^bC5;80+l(d2#mM7FLr0j&Z9i5;>@LQ` zYAu}C>dzT%2H16DL`m&g3qRz}K3X%>-z&1&;k8?2qyT+tjc)7@=I;U^0*6Z-u%>A%h*6~H0y(vcA z_3}3cua3)7*FoM9<8b{O`(nF-u=U@Exw}z`FA*?Vp=Nx;{kr!c%sv<@S38aB#eg~{ zqjxygu2~`PgU@W1o{c_b8b~CC{~0Jez25^`p8_|pH2zIHhRZZwekZL@|Hj%B-78iz z>kj~+CBeTB(RSEw@JKxy)O$MIJgsr!V1V7iT(m){H3FkN>Fp^>RrT zK`T*G6{UTv--gnav-h^94z7y9`OK%@8Jd5Dr#(?wa4z|{eg65lr%38xfb6%Jx&u*Y zD7gRdlo88q`wuq!zgAI!G{$pg#3^*{33(5a*?TjzugoOWXyJ_*afFE{`v}e-B_os? zDqup8X9|G8w_{^f-1MGxA5A`12>Rlm-1q1m@#jX$WnOX0(}MpM+{$vy z@l~GziCC}C#tgM%f@C9m%e7+}%#??)OP7zvfz%oEj?QTl>5eni7w3Ik)@cs5cIv^p z<5Z?Kp40%_-fd0Q3yZpV#>fbL*qjAroZ>n(t{5iMU4`AXHBjN8)0zV>p$FqRrbOxg z|H-m5w8Bf-htrKEI@vCnpStx{`lRSEDRLCZ0K)YABeF%5PLb|+Wzbc+0Ktzn1kPh} zk+^BF5s>g}^WcPVK54jE=SK|o9d%IBK2bE8i^=oKP*!~f;L(9|*Aik>h0*l3_g})& zfRw&+ci>kGB`MwA(`;Ji{W0|3V%DX={744JZeXE+upQY`11F0!3w%r9Ci}J& zLHm0&bqVpEw41({8&OFU*}tgMnlC-R?RP4ltmkpMx9;9%G-+H0yUm?g>3tO!IOQoc z9h`o~Mz`|SY7$W{20LsW+drh`eAYkBA;*Ge*(t6}e{$o1OldMBV_#)jfYSg)SWuMUmc^)M2B$hMJ+gp2BF^Tr1fFz0o@h&?`~* z-EAXZw?si>?OyIsp6@~#Gt0h3zh?3ZG!?X%11OE64CjSZc7 zFOTR$6>2uac4Zx(#Jr4mw_cfOR`$_(ho9o36g$gNZ!UvXZWQguB@q>IX3=V#A2$ZZ zU>$~L>QK?Ewg{pWnl6NC0XdS=KW6-xOCz47YAzE_T5nEx6zs(z-7n9fg0Wf{Llaftido)&%Hn zBh^_!z5xuWtS%h0uRma|xlZ~UhoA4x5{jgVEp{qmoA4II(@@99O_t<6v|8Ig5OALK zJzTeS{0@%t`eE*awE|IRkzpLkQG6;N?%xD6_72ae&ksg3B`ZhzjE|i3cc5UOsgGOQ z<@$k-ru9;O?l3$$_Ho=FWzOuw4C8x!3aCs?7p3d;O5le6Q$TY`zCqf$L$!i`ohl>l z|BceohGEm#e};xq(D}Ja(z%87rm=X}2ZRM*cvrb}SIkcI9@KDQ|L~;8^^T6(9V%o5 zjZ~)vT{4bK+T`d_m})V1Rz?9_Cn-W(LJzHb_vkK}&5!7@89cduyY8!d>#&ge{6G@yP+4G1CT&X`HsDW?%=3YvQ)TYPm>vZ3*Qi=Jac*?@F^Y@naXt=w&jMtG z8G{M{*_x3feR25ssT-IP4Sz^YsLPbje;;AL5~YX)3xc5_Vt8?6O_Cn@rtvk5t|VdX z7H_x?QXW_^NG&*B$87t(VqzDm-TU&J*^P~y-OGKXM24Vvg()&1`x`3uXsS}()Ol?d z20(=bPm-H1o%GSpr-&xjnxZoFU|gM?=%ko)v-;)W9~2qpMNY%}`)gp>MJ8*rT~kRL zo+7-u+*Ku8uHuKtG1V>gNkfnoibQ0-A7<(POsWx;ZrsE`IJi@LrnZUc&vMg z_3(Gw;pdLDZ{AYH$unBajC(pilaJaMflXOlH zSr2^OPWs2qSKFE+*Dx5>Rs2(l*D2$~)VP)WcfR>CPaF;2ObyXLM?zoD=cX?@rk^Bj zEE-DVh9}cKmpJlb1=}_bmx`t;vJ?e64_dY78%0MWq_=4nJ2AXaX4h9jWP~F?7m22N zZ@dwrNq>b-?cJxE5k$ly8*Sghei>T!pG*OZNZIg)mFr_?oV58G?o`OB@rZ|Lm}aj3 zYq+RT<#^~zDP)V{KU5~n$Ls4>Op3iV&4u|6b?a* zKke)9if#s`YfH+*<~FM>56)7)#grr?y|YFE2XuNN~N$$uLDOA zuPV|25>*XKTvhP5ay0$x&J#tg9xYeAYu1Qe(Ah!2-&sdazmk;5z0y5p9Yn3H0w~HpVF%ff5OIaIvJvq~ zvsY;`pX_+d*DPl}c|zuSPdmUg?+?(1$60Q-wEDTCzQ$eQ>cBF52IAwiK}M~y?YiiX z|FIMzeC}8CgA=%bOogJ#UQoTK|0qGRd0h$nne5Z6_;{UN9+kO>DBXyiqVXsZ%JsZx z!HWjz^|-;ImZ1to^z=K?crnGTUA>!)mQ))3P&(zi2ZsnXmUXpowkA{Xa+&q9VFhRu zvodNHn{@u`3a@i!a*jsEYPsRFptr}mV=#hPaSnawPk&E^dGsxw&)sUS2cXQc z=q|E6mS)KD*<~~ar+B=QSTi#`!V>c7!G=!=yqsD=7(~)~@x4Ln7G^Q?4Iu1?8b86~ zUBN$ufK4c`5u=|A=DrC@@q@&frmmD>tK4EmX`DI+<`lNY>SAjQ!8k>2L%{9CcoDf70V8?y3ZBnitNJ%(SS)LgYdNddGi zEOJ9nwr1CDfgeRZ$HPAm9iqh*l)Fw?n;??o~hh)aF6$y-DQ{X^u-57K4r~RLa zF0X`e^0j0vd(!{y)kM7l>{6@|hR zaAoq*7n49|Rmo(zm%z@Yo)W2ngufqIv_7o*jRKyGvDBH01*sM}kdW&=0`~Dm>9$%3 z)KNi6yl!@Ndk49(!rqWvspV1 z3HUy>PB_p-O0Hcg$K0xRAqnq+WKEte0rfN^-?d9uJW=ymyq=k(3Ob(vEVwIY9d9GD zc@14B&WkNQqik{x)86CMuXoCE&wFV4R%hB}ON<7_x$(+?heH~8dtBX9;YTYe0s~JZ zkE^-!95*jcrG000+UeKaOc|8klxX|{sf#2~$2bsko;Pa8$^LE50i5unk~L5tg%5Q4 zXBEW~xcEm-YR|q8wD^=8hr^4CZX!$(CAI~wrU_#mV`IyIOgPDfEy0haUSy| zecppC&K(L?ezMnqwPr7{nN)~u4QyqP0zRc+Zf`qv6^IS9>~r58`#>hzHYpXE713{? z^L#QHk(@6&qh|>RAge;c{X!TIC@lFlHNQJ(iF2N-h7Ps$eGpgWv?I_8KIujVDYCl( zv}#Bb;SIe>Fo->BabZy^(1_q$oR)-8A=W`Hr|7X)p|BTI3!j=yvJ33fZ}?cdRIZq( zTh9>e58OZ`m43<_L{`(w#>(SRTj7R3EEtoMq4MjEDBu#wM!$z*(ur)0eZC~b5O{(B zK@Igbx=W!dMa;bD4aQC{urlAd9z=P;n)Z1z99F{nqO-x_!gNZ+bWQ{Vo8^n|S{_+% z5#Um6{Hdid{eV8J)sjK#C?iO)vjI->&|-nu|KNbLhTMNgmeHUBdgPwfVCvJsDp&pLXSVPd4!PcO2!y)VuFl;3~Iq2`Tz24WQh& zl0*X(ehvQuN%ik4H|p9Qo+vL5T{4LHc4}lZTY4{g(Yx>EOEObrx)0cb7tgywMjVcs z(=m03T=0H+SVL6ZB=rx*uyHOp8;(UTNEIK5Hh$s{8sxO?2fY_bj*I?~ExT1Ooh*xU^0Ogvg`Nk2fe*$FBF9>xJktwl7K@`+E~r8Vsyim zp;hMaIS$xm*96AB(fk~x71aZgX}V_+G{<~VyU*OKU?QRVp%l@juT}Ni~$ zMC~H`sfHn;pB(c@LTfy^BB2rE^)bRN5u6mQW@d=K$OJNo%G>>Y|E?UOV1ZBJY%K(D z{2FUM%|nL>gY^&zh4(vZ?>=mQ^&Rg1F>Na?do}M)A(gNT#dEbz}S-v~_ zou;0s*NY-fiXvWt46=Xsk@J2=@_>co5mwLj`fDIHK3eji7*ik7dYOI@+K}AW{3_-^ zvwSd~g!j_|ttQe5rarNQkE5F|vEWK*XL}QrWr_S|n!MCBUxD;Y;{CTgM{c<-nrcc6 zqdAYW8L<8o6`9H?-zvbEgpJrcABs-n)XwD&DD>Atq6@pp;Z2YGX}~tFBWaa9Kv*h2 zXm{!=w6*jxHY|~JG+fpK@tn4%X1pSBv=s z3!%o><@SET>Np%{X>c5+VF}2Et3nBetmaYoyy4hd1%nvXl&S0XedgzP z(>=fTTS$*Lh1~s<1Y;sjO}c(u65{$9zBR|T6V>ma>qtY`-dh2S+W+qyd(? zT=W>e4%C#WtSHFPr0*Fe$!Iyaajvgo-U$`w)gRuZ^4Igc%(OSIxDQ1zyVB0pIhDT3-BUo&k(3)wJ~u8g+j--6 zZ7HTs-p_E&7qw^%hJ@}mYA0)yzn;(}db!sO3KbDOT~xr7*UyB|#%pt(SrMeWI$D7# z@S=rbie|Z(W=neS)k{ZM(~EhV1tJt!F1whSIvP>KOIt_59zObE?lFHhwtq=OR^I>) z2y!1)oJ${YKZMhszrc<-P8~x_3GgEXhth+Nl*DLVG+24f%}0ShdHoE73|IIF9QV__-^jS5^Uu}MCXC*fZ?J!u z4!o3*A9xY9iXKgP|361NE(`k&eSnu|TfrBZ=G?fxEy&b$k2CqMLL!iQ;_4mt@_88y zCn9cqMC}Ewd`tFU3%Oq9`Gc7ceqf90y!FqVnuHQ|E1Z1y-k-)n6OqmA!&@6azkR_T z&FttidCmTNS9!5a&=(N`&5W#WB%W@v7u+|Oou+5AP~8rd|9z_Q^H-o2#}zWg?h<4L P|BbY`f*4T5$p8NX1{G}@ literal 0 HcmV?d00001 diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx new file mode 100644 index 00000000..af412eb4 --- /dev/null +++ b/frontend/src/components/Pdf.tsx @@ -0,0 +1,80 @@ +import { Document, Font, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; +import React from "react"; + +import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; + +const styles = StyleSheet.create({ + section: { + display: "flex", + flexDirection: "column", + padding: 50, + border: "1px solid black" + }, + title: { + fontSize: 24, + textAlign: "center" + }, + pageNumber: { + position: "absolute", + fontSize: 12, + bottom: 30, + left: 0, + right: 0, + textAlign: "center", + color: "grey" + }, + mainHeader: { + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + alignItems: "center", + padding: 25 + }, + headerNistLogo: { + display: "flex", + justifyContent: "flex-end", + width: "80px", + height: "20px", + alignSelf: "flex-end" + }, + logo: { + display: "flex", + justifyContent: "center", + width: "400px", + height: "60px", + marginBottom: 10 + }, + date: { + display: "flex", + justifyContent: "flex-end", + fontSize: 14 + } +}); + +const Pdf = () => { + return ( + + + + +
+ + + Report Generated: {`${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`} + +
+ + `${pageNumber} / ${totalPages}`} + /> +
+
+ ); +}; + +export default Pdf; diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index 9c56bbdf..b8d5612b 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -1,5 +1,6 @@ import { mdiArrowLeft, mdiContentSave, mdiFileDownload, mdiLoading, mdiPlay, mdiTableArrowDown } from "@mdi/js"; import Icon from "@mdi/react"; +import { pdf } from "@react-pdf/renderer"; import AppBar from "components/AppBar"; import ButtonBar from "components/ButtonBar"; import HelpButtons from "components/HelpButtons"; @@ -12,6 +13,7 @@ import React from "react"; import { useNavigate } from "react-router-dom"; import { Subject } from "rxjs"; import { download } from "util/DownloadFile"; +import Pdf from "./Pdf"; const pdfClick$ = new Subject(); const saveClick$ = new Subject(); @@ -20,7 +22,18 @@ const csvClick$ = new Subject(); export default function ResultsAppBar() { const navigate = useNavigate(); - useSubscribe(pdfClick$, () => {}); //TODO Create and download PDF + useSubscribe(pdfClick$, () => { + const blob = pdf().toBlob(); + + blob.then((blob: Blob | MediaSource) => { + const url = window.URL.createObjectURL(blob); + const link = document.createElement("a"); + link.href = url; + link.download = "BLCC Report.pdf"; + link.click(); + }); + }); //TODO Create and download PDF + useSubscribe(csvClick$, () => {}); // TODO Create and download CSV useSubscribe(saveClick$, async () => download(await db.export(), "download.blcc")); //TODO: change download filename diff --git a/frontend/src/components/pdf-components/PdfDisclaimer.tsx b/frontend/src/components/pdf-components/PdfDisclaimer.tsx new file mode 100644 index 00000000..29923db9 --- /dev/null +++ b/frontend/src/components/pdf-components/PdfDisclaimer.tsx @@ -0,0 +1,20 @@ +import { Text, View } from "@react-pdf/renderer"; + +const PdfDisclaimer = () => { + return ( + + + This software was developed at the National Institute of Standards and Technology by employees of the + Federal Government in the course of their official duties. Pursuant to title 17 Section 105 of the + United States Code this software is not subject to copyright protection and is in the public domain. It + is an experimental system. NIST assumes no responsibility whatsoever for its use by other parties, and + makes no guarantees, expressed or implied, about its quality, reliability, or any other characteristic. + We would appreciate acknowledgement if the software is used. This software can be redistributed and/or + modified freely provided that any derivative works bear some notice that they are derived from it, and + any modified versions bear some notice that they have been modified. + + + ); +}; + +export default PdfDisclaimer; diff --git a/frontend/src/images/645px-nist_logo-svg_1.png b/frontend/src/images/645px-nist_logo-svg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9629140334e067215e108f1c9d26b1e3f47e680b GIT binary patch literal 6268 zcmX9@2|Uy9AKwf^HusUEOzz|;$21Y9%#|zU2suNT3M)rj5|Sggh%7|qK2!0HMeZ=S z*r;?2E7!`=|LgaE?e*IBdOgqc{yxv=`F!5*_h(DAu|A97k>G(qAPAfp)(!$;ivzzu z=i&t4XDqc3fghZn7H6@LfBUZ|Z=YpAAmW-htdRquVENO{hQ~f(-M>PDJ&76tiO#%g znKBmn}x|>WSRES+q12$+LWdV^WkLQFEjQ zR-;@aU-SM$HS`c<1(uz<^H+x^N^_*Cc@UmdoPT6N+O0FW3hV(s(NS$xyKjQDVUq_Z zxe0rA0eC) zB4~zQnn4gwYG`Xel&d`JXxqY#*T4(cEPa^Y8s+uadf5G%1Sf^CB@xwAcHYWu%-o=v zQXUV%h|9-2%|-~ktxB^nv;>-c@+z_VHFwR>hs7A0EKQY$f%VH&xM5%+?4tZGm*gtY zCNM&>GR3VdkQf53_Nn2ZPwPnbFoS5Xu}#W}H|4VYkI>Fja{44mx|fZVDm<*j;^5E; zq5RpRd1jy$rATn93XZfKl&#=RMXm7c@uJ08^|R=7>R~I9xO!3_NgX;A@J;*gcPAhx zaWu6)quwmw8OrnU`T&qe`F1)P%}{o8HOtpsb~`em$TVHX@nj4nigVIH zFG)_DTx3c|Qrg~aef&2{iEZGvopdwVu}p6bw5NGd_7)$5n08P9o)=bwRKdcRN7owP zRZ)g+5W@L!%3lSJ!b7|?;(yC2k9n)#uqT~^7Ri?-Q+*H6q89ub=r5@V6JVQI4LfHw zD2s!g$TNt`hZMoSZYf*jOPgF(F_e;Yx6q!sf8|*QiQX_K7r#|Zk`EgvBy}7FU6g!nWnW@UZ*Oa4EcTI2Z0zezHYZ`nr;rNL;=^yYI0UT|;-|-!I%_&`SyqCEMK7*C>D1Xa&CajuJ$I-zECXf z|8Z0Drdj%}ns8gzy-eW^j3D|H<}MXwf-O3avr8RUJH;FD~)bOLa}}@*f~G$NZIBzucgSOrc8dFLUb~f(Oj3^5(JlYxjk~M~Sr|^WPJkA~4@PtDJ@HdADSCVfxiL=mnHN4rG za?Zz)S&k?b5G7&cq>`(t>*&e{q%7{~J>o#U$pbnkEo|rC9XvG_>t2@xe{@B|0IK={ zi4q}~)P^61YT;?fN_7L1FftPMkp}L&d0w^^v~=kfs6TaO^7Nc0QO<<9=L|au|wu z%*5jDW~s@X$)pPzU{z*bmobxQm}2{-7>2B_ks59XSoCO-c(^_9HzjcfZdLfUiXtfh&ld^cc$P`^b>xa3_U=aFh|Djo! z(p6|SxAN2M(v<-{ih)T*(#jB0BbyXaO&tmQDsbC;-_WPA<- zl1@!RP2VW8!$uOH8BEm@wZ5!;V|+YSFe1gmz=&EmFDf{TFtIjQ(( zYEFgH9=zu`!~4Me^ZFiO%N6GZCVFW_0v zQVw-achQ$2u6GuhR7A5k{M$P^rN{yoP+27w#~(3+4Fbo`qt)4l*cDnn*b1A+GbTzqX;u{N51h?a9CwG`kxyY~t2rsW@{$}|P$#T~3VUpN zIV4z?r&DCVXmmom@qHjI9p<(7TY`**oS-FB_Bt(U&<=u09do-FJo`p+=SsC*CT)2?TZ4VpOTxFq;^S9seKO-P4@geqpQ zmy>Fgq}s2OGU`mUXd>W2!_e9oB2{se*v$W)ZqVaIg^I=rUFTsw1d9dD$=YV{kH|%n z{yO6-W(s*-kp(b)HQoCGzP9MlZu_OZ(g?x##SYKMfcQESGXwzD`kAS=QE{ChRTG5WdEC|C)uI~D$*0Lgt6xbr;Hrn zNgaEvW5ctpO<>vZi%E6UE3hv}UKQ1GnGIz*f}<5pACTnVPQsf*b_;wv=tluot};kW%H=t(M(JwTg^D$kD-pCPuzG*HrU*q+5o-x1 zjw3Bj!a9BeOppl?xqLeZH1q9MdVT@PpejNyLJHEPjla|?T^;XEd`M`#d8|eQb63ln z4;F7Te_6x-lBnSFNJ$|GuqsC@st50moz?PyJTI3Avm(j!FB^=&#f?&v@skq{83!roH+oY> zC7~xd2nW>UUj$3Sp83YxY&!`f=hPEAYMO-7P9(bFK^pKkz^#j1%96$gd^DmcIr_g< z<+(m3M={yrgMpnQz{g}%WCoc*&b#Esu)aZnCzGJ9NJO=s_Z_c+{Sjlb- zsSyO7ernw9I}&tFb(pJF2lR-b-%y~B0-FGw`KaQg)MM$>%O|kW@lxhZJOq(YNU4H7 z@izNckbxEGZZtU$9cCzvK8qeH>4$^)S{xqwrzP4^uri>k4>{szpLnxgy&oxSHF64Y zAxS5^rfq%hdZ^&-wNQWNuc2t%as#N%V5}}Z0BC1bVV?2mo<%P<`GF^h@9X~3BF;McW9EYaAB#6kOFd18FvHkeEs;ntU|DU$6v7t)1QWqZ8 zCl4wv*Vn_!rOlOiHm-D1W_zo>;r_sP0JU#Y`Kmaq_pQ?ivb!858u!JSdq=NE4r5ki zCBJfKun$zgXeNsGj=}H6v@V7ub&OO(kdT;1|500IK;dI)Y`VgCUEt;vs*5S-k-^~a z^|QU$<^%MVUzeH_VIdst{_GtCrCw(U`6Nm-F6^TDgU)TM@HB&bobbIFFyl*bES+UT zyyr7MCt=6W3LdvTajz8W6JgpezThBtYt9w>QD4!xI;EHWf;5dEk_UC+EWxmWm~85? zAordrSqu?m$?+vS@+GUFMdl{kV0T+qdhh!D6ts(0XbfTo2rzX)_0~9yjur2d!^z*g z8cx)lEs{R{=iZgu|KzOt&+gOLp93D3!PZIQS!F%!!8@`IukHNaiQRWN;MxDFYZ5er z)TfoiAkf%?!)k{w1d9_+;X}jII1A47i)58F&BSi5#y2TB2$&WtS}XdAfNAn+pSC&B zk_7+##pS1<9>^(9!r|J$2fXV zH)yqI!=|Wc^`U{GdwUS*uL6KIVuUy7hL)$GRHSI!r|TFzWMla-Xl9Z6Rq_AAk9aKk zE?PRb&lfed&kyw=Wi~*5^Se63mrIP`(e5DEXuWpwL?%m23&aZJG=;eyY9hBxlzZM|!Jv?H-eCob>Ktw*~T6;;nS zDRhaqK6sgKg>v@UO{m+{14Z{qc#RUHX|24Td%X<^18jlCMEl+$hygY#QoVR!c=hj2 zRNwYalojD1GkU>f;}^()Zb3ZyVgwBS1k-7{U9h$cL;BYX7D{fm^y%+|kV5u?0x(I# z*$gtIJ?~^g`PTpFt$tfu)Bf_E692s99m{vWJ|lQInAT*p14gU%`?jG3!5a7FwF-tf z-AT52nj$Y@bktqQlpaKxG{HHKj)Cz5Nk*cP2VHV4!f9#J0ipCqG_)UF&cPWI8n zi-Tq?@Tm(aP%ogFrAi^XmD@yRp7Wx_VqU8>?z{JL#lN< zbZ|eg669A_%g_4`0=OxZicY`B%0i{Aubah>vU6-(e(^S#S5Ys2p*dI%;R)uKOnJ)= z-@VSPs-~K@D`cmXhSe!i32!;JO10^k(6;eC{et@LTSH?0lSM0Id)6B>9e9pjZ} ztFQ}5miD|MZ6YJ{=Sdm^9M(-TwxXDO80^!M{2q#~ox>k*EjJdDi&kwpiAk6qAlnEv zvY{c}bgOX$<@*Zn>if5Gc4ATKx!H0-X{N;rUI%N$YP2wB#g4ELg=&p$wH3asfGsZ? zi@~oF3yudW*Qlp-<|ovD__w*I3%u<)D5t$>MB}=8>e(SD;pc~g+1$>kD!bxz zFl~&5lFeFCpm~tPa<$Y%;{rOAdBcs*DrdvuVSGMtr_^ds`@jnCc1rB+N9;+)+F#_Z zM%0ywU^`b`>SG_!PqEr?@~sD4?)s;z@{DC(rZs-n_6^QBPeB!gfF(*=&37m)f~vCz z_aMo2;8}60{O><%PZj`x9}ua%O9+dyW5F+Jxf0DgHPZ@7-`5Go_ANREyRxd9w}AOeRg_e z)j1WgH%a4O-C6^bB!#e{NkL+-`=dL+4C)`}Cf!&cK!bMQ4~Z z5gtgq${fYE)78MSES@Apx|C>tqx5Fll}-KlT4T9HW8now|FR)!m|JQ~KYL;T5ZMjys3(oCsr;mAp zze=0^td(GOeDIR=^#607viH`AkSlJrKkwM&nKF61W#WT-^Y_ufmuyvvNNZKjHj@U@N6IHe)RoV_ zgcnZz+}c)X{G?8jOgI#qBQ%jmr(#ELT@-$<6~X40sxNat`I$hZK!n7f4M)I>G(fZ> z9R%KDw@Zh+he$5tgdJg45pBM literal 0 HcmV?d00001 From 72574aa777ec2a11a0b39a5285b55774d92e7404 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 29 Oct 2024 11:45:17 -0400 Subject: [PATCH 03/24] add pdf components --- frontend/src/components/Pdf.tsx | 15 +- .../pdf-components/Alternatives.tsx | 202 ++++++++++++++++++ .../pdf-components/GeneralInformation.tsx | 165 ++++++++++++++ 3 files changed, 379 insertions(+), 3 deletions(-) create mode 100644 frontend/src/components/pdf-components/Alternatives.tsx create mode 100644 frontend/src/components/pdf-components/GeneralInformation.tsx diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index af412eb4..addafac1 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -1,6 +1,8 @@ import { Document, Font, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; import React from "react"; +import Alternatives from "./pdf-components/Alternatives"; +import GeneralInformation from "./pdf-components/GeneralInformation"; import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; const styles = StyleSheet.create({ @@ -56,23 +58,30 @@ const Pdf = () => { -
- + */} Report Generated: {`${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`}
- + + `${pageNumber} / ${totalPages}`} />
+ + + + + +
); }; diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx new file mode 100644 index 00000000..807eb81f --- /dev/null +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -0,0 +1,202 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import React from "react"; + +const styles = StyleSheet.create({ + section: { + display: "flex", + flexDirection: "column", + padding: 25 + }, + title: { + fontSize: 18, + textAlign: "center", + marginBottom: 20 + }, + key: { + display: "flex", + flexDirection: "row", + marginBottom: 10 + }, + desc: { + maxWidth: "100vw", + marginBottom: 10 + }, + text: { + fontSize: 14, + color: "#979797" + }, + value: { + fontSize: 14 + } +}); + +const Alternatives = () => { + return ( + + Alternatives + + Name:  + {} + + + Baseline Alternative:  + {} + +
+ {/* {project?.projectDesc?.length !== 0 ? ( */} + + Description:  + {} +
+
+ {/* ) : null} */} + + Alternative Costs  + {} year(s) + +
+ + Energy Costs:  + {} + + {/* Location: */} + + Country:  + {} + +
+ + State:  + {} + +
+ + City:  + {} + +
+ + Zip:  + {} + +
+
+
+
+ + Water Costs:  + {} + + {/* Location: */} + + Country:  + {} + +
+ + State:  + {} + +
+ + City:  + {} + +
+ + Zip:  + {} + +
+
+
+
+ + Capital Costs:  + {} + + {/* Location: */} + + Country:  + {} + +
+ + State:  + {} + +
+ + City:  + {} + +
+ + Zip:  + {} + +
+
+
+
+ + <> + + Contract Costs:  + Constant + + + Country:  + {} + +
+ + State:  + {} + +
+ + City:  + {} + +
+ + Zip:  + {} + +
+
+
+ + Other Costs:  + {} + + + Country:  + {} + +
+ + State:  + {} + +
+ + City:  + {} + +
+ + Zip:  + {} + +
+
+
+
+ +
+ ); +}; + +export default Alternatives; diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx new file mode 100644 index 00000000..02db7b95 --- /dev/null +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -0,0 +1,165 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { AnalysisType, DollarMethod, USLocation } from "blcc-format/Format"; +import { useProject } from "model/Model"; +import React from "react"; + +const styles = StyleSheet.create({ + section: { + display: "flex", + flexDirection: "column", + padding: 25 + }, + title: { + fontSize: 18, + textAlign: "center", + marginBottom: 20 + }, + key: { + display: "flex", + flexDirection: "row", + marginBottom: 10 + }, + desc: { + maxWidth: "100vw", + marginBottom: 10 + }, + text: { + fontSize: 14, + color: "#979797" + }, + value: { + fontSize: 14 + } +}); + +const GeneralInformation = () => { + const project = useProject(); + return ( + + General Information + + Project Name:  + {project?.name} + + + Analyst:  + {project?.analyst} + + + Analysis Type:  + {project?.analysisType} + +
+ {project?.analysisType === AnalysisType.OMB_NON_ENERGY ? ( + + Analysis Purpose:  + {project?.purpose} +
+
+ ) : null} +
+ {project?.description?.length !== 0 ? ( + + Project Description:  + {project?.description} +
+
+ ) : null} + + Study Period:  + {project?.studyPeriod} year(s) + +
+ + Construction Period:  + {project?.constructionPeriod} + +
+ + Data Release Year:  + {project?.name} + +
+ + EIA Projection Scenario:  + {project?.name} + +
+ Discounting: + <> + + Dollar Value:  + {project?.dollarMethod} + + + Discounting Convention:  + {project?.discountingMethod} + + + {project?.dollarMethod === DollarMethod.CONSTANT ? ( + <> + + Real Discount Rate:  + {project?.realDiscountRate}% + + + ) : ( + <> + + Inflation Rate:  + {project?.inflationRate}% + +
+ + Nominal Discount Rate:  + {project?.nominalDiscountRate}% + +
+ + )} + + {/* Location: */} + + Country:  + {project?.location.country} + +
+ + State:  + {(project?.location as USLocation).state} + +
+ + City:  + {project?.location.city} + +
+ + Zip:  + {(project?.location as USLocation).zipcode} + +
+
+ + {/* Greenhouse Gas (GHG) Emissions and Cost Assumptions: */} + + Data Source:  + {project?.ghg.dataSource} + +
+ + Emissions Rate Type:  + {project?.ghg.emissionsRateType} + +
+ + Social Cost of GHG Scenario:  + {project?.ghg.socialCostOfGhgScenario} + +
+
+
+ ); +}; + +export default GeneralInformation; From babd10dbeb09a87e7818b8e6f82c9ebfae41b5d9 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 31 Oct 2024 12:36:53 -0400 Subject: [PATCH 04/24] pdf w gen-info --- frontend/src/components/Pdf.tsx | 27 ++- frontend/src/components/ResultsAppBar.tsx | 6 +- .../pdf-components/GeneralInformation.tsx | 202 ++++++++++-------- 3 files changed, 139 insertions(+), 96 deletions(-) diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index addafac1..ac2fcbd7 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -1,6 +1,7 @@ import { Document, Font, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; import React from "react"; +import { Project } from "blcc-format/Format"; import Alternatives from "./pdf-components/Alternatives"; import GeneralInformation from "./pdf-components/GeneralInformation"; import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; @@ -30,7 +31,7 @@ const styles = StyleSheet.create({ flexDirection: "column", justifyContent: "space-between", alignItems: "center", - padding: 25 + padding: "12.5 25" }, headerNistLogo: { display: "flex", @@ -39,11 +40,17 @@ const styles = StyleSheet.create({ height: "20px", alignSelf: "flex-end" }, + blccHeader: { + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + alignItems: "center" + }, logo: { display: "flex", justifyContent: "center", - width: "400px", - height: "60px", + width: "300px", + height: "50px", marginBottom: 10 }, date: { @@ -53,23 +60,25 @@ const styles = StyleSheet.create({ } }); -const Pdf = () => { +const Pdf = (props: { project: Project }) => { + console.log(props.project); return ( - {/* + +
- */} + Report Generated: {`${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`}
- - + (); export default function ResultsAppBar() { const navigate = useNavigate(); + const project = useProject(); useSubscribe(pdfClick$, () => { - const blob = pdf().toBlob(); + const blob = pdf().toBlob(); blob.then((blob: Blob | MediaSource) => { const url = window.URL.createObjectURL(blob); diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 02db7b95..74916fb5 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -1,6 +1,5 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; -import { AnalysisType, DollarMethod, USLocation } from "blcc-format/Format"; -import { useProject } from "model/Model"; +import { AnalysisType, DollarMethod, Project, USLocation } from "blcc-format/Format"; import React from "react"; const styles = StyleSheet.create({ @@ -14,6 +13,10 @@ const styles = StyleSheet.create({ textAlign: "center", marginBottom: 20 }, + heading: { + fontSize: 16, + color: "rgba(0, 0, 0, 0.88)" + }, key: { display: "flex", flexDirection: "row", @@ -28,12 +31,29 @@ const styles = StyleSheet.create({ color: "#979797" }, value: { - fontSize: 14 + fontSize: 14, + marginBottom: "5" + }, + divider: { + border: "1px solid black", + margin: "2px 0 5px 0" + }, + container: { + display: "flex" + }, + row: { + flexDirection: "row", + justifyContent: "space-between", + marginBottom: 10 // space between rows + }, + item: { + flex: 1, + margin: 5 } }); -const GeneralInformation = () => { - const project = useProject(); +const GeneralInformation = (props: { project: Project }) => { + const project = props.project; return ( General Information @@ -51,7 +71,7 @@ const GeneralInformation = () => {
{project?.analysisType === AnalysisType.OMB_NON_ENERGY ? ( - + Analysis Purpose:  {project?.purpose}
@@ -65,98 +85,110 @@ const GeneralInformation = () => {
) : null} - - Study Period:  - {project?.studyPeriod} year(s) - -
- - Construction Period:  - {project?.constructionPeriod} - -
- - Data Release Year:  - {project?.name} - -
- - EIA Projection Scenario:  - {project?.name} - -
- Discounting: - <> + - Dollar Value:  - {project?.dollarMethod} - - - Discounting Convention:  - {project?.discountingMethod} - - - {project?.dollarMethod === DollarMethod.CONSTANT ? ( - <> - - Real Discount Rate:  - {project?.realDiscountRate}% + + Study Period:  + {project?.studyPeriod} year(s) - - ) : ( - <> - - Inflation Rate:  - {project?.inflationRate}% + + Data Release Year:  + {project?.releaseYear} -
- - Nominal Discount Rate:  - {project?.nominalDiscountRate}% + + + + Data Release Year:  + {project?.releaseYear} + + + EIA Projection Scenario:  + {project?.case} -
- - )} - - {/* Location: */} - - Country:  - {project?.location.country} -
+
+
+ Discounting: +


+ - State:  - {(project?.location as USLocation).state} + + Dollar Value:  + {project?.dollarMethod} + + + Discounting Convention:  + {project?.discountingMethod} + -
+ {project?.dollarMethod === DollarMethod.CONSTANT ? ( + + + Real Discount Rate:  + {project?.realDiscountRate}% + + + ) : ( + + + City:  + {project?.location?.city} + + + Zip:  + {(project?.location as USLocation)?.zipcode} + + + )} +
+ + Location: +
+ - City:  - {project?.location.city} + + Country:  + {project?.location?.country} + + + State:  + {(project?.location as USLocation)?.state} + -
- - Zip:  - {(project?.location as USLocation).zipcode} + + + City:  + {project?.location?.city} + + + Zip:  + {(project?.location as USLocation)?.zipcode} + -
+
+ - {/* Greenhouse Gas (GHG) Emissions and Cost Assumptions: */} - - Data Source:  - {project?.ghg.dataSource} - -
- - Emissions Rate Type:  - {project?.ghg.emissionsRateType} - -
- - Social Cost of GHG Scenario:  - {project?.ghg.socialCostOfGhgScenario} + Greenhouse Gas (GHG) Emissions and Cost Assumptions: +
+ + + + Data Source:  + {project?.ghg?.dataSource} + + + Emissions Rate Type:  + {project?.ghg?.emissionsRateType} + + + + + Social Cost of GHG Scenario:  + {project?.ghg?.socialCostOfGhgScenario} + + -
); From c2891d1f39e9eb17d365388e5517bb5057c0b7ff Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 31 Oct 2024 20:13:46 -0400 Subject: [PATCH 05/24] add alternative summary + modularize code --- frontend/src/components/Pdf.tsx | 86 ++------ frontend/src/components/ResultsAppBar.tsx | 7 +- .../pdf-components/Alternatives.tsx | 208 ++---------------- .../pdf-components/GeneralInformation.tsx | 54 +---- .../components/pdf-components/NISTHeader.tsx | 12 + .../components/pdf-components/PageNumber.tsx | 14 ++ .../components/pdf-components/pdfStyles.ts | 92 ++++++++ 7 files changed, 162 insertions(+), 311 deletions(-) create mode 100644 frontend/src/components/pdf-components/NISTHeader.tsx create mode 100644 frontend/src/components/pdf-components/PageNumber.tsx create mode 100644 frontend/src/components/pdf-components/pdfStyles.ts diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index ac2fcbd7..d28d5d99 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -1,95 +1,37 @@ -import { Document, Font, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; -import React from "react"; +import { Document, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; -import { Project } from "blcc-format/Format"; +import { Alternative, Project } from "blcc-format/Format"; import Alternatives from "./pdf-components/Alternatives"; import GeneralInformation from "./pdf-components/GeneralInformation"; +import NISTHeader from "./pdf-components/NISTHeader"; +import PageNumber from "./pdf-components/PageNumber"; import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; +import { styles } from "./pdf-components/pdfStyles"; -const styles = StyleSheet.create({ - section: { - display: "flex", - flexDirection: "column", - padding: 50, - border: "1px solid black" - }, - title: { - fontSize: 24, - textAlign: "center" - }, - pageNumber: { - position: "absolute", - fontSize: 12, - bottom: 30, - left: 0, - right: 0, - textAlign: "center", - color: "grey" - }, - mainHeader: { - display: "flex", - flexDirection: "column", - justifyContent: "space-between", - alignItems: "center", - padding: "12.5 25" - }, - headerNistLogo: { - display: "flex", - justifyContent: "flex-end", - width: "80px", - height: "20px", - alignSelf: "flex-end" - }, - blccHeader: { - display: "flex", - flexDirection: "column", - justifyContent: "space-between", - alignItems: "center" - }, - logo: { - display: "flex", - justifyContent: "center", - width: "300px", - height: "50px", - marginBottom: 10 - }, - date: { - display: "flex", - justifyContent: "flex-end", - fontSize: 14 - } -}); - -const Pdf = (props: { project: Project }) => { - console.log(props.project); +const Pdf = (props: { project: Project; alternatives: Alternative[] }) => { + console.log(props.project, props.alternatives); return ( - - - + -
Report Generated: {`${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`}
- `${pageNumber} / ${totalPages}`} - /> +
- + + + + +
); diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index 259bbb9b..e4fc7fdd 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -1,13 +1,13 @@ import { mdiArrowLeft, mdiContentSave, mdiFileDownload, mdiLoading, mdiPlay, mdiTableArrowDown } from "@mdi/js"; import Icon from "@mdi/react"; import { pdf } from "@react-pdf/renderer"; -import { Project } from "blcc-format/Format"; +import { Alternative, Project } from "blcc-format/Format"; import AppBar from "components/AppBar"; import ButtonBar from "components/ButtonBar"; import HelpButtons from "components/HelpButtons"; import { Button, ButtonType } from "components/input/Button"; import { useSubscribe } from "hooks/UseSubscribe"; -import { Model, useProject } from "model/Model"; +import { Model, useAlternatives, useProject } from "model/Model"; import { ResultModel } from "model/ResultModel"; import { db } from "model/db"; import React from "react"; @@ -23,9 +23,10 @@ const csvClick$ = new Subject(); export default function ResultsAppBar() { const navigate = useNavigate(); const project = useProject(); + const alternatives = useAlternatives(); useSubscribe(pdfClick$, () => { - const blob = pdf().toBlob(); + const blob = pdf().toBlob(); blob.then((blob: Blob | MediaSource) => { const url = window.URL.createObjectURL(blob); diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx index 807eb81f..485fec3f 100644 --- a/frontend/src/components/pdf-components/Alternatives.tsx +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -1,200 +1,40 @@ -import { StyleSheet, Text, View } from "@react-pdf/renderer"; -import React from "react"; +import { Text, View } from "@react-pdf/renderer"; +import { Alternative } from "blcc-format/Format"; +import { styles } from "./pdfStyles"; -const styles = StyleSheet.create({ - section: { - display: "flex", - flexDirection: "column", - padding: 25 - }, - title: { - fontSize: 18, - textAlign: "center", - marginBottom: 20 - }, - key: { - display: "flex", - flexDirection: "row", - marginBottom: 10 - }, - desc: { - maxWidth: "100vw", - marginBottom: 10 - }, - text: { - fontSize: 14, - color: "#979797" - }, - value: { - fontSize: 14 - } -}); - -const Alternatives = () => { +const Alternatives = (props: { alternatives: Alternative[] }) => { + const alts = props.alternatives; + console.log(alts); return ( Alternatives - - Name:  - {} - - - Baseline Alternative:  - {} - -
- {/* {project?.projectDesc?.length !== 0 ? ( */} - - Description:  - {} -
-
- {/* ) : null} */} - - Alternative Costs  - {} year(s) - -
- - Energy Costs:  - {} - - {/* Location: */} - - Country:  - {} - -
- - State:  - {} - -
- - City:  - {} - -
- - Zip:  - {} - -
-
-
-
- - Water Costs:  - {} - - {/* Location: */} - - Country:  - {} - -
- - State:  - {} - -
- - City:  - {} - -
- - Zip:  - {} - -
-
-
-
- - Capital Costs:  - {} - - {/* Location: */} - - Country:  - {} - -
- - State:  - {} - -
- - City:  - {} - -
- - Zip:  - {} - -
-
-
-
- - <> - - Contract Costs:  - Constant - - - Country:  - {} - -
- - State:  - {} - -
- - City:  - {} - -
- - Zip:  - {} - -
-
-
- - Other Costs:  - {} - + {alts.map((alt: Alternative) => { + return ( + - Country:  - {} + Name:  + {alt.name} +
-
- State:  - {} + Description:  + {alt.description} +
-
- City:  - {} + Baseline:  + {alt.baseline === false ? "No" : "Yes"} +
-
- Zip:  - {} + Total Costs:  + {alt.costs.length} +
-
+
-
-
- + ); + })}
); }; diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 74916fb5..82979341 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -1,56 +1,6 @@ -import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { Text, View } from "@react-pdf/renderer"; import { AnalysisType, DollarMethod, Project, USLocation } from "blcc-format/Format"; -import React from "react"; - -const styles = StyleSheet.create({ - section: { - display: "flex", - flexDirection: "column", - padding: 25 - }, - title: { - fontSize: 18, - textAlign: "center", - marginBottom: 20 - }, - heading: { - fontSize: 16, - color: "rgba(0, 0, 0, 0.88)" - }, - key: { - display: "flex", - flexDirection: "row", - marginBottom: 10 - }, - desc: { - maxWidth: "100vw", - marginBottom: 10 - }, - text: { - fontSize: 14, - color: "#979797" - }, - value: { - fontSize: 14, - marginBottom: "5" - }, - divider: { - border: "1px solid black", - margin: "2px 0 5px 0" - }, - container: { - display: "flex" - }, - row: { - flexDirection: "row", - justifyContent: "space-between", - marginBottom: 10 // space between rows - }, - item: { - flex: 1, - margin: 5 - } -}); +import { styles } from "./pdfStyles"; const GeneralInformation = (props: { project: Project }) => { const project = props.project; diff --git a/frontend/src/components/pdf-components/NISTHeader.tsx b/frontend/src/components/pdf-components/NISTHeader.tsx new file mode 100644 index 00000000..44af49ca --- /dev/null +++ b/frontend/src/components/pdf-components/NISTHeader.tsx @@ -0,0 +1,12 @@ +import { Image, StyleSheet, View } from "@react-pdf/renderer"; +import { styles } from "./pdfStyles"; + +const NISTHeader = () => { + return ( + + + + ); +}; + +export default NISTHeader; diff --git a/frontend/src/components/pdf-components/PageNumber.tsx b/frontend/src/components/pdf-components/PageNumber.tsx new file mode 100644 index 00000000..d8efc15b --- /dev/null +++ b/frontend/src/components/pdf-components/PageNumber.tsx @@ -0,0 +1,14 @@ +import { Text } from "@react-pdf/renderer"; +import { styles } from "./pdfStyles"; + +const PageNumber = () => { + return ( + `${pageNumber} / ${totalPages}`} + /> + ); +}; + +export default PageNumber; diff --git a/frontend/src/components/pdf-components/pdfStyles.ts b/frontend/src/components/pdf-components/pdfStyles.ts new file mode 100644 index 00000000..3a47de4d --- /dev/null +++ b/frontend/src/components/pdf-components/pdfStyles.ts @@ -0,0 +1,92 @@ +import { StyleSheet } from "@react-pdf/renderer"; + +export const styles = StyleSheet.create({ + section: { + display: "flex", + flexDirection: "column", + padding: 25 + }, + mainHeader: { + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + alignItems: "center", + padding: "12.5 25 5 25" + }, + headerNistLogo: { + display: "flex", + justifyContent: "flex-end", + width: "80px", + height: "20px", + alignSelf: "flex-end" + }, + pageNumber: { + position: "absolute", + fontSize: 12, + bottom: 30, + left: 0, + right: 0, + textAlign: "center", + color: "grey" + }, + blccHeader: { + display: "flex", + flexDirection: "column", + justifyContent: "space-between", + alignItems: "center" + }, + logo: { + display: "flex", + justifyContent: "center", + width: "300px", + height: "50px", + marginBottom: 10 + }, + title: { + fontSize: 18, + textAlign: "center", + marginBottom: 20 + }, + heading: { + fontSize: 16, + color: "rgba(0, 0, 0, 0.88)" + }, + key: { + display: "flex", + flexDirection: "row", + marginBottom: 10 + }, + desc: { + maxWidth: "100vw", + marginBottom: 10 + }, + text: { + fontSize: 14, + color: "#979797" + }, + value: { + fontSize: 14, + marginBottom: "5" + }, + divider: { + border: "1px solid black", + margin: "2px 0 5px 0" + }, + container: { + display: "flex" + }, + row: { + flexDirection: "row", + justifyContent: "space-between", + marginBottom: 10 // space between rows + }, + item: { + flex: 1, + margin: 5 + }, + date: { + display: "flex", + justifyContent: "flex-end", + fontSize: 14 + } +}); From f8325781249ac65e5c95329c42c3f6c99e57ae64 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Fri, 22 Nov 2024 11:00:55 -0500 Subject: [PATCH 06/24] separate all cost inputs for pdf --- frontend/src/components/Pdf.tsx | 15 ++- frontend/src/components/ResultsAppBar.tsx | 12 +- .../pdf-components/Alternatives.tsx | 62 +++++++-- .../pdf-components/CapitalCostInput.tsx | 107 +++++++++++++++ .../pdf-components/ContractCostInput.tsx | 85 ++++++++++++ .../pdf-components/CostComponents.tsx | 114 ++++++++++++++++ .../pdf-components/EnergyCostInput.tsx | 114 ++++++++++++++++ .../pdf-components/GeneralInformation.tsx | 14 +- .../components/pdf-components/InputTable.tsx | 50 +++++++ .../pdf-components/InputTableRows.tsx | 37 ++++++ .../pdf-components/OtherCostInput.tsx | 122 ++++++++++++++++++ .../pdf-components/WaterCostInput.tsx | 77 +++++++++++ .../components/pdf-components/pdfStyles.ts | 42 ++++-- 13 files changed, 819 insertions(+), 32 deletions(-) create mode 100644 frontend/src/components/pdf-components/CapitalCostInput.tsx create mode 100644 frontend/src/components/pdf-components/ContractCostInput.tsx create mode 100644 frontend/src/components/pdf-components/CostComponents.tsx create mode 100644 frontend/src/components/pdf-components/EnergyCostInput.tsx create mode 100644 frontend/src/components/pdf-components/InputTable.tsx create mode 100644 frontend/src/components/pdf-components/InputTableRows.tsx create mode 100644 frontend/src/components/pdf-components/OtherCostInput.tsx create mode 100644 frontend/src/components/pdf-components/WaterCostInput.tsx diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index d28d5d99..0e3a131b 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -1,6 +1,6 @@ -import { Document, Image, Page, StyleSheet, Text, View } from "@react-pdf/renderer"; +import { Document, Image, Page, Text, View } from "@react-pdf/renderer"; +import { Alternative, Cost, Project } from "blcc-format/Format"; -import { Alternative, Project } from "blcc-format/Format"; import Alternatives from "./pdf-components/Alternatives"; import GeneralInformation from "./pdf-components/GeneralInformation"; import NISTHeader from "./pdf-components/NISTHeader"; @@ -8,11 +8,10 @@ import PageNumber from "./pdf-components/PageNumber"; import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; import { styles } from "./pdf-components/pdfStyles"; -const Pdf = (props: { project: Project; alternatives: Alternative[] }) => { - console.log(props.project, props.alternatives); +const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost[] }) => { return ( - + @@ -25,7 +24,11 @@ const Pdf = (props: { project: Project; alternatives: Alternative[] }) => { - + diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index e4fc7fdd..9ebeda22 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -1,13 +1,13 @@ import { mdiArrowLeft, mdiContentSave, mdiFileDownload, mdiLoading, mdiPlay, mdiTableArrowDown } from "@mdi/js"; import Icon from "@mdi/react"; import { pdf } from "@react-pdf/renderer"; -import { Alternative, Project } from "blcc-format/Format"; +import { Alternative, Cost, Project } from "blcc-format/Format"; import AppBar from "components/AppBar"; import ButtonBar from "components/ButtonBar"; import HelpButtons from "components/HelpButtons"; import { Button, ButtonType } from "components/input/Button"; import { useSubscribe } from "hooks/UseSubscribe"; -import { Model, useAlternatives, useProject } from "model/Model"; +import { costs$, Model, useAlternatives, useProject } from "model/Model"; import { ResultModel } from "model/ResultModel"; import { db } from "model/db"; import React from "react"; @@ -24,9 +24,15 @@ export default function ResultsAppBar() { const navigate = useNavigate(); const project = useProject(); const alternatives = useAlternatives(); + let costs: Cost[] = []; + costs$.subscribe((data) => { + costs = data; + }); useSubscribe(pdfClick$, () => { - const blob = pdf().toBlob(); + const blob = pdf( + + ).toBlob(); blob.then((blob: Blob | MediaSource) => { const url = window.URL.createObjectURL(blob); diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx index 485fec3f..f9c9d413 100644 --- a/frontend/src/components/pdf-components/Alternatives.tsx +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -1,14 +1,32 @@ import { Text, View } from "@react-pdf/renderer"; -import { Alternative } from "blcc-format/Format"; +import { Alternative, Cost } from "blcc-format/Format"; +import CapitalCostInput from "./CapitalCostInput"; +import ContractCostInput from "./ContractCostInput"; +import EnergyCostInput from "./EnergyCostInput"; +import OtherCostInput from "./OtherCostInput"; import { styles } from "./pdfStyles"; +import WaterCostInput from "./WaterCostInput"; -const Alternatives = (props: { alternatives: Alternative[] }) => { +const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; releaseYear: number }) => { const alts = props.alternatives; - console.log(alts); + const costs = props.costs; + const releaseYear = props.releaseYear; + + const getAltCosts = (alt: Alternative) => { + let altCost = alt.costs; + const altCosts = []; + for (let i = 0; i < costs.length; i++) { + if (altCost.includes(costs[i]?.id)) altCosts.push(costs[i]); + } + return altCosts; + }; + return ( Alternatives {alts.map((alt: Alternative) => { + const altCosts = getAltCosts(alt); + const lastIndex = altCosts.length - 1; return ( @@ -16,11 +34,13 @@ const Alternatives = (props: { alternatives: Alternative[] }) => { {alt.name}
- - Description:  - {alt.description} -
-
+ {alt?.description ? ( + + Description:  + {alt.description} +
+
+ ) : null} Baseline:  {alt.baseline === false ? "No" : "Yes"} @@ -31,6 +51,32 @@ const Alternatives = (props: { alternatives: Alternative[] }) => { {alt.costs.length}
+ {altCosts.map((cost: Cost, idx: number) => { + console.log(idx, lastIndex, cost.name); + return ( + + {(cost.type === "Capital" || + cost.type === "OMR" || + cost.type === "Replacement Capital") && ( + + )} + + {cost.type === "Energy" && } + + {(cost.type === "Other Monetary" || cost.type === "Other Non-Monetary") && ( + + )} + + {cost.type === "Water" && } + + {(cost.type === "Contract Implementation" || + cost.type === "Recurring Contract") && ( + + )} + {idx !== lastIndex &&
} +
+ ); + })}
); diff --git a/frontend/src/components/pdf-components/CapitalCostInput.tsx b/frontend/src/components/pdf-components/CapitalCostInput.tsx new file mode 100644 index 00000000..796d7d00 --- /dev/null +++ b/frontend/src/components/pdf-components/CapitalCostInput.tsx @@ -0,0 +1,107 @@ +import { Text, View } from "@react-pdf/renderer"; +import { + AnnualRateOfChange, + CostName, + CostSavings, + Description, + InitialCost, + PhaseIn, + RateOfRecurrence, + Recurring +} from "./CostComponents"; +import InputTable from "./InputTable"; +import { styles } from "./pdfStyles"; + +const CapitalCostInput = (props: { cost; year: number }) => { + //TODO: specify type for cost + const { cost, year } = props; + return ( + + + + + + + + + + {cost?.amountFinanced ? ( + + Amount Financed:  + ${cost?.amountFinanced} + + ) : null} + + + + {cost?.expectedLife ? ( + + Expected Lifetime:  + {cost.expectedLife} year(s) + + ) : null} + + {cost?.costAdjustment ? ( + + Cost Adjustment Factor:  + {cost?.costAdjustment}% + + ) : null} + + + + {cost?.rateOfRecurrence ? ( + + Rate Of Recurrence:  + {cost?.rateOfRecurrence} year(s) + + ) : null} + + + + + + {cost?.recurring ? ( + <> + + Rate Of Recurrence:  + {cost?.recurring?.rateOfRecurrence} year(s) + + + Rate Of Change of Value:  + + {Array.isArray(cost?.recurring?.rateOfChangeValue) ? ( + + ) : ( + {cost?.recurring?.rateOfChangeValue} + )} + + + ) : null} + + {cost?.residualValue ? ( + + Residual Value:  + {cost?.residualValue ? "Yes" : "No"} + + ) : null} + + {cost?.residualValue ? ( + + Residual Value:  + + {cost?.residualValue?.value} + {cost?.residualValue?.approach} + + + ) : null} + + ); +}; + +export default CapitalCostInput; diff --git a/frontend/src/components/pdf-components/ContractCostInput.tsx b/frontend/src/components/pdf-components/ContractCostInput.tsx new file mode 100644 index 00000000..ff2ce646 --- /dev/null +++ b/frontend/src/components/pdf-components/ContractCostInput.tsx @@ -0,0 +1,85 @@ +import { Text, View } from "@react-pdf/renderer"; +import { + AnnualRateOfChange, + CostName, + CostSavings, + Description, + InitialCost, + RateOfRecurrence, + Recurring +} from "./CostComponents"; +import InputTable from "./InputTable"; +import { styles } from "./pdfStyles"; + +const ContractCostInput = (props: { cost; year: number }) => { + //TODO: specify type for cost + const { cost, year } = props; + return ( + + + + + + {cost?.occurence ? ( + + Occurence:  + {cost?.occurrence} year(s) + + ) : null} + + {cost?.initialOccurrence ? ( + + Initial Occurrence:  + {cost?.initialOccurrence} year(s) + + ) : null} + + {cost?.cost ? ( + + Cost:  + ${cost?.cost} + + ) : null} + + + + + + + + {cost?.costPerUnit ? ( + + {cost?.costSavings ? ( + Cost Savings per Unit:  + ) : ( + Cost per Unit:  + )} + {cost?.costPerUnit} + + ) : null} + + + + + {cost?.recurring ? ( + <> + + Rate of Recurrence:  + {cost?.recurring?.rateOfRecurrence} year(s) + + + Rate of Change of Value:  + + + + ) : null} + + ); +}; + +export default ContractCostInput; diff --git a/frontend/src/components/pdf-components/CostComponents.tsx b/frontend/src/components/pdf-components/CostComponents.tsx new file mode 100644 index 00000000..49975013 --- /dev/null +++ b/frontend/src/components/pdf-components/CostComponents.tsx @@ -0,0 +1,114 @@ +import { Text, View } from "@react-pdf/renderer"; +import InputTable from "./InputTable"; +import { styles } from "./pdfStyles"; + +interface Props { + cost: { + type?: string; + name?: string; + description?: string; + costSavings?: Boolean; + initialCost?: number; + annualRateOfChange?: number; + recurring?: Boolean; + rateOfRecurrence?: number; + useIndex?: number[]; + phaseIn?: number[]; + }; + year?: number; +} + +export const CostName = ({ cost }: Props) => ( + + + {cost?.type}: {cost?.name || "Unnamed"} + + +); + +export const Description = ({ cost }: Props) => ( + <> + {cost?.description ? ( + + Description:  + {cost?.description} + + ) : null} + +); + +export const CostSavings = ({ cost }: Props) => ( + <> + {cost?.costSavings ? ( + + Cost Savings:  + {cost.costSavings ? "Yes" : "No"} + + ) : null} + +); + +export const InitialCost = ({ cost }: Props) => ( + <> + {cost?.initialCost ? ( + + {cost?.costSavings ? ( + Initial Cost Savings (Base Year):  + ) : ( + Initial Cost:  + )} + ${cost?.initialCost} + + ) : null} + +); + +export const AnnualRateOfChange = ({ cost }: Props) => ( + <> + {cost?.annualRateOfChange ? ( + + Annual Rate of Change:  + {cost?.annualRateOfChange}% + + ) : null} + +); + +export const Recurring = ({ cost }: Props) => ( + + Recurring:  + {cost?.recurring ? "Yes" : "No"} + +); + +export const RateOfRecurrence = ({ cost }: Props) => ( + <> + {cost?.rateOfRecurrence ? ( + + Rate Of Recurrence:  + {cost?.rateOfRecurrence} year(s) + + ) : null} + +); +export const UseIndex = ({ cost, year }: Props) => ( + <> + {cost?.useIndex && ( + + Usage Index:  + + + )} + +); + +export const PhaseIn = ({ cost, year }: Props) => ( + <> + {cost?.phaseIn && ( + + Phase In:  + + + )} + +); diff --git a/frontend/src/components/pdf-components/EnergyCostInput.tsx b/frontend/src/components/pdf-components/EnergyCostInput.tsx new file mode 100644 index 00000000..f0abb203 --- /dev/null +++ b/frontend/src/components/pdf-components/EnergyCostInput.tsx @@ -0,0 +1,114 @@ +import { Text, View } from "@react-pdf/renderer"; +import { CostName, CostSavings, Description, RateOfRecurrence, UseIndex } from "./CostComponents"; +import InputTable from "./InputTable"; +import { styles } from "./pdfStyles"; + +const EnergyCostInput = (props: { cost; year: number }) => { + //TODO: specify type for cost + const { cost, year } = props; + return ( + + + + + + {cost?.fuelType ? ( + + Fuel Type:  + {cost?.fuelType} + + ) : null} + + {cost?.customerSector ? ( + + Customer Sector:  + {cost?.customerSector} + + ) : null} + + {cost?.annualConsumption ? ( + + {cost?.costSavings ? ( + Annual Consumption Savings:  + ) : ( + Annual Consumption:  + )} + {cost?.annualConsumption + " " + cost?.unit} + + ) : null} + + {cost?.costPerUnit ? ( + + {cost?.costSavings ? ( + Cost Savings per Unit:  + ) : ( + Cost per Unit:  + )} + ${cost?.costPerUnit} + + ) : null} + + {cost?.rebate ? ( + + Rebate:  + ${cost?.rebate} + + ) : null} + + {cost?.demandCharge ? ( + + Demand Charge:  + ${cost?.demandCharge} + + ) : null} + + {cost?.expectedLife ? ( + + Expected Lifetime:  + {cost.expectedLife} year(s) + + ) : null} + + {cost?.costAdjustment ? ( + + Cost Adjustment:  + {cost?.costAdjustment} + + ) : null} + + {cost?.escalation ? ( + + Escalation Rates:  + + + ) : null} + + + + {cost?.location ? ( + <> + + Country:  + {cost?.location?.country} + + + State:  + {cost?.location?.state} + + + City:  + {cost?.location?.city} + + + Zipcode:  + {cost?.location?.zipcode} + + + ) : null} + + + + ); +}; + +export default EnergyCostInput; diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 82979341..2e8bb062 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -42,8 +42,8 @@ const GeneralInformation = (props: { project: Project }) => { {project?.studyPeriod} year(s)
- Data Release Year:  - {project?.releaseYear} + Construction Period:  + {project?.constructionPeriod}
@@ -75,18 +75,18 @@ const GeneralInformation = (props: { project: Project }) => { Real Discount Rate:  - {project?.realDiscountRate}% + {project?.realDiscountRate} % ) : ( - City:  - {project?.location?.city} + Inflation Rate:  + {project?.inflationRate} % - Zip:  - {(project?.location as USLocation)?.zipcode} + Nominal Discount Rate:  + {project?.nominalDiscountRate} % )} diff --git a/frontend/src/components/pdf-components/InputTable.tsx b/frontend/src/components/pdf-components/InputTable.tsx new file mode 100644 index 00000000..40c49d2f --- /dev/null +++ b/frontend/src/components/pdf-components/InputTable.tsx @@ -0,0 +1,50 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import InputTableRows from "./InputTableRows"; + +const borderRight = "1px solid #fff"; +const fontSize = 10; + +const styles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff" + }, + year: { + // width: "14.28%", + borderRight, + fontSize + }, + value: { + // width: "17.28%", + fontSize, + borderRight + } +}); + +const InputTable = (props: { cost; header: string; inputRows: number[]; year: number }) => { + //TODO: specify type for cost + + const { header, inputRows, year } = props; + + const tableRows = inputRows.map((val, idx: number) => { + return [year + idx, `${val * 100}%`]; + }); + + return ( + + {/* results Table Header */} + + Year + {header} + + {/* Results Table Rows */} + + + ); +}; + +export default InputTable; diff --git a/frontend/src/components/pdf-components/InputTableRows.tsx b/frontend/src/components/pdf-components/InputTableRows.tsx new file mode 100644 index 00000000..1063ba49 --- /dev/null +++ b/frontend/src/components/pdf-components/InputTableRows.tsx @@ -0,0 +1,37 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { JSX } from "react/jsx-runtime"; + +const border = "1px solid #005fa3ff"; + +const styles = StyleSheet.create({ + row: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + textAlign: "center", + border, + marginTop: 0 + }, + cell: { borderRight: border, padding: 2, textAlign: "right" }, + alt: { + // width: "14.28%", + borderRight: "1px solid #fff", + fontSize: 10 + } +}); + +const InputTableRows = ({ tableRows }: { tableRows }) => { + const rows: JSX.Element[] = []; + + tableRows?.forEach((item) => + rows.push( + + {item[0]} + {item[1]} + + ) + ); + return <>{rows}; +}; + +export default InputTableRows; diff --git a/frontend/src/components/pdf-components/OtherCostInput.tsx b/frontend/src/components/pdf-components/OtherCostInput.tsx new file mode 100644 index 00000000..2d73f1ca --- /dev/null +++ b/frontend/src/components/pdf-components/OtherCostInput.tsx @@ -0,0 +1,122 @@ +import { Text, View } from "@react-pdf/renderer"; +import { CostName, CostSavings, Description, RateOfRecurrence, Recurring, UseIndex } from "./CostComponents"; +import InputTable from "./InputTable"; +import { styles } from "./pdfStyles"; + +const OtherCostInput = (props: { cost; year: number }) => { + //TODO: specify type for cost + const { cost, year } = props; + return ( + + + + + {cost?.fuelType ? ( + + Fuel Type:  + {cost?.fuelType} + + ) : null} + {cost?.tags ? ( + + Tags:  + {cost?.tags} + + ) : null} + + + {cost?.costOrBenefit ? ( + + Cost or Benefit:  + {cost?.costOrBenefit} + + ) : null} + {cost?.initialOccurrence ? ( + + Initial Occurrence:  + {cost?.initialOccurrence} + + ) : null} + {cost?.valuePerUnit ? ( + + Value per Unit:  + + {cost?.valuePerUnit} per {cost?.unit} + + + ) : null} + {cost?.numberOfUnits ? ( + + Number Of Units:  + + {cost?.numberOfUnits} {cost?.unit} + + + ) : null} + {cost?.escalation ? ( + + Escalation:  + {Array.isArray(cost?.escalation) ? ( + + ) : ( + {cost.escalation} + )} + + ) : null} + {cost?.costAdjustment ? ( + + Cost Adjustment Factor:  + {cost?.costAdjustment} + + ) : null} + {cost?.phaseIn ? ( + + Escalation:  + {cost?.phaseIn} + + ) : null} + + + {cost?.recurring ? ( + <> + + + + Rate Of Change Value:  + {Array.isArray(cost?.recurring?.rateOfChangeValue) ? ( + + ) : ( + {cost?.recurring?.rateOfChangeValue} + )} + + + + Rate Of Change Units:  + {Array.isArray(cost?.recurring?.rateOfChangeUnits) ? ( + + ) : ( + {cost?.recurring?.rateOfChangeUnits} + )} + + + ) : null} + + ); +}; + +export default OtherCostInput; diff --git a/frontend/src/components/pdf-components/WaterCostInput.tsx b/frontend/src/components/pdf-components/WaterCostInput.tsx new file mode 100644 index 00000000..260156b2 --- /dev/null +++ b/frontend/src/components/pdf-components/WaterCostInput.tsx @@ -0,0 +1,77 @@ +import { Text, View } from "@react-pdf/renderer"; +import { CostName, CostSavings, Description, UseIndex } from "./CostComponents"; +import { styles } from "./pdfStyles"; + +const WaterCostInput = (props: { cost; year: number }) => { + //TODO: specify type for cost + const cost = props.cost; + const year = props.year; + return ( + + + + + + + {cost?.costSavings ? ( + + {cost?.costSavings ? ( + Usage Savings:  + ) : ( + Usage:  + )} + + ) : null} + + {cost?.usage?.map((use) => { + return ( + + {use?.season} + + {use?.amount} + {cost?.unit} + + + {use?.costPerUnit} $/{cost?.unit} + + + ); + })} + + {cost?.costSavings ? ( + + {cost?.costSavings ? ( + Disposal Savings:  + ) : ( + Disaposal:  + )} + + ) : null} + + {cost?.disposal?.map((dis) => { + return ( + + {dis?.season} + + {dis?.amount} {cost?.unit} + + + {dis?.costPerUnit}$/{cost?.unit} + + + ); + })} + + {cost?.escalation ? ( + + Escalation:  + {+cost?.escalation * 100}% + + ) : null} + + + + ); +}; + +export default WaterCostInput; diff --git a/frontend/src/components/pdf-components/pdfStyles.ts b/frontend/src/components/pdf-components/pdfStyles.ts index 3a47de4d..2e981336 100644 --- a/frontend/src/components/pdf-components/pdfStyles.ts +++ b/frontend/src/components/pdf-components/pdfStyles.ts @@ -1,6 +1,10 @@ import { StyleSheet } from "@react-pdf/renderer"; export const styles = StyleSheet.create({ + page: { + margin: "10px", + border: "1px solid black" + }, section: { display: "flex", flexDirection: "column", @@ -43,30 +47,39 @@ export const styles = StyleSheet.create({ marginBottom: 10 }, title: { - fontSize: 18, + fontSize: 16, textAlign: "center", marginBottom: 20 }, heading: { - fontSize: 16, + fontSize: 14, color: "rgba(0, 0, 0, 0.88)" }, key: { display: "flex", flexDirection: "row", - marginBottom: 10 + marginBottom: 4 }, desc: { maxWidth: "100vw", - marginBottom: 10 + marginBottom: 4, + fontSize: 10 }, text: { - fontSize: 14, - color: "#979797" + fontSize: 10, + color: "#005fa3ff" + }, + subHeading: { + fontSize: 13, + textDecoration: "underline", + textDecorationStyle: "solid", + textAlign: "center", + margin: "auto", + marginBottom: 4 }, value: { - fontSize: 14, - marginBottom: "5" + fontSize: 10, + marginBottom: 3 }, divider: { border: "1px solid black", @@ -88,5 +101,18 @@ export const styles = StyleSheet.create({ display: "flex", justifyContent: "flex-end", fontSize: 14 + }, + table: { + display: "flex", + flexDirection: "row", + justifyContent: "space-evenly" + }, + subDivider: { + border: "1px solid black", + margin: "15px auto", + width: "50%" + }, + costContainer: { + padding: "10px 20px" } }); From 24162a6871f49073b045834dc6d2a26767359967 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 5 Dec 2024 11:28:23 -0500 Subject: [PATCH 07/24] refactor all input costs --- .../pdf-components/Alternatives.tsx | 28 ++-- .../pdf-components/CapitalCostInput.tsx | 79 +++------- .../pdf-components/ContractCostInput.tsx | 54 ++----- .../pdf-components/CostComponents.tsx | 138 ++++++++++++++++-- .../pdf-components/EnergyCostInput.tsx | 82 ++++------- .../pdf-components/GeneralInformation.tsx | 54 +++---- .../components/pdf-components/InputTable.tsx | 15 +- .../pdf-components/InputTableRows.tsx | 21 ++- .../components/pdf-components/NISTHeader.tsx | 2 +- .../pdf-components/OtherCostInput.tsx | 94 +++--------- .../components/pdf-components/PageNumber.tsx | 12 +- .../pdf-components/WaterCostInput.tsx | 134 ++++++++++------- .../components/pdf-components/pdfStyles.ts | 137 ++++++++++++----- 13 files changed, 470 insertions(+), 380 deletions(-) diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx index f9c9d413..b199890b 100644 --- a/frontend/src/components/pdf-components/Alternatives.tsx +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -23,36 +23,35 @@ const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; relea return ( - Alternatives - {alts.map((alt: Alternative) => { - const altCosts = getAltCosts(alt); - const lastIndex = altCosts.length - 1; +
+ + Alternatives + Total - {alts.length} + +
+
+ {alts.map((alt: Alternative, idx: number) => { return ( - - Name:  - {alt.name} -
-
+ + Alternative {idx + 1} - {alt.name} + + {alt?.description ? ( Description:  {alt.description} -
) : null} Baseline:  {alt.baseline === false ? "No" : "Yes"} -
Total Costs:  {alt.costs.length} -
- {altCosts.map((cost: Cost, idx: number) => { - console.log(idx, lastIndex, cost.name); + {getAltCosts(alt).map((cost: Cost) => { return ( {(cost.type === "Capital" || @@ -73,7 +72,6 @@ const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; relea cost.type === "Recurring Contract") && ( )} - {idx !== lastIndex &&
}
); })} diff --git a/frontend/src/components/pdf-components/CapitalCostInput.tsx b/frontend/src/components/pdf-components/CapitalCostInput.tsx index 796d7d00..da784d82 100644 --- a/frontend/src/components/pdf-components/CapitalCostInput.tsx +++ b/frontend/src/components/pdf-components/CapitalCostInput.tsx @@ -1,15 +1,19 @@ import { Text, View } from "@react-pdf/renderer"; import { AnnualRateOfChange, + CostAdjustmentFactor, CostName, CostSavings, Description, + ExpectedLife, InitialCost, + InitialOccurence, PhaseIn, + RateOfChangeUnits, + RateOfChangeValue, RateOfRecurrence, Recurring } from "./CostComponents"; -import InputTable from "./InputTable"; import { styles } from "./pdfStyles"; const CapitalCostInput = (props: { cost; year: number }) => { @@ -25,6 +29,8 @@ const CapitalCostInput = (props: { cost; year: number }) => { + + {cost?.amountFinanced ? ( Amount Financed:  @@ -32,74 +38,37 @@ const CapitalCostInput = (props: { cost; year: number }) => { ) : null} - + - {cost?.expectedLife ? ( - - Expected Lifetime:  - {cost.expectedLife} year(s) - - ) : null} + - {cost?.costAdjustment ? ( - - Cost Adjustment Factor:  - {cost?.costAdjustment}% - - ) : null} + - + + Residual Value:  + {cost?.residualValue ? "Yes" : "No"} + - {cost?.rateOfRecurrence ? ( + {cost?.residualValue ? ( - Rate Of Recurrence:  - {cost?.rateOfRecurrence} year(s) + Residual Value:  + + {cost?.residualValue?.value} + {cost?.residualValue?.approach} + ) : null} - - {cost?.recurring ? ( <> - - Rate Of Recurrence:  - {cost?.recurring?.rateOfRecurrence} year(s) - - - Rate Of Change of Value:  - - {Array.isArray(cost?.recurring?.rateOfChangeValue) ? ( - - ) : ( - {cost?.recurring?.rateOfChangeValue} - )} - + + + ) : null} - - {cost?.residualValue ? ( - - Residual Value:  - {cost?.residualValue ? "Yes" : "No"} - - ) : null} - - {cost?.residualValue ? ( - - Residual Value:  - - {cost?.residualValue?.value} - {cost?.residualValue?.approach} - - - ) : null} +
); }; diff --git a/frontend/src/components/pdf-components/ContractCostInput.tsx b/frontend/src/components/pdf-components/ContractCostInput.tsx index ff2ce646..64712182 100644 --- a/frontend/src/components/pdf-components/ContractCostInput.tsx +++ b/frontend/src/components/pdf-components/ContractCostInput.tsx @@ -5,10 +5,11 @@ import { CostSavings, Description, InitialCost, + InitialOccurence, + RateOfChangeValue, RateOfRecurrence, Recurring } from "./CostComponents"; -import InputTable from "./InputTable"; import { styles } from "./pdfStyles"; const ContractCostInput = (props: { cost; year: number }) => { @@ -20,62 +21,37 @@ const ContractCostInput = (props: { cost; year: number }) => { - {cost?.occurence ? ( + {cost?.occurrence ? ( - Occurence:  - {cost?.occurrence} year(s) + Occurrence:  + Year - {cost?.occurrence} ) : null} - {cost?.initialOccurrence ? ( - - Initial Occurrence:  - {cost?.initialOccurrence} year(s) - - ) : null} + + + {cost?.cost ? ( - Cost:  + {cost?.costSavings ? ( + Savings:  + ) : ( + Cost:  + )} ${cost?.cost} ) : null} - - - {cost?.costPerUnit ? ( - - {cost?.costSavings ? ( - Cost Savings per Unit:  - ) : ( - Cost per Unit:  - )} - {cost?.costPerUnit} - - ) : null} - - - {cost?.recurring ? ( <> - - Rate of Recurrence:  - {cost?.recurring?.rateOfRecurrence} year(s) - - - Rate of Change of Value:  - - + + ) : null}
diff --git a/frontend/src/components/pdf-components/CostComponents.tsx b/frontend/src/components/pdf-components/CostComponents.tsx index 49975013..e83a7536 100644 --- a/frontend/src/components/pdf-components/CostComponents.tsx +++ b/frontend/src/components/pdf-components/CostComponents.tsx @@ -9,21 +9,24 @@ interface Props { description?: string; costSavings?: Boolean; initialCost?: number; + costPerUnit?: number; + expectedLifetime?: number; + costAdjustment?: number; + initialOccurrence?: number; annualRateOfChange?: number; - recurring?: Boolean; + recurring?: any; // TODO: specify the correct type rateOfRecurrence?: number; useIndex?: number[]; phaseIn?: number[]; + escalation?: any; // TODO: specify the correct type }; year?: number; } export const CostName = ({ cost }: Props) => ( - - - {cost?.type}: {cost?.name || "Unnamed"} - - + + Cost - {cost?.type}: {cost?.name || "Unnamed"} + ); export const Description = ({ cost }: Props) => ( @@ -42,7 +45,7 @@ export const CostSavings = ({ cost }: Props) => ( {cost?.costSavings ? ( Cost Savings:  - {cost.costSavings ? "Yes" : "No"} + {cost?.costSavings ? "Yes" : "No"} ) : null} @@ -63,6 +66,39 @@ export const InitialCost = ({ cost }: Props) => ( ); +export const CostPerUnit = ({ cost }: Props) => ( + <> + {cost?.costPerUnit ? ( + + {cost?.costSavings ? ( + Cost Savings per Unit:  + ) : ( + Cost per Unit:  + )} + ${cost?.costPerUnit} + + ) : null} + +); + +export const ExpectedLife = ({ cost }: Props) => ( + + Expected Lifetime:  + {cost?.expectedLifetime || 0} year(s) + +); + +export const CostAdjustmentFactor = ({ cost }: Props) => ( + <> + {cost?.costAdjustment ? ( + + Cost Adjustment Factor:  + {cost?.costAdjustment}% + + ) : null} + +); + export const AnnualRateOfChange = ({ cost }: Props) => ( <> {cost?.annualRateOfChange ? ( @@ -81,6 +117,17 @@ export const Recurring = ({ cost }: Props) => (
); +export const InitialOccurence = ({ cost }: Props) => ( + <> + {cost?.initialOccurrence ? ( + + Initial Occurrence:  + {cost?.initialOccurrence} year(s) + + ) : null} + +); + export const RateOfRecurrence = ({ cost }: Props) => ( <> {cost?.rateOfRecurrence ? ( @@ -94,9 +141,10 @@ export const RateOfRecurrence = ({ cost }: Props) => ( export const UseIndex = ({ cost, year }: Props) => ( <> {cost?.useIndex && ( - + Usage Index:  - + + )} @@ -105,10 +153,78 @@ export const UseIndex = ({ cost, year }: Props) => ( export const PhaseIn = ({ cost, year }: Props) => ( <> {cost?.phaseIn && ( - + Phase In:  - + + )} ); + +export const RateOfChangeValue = ({ cost, year }: Props) => { + const value = Array.isArray(cost?.recurring?.rateOfChangeValue); + return ( + + Rate Of Change of Value:  + {value ? ( + + + + + ) : ( + {cost?.recurring?.rateOfChangeValue}% + )} + + ); +}; + +export const RateOfChangeUnits = ({ cost, year }: Props) => { + const value = Array.isArray(cost?.recurring?.rateOfChangeUnits); + return ( + + Rate Of Change Units:  + {value ? ( + + + + + ) : ( + {cost?.recurring?.rateOfChangeUnits}% + )} + + ); +}; + +export const EscalationRates = ({ cost, year }: Props) => ( + <> + {cost?.escalation ? ( + + Escalation:  + {Array.isArray(cost?.escalation) ? ( + + + + + ) : ( + {cost?.escalation}% + )} + + ) : null} + +); diff --git a/frontend/src/components/pdf-components/EnergyCostInput.tsx b/frontend/src/components/pdf-components/EnergyCostInput.tsx index f0abb203..2028797c 100644 --- a/frontend/src/components/pdf-components/EnergyCostInput.tsx +++ b/frontend/src/components/pdf-components/EnergyCostInput.tsx @@ -1,6 +1,6 @@ import { Text, View } from "@react-pdf/renderer"; -import { CostName, CostSavings, Description, RateOfRecurrence, UseIndex } from "./CostComponents"; -import InputTable from "./InputTable"; +import { CostName, CostPerUnit, CostSavings, Description, EscalationRates, UseIndex } from "./CostComponents"; + import { styles } from "./pdfStyles"; const EnergyCostInput = (props: { cost; year: number }) => { @@ -37,16 +37,7 @@ const EnergyCostInput = (props: { cost; year: number }) => { ) : null} - {cost?.costPerUnit ? ( - - {cost?.costSavings ? ( - Cost Savings per Unit:  - ) : ( - Cost per Unit:  - )} - ${cost?.costPerUnit} - - ) : null} + {cost?.rebate ? ( @@ -62,50 +53,37 @@ const EnergyCostInput = (props: { cost; year: number }) => { ) : null} - {cost?.expectedLife ? ( - - Expected Lifetime:  - {cost.expectedLife} year(s) - - ) : null} - - {cost?.costAdjustment ? ( - - Cost Adjustment:  - {cost?.costAdjustment} - - ) : null} - - {cost?.escalation ? ( - - Escalation Rates:  - - - ) : null} - - - {cost?.location ? ( - <> - - Country:  - {cost?.location?.country} + + + + Country:  + {cost?.location?.country} + + + State:  + {cost?.location?.state} + - - State:  - {cost?.location?.state} + + + City:  + {cost?.location?.city} + + + Zipcode:  + {cost?.location?.zipcode} + - - City:  - {cost?.location?.city} - - - Zipcode:  - {cost?.location?.zipcode} - - - ) : null} + + ) : ( + + Location:  + Same as Project Location + + )} + ); diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 2e8bb062..0f68fa3b 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -6,7 +6,9 @@ const GeneralInformation = (props: { project: Project }) => { const project = props.project; return ( +
General Information +
Project Name:  {project?.name} @@ -21,7 +23,7 @@ const GeneralInformation = (props: { project: Project }) => {
{project?.analysisType === AnalysisType.OMB_NON_ENERGY ? ( - + Analysis Purpose:  {project?.purpose}
@@ -29,29 +31,29 @@ const GeneralInformation = (props: { project: Project }) => { ) : null}
{project?.description?.length !== 0 ? ( - + Project Description:  {project?.description}
) : null} - + - + Study Period:  {project?.studyPeriod} year(s) - + Construction Period:  - {project?.constructionPeriod} + {project?.constructionPeriod} year(s) - + Data Release Year:  {project?.releaseYear} - + EIA Projection Scenario:  {project?.case} @@ -59,58 +61,58 @@ const GeneralInformation = (props: { project: Project }) => {
Discounting: -
+ {/*
*/} - + Dollar Value:  {project?.dollarMethod} - + Discounting Convention:  {project?.discountingMethod} {project?.dollarMethod === DollarMethod.CONSTANT ? ( - + Real Discount Rate:  - {project?.realDiscountRate} % + {project?.realDiscountRate}% ) : ( - + Inflation Rate:  - {project?.inflationRate} % + {project?.inflationRate}% - + Nominal Discount Rate:  - {project?.nominalDiscountRate} % + {project?.nominalDiscountRate}% )} Location: -
+ {/*
*/} - + Country:  {project?.location?.country} - + State:  {(project?.location as USLocation)?.state} - + City:  {project?.location?.city} - + Zip:  {(project?.location as USLocation)?.zipcode} @@ -120,20 +122,20 @@ const GeneralInformation = (props: { project: Project }) => { Greenhouse Gas (GHG) Emissions and Cost Assumptions: -
+ {/*
*/} - + Data Source:  {project?.ghg?.dataSource} - + Emissions Rate Type:  {project?.ghg?.emissionsRateType} - + Social Cost of GHG Scenario:  {project?.ghg?.socialCostOfGhgScenario} diff --git a/frontend/src/components/pdf-components/InputTable.tsx b/frontend/src/components/pdf-components/InputTable.tsx index 40c49d2f..bbf2ab13 100644 --- a/frontend/src/components/pdf-components/InputTable.tsx +++ b/frontend/src/components/pdf-components/InputTable.tsx @@ -1,27 +1,28 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; import InputTableRows from "./InputTableRows"; -const borderRight = "1px solid #fff"; +const border = "1px solid #000"; const fontSize = 10; const styles = StyleSheet.create({ container: { + width: "180px", display: "flex", flexDirection: "row", justifyContent: "space-between", color: "#fff", textAlign: "center", - backgroundColor: "#005fa3ff" + backgroundColor: "#005fa3ff", + border }, year: { - // width: "14.28%", - borderRight, + width: "50px", + borderRight: border, fontSize }, value: { - // width: "17.28%", - fontSize, - borderRight + width: "130px", + fontSize } }); diff --git a/frontend/src/components/pdf-components/InputTableRows.tsx b/frontend/src/components/pdf-components/InputTableRows.tsx index 1063ba49..7ac90aae 100644 --- a/frontend/src/components/pdf-components/InputTableRows.tsx +++ b/frontend/src/components/pdf-components/InputTableRows.tsx @@ -1,22 +1,29 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; import { JSX } from "react/jsx-runtime"; -const border = "1px solid #005fa3ff"; +const border = "1px solid #000"; const styles = StyleSheet.create({ row: { + width: "180px", display: "flex", flexDirection: "row", justifyContent: "space-between", textAlign: "center", - border, + borderBottom: border, + borderRight: border, + borderLeft: border, marginTop: 0 }, - cell: { borderRight: border, padding: 2, textAlign: "right" }, + cell: { + width: "130px", + fontSize: 10, + textAlign: "center" + }, alt: { - // width: "14.28%", - borderRight: "1px solid #fff", - fontSize: 10 + width: "50px", + fontSize: 10, + textAlign: "center" } }); @@ -27,7 +34,7 @@ const InputTableRows = ({ tableRows }: { tableRows }) => { rows.push( {item[0]} - {item[1]} + {item[1]} ) ); diff --git a/frontend/src/components/pdf-components/NISTHeader.tsx b/frontend/src/components/pdf-components/NISTHeader.tsx index 44af49ca..91fbcb68 100644 --- a/frontend/src/components/pdf-components/NISTHeader.tsx +++ b/frontend/src/components/pdf-components/NISTHeader.tsx @@ -4,7 +4,7 @@ import { styles } from "./pdfStyles"; const NISTHeader = () => { return ( - + ); }; diff --git a/frontend/src/components/pdf-components/OtherCostInput.tsx b/frontend/src/components/pdf-components/OtherCostInput.tsx index 2d73f1ca..d92ff151 100644 --- a/frontend/src/components/pdf-components/OtherCostInput.tsx +++ b/frontend/src/components/pdf-components/OtherCostInput.tsx @@ -1,6 +1,14 @@ import { Text, View } from "@react-pdf/renderer"; -import { CostName, CostSavings, Description, RateOfRecurrence, Recurring, UseIndex } from "./CostComponents"; -import InputTable from "./InputTable"; +import { + CostName, + Description, + InitialOccurence, + RateOfChangeUnits, + RateOfChangeValue, + RateOfRecurrence, + Recurring +} from "./CostComponents"; + import { styles } from "./pdfStyles"; const OtherCostInput = (props: { cost; year: number }) => { @@ -11,32 +19,27 @@ const OtherCostInput = (props: { cost; year: number }) => { - {cost?.fuelType ? ( - - Fuel Type:  - {cost?.fuelType} - - ) : null} + {cost?.tags ? ( Tags:  - {cost?.tags} + {cost?.tags?.map((tag: string) => ( + + {tag} + + ))} ) : null} - {cost?.costOrBenefit ? ( Cost or Benefit:  {cost?.costOrBenefit} ) : null} - {cost?.initialOccurrence ? ( - - Initial Occurrence:  - {cost?.initialOccurrence} - - ) : null} + + + {cost?.valuePerUnit ? ( Value per Unit:  @@ -45,6 +48,7 @@ const OtherCostInput = (props: { cost; year: number }) => { ) : null} + {cost?.numberOfUnits ? ( Number Of Units:  @@ -53,66 +57,14 @@ const OtherCostInput = (props: { cost; year: number }) => { ) : null} - {cost?.escalation ? ( - - Escalation:  - {Array.isArray(cost?.escalation) ? ( - - ) : ( - {cost.escalation} - )} - - ) : null} - {cost?.costAdjustment ? ( - - Cost Adjustment Factor:  - {cost?.costAdjustment} - - ) : null} - {cost?.phaseIn ? ( - - Escalation:  - {cost?.phaseIn} - - ) : null} + {cost?.recurring ? ( <> - - - Rate Of Change Value:  - {Array.isArray(cost?.recurring?.rateOfChangeValue) ? ( - - ) : ( - {cost?.recurring?.rateOfChangeValue} - )} - - - - Rate Of Change Units:  - {Array.isArray(cost?.recurring?.rateOfChangeUnits) ? ( - - ) : ( - {cost?.recurring?.rateOfChangeUnits} - )} - + + ) : null} diff --git a/frontend/src/components/pdf-components/PageNumber.tsx b/frontend/src/components/pdf-components/PageNumber.tsx index d8efc15b..68b3dad3 100644 --- a/frontend/src/components/pdf-components/PageNumber.tsx +++ b/frontend/src/components/pdf-components/PageNumber.tsx @@ -1,14 +1,8 @@ import { Text } from "@react-pdf/renderer"; import { styles } from "./pdfStyles"; -const PageNumber = () => { - return ( - `${pageNumber} / ${totalPages}`} - /> - ); -}; +const PageNumber = () => ( + `${pageNumber} / ${totalPages}`} /> +); export default PageNumber; diff --git a/frontend/src/components/pdf-components/WaterCostInput.tsx b/frontend/src/components/pdf-components/WaterCostInput.tsx index 260156b2..ff684b8a 100644 --- a/frontend/src/components/pdf-components/WaterCostInput.tsx +++ b/frontend/src/components/pdf-components/WaterCostInput.tsx @@ -1,7 +1,32 @@ -import { Text, View } from "@react-pdf/renderer"; -import { CostName, CostSavings, Description, UseIndex } from "./CostComponents"; +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { CostName, CostSavings, Description, EscalationRates, UseIndex } from "./CostComponents"; import { styles } from "./pdfStyles"; +const border = "1px solid #000"; +const fontSize = 10; + +const localStyles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff", + border, + width: "300px" + }, + year: { + width: "50px", + borderRight: border, + fontSize + }, + value: { + width: "130px", + fontSize + } +}); + const WaterCostInput = (props: { cost; year: number }) => { //TODO: specify type for cost const cost = props.cost; @@ -9,65 +34,72 @@ const WaterCostInput = (props: { cost; year: number }) => { return ( - - {cost?.costSavings ? ( - - {cost?.costSavings ? ( - Usage Savings:  - ) : ( - Usage:  - )} - - ) : null} - - {cost?.usage?.map((use) => { - return ( - - {use?.season} - - {use?.amount} - {cost?.unit} - - - {use?.costPerUnit} $/{cost?.unit} - + + {cost?.costSavings ? ( + + {cost?.costSavings ? ( + Usage Savings:  + ) : ( + Usage:  + )} - ); - })} + ) : null} - {cost?.costSavings ? ( - - {cost?.costSavings ? ( - Disposal Savings:  - ) : ( - Disaposal:  - )} + + Season + Qty/Unit + Price/Unit - ) : null} + {cost?.usage?.map((use) => { + return ( + + {use?.season} + + {use?.amount}/{cost?.unit} + + + {use?.costPerUnit} $/{cost?.unit} + + + ); + })} + - {cost?.disposal?.map((dis) => { - return ( - - {dis?.season} - - {dis?.amount} {cost?.unit} - - - {dis?.costPerUnit}$/{cost?.unit} - + + {cost?.costSavings ? ( + + {cost?.costSavings ? ( + Disposal Savings:  + ) : ( + Disaposal:  + )} - ); - })} + ) : null} - {cost?.escalation ? ( - - Escalation:  - {+cost?.escalation * 100}% + + Season + Qty/Unit + Price/Unit - ) : null} + {cost?.disposal?.map((dis) => { + return ( + + {dis?.season} + + {dis?.amount}/{cost?.unit} + + + {dis?.costPerUnit}$/{cost?.unit} + + + ); + })} + + + diff --git a/frontend/src/components/pdf-components/pdfStyles.ts b/frontend/src/components/pdf-components/pdfStyles.ts index 2e981336..5d5a15e3 100644 --- a/frontend/src/components/pdf-components/pdfStyles.ts +++ b/frontend/src/components/pdf-components/pdfStyles.ts @@ -1,9 +1,12 @@ import { StyleSheet } from "@react-pdf/renderer"; +const blue = "#005fa3ff"; +const black = "rgb(0,0,0)"; + export const styles = StyleSheet.create({ page: { - margin: "10px", - border: "1px solid black" + margin: 10 + // border: "1px solid black" }, section: { display: "flex", @@ -24,15 +27,6 @@ export const styles = StyleSheet.create({ height: "20px", alignSelf: "flex-end" }, - pageNumber: { - position: "absolute", - fontSize: 12, - bottom: 30, - left: 0, - right: 0, - textAlign: "center", - color: "grey" - }, blccHeader: { display: "flex", flexDirection: "column", @@ -46,44 +40,96 @@ export const styles = StyleSheet.create({ height: "50px", marginBottom: 10 }, + date: { + display: "flex", + justifyContent: "flex-end", + fontSize: 14 + }, + pageNumber: { + position: "absolute", + fontSize: 12, + bottom: 30, + left: 0, + right: 0, + textAlign: "center", + color: "grey" + }, + + titleDivider: { + border: "1px solid black", + margin: "4px 0 4px 0" + }, + titleWrapper: { + display: "flex", + justifyContent: "space-between", + textAlign: "center" + }, title: { fontSize: 16, - textAlign: "center", - marginBottom: 20 + color: blue, + textAlign: "center" + }, + subTitle: { + fontSize: 12, + color: blue, + fontWeight: "ultrabold" }, heading: { fontSize: 14, - color: "rgba(0, 0, 0, 0.88)" + color: "rgba(0, 0, 0, 0.88)", + textDecoration: "underline", + textDecorationColor: black, + marginBottom: 8 + }, + altHeading: { + display: "flex", + flexDirection: "row", + marginTop: 8, + marginBottom: 8, + fontSize: 13, + color: black, + textAlign: "center", + textDecoration: "underline", + textDecorationColor: black, + fontWeight: 800 }, key: { display: "flex", flexDirection: "row", - marginBottom: 4 + marginBottom: 6, + fontSize: 10 + }, + text: { + fontSize: 10, + color: blue + }, + value: { + fontSize: 10, + marginBottom: 3 }, desc: { maxWidth: "100vw", marginBottom: 4, fontSize: 10 }, - text: { - fontSize: 10, - color: "#005fa3ff" + tableWrapper: { + display: "flex", + justifyContent: "space-between", + marginBottom: 10 }, + subHeading: { - fontSize: 13, + fontSize: 12, textDecoration: "underline", textDecorationStyle: "solid", - textAlign: "center", - margin: "auto", - marginBottom: 4 - }, - value: { - fontSize: 10, - marginBottom: 3 + marginBottom: 8, + fontWeight: "ultrabold", + color: "#000" }, + divider: { border: "1px solid black", - margin: "2px 0 5px 0" + margin: "2px 0 2.5px 0" }, container: { display: "flex" @@ -94,18 +140,15 @@ export const styles = StyleSheet.create({ marginBottom: 10 // space between rows }, item: { - flex: 1, - margin: 5 - }, - date: { - display: "flex", - justifyContent: "flex-end", - fontSize: 14 + flex: 1 }, + table: { display: "flex", flexDirection: "row", - justifyContent: "space-evenly" + justifyContent: "space-evenly", + border: "1px solid #000", + maxWidth: "300px" }, subDivider: { border: "1px solid black", @@ -113,6 +156,28 @@ export const styles = StyleSheet.create({ width: "50%" }, costContainer: { - padding: "10px 20px" + padding: "5px 20px" + }, + cell: { + width: "100px", + fontSize: 10, + textAlign: "center", + borderRight: "1px solid black", + backgroundColor: "#005fa3ff", + color: "#fff" + }, + alt: { + width: "100px", + fontSize: 10, + textAlign: "center", + borderRight: "1px solid black" + }, + tag: { + backgroundColor: "rgb(169 174 177)", + padding: "1.5 3", + fontSize: 10, + border: "1px solid #000", + borderRadius: 2, + marginRight: 2 } }); From 8650b7d2176cf2d231572a42299c4a5c58dead0d Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 19 Dec 2024 12:46:23 -0500 Subject: [PATCH 08/24] pdf results pt1 --- frontend/src/components/Pdf.tsx | 13 +- frontend/src/components/ResultsAppBar.tsx | 58 ++++- .../components/pdf-components/InputTable.tsx | 7 +- .../src/components/pdf-components/Results.tsx | 28 ++ .../Results/AlternativeResultsPdf.tsx | 34 +++ .../Results/AnnualResultsPdf.tsx | 36 +++ .../pdf-components/Results/ResultsSummary.tsx | 55 ++++ .../pdf-components/Results/ResultsTable.tsx | 51 ++++ .../Results/allResultStreams.tsx | 242 ++++++++++++++++++ 9 files changed, 501 insertions(+), 23 deletions(-) create mode 100644 frontend/src/components/pdf-components/Results.tsx create mode 100644 frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx create mode 100644 frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx create mode 100644 frontend/src/components/pdf-components/Results/ResultsSummary.tsx create mode 100644 frontend/src/components/pdf-components/Results/ResultsTable.tsx create mode 100644 frontend/src/components/pdf-components/Results/allResultStreams.tsx diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index 0e3a131b..ffaa15d5 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -7,8 +7,10 @@ import NISTHeader from "./pdf-components/NISTHeader"; import PageNumber from "./pdf-components/PageNumber"; import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; import { styles } from "./pdf-components/pdfStyles"; +import Results from "./pdf-components/Results"; -const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost[] }) => { +const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost[]; summary; annual; altResults }) => { + const { project, alternatives, costs, summary, annual, altResults } = props; return ( @@ -19,20 +21,17 @@ const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost Report Generated: {`${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`} - + - + + diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index 9ebeda22..4cbf83d9 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -12,10 +12,21 @@ import { ResultModel } from "model/ResultModel"; import { db } from "model/db"; import React from "react"; import { useNavigate } from "react-router-dom"; -import { Subject } from "rxjs"; +import { Subject, withLatestFrom } from "rxjs"; import { download } from "util/DownloadFile"; import Pdf from "./Pdf"; +import { + altNPV, + annualAltNPV, + lccBaseline, + lccResourceRows, + lccRows, + npvComparison, + npvCosts, + resourceUsage +} from "./pdf-components/Results/allResultStreams"; + const pdfClick$ = new Subject(); const saveClick$ = new Subject(); const csvClick$ = new Subject(); @@ -29,19 +40,40 @@ export default function ResultsAppBar() { costs = data; }); - useSubscribe(pdfClick$, () => { - const blob = pdf( - - ).toBlob(); + useSubscribe( + pdfClick$.pipe( + withLatestFrom( + lccRows, + lccBaseline, + npvCosts, + lccResourceRows, + annualAltNPV, + npvComparison, + altNPV, + resourceUsage + ) + ), + ([_, lccRows, lccBaseline, npvCosts, lccResourceRows, annualAltNPV, npvComparison, altNPV, resourceUsage]) => { + const blob = pdf( + + ).toBlob(); - blob.then((blob: Blob | MediaSource) => { - const url = window.URL.createObjectURL(blob); - const link = document.createElement("a"); - link.href = url; - link.download = "BLCC Report.pdf"; - link.click(); - }); - }); //TODO Create and download PDF + blob.then((blob: Blob | MediaSource) => { + const url = window.URL.createObjectURL(blob); + const link = document.createElement("a"); + link.href = url; + link.download = "BLCC Report.pdf"; + link.click(); + }); + } + ); //TODO Create and download PDF useSubscribe(csvClick$, () => {}); // TODO Create and download CSV useSubscribe(saveClick$, async () => download(await db.export(), "download.blcc")); diff --git a/frontend/src/components/pdf-components/InputTable.tsx b/frontend/src/components/pdf-components/InputTable.tsx index bbf2ab13..a13fe8bb 100644 --- a/frontend/src/components/pdf-components/InputTable.tsx +++ b/frontend/src/components/pdf-components/InputTable.tsx @@ -31,9 +31,10 @@ const InputTable = (props: { cost; header: string; inputRows: number[]; year: nu const { header, inputRows, year } = props; - const tableRows = inputRows.map((val, idx: number) => { - return [year + idx, `${val * 100}%`]; - }); + const tableRows = + inputRows?.map((val, idx: number) => { + return [year + idx, `${val * 100}%`]; + }) || []; return ( diff --git a/frontend/src/components/pdf-components/Results.tsx b/frontend/src/components/pdf-components/Results.tsx new file mode 100644 index 00000000..6ebd5c27 --- /dev/null +++ b/frontend/src/components/pdf-components/Results.tsx @@ -0,0 +1,28 @@ +import { Text, View } from "@react-pdf/renderer"; +import { Alternative } from "blcc-format/Format"; + +import { styles } from "./pdfStyles"; +import AlternativeResultsPdf from "./Results/AlternativeResultsPdf"; +import AnnualResultsPdf from "./Results/AnnualResultsPdf"; +import ResultsSummary from "./Results/ResultsSummary"; + +const Results = (props: { alternatives: Alternative[]; summary; annual; altResults }) => { + const { alternatives, summary, annual, altResults } = props; + + const altNames = alternatives.map((alternative) => alternative.name); + + return ( + +
+ + Results + +
+ + + +
+ ); +}; + +export default Results; diff --git a/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx new file mode 100644 index 00000000..e0615816 --- /dev/null +++ b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx @@ -0,0 +1,34 @@ +import { Text, View } from "@react-pdf/renderer"; +import { styles } from "../pdfStyles"; +import ResultsTable from "./ResultsTable"; + +const AlternativeResultsPdf = (props: { altNames: string[]; altResults }) => { + const { altNames, altResults } = props; + console.log(altResults); + + return ( + +
+ + Annual Results for Alternative + +
+ + + {altNames.map((name) => ( + + {name} + NPV Cash Flow Comparison + + Energy and Water use, Emissions, and Social Cost of GHG + + Share of LCC + Share of Energy Use + + ))} + +
+ ); +}; + +export default AlternativeResultsPdf; diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx new file mode 100644 index 00000000..ac2f81d0 --- /dev/null +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -0,0 +1,36 @@ +import { Text, View } from "@react-pdf/renderer"; + +import { styles } from "../pdfStyles"; +import ResultsTable from "./ResultsTable"; + +const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { + const { altNames, annual } = props; + console.log(annual); + + return ( + +
+ + Annual Results + +
+ + + NPV Cash Flow Comparison + + NPV Cash Flows + Annual Results for Alternative + {altNames.map((name) => ( + + {name} + NPV Cash Flow by Alternative + NPV Cash Flows + Tag/Object by Year + + ))} + +
+ ); +}; + +export default AnnualResultsPdf; diff --git a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx new file mode 100644 index 00000000..d577502b --- /dev/null +++ b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx @@ -0,0 +1,55 @@ +import { Text, View } from "@react-pdf/renderer"; + +import { styles } from "../pdfStyles"; + +import ResultsTable from "./ResultsTable"; + +const lifeCycleResultsColumns = [ + "Alternative", + "Base Case", + "Initial Cost", + "Life Cycle Cost", + "Energy", + "GHG Emissions (kg co2)", + "SCC", + "LCC + SCC" +]; + +const lifeCycleResultsBaseline = [ + "Alternative", + "Base Case", + "Initial Cost", + "Life Cycle Cost", + "SIRR", + "AIRR", + "SPP", + "DPP", + "Change in Energy", + "Change in GHG (kg co2)", + "Change in SCC", + "Net Savings & SCC Reductions" +]; + +const ResultsSummary = (props: { altNames: string[]; summary }) => { + const { altNames, summary } = props; + console.log(summary); + return ( + <> + +
+ + Summary + +
+
+ + + + + + + + ); +}; + +export default ResultsSummary; diff --git a/frontend/src/components/pdf-components/Results/ResultsTable.tsx b/frontend/src/components/pdf-components/Results/ResultsTable.tsx new file mode 100644 index 00000000..4cfcd2ba --- /dev/null +++ b/frontend/src/components/pdf-components/Results/ResultsTable.tsx @@ -0,0 +1,51 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +const border = "1px solid #000"; +const fontSize = 10; + +const styles = StyleSheet.create({ + container: { + // width: "180px", + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff", + border + }, + year: { + // width: "50px", + borderRight: border, + fontSize + }, + value: { + // width: "130px", + fontSize + } +}); + +const ResultsTable = (props: { headers: string[] }) => { + //TODO: specify type for cost + + const { headers } = props; + + // const tableRows = + // inputRows?.map((val, idx: number) => { + // return [year + idx, `${val * 100}%`]; + // }) || []; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + {/* Results Table Rows */} + {/* */} + + ); +}; + +export default ResultsTable; diff --git a/frontend/src/components/pdf-components/Results/allResultStreams.tsx b/frontend/src/components/pdf-components/Results/allResultStreams.tsx new file mode 100644 index 00000000..fc82d2f4 --- /dev/null +++ b/frontend/src/components/pdf-components/Results/allResultStreams.tsx @@ -0,0 +1,242 @@ +import { bind } from "@react-rxjs/core"; +import { FuelType } from "blcc-format/Format"; +import { alternatives$, baselineID$ } from "model/Model"; +import { ResultModel } from "model/ResultModel"; +import { combineLatest, from, switchMap, zip } from "rxjs"; +import { map, toArray } from "rxjs/operators"; +import { getOptionalTag } from "util/Util"; + +type LCCRow = { + name: string; + baseline: boolean; + initialCost: number; + lifeCycleCost: number; + energy: number; + ghgEmissions: number; + scc: number; + lccScc: number; +}; + +type npvRow = { + key: number; + year: number; + [key: string]: number; +}; + +// summary +export const [useLCCRows, lccRows] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( + map(([measures, alternativeNames, baselineID]) => + measures.map( + (measure) => + ({ + name: alternativeNames.get(measure.altId), + baseline: measure.altId === baselineID, + lifeCycleCost: measure.totalTagFlows.LCC, + initialCost: measure.totalTagFlows["Initial Investment"], + energy: measure.totalTagFlows.Energy, + ghgEmissions: measure.totalTagFlows.Emissions, + scc: measure.totalTagFlows.SCC, + lccScc: measure.totalCosts + } as LCCRow) + ) + ) + ), + [] +); + +export const [useLCCBaseline, lccBaseline] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( + map(([measures, names, baselineID]) => { + const baseline = measures.find((measure) => measure.altId === baselineID); + + return measures.map((measure) => ({ + name: names.get(measure.altId), + baseline: measure.altId === baselineID, + sir: measure.sir, + airr: measure.airr, + spp: measure.spp, + dpp: measure.dpp, + initialCost: measure.totalCosts, + deltaEnergy: (baseline?.totalTagFlows.Energy ?? 0) - measure.totalTagFlows.Energy, + deltaGhg: (baseline?.totalTagFlows.Emissions ?? 0) - measure.totalTagFlows.Emissions, + deltaScc: (baseline?.totalTagFlows.SCC ?? 0) - measure.totalTagFlows.SCC, + netSavings: measure.netSavings + measure.totalTagFlows.SCC + })); + }) + ), + [] +); + +export const [useNPVCosts, npvCosts] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$]).pipe( + map(([measures]) => { + return [ + { category: "Investment", ...getOptionalTag(measures, "Initial Investment") }, + { category: "Energy", subcategory: "Consumption", ...getOptionalTag(measures, "Energy") }, + { subcategory: "Demand", ...getOptionalTag(measures, "Demand Charge") }, + { subcategory: "Rebates", ...getOptionalTag(measures, "Rebate") }, + { category: "Water", subcategory: "Usage" }, + { subcategory: "Disposal " }, + { category: "OMR", subcategory: "Recurring", ...getOptionalTag(measures, "OMR Recurring") }, + { subcategory: "Non-Recurring", ...getOptionalTag(measures, "OMR Non-Recurring") }, + { category: "Replacement", ...getOptionalTag(measures, "Replacement Capital") }, + { category: "Residual Value", ...getOptionalTag(measures, "Residual Value") } + ]; + }) + ), + [] +); + +export const [useLCCResourceRows, lccResourceRows] = bind( + ResultModel.measures$.pipe( + map((measures) => { + const consumption = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ].map((fuelType) => getOptionalTag(measures, fuelType)); + + const emissions = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Emissions" + ].map((fuelType) => getOptionalTag(measures, `${fuelType} Emissions`)); + + return [ + { category: "Consumption", subcategory: FuelType.ELECTRICITY, ...consumption[0] }, + { subcategory: FuelType.NATURAL_GAS, ...consumption[1] }, + { subcategory: FuelType.DISTILLATE_OIL, ...consumption[2] }, + { subcategory: FuelType.RESIDUAL_OIL, ...consumption[3] }, + { subcategory: FuelType.PROPANE, ...consumption[4] }, + { subcategory: "Total", ...consumption[5] }, + { category: "Emissions", subcategory: FuelType.ELECTRICITY, ...emissions[0] }, + { subcategory: FuelType.NATURAL_GAS, ...emissions[1] }, + { subcategory: FuelType.DISTILLATE_OIL, ...emissions[2] }, + { subcategory: FuelType.RESIDUAL_OIL, ...emissions[3] }, + { subcategory: FuelType.PROPANE, ...emissions[4] }, + { subcategory: "Total", ...emissions[5] }, + { category: "Water", subcategory: "Use" } //TODO: Add in water usage category + ]; + }) + ), + [] +); + +// annual +export const [useNPVComparison, npvComparison] = bind( + ResultModel.required$.pipe( + switchMap((required) => + zip(required.map((required) => from(required.totalCostsDiscounted))).pipe( + map((values, year) => { + const result = { key: year, year } as npvRow; + values.forEach((value, i) => { + result[i.toString()] = value; + }); + return result; + }), + toArray() + ) + ) + ), + [] +); + +export const [useAnnualAltNPV, annualAltNPV] = bind( + combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( + switchMap(([allRequired, optionals, selectedID]) => { + const required = allRequired.find((req) => req.altId === selectedID); + + if (required === undefined) return []; + + const id = required.altId; + const defaultArray = Array.apply(null, Array(required.totalCostsDiscounted.length)).map(() => 0); + + return zip( + from(required.totalCostsDiscounted), + from(optionals.get(`${id} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} Energy`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray) + ).pipe( + map(([total, investment, consumption, recurring, nonRecurring], year) => ({ + year, + investment, + consumption, + recurring, + nonRecurring, + total + })), + toArray() + ); + }) + ), + [] +); + +// alternative +export const [useAltNPV, altNPV] = bind( + combineLatest([ResultModel.selectedMeasure$]).pipe( + map(([measure]) => { + return [ + { category: "Investment", alternative: measure.totalTagFlows["Initial Investment"] }, + { category: "Energy", subcategory: "Consumption", alternative: measure.totalTagFlows.Energy }, + { subcategory: "Demand" }, + { subcategory: "Rebates" }, + { category: "Water", subcategory: "Usage" }, + { subcategory: "Disposal " }, + { category: "OMR", subcategory: "Recurring", alternative: measure.totalTagFlows["OMR Recurring"] }, + { subcategory: "Non-Recurring", alternative: measure.totalTagFlows["OMR Non-Recurring"] }, + { category: "Replacement" }, + { category: "Residual Value" } + ]; + }) + ), + [] +); + +export const [useResourceUsage, resourceUsage] = bind( + ResultModel.selectedMeasure$.pipe( + map((measure) => { + const consumption = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ].map((fuelType) => measure.totalTagFlows[fuelType]); + + const emissions = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ].map((fuelType) => measure.totalTagFlows[fuelType]); + + return [ + { + category: "Consumption", + subcategory: FuelType.ELECTRICITY, + consumption: consumption[0], + emissions: emissions[0] + }, + { subcategory: FuelType.NATURAL_GAS, consumption: consumption[1], emissions: emissions[1] }, + { subcategory: FuelType.DISTILLATE_OIL, consumption: consumption[2], emissions: emissions[2] }, + { subcategory: FuelType.RESIDUAL_OIL, consumption: consumption[3], emissions: emissions[3] }, + { subcategory: FuelType.PROPANE, consumption: consumption[4], emissions: emissions[4] }, + { subcategory: "Total", consumption: consumption[5], emissions: emissions[5] }, + { category: "Water", subcategory: "Use" } + ]; + }) + ), + [] +); From 854ce67d3eb92d3477cb6f5e95b1069fba3d5cea Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 19 Dec 2024 15:00:52 -0500 Subject: [PATCH 09/24] update pdf packages --- frontend/package.json | 126 +++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 62 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index 7f2d2d08..94378ca2 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,64 +1,66 @@ { - "name": "blcc", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "watch": "vite build --watch", - "preview": "vite preview", - "lint": "eslint --fix \"**/*.tsx\"", - "test": "vitest", - "test:browser": "vitest --workspace=vitest.workspace.ts", - "cy:open": "cypress open" - }, - "dependencies": { - "@lrd/e3-sdk": "^1.0.11", - "@mdi/js": "^7.4.47", - "@mdi/react": "^1.6.1", - "@react-rxjs/core": "^0.10.7", - "@react-rxjs/utils": "^0.9.7", - "antd": "^5.18.0", - "billboard.js": "^3.12.2", - "convert": "^5.2.0", - "decimal.js": "^10.4.3", - "dexie": "^3.2.7", - "dexie-export-import": "^4.1.2", - "fast-xml-parser": "4.4.1", - "fp-ts": "^2.16.9", - "framer-motion": "^11.2.10", - "html-to-react": "^1.7.0", - "monocle-ts": "^2.3.13", - "object-hash": "^3.0.0", - "optics-ts": "^2.4.1", - "react": "^18.3.1", - "react-data-grid": "7.0.0-beta.43", - "react-dom": "^18.3.1", - "react-router-dom": "^6.23.1", - "rxjs": "^7.8.1", - "ts-pattern": "^5.1.2", - "zod": "^3.23.8" - }, - "devDependencies": { - "@biomejs/biome": "^1.9.4", - "@types/object-hash": "^3.0.6", - "@types/react": "^18.3.3", - "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.3", - "@vitest/browser": "^2.1.4", - "autoprefixer": "^10.4.19", - "cypress": "^13.15.2", - "playwright": "^1.48.2", - "postcss": "^8.4.38", - "postcss-import": "^16.1.0", - "sass": "^1.80.6", - "tailwindcss": "^3.4.14", - "typescript": "^5.6.3", - "vite": "5.4.11", - "vite-plugin-svgr": "^4.3.0", - "vite-tsconfig-paths": "^5.1.2", - "vitest": "^2.1.4", - "vitest-browser-react": "^0.0.3" - } + "name": "blcc", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "watch": "vite build --watch", + "preview": "vite preview", + "lint": "eslint --fix \"**/*.tsx\"", + "test": "vitest", + "test:browser": "vitest --workspace=vitest.workspace.ts", + "cy:open": "cypress open" + }, + "dependencies": { + "@lrd/e3-sdk": "^1.0.11", + "@mdi/js": "^7.4.47", + "@mdi/react": "^1.6.1", + "@react-pdf/renderer": "^4.0.0", + "@react-rxjs/core": "^0.10.7", + "@react-rxjs/utils": "^0.9.7", + "antd": "^5.18.0", + "billboard.js": "^3.12.2", + "convert": "^5.2.0", + "decimal.js": "^10.4.3", + "dexie": "^3.2.7", + "dexie-export-import": "^4.1.2", + "fast-xml-parser": "4.4.1", + "fp-ts": "^2.16.9", + "framer-motion": "^11.2.10", + "html-to-react": "^1.7.0", + "monocle-ts": "^2.3.13", + "object-hash": "^3.0.0", + "optics-ts": "^2.4.1", + "react": "^18.3.1", + "react-data-grid": "7.0.0-beta.43", + "react-dom": "^18.3.1", + "react-pdf": "^9.1.1", + "react-router-dom": "^6.23.1", + "rxjs": "^7.8.1", + "ts-pattern": "^5.1.2", + "zod": "^3.23.8" + }, + "devDependencies": { + "@biomejs/biome": "^1.9.4", + "@types/object-hash": "^3.0.6", + "@types/react": "^18.3.3", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.3", + "@vitest/browser": "^2.1.4", + "autoprefixer": "^10.4.19", + "cypress": "^13.15.2", + "playwright": "^1.48.2", + "postcss": "^8.4.38", + "postcss-import": "^16.1.0", + "sass": "^1.80.6", + "tailwindcss": "^3.4.14", + "typescript": "^5.6.3", + "vite": "5.4.11", + "vite-plugin-svgr": "^4.3.0", + "vite-tsconfig-paths": "^5.1.2", + "vitest": "^2.1.4", + "vitest-browser-react": "^0.0.3" + } } From 7583783ad91b1149618ea9954025f81e2a5190b3 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 24 Dec 2024 16:22:57 -0500 Subject: [PATCH 10/24] add result summary tables --- .../pdf-components/CostComponents.tsx | 29 ++-- .../components/pdf-components/InputTable.tsx | 7 +- .../pdf-components/Results/ResultsSummary.tsx | 10 +- .../Results/ResultsSummaryTables.tsx | 152 ++++++++++++++++++ 4 files changed, 177 insertions(+), 21 deletions(-) create mode 100644 frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx diff --git a/frontend/src/components/pdf-components/CostComponents.tsx b/frontend/src/components/pdf-components/CostComponents.tsx index e83a7536..dd01f8a5 100644 --- a/frontend/src/components/pdf-components/CostComponents.tsx +++ b/frontend/src/components/pdf-components/CostComponents.tsx @@ -16,7 +16,7 @@ interface Props { annualRateOfChange?: number; recurring?: any; // TODO: specify the correct type rateOfRecurrence?: number; - useIndex?: number[]; + useIndex?: number | number[]; phaseIn?: number[]; escalation?: any; // TODO: specify the correct type }; @@ -138,17 +138,22 @@ export const RateOfRecurrence = ({ cost }: Props) => ( ) : null} ); -export const UseIndex = ({ cost, year }: Props) => ( - <> - {cost?.useIndex && ( - - Usage Index:  - - - - )} - -); +export const UseIndex = ({ cost, year }: Props) => { + const value = Array.isArray(cost?.useIndex); + return ( + + Usage Index:  + {value ? ( + + + + + ) : ( + {cost?.useIndex}% + )} + + ); +}; export const PhaseIn = ({ cost, year }: Props) => ( <> diff --git a/frontend/src/components/pdf-components/InputTable.tsx b/frontend/src/components/pdf-components/InputTable.tsx index a13fe8bb..39a41d6e 100644 --- a/frontend/src/components/pdf-components/InputTable.tsx +++ b/frontend/src/components/pdf-components/InputTable.tsx @@ -31,10 +31,9 @@ const InputTable = (props: { cost; header: string; inputRows: number[]; year: nu const { header, inputRows, year } = props; - const tableRows = - inputRows?.map((val, idx: number) => { - return [year + idx, `${val * 100}%`]; - }) || []; + const tableRows = inputRows?.map((val, idx: number) => { + return [year + idx, `${val * 100}%`]; + }); return ( diff --git a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx index d577502b..1139a8d3 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx @@ -2,7 +2,7 @@ import { Text, View } from "@react-pdf/renderer"; import { styles } from "../pdfStyles"; -import ResultsTable from "./ResultsTable"; +import { LCCBaselineTable, LCCResourceTable, LCCResultsTable, NPVSubTable } from "./ResultsSummaryTables"; const lifeCycleResultsColumns = [ "Alternative", @@ -43,10 +43,10 @@ const ResultsSummary = (props: { altNames: string[]; summary }) => {
- - - - + + + + ); diff --git a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx new file mode 100644 index 00000000..ecc97cf9 --- /dev/null +++ b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx @@ -0,0 +1,152 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +const border = "1px solid #000"; +const fontSize = 10; + +const styles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff", + border + }, + row: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + textAlign: "center", + borderBottom: border, + borderRight: border, + borderLeft: border, + marginTop: 0 + }, + value: { + fontSize + }, + alt: { + fontSize: 10, + textAlign: "center", + borderRight: border + }, + cat: { + width: "100px", + fontSize: 10, + borderRight: border + // textAlign: "center" + }, + subCat: { + width: "100px", + fontSize: 10, + borderRight: border + // textAlign: "center" + } +}); + +export const LCCResultsTable = (props: { headers: string[]; rows }) => { + //TODO: specify type for cost + + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + + {rows.map((alt) => ( + + {alt.name} + ${alt.initialCost} + ${alt.initialCost} + ${alt.lifeCycleCost} + ${alt.energy} + ${alt.ghgEmissions} + ${alt.scc} + ${alt.lccScc} + + ))} + + ); +}; + +export const LCCBaselineTable = (props: { headers: string[]; rows }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + + {rows.map((alt) => ( + + {alt.name} + ${alt.initialCost} + ${alt.initialCost} + ${alt.sir} + ${alt.airr} + ${alt.deltaEnergy} + ${alt.deltaGhg} + ${alt.deltaScc} + ${alt.netSavings} + + ))} + + ); +}; + +export const NPVSubTable = (props: { headers: string[]; rows }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + + {rows.map((alt) => ( + + {alt.category} + {alt.subcategory} + ${alt["0"] || "0.00"} + ${alt["1"] || "0.00"} + + ))} + + ); +}; + +export const LCCResourceTable = (props: { headers: string[]; rows }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + + {rows.map((alt) => ( + + {alt.category} + {alt.subcategory} + ${alt["0"] || "0.00"} + ${alt["1"] || "0.00"} + + ))} + + ); +}; From 414d5205064b9330f42d2cdb39742599a749c87d Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Wed, 25 Dec 2024 11:21:19 -0500 Subject: [PATCH 11/24] add annual alternative tables --- frontend/src/components/ResultsAppBar.tsx | 10 +- .../Results/AnnualResultsPdf.tsx | 5 +- .../Results/AnnualResultsTables.tsx | 115 ++++++++++++++++++ .../Results/allResultStreams.tsx | 36 ++++++ 4 files changed, 159 insertions(+), 7 deletions(-) create mode 100644 frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index 747499db..a3c1a86f 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -18,10 +18,10 @@ import Pdf from "./Pdf"; import { altNPV, - annualAltNPV, lccBaseline, lccResourceRows, lccRows, + NpvAll, npvComparison, npvCosts, resourceUsage @@ -47,20 +47,20 @@ export default function ResultsAppBar() { lccBaseline, npvCosts, lccResourceRows, - annualAltNPV, npvComparison, altNPV, - resourceUsage + resourceUsage, + NpvAll ) ), - ([_, lccRows, lccBaseline, npvCosts, lccResourceRows, annualAltNPV, npvComparison, altNPV, resourceUsage]) => { + ([_, lccRows, lccBaseline, npvCosts, lccResourceRows, npvComparison, altNPV, resourceUsage, NpvAll]) => { const blob = pdf( ).toBlob(); diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx index ac2f81d0..63ab84ac 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -1,7 +1,7 @@ import { Text, View } from "@react-pdf/renderer"; import { styles } from "../pdfStyles"; -import ResultsTable from "./ResultsTable"; +import { NPVAltTable, NPVComparisonTable } from "./AnnualResultsTables"; const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { const { altNames, annual } = props; @@ -17,13 +17,14 @@ const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { NPV Cash Flow Comparison - + NPV Cash Flows Annual Results for Alternative {altNames.map((name) => ( {name} NPV Cash Flow by Alternative + NPV Cash Flows Tag/Object by Year diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx new file mode 100644 index 00000000..a4907f57 --- /dev/null +++ b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx @@ -0,0 +1,115 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +const border = "1px solid #000"; +const fontSize = 10; + +const styles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff", + border + }, + row: { + display: "flex", + flexDirection: "row", + justifyContent: "space-between", + textAlign: "center", + borderBottom: border, + borderRight: border, + // borderLeft: border, + marginTop: 0 + }, + value: { + fontSize + }, + alt: { + fontSize: 10, + // textAlign: "center", + borderRight: border + } +}); + +type npvAltTableType = { + year: number; + investment: number[]; + consumption: number[]; + recurring: number[]; + nonRecurring: number[]; + total: number[]; +}; + +const npvAltTableHeaders = [ + ["", "", "Energy", "", "", "Water", "", "OMR", "", "", "", ""], + [ + "Year", + "Investment", + "Consumption", + "Demand", + "Rebates", + "Use", + "Disposal", + "Recurring", + "Non-Recurring", + "Replace", + "Residual Value", + "Total" + ] +]; + +export const NPVComparisonTable = (props: { headers: string[]; rows }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + {header} + ))} + + + {rows.map((alt) => ( + + {alt.year} + ${alt["0"]} + ${alt["1"]} + + ))} + + ); +}; + +export const NPVAltTable = (props: { rows }) => { + const { rows } = props; + console.log(rows); + + return ( + + {/* results Table Header */} + {npvAltTableHeaders.map((headers, index) => ( + + {headers.map((header) => ( + {header} + ))} + + ))} + + {rows.map((altArray: npvAltTableType[], index: number) => ( + + {altArray.map((alt) => ( + + {alt.year} + ${alt.consumption} + ${alt.recurring} + ${alt.nonRecurring} + ${alt.total} + + ))} + + ))} + + ); +}; diff --git a/frontend/src/components/pdf-components/Results/allResultStreams.tsx b/frontend/src/components/pdf-components/Results/allResultStreams.tsx index fc82d2f4..fe4e4e2d 100644 --- a/frontend/src/components/pdf-components/Results/allResultStreams.tsx +++ b/frontend/src/components/pdf-components/Results/allResultStreams.tsx @@ -148,6 +148,42 @@ export const [useNPVComparison, npvComparison] = bind( [] ); +// @Luke to check +export const [useNpvAll, NpvAll] = bind( + combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( + switchMap(([allRequired, optionals]) => { + const defaultArray = Array(allRequired[0].totalCostsDiscounted.length).fill(0); + const all = allRequired.map((req, index) => { + const investment = from( + optionals.get(`${index} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray + ); + const consumption = from(optionals.get(`${index} Energy`)?.totalTagCashflowDiscounted ?? defaultArray); + const recurring = from( + optionals.get(`${index} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray + ); + const nonRecurring = from( + optionals.get(`${index} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray + ); + + return zip(from(req.totalCostsDiscounted), investment, consumption, recurring, nonRecurring).pipe( + map((values, year) => ({ + year, + investment: values[1], + consumption: values[2], + recurring: values[3], + nonRecurring: values[4], + total: values[0] + })), + toArray() + ); + }); + + return combineLatest(all); + }) + ), + [] +); + export const [useAnnualAltNPV, annualAltNPV] = bind( combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( switchMap(([allRequired, optionals, selectedID]) => { From 8e95e9c5a96108aa607855a57fb0355e1132c130 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Fri, 27 Dec 2024 11:22:53 -0500 Subject: [PATCH 12/24] stylings, types, polishing pt1 result tables --- .../Results/AlternativeResultsPdf.tsx | 14 +- .../Results/AlternativeResultsTables.tsx | 102 +++++++++++ .../Results/AnnualResultsPdf.tsx | 6 +- .../Results/AnnualResultsTables.tsx | 65 ++++--- .../pdf-components/Results/ResultsSummary.tsx | 9 +- .../Results/ResultsSummaryTables.tsx | 159 ++++++++++++------ .../Results/allResultStreams.tsx | 76 ++++----- 7 files changed, 303 insertions(+), 128 deletions(-) create mode 100644 frontend/src/components/pdf-components/Results/AlternativeResultsTables.tsx diff --git a/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx index e0615816..65eeeb9b 100644 --- a/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx @@ -1,10 +1,9 @@ import { Text, View } from "@react-pdf/renderer"; import { styles } from "../pdfStyles"; -import ResultsTable from "./ResultsTable"; +import { NpvAltCashflowTable, NpvAltResourceTable } from "./AlternativeResultsTables"; const AlternativeResultsPdf = (props: { altNames: string[]; altResults }) => { const { altNames, altResults } = props; - console.log(altResults); return ( @@ -15,13 +14,16 @@ const AlternativeResultsPdf = (props: { altNames: string[]; altResults }) => {
- {altNames.map((name) => ( - + {altNames.map((name, index) => ( + {name} NPV Cash Flow Comparison - + Energy and Water use, Emissions, and Social Cost of GHG - + Share of LCC Share of Energy Use diff --git a/frontend/src/components/pdf-components/Results/AlternativeResultsTables.tsx b/frontend/src/components/pdf-components/Results/AlternativeResultsTables.tsx new file mode 100644 index 00000000..6b6e5b9b --- /dev/null +++ b/frontend/src/components/pdf-components/Results/AlternativeResultsTables.tsx @@ -0,0 +1,102 @@ +import { StyleSheet, Text, View } from "@react-pdf/renderer"; +const border = "1px solid #000"; +const fontSize = 10; + +const styles = StyleSheet.create({ + container: { + display: "flex", + flexDirection: "row", + color: "#fff", + textAlign: "center", + backgroundColor: "#005fa3ff", + border, + textWrap: "wrap" + }, + row: { + display: "flex", + textWrap: "wrap", + flexDirection: "row", + textAlign: "center", + borderBottom: border, + borderRight: border, + borderLeft: border, + marginTop: 0 + }, + value: { + fontSize, + width: 130, + borderRight: "1px solid #fff" + }, + alt: { + width: 130, + fontSize: 10, + textAlign: "center", + borderRight: border + } +}); + +type npvAltCashFlowTableType = { + category: String; + subcategory: String; + alternative: number[]; +}; + +// ask Luke about this +type npvAltResourceTableType = { + category: String; + subcategory: String; + consumption?: number[]; + emissions?: number[]; + alternative?: number[]; +}; + +export const NpvAltCashflowTable = (props: { headers: string[]; rows: npvAltCashFlowTableType[] }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + + {header} + + ))} + + + {rows.map((alt) => ( + + {alt.category} + {alt.subcategory} + ${alt.alternative || "0.00"} + + ))} + + ); +}; + +export const NpvAltResourceTable = (props: { headers: string[]; rows: npvAltResourceTableType[] }) => { + const { headers, rows } = props; + + return ( + + {/* results Table Header */} + + {headers.map((header) => ( + + {header} + + ))} + + + {rows.map((alt, index: number) => ( + + {alt.category} + {alt.subcategory} + ${alt.consumption || "0.00"} + ${alt.emissions || "0.00"} + + ))} + + ); +}; diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx index 63ab84ac..e916cc96 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -20,11 +20,11 @@ const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { NPV Cash Flows Annual Results for Alternative - {altNames.map((name) => ( - + {altNames.map((name, index) => ( + {name} NPV Cash Flow by Alternative - + NPV Cash Flows Tag/Object by Year diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx index a4907f57..70fecf2d 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx @@ -6,7 +6,6 @@ const styles = StyleSheet.create({ container: { display: "flex", flexDirection: "row", - justifyContent: "space-between", color: "#fff", textAlign: "center", backgroundColor: "#005fa3ff", @@ -15,20 +14,20 @@ const styles = StyleSheet.create({ row: { display: "flex", flexDirection: "row", - justifyContent: "space-between", textAlign: "center", - borderBottom: border, - borderRight: border, - // borderLeft: border, + border, marginTop: 0 }, value: { - fontSize + width: 100, + fontSize, + borderRight: "1px solid #fff" }, alt: { fontSize: 10, - // textAlign: "center", - borderRight: border + textAlign: "center", + borderRight: border, + width: 100 } }); @@ -59,32 +58,36 @@ const npvAltTableHeaders = [ ] ]; -export const NPVComparisonTable = (props: { headers: string[]; rows }) => { +export const NPVComparisonTable = (props: { + headers: string[]; + rows: { year: number; key: number; "0": number; "1": number }[]; +}) => { const { headers, rows } = props; return ( - + {/* results Table Header */} {headers.map((header) => ( - {header} + + {header} + ))} - {rows.map((alt) => ( + {rows.map((alt: { year: number; key: number; "0": number; "1": number }) => ( {alt.year} - ${alt["0"]} - ${alt["1"]} + ${alt["0"] || "0.00"} + ${alt["1"] || "0.00"} ))} ); }; -export const NPVAltTable = (props: { rows }) => { +export const NPVAltTable = (props: { rows: npvAltTableType[] }) => { const { rows } = props; - console.log(rows); return ( @@ -92,22 +95,28 @@ export const NPVAltTable = (props: { rows }) => { {npvAltTableHeaders.map((headers, index) => ( {headers.map((header) => ( - {header} + + {header} + ))} ))} - {rows.map((altArray: npvAltTableType[], index: number) => ( - - {altArray.map((alt) => ( - - {alt.year} - ${alt.consumption} - ${alt.recurring} - ${alt.nonRecurring} - ${alt.total} - - ))} + {/* ask luke about this */} + {rows.map((alt: npvAltTableType, index: number) => ( + + {alt.year} + ${alt.consumption || "0.00"} + ${alt.recurring || "0.00"} + ${alt.nonRecurring || "0.00"} + ${alt.consumption || "0.00"} + ${alt.recurring || "0.00"} + ${alt.nonRecurring || "0.00"} + ${alt.total || "0.00"} + ${alt.consumption || "0.00"} + ${alt.recurring || "0.00"} + ${alt.nonRecurring || "0.00"} + ${alt.total || "0.00"} ))} diff --git a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx index 1139a8d3..36f1f569 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx @@ -19,7 +19,6 @@ const lifeCycleResultsBaseline = [ "Alternative", "Base Case", "Initial Cost", - "Life Cycle Cost", "SIRR", "AIRR", "SPP", @@ -43,10 +42,14 @@ const ResultsSummary = (props: { altNames: string[]; summary }) => {
+ Life Cycle Results Comparison + Life Cycle Results Relative to Baseline Alternative - - + NPV Costs by Cost Subcategory + + Life Cycle Resource Consumption and Emissions Comparison + ); diff --git a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx index ecc97cf9..80663ded 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx @@ -6,7 +6,6 @@ const styles = StyleSheet.create({ container: { display: "flex", flexDirection: "row", - justifyContent: "space-between", color: "#fff", textAlign: "center", backgroundColor: "#005fa3ff", @@ -15,136 +14,200 @@ const styles = StyleSheet.create({ row: { display: "flex", flexDirection: "row", - justifyContent: "space-between", textAlign: "center", borderBottom: border, borderRight: border, borderLeft: border, - marginTop: 0 + marginTop: 0, + textWrap: "wrap" }, value: { - fontSize + fontSize, + textWrap: "wrap", + borderRight: "1px solid #fff", + width: 114 }, alt: { fontSize: 10, textAlign: "center", - borderRight: border + borderRight: border, + width: 114 }, cat: { - width: "100px", + width: 100, fontSize: 10, borderRight: border - // textAlign: "center" }, subCat: { - width: "100px", + width: 100, + fontSize: 10, + borderRight: border + }, + smallCol: { + width: 75, fontSize: 10, borderRight: border - // textAlign: "center" + }, + col1: { + fontSize: 10, + textAlign: "center", + borderRight: border, + width: 125 + }, + header1: { + fontSize, + textWrap: "wrap", + width: 125, + borderRight: "1px solid #fff" } }); -export const LCCResultsTable = (props: { headers: string[]; rows }) => { +type lccResults = { + name: string; + baseline: boolean; + initialCost: number; + lifeCycleCost: number; + energy: number; + ghgEmissions: number; + scc: number; + lccScc: number; +}; + +type lccBaseline = { + name: string; + baseline: boolean; + sir: number; + airr: number; + spp: number; + dpp: number; + initialCost: number; + deltaEnergy: number; + deltaGhg: number; + deltaScc: number; + netSavings: number; +}; + +type npvSubCat = { + category: string; + subcategory: string; +} & { + [key: string]: number; +}; + +export const LCCResultsTable = (props: { headers: string[]; rows: lccResults[] }) => { //TODO: specify type for cost const { headers, rows } = props; return ( - + {/* results Table Header */} {headers.map((header) => ( - {header} + + {header} + ))} {rows.map((alt) => ( {alt.name} - ${alt.initialCost} - ${alt.initialCost} - ${alt.lifeCycleCost} - ${alt.energy} - ${alt.ghgEmissions} - ${alt.scc} - ${alt.lccScc} + {/* change to base cost */} + ${alt.initialCost || "0.00"} + ${alt.initialCost || "0.00"} + ${alt.lifeCycleCost || "0.00"} + ${alt.energy || "0.00"} + ${alt.ghgEmissions || "0.00"} + ${alt.scc || "0.00"} + ${alt.lccScc || "0.00"} ))} ); }; -export const LCCBaselineTable = (props: { headers: string[]; rows }) => { +export const LCCBaselineTable = (props: { headers: string[]; rows: lccBaseline[] }) => { const { headers, rows } = props; - return ( {/* results Table Header */} - {headers.map((header) => ( - {header} - ))} + {headers.map((header) => { + let width = ["SIRR", "AIRR", "SPP", "DPP"].includes(header) ? 75 : 114; + return ( + + {header} + + ); + })} {rows.map((alt) => ( {alt.name} - ${alt.initialCost} - ${alt.initialCost} - ${alt.sir} - ${alt.airr} - ${alt.deltaEnergy} - ${alt.deltaGhg} - ${alt.deltaScc} - ${alt.netSavings} + ${alt.initialCost || "0.00"} + ${alt.initialCost || "0.00"} + ${alt.sir || "0.00"} + ${alt.airr || "0.00"} + ${alt.spp || "0.00"} + ${alt.dpp || "0.00"} + ${alt.deltaEnergy || "0.00"} + ${alt.deltaGhg || "0.00"} + ${alt.deltaScc || "0.00"} + ${alt.netSavings || "0.00"} ))} ); }; -export const NPVSubTable = (props: { headers: string[]; rows }) => { +export const NPVSubTable = (props: { headers: string[]; rows: npvSubCat[] }) => { const { headers, rows } = props; return ( - + {/* results Table Header */} {headers.map((header) => ( - {header} + + {header} + ))} {rows.map((alt) => ( - - {alt.category} - {alt.subcategory} - ${alt["0"] || "0.00"} - ${alt["1"] || "0.00"} + + {alt.category} + {alt.subcategory} + ${alt["0"] || "0.00"} + ${alt["1"] || "0.00"} ))} ); }; -export const LCCResourceTable = (props: { headers: string[]; rows }) => { +export const LCCResourceTable = (props: { headers: string[]; rows: npvSubCat[] }) => { const { headers, rows } = props; return ( - + {/* results Table Header */} {headers.map((header) => ( - {header} + + {header} + ))} {rows.map((alt) => ( - - {alt.category} - {alt.subcategory} - ${alt["0"] || "0.00"} - ${alt["1"] || "0.00"} + + {alt.category} + {alt.subcategory} + ${alt["0"] || "0.00"} + ${alt["1"] || "0.00"} ))} diff --git a/frontend/src/components/pdf-components/Results/allResultStreams.tsx b/frontend/src/components/pdf-components/Results/allResultStreams.tsx index fe4e4e2d..16b2ebeb 100644 --- a/frontend/src/components/pdf-components/Results/allResultStreams.tsx +++ b/frontend/src/components/pdf-components/Results/allResultStreams.tsx @@ -218,60 +218,56 @@ export const [useAnnualAltNPV, annualAltNPV] = bind( // alternative export const [useAltNPV, altNPV] = bind( - combineLatest([ResultModel.selectedMeasure$]).pipe( + combineLatest([ResultModel.measures$]).pipe( map(([measure]) => { - return [ - { category: "Investment", alternative: measure.totalTagFlows["Initial Investment"] }, - { category: "Energy", subcategory: "Consumption", alternative: measure.totalTagFlows.Energy }, + return measure.map((req) => [ + { category: "Investment", alternative: req.totalTagFlows["Initial Investment"] }, + { category: "Energy", subcategory: "Consumption", alternative: req.totalTagFlows.Energy }, { subcategory: "Demand" }, { subcategory: "Rebates" }, { category: "Water", subcategory: "Usage" }, - { subcategory: "Disposal " }, - { category: "OMR", subcategory: "Recurring", alternative: measure.totalTagFlows["OMR Recurring"] }, - { subcategory: "Non-Recurring", alternative: measure.totalTagFlows["OMR Non-Recurring"] }, + { subcategory: "Disposal" }, + { category: "OMR", subcategory: "Recurring", alternative: req.totalTagFlows["OMR Recurring"] }, + { subcategory: "Non-Recurring", alternative: req.totalTagFlows["OMR Non-Recurring"] }, { category: "Replacement" }, { category: "Residual Value" } - ]; + ]); }) ), [] ); export const [useResourceUsage, resourceUsage] = bind( - ResultModel.selectedMeasure$.pipe( - map((measure) => { - const consumption = [ - FuelType.ELECTRICITY, - FuelType.NATURAL_GAS, - FuelType.DISTILLATE_OIL, - FuelType.RESIDUAL_OIL, - FuelType.PROPANE, - "Energy" - ].map((fuelType) => measure.totalTagFlows[fuelType]); + combineLatest([ResultModel.measures$]).pipe( + map(([measureArray]) => { + return measureArray.map((measure) => { + const fuelTypes = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ]; - const emissions = [ - FuelType.ELECTRICITY, - FuelType.NATURAL_GAS, - FuelType.DISTILLATE_OIL, - FuelType.RESIDUAL_OIL, - FuelType.PROPANE, - "Energy" - ].map((fuelType) => measure.totalTagFlows[fuelType]); + const consumption = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); + const emissions = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); - return [ - { - category: "Consumption", - subcategory: FuelType.ELECTRICITY, - consumption: consumption[0], - emissions: emissions[0] - }, - { subcategory: FuelType.NATURAL_GAS, consumption: consumption[1], emissions: emissions[1] }, - { subcategory: FuelType.DISTILLATE_OIL, consumption: consumption[2], emissions: emissions[2] }, - { subcategory: FuelType.RESIDUAL_OIL, consumption: consumption[3], emissions: emissions[3] }, - { subcategory: FuelType.PROPANE, consumption: consumption[4], emissions: emissions[4] }, - { subcategory: "Total", consumption: consumption[5], emissions: emissions[5] }, - { category: "Water", subcategory: "Use" } - ]; + return [ + { + category: "Consumption", + subcategory: FuelType.ELECTRICITY, + consumption: consumption[0], + emissions: emissions[0] + }, + { subcategory: FuelType.NATURAL_GAS, consumption: consumption[1], emissions: emissions[1] }, + { subcategory: FuelType.DISTILLATE_OIL, consumption: consumption[2], emissions: emissions[2] }, + { subcategory: FuelType.RESIDUAL_OIL, consumption: consumption[3], emissions: emissions[3] }, + { subcategory: FuelType.PROPANE, consumption: consumption[4], emissions: emissions[4] }, + { subcategory: "Total", consumption: consumption[5], emissions: emissions[5] }, + { category: "Water", subcategory: "Use" } + ]; + }); }) ), [] From f8da067970bb5fee463af910dcc235f9034acd7e Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 16 Jan 2025 11:37:56 -0500 Subject: [PATCH 13/24] display 1 graph for test --- frontend/src/components/Pdf.tsx | 21 +++++- frontend/src/components/ResultsAppBar.tsx | 69 ++++++++++++++----- .../src/components/pdf-components/Results.tsx | 6 +- .../Results/AnnualResultsPdf.tsx | 34 ++++++++- 4 files changed, 102 insertions(+), 28 deletions(-) diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index ffaa15d5..4dff45bd 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -9,8 +9,17 @@ import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; import { styles } from "./pdf-components/pdfStyles"; import Results from "./pdf-components/Results"; -const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost[]; summary; annual; altResults }) => { - const { project, alternatives, costs, summary, annual, altResults } = props; +const Pdf = (props: { + project: Project; + alternatives: Alternative[]; + costs: Cost[]; + summary; + annual; + altResults; + graphSources; +}) => { + const { project, alternatives, costs, summary, annual, altResults, graphSources } = props; + console.log(alternatives, costs); return ( @@ -31,7 +40,13 @@ const Pdf = (props: { project: Project; alternatives: Alternative[]; costs: Cost - + diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index a3c1a86f..6bd1614b 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -7,10 +7,11 @@ import ButtonBar from "components/ButtonBar"; import HelpButtons from "components/HelpButtons"; import { Button, ButtonType } from "components/input/Button"; import { useSubscribe } from "hooks/UseSubscribe"; +import * as htmlToImage from "html-to-image"; import { costs$, Model, useAlternatives, useProject } from "model/Model"; import { ResultModel } from "model/ResultModel"; import { db } from "model/db"; -import React from "react"; +import { useCallback } from "react"; import { useNavigate } from "react-router-dom"; import { Subject, withLatestFrom } from "rxjs"; import { download } from "util/DownloadFile"; @@ -40,6 +41,42 @@ export default function ResultsAppBar() { costs = data; }); + const generatePdf = useCallback( + (_, lccRows, lccBaseline, npvCosts, lccResourceRows, npvComparison, altNPV, resourceUsage, NpvAll) => { + const pdfGraphs = document.getElementsByClassName("result-graph"); + + // if (pdfGraphs.length === 0) return; + + const promises = [...pdfGraphs].map((graph) => + htmlToImage.toPng(graph as HTMLElement).then((graphSrc) => graphSrc) + ); + + Promise.all(promises).then((graphSources) => { + console.log(graphSources); + const blob = pdf( + + ).toBlob(); + + blob.then((blob: Blob | MediaSource) => { + const url = window.URL.createObjectURL(blob); + const link = document.createElement("a"); + link.href = url; + link.download = "BLCC Report.pdf"; + link.click(); + }); + }); + }, + [project] + ); + useSubscribe( pdfClick$.pipe( withLatestFrom( @@ -54,24 +91,18 @@ export default function ResultsAppBar() { ) ), ([_, lccRows, lccBaseline, npvCosts, lccResourceRows, npvComparison, altNPV, resourceUsage, NpvAll]) => { - const blob = pdf( - - ).toBlob(); - - blob.then((blob: Blob | MediaSource) => { - const url = window.URL.createObjectURL(blob); - const link = document.createElement("a"); - link.href = url; - link.download = "BLCC Report.pdf"; - link.click(); - }); + console.log("clicked"); + generatePdf( + _, + lccRows, + lccBaseline, + npvCosts, + lccResourceRows, + npvComparison, + altNPV, + resourceUsage, + NpvAll + ); } ); //TODO Create and download PDF diff --git a/frontend/src/components/pdf-components/Results.tsx b/frontend/src/components/pdf-components/Results.tsx index 6ebd5c27..46f4427d 100644 --- a/frontend/src/components/pdf-components/Results.tsx +++ b/frontend/src/components/pdf-components/Results.tsx @@ -6,8 +6,8 @@ import AlternativeResultsPdf from "./Results/AlternativeResultsPdf"; import AnnualResultsPdf from "./Results/AnnualResultsPdf"; import ResultsSummary from "./Results/ResultsSummary"; -const Results = (props: { alternatives: Alternative[]; summary; annual; altResults }) => { - const { alternatives, summary, annual, altResults } = props; +const Results = (props: { alternatives: Alternative[]; summary; annual; altResults; graphs }) => { + const { alternatives, summary, annual, altResults, graphs } = props; const altNames = alternatives.map((alternative) => alternative.name); @@ -19,7 +19,7 @@ const Results = (props: { alternatives: Alternative[]; summary; annual; altResul
- +
); diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx index e916cc96..510edb8c 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -1,11 +1,34 @@ -import { Text, View } from "@react-pdf/renderer"; +import { Image, Text, View } from "@react-pdf/renderer"; +import * as htmlToImage from "html-to-image"; +import { useEffect, useState } from "react"; import { styles } from "../pdfStyles"; import { NPVAltTable, NPVComparisonTable } from "./AnnualResultsTables"; -const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { - const { altNames, annual } = props; +const AnnualResultsPdf = (props: { altNames: string[]; annual; graphs }) => { + const { altNames, annual, graphs } = props; console.log(annual); + // const [srcs, setSrcs] = useState([]); + + // useEffect(() => { + // const generateImages = async () => { + // const pdfGraphs = document.getElementsByClassName("result-graph"); + + // if (pdfGraphs.length === 0) return; + + // const promises = [...pdfGraphs].map((graph) => htmlToImage.toPng(graph)); + + // try { + // const generatedSrcs = await Promise.all(promises); + // setSrcs(generatedSrcs); + // console.log(generatedSrcs); // Update state with generated image sources + // } catch (error) { + // console.error("Error generating images:", error); + // } + // }; + + // generateImages(); + // }, [srcs]); return ( @@ -30,6 +53,11 @@ const AnnualResultsPdf = (props: { altNames: string[]; annual }) => { ))}
+ + {graphs.map((src, index) => ( + + ))} +
); }; From 7ee3659ddb8cf6abf553b3979b70f0d49b8ac370 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 16 Jan 2025 11:39:26 -0500 Subject: [PATCH 14/24] add html-to-image package --- frontend/package-lock.json | 3094 +++++++++++++++++++++++------------- frontend/package.json | 1 + 2 files changed, 1993 insertions(+), 1102 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 55e12480..33576723 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -21,34 +21,42 @@ "dexie": "^3.2.7", "dexie-export-import": "^4.1.2", "fast-xml-parser": "4.4.1", + "fp-ts": "^2.16.9", "framer-motion": "^11.2.10", + "html-to-image": "^1.11.11", "html-to-react": "^1.7.0", + "monocle-ts": "^2.3.13", "object-hash": "^3.0.0", + "optics-ts": "^2.4.1", "react": "^18.3.1", "react-data-grid": "7.0.0-beta.43", "react-dom": "^18.3.1", "react-pdf": "^9.1.1", "react-router-dom": "^6.23.1", "rxjs": "^7.8.1", - "ts-pattern": "^5.1.2" + "ts-pattern": "^5.1.2", + "zod": "^3.23.8" }, "devDependencies": { - "@biomejs/biome": "^1.8.0", + "@biomejs/biome": "^1.9.4", "@types/object-hash": "^3.0.6", "@types/react": "^18.3.3", "@types/react-dom": "^18.3.0", - "@vitejs/plugin-react": "^4.3.0", + "@vitejs/plugin-react": "^4.3.3", + "@vitest/browser": "^2.1.4", "autoprefixer": "^10.4.19", - "cypress": "^13.15.0", + "cypress": "^13.15.2", + "playwright": "^1.48.2", "postcss": "^8.4.38", "postcss-import": "^16.1.0", - "sass": "^1.77.4", - "tailwindcss": "^3.4.3", - "typescript": "^5.4.5", - "vite": "5.4.6", - "vite-plugin-svgr": "^4.2.0", - "vite-tsconfig-paths": "^4.3.2", - "vitest": "^0.34.6" + "sass": "^1.80.6", + "tailwindcss": "^3.4.14", + "typescript": "^5.6.3", + "vite": "5.4.11", + "vite-plugin-svgr": "^4.3.0", + "vite-tsconfig-paths": "^5.1.2", + "vitest": "^2.1.4", + "vitest-browser-react": "^0.0.3" } }, "node_modules/@alloc/quick-lru": { @@ -167,12 +175,13 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", - "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "dependencies": { - "@babel/highlight": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -180,30 +189,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", - "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", - "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz", + "integrity": "sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/helper-compilation-targets": "^7.25.7", - "@babel/helper-module-transforms": "^7.25.7", - "@babel/helpers": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7", + "@babel/code-frame": "^7.26.0", + "@babel/generator": "^7.26.0", + "@babel/helper-compilation-targets": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helpers": "^7.26.0", + "@babel/parser": "^7.26.0", + "@babel/template": "^7.25.9", + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.26.0", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -219,12 +228,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", - "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, "dependencies": { - "@babel/types": "^7.25.7", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -234,13 +244,13 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", - "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz", + "integrity": "sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.7", - "@babel/helper-validator-option": "^7.25.7", + "@babel/compat-data": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -250,28 +260,27 @@ } }, "node_modules/@babel/helper-module-imports": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", - "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz", + "integrity": "sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==", "dev": true, "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", - "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz", + "integrity": "sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.25.7", - "@babel/helper-simple-access": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "@babel/traverse": "^7.25.7" + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -281,89 +290,61 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", - "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", - "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz", + "integrity": "sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==", "dev": true, - "dependencies": { - "@babel/traverse": "^7.25.7", - "@babel/types": "^7.25.7" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", - "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", - "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", - "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", - "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", - "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.0.tgz", + "integrity": "sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.25.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", - "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "dependencies": { - "@babel/types": "^7.25.7" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -373,12 +354,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", - "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.9.tgz", + "integrity": "sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -388,12 +369,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", - "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.9.tgz", + "integrity": "sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.25.7" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -414,30 +395,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", - "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.9.tgz", + "integrity": "sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/types": "^7.25.7" + "@babel/code-frame": "^7.25.9", + "@babel/parser": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", - "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.25.7", - "@babel/generator": "^7.25.7", - "@babel/parser": "^7.25.7", - "@babel/template": "^7.25.7", - "@babel/types": "^7.25.7", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", + "@babel/template": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -446,23 +427,22 @@ } }, "node_modules/@babel/types": { - "version": "7.25.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", - "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.25.7", - "@babel/helper-validator-identifier": "^7.25.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@biomejs/biome": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.3.tgz", - "integrity": "sha512-POjAPz0APAmX33WOQFGQrwLvlu7WLV4CFJMlB12b6ZSg+2q6fYu9kZwLCOA+x83zXfcPd1RpuWOKJW0GbBwLIQ==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-1.9.4.tgz", + "integrity": "sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==", "dev": true, "hasInstallScript": true, "bin": { @@ -476,20 +456,132 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "1.9.3", - "@biomejs/cli-darwin-x64": "1.9.3", - "@biomejs/cli-linux-arm64": "1.9.3", - "@biomejs/cli-linux-arm64-musl": "1.9.3", - "@biomejs/cli-linux-x64": "1.9.3", - "@biomejs/cli-linux-x64-musl": "1.9.3", - "@biomejs/cli-win32-arm64": "1.9.3", - "@biomejs/cli-win32-x64": "1.9.3" + "@biomejs/cli-darwin-arm64": "1.9.4", + "@biomejs/cli-darwin-x64": "1.9.4", + "@biomejs/cli-linux-arm64": "1.9.4", + "@biomejs/cli-linux-arm64-musl": "1.9.4", + "@biomejs/cli-linux-x64": "1.9.4", + "@biomejs/cli-linux-x64-musl": "1.9.4", + "@biomejs/cli-win32-arm64": "1.9.4", + "@biomejs/cli-win32-x64": "1.9.4" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-1.9.4.tgz", + "integrity": "sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-1.9.4.tgz", + "integrity": "sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-1.9.4.tgz", + "integrity": "sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.9.4.tgz", + "integrity": "sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-1.9.4.tgz", + "integrity": "sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-x64-musl": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-1.9.4.tgz", + "integrity": "sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-1.9.4.tgz", + "integrity": "sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" } }, "node_modules/@biomejs/cli-win32-x64": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.3.tgz", - "integrity": "sha512-cQMy2zanBkVLpmmxXdK6YePzmZx0s5Z7KEnwmrW54rcXK3myCNbQa09SwGZ8i/8sLw0H9F3X7K4rxVNGU8/D4Q==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-1.9.4.tgz", + "integrity": "sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==", "cpu": [ "x64" ], @@ -502,6 +594,58 @@ "node": ">=14.21.3" } }, + "node_modules/@bundled-es-modules/cookie": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", + "dev": true, + "dependencies": { + "cookie": "^0.7.2" + } + }, + "node_modules/@bundled-es-modules/statuses": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz", + "integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==", + "dev": true, + "dependencies": { + "statuses": "^2.0.1" + } + }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "dev": true, + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, + "node_modules/@bundled-es-modules/tough-cookie/node_modules/tough-cookie": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "dev": true, + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@bundled-es-modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -521,9 +665,9 @@ } }, "node_modules/@cypress/request": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.5.tgz", - "integrity": "sha512-v+XHd9XmWbufxF1/bTaVm2yhbxY+TB4YtWRqF2zaXBlDNMkls34KiATz0AVDLavL3iB6bQk9/7n3oY1EoLSWGA==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@cypress/request/-/request-3.0.7.tgz", + "integrity": "sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -539,9 +683,9 @@ "json-stringify-safe": "~5.0.1", "mime-types": "~2.1.19", "performance-now": "^2.1.0", - "qs": "6.13.0", + "qs": "6.13.1", "safe-buffer": "^5.1.2", - "tough-cookie": "^4.1.3", + "tough-cookie": "^5.0.0", "tunnel-agent": "^0.6.0", "uuid": "^8.3.2" }, @@ -578,182 +722,630 @@ "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==" }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.1.tgz", + "integrity": "sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==", + "dev": true, + "dependencies": { + "@inquirer/core": "^10.1.2", + "@inquirer/type": "^3.0.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.2.tgz", + "integrity": "sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==", + "dev": true, + "dependencies": { + "@inquirer/figures": "^1.0.9", + "@inquirer/type": "^3.0.2", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/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/@inquirer/core/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/@inquirer/core/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/@inquirer/core/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/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.9.tgz", + "integrity": "sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.2.tgz", + "integrity": "sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==", + "dev": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lrd/e3-sdk": { + "version": "1.0.11", + "resolved": "https://gitlab.nist.gov/gitlab/api/v4/projects/8142/packages/npm/@lrd/e3-sdk/-/@lrd/e3-sdk-1.0.11.tgz", + "integrity": "sha1-IPYwfZwszW0opJfFUrtosnn5Org=" + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@mdi/js": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", + "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==" + }, + "node_modules/@mdi/react": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", + "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", + "dependencies": { + "prop-types": "^15.7.2" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.5", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.5.tgz", + "integrity": "sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==", + "dev": true, + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "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/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "dev": true + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "dev": true, + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "dev": true + }, + "node_modules/@parcel/watcher": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.0.tgz", + "integrity": "sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.0", + "@parcel/watcher-darwin-arm64": "2.5.0", + "@parcel/watcher-darwin-x64": "2.5.0", + "@parcel/watcher-freebsd-x64": "2.5.0", + "@parcel/watcher-linux-arm-glibc": "2.5.0", + "@parcel/watcher-linux-arm-musl": "2.5.0", + "@parcel/watcher-linux-arm64-glibc": "2.5.0", + "@parcel/watcher-linux-arm64-musl": "2.5.0", + "@parcel/watcher-linux-x64-glibc": "2.5.0", + "@parcel/watcher-linux-x64-musl": "2.5.0", + "@parcel/watcher-win32-arm64": "2.5.0", + "@parcel/watcher-win32-ia32": "2.5.0", + "@parcel/watcher-win32-x64": "2.5.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz", + "integrity": "sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz", + "integrity": "sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz", + "integrity": "sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz", + "integrity": "sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz", + "integrity": "sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz", + "integrity": "sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==", "cpu": [ - "x64" + "arm" ], "dev": true, "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + "node": ">= 10.0.0" }, - "engines": { - "node": ">=12" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz", + "integrity": "sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "node": ">= 10.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz", + "integrity": "sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz", + "integrity": "sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz", + "integrity": "sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@lrd/e3-sdk": { - "version": "1.0.11", - "resolved": "https://gitlab.nist.gov/gitlab/api/v4/projects/8142/packages/npm/@lrd/e3-sdk/-/@lrd/e3-sdk-1.0.11.tgz", - "integrity": "sha1-IPYwfZwszW0opJfFUrtosnn5Org=" - }, - "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", - "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", "optional": true, - "dependencies": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@mapbox/node-pre-gyp/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz", + "integrity": "sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==", + "cpu": [ + "arm64" + ], + "dev": true, "optional": true, - "bin": { - "semver": "bin/semver.js" - }, + "os": [ + "win32" + ], "engines": { - "node": ">=10" - } - }, - "node_modules/@mdi/js": { - "version": "7.4.47", - "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", - "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==" - }, - "node_modules/@mdi/react": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@mdi/react/-/react-1.6.1.tgz", - "integrity": "sha512-4qZeDcluDFGFTWkHs86VOlHkm6gnKaMql13/gpIcUQ8kzxHgpj31NuCkD8abECVfbULJ3shc7Yt4HJ6Wu6SN4w==", - "dependencies": { - "prop-types": "^15.7.2" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz", + "integrity": "sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz", + "integrity": "sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 8" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "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==", + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": ">= 8" + "node": ">=0.10" } }, "node_modules/@pkgjs/parseargs": { @@ -766,6 +1358,12 @@ "node": ">=14" } }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true + }, "node_modules/@rc-component/async-validator": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/@rc-component/async-validator/-/async-validator-5.0.4.tgz", @@ -1099,14 +1697,14 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", - "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "picomatch": "^4.0.2" }, "engines": { "node": ">=14.0.0" @@ -1120,6 +1718,24 @@ } } }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", @@ -1141,12 +1757,6 @@ "rxjs": ">=7" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-8.0.0.tgz", @@ -1368,6 +1978,44 @@ "tslib": "^2.4.0" } }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1406,24 +2054,15 @@ "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", "dev": true, "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/chai": { - "version": "4.3.20", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.20.tgz", - "integrity": "sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.5.tgz", - "integrity": "sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A==", - "dev": true, - "dependencies": { - "@types/chai": "*" + "@babel/types": "^7.20.7" } }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true + }, "node_modules/@types/d3-selection": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.10.tgz", @@ -1495,6 +2134,18 @@ "integrity": "sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==", "dev": true }, + "node_modules/@types/statuses": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.5.tgz", + "integrity": "sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==", + "dev": true + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", + "dev": true + }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -1506,14 +2157,14 @@ } }, "node_modules/@vitejs/plugin-react": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.2.tgz", - "integrity": "sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", "dev": true, "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", "@types/babel__core": "^7.20.5", "react-refresh": "^0.14.2" }, @@ -1521,72 +2172,146 @@ "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" + } + }, + "node_modules/@vitest/browser": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/browser/-/browser-2.1.8.tgz", + "integrity": "sha512-OWVvEJThRgxlNMYNVLEK/9qVkpRcLvyuKLngIV3Hob01P56NjPHprVBYn+rx4xAJudbM9yrCrywPIEuA3Xyo8A==", + "dev": true, + "dependencies": { + "@testing-library/dom": "^10.4.0", + "@testing-library/user-event": "^14.5.2", + "@vitest/mocker": "2.1.8", + "@vitest/utils": "2.1.8", + "magic-string": "^0.30.12", + "msw": "^2.6.4", + "sirv": "^3.0.0", + "tinyrainbow": "^1.2.0", + "ws": "^8.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "playwright": "*", + "vitest": "2.1.8", + "webdriverio": "*" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } } }, "node_modules/@vitest/expect": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", - "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz", + "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz", + "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.12" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "dependencies": { - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "chai": "^4.3.10" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", - "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz", + "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==", "dev": true, "dependencies": { - "@vitest/utils": "0.34.6", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" + "@vitest/utils": "2.1.8", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", - "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz", + "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==", "dev": true, "dependencies": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "@vitest/pretty-format": "2.1.8", + "magic-string": "^0.30.12", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", - "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz", + "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==", "dev": true, "dependencies": { - "tinyspy": "^2.1.1" + "tinyspy": "^3.0.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", - "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "@vitest/pretty-format": "2.1.8", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -1603,30 +2328,6 @@ "resolved": "https://registry.npmjs.org/abs-svg-path/-/abs-svg-path-0.1.1.tgz", "integrity": "sha512-d8XPSGjfyzlXC3Xx891DJRyZfqk5JU0BJrDQcsWomFIV1/BIzPW5HDH5iDdWpqWaav0YVIEzT1RHTwWr0FFshA==" }, - "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.4", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", - "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1689,15 +2390,18 @@ } }, "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==", + "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": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/antd": { @@ -1831,6 +2535,15 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-tree-filter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", @@ -1855,12 +2568,12 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/astral-regex": { @@ -2153,17 +2866,27 @@ "node": ">=6" } }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "dependencies": { - "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -2244,47 +2967,44 @@ "dev": true }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", + "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", "dev": true, "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "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==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/check-more-types": { @@ -2321,9 +3041,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", "dev": true, "funding": [ { @@ -2474,6 +3194,87 @@ "node": ">=8" } }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/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/cliui/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/cliui/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/cliui/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/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -2491,18 +3292,21 @@ } }, "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==", + "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.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "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==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/color-string": { "version": "1.9.1", @@ -2568,12 +3372,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "optional": true }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dev": true - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2591,6 +3389,15 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -2676,13 +3483,13 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/cypress": { - "version": "13.15.0", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.15.0.tgz", - "integrity": "sha512-53aO7PwOfi604qzOkCSzNlWquCynLlKE/rmmpSPcziRH6LNfaDUAklQT6WJIsD8ywxlIy+uVZsnTMCCQVd2kTw==", + "version": "13.17.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-13.17.0.tgz", + "integrity": "sha512-5xWkaPurwkIljojFidhw8lFScyxhtiFHl/i/3zov+1Z5CmY4t9tjIdvSXfu82Y3w7wt0uR9KkucbhkVvJZLQSA==", "dev": true, "hasInstallScript": true, "dependencies": { - "@cypress/request": "^3.0.4", + "@cypress/request": "^3.0.6", "@cypress/xvfb": "^1.2.4", "@types/sinonjs__fake-timers": "8.1.1", "@types/sizzle": "^2.3.2", @@ -2693,6 +3500,7 @@ "cachedir": "^2.3.0", "chalk": "^4.1.0", "check-more-types": "^2.24.0", + "ci-info": "^4.0.0", "cli-cursor": "^3.1.0", "cli-table3": "~0.6.1", "commander": "^6.2.1", @@ -2707,7 +3515,6 @@ "figures": "^3.2.0", "fs-extra": "^9.1.0", "getos": "^3.2.1", - "is-ci": "^3.0.1", "is-installed-globally": "~0.4.0", "lazy-ass": "^1.6.0", "listr2": "^3.8.3", @@ -2718,81 +3525,21 @@ "pretty-bytes": "^5.6.0", "process": "^0.11.10", "proxy-from-env": "1.0.0", - "request-progress": "^3.0.0", - "semver": "^7.5.3", - "supports-color": "^8.1.1", - "tmp": "~0.2.3", - "untildify": "^4.0.0", - "yauzl": "^2.10.0" - }, - "bin": { - "cypress": "bin/cypress" - }, - "engines": { - "node": "^16.0.0 || ^18.0.0 || >=20.0.0" - } - }, - "node_modules/cypress/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/cypress/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/cypress/node_modules/chalk/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" + "request-progress": "^3.0.0", + "semver": "^7.5.3", + "supports-color": "^8.1.1", + "tmp": "~0.2.3", + "tree-kill": "1.2.2", + "untildify": "^4.0.0", + "yauzl": "^2.10.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cypress/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" + "bin": { + "cypress": "bin/cypress" }, "engines": { - "node": ">=7.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, - "node_modules/cypress/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/cypress/node_modules/commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", @@ -2802,15 +3549,6 @@ "node": ">= 6" } }, - "node_modules/cypress/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/cypress/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -3116,34 +3854,14 @@ } }, "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, "engines": { "node": ">=6" } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3203,21 +3921,18 @@ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", "dev": true }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", @@ -3279,6 +3994,20 @@ "tslib": "^2.0.3" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3371,13 +4100,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -3391,6 +4117,24 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -3448,10 +4192,13 @@ } }, "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } }, "node_modules/eventemitter2": { "version": "6.4.7", @@ -3508,6 +4255,15 @@ "node": ">=4" } }, + "node_modules/expect-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", + "integrity": "sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -3697,6 +4453,11 @@ "node": ">= 6" } }, + "node_modules/fp-ts": { + "version": "2.16.9", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.16.9.tgz", + "integrity": "sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==" + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -3885,26 +4646,31 @@ "node": ">=6.9.0" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { - "node": "*" + "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", "dev": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3913,6 +4679,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -4009,12 +4788,12 @@ "dev": true }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4026,43 +4805,28 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "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==", + "node_modules/graphql": { + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.10.0.tgz", + "integrity": "sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==", "dev": true, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "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": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "engines": { "node": ">= 0.4" @@ -4089,6 +4853,12 @@ "node": ">= 0.4" } }, + "node_modules/headers-polyfill": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", + "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", + "dev": true + }, "node_modules/hsl-to-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-to-hex/-/hsl-to-hex-1.0.0.tgz", @@ -4102,6 +4872,11 @@ "resolved": "https://registry.npmjs.org/hsl-to-rgb-for-reals/-/hsl-to-rgb-for-reals-1.1.1.tgz", "integrity": "sha512-LgOWAkrN0rFaQpfdWBQlv/VhkOxb5AsBjk6NQVx4yEzWS923T07X0M1Y0VNko2H52HeSpZrZNNMJ0aFqsdVzQg==" }, + "node_modules/html-to-image": { + "version": "1.11.11", + "resolved": "https://registry.npmjs.org/html-to-image/-/html-to-image-1.11.11.tgz", + "integrity": "sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==" + }, "node_modules/html-to-react": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/html-to-react/-/html-to-react-1.7.0.tgz", @@ -4206,9 +4981,9 @@ ] }, "node_modules/immutable": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", - "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", "dev": true }, "node_modules/import-fresh": { @@ -4287,18 +5062,6 @@ "node": ">=8" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", - "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", - "dev": true, - "dependencies": { - "ci-info": "^3.2.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.15.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", @@ -4360,6 +5123,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "dev": true + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4481,9 +5250,9 @@ "dev": true }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "bin": { "jsesc": "bin/jsesc" @@ -4567,12 +5336,15 @@ } }, "node_modules/lilconfig": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", - "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -4617,39 +5389,6 @@ "node": ">=8" } }, - "node_modules/listr2/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/listr2/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/listr2/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/listr2/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -4699,18 +5438,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -4723,95 +5450,25 @@ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" }, "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/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/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/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/log-symbols/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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", "dev": true }, - "node_modules/log-symbols/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/log-symbols/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==", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update": { @@ -4841,39 +5498,6 @@ "node": ">=8" } }, - "node_modules/log-update/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/log-update/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/log-update/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/log-update/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -4949,13 +5573,10 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true }, "node_modules/lower-case": { "version": "2.0.2", @@ -4975,10 +5596,19 @@ "yallist": "^3.0.2" } }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -5015,6 +5645,15 @@ "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-engine": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/media-engine/-/media-engine-1.0.3.tgz", @@ -5182,16 +5821,21 @@ "node": ">=10" } }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", + "node_modules/monocle-ts": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/monocle-ts/-/monocle-ts-2.3.13.tgz", + "integrity": "sha512-D5Ygd3oulEoAm3KuGO0eeJIrhFf1jlQIoEVV2DYsZUMz42j4tGxgct97Aq68+F8w4w4geEnwFa8HayTS/7lpKQ==", + "peerDependencies": { + "fp-ts": "^2.5.0" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" + "engines": { + "node": ">=10" } }, "node_modules/ms": { @@ -5200,6 +5844,71 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "devOptional": true }, + "node_modules/msw": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.0.tgz", + "integrity": "sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@bundled-es-modules/cookie": "^2.0.1", + "@bundled-es-modules/statuses": "^1.0.1", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/until": "^2.1.0", + "@types/cookie": "^0.6.0", + "@types/statuses": "^2.0.4", + "graphql": "^16.8.1", + "headers-polyfill": "^4.0.2", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "strict-event-emitter": "^0.5.1", + "type-fest": "^4.26.1", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, + "peerDependencies": { + "typescript": ">= 4.8.x" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/msw/node_modules/type-fest": { + "version": "4.31.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.31.0.tgz", + "integrity": "sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mute-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -5245,6 +5954,13 @@ "tslib": "^2.0.3" } }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -5353,9 +6069,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "engines": { "node": ">= 0.4" @@ -5388,26 +6104,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/optics-ts": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/optics-ts/-/optics-ts-2.4.1.tgz", + "integrity": "sha512-HaYzMHvC80r7U/LqAd4hQyopDezC60PO2qF5GuIwALut2cl5rK1VWHsqTp0oqoJJWjiv6uXKqsO+Q2OO0C3MmQ==" + }, "node_modules/ospath": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/ospath/-/ospath-1.2.2.tgz", "integrity": "sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==", "dev": true }, - "node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/outvariant": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "dev": true }, "node_modules/p-map": { "version": "4.0.0", @@ -5516,6 +6228,12 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "dev": true + }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5541,12 +6259,12 @@ "dev": true }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/pdfjs-dist": { @@ -5574,9 +6292,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "node_modules/picomatch": { @@ -5609,15 +6327,48 @@ "node": ">= 6" } }, - "node_modules/pkg-types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", + "node_modules/playwright": { + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.49.1.tgz", + "integrity": "sha512-VYL8zLoNTBxVOrJBbDuRgDWa3i+mfQgDTrL8Ah9QXZ7ax4Dsj0MSq5bYgytRnDVVe+njoKnfsYkH3HzqVj5UZA==", "dev": true, "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" + "playwright-core": "1.49.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.49.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.49.1.tgz", + "integrity": "sha512-BzmpVcs4kE2CH15rWfzpjzVGhWERJfmnXmniSyKeRZUs9Ws65m+RGIi7mjJK/euCegfn3i7jvqWeWyHe9y3Vgg==", + "dev": true, + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/postcss": { @@ -5719,18 +6470,6 @@ } } }, - "node_modules/postcss-load-config/node_modules/lilconfig": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", - "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, "node_modules/postcss-nested": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", @@ -5787,17 +6526,26 @@ } }, "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", + "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "react-is": "^17.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/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/pretty-format/node_modules/ansi-styles": { @@ -5813,9 +6561,9 @@ } }, "node_modules/pretty-format/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", "dev": true }, "node_modules/process": { @@ -5844,10 +6592,16 @@ "dev": true }, "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "dev": true, + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } }, "node_modules/pump": { "version": "3.0.2", @@ -5869,9 +6623,9 @@ } }, "node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dev": true, "dependencies": { "side-channel": "^1.0.6" @@ -6651,6 +7405,15 @@ "throttleit": "^1.0.0" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -6891,13 +7654,13 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.79.4", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.4.tgz", - "integrity": "sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==", + "version": "1.83.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.83.1.tgz", + "integrity": "sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==", "dev": true, "dependencies": { "chokidar": "^4.0.0", - "immutable": "^4.0.0", + "immutable": "^5.0.2", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -6905,6 +7668,9 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, "node_modules/scheduler": { @@ -6938,23 +7704,6 @@ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "optional": true }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -6977,15 +7726,69 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -7051,11 +7854,25 @@ "is-arrayish": "^0.3.1" } }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sirv": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", + "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/slice-ansi": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", @@ -7070,39 +7887,6 @@ "node": ">=8" } }, - "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/snake-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/snake-case/-/snake-case-3.0.4.tgz", @@ -7153,10 +7937,25 @@ "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", "dev": true }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.8.0.tgz", + "integrity": "sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==", + "dev": true + }, + "node_modules/strict-event-emitter": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", "dev": true }, "node_modules/string_decoder": { @@ -7277,18 +8076,6 @@ "node": ">=6" } }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/strnum": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", @@ -7331,15 +8118,15 @@ } }, "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==", + "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": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -7366,33 +8153,33 @@ "dev": true }, "node_modules/tailwindcss": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.13.tgz", - "integrity": "sha512-KqjHOJKogOUt5Bs752ykCeiwvi0fKVkr5oqsFNt/8px/tA8scFPIlkygsf6jXrfCqGHz7VflA6+yytWuM+XhFw==", + "version": "3.4.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz", + "integrity": "sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==", "dev": true, "dependencies": { "@alloc/quick-lru": "^5.2.0", "arg": "^5.0.2", - "chokidar": "^3.5.3", + "chokidar": "^3.6.0", "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.2", "is-glob": "^4.0.3", - "jiti": "^1.21.0", - "lilconfig": "^2.1.0", - "micromatch": "^4.0.5", + "jiti": "^1.21.6", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", "object-hash": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.23", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", "postcss-import": "^15.1.0", "postcss-js": "^4.0.1", - "postcss-load-config": "^4.0.1", - "postcss-nested": "^6.0.1", - "postcss-selector-parser": "^6.0.11", - "resolve": "^1.22.2", - "sucrase": "^3.32.0" + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { "tailwind": "lib/cli.js", @@ -7559,24 +8346,57 @@ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "engines": { "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.71.tgz", + "integrity": "sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==", + "dev": true, + "dependencies": { + "tldts-core": "^6.1.71" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.71", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.71.tgz", + "integrity": "sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==", + "dev": true + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", @@ -7586,15 +8406,6 @@ "node": ">=14.14" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7612,28 +8423,25 @@ "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", "integrity": "sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==" }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, "engines": { "node": ">=6" } }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "node_modules/tough-cookie": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.0.0.tgz", + "integrity": "sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==", "dev": true, + "dependencies": { + "tldts": "^6.1.32" + }, "engines": { - "node": ">= 4.0.0" + "node": ">=16" } }, "node_modules/tr46": { @@ -7641,6 +8449,15 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, "node_modules/ts-interface-checker": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", @@ -7695,15 +8512,6 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, - "node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", @@ -7717,9 +8525,9 @@ } }, "node_modules/typescript": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", - "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -7729,12 +8537,6 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true - }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", @@ -7859,9 +8661,9 @@ } }, "node_modules/vite": { - "version": "5.4.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.6.tgz", - "integrity": "sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==", + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", "dev": true, "dependencies": { "esbuild": "^0.21.3", @@ -7931,46 +8733,45 @@ } }, "node_modules/vite-node": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", - "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz", + "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==", "dev": true, "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + "debug": "^4.3.7", + "es-module-lexer": "^1.5.4", + "pathe": "^1.1.2", + "vite": "^5.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/vite-plugin-svgr": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.2.0.tgz", - "integrity": "sha512-SC7+FfVtNQk7So0XMjrrtLAbEC8qjFPifyD7+fs/E6aaNdVde6umlVVh0QuwDLdOMu7vp5RiGFsB70nj5yo0XA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.3.0.tgz", + "integrity": "sha512-Jy9qLB2/PyWklpYy0xk0UU3TlU0t2UMpJXZvf+hWII1lAmRHrOUKi11Uw8N3rxoNk7atZNYO3pR3vI1f7oi+6w==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^5.0.5", + "@rollup/pluginutils": "^5.1.3", "@svgr/core": "^8.1.0", "@svgr/plugin-jsx": "^8.1.0" }, "peerDependencies": { - "vite": "^2.6.0 || 3 || 4 || 5" + "vite": ">=2.6.0" } }, "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", - "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", "dev": true, "dependencies": { "debug": "^4.1.1", @@ -7987,59 +8788,56 @@ } }, "node_modules/vitest": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", - "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.6", - "@vitest/runner": "0.34.6", - "@vitest/snapshot": "0.34.6", - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.10", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.6", - "why-is-node-running": "^2.2.2" + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz", + "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==", + "dev": true, + "dependencies": { + "@vitest/expect": "2.1.8", + "@vitest/mocker": "2.1.8", + "@vitest/pretty-format": "^2.1.8", + "@vitest/runner": "2.1.8", + "@vitest/snapshot": "2.1.8", + "@vitest/spy": "2.1.8", + "@vitest/utils": "2.1.8", + "chai": "^5.1.2", + "debug": "^4.3.7", + "expect-type": "^1.1.0", + "magic-string": "^0.30.12", + "pathe": "^1.1.2", + "std-env": "^3.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.1", + "tinypool": "^1.0.1", + "tinyrainbow": "^1.2.0", + "vite": "^5.0.0", + "vite-node": "2.1.8", + "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": ">=v14.18.0" + "node": "^18.0.0 || >=20.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", + "@types/node": "^18.0.0 || >=20.0.0", + "@vitest/browser": "2.1.8", + "@vitest/ui": "2.1.8", "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" + "jsdom": "*" }, "peerDependenciesMeta": { "@edge-runtime/vm": { "optional": true }, + "@types/node": { + "optional": true + }, "@vitest/browser": { "optional": true }, @@ -8051,14 +8849,33 @@ }, "jsdom": { "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { + } + } + }, + "node_modules/vitest-browser-react": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/vitest-browser-react/-/vitest-browser-react-0.0.3.tgz", + "integrity": "sha512-bNAE5ANYpGtwxdpN5qc4WxZnIjU0WYhOPMLAamm1/143tTBUFLHXe/rGSiy8q5xid/zrCRfC7AmKUA0LYNyUMg==", + "dev": true, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@types/react": ">18.0.0", + "@types/react-dom": ">18.0.0", + "@vitest/browser": ">=2.1.0", + "react": ">18.0.0", + "react-dom": ">18.0.0", + "vitest": ">=2.1.0" + }, + "peerDependenciesMeta": { + "@types/react": { "optional": true }, - "webdriverio": { + "@types/react-dom": { "optional": true } } @@ -8210,39 +9027,6 @@ "node": ">=8" } }, - "node_modules/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/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/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -8293,6 +9077,36 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "devOptional": true }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -8311,6 +9125,74 @@ "node": ">= 14" } }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/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/yargs/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/yargs/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/yargs/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/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", @@ -8321,13 +9203,13 @@ "fd-slicer": "~1.1.0" } }, - "node_modules/yocto-queue": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", - "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -8337,6 +9219,14 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.1.0.tgz", "integrity": "sha512-auzJ8lEovThZIpR8wLGWNo/JEj4VTO79q9/gOJ0dWb3shAYPFdX3t9VN0fC0v+jeQF77STUdCzebLwRMqzn5gQ==" + }, + "node_modules/zod": { + "version": "3.24.1", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.1.tgz", + "integrity": "sha512-muH7gBL9sI1nciMZV67X5fTKKBLtwpZ5VBp1vsOQzj1MhrBZ4wlVCm3gedKZWLp0Oyel8sIGfeiz54Su+OVT+A==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } } } diff --git a/frontend/package.json b/frontend/package.json index 94378ca2..fe2c581e 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,6 +29,7 @@ "fast-xml-parser": "4.4.1", "fp-ts": "^2.16.9", "framer-motion": "^11.2.10", + "html-to-image": "^1.11.11", "html-to-react": "^1.7.0", "monocle-ts": "^2.3.13", "object-hash": "^3.0.0", From c6758b9f736c02950b118d699f3c6fa234851f0e Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 16 Jan 2025 14:33:58 -0500 Subject: [PATCH 15/24] add resultstreams file --- frontend/src/components/allResultStreams.tsx | 274 +++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 frontend/src/components/allResultStreams.tsx diff --git a/frontend/src/components/allResultStreams.tsx b/frontend/src/components/allResultStreams.tsx new file mode 100644 index 00000000..7ab3cff0 --- /dev/null +++ b/frontend/src/components/allResultStreams.tsx @@ -0,0 +1,274 @@ +import { bind } from "@react-rxjs/core"; +import { FuelType } from "blcc-format/Format"; +import { alternatives$, baselineID$ } from "model/Model"; +import { ResultModel } from "model/ResultModel"; +import { combineLatest, from, switchMap, zip } from "rxjs"; +import { map, toArray } from "rxjs/operators"; +import { getOptionalTag } from "util/Util"; + +type LCCRow = { + name: string; + baseline: boolean; + initialCost: number; + lifeCycleCost: number; + energy: number; + ghgEmissions: number; + scc: number; + lccScc: number; +}; + +type npvRow = { + key: number; + year: number; + [key: string]: number; +}; + +// summary +export const [useLCCRows, lccRows] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( + map(([measures, alternativeNames, baselineID]) => + measures.map( + (measure) => + ({ + name: alternativeNames.get(measure.altId), + baseline: measure.altId === baselineID, + lifeCycleCost: measure.totalTagFlows.LCC, + initialCost: measure.totalTagFlows["Initial Investment"], + energy: measure.totalTagFlows.Energy, + ghgEmissions: measure.totalTagFlows.Emissions, + scc: measure.totalTagFlows.SCC, + lccScc: measure.totalCosts + } as LCCRow) + ) + ) + ), + [] +); + +export const [useLCCBaseline, lccBaseline] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( + map(([measures, names, baselineID]) => { + const baseline = measures.find((measure) => measure.altId === baselineID); + + return measures.map((measure) => ({ + name: names.get(measure.altId), + baseline: measure.altId === baselineID, + sir: measure.sir, + airr: measure.airr, + spp: measure.spp, + dpp: measure.dpp, + initialCost: measure.totalCosts, + deltaEnergy: (baseline?.totalTagFlows.Energy ?? 0) - measure.totalTagFlows.Energy, + deltaGhg: (baseline?.totalTagFlows.Emissions ?? 0) - measure.totalTagFlows.Emissions, + deltaScc: (baseline?.totalTagFlows.SCC ?? 0) - measure.totalTagFlows.SCC, + netSavings: measure.netSavings + measure.totalTagFlows.SCC + })); + }) + ), + [] +); + +export const [useNPVCosts, npvCosts] = bind( + combineLatest([ResultModel.measures$, ResultModel.alternativeNames$]).pipe( + map(([measures]) => { + return [ + { category: "Investment", ...getOptionalTag(measures, "Initial Investment") }, + { category: "Energy", subcategory: "Consumption", ...getOptionalTag(measures, "Energy") }, + { subcategory: "Demand", ...getOptionalTag(measures, "Demand Charge") }, + { subcategory: "Rebates", ...getOptionalTag(measures, "Rebate") }, + { category: "Water", subcategory: "Usage" }, + { subcategory: "Disposal " }, + { category: "OMR", subcategory: "Recurring", ...getOptionalTag(measures, "OMR Recurring") }, + { subcategory: "Non-Recurring", ...getOptionalTag(measures, "OMR Non-Recurring") }, + { category: "Replacement", ...getOptionalTag(measures, "Replacement Capital") }, + { category: "Residual Value", ...getOptionalTag(measures, "Residual Value") } + ]; + }) + ), + [] +); + +export const [useLCCResourceRows, lccResourceRows] = bind( + ResultModel.measures$.pipe( + map((measures) => { + const consumption = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ].map((fuelType) => getOptionalTag(measures, fuelType)); + + const emissions = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Emissions" + ].map((fuelType) => getOptionalTag(measures, `${fuelType} Emissions`)); + + return [ + { category: "Consumption", subcategory: FuelType.ELECTRICITY, ...consumption[0] }, + { subcategory: FuelType.NATURAL_GAS, ...consumption[1] }, + { subcategory: FuelType.DISTILLATE_OIL, ...consumption[2] }, + { subcategory: FuelType.RESIDUAL_OIL, ...consumption[3] }, + { subcategory: FuelType.PROPANE, ...consumption[4] }, + { subcategory: "Total", ...consumption[5] }, + { category: "Emissions", subcategory: FuelType.ELECTRICITY, ...emissions[0] }, + { subcategory: FuelType.NATURAL_GAS, ...emissions[1] }, + { subcategory: FuelType.DISTILLATE_OIL, ...emissions[2] }, + { subcategory: FuelType.RESIDUAL_OIL, ...emissions[3] }, + { subcategory: FuelType.PROPANE, ...emissions[4] }, + { subcategory: "Total", ...emissions[5] }, + { category: "Water", subcategory: "Use" } //TODO: Add in water usage category + ]; + }) + ), + [] +); + +// annual +export const [useNPVComparison, npvComparison] = bind( + ResultModel.required$.pipe( + switchMap((required) => + zip(required.map((required) => from(required.totalCostsDiscounted))).pipe( + map((values, year) => { + const result = { key: year, year } as npvRow; + values.forEach((value, i) => { + result[i.toString()] = value; + }); + return result; + }), + toArray() + ) + ) + ), + [] +); + +// @Luke to check +export const [useNpvAll, npvAll] = bind( + combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( + switchMap(([allRequired, optionals]) => { + const defaultArray = Array(allRequired[0].totalCostsDiscounted.length).fill(0); + const all = allRequired.map((req, index) => { + const investment = from( + optionals.get(`${index} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray + ); + const consumption = from(optionals.get(`${index} Energy`)?.totalTagCashflowDiscounted ?? defaultArray); + const recurring = from( + optionals.get(`${index} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray + ); + const nonRecurring = from( + optionals.get(`${index} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray + ); + + return zip(from(req.totalCostsDiscounted), investment, consumption, recurring, nonRecurring).pipe( + map((values, year) => ({ + year, + investment: values[1], + consumption: values[2], + recurring: values[3], + nonRecurring: values[4], + total: values[0] + })), + toArray() + ); + }); + + return combineLatest(all); + }) + ), + [] +); + +export const [useAnnualAltNPV, annualAltNPV] = bind( + combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( + switchMap(([allRequired, optionals, selectedID]) => { + const required = allRequired.find((req) => req.altId === selectedID); + + if (required === undefined) return []; + + const id = required.altId; + const defaultArray = Array.apply(null, Array(required.totalCostsDiscounted.length)).map(() => 0); + + return zip( + from(required.totalCostsDiscounted), + from(optionals.get(`${id} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} Energy`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray), + from(optionals.get(`${id} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray) + ).pipe( + map(([total, investment, consumption, recurring, nonRecurring], year) => ({ + year, + investment, + consumption, + recurring, + nonRecurring, + total + })), + toArray() + ); + }) + ), + [] +); + +// alternative +export const [useAltNPV, altNPV] = bind( + combineLatest([ResultModel.measures$]).pipe( + map(([measure]) => { + return measure.map((req) => [ + { category: "Investment", alternative: req.totalTagFlows["Initial Investment"] }, + { category: "Energy", subcategory: "Consumption", alternative: req.totalTagFlows.Energy }, + { subcategory: "Demand" }, + { subcategory: "Rebates" }, + { category: "Water", subcategory: "Usage" }, + { subcategory: "Disposal" }, + { category: "OMR", subcategory: "Recurring", alternative: req.totalTagFlows["OMR Recurring"] }, + { subcategory: "Non-Recurring", alternative: req.totalTagFlows["OMR Non-Recurring"] }, + { category: "Replacement" }, + { category: "Residual Value" } + ]); + }) + ), + [] +); + +export const [useResourceUsage, resourceUsage] = bind( + combineLatest([ResultModel.measures$]).pipe( + map(([measureArray]) => { + return measureArray.map((measure) => { + const fuelTypes = [ + FuelType.ELECTRICITY, + FuelType.NATURAL_GAS, + FuelType.DISTILLATE_OIL, + FuelType.RESIDUAL_OIL, + FuelType.PROPANE, + "Energy" + ]; + + const consumption = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); + const emissions = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); + + return [ + { + category: "Consumption", + subcategory: FuelType.ELECTRICITY, + consumption: consumption[0], + emissions: emissions[0] + }, + { subcategory: FuelType.NATURAL_GAS, consumption: consumption[1], emissions: emissions[1] }, + { subcategory: FuelType.DISTILLATE_OIL, consumption: consumption[2], emissions: emissions[2] }, + { subcategory: FuelType.RESIDUAL_OIL, consumption: consumption[3], emissions: emissions[3] }, + { subcategory: FuelType.PROPANE, consumption: consumption[4], emissions: emissions[4] }, + { subcategory: "Total", consumption: consumption[5], emissions: emissions[5] }, + { category: "Water", subcategory: "Use" } + ]; + }); + }) + ), + [] +); From 9269cdd786c5f50e6d49ca25790290ae4abb0110 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 23 Jan 2025 11:43:55 -0500 Subject: [PATCH 16/24] add new class name to result graph --- .../annual-results/NpvCashFlowGraph.tsx | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/graphs/annual-results/NpvCashFlowGraph.tsx b/frontend/src/components/graphs/annual-results/NpvCashFlowGraph.tsx index 2f3bb45f..6152f18d 100644 --- a/frontend/src/components/graphs/annual-results/NpvCashFlowGraph.tsx +++ b/frontend/src/components/graphs/annual-results/NpvCashFlowGraph.tsx @@ -24,28 +24,28 @@ export default function NpvCashFlowGraph() { const chart = bb.generate({ data: { columns: [], - type: "bar", + type: "bar" }, bindto: `#${GRAPH_ID}`, axis: { y: { tick: { - format: dollarFormatter.format, - }, + format: dollarFormatter.format + } }, x: { label: { text: "Year", - position: "outer-center", - }, - }, + position: "outer-center" + } + } }, tooltip: { format: { title: (x) => `Year ${x}`, - value: dollarFormatter.format, - }, - }, + value: dollarFormatter.format + } + } }); setChart(chart); @@ -53,5 +53,5 @@ export default function NpvCashFlowGraph() { return () => chart.destroy(); }, []); - return
; + return
; } From 305f0dcd6d252b876cfa5b54ec5103ecb8ac3d1b Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Thu, 23 Jan 2025 12:15:07 -0500 Subject: [PATCH 17/24] delete extra resultStream file --- .../Results/allResultStreams.tsx | 274 ------------------ 1 file changed, 274 deletions(-) delete mode 100644 frontend/src/components/pdf-components/Results/allResultStreams.tsx diff --git a/frontend/src/components/pdf-components/Results/allResultStreams.tsx b/frontend/src/components/pdf-components/Results/allResultStreams.tsx deleted file mode 100644 index 16b2ebeb..00000000 --- a/frontend/src/components/pdf-components/Results/allResultStreams.tsx +++ /dev/null @@ -1,274 +0,0 @@ -import { bind } from "@react-rxjs/core"; -import { FuelType } from "blcc-format/Format"; -import { alternatives$, baselineID$ } from "model/Model"; -import { ResultModel } from "model/ResultModel"; -import { combineLatest, from, switchMap, zip } from "rxjs"; -import { map, toArray } from "rxjs/operators"; -import { getOptionalTag } from "util/Util"; - -type LCCRow = { - name: string; - baseline: boolean; - initialCost: number; - lifeCycleCost: number; - energy: number; - ghgEmissions: number; - scc: number; - lccScc: number; -}; - -type npvRow = { - key: number; - year: number; - [key: string]: number; -}; - -// summary -export const [useLCCRows, lccRows] = bind( - combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( - map(([measures, alternativeNames, baselineID]) => - measures.map( - (measure) => - ({ - name: alternativeNames.get(measure.altId), - baseline: measure.altId === baselineID, - lifeCycleCost: measure.totalTagFlows.LCC, - initialCost: measure.totalTagFlows["Initial Investment"], - energy: measure.totalTagFlows.Energy, - ghgEmissions: measure.totalTagFlows.Emissions, - scc: measure.totalTagFlows.SCC, - lccScc: measure.totalCosts - } as LCCRow) - ) - ) - ), - [] -); - -export const [useLCCBaseline, lccBaseline] = bind( - combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( - map(([measures, names, baselineID]) => { - const baseline = measures.find((measure) => measure.altId === baselineID); - - return measures.map((measure) => ({ - name: names.get(measure.altId), - baseline: measure.altId === baselineID, - sir: measure.sir, - airr: measure.airr, - spp: measure.spp, - dpp: measure.dpp, - initialCost: measure.totalCosts, - deltaEnergy: (baseline?.totalTagFlows.Energy ?? 0) - measure.totalTagFlows.Energy, - deltaGhg: (baseline?.totalTagFlows.Emissions ?? 0) - measure.totalTagFlows.Emissions, - deltaScc: (baseline?.totalTagFlows.SCC ?? 0) - measure.totalTagFlows.SCC, - netSavings: measure.netSavings + measure.totalTagFlows.SCC - })); - }) - ), - [] -); - -export const [useNPVCosts, npvCosts] = bind( - combineLatest([ResultModel.measures$, ResultModel.alternativeNames$]).pipe( - map(([measures]) => { - return [ - { category: "Investment", ...getOptionalTag(measures, "Initial Investment") }, - { category: "Energy", subcategory: "Consumption", ...getOptionalTag(measures, "Energy") }, - { subcategory: "Demand", ...getOptionalTag(measures, "Demand Charge") }, - { subcategory: "Rebates", ...getOptionalTag(measures, "Rebate") }, - { category: "Water", subcategory: "Usage" }, - { subcategory: "Disposal " }, - { category: "OMR", subcategory: "Recurring", ...getOptionalTag(measures, "OMR Recurring") }, - { subcategory: "Non-Recurring", ...getOptionalTag(measures, "OMR Non-Recurring") }, - { category: "Replacement", ...getOptionalTag(measures, "Replacement Capital") }, - { category: "Residual Value", ...getOptionalTag(measures, "Residual Value") } - ]; - }) - ), - [] -); - -export const [useLCCResourceRows, lccResourceRows] = bind( - ResultModel.measures$.pipe( - map((measures) => { - const consumption = [ - FuelType.ELECTRICITY, - FuelType.NATURAL_GAS, - FuelType.DISTILLATE_OIL, - FuelType.RESIDUAL_OIL, - FuelType.PROPANE, - "Energy" - ].map((fuelType) => getOptionalTag(measures, fuelType)); - - const emissions = [ - FuelType.ELECTRICITY, - FuelType.NATURAL_GAS, - FuelType.DISTILLATE_OIL, - FuelType.RESIDUAL_OIL, - FuelType.PROPANE, - "Emissions" - ].map((fuelType) => getOptionalTag(measures, `${fuelType} Emissions`)); - - return [ - { category: "Consumption", subcategory: FuelType.ELECTRICITY, ...consumption[0] }, - { subcategory: FuelType.NATURAL_GAS, ...consumption[1] }, - { subcategory: FuelType.DISTILLATE_OIL, ...consumption[2] }, - { subcategory: FuelType.RESIDUAL_OIL, ...consumption[3] }, - { subcategory: FuelType.PROPANE, ...consumption[4] }, - { subcategory: "Total", ...consumption[5] }, - { category: "Emissions", subcategory: FuelType.ELECTRICITY, ...emissions[0] }, - { subcategory: FuelType.NATURAL_GAS, ...emissions[1] }, - { subcategory: FuelType.DISTILLATE_OIL, ...emissions[2] }, - { subcategory: FuelType.RESIDUAL_OIL, ...emissions[3] }, - { subcategory: FuelType.PROPANE, ...emissions[4] }, - { subcategory: "Total", ...emissions[5] }, - { category: "Water", subcategory: "Use" } //TODO: Add in water usage category - ]; - }) - ), - [] -); - -// annual -export const [useNPVComparison, npvComparison] = bind( - ResultModel.required$.pipe( - switchMap((required) => - zip(required.map((required) => from(required.totalCostsDiscounted))).pipe( - map((values, year) => { - const result = { key: year, year } as npvRow; - values.forEach((value, i) => { - result[i.toString()] = value; - }); - return result; - }), - toArray() - ) - ) - ), - [] -); - -// @Luke to check -export const [useNpvAll, NpvAll] = bind( - combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( - switchMap(([allRequired, optionals]) => { - const defaultArray = Array(allRequired[0].totalCostsDiscounted.length).fill(0); - const all = allRequired.map((req, index) => { - const investment = from( - optionals.get(`${index} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray - ); - const consumption = from(optionals.get(`${index} Energy`)?.totalTagCashflowDiscounted ?? defaultArray); - const recurring = from( - optionals.get(`${index} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray - ); - const nonRecurring = from( - optionals.get(`${index} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray - ); - - return zip(from(req.totalCostsDiscounted), investment, consumption, recurring, nonRecurring).pipe( - map((values, year) => ({ - year, - investment: values[1], - consumption: values[2], - recurring: values[3], - nonRecurring: values[4], - total: values[0] - })), - toArray() - ); - }); - - return combineLatest(all); - }) - ), - [] -); - -export const [useAnnualAltNPV, annualAltNPV] = bind( - combineLatest([ResultModel.required$, ResultModel.optionalsByTag$, ResultModel.selection$]).pipe( - switchMap(([allRequired, optionals, selectedID]) => { - const required = allRequired.find((req) => req.altId === selectedID); - - if (required === undefined) return []; - - const id = required.altId; - const defaultArray = Array.apply(null, Array(required.totalCostsDiscounted.length)).map(() => 0); - - return zip( - from(required.totalCostsDiscounted), - from(optionals.get(`${id} Initial Investment`)?.totalTagCashflowDiscounted ?? defaultArray), - from(optionals.get(`${id} Energy`)?.totalTagCashflowDiscounted ?? defaultArray), - from(optionals.get(`${id} OMR Recurring`)?.totalTagCashflowDiscounted ?? defaultArray), - from(optionals.get(`${id} OMR Non-Recurring`)?.totalTagCashflowDiscounted ?? defaultArray) - ).pipe( - map(([total, investment, consumption, recurring, nonRecurring], year) => ({ - year, - investment, - consumption, - recurring, - nonRecurring, - total - })), - toArray() - ); - }) - ), - [] -); - -// alternative -export const [useAltNPV, altNPV] = bind( - combineLatest([ResultModel.measures$]).pipe( - map(([measure]) => { - return measure.map((req) => [ - { category: "Investment", alternative: req.totalTagFlows["Initial Investment"] }, - { category: "Energy", subcategory: "Consumption", alternative: req.totalTagFlows.Energy }, - { subcategory: "Demand" }, - { subcategory: "Rebates" }, - { category: "Water", subcategory: "Usage" }, - { subcategory: "Disposal" }, - { category: "OMR", subcategory: "Recurring", alternative: req.totalTagFlows["OMR Recurring"] }, - { subcategory: "Non-Recurring", alternative: req.totalTagFlows["OMR Non-Recurring"] }, - { category: "Replacement" }, - { category: "Residual Value" } - ]); - }) - ), - [] -); - -export const [useResourceUsage, resourceUsage] = bind( - combineLatest([ResultModel.measures$]).pipe( - map(([measureArray]) => { - return measureArray.map((measure) => { - const fuelTypes = [ - FuelType.ELECTRICITY, - FuelType.NATURAL_GAS, - FuelType.DISTILLATE_OIL, - FuelType.RESIDUAL_OIL, - FuelType.PROPANE, - "Energy" - ]; - - const consumption = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); - const emissions = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); - - return [ - { - category: "Consumption", - subcategory: FuelType.ELECTRICITY, - consumption: consumption[0], - emissions: emissions[0] - }, - { subcategory: FuelType.NATURAL_GAS, consumption: consumption[1], emissions: emissions[1] }, - { subcategory: FuelType.DISTILLATE_OIL, consumption: consumption[2], emissions: emissions[2] }, - { subcategory: FuelType.RESIDUAL_OIL, consumption: consumption[3], emissions: emissions[3] }, - { subcategory: FuelType.PROPANE, consumption: consumption[4], emissions: emissions[4] }, - { subcategory: "Total", consumption: consumption[5], emissions: emissions[5] }, - { category: "Water", subcategory: "Use" } - ]; - }); - }) - ), - [] -); From 76dc327fbb8fdfe40be659bcdfafbccfbe4465bf Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 10:11:04 -0500 Subject: [PATCH 18/24] adding pdf-renderer and html-to-image npm packages --- frontend/package.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/frontend/package.json b/frontend/package.json index 1b71df18..86fab562 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -18,6 +18,7 @@ "@lrd/e3-sdk": "^1.0.11", "@mdi/js": "^7.4.47", "@mdi/react": "^1.6.1", + "@react-pdf/renderer": "^4.1.6", "@react-rxjs/core": "^0.10.7", "@react-rxjs/utils": "^0.9.7", "antd": "^5.18.0", @@ -30,6 +31,7 @@ "effect": "^3.12.1", "fast-xml-parser": "4.4.1", "framer-motion": "^11.2.10", + "html-to-image": "^1.11.11", "html-to-react": "^1.7.0", "monocle-ts": "^2.3.13", "object-hash": "^3.0.0", From 8ccf92ddc7ae5570c9e5cff12993ff2a1866659f Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 15:21:46 -0500 Subject: [PATCH 19/24] pdf working with pulling data from db --- frontend/src/components/Pdf.tsx | 51 ++++++++--- frontend/src/components/ResultsAppBar.tsx | 58 +++++++++---- frontend/src/components/allResultStreams.tsx | 87 ++++++++++++++++++- .../pdf-components/Alternatives.tsx | 18 ++-- .../pdf-components/GeneralInformation.tsx | 2 +- .../src/components/pdf-components/Results.tsx | 11 ++- .../Results/AnnualResultsPdf.tsx | 7 +- .../pdf-components/Results/ResultsSummary.tsx | 6 +- .../Results/ResultsSummaryTables.tsx | 3 +- 9 files changed, 198 insertions(+), 45 deletions(-) diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index 4dff45bd..cfeb04c5 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -1,6 +1,8 @@ import { Document, Image, Page, Text, View } from "@react-pdf/renderer"; -import { Alternative, Cost, Project } from "blcc-format/Format"; +import { Project } from "blcc-format/Format"; +import { db } from "model/db"; +import { altResults, annual, summary } from "./allResultStreams"; import Alternatives from "./pdf-components/Alternatives"; import GeneralInformation from "./pdf-components/GeneralInformation"; import NISTHeader from "./pdf-components/NISTHeader"; @@ -9,17 +11,44 @@ import PdfDisclaimer from "./pdf-components/PdfDisclaimer"; import { styles } from "./pdf-components/pdfStyles"; import Results from "./pdf-components/Results"; +const fetchData = async () => { + try { + const [alternatives, costs] = await Promise.all([ + db.alternatives.toArray().then((result) => { + if (result === undefined || result.length === 0) { + console.log("No alternatives found."); + return []; + } + return result; + }), + db.costs.toArray().then((result) => { + if (result === undefined || result.length === 0) { + console.log("No costs found."); + return []; + } + return result; + }) + ]); + return [alternatives, costs]; + } catch (error) { + console.error("Error fetching data:", error); + return [[], []]; + } +}; + +const [alternatives, costs] = await fetchData(); + const Pdf = (props: { - project: Project; - alternatives: Alternative[]; - costs: Cost[]; - summary; - annual; - altResults; - graphSources; + project: Project[] | undefined; + summary: summary; + annual: annual; + altResults: altResults; + graphSources: string[]; }) => { - const { project, alternatives, costs, summary, annual, altResults, graphSources } = props; - console.log(alternatives, costs); + const { project, summary, annual, altResults, graphSources } = props; + + console.log(project, alternatives, costs); + return ( @@ -35,7 +64,7 @@ const Pdf = (props: { - + diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index 90b947e6..a8ebee26 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -1,7 +1,7 @@ import { mdiArrowLeft, mdiContentSave, mdiFileDownload, mdiLoading, mdiPlay, mdiTableArrowDown } from "@mdi/js"; import Icon from "@mdi/react"; import { pdf } from "@react-pdf/renderer"; -import { Alternative, Cost, Project } from "blcc-format/Format"; +import type { Project } from "blcc-format/Format"; import AppBar from "components/AppBar"; import ButtonBar from "components/ButtonBar"; import HelpButtons from "components/HelpButtons"; @@ -19,13 +19,20 @@ import Pdf from "./Pdf"; import { altNPV, + altNpvRow, + annualNPVComparisonRow, lccBaseline, + lccBaselineRow, + lccResourceRow, lccResourceRows, + lccRow, lccRows, npvAll, + npvAllRow, npvComparison, npvCosts, - resourceUsage + resourceUsage, + resourceUsageRow } from "./allResultStreams"; import CSVDownload from "./CSVDownload"; @@ -35,17 +42,38 @@ const csvClick$ = new Subject(); export default function ResultsAppBar() { const navigate = useNavigate(); - const project: Project = useProject(); - const alternatives: Alternative[] = useAlternatives(); - let costs: Cost[] = []; - costs$.subscribe((data) => { - costs = data; - }); + + // need to handle error properly - discuss with Luke for Modal + const fetchProject = async () => { + try { + const result = await db.projects.where("id").equals(1).toArray(); // Assuming you want the result as an array + + if (result === undefined || result.length === 0) { + console.log("No project found."); + } else { + return result; // Process the result + } + } catch (error) { + console.error("Error fetching project:", error); + } + }; + + let project: Project[] | undefined; + fetchProject().then((p) => (project = p)); const generatePdf = useCallback( - (_, lccRows, lccBaseline, npvCosts, lccResourceRows, npvComparison, altNPV, resourceUsage, NpvAll) => { + ( + _: undefined, + lccRows: lccRow[], + lccBaseline: lccBaselineRow[], + npvCosts: { [key: string]: string }[], + lccResourceRows: lccResourceRow[], + npvComparison: annualNPVComparisonRow[], + altNPV: altNpvRow[][], + resourceUsage: resourceUsageRow[][], + npvAll: npvAllRow[][] + ) => { const pdfGraphs = document.getElementsByClassName("result-graph"); - // if (pdfGraphs.length === 0) return; const promises = [...pdfGraphs].map((graph) => @@ -56,11 +84,9 @@ export default function ResultsAppBar() { console.log(graphSources); const blob = pdf( @@ -70,7 +96,7 @@ export default function ResultsAppBar() { const url = window.URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; - link.download = "BLCC Report.pdf"; + link.download = `${project?.[0]?.name}.pdf`; link.click(); }); }); @@ -129,7 +155,7 @@ export default function ResultsAppBar() { const csvBlob = new Blob([csvData.join("\n")], { type: "text/csv" }); const url = window.URL.createObjectURL(csvBlob); link.href = url; - link.download = `${project.name}.csv`; // Set the desired file name + link.download = `${project?.[0]?.name}.csv`; // Set the desired file name link.click(); window.URL.revokeObjectURL(url); // Clean up the URL object } diff --git a/frontend/src/components/allResultStreams.tsx b/frontend/src/components/allResultStreams.tsx index 33d02164..14a4dd65 100644 --- a/frontend/src/components/allResultStreams.tsx +++ b/frontend/src/components/allResultStreams.tsx @@ -17,12 +17,97 @@ export type lccRow = { lccScc: number; }; -type npvRow = { +export type npvRow = { key: number; year: number; [key: string]: number; }; +export type lccBaselineRow = { + airr: number; + baseline: boolean; + deltaEnergy: number; + deltaGhg: number; + deltaScc: number; + dpp: number; + initialCost: number; + lifeCycleCost?: number; //has to be fixed once lifecycle cost is added to backend + name: string | undefined; + netSavings: number; + sir: number; + spp: number; +}; + +export type lccResourceRow = { + category?: string; + subcategory: string; + [key: string]: string | undefined; +}; + +export type summary = { + lccBaseline: lccBaselineRow[]; + lccResourceRows: lccResourceRow[]; + lccRows: lccRow[]; + npvCosts: { [key: string]: string }[]; +}; + +// remove this once Luke pushes change +export type npvAllRow = { + year: number; + investment: number; + consumption: number; + recurring: number; + nonRecurring: number; + total: number; +}; + +{ + // remove previous and uncomment this + // export type npvAllRow = { + // year: number; + // investment: number; + // consumption: number; + // demand: number; + // rebates: number; + // waterUse: number; + // waterDisposal: number; + // recurring: number; + // nonRecurring: number; + // replace: number; + // residualValue: number; + // total: number; + // }; +} + +export type annualNPVComparisonRow = { + key: number; + year: number; + [key: string]: string | number; +}; + +export type annual = { + npvAll: npvAllRow[][]; + npvComparison: annualNPVComparisonRow[]; +}; + +export type altNpvRow = { + category?: string; + subcategory?: string; + alternative?: number; +}; + +export type resourceUsageRow = { + category?: string; + subcategory?: string; + emissions?: number; + consumption?: number; +}; + +export type altResults = { + altNPV: altNpvRow[][]; + resourceUsage: resourceUsageRow[][]; +}; + // summary export const [useLCCRows, lccRows] = bind( combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx index b199890b..fc3a7072 100644 --- a/frontend/src/components/pdf-components/Alternatives.tsx +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -7,16 +7,22 @@ import OtherCostInput from "./OtherCostInput"; import { styles } from "./pdfStyles"; import WaterCostInput from "./WaterCostInput"; -const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; releaseYear: number }) => { +const Alternatives = (props: { + alternatives: Alternative[] | undefined; + costs: Cost[] | undefined; + releaseYear: number; +}) => { const alts = props.alternatives; const costs = props.costs; const releaseYear = props.releaseYear; + console.log(alts, costs); + const getAltCosts = (alt: Alternative) => { let altCost = alt.costs; const altCosts = []; - for (let i = 0; i < costs.length; i++) { - if (altCost.includes(costs[i]?.id)) altCosts.push(costs[i]); + for (let i = 0; i < costs?.length; i++) { + if (altCost.includes(costs?.[i]?.id)) altCosts.push(costs?.[i]); } return altCosts; }; @@ -26,11 +32,11 @@ const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; relea
Alternatives - Total - {alts.length} + Total - {alts?.length}

- {alts.map((alt: Alternative, idx: number) => { + {alts?.map((alt: Alternative, idx: number) => { return ( @@ -51,7 +57,7 @@ const Alternatives = (props: { alternatives: Alternative[]; costs: Cost[]; relea Total Costs:  {alt.costs.length} - {getAltCosts(alt).map((cost: Cost) => { + {getAltCosts(alt)?.map((cost: Cost) => { return ( {(cost.type === "Capital" || diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 0f68fa3b..6a473152 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -3,7 +3,7 @@ import { AnalysisType, DollarMethod, Project, USLocation } from "blcc-format/For import { styles } from "./pdfStyles"; const GeneralInformation = (props: { project: Project }) => { - const project = props.project; + const project = props?.project?.[0]; return (
diff --git a/frontend/src/components/pdf-components/Results.tsx b/frontend/src/components/pdf-components/Results.tsx index 46f4427d..50811960 100644 --- a/frontend/src/components/pdf-components/Results.tsx +++ b/frontend/src/components/pdf-components/Results.tsx @@ -1,15 +1,22 @@ import { Text, View } from "@react-pdf/renderer"; import { Alternative } from "blcc-format/Format"; +import { altResults, annual, summary } from "../allResultStreams"; import { styles } from "./pdfStyles"; import AlternativeResultsPdf from "./Results/AlternativeResultsPdf"; import AnnualResultsPdf from "./Results/AnnualResultsPdf"; import ResultsSummary from "./Results/ResultsSummary"; -const Results = (props: { alternatives: Alternative[]; summary; annual; altResults; graphs }) => { +const Results = (props: { + alternatives: Alternative[] | undefined; + summary: summary; + annual: annual; + altResults: altResults; + graphs: string[]; +}) => { const { alternatives, summary, annual, altResults, graphs } = props; - const altNames = alternatives.map((alternative) => alternative.name); + const altNames = alternatives?.map((alternative) => alternative.name); return ( diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx index 510edb8c..6d8fff09 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -2,10 +2,11 @@ import { Image, Text, View } from "@react-pdf/renderer"; import * as htmlToImage from "html-to-image"; import { useEffect, useState } from "react"; +import { annual } from "../../allResultStreams"; import { styles } from "../pdfStyles"; import { NPVAltTable, NPVComparisonTable } from "./AnnualResultsTables"; -const AnnualResultsPdf = (props: { altNames: string[]; annual; graphs }) => { +const AnnualResultsPdf = (props: { altNames: string[]; annual: annual; graphs: string[] }) => { const { altNames, annual, graphs } = props; console.log(annual); // const [srcs, setSrcs] = useState([]); @@ -47,14 +48,14 @@ const AnnualResultsPdf = (props: { altNames: string[]; annual; graphs }) => { {name} NPV Cash Flow by Alternative - + NPV Cash Flows Tag/Object by Year ))} - {graphs.map((src, index) => ( + {graphs.map((src: string, index: number) => ( ))} diff --git a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx index 36f1f569..c2a44bc6 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx @@ -1,7 +1,6 @@ import { Text, View } from "@react-pdf/renderer"; - +import { summary } from "components/allResultStreams"; import { styles } from "../pdfStyles"; - import { LCCBaselineTable, LCCResourceTable, LCCResultsTable, NPVSubTable } from "./ResultsSummaryTables"; const lifeCycleResultsColumns = [ @@ -29,9 +28,8 @@ const lifeCycleResultsBaseline = [ "Net Savings & SCC Reductions" ]; -const ResultsSummary = (props: { altNames: string[]; summary }) => { +const ResultsSummary = (props: { altNames: string[]; summary: summary }) => { const { altNames, summary } = props; - console.log(summary); return ( <> diff --git a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx index 80663ded..b3dbf419 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx @@ -1,4 +1,5 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { lccBaselineRow } from "components/allResultStreams"; const border = "1px solid #000"; const fontSize = 10; @@ -127,7 +128,7 @@ export const LCCResultsTable = (props: { headers: string[]; rows: lccResults[] } ); }; -export const LCCBaselineTable = (props: { headers: string[]; rows: lccBaseline[] }) => { +export const LCCBaselineTable = (props: { headers: string[]; rows: lccBaselineRow[] }) => { const { headers, rows } = props; return ( From bbbea8fb9c0d6d9909968a24f0af5a289ad6d500 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 15:35:30 -0500 Subject: [PATCH 20/24] fix csv to work with data from db --- frontend/src/components/CSVDownload.ts | 29 ++++++++++++++++------- frontend/src/components/ResultsAppBar.tsx | 2 +- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/frontend/src/components/CSVDownload.ts b/frontend/src/components/CSVDownload.ts index 1dfb383f..ebdf5a35 100644 --- a/frontend/src/components/CSVDownload.ts +++ b/frontend/src/components/CSVDownload.ts @@ -1,4 +1,5 @@ -import { Alternative, Project } from "blcc-format/Format"; +import { Project } from "blcc-format/Format"; +import { db } from "model/db"; import { lccRow } from "./allResultStreams"; type lccBaselineRow = { @@ -86,13 +87,23 @@ type altResults = { resourceUsage: resourceUsageRow[][]; }; -const CSVDownload = ( - project: Project, - alternatives: Alternative[], - summary: summary, - annual: annual, - altResults: altResults -) => { +const fetchData = async () => { + try { + const result = await db.alternatives.toArray(); + if (!result || result.length === 0) { + console.log("No alternatives found."); + return []; + } + return result; + } catch (error) { + console.error("Error fetching data:", error); + return []; + } +}; + +const alternatives = await fetchData(); + +const CSVDownload = (project: Project[] | undefined, summary: summary, annual: annual, altResults: altResults) => { let altNames: string[] = alternatives?.map((alt) => alt?.name); console.log(summary, annual, altResults); @@ -285,7 +296,7 @@ const CSVDownload = ( [new Date().toLocaleTimeString()], [], ["BLCC Project Results"], - [project?.name], + [project?.[0]?.name], [], ["Summary"], [], diff --git a/frontend/src/components/ResultsAppBar.tsx b/frontend/src/components/ResultsAppBar.tsx index a8ebee26..f3a7bcd3 100644 --- a/frontend/src/components/ResultsAppBar.tsx +++ b/frontend/src/components/ResultsAppBar.tsx @@ -151,7 +151,7 @@ export default function ResultsAppBar() { const altResults = { altNPV, resourceUsage }; // Trigger CSV download const link = document.createElement("a"); - const csvData = CSVDownload(project, alternatives, summary, annual, altResults); + const csvData = CSVDownload(project, summary, annual, altResults); const csvBlob = new Blob([csvData.join("\n")], { type: "text/csv" }); const url = window.URL.createObjectURL(csvBlob); link.href = url; From 0f08e8f635ec16b8e999b6923de6b99d86b1a71c Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 16:15:05 -0500 Subject: [PATCH 21/24] round all result values to 2 decimal places --- frontend/src/components/allResultStreams.tsx | 138 +++++++++++-------- 1 file changed, 80 insertions(+), 58 deletions(-) diff --git a/frontend/src/components/allResultStreams.tsx b/frontend/src/components/allResultStreams.tsx index 14a4dd65..0020b35e 100644 --- a/frontend/src/components/allResultStreams.tsx +++ b/frontend/src/components/allResultStreams.tsx @@ -9,12 +9,12 @@ import { getOptionalTag } from "util/Util"; export type lccRow = { name: string; baseline: boolean; - initialCost: number; - lifeCycleCost: number; - energy: number; - ghgEmissions: number; - scc: number; - lccScc: number; + initialCost: string; + lifeCycleCost: string; + energy: string; + ghgEmissions: string; + scc: string; + lccScc: string; }; export type npvRow = { @@ -108,6 +108,15 @@ export type altResults = { resourceUsage: resourceUsageRow[][]; }; +const roundObjectValues = (obj: { [key: string | number]: string }) => { + const roundedObj = {}; + for (const key in obj) { + const value = obj[key]; + roundedObj[key] = typeof value === "number" ? value?.toFixed(2) : value; // Round only if it's a number + } + return roundedObj; +}; + // summary export const [useLCCRows, lccRows] = bind( combineLatest([ResultModel.measures$, ResultModel.alternativeNames$, baselineID$]).pipe( @@ -117,12 +126,12 @@ export const [useLCCRows, lccRows] = bind( ({ name: alternativeNames.get(measure.altId), baseline: measure.altId === baselineID, - lifeCycleCost: measure.totalTagFlows.LCC, - initialCost: measure.totalTagFlows["Initial Investment"], - energy: measure.totalTagFlows.Energy, - ghgEmissions: measure.totalTagFlows.Emissions, - scc: measure.totalTagFlows.SCC, - lccScc: measure.totalCosts + lifeCycleCost: measure.totalTagFlows.LCC?.toFixed(2), + initialCost: measure.totalTagFlows["Initial Investment"]?.toFixed(2), + energy: measure.totalTagFlows.Energy?.toFixed(2), + ghgEmissions: measure.totalTagFlows.Emissions?.toFixed(2), + scc: measure.totalTagFlows.SCC?.toFixed(2), + lccScc: measure.totalCosts?.toFixed(2) } as lccRow) ) ) @@ -138,15 +147,15 @@ export const [useLCCBaseline, lccBaseline] = bind( return measures.map((measure) => ({ name: names.get(measure.altId), baseline: measure.altId === baselineID, - sir: measure.sir, - airr: measure.airr, - spp: measure.spp, - dpp: measure.dpp, - initialCost: measure.totalCosts, - deltaEnergy: (baseline?.totalTagFlows.Energy ?? 0) - measure.totalTagFlows.Energy, - deltaGhg: (baseline?.totalTagFlows.Emissions ?? 0) - measure.totalTagFlows.Emissions, - deltaScc: (baseline?.totalTagFlows.SCC ?? 0) - measure.totalTagFlows.SCC, - netSavings: measure.netSavings + measure.totalTagFlows.SCC + sir: measure.sir?.toFixed(2), + airr: measure.airr?.toFixed(2), + spp: measure.spp?.toFixed(2), + dpp: measure.dpp?.toFixed(2), + initialCost: measure.totalCosts.toFixed(2), + deltaEnergy: ((baseline?.totalTagFlows.Energy ?? 0) - measure.totalTagFlows.Energy)?.toFixed(2), + deltaGhg: ((baseline?.totalTagFlows.Emissions ?? 0) - measure.totalTagFlows.Emissions)?.toFixed(2), + deltaScc: ((baseline?.totalTagFlows.SCC ?? 0) - measure.totalTagFlows.SCC)?.toFixed(2), + netSavings: measure.netSavings + measure.totalTagFlows.SCC?.toFixed(2) })); }) ), @@ -156,17 +165,26 @@ export const [useLCCBaseline, lccBaseline] = bind( export const [useNPVCosts, npvCosts] = bind( combineLatest([ResultModel.measures$, ResultModel.alternativeNames$]).pipe( map(([measures]) => { + console.log(measures); return [ - { category: "Investment", ...getOptionalTag(measures, "Initial Investment") }, - { category: "Energy", subcategory: "Consumption", ...getOptionalTag(measures, "Energy") }, - { subcategory: "Demand", ...getOptionalTag(measures, "Demand Charge") }, - { subcategory: "Rebates", ...getOptionalTag(measures, "Rebate") }, + { category: "Investment", ...roundObjectValues(getOptionalTag(measures, "Initial Investment")) }, + { + category: "Energy", + subcategory: "Consumption", + ...roundObjectValues(getOptionalTag(measures, "Energy")) + }, + { subcategory: "Demand", ...roundObjectValues(getOptionalTag(measures, "Demand Charge")) }, + { subcategory: "Rebates", ...roundObjectValues(getOptionalTag(measures, "Rebate")) }, { category: "Water", subcategory: "Usage" }, { subcategory: "Disposal " }, - { category: "OMR", subcategory: "Recurring", ...getOptionalTag(measures, "OMR Recurring") }, - { subcategory: "Non-Recurring", ...getOptionalTag(measures, "OMR Non-Recurring") }, - { category: "Replacement", ...getOptionalTag(measures, "Replacement Capital") }, - { category: "Residual Value", ...getOptionalTag(measures, "Residual Value") } + { + category: "OMR", + subcategory: "Recurring", + ...roundObjectValues(getOptionalTag(measures, "OMR Recurring")) + }, + { subcategory: "Non-Recurring", ...roundObjectValues(getOptionalTag(measures, "OMR Non-Recurring")) }, + { category: "Replacement", ...roundObjectValues(getOptionalTag(measures, "Replacement Capital")) }, + { category: "Residual Value", ...roundObjectValues(getOptionalTag(measures, "Residual Value")) } ]; }) ), @@ -195,18 +213,18 @@ export const [useLCCResourceRows, lccResourceRows] = bind( ].map((fuelType) => getOptionalTag(measures, `${fuelType} Emissions`)); return [ - { category: "Consumption", subcategory: FuelType.ELECTRICITY, ...consumption[0] }, - { subcategory: FuelType.NATURAL_GAS, ...consumption[1] }, - { subcategory: FuelType.DISTILLATE_OIL, ...consumption[2] }, - { subcategory: FuelType.RESIDUAL_OIL, ...consumption[3] }, - { subcategory: FuelType.PROPANE, ...consumption[4] }, - { subcategory: "Total", ...consumption[5] }, - { category: "Emissions", subcategory: FuelType.ELECTRICITY, ...emissions[0] }, - { subcategory: FuelType.NATURAL_GAS, ...emissions[1] }, - { subcategory: FuelType.DISTILLATE_OIL, ...emissions[2] }, - { subcategory: FuelType.RESIDUAL_OIL, ...emissions[3] }, - { subcategory: FuelType.PROPANE, ...emissions[4] }, - { subcategory: "Total", ...emissions[5] }, + { category: "Consumption", subcategory: FuelType.ELECTRICITY, ...roundObjectValues(consumption[0]) }, + { subcategory: FuelType.NATURAL_GAS, ...roundObjectValues(consumption[1]) }, + { subcategory: FuelType.DISTILLATE_OIL, ...roundObjectValues(consumption[2]) }, + { subcategory: FuelType.RESIDUAL_OIL, ...roundObjectValues(consumption[3]) }, + { subcategory: FuelType.PROPANE, ...roundObjectValues(consumption[4]) }, + { subcategory: "Total", ...roundObjectValues(consumption[5]) }, + { category: "Emissions", subcategory: FuelType.ELECTRICITY, ...roundObjectValues(emissions[0]) }, + { subcategory: FuelType.NATURAL_GAS, ...roundObjectValues(emissions[1]) }, + { subcategory: FuelType.DISTILLATE_OIL, ...roundObjectValues(emissions[2]) }, + { subcategory: FuelType.RESIDUAL_OIL, ...roundObjectValues(emissions[3]) }, + { subcategory: FuelType.PROPANE, ...roundObjectValues(emissions[4]) }, + { subcategory: "Total", ...roundObjectValues(emissions[5]) }, { category: "Water", subcategory: "Use" } //TODO: Add in water usage category ]; }) @@ -222,7 +240,7 @@ export const [useNPVComparison, npvComparison] = bind( map((values, year) => { const result = { key: year, year } as npvRow; values.forEach((value, i) => { - result[i.toString()] = value; + result[i.toString()] = Number(value?.toFixed(2)); }); return result; }), @@ -253,11 +271,11 @@ export const [useNpvAll, npvAll] = bind( return zip(from(req.totalCostsDiscounted), investment, consumption, recurring, nonRecurring).pipe( map((values, year) => ({ year, - investment: values[1], - consumption: values[2], - recurring: values[3], - nonRecurring: values[4], - total: values[0] + investment: values[1]?.toFixed(2), + consumption: values[2]?.toFixed(2), + recurring: values[3]?.toFixed(2), + nonRecurring: values[4]?.toFixed(2), + total: values[0]?.toFixed(2) })), toArray() ); @@ -288,11 +306,11 @@ export const [useAnnualAltNPV, annualAltNPV] = bind( ).pipe( map(([total, investment, consumption, recurring, nonRecurring], year) => ({ year, - investment, - consumption, - recurring, - nonRecurring, - total + investment: investment?.toFixed(2), + consumption: consumption?.toFixed(2), + recurring: recurring?.toFixed(2), + nonRecurring: nonRecurring?.toFixed(2), + total: total?.toFixed(2) })), toArray() ); @@ -306,14 +324,18 @@ export const [useAltNPV, altNPV] = bind( combineLatest([ResultModel.measures$]).pipe( map(([measure]) => { return measure.map((req) => [ - { category: "Investment", alternative: req.totalTagFlows["Initial Investment"] }, - { category: "Energy", subcategory: "Consumption", alternative: req.totalTagFlows.Energy }, + { category: "Investment", alternative: req.totalTagFlows["Initial Investment"]?.toFixed(2) }, + { category: "Energy", subcategory: "Consumption", alternative: req.totalTagFlows.Energy?.toFixed(2) }, { subcategory: "Demand" }, { subcategory: "Rebates" }, { category: "Water", subcategory: "Usage" }, { subcategory: "Disposal" }, - { category: "OMR", subcategory: "Recurring", alternative: req.totalTagFlows["OMR Recurring"] }, - { subcategory: "Non-Recurring", alternative: req.totalTagFlows["OMR Non-Recurring"] }, + { + category: "OMR", + subcategory: "Recurring", + alternative: req.totalTagFlows["OMR Recurring"]?.toFixed(2) + }, + { subcategory: "Non-Recurring", alternative: req.totalTagFlows["OMR Non-Recurring"]?.toFixed(2) }, { category: "Replacement" }, { category: "Residual Value" } ]); @@ -335,8 +357,8 @@ export const [useResourceUsage, resourceUsage] = bind( "Energy" ]; - const consumption = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); - const emissions = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]); + const consumption = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]?.toFixed(2)); + const emissions = fuelTypes.map((fuelType) => measure.totalTagFlows[fuelType]?.toFixed(2)); return [ { From 4865aaafb1b66d3d72155a6fde2b6ee62b97fb84 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 16:18:09 -0500 Subject: [PATCH 22/24] fix type errors pt1 --- frontend/src/components/allResultStreams.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/src/components/allResultStreams.tsx b/frontend/src/components/allResultStreams.tsx index 0020b35e..2dee915c 100644 --- a/frontend/src/components/allResultStreams.tsx +++ b/frontend/src/components/allResultStreams.tsx @@ -108,8 +108,8 @@ export type altResults = { resourceUsage: resourceUsageRow[][]; }; -const roundObjectValues = (obj: { [key: string | number]: string }) => { - const roundedObj = {}; +const roundObjectValues = (obj: { [key: string]: number | string }): { [key: string]: string } => { + const roundedObj: { [key: string]: string } = {}; for (const key in obj) { const value = obj[key]; roundedObj[key] = typeof value === "number" ? value?.toFixed(2) : value; // Round only if it's a number From f98a3d5315e6799fb3e01b632aeb94242141e007 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Tue, 28 Jan 2025 16:35:33 -0500 Subject: [PATCH 23/24] fix - displays all alternatives --- .../pdf-components/Results/AnnualResultsTables.tsx | 9 ++++++--- .../Results/ResultsSummaryTables.tsx | 14 ++++++++++---- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx index 70fecf2d..9363ca32 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx @@ -75,11 +75,14 @@ export const NPVComparisonTable = (props: { ))} - {rows.map((alt: { year: number; key: number; "0": number; "1": number }) => ( + {rows.map((alt: { year: number; key: number; [key: string]: number }) => ( {alt.year} - ${alt["0"] || "0.00"} - ${alt["1"] || "0.00"} + {Array.from({ length: headers.length - 1 }, (_, i) => ( + + ${alt[`${i}`] || "0.00"} + + ))} ))} diff --git a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx index b3dbf419..fe514786 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummaryTables.tsx @@ -181,8 +181,11 @@ export const NPVSubTable = (props: { headers: string[]; rows: npvSubCat[] }) => {alt.category} {alt.subcategory} - ${alt["0"] || "0.00"} - ${alt["1"] || "0.00"} + {Array.from({ length: headers.length - 2 }, (_, i) => ( + + ${alt[`${i}`] || "0.00"} + + ))} ))}
@@ -207,8 +210,11 @@ export const LCCResourceTable = (props: { headers: string[]; rows: npvSubCat[] } {alt.category} {alt.subcategory} - ${alt["0"] || "0.00"} - ${alt["1"] || "0.00"} + {Array.from({ length: headers.length - 2 }, (_, i) => ( + + ${alt[`${i}`] || "0.00"} + + ))} ))}
From ee4a0cd586b9fff0f422bf167a2bddaea25095f1 Mon Sep 17 00:00:00 2001 From: purav-parekh Date: Wed, 29 Jan 2025 09:54:02 -0500 Subject: [PATCH 24/24] fixing type errors pt1 --- frontend/src/components/Pdf.tsx | 4 ++-- .../src/components/pdf-components/Alternatives.tsx | 9 +++++---- .../components/pdf-components/CapitalCostInput.tsx | 4 ++-- .../components/pdf-components/ContractCostInput.tsx | 11 ++++++++++- .../src/components/pdf-components/CostComponents.tsx | 1 + .../src/components/pdf-components/EnergyCostInput.tsx | 3 ++- .../components/pdf-components/GeneralInformation.tsx | 2 +- frontend/src/components/pdf-components/InputTable.tsx | 5 +++-- .../src/components/pdf-components/InputTableRows.tsx | 1 + .../src/components/pdf-components/OtherCostInput.tsx | 3 ++- frontend/src/components/pdf-components/Results.tsx | 4 ++-- .../pdf-components/Results/AlternativeResultsPdf.tsx | 9 +++++---- .../pdf-components/Results/AnnualResultsPdf.tsx | 8 ++++---- .../pdf-components/Results/AnnualResultsTables.tsx | 7 ++----- .../pdf-components/Results/ResultsSummary.tsx | 2 +- .../src/components/pdf-components/WaterCostInput.tsx | 3 ++- 16 files changed, 45 insertions(+), 31 deletions(-) diff --git a/frontend/src/components/Pdf.tsx b/frontend/src/components/Pdf.tsx index cfeb04c5..5ecfe6a1 100644 --- a/frontend/src/components/Pdf.tsx +++ b/frontend/src/components/Pdf.tsx @@ -39,7 +39,7 @@ const fetchData = async () => { const [alternatives, costs] = await fetchData(); const Pdf = (props: { - project: Project[] | undefined; + project: Project[]; summary: summary; annual: annual; altResults: altResults; @@ -64,7 +64,7 @@ const Pdf = (props: {
- + diff --git a/frontend/src/components/pdf-components/Alternatives.tsx b/frontend/src/components/pdf-components/Alternatives.tsx index fc3a7072..8f08af95 100644 --- a/frontend/src/components/pdf-components/Alternatives.tsx +++ b/frontend/src/components/pdf-components/Alternatives.tsx @@ -1,5 +1,5 @@ import { Text, View } from "@react-pdf/renderer"; -import { Alternative, Cost } from "blcc-format/Format"; +import { Alternative, Cost, Recurring } from "blcc-format/Format"; import CapitalCostInput from "./CapitalCostInput"; import ContractCostInput from "./ContractCostInput"; import EnergyCostInput from "./EnergyCostInput"; @@ -8,8 +8,8 @@ import { styles } from "./pdfStyles"; import WaterCostInput from "./WaterCostInput"; const Alternatives = (props: { - alternatives: Alternative[] | undefined; - costs: Cost[] | undefined; + alternatives: Alternative[]; + costs: Cost[] & { recurring: Recurring; occurrence: string; cost: string }; releaseYear: number; }) => { const alts = props.alternatives; @@ -21,7 +21,8 @@ const Alternatives = (props: { const getAltCosts = (alt: Alternative) => { let altCost = alt.costs; const altCosts = []; - for (let i = 0; i < costs?.length; i++) { + let len = costs?.length || 0; + for (let i = 0; i < len; i++) { if (altCost.includes(costs?.[i]?.id)) altCosts.push(costs?.[i]); } return altCosts; diff --git a/frontend/src/components/pdf-components/CapitalCostInput.tsx b/frontend/src/components/pdf-components/CapitalCostInput.tsx index da784d82..f35dab2a 100644 --- a/frontend/src/components/pdf-components/CapitalCostInput.tsx +++ b/frontend/src/components/pdf-components/CapitalCostInput.tsx @@ -1,4 +1,5 @@ import { Text, View } from "@react-pdf/renderer"; +import { CapitalCost, Recurring as RecurringType } from "blcc-format/Format"; import { AnnualRateOfChange, CostAdjustmentFactor, @@ -16,8 +17,7 @@ import { } from "./CostComponents"; import { styles } from "./pdfStyles"; -const CapitalCostInput = (props: { cost; year: number }) => { - //TODO: specify type for cost +const CapitalCostInput = (props: { cost: CapitalCost & { recurring: RecurringType }; year: number }) => { const { cost, year } = props; return ( diff --git a/frontend/src/components/pdf-components/ContractCostInput.tsx b/frontend/src/components/pdf-components/ContractCostInput.tsx index 64712182..5b6e5e73 100644 --- a/frontend/src/components/pdf-components/ContractCostInput.tsx +++ b/frontend/src/components/pdf-components/ContractCostInput.tsx @@ -1,4 +1,10 @@ import { Text, View } from "@react-pdf/renderer"; +import { + Cost, + ImplementationContractCost, + RecurringContractCost, + Recurring as RecurringType +} from "blcc-format/Format"; import { AnnualRateOfChange, CostName, @@ -12,7 +18,10 @@ import { } from "./CostComponents"; import { styles } from "./pdfStyles"; -const ContractCostInput = (props: { cost; year: number }) => { +const ContractCostInput = (props: { + cost: Cost & { recurring: RecurringType; occurrence: string; cost: string }; + year: number; +}) => { //TODO: specify type for cost const { cost, year } = props; return ( diff --git a/frontend/src/components/pdf-components/CostComponents.tsx b/frontend/src/components/pdf-components/CostComponents.tsx index dd01f8a5..351422b8 100644 --- a/frontend/src/components/pdf-components/CostComponents.tsx +++ b/frontend/src/components/pdf-components/CostComponents.tsx @@ -1,4 +1,5 @@ import { Text, View } from "@react-pdf/renderer"; +import { EscalationRate, Recurring as RecurringType } from "blcc-format/Format"; import InputTable from "./InputTable"; import { styles } from "./pdfStyles"; diff --git a/frontend/src/components/pdf-components/EnergyCostInput.tsx b/frontend/src/components/pdf-components/EnergyCostInput.tsx index 2028797c..25e3ab2d 100644 --- a/frontend/src/components/pdf-components/EnergyCostInput.tsx +++ b/frontend/src/components/pdf-components/EnergyCostInput.tsx @@ -1,9 +1,10 @@ import { Text, View } from "@react-pdf/renderer"; import { CostName, CostPerUnit, CostSavings, Description, EscalationRates, UseIndex } from "./CostComponents"; +import { EnergyCost } from "blcc-format/Format"; import { styles } from "./pdfStyles"; -const EnergyCostInput = (props: { cost; year: number }) => { +const EnergyCostInput = (props: { cost: EnergyCost; year: number }) => { //TODO: specify type for cost const { cost, year } = props; return ( diff --git a/frontend/src/components/pdf-components/GeneralInformation.tsx b/frontend/src/components/pdf-components/GeneralInformation.tsx index 6a473152..9b0d704e 100644 --- a/frontend/src/components/pdf-components/GeneralInformation.tsx +++ b/frontend/src/components/pdf-components/GeneralInformation.tsx @@ -2,7 +2,7 @@ import { Text, View } from "@react-pdf/renderer"; import { AnalysisType, DollarMethod, Project, USLocation } from "blcc-format/Format"; import { styles } from "./pdfStyles"; -const GeneralInformation = (props: { project: Project }) => { +const GeneralInformation = (props: { project: Project[] }) => { const project = props?.project?.[0]; return ( diff --git a/frontend/src/components/pdf-components/InputTable.tsx b/frontend/src/components/pdf-components/InputTable.tsx index 39a41d6e..f7c6dbc1 100644 --- a/frontend/src/components/pdf-components/InputTable.tsx +++ b/frontend/src/components/pdf-components/InputTable.tsx @@ -1,4 +1,5 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { Cost } from "blcc-format/Format"; import InputTableRows from "./InputTableRows"; const border = "1px solid #000"; @@ -26,12 +27,12 @@ const styles = StyleSheet.create({ } }); -const InputTable = (props: { cost; header: string; inputRows: number[]; year: number }) => { +const InputTable = (props: { cost: Cost; header: string; inputRows: number[]; year: number }) => { //TODO: specify type for cost const { header, inputRows, year } = props; - const tableRows = inputRows?.map((val, idx: number) => { + const tableRows = inputRows?.map((val: number, idx: number) => { return [year + idx, `${val * 100}%`]; }); diff --git a/frontend/src/components/pdf-components/InputTableRows.tsx b/frontend/src/components/pdf-components/InputTableRows.tsx index 7ac90aae..c252a959 100644 --- a/frontend/src/components/pdf-components/InputTableRows.tsx +++ b/frontend/src/components/pdf-components/InputTableRows.tsx @@ -29,6 +29,7 @@ const styles = StyleSheet.create({ const InputTableRows = ({ tableRows }: { tableRows }) => { const rows: JSX.Element[] = []; + console.log(tableRows); tableRows?.forEach((item) => rows.push( diff --git a/frontend/src/components/pdf-components/OtherCostInput.tsx b/frontend/src/components/pdf-components/OtherCostInput.tsx index d92ff151..8a541520 100644 --- a/frontend/src/components/pdf-components/OtherCostInput.tsx +++ b/frontend/src/components/pdf-components/OtherCostInput.tsx @@ -9,9 +9,10 @@ import { Recurring } from "./CostComponents"; +import { OtherCost } from "blcc-format/Format"; import { styles } from "./pdfStyles"; -const OtherCostInput = (props: { cost; year: number }) => { +const OtherCostInput = (props: { cost: OtherCost; year: number }) => { //TODO: specify type for cost const { cost, year } = props; return ( diff --git a/frontend/src/components/pdf-components/Results.tsx b/frontend/src/components/pdf-components/Results.tsx index 50811960..d736983d 100644 --- a/frontend/src/components/pdf-components/Results.tsx +++ b/frontend/src/components/pdf-components/Results.tsx @@ -8,7 +8,7 @@ import AnnualResultsPdf from "./Results/AnnualResultsPdf"; import ResultsSummary from "./Results/ResultsSummary"; const Results = (props: { - alternatives: Alternative[] | undefined; + alternatives: Alternative[]; summary: summary; annual: annual; altResults: altResults; @@ -16,7 +16,7 @@ const Results = (props: { }) => { const { alternatives, summary, annual, altResults, graphs } = props; - const altNames = alternatives?.map((alternative) => alternative.name); + const altNames: string[] | undefined = alternatives?.map((alternative) => alternative.name); return ( diff --git a/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx index 65eeeb9b..aed292c4 100644 --- a/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AlternativeResultsPdf.tsx @@ -1,8 +1,9 @@ import { Text, View } from "@react-pdf/renderer"; +import { altResults } from "components/allResultStreams"; import { styles } from "../pdfStyles"; import { NpvAltCashflowTable, NpvAltResourceTable } from "./AlternativeResultsTables"; -const AlternativeResultsPdf = (props: { altNames: string[]; altResults }) => { +const AlternativeResultsPdf = (props: { altNames: string[] | undefined; altResults: altResults }) => { const { altNames, altResults } = props; return ( @@ -14,15 +15,15 @@ const AlternativeResultsPdf = (props: { altNames: string[]; altResults }) => {
- {altNames.map((name, index) => ( + {altNames?.map((name, index) => ( {name} NPV Cash Flow Comparison - + Energy and Water use, Emissions, and Social Cost of GHG Share of LCC Share of Energy Use diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx index 6d8fff09..2fbf9acc 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsPdf.tsx @@ -6,7 +6,7 @@ import { annual } from "../../allResultStreams"; import { styles } from "../pdfStyles"; import { NPVAltTable, NPVComparisonTable } from "./AnnualResultsTables"; -const AnnualResultsPdf = (props: { altNames: string[]; annual: annual; graphs: string[] }) => { +const AnnualResultsPdf = (props: { altNames: string[] | undefined; annual: annual; graphs: string[] }) => { const { altNames, annual, graphs } = props; console.log(annual); // const [srcs, setSrcs] = useState([]); @@ -41,14 +41,14 @@ const AnnualResultsPdf = (props: { altNames: string[]; annual: annual; graphs: s NPV Cash Flow Comparison - + NPV Cash Flows Annual Results for Alternative - {altNames.map((name, index) => ( + {altNames?.map((name, index) => ( {name} NPV Cash Flow by Alternative - + NPV Cash Flows Tag/Object by Year diff --git a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx index 9363ca32..693c7b45 100644 --- a/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx +++ b/frontend/src/components/pdf-components/Results/AnnualResultsTables.tsx @@ -58,10 +58,7 @@ const npvAltTableHeaders = [ ] ]; -export const NPVComparisonTable = (props: { - headers: string[]; - rows: { year: number; key: number; "0": number; "1": number }[]; -}) => { +export const NPVComparisonTable = (props: { headers: string[]; rows: { year: number; [key: string]: number }[] }) => { const { headers, rows } = props; return ( @@ -75,7 +72,7 @@ export const NPVComparisonTable = (props: { ))} - {rows.map((alt: { year: number; key: number; [key: string]: number }) => ( + {rows?.map((alt: { year: number; [key: string]: number }) => ( {alt.year} {Array.from({ length: headers.length - 1 }, (_, i) => ( diff --git a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx index c2a44bc6..fa6651d7 100644 --- a/frontend/src/components/pdf-components/Results/ResultsSummary.tsx +++ b/frontend/src/components/pdf-components/Results/ResultsSummary.tsx @@ -28,7 +28,7 @@ const lifeCycleResultsBaseline = [ "Net Savings & SCC Reductions" ]; -const ResultsSummary = (props: { altNames: string[]; summary: summary }) => { +const ResultsSummary = (props: { altNames: string[] | undefined; summary: summary }) => { const { altNames, summary } = props; return ( <> diff --git a/frontend/src/components/pdf-components/WaterCostInput.tsx b/frontend/src/components/pdf-components/WaterCostInput.tsx index ff684b8a..97699185 100644 --- a/frontend/src/components/pdf-components/WaterCostInput.tsx +++ b/frontend/src/components/pdf-components/WaterCostInput.tsx @@ -1,4 +1,5 @@ import { StyleSheet, Text, View } from "@react-pdf/renderer"; +import { WaterCost } from "blcc-format/Format"; import { CostName, CostSavings, Description, EscalationRates, UseIndex } from "./CostComponents"; import { styles } from "./pdfStyles"; @@ -27,7 +28,7 @@ const localStyles = StyleSheet.create({ } }); -const WaterCostInput = (props: { cost; year: number }) => { +const WaterCostInput = (props: { cost: WaterCost; year: number }) => { //TODO: specify type for cost const cost = props.cost; const year = props.year;