From 308e75f8c714b8466671d31e37eb02b24eb0a15d Mon Sep 17 00:00:00 2001 From: Nils Hofstetter <119439839+Rignchen@users.noreply.github.com> Date: Fri, 31 May 2024 16:00:33 +0200 Subject: [PATCH] Fix: fix a few issues on the backend (#6) fix: fix 404 when trying to access router path fix: rename ngnix conf file fix: add font back in esp32 config fix: post request of type json now get decoded feat: get esp jwt token from the php fix: "sequence user_id_seq not exist" when creating database fix: give nginx it's real name back I'll probably write it wrong next time I have to write it ^^" fix: add lockfile to ensure plugin's hash match feat: make production docker compose fix: take pg password from .env fix: put interface in the right directory and remove adminer fix: rename add-esp.php to esp.php cause ngnix fail with the - refactor: change docker images to take images from last feature version at this date fix: copy .env in the php container fix: handle web socker for esphome esphome needs web sockets to work, without them it just freezes right before the compilation dev: script to reset the state of the mounted volumes\n\n this script is ignored by the gitignore feat: specify default user in readme refactor: change the url to use Subdirectory instead of subdomain fix: repare sed at build of prod fix: postgrest subdirectory now redirect to postg-rest container fix: restore php and postgrest url call fix: 404 when sending data from esp to database refactor: group all .env file in a single one fix: update readme fix: update readme fix: make readme easier to understand fix: remove hard coded env variable from Dockerfile.Postgres --- login/.env.example => .env.example | 7 +- .gitignore | 3 + Dockerfile.Nginx | 19 + Dockerfile.Php | 12 + Dockerfile.Postgres | 3 + Interface/.gitignore | 1 - Interface/package-lock.json | 5002 +++++++++++++++++ .../src/contexts/SampleContext.example.tsx | 4 +- README.md | 126 +- database/db.sql | 2 +- docker-compose.prod.yml | 56 + docker-compose.yml | 14 +- esp32/config/Asap-Regular.ttf | Bin 0 -> 67576 bytes esp32/config/Comic_Sans_MS.ttf | Bin 0 -> 126364 bytes esp32/esp32.yaml | 2 +- login/.gitignore | 1 - login/composer.lock | 322 ++ login/public/esp.php | 40 + login/public/login.php | 2 +- nginx.conf | 104 +- 20 files changed, 5598 insertions(+), 122 deletions(-) rename login/.env.example => .env.example (50%) create mode 100644 Dockerfile.Nginx create mode 100644 Dockerfile.Php create mode 100644 Dockerfile.Postgres create mode 100644 Interface/package-lock.json create mode 100644 docker-compose.prod.yml create mode 100644 esp32/config/Asap-Regular.ttf create mode 100644 esp32/config/Comic_Sans_MS.ttf create mode 100644 login/composer.lock create mode 100644 login/public/esp.php diff --git a/login/.env.example b/.env.example similarity index 50% rename from login/.env.example rename to .env.example index bfe3369..426a44b 100644 --- a/login/.env.example +++ b/.env.example @@ -1,3 +1,8 @@ -JWT_SECRET= POSTGREST_API=http://postg-rest:3000 DETAILED_ERRORS=false + +ESP_PATH=./esp32/config +DB_PATH=./database/data + +JWT_SECRET= +POSTGRES_PASSWORD= diff --git a/.gitignore b/.gitignore index f93c427..d5096c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ .idea # vim backup files *.sw[pon] +.env +# test bash script +reset_test.sh diff --git a/Dockerfile.Nginx b/Dockerfile.Nginx new file mode 100644 index 0000000..554e242 --- /dev/null +++ b/Dockerfile.Nginx @@ -0,0 +1,19 @@ +# node 20, build the application +FROM node:20.12.2-alpine3.19 +COPY Interface . +RUN npm install +RUN npm run build + + +# nginx 1.26 on port 80, keep the build output, nginx config +FROM nginx:1.26-alpine-otel +EXPOSE 80 +COPY --from=0 ./dist /var/www/memoires-info/html +COPY .env /var/www/memoires-info/html/.env + +# copy the nginx config +COPY ./nginx.conf /etc/nginx/conf.d/default.conf +RUN sed -i '/location \/adminer\//,/}/d' /etc/nginx/conf.d/default.conf +# copy php files for ngnix to know they exist +COPY login/public /var/www/memoires-info/php/public + diff --git a/Dockerfile.Php b/Dockerfile.Php new file mode 100644 index 0000000..40222fe --- /dev/null +++ b/Dockerfile.Php @@ -0,0 +1,12 @@ +# php 8.3 with the files, install dependencies +FROM composer:2.7.4 +COPY login . +RUN composer install + +# copy required files to new image +FROM php:8.3-fpm-alpine +COPY login/public /var/www/memoires-info/php/public +COPY login/lib.php /var/www/memoires-info/php +COPY .env /var/www/memoires-info/php/ +COPY --from=0 ./app/vendor /var/www/memoires-info/php/vendor + diff --git a/Dockerfile.Postgres b/Dockerfile.Postgres new file mode 100644 index 0000000..de1a03d --- /dev/null +++ b/Dockerfile.Postgres @@ -0,0 +1,3 @@ +FROM postgres:12.19-alpine +COPY ./database/db.sql /docker-entrypoint-initdb.d/db.sql + diff --git a/Interface/.gitignore b/Interface/.gitignore index 0102f79..a3f2ce2 100644 --- a/Interface/.gitignore +++ b/Interface/.gitignore @@ -1,4 +1,3 @@ -package-lock.json /src/contexts/SampleContext.tsx /test.http diff --git a/Interface/package-lock.json b/Interface/package-lock.json new file mode 100644 index 0000000..ca4c5eb --- /dev/null +++ b/Interface/package-lock.json @@ -0,0 +1,5002 @@ +{ + "name": "ex-postgress", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ex-postgress", + "version": "0.0.0", + "dependencies": { + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-popover": "^1.0.7", + "@radix-ui/react-slot": "^1.0.2", + "chart.js": "^4.4.1", + "chartjs-plugin-zoom": "^2.0.1", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.0", + "date-fns": "^3.3.1", + "embla-carousel-react": "^8.0.0", + "frappe-charts": "^1.6.2", + "localforage": "^1.10.0", + "match-sorter": "^6.3.4", + "moment": "^2.30.1", + "react": "^18.2.0", + "react-chartjs-2": "^5.2.0", + "react-day-picker": "^8.10.0", + "react-dom": "^18.2.0", + "react-router-dom": "^6.22.0", + "sort-by": "^0.0.2", + "tailwind-merge": "^2.2.1", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@types/node": "^20.11.24", + "@types/react": "^18.2.55", + "@types/react-dom": "^18.2.19", + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.17", + "eslint": "^8.56.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.35", + "tailwindcss": "^3.4.1", + "typescript": "^5.2.2", + "vite": "^5.1.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "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/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.24.1.tgz", + "integrity": "sha512-kDJgnPujTmAZ/9q2CN4m2/lRsUUPDvsG3+tSHWUJIzMGTt5U/b/fwWd3RO3n+5mjLrsBrVa5eKFRVSQbi3dF1w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.24.1.tgz", + "integrity": "sha512-1v202n7aUq4uXAieRTKcwPzNyphlCuqHHDcdSNc+vdhoTEZcFMh+L5yZuCmGaIO7bs1nJUNfHB89TZyoL48xNA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.1.tgz", + "integrity": "sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", + "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "dependencies": { + "@floating-ui/dom": "^1.6.1" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", + "dev": true + }, + "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==", + "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/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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==", + "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==", + "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==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "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==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==" + }, + "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==", + "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==", + "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==", + "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==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz", + "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz", + "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz", + "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz", + "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.5.tgz", + "integrity": "sha512-aJeDjQhywg9LBu2t/At58hCvr7pEm0o2Ke1x33B+MhjNmmZ17sy4KImo0KPLgsnc/zN7GPdce8Cnn0SWvwZO7g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-escape-keydown": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz", + "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.4.tgz", + "integrity": "sha512-sL04Mgvf+FmyvZeYfNu1EPAaaxD+aw7cYeIB9L9Fvq8+urhltTRaEo5ysKOpHuKPclsZcSUMKlN05x4u+CINpA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz", + "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.0.7.tgz", + "integrity": "sha512-shtvVnlsxT6faMnK/a7n0wptwBD23xc1Z5mdrtKLwVEfsEMXodS0r5s0/g5P0hX//EKYZS2sxUjqfzlg52ZSnQ==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/primitive": "1.0.1", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-dismissable-layer": "1.0.5", + "@radix-ui/react-focus-guards": "1.0.1", + "@radix-ui/react-focus-scope": "1.0.4", + "@radix-ui/react-id": "1.0.1", + "@radix-ui/react-popper": "1.1.3", + "@radix-ui/react-portal": "1.0.4", + "@radix-ui/react-presence": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-slot": "1.0.2", + "@radix-ui/react-use-controllable-state": "1.0.1", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.5.5" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.3.tgz", + "integrity": "sha512-cKpopj/5RHZWjrbF2846jBNacjQVwkP068DfmgrNJXpvVWrOvlAmE9xSiy5OqeE+Gi8D9fP+oDhUnPqNMY8/5w==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.0.3", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-context": "1.0.1", + "@radix-ui/react-primitive": "1.0.3", + "@radix-ui/react-use-callback-ref": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1", + "@radix-ui/react-use-rect": "1.0.1", + "@radix-ui/react-use-size": "1.0.1", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.4.tgz", + "integrity": "sha512-Qki+C/EuGUVCQTOTD5vzJzJuMUlewbzuKyUy+/iHM2uwGiru9gZeBJtHAPKAEkB5KWGi9mP/CHKcY0wt1aW45Q==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-primitive": "1.0.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.0.1.tgz", + "integrity": "sha512-UXLW4UAbIY5ZjcvzjfRFo5gxva8QirC9hF7wRE4U5gz+TP0DbRk+//qyuAQ1McDxBt1xNMBTaciFGvEmJvAZCg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz", + "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-slot": "1.0.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0", + "react-dom": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz", + "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-compose-refs": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz", + "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz", + "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz", + "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-callback-ref": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz", + "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz", + "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/rect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz", + "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==", + "dependencies": { + "@babel/runtime": "^7.13.10", + "@radix-ui/react-use-layout-effect": "1.0.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz", + "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==", + "dependencies": { + "@babel/runtime": "^7.13.10" + } + }, + "node_modules/@remix-run/router": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.3.tgz", + "integrity": "sha512-Oy8rmScVrVxWZVOpEF57ovlnhpZ8CCPlnIIumVcV9nFdiSIrus99+Lw78ekXyGvVDlIsFJbSfmSovJUhCWYV3w==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", + "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", + "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", + "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", + "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", + "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", + "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", + "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", + "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", + "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", + "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", + "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", + "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", + "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "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.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.12", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", + "devOptional": true + }, + "node_modules/@types/react": { + "version": "18.2.70", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.70.tgz", + "integrity": "sha512-hjlM2hho2vqklPhopNkXkdkeq6Lv8WSZTpr7956zY+3WS5cfYUewtCzsJLsbW5dEv3lfSeQ4W14ZFeKC437JRQ==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.2.22", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.22.tgz", + "integrity": "sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz", + "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==", + "devOptional": true + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "dev": true, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.2.1.tgz", + "integrity": "sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.5", + "@babel/plugin-transform-react-jsx-self": "^7.23.3", + "@babel/plugin-transform-react-jsx-source": "^7.23.3", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "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==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "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/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.19", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", + "integrity": "sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==", + "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.0", + "caniuse-lite": "^1.0.30001599", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "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==" + }, + "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==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "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-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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001600", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001600.tgz", + "integrity": "sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==", + "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/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/chart.js": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.2.tgz", + "integrity": "sha512-6GD7iKwFpP5kbSD4MeRRRlTnQvxfQREy36uEtm1hzHzcOqwWx0YEHuspuoNlslu+nciLIB7fjjsHkUv/FzFcOg==", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chartjs-plugin-zoom": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/chartjs-plugin-zoom/-/chartjs-plugin-zoom-2.0.1.tgz", + "integrity": "sha512-ogOmLu6e+Q7E1XWOCOz9YwybMslz9qNfGV2a+qjfmqJYpsw5ZMoRHZBUyW+NGhkpQ5PwwPA/+rikHpBZb7PZuA==", + "dependencies": { + "hammerjs": "^2.0.8" + }, + "peerDependencies": { + "chart.js": ">=3.2.0" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "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/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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "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==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/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/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "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==", + "devOptional": true + }, + "node_modules/date-fns": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.6.0.tgz", + "integrity": "sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.717.tgz", + "integrity": "sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==", + "dev": true + }, + "node_modules/embla-carousel": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel/-/embla-carousel-8.0.0.tgz", + "integrity": "sha512-ecixcyqS6oKD2nh5Nj5MObcgoSILWNI/GtBxkidn5ytFaCCmwVHo2SecksaQZHcARMMpIR2dWOlSIdA1LkZFUA==" + }, + "node_modules/embla-carousel-react": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel-react/-/embla-carousel-react-8.0.0.tgz", + "integrity": "sha512-qT0dii8ZwoCtEIBE6ogjqU2+5IwnGfdt2teKjCzW88JRErflhlCpz8KjWnW8xoRZOP8g0clRtsMEFoAgS/elfA==", + "dependencies": { + "embla-carousel": "8.0.0", + "embla-carousel-reactive-utils": "8.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/embla-carousel-reactive-utils": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/embla-carousel-reactive-utils/-/embla-carousel-reactive-utils-8.0.0.tgz", + "integrity": "sha512-JCw0CqCXI7tbHDRogBb9PoeMLyjEC1vpN0lDOzUjmlfVgtfF+ffLaOK8bVtXVUEbNs/3guGe3NSzA5J5aYzLzw==", + "peerDependencies": { + "embla-carousel": "8.0.0" + } + }, + "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==" + }, + "node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "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/eslint": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz", + "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.6.tgz", + "integrity": "sha512-NjGXdm7zgcKRkKMua34qVO9doI7VOxZ6ancSvBELJSSoX97jyndXcSoa8XBh69JoB31dNz3EEzlMcizZl7LaMA==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/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/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/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/eslint/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/eslint/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/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/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/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint/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/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "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==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/frappe-charts": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/frappe-charts/-/frappe-charts-1.6.2.tgz", + "integrity": "sha512-9TC3/+YVUi84yYoEbxFiSqu+1FQ5If/ydUNj6i8FRpwynd08t6a7RkS+IRJozAk6NfdL8/LVTTE1DUOjjKZZxg==" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/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/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" + }, + "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/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "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==", + "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==", + "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==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "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/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "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/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "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/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lie": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz", + "integrity": "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "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==" + }, + "node_modules/localforage": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/localforage/-/localforage-1.10.0.tgz", + "integrity": "sha512-14/H1aX7hzBBmmh7sGPd+AOMkkIrHM3Z1PAyGgZigA1H1p5O5ANnMyWzvpAETtG68/dC4pC0ncy3+PPGzXZHPg==", + "dependencies": { + "lie": "3.1.1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "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/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/match-sorter": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-6.3.4.tgz", + "integrity": "sha512-jfZW7cWS5y/1xswZo8VBOdudUiSd9nifYRWphc9M5D/ee4w4AoXLgBEdRbgVaxbMuagBPeUC5y2Hi8DO6o9aDg==", + "dependencies": { + "@babel/runtime": "^7.23.8", + "remove-accents": "0.5.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "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==", + "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/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/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "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==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "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.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "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==", + "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/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "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==", + "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.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "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/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "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/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-chartjs-2": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz", + "integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==", + "peerDependencies": { + "chart.js": "^4.1.1", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-day-picker": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-8.10.0.tgz", + "integrity": "sha512-mz+qeyrOM7++1NCb1ARXmkjMkzWVh2GL9YiPbRjKe0zHccvekk4HE+0MPOZOrosn8r8zTHIIeOUXTmXRqmkRmg==", + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "date-fns": "^2.28.0 || ^3.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz", + "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.3", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-router": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.3.tgz", + "integrity": "sha512-dr2eb3Mj5zK2YISHK++foM9w4eBnO23eKnZEDs7c880P6oKbrjz/Svg9+nxqtHQK+oMW4OtjZca0RqPglXxguQ==", + "dependencies": { + "@remix-run/router": "1.15.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.3", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.3.tgz", + "integrity": "sha512-7ZILI7HjcE+p31oQvwbokjk6OA/bnFxrhJ19n82Ex9Ph8fNAq+Hm/7KchpMGlTgWhUxRHMMCut+vEtNpWpowKw==", + "dependencies": { + "@remix-run/router": "1.15.3", + "react-router": "6.22.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "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/remove-accents": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", + "integrity": "sha512-8g3/Otx1eJaVD12e31UbJj1YzdtVvzH85HV7t+9MJYk/u3XmkOUJ5Ys9wQrf9PCPK8+xn4ymzqYCiZl6QWKn+A==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "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/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", + "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.13.0", + "@rollup/rollup-android-arm64": "4.13.0", + "@rollup/rollup-darwin-arm64": "4.13.0", + "@rollup/rollup-darwin-x64": "4.13.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", + "@rollup/rollup-linux-arm64-gnu": "4.13.0", + "@rollup/rollup-linux-arm64-musl": "4.13.0", + "@rollup/rollup-linux-riscv64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-gnu": "4.13.0", + "@rollup/rollup-linux-x64-musl": "4.13.0", + "@rollup/rollup-win32-arm64-msvc": "4.13.0", + "@rollup/rollup-win32-ia32-msvc": "4.13.0", + "@rollup/rollup-win32-x64-msvc": "4.13.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==", + "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/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/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==", + "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==", + "engines": { + "node": ">=8" + } + }, + "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==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sort-by": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/sort-by/-/sort-by-0.0.2.tgz", + "integrity": "sha512-iOX5oHA4a0eqTMFiWrHYqv924UeRKFBLhym7iwSVG37Egg2wApgZKAjyzM9WZjMwKv6+8Zi+nIaJ7FYsO9EkoA==" + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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==", + "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/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==" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.2.tgz", + "integrity": "sha512-tWANXsnmJzgw6mQ07nE3aCDkCK4QdT3ThPMCzawoYA2Pws7vSTCvz3Vrjg61jVUGfFZPJzxEP+NimbcW+EdaDw==", + "dependencies": { + "@babel/runtime": "^7.24.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "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.19.1", + "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-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "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==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "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==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", + "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "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.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "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/vite": { + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.6.tgz", + "integrity": "sha512-FPtnxFlSIKYjZ2eosBQamz4CbyrTizbZ3hnGJlh/wMtCrlp1Hah6AzBLjGI5I2urTfNnpovpHdrL6YRuBOPnCA==", + "dev": true, + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.36", + "rollup": "^4.13.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": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "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==", + "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==", + "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-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "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==", + "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==" + }, + "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==" + }, + "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==", + "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/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "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==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/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==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?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==", + "dev": 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.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/Interface/src/contexts/SampleContext.example.tsx b/Interface/src/contexts/SampleContext.example.tsx index 2376b15..b98f313 100644 --- a/Interface/src/contexts/SampleContext.example.tsx +++ b/Interface/src/contexts/SampleContext.example.tsx @@ -1,4 +1,4 @@ export const SampleContext = { - urlData: "", - urlLogin: "" + urlData: "http://127.0.0.1/postgrest", + urlLogin: "http://127.0.0.1/php", } diff --git a/README.md b/README.md index eb8d20e..36e1743 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,46 @@ [Info]: <> ( All the information that are likely to need to be updated have a comment above them like this one ) -# Climat-Guardian +# Climate-Guardian This project was made for the non-profit organization memoires-informatiques\ Memoires-informatiques has a lot of old computers and other electronic devices that need to be stored in a controlled environment\ The goal of this project is to monitor the temperature and humidity of the different rooms of the organization and to display the data on a web interface +# Setup +From now on, the computer that runs the docker will be called "server" and +the computer used by the user will be called "computer" + +## Network +The server and the esp need to be connected to the same network, it is recommended to give both of them a static ip address\ +The computer can be connected from any network as long as the network has open ports, otherwise you'll have to be on the same network as the server + +![hardware](/.assets/hardware-diagram.png)\ +![software](/.assets/software-diagram.png) + +## Requirements +For this project to work you need to have the following installed on the server: +- Linux (Tested on [Ubuntu Server 22.04](https://ubuntu.com/download/server)) +- [Docker Engine](https://docs.docker.com/engine/install/ubuntu/) +- [Docker Compose](https://docs.docker.com/compose/install/) +- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git) +- [Curl](https://curl.se/download.html) +- [jq](https://stedolan.github.io/jq/download/) +```bash +sudo apt-get update +sudo apt-get install git curl jq +sudo apt-get install ca-certificates +sudo install -m 0755 -d /etc/apt/keyrings +sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc +sudo chmod a+r /etc/apt/keyrings/docker.asc +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt-get update +sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin +``` + ## Installation -First thing you need to do is to clone the repository from the github page and install the dependencies +First thing you need to do is to clone the repository from GitHub on the server ```bash -git clone https://github.com/museebolo/climat-guardian.git -cd climat-guardian/login -composer install -cd ../Interface -npm install -npm run build -cd .. +git clone https://github.com/museebolo/climat-guardian.git && cd climat-guardian ``` --- @@ -23,68 +48,69 @@ cd .. This is the list of all the files that end with .example ) Once the repository is cloned you can remove the `.example` at the end of the following files: -- login/.env.example -- esp32/config/secrets.example.yaml +- .env.example +- esp32/config/secrets.yaml.example +- Interface/src/contexts/SampleContext.example.tsx ```bash -mv login/.env.example login/.env -mv esp32/config/secrets.example.yaml esp32/config/secrets.yaml +cp .env.example .env +cp esp32/config/secrets.yaml.example esp32/config/secrets.yaml +cp Interface/src/contexts/SampleContext.example.tsx Interface/src/contexts/SampleContext.tsx ``` --- Now you want to generate a secret key for the jwt tokens used by the api ```bash -tr -dc A-Za-z0-9 > .env ``` -[Info]: <> ( - This is the list of all the files that require to know the jwt secret key -) -You then want to copy the secret key and paste it the following files: -- login/.env -- postgrest.conf +You may also want to generate a random password for the database +```bash +sed -i '/POSTGRES_PASSWORD/d' .env +echo "POSTGRES_PASSWORD=$(tr -dc A-Za-z0-9 > .env +``` ---- -Finally you can fill the `esp32/config/secrets.yaml` with the credentials of the wifi\ +It is recommended to let the other environment variables as they are -## Data transfer -Here are 2 diagrams that show how the data is transfered from the esp32 to the web interface -### Hardware -![hardware](/.assets/hardware-diagram.png) -### Software -![software](/.assets/software-diagram.png) +--- +Finally, you **have to** fill the Wi-Fi credentials in `esp32/config/secrets.yaml`\ +You also **have to** change the `127.0.0.1` in `Interface/src/contexts/SampleContext.tsx` to the ip address of the server ## Start the project -Once everything is configured you can start the project by running the docker compose +Once everything is configured on the server, you can start the project by running the docker compose on the server ```bash -docker compose up +docker compose -f docker-compose.prod.yml up -d --remove-orphans --build ``` -Once the docker is running you can access the web interface by going to `memoires-info.com` in your web browser (or the ip address of the computer that runs the docker) +Once the docker is running you can access the web interface by going to the ip address of the server in the web browser of the computer\ +the default user is `admin` and has `admin` as password ![web interface](/.assets/dashboard.png) ## ESP 32 Installation -This project uses esp home to manage the esp32, you can configure the esp32 by following the instructions below -- Connect yourself to the [esphome](https://github.com/esphome/esphome) interface by going to `esphome.memoires-info.com` in your web browser (or the ip address of the computer that runs the docker) -- Plug the esp32 to your computer -- Press the `+ ADD DEVICE` button inside esp home +This project uses [esp home](https://github.com/esphome/esphome) to manage the esp32, you can configure the esp32 by following the instructions below +- Connect yourself to the esp home interface by going to `127.0.0.1/esp` in the web browser of the computer (replace `127.0.0.1` with the ip address of the server) +- Plug the esp32 to the server +- Press the `+ NEW DEVICE` button inside esp home - Name your device - Select `ESP32` (on the top of the list) -- Skip the installation, you'll have to reinstall it later anyway -- Go to the card of the device and press `EDIT` -- Copy everything from the line 31 of the `esp32/esp32.yaml` and paste it at the end of your esp32's configuration file - Press `INSTALL` and select `Plug into the computer running ESPHome Dashboard` (the 3rd option) -- Look for the device for wich the path is `/dev/ttyUSB0` and select it +- Select the device with ``/dev/ttyUSB0`` as path +- Wait for the installation to finish\ +Be sure to memorize the ip address of the esp32 (you can find it in the logs)\ +[15:39:12][C][wifi:416]: IP Address: 172.16.5.65 +- You can now unplug the esp32 and plug it to any other power source +- Press `Edit` at the bottom of the logs +- Copy everything from the line 31 of the file `esp32/esp32.yaml` on the server and paste it at the end of your esp32's configuration file +```bash +clear && cat esp32/esp32.yaml | sed -n '31,$p' +``` +- Replace the XXX... at the end of the code with the token of your esp32\ +you can generate this token by running the following command on the server (replace `255.255.255.255` with the ip address of the esp32) +```bash +export TOKEN=$(curl 'http://127.0.0.1/php/login.php?username=admin&password=admin' | jq '.token' -r) +curl -H "Authorization: Bearer $TOKEN" "http://127.0.0.1/php/esp.php?ip=255.255.255.255" | jq '.token' -r +``` +- Press `INSTALL` and select `Wirelessly` (the 1st option) - Wait for the installation to finish - Press `STOP` to exit the logs -- Unplug the esp32 the computer and plug it to any other power source -- If you need to update the configuration of the esp32, you can now do it wirelessly from the esp home interface - -## Adminer -If you want to access the database you can go to `adminer.memoires-info.com` in your web browser (or the ip address of the computer that runs the docker)\ -You can login with the following credentials: -- System: PostgreSQL -- Server: db -- Username: postgres -- Password: example -- Database: memoires-info diff --git a/database/db.sql b/database/db.sql index 05986c1..bba0a92 100644 --- a/database/db.sql +++ b/database/db.sql @@ -50,7 +50,7 @@ create table if not exists api.users ( create role web_user nologin; grant usage on schema api to web_user; grant select on api.data to web_user; -grant usage, select on sequence users_id_seq to web_user; +grant usage, select on sequence api.users_id_seq to web_user; grant insert, update, delete on api.users to web_user; grant web_user to authenticator; diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml new file mode 100644 index 0000000..c70bda4 --- /dev/null +++ b/docker-compose.prod.yml @@ -0,0 +1,56 @@ +# Use postgres/example user/password credentials +version: '3.9' + +services: + esphome: + image: esphome/esphome:2024.4 + volumes: + - "${ESP_PATH}:/config" + - /etc/localtime:/etc/localtime:ro + - /dev/ttyUSB0:/dev/ttyUSB0 + privileged: true + + db: + build: + context: . + dockerfile: Dockerfile.Postgres + image: postgres-memoires-info + shm_size: 128mb + volumes: + - "${DB_PATH}:/var/lib/postgresql/data" + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_DB: memoires-info + + postg-rest: + image: postgrest/postgrest:v12.0.3 + environment: + PGRST_JWT_SECRET: "${JWT_SECRET}" + PGRST_DB_URI: "postgres://postgres:${POSTGRES_PASSWORD}@db:5432/memoires-info" + PGRST_DB_ANO: role = "web_anon" + PGRST_DB_SCHEMAS: "api" + PGRST_OPENAPI_SERVE: proxy-uri = "http://0.0.0.0:3000" + depends_on: + - db + + php: + build: + context: . + dockerfile: Dockerfile.Php + image: php-memoires-info + depends_on: + - db + + web: + build: + context: . + dockerfile: Dockerfile.Nginx + ports: + - '80:80' + image: nginx-memoires-info + depends_on: + - php + - postg-rest + - esphome + diff --git a/docker-compose.yml b/docker-compose.yml index 472e792..b15e887 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ version: '3.9' services: esphome: - image: esphome/esphome + image: esphome/esphome:2024.4 volumes: - ./esp32/config:/config - /etc/localtime:/etc/localtime:ro @@ -11,7 +11,7 @@ services: privileged: true db: - image: postgres + image: postgres:12.19-alpine shm_size: 128mb volumes: - "./database/data:/var/lib/postgresql/data" @@ -27,7 +27,7 @@ services: - db postg-rest: - image: postgrest/postgrest + image: postgrest/postgrest:v12.0.3 ports: - '3000:3000' volumes: @@ -36,15 +36,15 @@ services: - db command: postgrest /etc/postgrest.conf - php-fpm: - image: php:8-fpm + php: + image: php:8.3-fpm-alpine volumes: - ./login:/var/www/memoires-info/php depends_on: - db web: - image: nginx:latest + image: nginx:1.26-alpine-otel ports: - '80:80' volumes: @@ -52,7 +52,7 @@ services: - ./nginx.conf:/etc/nginx/conf.d/default.conf - ./login:/var/www/memoires-info/php depends_on: - - php-fpm + - php - postg-rest - adminer - esphome diff --git a/esp32/config/Asap-Regular.ttf b/esp32/config/Asap-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..964087326ff715bdce5ebba8e111db0a1838adef GIT binary patch literal 67576 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 PyBYTwXMtX`MXLVZ`DF5rf{X|};M(@gJRO6Wxf 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 U_`3LQucm(aet5sR7s%ZI0n;jcOaK4? literal 0 HcmV?d00001 diff --git a/esp32/esp32.yaml b/esp32/esp32.yaml index c65a644..7075e48 100644 --- a/esp32/esp32.yaml +++ b/esp32/esp32.yaml @@ -124,5 +124,5 @@ time: json: |- root["humidity"] = id(humidity).state; root["temperature"] = id(temperature).state; - root["id"] = id(ip_address).state; + root["ip"] = id(ip_address).state; root["unix_timestamp"] = id(current_time).now().timestamp; diff --git a/login/.gitignore b/login/.gitignore index d06f1e9..3d5163b 100644 --- a/login/.gitignore +++ b/login/.gitignore @@ -1,3 +1,2 @@ -/composer.lock /vendor/ .env diff --git a/login/composer.lock b/login/composer.lock new file mode 100644 index 0000000..4f32b69 --- /dev/null +++ b/login/composer.lock @@ -0,0 +1,322 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "3e393e0a4ebbc277ef2370c666d92ae8", + "packages": [ + { + "name": "firebase/php-jwt", + "version": "v6.10.0", + "source": { + "type": "git", + "url": "https://github.com/firebase/php-jwt.git", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/a49db6f0a5033aef5143295342f1c95521b075ff", + "reference": "a49db6f0a5033aef5143295342f1c95521b075ff", + "shasum": "" + }, + "require": { + "php": "^7.4||^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^6.5||^7.4", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^1.0||^2.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/firebase/php-jwt/issues", + "source": "https://github.com/firebase/php-jwt/tree/v6.10.0" + }, + "time": "2023-12-01T16:26:39+00:00" + }, + { + "name": "symfony/dotenv", + "version": "v7.0.4", + "source": { + "type": "git", + "url": "https://github.com/symfony/dotenv.git", + "reference": "8017ea2f0ff4fbda6ae1bf3f5409d5ecff982067" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/8017ea2f0ff4fbda6ae1bf3f5409d5ecff982067", + "reference": "8017ea2f0ff4fbda6ae1bf3f5409d5ecff982067", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "conflict": { + "symfony/console": "<6.4", + "symfony/process": "<6.4" + }, + "require-dev": { + "symfony/console": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Dotenv\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Registers environment variables from a .env file", + "homepage": "https://symfony.com", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "source": "https://github.com/symfony/dotenv/tree/v7.0.4" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-02-09T10:53:15+00:00" + } + ], + "packages-dev": [ + { + "name": "symfony/polyfill-mbstring", + "version": "v1.29.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-01-29T20:11:03+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v7.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/console": "<6.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v7.0.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-03-19T11:57:22+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "ext-curl": "*" + }, + "platform-dev": [], + "plugin-api-version": "2.6.0" +} diff --git a/login/public/esp.php b/login/public/esp.php new file mode 100644 index 0000000..dba6caa --- /dev/null +++ b/login/public/esp.php @@ -0,0 +1,40 @@ + $_GET, + 'POST' => json_decode(file_get_contents("php://input"), true), + default => output(['error' => 'Unsupported method'], 405), +}; + +// check if the esp's ip is provided +if (!isset($data['ip'])) + output(['error' => 'IP is required'], 400); + +// Load environment variables +$dotenv = new Dotenv(); +$dotenv->load(__DIR__ . '/../.env'); + +// check if the user is authenticated +$user = getallheaders()['Authorization']; +if (!isset($user)) + output(['error' => 'Unauthorized'], 401); + +// remove the Bearer prefix +$user = substr($user, 7); + +// test if the user is web_user +$decoded = JWT::decode($user, new Key($_ENV['JWT_SECRET'], 'HS256')); +if ($decoded->role !== 'web_user') + output(['error' => 'Unauthorized'], 401); + +// Generate a token for the esp +$token = JWT::encode(['role' => 'esp32', 'ip' => $data['ip']], $_ENV['JWT_SECRET'], 'HS256'); + +output(['token' => $token], 200); \ No newline at end of file diff --git a/login/public/login.php b/login/public/login.php index 57a668c..a535526 100644 --- a/login/public/login.php +++ b/login/public/login.php @@ -7,7 +7,7 @@ $data = match ($_SERVER['REQUEST_METHOD']) { 'GET' => $_GET, - 'POST' => $_POST, + 'POST' => json_decode(file_get_contents("php://input"), true), default => output(['error' => 'Unsupported method'], 405), }; diff --git a/nginx.conf b/nginx.conf index c87c578..4fcdefd 100644 --- a/nginx.conf +++ b/nginx.conf @@ -1,60 +1,50 @@ server { - # if no Host match, close the connection with a 404 error - server_name _; - return 404; -} -server { # react app - index index.html; - server_name memoires-info.com; - error_log /var/log/nginx/error.log; - access_log /var/log/nginx/access.log; + # Logs + rewrite_log on; + error_log /var/log/nginx/error.log; + access_log /var/log/nginx/access.log; - location / { - root /var/www/memoires-info/html; - try_files $uri $uri/ =404; - } -} -server { # php login - server_name login.memoires-info.com; - error_log /var/log/nginx/error.log; - access_log /var/log/nginx/access.log; - location / { - root /var/www/memoires-info/php/public; - try_files $uri =404; - fastcgi_pass php-fpm:9000; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - } -} -server { # esphome - error_log /var/log/nginx/error.log; - access_log /var/log/nginx/access.log; - server_name esphome.memoires-info.com; - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_pass http://esphome:6052/; - } -} -server { # adminer - error_log /var/log/nginx/error.log; - access_log /var/log/nginx/access.log; - server_name adminer.memoires-info.com; - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_pass http://adminer:8080/; - } -} -server { # postgrest - error_log /var/log/nginx/error.log; - access_log /var/log/nginx/access.log; - server_name postgrest.memoires-info.com; - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_pass http://postg-rest:3000/; - } -} + location /php/ { + rewrite ^/php(.*)$ $1 break; + root /var/www/memoires-info/php/public; + fastcgi_pass php:9000; + try_files $uri =404; + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + } + + location /esp/ { + rewrite ^/esp(.*)$ $1 break; + add_header X-debug-message "uri: $uri" always; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://esphome:6052/; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /adminer/ { + rewrite ^/adminer(.*)$ $1 break; + add_header X-debug-message "uri: $uri" always; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://adminer:8080/; + } + location /postgrest/ { + rewrite ^/postgrest(.*)$ $1 break; + add_header X-debug-message "uri: $uri" always; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_pass http://postg-rest:3000/; + } + + location / { + root /var/www/memoires-info/html; + add_header X-debug-message "uri: $uri" always; + try_files $uri $uri/ /index.html; + } +}