From 8634cc66f5cff2a9f970a4924a82d8273da8f7bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20K=C3=BCndig?= Date: Fri, 8 Sep 2023 13:22:42 +0200 Subject: [PATCH] feature(website): add initial version of transparency page (#564) --- admin/package.json | 2 +- package-lock.json | 1394 ++++++++--------- shared/locales/de/website-transparency.json | 59 +- shared/locales/en/website-transparency.json | 60 +- .../stats/ContributionStatsCalculator.test.ts | 26 +- .../stats/ContributionStatsCalculator.ts | 33 +- .../src/utils/stats/PaymentStatsCalculator.ts | 19 +- ui/daisyui-themes.ts | 2 +- ui/src/components/badge/badge.tsx | 8 + ui/src/components/badge/index.ts | 1 + ui/src/components/index.ts | 2 - ui/src/components/tooltip/index.tsx | 1 + ui/src/components/tooltip/tooltip.tsx | 8 + ui/src/components/typography/typography.tsx | 2 + ui/src/index.ts | 5 +- website/package.json | 1 - .../[country]/(website)/(home)/section-4.tsx | 2 +- .../transparency/[currency]/charts/page.tsx | 2 +- .../[currency]/charts/transparency-charts.tsx | 4 +- .../[currency]/contribution-stats.ts | 261 --- .../transparency/[currency]/info-card.tsx | 53 + .../transparency/[currency]/page.tsx | 47 +- .../transparency/[currency]/payment-stats.ts | 341 ---- .../transparency/[currency]/section-1.tsx | 47 + .../transparency/[currency]/section-2.tsx | 95 ++ .../[currency]/section-3-cards.tsx | 53 + .../transparency/[currency]/section-3.tsx | 43 + .../transparency/[currency]/section-4.tsx | 174 ++ website/src/i18n.ts | 6 +- 29 files changed, 1333 insertions(+), 1418 deletions(-) create mode 100644 ui/src/components/badge/badge.tsx create mode 100644 ui/src/components/badge/index.ts delete mode 100644 ui/src/components/index.ts create mode 100644 ui/src/components/tooltip/index.tsx create mode 100644 ui/src/components/tooltip/tooltip.tsx delete mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/contribution-stats.ts create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/info-card.tsx delete mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/payment-stats.ts create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-1.tsx create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-2.tsx create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3-cards.tsx create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3.tsx create mode 100644 website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-4.tsx diff --git a/admin/package.json b/admin/package.json index 47f00f151..7c115239f 100644 --- a/admin/package.json +++ b/admin/package.json @@ -44,7 +44,7 @@ "@mui/x-date-pickers": "^6.12.1", "@socialincome/shared": "^1.0.0", "algoliasearch": "^4.19.1", - "firebase": "^10.3.1", + "firebase": "^9.23.0", "firecms": "2.0.5", "lodash": "^4.17.21", "luxon": "^3.4.2", diff --git a/package-lock.json b/package-lock.json index 6cc31ba15..583937ba2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "@mui/x-date-pickers": "^6.12.1", "@socialincome/shared": "^1.0.0", "algoliasearch": "^4.19.1", - "firebase": "^10.3.1", + "firebase": "^9.23.0", "firecms": "2.0.5", "lodash": "^4.17.21", "luxon": "^3.4.2", @@ -67,204 +67,6 @@ "vite": "^4.4.9" } }, - "admin/node_modules/@firebase/app": { - "version": "0.9.18", - "resolved": "https://registry.npmjs.org/@firebase/app/-/app-0.9.18.tgz", - "integrity": "sha512-SIJi3B/LzNezaEgbFCFIem12+51khkA3iewYljPQPUArWGSAr1cO9NK8TvtJWax5GMKSmQbJPqgi6a+gxHrWGQ==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "idb": "7.1.1", - "tslib": "^2.1.0" - } - }, - "admin/node_modules/@firebase/app-compat": { - "version": "0.2.18", - "resolved": "https://registry.npmjs.org/@firebase/app-compat/-/app-compat-0.2.18.tgz", - "integrity": "sha512-zUbAAZHhwmMUyaNFiFr+1Z/sfcxSQBFrRhpjzzpQMTfiV2C/+P0mC3BQA0HsysdGSYOlwrCs5rEGOyarhRU9Kw==", - "dependencies": { - "@firebase/app": "0.9.18", - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "tslib": "^2.1.0" - } - }, - "admin/node_modules/@firebase/auth": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@firebase/auth/-/auth-1.3.0.tgz", - "integrity": "sha512-vjK4CHbY9aWdiVOrKi6mpa8z6uxeaf7LB/MZTHuZOiGHMcUoTGB6TeMbRShyqk1uaMrxhhZ5Ar/dR0965E1qyA==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app": "0.x", - "@react-native-async-storage/async-storage": "^1.18.1" - }, - "peerDependenciesMeta": { - "@react-native-async-storage/async-storage": { - "optional": true - } - } - }, - "admin/node_modules/@firebase/auth-compat": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/@firebase/auth-compat/-/auth-compat-0.4.6.tgz", - "integrity": "sha512-pKp1d4fSf+yoy1EBjTx9ISxlunqhW0vTICk0ByZ3e+Lp6ZIXThfUy4F1hAJlEafD/arM0oepRiAh7LXS1xn/BA==", - "dependencies": { - "@firebase/auth": "1.3.0", - "@firebase/auth-types": "0.12.0", - "@firebase/component": "0.6.4", - "@firebase/util": "1.9.3", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "admin/node_modules/@firebase/database": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@firebase/database/-/database-1.0.1.tgz", - "integrity": "sha512-VAhF7gYwunW4Lw/+RQZvW8dlsf2r0YYqV9W0Gi2Mz8+0TGg1mBJWoUtsHfOr8kPJXhcLsC4eP/z3x6L/Fvjk/A==", - "dependencies": { - "@firebase/auth-interop-types": "0.2.1", - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "faye-websocket": "0.11.4", - "tslib": "^2.1.0" - } - }, - "admin/node_modules/@firebase/database-compat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-1.0.1.tgz", - "integrity": "sha512-ky82yLIboLxtAIWyW/52a6HLMVTzD2kpZlEilVDok73pNPLjkJYowj8iaIWK5nTy7+6Gxt7d00zfjL6zckGdXQ==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/database": "1.0.1", - "@firebase/database-types": "1.0.0", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "tslib": "^2.1.0" - } - }, - "admin/node_modules/@firebase/database-types": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-1.0.0.tgz", - "integrity": "sha512-SjnXStoE0Q56HcFgNQ+9SsmJc0c8TqGARdI/T44KXy+Ets3r6x/ivhQozT66bMnCEjJRywYoxNurRTMlZF8VNg==", - "dependencies": { - "@firebase/app-types": "0.9.0", - "@firebase/util": "1.9.3" - } - }, - "admin/node_modules/@firebase/firestore": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@firebase/firestore/-/firestore-4.1.3.tgz", - "integrity": "sha512-3kw/oZrLAIHuSDTAlKguZ1e0hAgWgiBl4QQm2mIPBvBAs++iEkuv9DH2tr6rbYpT6dWtdn6jj0RN0XeqOouJRg==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/logger": "0.4.0", - "@firebase/util": "1.9.3", - "@firebase/webchannel-wrapper": "0.10.2", - "@grpc/grpc-js": "~1.8.17", - "@grpc/proto-loader": "^0.7.8", - "node-fetch": "2.6.7", - "tslib": "^2.1.0" - }, - "engines": { - "node": ">=10.10.0" - }, - "peerDependencies": { - "@firebase/app": "0.x" - } - }, - "admin/node_modules/@firebase/firestore-compat": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@firebase/firestore-compat/-/firestore-compat-0.3.17.tgz", - "integrity": "sha512-Qh3tbE4vkn9XvyWnRaJM/v4vhCZ+btk2RZcq037o6oECHohaCFortevd/SKA4vA5yOx0/DwARIEv6XwgHkVucg==", - "dependencies": { - "@firebase/component": "0.6.4", - "@firebase/firestore": "4.1.3", - "@firebase/firestore-types": "3.0.0", - "@firebase/util": "1.9.3", - "tslib": "^2.1.0" - }, - "peerDependencies": { - "@firebase/app-compat": "0.x" - } - }, - "admin/node_modules/@firebase/firestore-types": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@firebase/firestore-types/-/firestore-types-3.0.0.tgz", - "integrity": "sha512-Meg4cIezHo9zLamw0ymFYBD4SMjLb+ZXIbuN7T7ddXN6MGoICmOTq3/ltdCGoDCS2u+H1XJs2u/cYp75jsX9Qw==", - "peerDependencies": { - "@firebase/app-types": "0.x", - "@firebase/util": "1.x" - } - }, - "admin/node_modules/@firebase/webchannel-wrapper": { - "version": "0.10.2", - "resolved": "https://registry.npmjs.org/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.10.2.tgz", - "integrity": "sha512-xDxhD9++451HuCv3xKBEdSYaArX9NcokODXZYH/MxGw1XFFOz7OKkTRItZ5wf6npBN/inwp8dUZCP7SpAg46yQ==" - }, - "admin/node_modules/firebase": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/firebase/-/firebase-10.3.1.tgz", - "integrity": "sha512-lUk1X0SQocShyIwz5x9mj829Yn1y4Y9KWriGLZ0/Pbwqt4ZxElx8rI1p/YAi4MZTtT1qi0wazo7dAlmuF6J0Aw==", - "dependencies": { - "@firebase/analytics": "0.10.0", - "@firebase/analytics-compat": "0.2.6", - "@firebase/app": "0.9.18", - "@firebase/app-check": "0.8.0", - "@firebase/app-check-compat": "0.3.7", - "@firebase/app-compat": "0.2.18", - "@firebase/app-types": "0.9.0", - "@firebase/auth": "1.3.0", - "@firebase/auth-compat": "0.4.6", - "@firebase/database": "1.0.1", - "@firebase/database-compat": "1.0.1", - "@firebase/firestore": "4.1.3", - "@firebase/firestore-compat": "0.3.17", - "@firebase/functions": "0.10.0", - "@firebase/functions-compat": "0.3.5", - "@firebase/installations": "0.6.4", - "@firebase/installations-compat": "0.2.4", - "@firebase/messaging": "0.12.4", - "@firebase/messaging-compat": "0.2.4", - "@firebase/performance": "0.6.4", - "@firebase/performance-compat": "0.2.4", - "@firebase/remote-config": "0.4.4", - "@firebase/remote-config-compat": "0.2.4", - "@firebase/storage": "0.11.2", - "@firebase/storage-compat": "0.3.2", - "@firebase/util": "1.9.3" - } - }, - "admin/node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "functions": { "name": "@socialincome/functions", "version": "1.0.0", @@ -587,20 +389,20 @@ } }, "node_modules/@babel/core": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.11.tgz", - "integrity": "sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.15.tgz", + "integrity": "sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.22.15", + "@babel/helpers": "^7.22.15", + "@babel/parser": "^7.22.15", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -645,9 +447,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.11.tgz", - "integrity": "sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz", + "integrity": "sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==", "dependencies": { "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", "eslint-visitor-keys": "^2.1.0", @@ -678,11 +480,11 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.15.tgz", + "integrity": "sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==", "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.15", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -703,23 +505,23 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -750,14 +552,14 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -780,9 +582,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "regexpu-core": "^5.3.1", @@ -871,37 +673,37 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.15.tgz", + "integrity": "sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.15.tgz", + "integrity": "sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@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.5" + "@babel/helper-validator-identifier": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1003,17 +805,17 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz", + "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "engines": { "node": ">=6.9.0" } @@ -1032,13 +834,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.15.tgz", + "integrity": "sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==", "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1114,9 +916,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.13.tgz", - "integrity": "sha512-3l6+4YOvc9wx7VlCSw4yQfcBo01ECA8TicQfbnCPuCEpRQrf+gTUyGdxNw+pyTUyywp6JRD1w0YQs9TpBXYlkw==", + "version": "7.22.16", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", + "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1125,9 +927,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1139,13 +941,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1158,6 +960,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1170,11 +973,11 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.10.tgz", - "integrity": "sha512-KxN6TqZzcFi4uD3UifqXElBTBNLAEH1l3vzMQj6JwJZbL2sZlThxSViOKCYY+4Ah4V4JhQ95IVB7s/Y6SJSlMQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.22.15.tgz", + "integrity": "sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.10", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", @@ -1191,6 +994,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -1206,6 +1010,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -1221,6 +1026,7 @@ "version": "7.21.0", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", @@ -1237,6 +1043,7 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1558,9 +1365,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", - "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", @@ -1605,9 +1412,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.15.tgz", + "integrity": "sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1650,17 +1457,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -1687,9 +1494,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.15.tgz", + "integrity": "sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1790,9 +1597,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -1893,11 +1700,11 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.15.tgz", + "integrity": "sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==", "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -2000,15 +1807,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", - "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2048,9 +1855,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", - "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.15.tgz", + "integrity": "sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -2064,9 +1871,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" }, @@ -2152,15 +1959,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz", - "integrity": "sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz", + "integrity": "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2258,11 +2065,11 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz", - "integrity": "sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.15.tgz", + "integrity": "sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==", "dependencies": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", @@ -2356,12 +2163,12 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.11.tgz", - "integrity": "sha512-0E4/L+7gfvHub7wsbTv03oRtD69X31LByy44fGmFzbZScpupFByMcgCJ0VbBTkzyjSJKuRoGN8tcijOWKTmqOA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.15.tgz", + "integrity": "sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-typescript": "^7.22.5" }, @@ -2432,16 +2239,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.10.tgz", - "integrity": "sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.15.tgz", + "integrity": "sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==", "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", @@ -2462,41 +2269,41 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.10", + "@babel/plugin-transform-async-generator-functions": "^7.22.15", "@babel/plugin-transform-async-to-generator": "^7.22.5", "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.10", + "@babel/plugin-transform-block-scoping": "^7.22.15", "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", + "@babel/plugin-transform-class-static-block": "^7.22.11", + "@babel/plugin-transform-classes": "^7.22.15", "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.10", + "@babel/plugin-transform-destructuring": "^7.22.15", "@babel/plugin-transform-dotall-regex": "^7.22.5", "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.11", "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.11", + "@babel/plugin-transform-for-of": "^7.22.15", "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.11", "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", "@babel/plugin-transform-member-expression-literals": "^7.22.5", "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-modules-systemjs": "^7.22.11", "@babel/plugin-transform-modules-umd": "^7.22.5", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", + "@babel/plugin-transform-numeric-separator": "^7.22.11", + "@babel/plugin-transform-object-rest-spread": "^7.22.15", "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.10", - "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.11", + "@babel/plugin-transform-optional-chaining": "^7.22.15", + "@babel/plugin-transform-parameters": "^7.22.15", "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.11", "@babel/plugin-transform-property-literals": "^7.22.5", "@babel/plugin-transform-regenerator": "^7.22.10", "@babel/plugin-transform-reserved-words": "^7.22.5", @@ -2510,7 +2317,7 @@ "@babel/plugin-transform-unicode-regex": "^7.22.5", "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.22.10", + "@babel/types": "^7.22.15", "babel-plugin-polyfill-corejs2": "^0.4.5", "babel-plugin-polyfill-corejs3": "^0.8.3", "babel-plugin-polyfill-regenerator": "^0.5.2", @@ -2533,13 +2340,13 @@ } }, "node_modules/@babel/preset-flow": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.5.tgz", - "integrity": "sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.22.15.tgz", + "integrity": "sha512-dB5aIMqpkgbTfN5vDdTRPzjqtWiZcRESNR88QYnoPR+bmdYoluOzMX9tQerTv0XzSgZYctPfO1oc0N5zdog1ew==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-flow-strip-types": "^7.22.5" }, "engines": { @@ -2563,14 +2370,14 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.5.tgz", - "integrity": "sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.15.tgz", + "integrity": "sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-transform-react-display-name": "^7.22.5", - "@babel/plugin-transform-react-jsx": "^7.22.5", + "@babel/plugin-transform-react-jsx": "^7.22.15", "@babel/plugin-transform-react-jsx-development": "^7.22.5", "@babel/plugin-transform-react-pure-annotations": "^7.22.5" }, @@ -2582,15 +2389,15 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.11.tgz", - "integrity": "sha512-tWY5wyCZYBGY7IlalfKI1rLiGlIfnwsRHZqlky0HVv8qviwQ1Uo/05M6+s+TcTCVa6Bmoo2uJW5TMFX6Wa4qVg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.22.15.tgz", + "integrity": "sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==", "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "@babel/plugin-syntax-jsx": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.11", - "@babel/plugin-transform-typescript": "^7.22.11" + "@babel/plugin-transform-modules-commonjs": "^7.22.15", + "@babel/plugin-transform-typescript": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2600,9 +2407,9 @@ } }, "node_modules/@babel/register": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.5.tgz", - "integrity": "sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz", + "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==", "dev": true, "dependencies": { "clone-deep": "^4.0.1", @@ -2752,9 +2559,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.11.tgz", - "integrity": "sha512-ee7jVNlWN09+KftVOu9n7S8gQzD/Z6hN/I8VBRXW4P1+Xe7kJGXMwu8vds4aGIMHZnNbdpSWCfZZtinytpcAvA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", + "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -2763,31 +2570,31 @@ } }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.15.tgz", + "integrity": "sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==", "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2817,12 +2624,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.15.tgz", + "integrity": "sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==", "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.15", "to-fast-properties": "^2.0.0" }, "engines": { @@ -2895,6 +2702,21 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-cascade-layers/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@csstools/postcss-color-function": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", @@ -2988,6 +2810,21 @@ "postcss": "^8.2" } }, + "node_modules/@csstools/postcss-is-pseudo-class/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, "node_modules/@csstools/postcss-nested-calc": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", @@ -3127,18 +2964,25 @@ } }, "node_modules/@csstools/selector-specificity": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", - "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", + "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "engines": { "node": "^14 || ^16 || >=18" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - }, "peerDependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.0.13" } }, "node_modules/@dabh/diagnostics": { @@ -4905,6 +4749,7 @@ "version": "1.8.21", "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.8.21.tgz", "integrity": "sha512-KeyQeZpxeEBSqFVTi3q2K7PiPXmgBfECc4updA1ejCLjYmoAlvvM3ZMp5ztTDUCUQmoY3CpDxvchjO1+rFkoHg==", + "devOptional": true, "dependencies": { "@grpc/proto-loader": "^0.7.0", "@types/node": ">=12.12.47" @@ -4917,6 +4762,7 @@ "version": "0.7.9", "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.9.tgz", "integrity": "sha512-YJsOehVXzgurc+lLAxYnlSMc1p/Gu6VAvnfx0ATi2nzvr0YZcjhmZDeY8SeAKv1M7zE3aEJH0Xo9mK1iZ8GYoQ==", + "devOptional": true, "dependencies": { "lodash.camelcase": "^4.3.0", "long": "^5.0.0", @@ -5691,15 +5537,15 @@ } }, "node_modules/@mui/base": { - "version": "5.0.0-beta.13", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.13.tgz", - "integrity": "sha512-uC0l97pBspfDAp+iz2cJq8YZ8Sd9i73V77+WzUiOAckIVEyCm5dyVDZCCO2/phmzckVEeZCGcytybkjMQuhPQw==", + "version": "5.0.0-beta.14", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.14.tgz", + "integrity": "sha512-Je/9JzzYObsuLCIClgE8XvXNFb55IEz8n2NtStUfASfNiVrwiR8t6VVFFuhofehkyTIN34tq1qbBaOjCnOovBw==", "dependencies": { "@babel/runtime": "^7.22.10", "@emotion/is-prop-valid": "^1.2.1", "@floating-ui/react-dom": "^2.0.1", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.8", "@popperjs/core": "^2.11.8", "clsx": "^2.0.0", "prop-types": "^15.8.1", @@ -5732,18 +5578,18 @@ } }, "node_modules/@mui/core-downloads-tracker": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.7.tgz", - "integrity": "sha512-sCWTUNElBPgB30iLvWe3PU7SIlTKZNf6/E/sko85iHVeHCM6WPkDw+y89CrZYjhFNmPqt2fIQM/pZu+rP2lFLA==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.14.8.tgz", + "integrity": "sha512-8V7ZOC/lKkM03TRHqaThQFIq6bWPnj7L/ZWPh0ymldYFFyh8XdF0ywTgafsofDNYT4StlNknbaTjVHBma3SNjQ==", "funding": { "type": "opencollective", "url": "https://opencollective.com/mui" } }, "node_modules/@mui/icons-material": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.7.tgz", - "integrity": "sha512-mWp4DwMa8c1Gx9yOEtPgxM4b+e6hAbtZyzfSubdBwrnEE6G5D2rbAJ5MB+If6kfI48JaYaJ5j8+zAdmZLuZc0A==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.14.8.tgz", + "integrity": "sha512-YXcReLydTuNWb1/PxduAH5LgnHNH6spSQBaA0JOz9HD4J+vwst0IanAQgsXy9KKCJSjCsHywE3DB8X+w/b4eeQ==", "dependencies": { "@babel/runtime": "^7.22.10" }, @@ -5766,15 +5612,16 @@ } }, "node_modules/@mui/lab": { - "version": "5.0.0-alpha.142", - "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.142.tgz", - "integrity": "sha512-JDrT5G3QBZ0nzkKMFWzJY5KN8WcyDx4p7qOjg6hs7yKLq90VSdsqIOmyhvWDxJR7zPNQjo0WRYBAaRaQ5FlGxg==", + "version": "5.0.0-alpha.143", + "resolved": "https://registry.npmjs.org/@mui/lab/-/lab-5.0.0-alpha.143.tgz", + "integrity": "sha512-2lpzJCSyrb0yNhxzKK2G25w9+Tk+vjlmjgAXh+j8NS2fyRD7F992DuChRqNaoZmg1aoAbFli6qZh6XJE/5cymA==", "dependencies": { "@babel/runtime": "^7.22.10", - "@mui/base": "5.0.0-beta.13", - "@mui/system": "^5.14.7", + "@mui/base": "5.0.0-beta.14", + "@mui/system": "^5.14.8", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.8", + "@mui/x-tree-view": "https://pkg.csb.dev/mui/mui-x/commit/1f23b33d/@mui/x-tree-view", "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" @@ -5815,16 +5662,16 @@ } }, "node_modules/@mui/material": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.7.tgz", - "integrity": "sha512-jIZj9F7zMv6IlyaYDVv5M2Kp20jIX8c0kzuwteySHS/A0IvPVyomQEPtWc51MCbpDNCqzwoZUp3rQtA2lI8k7A==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.14.8.tgz", + "integrity": "sha512-fqvDGGF1pXwOOL/f0Gw+KHo/67hasRpf2ApTIJkbuONOk9AUb2jnYMEqCWmL2sUcbbE3ShMbHl8N7HPSsRv1/A==", "dependencies": { "@babel/runtime": "^7.22.10", - "@mui/base": "5.0.0-beta.13", - "@mui/core-downloads-tracker": "^5.14.7", - "@mui/system": "^5.14.7", + "@mui/base": "5.0.0-beta.14", + "@mui/core-downloads-tracker": "^5.14.8", + "@mui/system": "^5.14.8", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.8", "@types/react-transition-group": "^4.4.6", "clsx": "^2.0.0", "csstype": "^3.1.2", @@ -5867,12 +5714,12 @@ } }, "node_modules/@mui/private-theming": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.7.tgz", - "integrity": "sha512-Y86+hmDnJab2Ka42PgxKpK3oL7EiacbeeX3X/lG9LGO0wSc45wZjHeTfIlVSkkUCkexiMKEJp5NlSjZhr27NRQ==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.14.8.tgz", + "integrity": "sha512-iBzpcl3Mh92XaYpYPdgzzRxNGkjpoDz8rf8/q5m+EBPowFEHV+CCS9hC0Q2pOKLW3VFFikA7w/GHt7n++40JGQ==", "dependencies": { "@babel/runtime": "^7.22.10", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.8", "prop-types": "^15.8.1" }, "engines": { @@ -5893,9 +5740,9 @@ } }, "node_modules/@mui/styled-engine": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.7.tgz", - "integrity": "sha512-hKBETEDsIAkL8/mBwPiQj/vw28OeIhMXC3Tvj4J2bb9snxAKpiZioR1PwqP+6P41twsC/GKBd0Vr9oaWYaHuMg==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.14.8.tgz", + "integrity": "sha512-LGwOav/Y40PZWZ2yDk4beUoRlc57Vg+Vpxi9V9BBtT2ESAucCgFobkt+T8eVLMWF9huUou5pwKgLSU5pF90hBg==", "dependencies": { "@babel/runtime": "^7.22.10", "@emotion/cache": "^11.11.0", @@ -5924,15 +5771,15 @@ } }, "node_modules/@mui/system": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.7.tgz", - "integrity": "sha512-jeZtHglc+Pi6qjGoopT6O4RqYXVBMqHVOsjMGP0hxGSSPm1T4gsAu7jU8eqGx9YwwjvvJ0eotTjFqw7iJ6qE2Q==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.14.8.tgz", + "integrity": "sha512-Dxnasv7Pj5hYe4ZZFKJZu4ufKm6cxpitWt3A+qMPps22YhqyeEqgDBq/HsAB3GOjqDP40fTAvQvS/Hguf4SJuw==", "dependencies": { "@babel/runtime": "^7.22.10", - "@mui/private-theming": "^5.14.7", - "@mui/styled-engine": "^5.14.7", + "@mui/private-theming": "^5.14.8", + "@mui/styled-engine": "^5.14.8", "@mui/types": "^7.2.4", - "@mui/utils": "^5.14.7", + "@mui/utils": "^5.14.8", "clsx": "^2.0.0", "csstype": "^3.1.2", "prop-types": "^15.8.1" @@ -5984,9 +5831,9 @@ } }, "node_modules/@mui/utils": { - "version": "5.14.7", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.7.tgz", - "integrity": "sha512-RtheP/aBoPogVdi8vj8Vo2IFnRa4mZVmnD0RGlVZ49yF60rZs+xP4/KbpIrTr83xVs34QmHQ2aQ+IX7I0a0dDw==", + "version": "5.14.8", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.8.tgz", + "integrity": "sha512-1Ls2FfyY2yVSz9NEqedh3J8JAbbZAnUWkOWLE2f4/Hc4T5UWHMfzBLLrCqExfqyfyU+uXYJPGeNIsky6f8Gh5Q==", "dependencies": { "@babel/runtime": "^7.22.10", "@types/prop-types": "^15.7.5", @@ -6111,6 +5958,36 @@ "node": ">=6" } }, + "node_modules/@mui/x-tree-view": { + "version": "6.0.0-alpha.0", + "resolved": "https://pkg.csb.dev/mui/mui-x/commit/1f23b33d/@mui/x-tree-view", + "integrity": "sha512-oSayM+RvqJdjPW8BW4Vmmj99pHIaOJogumOqnFSd+zOzxZk0wFpf7/67LyGD4wNY0MVHj/EkjyE/LljTad5mCw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@mui/utils": "^5.13.7", + "@types/react-transition-group": "^4.4.6", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@emotion/react": "^11.9.0", + "@emotion/styled": "^11.8.1", + "@mui/base": "^5.0.0-alpha.87", + "@mui/material": "^5.8.6", + "@mui/system": "^5.8.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + } + }, "node_modules/@ndelangen/get-tarball": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz", @@ -8449,9 +8326,9 @@ } }, "node_modules/@storybook/core-common/node_modules/@types/node": { - "version": "16.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz", - "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg==", + "version": "16.18.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.48.tgz", + "integrity": "sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==", "dev": true }, "node_modules/@storybook/core-common/node_modules/brace-expansion": { @@ -8478,9 +8355,9 @@ } }, "node_modules/@storybook/core-common/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", @@ -8582,9 +8459,9 @@ } }, "node_modules/@storybook/core-server/node_modules/@types/node": { - "version": "16.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz", - "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg==", + "version": "16.18.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.48.tgz", + "integrity": "sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==", "dev": true }, "node_modules/@storybook/core-server/node_modules/fs-extra": { @@ -8637,9 +8514,9 @@ } }, "node_modules/@storybook/core-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.0.tgz", + "integrity": "sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg==", "dev": true, "engines": { "node": ">=10.0.0" @@ -9009,9 +8886,9 @@ } }, "node_modules/@storybook/react/node_modules/@types/node": { - "version": "16.18.46", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.46.tgz", - "integrity": "sha512-Mnq3O9Xz52exs3mlxMcQuA7/9VFe/dXcrgAyfjLkABIqxXKOgBRjyazTxUbjsxDa4BP7hhPliyjVTP9RDP14xg==", + "version": "16.18.48", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.48.tgz", + "integrity": "sha512-mlaecDKQ7rIZrYD7iiKNdzFb6e/qD5I9U1rAhq+Fd+DWvYVs+G2kv74UFHmSOlg5+i/vF3XxuR522V4u8BqO+Q==", "dev": true }, "node_modules/@storybook/react/node_modules/acorn": { @@ -9616,9 +9493,9 @@ } }, "node_modules/@tailwindcss/typography": { - "version": "0.5.9", - "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.9.tgz", - "integrity": "sha512-t8Sg3DyynFysV9f4JDOVISGsjazNb48AeIYQwcL+Bsq5uf4RYL75C1giZ43KISjeDGBaTN3Kxh7Xj/vRSMJUUg==", + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.10.tgz", + "integrity": "sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==", "dev": true, "dependencies": { "lodash.castarray": "^4.4.0", @@ -9631,20 +9508,20 @@ } }, "node_modules/@tanstack/query-core": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.33.0.tgz", - "integrity": "sha512-qYu73ptvnzRh6se2nyBIDHGBQvPY1XXl3yR769B7B6mIDD7s+EZhdlWHQ67JI6UOTFRaI7wupnTnwJ3gE0Mr/g==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-4.35.0.tgz", + "integrity": "sha512-4GMcKQuLZQi6RFBiBZNsLhl+hQGYScRZ5ZoVq8QAzfqz9M7vcGin/2YdSESwl7WaV+Qzsb5CZOAbMBes4lNTnA==", "funding": { "type": "github", "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@tanstack/react-query": { - "version": "4.33.0", - "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.33.0.tgz", - "integrity": "sha512-97nGbmDK0/m0B86BdiXzx3EW9RcDYKpnyL2+WwyuLHEgpfThYAnXFaMMmnTDuAO4bQJXEhflumIEUfKmP7ESGA==", + "version": "4.35.0", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-4.35.0.tgz", + "integrity": "sha512-LLYDNnM9ewYHgjm2rzhk4KG/puN2rdoqCUD+N9+V7SwlsYwJk5ypX58rpkoZAhFyZ+KmFUJ7Iv2lIEOoUqydIg==", "dependencies": { - "@tanstack/query-core": "4.33.0", + "@tanstack/query-core": "4.35.0", "use-sync-external-store": "^1.2.0" }, "funding": { @@ -9804,34 +9681,34 @@ } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", + "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" } }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/cross-spawn": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.2.tgz", - "integrity": "sha512-KuwNhp3eza+Rhu8IFI5HUXRP0LIhqH5cAjubUvGXXthh4YYBuP2ntwEX+Cz8GJoZUHlKo247wPWOfA9LYEq4cw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.3.tgz", + "integrity": "sha512-BDAkU7WHHRHnvBf5z89lcvACsvkz/n7Tv+HyD/uW76O29HoH1Tk/W6iQrepaZVbisvlEek4ygwT8IW7ow9XLAA==", "dev": true, "dependencies": { "@types/node": "*" @@ -10121,15 +9998,15 @@ } }, "node_modules/@types/linkify-it": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", - "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==", "devOptional": true }, "node_modules/@types/lodash": { - "version": "4.14.197", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz", - "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==" + "version": "4.14.198", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.198.tgz", + "integrity": "sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==" }, "node_modules/@types/long": { "version": "4.0.2", @@ -10219,9 +10096,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.5.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.7.tgz", - "integrity": "sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==" + "version": "20.5.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.5.9.tgz", + "integrity": "sha512-PcGNd//40kHAS3sTlzKB9C9XL4K0sTup8nbG5lC14kzEteTNuAFh9u5nA0o5TWnSG2r/JNPRXFVcHJIIeRlmqQ==" }, "node_modules/@types/node-fetch": { "version": "2.6.4", @@ -10293,14 +10170,14 @@ "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.6.tgz", + "integrity": "sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ==" }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + "version": "6.9.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==" }, "node_modules/@types/range-parser": { "version": "1.2.4", @@ -10427,9 +10304,9 @@ "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, "node_modules/@types/unist": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.7.tgz", - "integrity": "sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.8.tgz", + "integrity": "sha512-d0XxK3YTObnWVp6rZuev3c49+j4Lo8g4L1ZRm9z5L0xpoZycUPshHgczK5gsUMaZOstjVYYi09p5gYvUtfChYw==", "dev": true }, "node_modules/@types/use-sync-external-store": { @@ -10581,15 +10458,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.5.0.tgz", - "integrity": "sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.6.0.tgz", + "integrity": "sha512-setq5aJgUwtzGrhW177/i+DMLqBaJbdwGj2CPIVFFLE0NCliy5ujIdLHd2D1ysmlmsjdL2GWW+hR85neEfc12w==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.5.0", - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/typescript-estree": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", + "@typescript-eslint/scope-manager": "6.6.0", + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/typescript-estree": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0", "debug": "^4.3.4" }, "engines": { @@ -10632,13 +10509,13 @@ "dev": true }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.5.0.tgz", - "integrity": "sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.6.0.tgz", + "integrity": "sha512-pT08u5W/GT4KjPUmEtc2kSYvrH8x89cVzkA0Sy2aaOUIw6YxOIjA8ilwLr/1fLjOedX1QAuBpG9XggWqIIfERw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0" + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -10750,9 +10627,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@typescript-eslint/types": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.5.0.tgz", - "integrity": "sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.6.0.tgz", + "integrity": "sha512-CB6QpJQ6BAHlJXdwUmiaXDBmTqIE2bzGTDLADgvqtHWuhfNP3rAOK7kAgRMAET5rDRr9Utt+qAzRBdu3AhR3sg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -10763,13 +10640,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.5.0.tgz", - "integrity": "sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.6.0.tgz", + "integrity": "sha512-hMcTQ6Al8MP2E6JKBAaSxSVw5bDhdmbCEhGW/V8QXkb9oNsFkA4SBuOMYVPxD3jbtQ4R/vSODBsr76R6fP3tbA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", - "@typescript-eslint/visitor-keys": "6.5.0", + "@typescript-eslint/types": "6.6.0", + "@typescript-eslint/visitor-keys": "6.6.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -10949,12 +10826,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.5.0.tgz", - "integrity": "sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==", + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.6.0.tgz", + "integrity": "sha512-L61uJT26cMOfFQ+lMZKoJNbAEckLe539VhTxiGHrWl5XSKQgA0RTBZJW2HFPy5T0ZvPVSD93QsrTKDkfNwJGyQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.5.0", + "@typescript-eslint/types": "6.6.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -11684,14 +11561,14 @@ "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, "node_modules/array-includes": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", - "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "is-string": "^1.0.7" }, "engines": { @@ -11710,15 +11587,15 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.2.tgz", - "integrity": "sha512-tb5thFFlUcp7NdNF6/MpDk/1r/4awWG1FIz3YqDf+/zJSTezBb+/5WViH41obXULHVpDzoiCLpJ/ZO9YbJMsdw==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "get-intrinsic": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -11728,13 +11605,13 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", - "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -11745,13 +11622,13 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", - "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-shim-unscopables": "^1.0.0" }, "engines": { @@ -11762,13 +11639,13 @@ } }, "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "es-array-method-boxes-properly": "^1.0.0", "is-string": "^1.0.7" }, @@ -11792,13 +11669,14 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz", - "integrity": "sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", "dependencies": { "array-buffer-byte-length": "^1.0.0", "call-bind": "^1.0.2", "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", "get-intrinsic": "^1.2.1", "is-array-buffer": "^3.0.2", "is-shared-array-buffer": "^1.0.2" @@ -11995,9 +11873,9 @@ "dev": true }, "node_modules/axe-core": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.2.tgz", - "integrity": "sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.0.tgz", + "integrity": "sha512-ZtlVZobOeDQhb/y2lMK6mznDw7TJHDNcKx5/bbBkFvArIQ5CVFhSI6hWWQnMx9I8cNmNmZ30wpDyOC2E2nvgbQ==", "engines": { "node": ">=4" } @@ -12918,9 +12796,9 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", - "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", + "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", "dev": true, "optional": true, "dependencies": { @@ -13042,9 +12920,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001524", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001524.tgz", - "integrity": "sha512-Jj917pJtYg9HSJBF95HVX3Cdr89JUyLT4IZ8SvM5aDRni95swKgYi3TgYLH5hnGfPE/U1dg6IfZ50UsIlLkwSA==", + "version": "1.0.30001528", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001528.tgz", + "integrity": "sha512-0Db4yyjR9QMNlsxh+kKWzQtkyflkG/snYheSzkjmvdEtEXB1+jt7A2HmSEiO6XIJPIbo92lHNGNySvE5pZcs5Q==", "funding": [ { "type": "opencollective", @@ -13620,9 +13498,9 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compress-commons": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.1.tgz", - "integrity": "sha512-QLdDLCKNV2dtoTorqgxngQCMA+gWXkM/Nwu7FpeBhk/RdkzimqC3jueb/FDmaZeXh+uby1jkBqE3xArsLBE5wQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, "dependencies": { "buffer-crc32": "^0.2.13", @@ -13952,9 +13830,9 @@ } }, "node_modules/crc32-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.2.tgz", - "integrity": "sha512-DxFZ/Hk473b/muq1VJ///PMNLj0ZMnzye9thBpmjpJKCc5eMgB95aK8zCGrGfQ90cWo561Te6HK9D+j4KPdM6w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, "dependencies": { "crc-32": "^1.2.0", @@ -14880,9 +14758,9 @@ } }, "node_modules/cssdb": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.1.tgz", - "integrity": "sha512-kM+Fs0BFyhJNeE6wbOrlnRsugRdL6vn7QcON0aBDZ7XRd7RI2pMlk+nxoHuTb4Et+aBobXgK0I+6NGLA0LLgTw==", + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.7.2.tgz", + "integrity": "sha512-pQPYP7/kch4QlkTcLuUNiNL2v/E+O+VIdotT+ug62/+2B2/jkzs5fMM6RHCzGCZ9C82pODEMSIzRRUzJOrl78g==", "funding": [ { "type": "opencollective", @@ -15156,9 +15034,9 @@ } }, "node_modules/daisyui": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.6.3.tgz", - "integrity": "sha512-VNWogAjx37H8kNYd2E/+r1OXc6dOvJTKlKltqIKAlNMFVfx2BIKPcmnVxaHQLfj2vhv1mYDBjgWj+1enQ+4yZA==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-3.7.3.tgz", + "integrity": "sha512-gKlz3RwfaukZxf8nQZsDAZ7quUSi7F8HjGGB34tkHruvfQB9cgVDQsmqUqSQtkAJYvzbrg/3dLUa9+5jF4iC1A==", "dev": true, "dependencies": { "colord": "^2.9", @@ -15951,9 +15829,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.504", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.504.tgz", - "integrity": "sha512-cSMwIAd8yUh54VwitVRVvHK66QqHWE39C3DRj8SWiXitEpVSY3wNPD9y1pxQtLIi4w3UdzF9klLsmuPshz09DQ==" + "version": "1.4.510", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.510.tgz", + "integrity": "sha512-xPfLIPFcN/WLXBpQ/K4UgE98oUBO5Tia6BD4rkSR0wE7ep/PwBVlgvPJQrIBpmJGVAmUzwPKuDbVt9XV6+uC2g==" }, "node_modules/emittery": { "version": "0.13.1", @@ -18212,11 +18090,6 @@ "markdown-it": "bin/markdown-it.js" } }, - "node_modules/flag-icons": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-6.11.0.tgz", - "integrity": "sha512-oK+QhV5UMWq+lmyOnfXUfVhSgHy29gQ0gQpmORdNP6ucAsKzIGm39ncvyThJyvt76Au2qsepDTE9waHRuaYPUw==" - }, "node_modules/flat-cache": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", @@ -18236,9 +18109,9 @@ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==" }, "node_modules/flow-parser": { - "version": "0.215.1", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.215.1.tgz", - "integrity": "sha512-qq3rdRToqwesrddyXf+Ml8Tuf7TdoJS+EMbJgC6fHAVoBCXjb4mHelNd3J+jD8ts0bSHX81FG3LN7Qn/dcl6pA==", + "version": "0.216.0", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.216.0.tgz", + "integrity": "sha512-ozczvnbZ++wfBJFseeV0FvINkJ0C6TmRBmb7U7FY1RledNQZuCDTMywRi6txkp8gdzFCJPUxzrU4E27txAktbA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -18476,9 +18349,9 @@ } }, "node_modules/formik": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.3.tgz", - "integrity": "sha512-2Dy79Szw3zlXmZiokUdKsn+n1ow4G8hRrC/n92cOWHNTWXCRpQXlyvz6HcjW7aSQZrldytvDOavYjhfmDnUq8Q==", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/formik/-/formik-2.4.4.tgz", + "integrity": "sha512-MV99upag7fCC3JfsI60WcxhymwNZnJUcMcnGuoz6mDf78SUfBbKjmfcA9LzHx4lEmjzmOflhP7oqz+ZQv5eStg==", "funding": [ { "type": "individual", @@ -18512,9 +18385,9 @@ } }, "node_modules/fraction.js": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.0.tgz", - "integrity": "sha512-btalnXjFelOv2cy86KzHWhUuMb622/AD8ce/MCH9C36xe7QRXjJZA+19fP+G5LT0fdRcbOHErMI3SPM11ZaVDg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.6.tgz", + "integrity": "sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==", "engines": { "node": "*" }, @@ -19937,9 +19810,9 @@ } }, "node_modules/i18next": { - "version": "23.4.6", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.4.6.tgz", - "integrity": "sha512-jBE8bui969Ygv7TVYp0pwDZB7+he0qsU+nz7EcfdqSh+QvKjEfl9YPRQd/KrGiMhTYFGkeuPaeITenKK/bSFDg==", + "version": "23.4.9", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.4.9.tgz", + "integrity": "sha512-F8YQ29LD6FvWS/aOYbZ4WqjDEuQZmug8akAM0QOcAtR+EuHHlBYf/JpsjeqUDdYiClmj2zE9rI9ZUWzN7W+trQ==", "funding": [ { "type": "individual", @@ -21054,21 +20927,20 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.0.tgz", - "integrity": "sha512-rjuhAk1AJ1fssphHD0IFV6TWL40CwRZ53FrztKx43yk2v6rguBYsY4Bj1VU4HmoMmKwZUlx7mfnhDf9cOp4YTw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.1.tgz", + "integrity": "sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==", "dependencies": { - "define-properties": "^1.1.4", - "get-intrinsic": "^1.1.3", + "define-properties": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", "reflect.getprototypeof": "^1.0.3" } }, "node_modules/jackspeak": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.0.tgz", - "integrity": "sha512-uKmsITSsF4rUWQHzqaRUuyAir3fZfW3f202Ee34lz/gZCi970CPZwyQXLGNgWJvvZbvFyzeyGq0+4fcG/mBKZg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", + "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -22871,9 +22743,9 @@ } }, "node_modules/jose": { - "version": "4.14.4", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz", - "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==", + "version": "4.14.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.6.tgz", + "integrity": "sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==", "funding": { "url": "https://github.com/sponsors/panva" } @@ -23334,14 +23206,20 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", "dependencies": { "jws": "^3.2.2", - "lodash": "^4.17.21", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", "ms": "^2.1.1", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">=12", @@ -23837,6 +23715,26 @@ "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, "node_modules/lodash.isobject": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz", @@ -23849,8 +23747,12 @@ "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "dev": true + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -23862,6 +23764,11 @@ "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -23976,9 +23883,9 @@ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" }, "node_modules/luxon": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.2.tgz", - "integrity": "sha512-uBoAVCVcajsrqy3pv7eo5jEUz1oeLmCcnMv8n4AJpT5hbpN9lUssAXibNElpbLce3Mhm9dyBzwYLs9zctM/0tA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.4.3.tgz", + "integrity": "sha512-tFWBiv3h7z+T/tDaoxA8rqTxy1CHV6gHS//QdaH4pulbq/JuBSGgQspQQqcgnwdAx6pNI7cmvz5Sv/addzHmUg==", "engines": { "node": ">=12" } @@ -25528,9 +25435,9 @@ } }, "node_modules/nodemailer": { - "version": "6.9.4", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.4.tgz", - "integrity": "sha512-CXjQvrQZV4+6X5wP6ZIgdehJamI63MFoYFGGPtHudWym9qaEHDNdPzaj5bfMCvxG1vhAileSWW90q7nL0N36mA==", + "version": "6.9.5", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", + "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", "engines": { "node": ">=6.0.0" } @@ -25764,14 +25671,14 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.6.tgz", - "integrity": "sha512-lq+61g26E/BgHv0ZTFgRvi7NMEPuAxLkFU7rukXjc/AlwH4Am5xXVnIXy3un1bg/JPbXHrixRkK1itUzzPiIjQ==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", "dependencies": { - "array.prototype.reduce": "^1.0.5", + "array.prototype.reduce": "^1.0.6", "call-bind": "^1.0.2", "define-properties": "^1.2.0", - "es-abstract": "^1.21.2", + "es-abstract": "^1.22.1", "safe-array-concat": "^1.0.0" }, "engines": { @@ -27065,14 +26972,14 @@ "dev": true }, "node_modules/postcss-loader/node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.4.tgz", + "integrity": "sha512-SF+2P8+o/PTV05rgsAjDzL4OFdVXAulSfC/L19VaeVT7+tpOOSscCt2QLxDZ+CLxF2WOiq6y1K5asvs8qUJT/Q==", "dev": true, "dependencies": { - "import-fresh": "^3.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", + "parse-json": "^5.2.0", "path-type": "^4.0.0" }, "engines": { @@ -27080,6 +26987,14 @@ }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/postcss-loader/node_modules/js-yaml": { @@ -27300,22 +27215,42 @@ } }, "node_modules/postcss-nesting": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", - "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.1.tgz", + "integrity": "sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], "dependencies": { - "@csstools/selector-specificity": "^2.0.0", - "postcss-selector-parser": "^6.0.10" + "@csstools/selector-specificity": "^3.0.0", + "postcss-selector-parser": "^6.0.13" }, "engines": { - "node": "^12 || ^14 || >=16" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/csstools" + "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "postcss": "^8.2" + "postcss": "^8.4" + } + }, + "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, "node_modules/postcss-normalize": { @@ -27615,6 +27550,40 @@ "postcss": "^8.2" } }, + "node_modules/postcss-preset-env/node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/postcss-preset-env/node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, "node_modules/postcss-pseudo-class-any-link": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", @@ -28378,9 +28347,9 @@ } }, "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.3.tgz", + "integrity": "sha512-KddyFewCsO0j3+np81IQ+SweXLDnDQTs5s67BOnrYmYe/yNmUhttQyGsYzy8yUnoljGAQ9sl38YB4vH8ur7Y+w==", "dev": true, "funding": [ { @@ -30576,14 +30545,14 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.3.tgz", - "integrity": "sha512-TTAOZpkJ2YLxl7mVHWrNo3iDMEkYlva/kgFcXndqMgbo/AZUmmavEkdXV+hXtE4P8xdyEKRzalaFqZVuwIk/Nw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", + "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "get-intrinsic": "^1.1.1", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", "globalthis": "^1.0.3", "which-builtin-type": "^1.1.3" }, @@ -31083,9 +31052,9 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.0.tgz", + "integrity": "sha512-nszM8DINnx1vSS+TpbWKMkxem0CDWk3cSit/WWCBVs9/JZ1I/XLwOsiUglYuYReaeWWSsW9kge5zE5NZtf/a4w==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -31190,11 +31159,11 @@ } }, "node_modules/rxfire": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/rxfire/-/rxfire-6.0.4.tgz", - "integrity": "sha512-s/1SkWLA1SIKqQl3DFKkKRYHda4z8YeGBY/v2IWsN3EqHEParKV1+WXDkxhOhra2NDlv5GB0WAbeO3QE8kPkmg==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/rxfire/-/rxfire-6.0.5.tgz", + "integrity": "sha512-ycBsANGbya3GNtOBKzZVATLEV+0S9gUrlTfwnN15TCXtgG8OgIMAuv2k9+kMeVaevp/DRp1KT+vYf6Wkop6gvw==", "peerDependencies": { - "firebase": "^10.0.0", + "firebase": "^9.0.0 || ^10.0.0", "rxjs": "^6.0.0 || ^7.0.0" } }, @@ -31207,12 +31176,12 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.0.tgz", - "integrity": "sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", + "get-intrinsic": "^1.2.1", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -32236,13 +32205,13 @@ } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -32580,18 +32549,18 @@ } }, "node_modules/survey-core": { - "version": "1.9.105", - "resolved": "https://registry.npmjs.org/survey-core/-/survey-core-1.9.105.tgz", - "integrity": "sha512-n3H+lfU+xtDPeEcGkPA6QvOexBmgRSDMzjidOHTg41mxurY1sQilZl3MmAblDcComtSg41CaRxfUpLXmzuYhXA==" + "version": "1.9.106", + "resolved": "https://registry.npmjs.org/survey-core/-/survey-core-1.9.106.tgz", + "integrity": "sha512-msbfP1lTTUCqF+fUEr7JE5IuOO81HA0bcyo+p10jP8/3N4ks9s+NYQx2uXPLwvaX/6RG/fHgx2viCBufxTGyDg==" }, "node_modules/survey-react-ui": { - "version": "1.9.105", - "resolved": "https://registry.npmjs.org/survey-react-ui/-/survey-react-ui-1.9.105.tgz", - "integrity": "sha512-1jybup6eptCyGyeRbtALjrAwS2RYO/k9TPgbVsCkVJ5kYRuwXFH+S5azCpRi7j7UIqfQTdW02p5sS4uhu4cHJw==", + "version": "1.9.106", + "resolved": "https://registry.npmjs.org/survey-react-ui/-/survey-react-ui-1.9.106.tgz", + "integrity": "sha512-MJ179y2MIflbf68be6iSMGZIG1UO4yt0NGTU4hlJ4+fIsIMckGpMTr9pB70ylpkao1tgd+RX/uyiJz/5O3ECMA==", "dependencies": { "react": "^16.5.0 || ^17.0.1 || ^18.1.0", "react-dom": "^16.5.0 || ^17.0.1 || ^18.1.0", - "survey-core": "1.9.105" + "survey-core": "1.9.106" } }, "node_modules/svg-parser": { @@ -32721,9 +32690,9 @@ } }, "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -32999,9 +32968,9 @@ } }, "node_modules/terser": { - "version": "5.19.3", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.3.tgz", - "integrity": "sha512-pQzJ9UJzM0IgmT4FAtYI6+VqFf0lj/to58AV0Xfgg0Up37RyPG7Al+1cepC6/BVuAxR9oNb41/DL4DEoHJvTdg==", + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.4.tgz", + "integrity": "sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -34726,9 +34695,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.0.tgz", + "integrity": "sha512-WR0RJE9Ehsio6U4TuM+LmunEsjQ5ncHlw4sn9ihD6RoJKZrVyH9FWV3dmnwu8B2aNib1OvG2X6adUCyFpQyWcg==", "engines": { "node": ">=10.0.0" }, @@ -35586,13 +35555,34 @@ } }, "node_modules/zip-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.0.tgz", - "integrity": "sha512-zshzwQW7gG7hjpBlgeQP9RuyPGNxvJdzR8SUM3QhxCnLjWN2E7j3dOvpeDcQoETfHx0urRS7EtmVToql7YpU4A==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dev": true, "dependencies": { - "archiver-utils": "^2.1.0", - "compress-commons": "^4.1.0", + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", "readable-stream": "^3.6.0" }, "engines": { @@ -35681,67 +35671,6 @@ "react-dom": ">=18.0.0" } }, - "ui/node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, - "ui/node_modules/postcss-nesting": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.1.tgz", - "integrity": "sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "dependencies": { - "@csstools/selector-specificity": "^3.0.0", - "postcss-selector-parser": "^6.0.13" - }, - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss": "^8.4" - } - }, - "ui/node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, "website": { "name": "@socialincome/website", "version": "1.0.0", @@ -35756,7 +35685,6 @@ "accept-language-parser": "^1.5.0", "classnames": "^2.3.2", "firebase": "^9.23.0", - "flag-icons": "^6.11.0", "formik": "^2.4.3", "i18next": "^23.4.6", "lodash": "^4.17.21", diff --git a/shared/locales/de/website-transparency.json b/shared/locales/de/website-transparency.json index 9ea83dcb5..f950d77fc 100644 --- a/shared/locales/de/website-transparency.json +++ b/shared/locales/de/website-transparency.json @@ -1,14 +1,51 @@ { - "finances": { - "title": "Aktuelle Finanzen", - "totalContributionsByMonthAndType": "Total Spenden", - "totalInstitutionalContributionsByMonthTooltip": "Institutionelle Spenden : {{value, currency}}", - "totalIndividualContributionsByMonthTooltip": "Individuellen Spenden: {{value, currency}}", - "totalPayout": "Total Auszahlungen an Empfänger", - "totalPayoutTooltip": "Auszahlungen an Empfänger: {{value, currency}}", - "totalRecipients": "Empfänger insgesamt", - "totalRecipientsTooltip": "Anzahl Empfänger bis zum ausgewählten Monat: {{value}}", - "monthlyPayoutPerSocialIncome": "Monatliche Auszahlung pro Social Income", - "monthlyPayoutPerSocialIncomeTooltip": "Wert eines Social Incomes: {{value, currency}}" + "amount": "{{ value, currency }}", + "amount-since-march-2020": "Insgesamt seit März 2020", + "future-payouts": "Künftige Auszahlungen: {{ value, currency }}", + "past-payouts": "Vergangene Auszahlungen: {{ value, currency }}", + "section-1": { + "title-1": "Transparenz schafft Vertrauen.", + "title-2": "Vertrauen schafft Solidarität.", + "since-march-2020": "Seit März 2020", + "totalContributions": "{{ contributorCount }} Spender:innen spendeten insgesamt {{value, currency}}", + "totalPayments": "{{ value }} Auszahlungen direkt aufs Mobiltelefon", + "totalRecipients": "{{ value }} Empfänger:innen wurden aufgenommen in unserem 3-Jahresprogramm" + }, + "section-2": { + "title": "Wie wird Social Income finanziert?", + "donations": "Spenden", + "contributions-from": "{{ value, currency }} von", + "individuals": "{{ count }} Individuen", + "institutions": "{{ count }} Institutionen", + "used-for-fees": "Für Zustellgebühren von Individualspenden verwendet: {{ value, currency }}", + "used-for-operating-costs": "Für Betriebsgebühren verwendet: {{ value, currency }}" + }, + "section-3": { + "title": "Von wo kommen die Spender:innen?", + "subtitle": "Wir erhalten Spenden aus {{ value }} Ländern.", + "country-amount": "{{ value, currency }} von {{ contributorsCount }} Spender:innen", + "all-countries": "Alle Länder anzeigen" + }, + "section-4": { + "title": "Wie werden Spenden ausbezahlt?", + "subtitle": "Individuelle Spenden werden zu 100% ausbezahlt. Institutionell Spenden werden gebraucht um die operativen Kosten zu decken.", + "expenses": "Ausgaben", + "payments-total": "{{ value, currency }} ausbezahlt an {{ recipientsCount }} Empfänger:innen", + "payments-last-month": "Letzter Monat: {{ value, currency }} an {{ recipientsCount }} Empfänger:innen", + "total-costs": "{{ value, currency }} fees and costs", + "payment-fees": "Zustellgebühren: {{ value, currency }}", + "payment-fees-tooltip": "Dies beinhaltet die Transaktionsgebühren von Zahlungsportalen wie Stripe.", + "transaction-fees": "Transaktionsgebühren: {{ value, currency }}", + "transaction-fees-tooltip": "Dies beinhaltet Kontogebühren, Geldwechselgebühren, sowie Währungsverluste.", + "operating-costs": "Operative Kosten: {{ value, currency }}", + "operating-costs-tooltip": "Dies beinhaltet Kosten für Saläre, Marketing, Fundraising.", + "other-costs": "Andere Kosten: {{ value, currency }}", + "other-costs-tooltip": "??", + + "reserves": "Reserven", + "covers-payments": "Reserven decken Auszahlungen für", + "covers-payments-1": "{{ recipientsCount }} Empfänger:innen für {{ monthsCount }} Monate", + "covers-payments-2": "{{ recipientsCount }} Empfänger:innen für einen Monat", + "reserves-text": "Wir halten liquide Mittel um Zahlungen über mehrere Monate ohne Neugeld finanzieren zu können." } } diff --git a/shared/locales/en/website-transparency.json b/shared/locales/en/website-transparency.json index aab607e14..d151d083c 100644 --- a/shared/locales/en/website-transparency.json +++ b/shared/locales/en/website-transparency.json @@ -1,14 +1,52 @@ { - "finances": { - "title": "Current Finances", - "totalContributionsByMonthAndType": "Total Contributions", - "totalInstitutionalContributionsByMonthTooltip": "Total Institutional Contributions: {{value, currency}}", - "totalIndividualContributionsByMonthTooltip": "Total Individual Contributions: {{value, currency}}", - "totalPayout": "Total Payout", - "totalPayoutTooltip": "Total Payouts: {{value, currency}}", - "totalRecipients": "Total Recipients", - "totalRecipientsTooltip": "Total Recipients till selected month: {{value}}", - "monthlyPayoutPerSocialIncome": "Monthly Payout Per Social Income", - "monthlyPayoutPerSocialIncomeTooltip": "Social Income Value: {{value, currency}}" + "amount": "{{ value, currency }}", + "amount-since-march-2020": "Total amount since March 2020", + "future-payouts": "To be paid out: {{ value, currency }}", + "past-payouts": "Already paid out: {{ value, currency }}", + "section-1": { + "title-1": "Transparency builds trust.", + "title-2": "Trust builds solidarity.", + "since-march-2020": "Since March 2020", + "totalContributions": "{{ contributorCount }} contributors donated a total of {{value, currency}}", + "totalPayments": "{{ value }} mobile money payments made", + "totalRecipients": "{{ value }} recipients enrolled for a 3-year program" + }, + "section-2": { + "title": "How is Social Income funded?", + "donations": "Donations", + "contributions-from": "{{ value, currency }} contributions from", + "individuals": "{{ count }} Individuals", + "institutions": "{{ count }} Institutions", + "used-for-fees": "Used to cover payment fees: {{ value, currency }}", + "used-for-operating-costs": "Used to cover operational costs: {{ value, currency }}" + }, + "section-3": { + "title": "Where are our contributors from?", + "subtitle": "We received contributions from {{ value }} countries.", + "country-amount": "{{ value, currency }} from {{ contributorsCount }} contributors", + "all-countries": "Show All Countries" + }, + "section-4": { + "title": "How are the funds used?", + "subtitle": "Recurring individual donations are always paid out to 100%. Institutional donations are used to cover our operational costs.", + "expenses": "Expenses", + "payments-total": "{{ value, currency }} paid out to {{ recipientsCount }} recipients", + "payments-last-month": "Last month: {{ value, currency }} to {{ recipientsCount }} recipients", + + "total-costs": "{{ value, currency }} fees and costs", + "payment-fees": "Payment fees: {{ value, currency }}", + "payment-fees-tooltip": "This includes transaction fees charged by payment providers like Stripe.", + "transaction-fees": "Transaction fees: {{ value, currency }}", + "transaction-fees-tooltip": "This includes bank account fees, exchange rate fees, or foreign currency losses.", + "operating-costs": "Operating costs: {{ value, currency }}", + "operating-costs-tooltip": "This includes salaries, fundraising, and other costs to run the organization.", + "other-costs": "Other costs: {{ value, currency }}", + "other-costs-tooltip": "??", + "reserves": "Reserves", + + "covers-payments": "This covers payments for", + "covers-payments-1": "{{ recipientsCount }} recipients for {{ monthsCount }} months", + "covers-payments-2": "{{ recipientsCount }} recipients for 1 month", + "reserves-text": "We keep liquid funds to make sure we can cover payments over multiple months without being dependent on contributions." } } diff --git a/shared/src/utils/stats/ContributionStatsCalculator.test.ts b/shared/src/utils/stats/ContributionStatsCalculator.test.ts index 9358493b8..c78c1bbee 100644 --- a/shared/src/utils/stats/ContributionStatsCalculator.test.ts +++ b/shared/src/utils/stats/ContributionStatsCalculator.test.ts @@ -29,14 +29,14 @@ test('building ContributionStatsCalculator', async () => { }); test('calculate overall contributions', async () => { - expect(calculator.totalContributions()).toEqual(2400); + expect(calculator.totalContributionsAmount()).toEqual(2400); }); test('calculate contributions by currency', async () => { expect(calculator.totalContributionsByCurrency()).toEqual( expect.arrayContaining([ - { amount: 400, currency: 'USD' }, - { amount: 2000, currency: 'CHF' }, + { amount: 400, currency: 'USD', usersCount: 1 }, + { amount: 2000, currency: 'CHF', usersCount: 1 }, ]), ); }); @@ -44,8 +44,8 @@ test('calculate contributions by currency', async () => { test('calculate contributions by isInstitutuion', async () => { expect(calculator.totalContributionsByIsInstitution()).toEqual( expect.arrayContaining([ - { amount: 400, isInstitution: 'false' }, - { amount: 2000, isInstitution: 'true' }, + { amount: 400, isInstitution: 'false', usersCount: 1 }, + { amount: 2000, isInstitution: 'true', usersCount: 1 }, ]), ); }); @@ -53,8 +53,8 @@ test('calculate contributions by isInstitutuion', async () => { test('calculate contributions by country', async () => { expect(calculator.totalContributionsByCountry()).toEqual( expect.arrayContaining([ - { amount: 400, country: 'US' }, - { amount: 2000, country: 'CH' }, + { amount: 400, country: 'US', usersCount: 1 }, + { amount: 2000, country: 'CH', usersCount: 1 }, ]), ); }); @@ -62,8 +62,8 @@ test('calculate contributions by country', async () => { test('calculate contributions by source', async () => { expect(calculator.totalContributionsBySource()).toEqual( expect.arrayContaining([ - { amount: 2000, source: 'benevity' }, - { amount: 400, source: 'stripe' }, + { amount: 2000, source: 'benevity', usersCount: 1 }, + { amount: 400, source: 'stripe', usersCount: 1 }, ]), ); }); @@ -71,10 +71,10 @@ test('calculate contributions by source', async () => { test('calculate contributions by first day in month', async () => { expect(calculator.totalContributionsByMonth()).toEqual( expect.arrayContaining([ - { amount: 1100, month: '2023-01' }, - { amount: 100, month: '2023-02' }, - { amount: 100, month: '2023-03' }, - { amount: 1100, month: '2023-04' }, + { amount: 1100, month: '2023-01', usersCount: 2 }, + { amount: 100, month: '2023-02', usersCount: 1 }, + { amount: 100, month: '2023-03', usersCount: 1 }, + { amount: 1100, month: '2023-04', usersCount: 2 }, ]), ); }); diff --git a/shared/src/utils/stats/ContributionStatsCalculator.ts b/shared/src/utils/stats/ContributionStatsCalculator.ts index 8483b4e43..d00351d84 100644 --- a/shared/src/utils/stats/ContributionStatsCalculator.ts +++ b/shared/src/utils/stats/ContributionStatsCalculator.ts @@ -6,7 +6,13 @@ import { getLatestExchangeRate } from '../exchangeRates'; import { cumulativeSum, StatsEntry } from './utils'; export interface ContributionStats { - totalContributions: number; + totalContributionsAmount: number; + totalContributionsCount: number; + totalContributorsCount: number; + totalIndividualContributionsAmount: number; + totalIndividualContributorsCount: number; + totalInstitutionalContributionsAmount: number; + totalInstitutionalContributorsCount: number; totalContributionsByCurrency: Record[]; totalContributionsByIsInstitution: StatsEntry[]; totalContributionsByCountry: StatsEntry[]; @@ -38,7 +44,7 @@ type ContributionStatsEntry = { export class ContributionStatsCalculator { readonly contributions: _.Collection; - constructor(contributions: _.Collection) { + private constructor(contributions: _.Collection) { this.contributions = contributions; } @@ -78,7 +84,7 @@ export class ContributionStatsCalculator { } return { userId: userDoc.id, - isInstitution: user.institution ?? false, + isInstitution: Boolean(user.institution), country: user.location?.toUpperCase() ?? 'CH', amount: contribution.amount_chf * exchangeRate, paymentFees: contribution.fees_chf * exchangeRate, @@ -95,8 +101,8 @@ export class ContributionStatsCalculator { return new ContributionStatsCalculator(_(contributions.flat())); } - totalContributions = () => { - return this.contributions.sumBy((c) => c.amount); + totalContributionsAmount = () => { + return this.contributions.sumBy('amount'); }; totalContributionsByCurrency = () => { @@ -128,7 +134,8 @@ export class ContributionStatsCalculator { .groupBy(attribute) .map((contributions, group) => ({ [attribute]: group, - amount: _.sumBy(contributions, (c) => c.amount), + amount: _.sumBy(contributions, 'amount'), + usersCount: _.size(_.countBy(contributions, 'userId')), })) .sortBy((x) => x[attribute]) .value(); @@ -166,10 +173,20 @@ export class ContributionStatsCalculator { }; allStats = (): ContributionStats => { + const totalContributionsByIsInstitution = this.totalContributionsByIsInstitution(); + const totalIndividualContributions = totalContributionsByIsInstitution.find((e) => e.isInstitution === 'false'); + const totalInstitutionalContributions = totalContributionsByIsInstitution.find((e) => e.isInstitution === 'true'); + return { - totalContributions: this.totalContributions(), + totalContributionsAmount: this.totalContributionsAmount(), + totalContributionsCount: this.contributions.size(), + totalContributorsCount: this.contributions.groupBy('userId').size(), + totalIndividualContributionsAmount: totalIndividualContributions?.amount || 0, + totalIndividualContributorsCount: totalIndividualContributions?.usersCount || 0, + totalInstitutionalContributionsAmount: totalInstitutionalContributions?.amount || 0, + totalInstitutionalContributorsCount: totalInstitutionalContributions?.usersCount || 0, totalContributionsByCurrency: this.totalContributionsByCurrency(), - totalContributionsByIsInstitution: this.totalContributionsByIsInstitution(), + totalContributionsByIsInstitution: totalContributionsByIsInstitution, totalContributionsByCountry: this.totalContributionsByCountry(), totalContributionsBySource: this.totalContributionsBySource(), totalContributionsByMonth: this.totalContributionsByMonth(), diff --git a/shared/src/utils/stats/PaymentStatsCalculator.ts b/shared/src/utils/stats/PaymentStatsCalculator.ts index c2123f27a..c27ad01c0 100644 --- a/shared/src/utils/stats/PaymentStatsCalculator.ts +++ b/shared/src/utils/stats/PaymentStatsCalculator.ts @@ -6,12 +6,14 @@ import { getLatestExchangeRate } from '../exchangeRates'; import { cumulativeSum, groupByAndSort, StatsEntry } from './utils'; export interface PaymentStats { - totalPayments: number; + totalPaymentsAmount: number; + totalPaymentsCount: number; totalPaymentsByMonth: StatsEntry[]; socialIncomesByMonth: StatsEntry[]; cumulativePaymentsByMonth: StatsEntry[]; cumulativeRecipientsByMonth: StatsEntry[]; meanPaymentsByMonth: StatsEntry[]; + totalRecipientsCount: number; } /** @@ -20,7 +22,7 @@ export interface PaymentStats { type PaymentStatsEntry = { recipientId: string; amount: number; - amountSle: number; + amountSLE: number; month: string; }; @@ -50,7 +52,7 @@ export class PaymentStatsCalculator { return { recipientId: paymentDoc.ref.parent?.parent?.id, amount: payment.amount_chf! * exchangeRate, - amountSle: payment.currency === 'SLE' ? payment.amount : payment.amount / 1000, + amountSLE: payment.currency === 'SLE' ? payment.amount : payment.amount / 1000, // some payments are in SLE, some in SLL month: toDateTime(payment.payment_at).toFormat('yyyy-MM'), } as PaymentStatsEntry; }); @@ -95,10 +97,11 @@ export class PaymentStatsCalculator { ) => { return this.payments .groupBy(groupAttribute) - .map((contributions, group) => ({ + .map((payments, group) => ({ [groupAttribute]: group, - payment: aggregate(contributions, 'amount'), - paymentSle: aggregate(contributions, 'amountSle'), + amount: aggregate(payments, 'amount'), + amountSLE: aggregate(payments, 'amountSLE'), + recipientsCount: _.size(_.groupBy(payments, 'recipientId')), })) .sortBy((x) => x[groupAttribute]) .value(); @@ -140,12 +143,14 @@ export class PaymentStatsCalculator { allStats = (): PaymentStats => { return { - totalPayments: this.totalPayments(), + totalPaymentsAmount: this.totalPayments(), + totalPaymentsCount: this.payments.size(), totalPaymentsByMonth: this.totalPaymentsByMonth(), cumulativePaymentsByMonth: this.cumulativePaymentsByMonth(), cumulativeRecipientsByMonth: this.cumulativeRecipientsByMonth(), meanPaymentsByMonth: this.meanPaymentsByMonth(), socialIncomesByMonth: this.socialIncomesByMonth(), + totalRecipientsCount: this.payments.groupBy('recipientId').size(), } as PaymentStats; }; } diff --git a/ui/daisyui-themes.ts b/ui/daisyui-themes.ts index 68d168a0e..6261ee489 100644 --- a/ui/daisyui-themes.ts +++ b/ui/daisyui-themes.ts @@ -1,5 +1,5 @@ export const defaultTheme = { - neutral: '#c1c4c7', + neutral: '#a4a4b2', 'neutral-content': '#1E293B', 'base-100': '#fefffe', diff --git a/ui/src/components/badge/badge.tsx b/ui/src/components/badge/badge.tsx new file mode 100644 index 000000000..29783b255 --- /dev/null +++ b/ui/src/components/badge/badge.tsx @@ -0,0 +1,8 @@ +'use client'; + +import { Badge as DaisyUIBadge } from 'react-daisyui'; +import { BadgeProps } from 'react-daisyui/dist/Badge/Badge'; + +export function Badge(props: BadgeProps) { + return ; +} diff --git a/ui/src/components/badge/index.ts b/ui/src/components/badge/index.ts new file mode 100644 index 000000000..1566eee00 --- /dev/null +++ b/ui/src/components/badge/index.ts @@ -0,0 +1 @@ +export * from './badge'; diff --git a/ui/src/components/index.ts b/ui/src/components/index.ts deleted file mode 100644 index 0c4c24632..000000000 --- a/ui/src/components/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { BaseContainer } from './containers'; -export { Typography } from './typography'; diff --git a/ui/src/components/tooltip/index.tsx b/ui/src/components/tooltip/index.tsx new file mode 100644 index 000000000..ed8326d5e --- /dev/null +++ b/ui/src/components/tooltip/index.tsx @@ -0,0 +1 @@ +export * from './tooltip'; diff --git a/ui/src/components/tooltip/tooltip.tsx b/ui/src/components/tooltip/tooltip.tsx new file mode 100644 index 000000000..19437f85e --- /dev/null +++ b/ui/src/components/tooltip/tooltip.tsx @@ -0,0 +1,8 @@ +'use client'; + +import { Tooltip as DaisyUITooltip } from 'react-daisyui'; +import { TooltipProps } from 'react-daisyui/dist/Tooltip/Tooltip'; + +export function Tooltip(props: TooltipProps) { + return ; +} diff --git a/ui/src/components/typography/typography.tsx b/ui/src/components/typography/typography.tsx index ed0fd44d3..0c15aa880 100644 --- a/ui/src/components/typography/typography.tsx +++ b/ui/src/components/typography/typography.tsx @@ -29,6 +29,7 @@ const FONT_WEIGHT_MAP: { [key in FontWeight]: string } = { type FontColor = Extract< Color, | 'base-content' + | 'primary' | 'primary-content' | 'secondary' | 'secondary-focus' @@ -51,6 +52,7 @@ type FontColor = Extract< const FONT_COLOR_MAP: { [key in FontColor]: string } = { 'base-content': 'text-base-content', + primary: 'text-primary', 'primary-content': 'text-primary-content', secondary: 'text-secondary', 'secondary-focus': 'text-secondary-focus', diff --git a/ui/src/index.ts b/ui/src/index.ts index 0fa6b50c1..8a3687726 100644 --- a/ui/src/index.ts +++ b/ui/src/index.ts @@ -3,6 +3,9 @@ import './globals.css'; // Overwrite Default DaisyUI Styles import './daisyui.css'; -export * from './components/index'; +export { Badge } from './components/badge'; +export { BaseContainer } from './components/containers'; +export { Tooltip } from './components/tooltip'; +export { Typography } from './components/typography'; export * from './lib/index'; export * from './react-daisyui'; diff --git a/website/package.json b/website/package.json index 771dd283d..c1cfd4bfd 100644 --- a/website/package.json +++ b/website/package.json @@ -28,7 +28,6 @@ "accept-language-parser": "^1.5.0", "classnames": "^2.3.2", "firebase": "^9.23.0", - "flag-icons": "^6.11.0", "formik": "^2.4.3", "i18next": "^23.4.6", "lodash": "^4.17.21", diff --git a/website/src/app/[lang]/[country]/(website)/(home)/section-4.tsx b/website/src/app/[lang]/[country]/(website)/(home)/section-4.tsx index 7c861fcc8..8a010c191 100644 --- a/website/src/app/[lang]/[country]/(website)/(home)/section-4.tsx +++ b/website/src/app/[lang]/[country]/(website)/(home)/section-4.tsx @@ -10,7 +10,7 @@ export default async function Section4({ params }: DefaultPageProps) { return ( -
+

{translator.t('section-4.title-1')} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/charts/page.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/charts/page.tsx index 47ffacb3d..049e68b94 100644 --- a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/charts/page.tsx +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/charts/page.tsx @@ -30,7 +30,7 @@ export default async function Page(props: TransparencyPageProps) { return ( - Total contributions: {contributionStats.totalContributions} + Total contributions: {contributionStats.totalContributionsAmount} - [translator?.t('finances.totalPayoutTooltip', { context: { currency, value } })]} - /> + [translator?.t('amount', { context: { currency, value } })]} /> diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/contribution-stats.ts b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/contribution-stats.ts deleted file mode 100644 index 57cb937ef..000000000 --- a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/contribution-stats.ts +++ /dev/null @@ -1,261 +0,0 @@ -// TODO: Remove file -// This file has only been added to make local development easier. - -import { ContributionStats } from '@socialincome/shared/src/utils/stats/ContributionStatsCalculator'; - -export const contributionStats: ContributionStats = { - totalContributions: 183672.18999999965, - totalContributionsByCurrency: [ - { currency: 'CHF', amount: 105099.73 }, - { currency: 'EUR', amount: 11047.759999999993 }, - { currency: 'USD', amount: 67524.69999999997 }, - ], - totalContributionsByIsInstitution: [ - { isInstitution: 'false', amount: 140370.91999999975 }, - { isInstitution: 'true', amount: 43301.270000000004 }, - ], - totalContributionsByCountry: [ - { country: 'AR', amount: 52.98 }, - { country: 'AT', amount: 343.92 }, - { country: 'BG', amount: 842.17 }, - { country: 'CH', amount: 147292.5799999999 }, - { country: 'CR', amount: 12982.370000000004 }, - { country: 'DE', amount: 3021.369999999998 }, - { country: 'DO', amount: 89.97 }, - { country: 'ES', amount: 1729.6000000000001 }, - { country: 'FR', amount: 1609.0800000000008 }, - { country: 'GB', amount: 3253.529999999999 }, - { country: 'IT', amount: 1338.5799999999997 }, - { country: 'PL', amount: 47.41 }, - { country: 'SN', amount: 16.61 }, - { country: 'TR', amount: 239.82 }, - { country: 'US', amount: 4321.239999999998 }, - { country: 'ZA', amount: 6490.96 }, - ], - totalContributionsBySource: [ - { source: 'benevity', amount: 47947 }, - { source: 'cash', amount: 1500 }, - { source: 'stripe', amount: 121346.56999999988 }, - { source: 'wire-transfer', amount: 12184 }, - ], - totalContributionsByMonth: [ - { month: '2020-03', amount: 383 }, - { month: '2020-04', amount: 763.43 }, - { month: '2020-05', amount: 1049.3899999999999 }, - { month: '2020-06', amount: 255.66 }, - { month: '2020-07', amount: 218.49 }, - { month: '2020-08', amount: 407.90999999999997 }, - { month: '2020-09', amount: 801.5000000000001 }, - { month: '2020-10', amount: 905.44 }, - { month: '2020-11', amount: 7813.03 }, - { month: '2020-12', amount: 2118.7499999999995 }, - { month: '2021-01', amount: 1683.9699999999998 }, - { month: '2021-02', amount: 1799.63 }, - { month: '2021-03', amount: 2965.85 }, - { month: '2021-04', amount: 1913.9499999999998 }, - { month: '2021-05', amount: 2112.22 }, - { month: '2021-06', amount: 2752.1 }, - { month: '2021-07', amount: 2059.54 }, - { month: '2021-08', amount: 2894.36 }, - { month: '2021-09', amount: 2691.4599999999996 }, - { month: '2021-10', amount: 2068.1499999999996 }, - { month: '2021-11', amount: 3322.0499999999997 }, - { month: '2021-12', amount: 21885.350000000002 }, - { month: '2022-01', amount: 2461.52 }, - { month: '2022-02', amount: 2376.4200000000005 }, - { month: '2022-03', amount: 3558.07 }, - { month: '2022-04', amount: 3254.9 }, - { month: '2022-05', amount: 31161.129999999994 }, - { month: '2022-06', amount: 5579.29 }, - { month: '2022-07', amount: 4605.9400000000005 }, - { month: '2022-08', amount: 4979.67 }, - { month: '2022-09', amount: 3696.5 }, - { month: '2022-10', amount: 4582.360000000001 }, - { month: '2022-11', amount: 4027.2200000000007 }, - { month: '2022-12', amount: 8254.86 }, - { month: '2023-01', amount: 4266.46 }, - { month: '2023-02', amount: 7103.360000000001 }, - { month: '2023-03', amount: 5791.320000000001 }, - { month: '2023-04', amount: 6170.830000000001 }, - { month: '2023-05', amount: 4068.2699999999995 }, - { month: '2023-06', amount: 7569.129999999999 }, - { month: '2023-07', amount: 4742.590000000001 }, - { month: '2023-08', amount: 2557.1200000000003 }, - ], - totalContributionsByMonthAndType: [ - { month: '2020-03', institutional: 383, individual: 0 }, - { - month: '2020-04', - institutional: 883, - individual: 263.42999999999995, - }, - { month: '2020-05', institutional: 987.23, individual: 1208.59 }, - { month: '2020-06', institutional: 987.23, individual: 1464.25 }, - { month: '2020-07', institutional: 987.23, individual: 1682.74 }, - { month: '2020-08', institutional: 987.23, individual: 2090.65 }, - { - month: '2020-09', - institutional: 1262.3600000000001, - individual: 2617.02, - }, - { - month: '2020-10', - institutional: 1292.3600000000001, - individual: 3492.46, - }, - { - month: '2020-11', - institutional: 6972.280000000001, - individual: 5625.57, - }, - { - month: '2020-12', - institutional: 6972.280000000001, - individual: 7744.32, - }, - { - month: '2021-01', - institutional: 6972.280000000001, - individual: 9428.289999999999, - }, - { - month: '2021-02', - institutional: 6972.280000000001, - individual: 11227.919999999998, - }, - { - month: '2021-03', - institutional: 6972.280000000001, - individual: 14193.769999999999, - }, - { - month: '2021-04', - institutional: 7027.27, - individual: 16052.729999999998, - }, - { - month: '2021-05', - institutional: 7027.27, - individual: 18164.949999999997, - }, - { - month: '2021-06', - institutional: 7027.27, - individual: 20917.049999999996, - }, - { - month: '2021-07', - institutional: 7027.27, - individual: 22976.589999999997, - }, - { - month: '2021-08', - institutional: 8027.27, - individual: 24870.949999999997, - }, - { - month: '2021-09', - institutional: 8027.27, - individual: 27562.409999999996, - }, - { - month: '2021-10', - institutional: 8027.27, - individual: 29630.559999999998, - }, - { month: '2021-11', institutional: 8027.27, individual: 32952.61 }, - { - month: '2021-12', - institutional: 16901.27, - individual: 45963.96000000001, - }, - { month: '2022-01', institutional: 16901.27, individual: 48425.48 }, - { month: '2022-02', institutional: 17145.27, individual: 50557.9 }, - { month: '2022-03', institutional: 17145.27, individual: 54115.97 }, - { month: '2022-04', institutional: 17145.27, individual: 57370.87 }, - { - month: '2022-05', - institutional: 36011.270000000004, - individual: 69666, - }, - { - month: '2022-06', - institutional: 36211.270000000004, - individual: 75045.29, - }, - { - month: '2022-07', - institutional: 36311.270000000004, - individual: 79551.23, - }, - { - month: '2022-08', - institutional: 36411.270000000004, - individual: 84430.9, - }, - { - month: '2022-09', - institutional: 36511.270000000004, - individual: 88027.4, - }, - { - month: '2022-10', - institutional: 36511.270000000004, - individual: 92609.76, - }, - { - month: '2022-11', - institutional: 36611.270000000004, - individual: 96536.98, - }, - { - month: '2022-12', - institutional: 36611.270000000004, - individual: 104791.84, - }, - { - month: '2023-01', - institutional: 36611.270000000004, - individual: 109058.3, - }, - { - month: '2023-02', - institutional: 38871.270000000004, - individual: 113901.66, - }, - { - month: '2023-03', - institutional: 39951.270000000004, - individual: 118612.98000000001, - }, - { - month: '2023-04', - institutional: 41031.270000000004, - individual: 123703.81000000001, - }, - { - month: '2023-05', - institutional: 41031.270000000004, - individual: 127772.08000000002, - }, - { - month: '2023-06', - institutional: 43301.270000000004, - individual: 133071.21000000002, - }, - { - month: '2023-07', - institutional: 43301.270000000004, - individual: 137813.80000000002, - }, - { - month: '2023-08', - institutional: 43301.270000000004, - individual: 140370.92, - }, - ], - totalPaymentFeesByIsInstitution: [ - { isInstitution: 'false', amount: 3362.360000000013 }, - { isInstitution: 'true', amount: 217.60000000000002 }, - ], -}; diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/info-card.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/info-card.tsx new file mode 100644 index 000000000..7e2bfd9ea --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/info-card.tsx @@ -0,0 +1,53 @@ +import { Typography } from '@socialincome/ui'; +import _ from 'lodash'; +import { ReactElement } from 'react'; + +type TransparencyCardProps = { + sectionTitle: string; + title: string; + text: string; + + firstIcon?: ReactElement; + firstContent?: ReactElement; + + secondIcon?: ReactElement; + secondContent?: ReactElement; +}; + +export function InfoCard({ + sectionTitle, + title, + text, + firstIcon, + firstContent, + secondIcon, + secondContent, +}: TransparencyCardProps) { + return ( +

+
+ {sectionTitle} + + {title} + + + {text} + +
+
+ {!_.isNil(firstIcon) && !_.isNil(firstContent) && ( +
+
{firstIcon}
+
{firstContent}
+
+ )} + {!_.isNil(secondIcon) && !_.isNil(secondContent) && ( +
+
{secondIcon}
+
{secondContent}
+
+ )} +
+
+ ); +} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/page.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/page.tsx index b1e9778b4..49636c63a 100644 --- a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/page.tsx +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/page.tsx @@ -1,15 +1,18 @@ -import { DefaultPageProps } from '@/app/[lang]/[country]'; -import { contributionStats } from '@/app/[lang]/[country]/(website)/transparency/[currency]/contribution-stats'; -import { paymentStats } from '@/app/[lang]/[country]/(website)/transparency/[currency]/payment-stats'; +import { DefaultPageProps, DefaultParams } from '@/app/[lang]/[country]'; import { firestoreAdmin } from '@/firebase-admin'; import { ValidCountry, WebsiteLanguage } from '@/i18n'; -import { ContributionStatsCalculator } from '@socialincome/shared/src/utils/stats/ContributionStatsCalculator'; -import { PaymentStatsCalculator } from '@socialincome/shared/src/utils/stats/PaymentStatsCalculator'; -import { BaseContainer, Typography } from '@socialincome/ui'; -import flagCH from 'flag-icons/flags/4x3/ch.svg'; -import flagSL from 'flag-icons/flags/4x3/sl.svg'; -import Image from 'next/image'; +import { + ContributionStats, + ContributionStatsCalculator, +} from '@socialincome/shared/src/utils/stats/ContributionStatsCalculator'; +import { PaymentStats, PaymentStatsCalculator } from '@socialincome/shared/src/utils/stats/PaymentStatsCalculator'; +import { BaseContainer } from '@socialincome/ui'; +import { Section1 } from './section-1'; +import { Section2 } from './section-2'; +import { Section3 } from './section-3'; +import { Section4 } from './section-4'; +export const revalidate = 3600; // update once an hour export const generateStaticParams = () => ['USD', 'CHF'].map((currency) => ({ currency: currency.toLowerCase() })); export type TransparencyPageProps = { @@ -20,7 +23,13 @@ export type TransparencyPageProps = { }; } & DefaultPageProps; -export default async function Page(props: TransparencyPageProps) { +export type SectionProps = { + params: DefaultParams & { currency: string }; + contributionStats: ContributionStats; + paymentStats: PaymentStats; +}; + +export default async function Page({ params }: TransparencyPageProps) { const getStats = async (currency: string) => { const contributionCalculator = await ContributionStatsCalculator.build(firestoreAdmin, currency); const contributionStats = contributionCalculator.allStats(); @@ -28,18 +37,16 @@ export default async function Page(props: TransparencyPageProps) { const paymentStats = paymentCalculator.allStats(); return { contributionStats, paymentStats }; }; - - // TODO: Uncomment when deleting ./payment-stats.ts and ./contribution-stats.ts files - // const { contributionStats, paymentStats } = await getStats(props.params.currency); + const { contributionStats, paymentStats } = await getStats(params.currency.toUpperCase()); return ( - - Sierra Leone Flag - Swiss Flag - Contribution Stats - {JSON.stringify(contributionStats)} - Payment Stats - {JSON.stringify(paymentStats)} + +
+ + + + +
); } diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/payment-stats.ts b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/payment-stats.ts deleted file mode 100644 index a2afa9acb..000000000 --- a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/payment-stats.ts +++ /dev/null @@ -1,341 +0,0 @@ -import { PaymentStats } from '@socialincome/shared/src/utils/stats/PaymentStatsCalculator'; - -export const paymentStats: PaymentStats = { - totalPayments: 64221.059999999954, - totalPaymentsByMonth: [ - { month: '2020-03', payment: 176.04, paymentSle: 1800 }, - { month: '2020-04', payment: 177.96, paymentSle: 1800 }, - { month: '2020-05', payment: 177.78, paymentSle: 1800 }, - { month: '2020-06', payment: 231.17999999999998, paymentSle: 2400 }, - { month: '2020-07', payment: 228.51999999999998, paymentSle: 2400 }, - { month: '2020-08', payment: 249.56000000000003, paymentSle: 2700 }, - { month: '2020-09', payment: 249.95999999999995, paymentSle: 2700 }, - { month: '2020-10', payment: 303.16, paymentSle: 3300 }, - { month: '2020-11', payment: 410.2400000000002, paymentSle: 4500 }, - { month: '2020-12', payment: 499.94, paymentSle: 5700 }, - { month: '2021-01', payment: 497.78, paymentSle: 5700 }, - { month: '2021-02', payment: 681.6100000000001, paymentSle: 7800 }, - { month: '2021-03', payment: 819.2200000000001, paymentSle: 9000 }, - { month: '2021-04', payment: 919.6700000000008, paymentSle: 10200 }, - { month: '2021-05', payment: 897.2299999999997, paymentSle: 10200 }, - { - month: '2021-06', - payment: 1054.4000000000003, - paymentSle: 12000, - }, - { - month: '2021-07', - payment: 1070.7999999999995, - paymentSle: 12000, - }, - { - month: '2021-08', - payment: 1071.9999999999993, - paymentSle: 12000, - }, - { - month: '2021-09', - payment: 1321.4999999999998, - paymentSle: 15000, - }, - { month: '2021-10', payment: 1301.999999999999, paymentSle: 15000 }, - { - month: '2021-11', - payment: 1381.5999999999985, - paymentSle: 16500, - }, - { - month: '2021-12', - payment: 1357.9500000000019, - paymentSle: 16500, - }, - { - month: '2022-01', - payment: 1326.5999999999988, - paymentSle: 16500, - }, - { - month: '2022-02', - payment: 1649.7900000000018, - paymentSle: 20700, - }, - { month: '2022-03', payment: 1657.379999999999, paymentSle: 20700 }, - { - month: '2022-04', - payment: 1580.7900000000016, - paymentSle: 20700, - }, - { - month: '2022-05', - payment: 1632.5400000000016, - paymentSle: 20700, - }, - { - month: '2022-06', - payment: 1570.4399999999996, - paymentSle: 20700, - }, - { month: '2022-07', payment: 2060.339999999997, paymentSle: 27600 }, - { - month: '2022-08', - payment: 2433.5999999999976, - paymentSle: 36000, - }, - { - month: '2022-09', - payment: 2659.0000000000005, - paymentSle: 40000, - }, - { month: '2022-10', payment: 2436.119999999994, paymentSle: 40400 }, - { month: '2022-11', payment: 2355.370000000001, paymentSle: 44800 }, - { month: '2022-12', payment: 2437.910000000001, paymentSle: 49201 }, - { - month: '2023-01', - payment: 2329.2000000000016, - paymentSle: 48000, - }, - { - month: '2023-02', - payment: 2969.5999999999954, - paymentSle: 64000, - }, - { month: '2023-03', payment: 2731.26, paymentSle: 61000 }, - { month: '2023-04', payment: 2810.579999999995, paymentSle: 69500 }, - { - month: '2023-05', - payment: 2734.1600000000053, - paymentSle: 69500, - }, - { month: '2023-06', payment: 3796.360000000003, paymentSle: 95900 }, - { month: '2023-07', payment: 4142.879999999986, paymentSle: 95900 }, - { month: '2023-08', payment: 3827.039999999995, paymentSle: 95200 }, - ], - cumulativePaymentsByMonth: [ - { month: '2020-03', payment: 176.04, paymentSle: 1800 }, - { month: '2020-04', payment: 354, paymentSle: 3600 }, - { month: '2020-05', payment: 531.78, paymentSle: 5400 }, - { month: '2020-06', payment: 762.9599999999999, paymentSle: 7800 }, - { month: '2020-07', payment: 991.4799999999999, paymentSle: 10200 }, - { month: '2020-08', payment: 1241.04, paymentSle: 12900 }, - { month: '2020-09', payment: 1491, paymentSle: 15600 }, - { month: '2020-10', payment: 1794.16, paymentSle: 18900 }, - { month: '2020-11', payment: 2204.4, paymentSle: 23400 }, - { month: '2020-12', payment: 2704.34, paymentSle: 29100 }, - { month: '2021-01', payment: 3202.12, paymentSle: 34800 }, - { month: '2021-02', payment: 3883.73, paymentSle: 42600 }, - { month: '2021-03', payment: 4702.95, paymentSle: 51600 }, - { month: '2021-04', payment: 5622.620000000001, paymentSle: 61800 }, - { month: '2021-05', payment: 6519.85, paymentSle: 72000 }, - { month: '2021-06', payment: 7574.250000000001, paymentSle: 84000 }, - { month: '2021-07', payment: 8645.050000000001, paymentSle: 96000 }, - { - month: '2021-08', - payment: 9717.050000000001, - paymentSle: 108000, - }, - { - month: '2021-09', - payment: 11038.550000000001, - paymentSle: 123000, - }, - { month: '2021-10', payment: 12340.55, paymentSle: 138000 }, - { - month: '2021-11', - payment: 13722.149999999998, - paymentSle: 154500, - }, - { month: '2021-12', payment: 15080.1, paymentSle: 171000 }, - { month: '2022-01', payment: 16406.7, paymentSle: 187500 }, - { month: '2022-02', payment: 18056.49, paymentSle: 208200 }, - { month: '2022-03', payment: 19713.87, paymentSle: 228900 }, - { month: '2022-04', payment: 21294.66, paymentSle: 249600 }, - { month: '2022-05', payment: 22927.2, paymentSle: 270300 }, - { month: '2022-06', payment: 24497.64, paymentSle: 291000 }, - { - month: '2022-07', - payment: 26557.979999999996, - paymentSle: 318600, - }, - { - month: '2022-08', - payment: 28991.579999999994, - paymentSle: 354600, - }, - { - month: '2022-09', - payment: 31650.579999999994, - paymentSle: 394600, - }, - { - month: '2022-10', - payment: 34086.69999999999, - paymentSle: 435000, - }, - { - month: '2022-11', - payment: 36442.06999999999, - paymentSle: 479800, - }, - { - month: '2022-12', - payment: 38879.979999999996, - paymentSle: 529001, - }, - { month: '2023-01', payment: 41209.18, paymentSle: 577001 }, - { month: '2023-02', payment: 44178.78, paymentSle: 641001 }, - { month: '2023-03', payment: 46910.04, paymentSle: 702001 }, - { - month: '2023-04', - payment: 49720.619999999995, - paymentSle: 771501, - }, - { month: '2023-05', payment: 52454.78, paymentSle: 841001 }, - { month: '2023-06', payment: 56251.14, paymentSle: 936901 }, - { - month: '2023-07', - payment: 60394.01999999998, - paymentSle: 1032801, - }, - { - month: '2023-08', - payment: 64221.059999999976, - paymentSle: 1128001, - }, - ], - cumulativeRecipientsByMonth: [ - { month: '2020-03', recipients: 6 }, - { month: '2020-04', recipients: 6 }, - { month: '2020-05', recipients: 6 }, - { month: '2020-06', recipients: 8 }, - { month: '2020-07', recipients: 8 }, - { month: '2020-08', recipients: 9 }, - { month: '2020-09', recipients: 9 }, - { month: '2020-10', recipients: 11 }, - { month: '2020-11', recipients: 15 }, - { month: '2020-12', recipients: 19 }, - { month: '2021-01', recipients: 19 }, - { month: '2021-02', recipients: 26 }, - { month: '2021-03', recipients: 30 }, - { month: '2021-04', recipients: 34 }, - { month: '2021-05', recipients: 34 }, - { month: '2021-06', recipients: 40 }, - { month: '2021-07', recipients: 40 }, - { month: '2021-08', recipients: 40 }, - { month: '2021-09', recipients: 50 }, - { month: '2021-10', recipients: 50 }, - { month: '2021-11', recipients: 55 }, - { month: '2021-12', recipients: 55 }, - { month: '2022-01', recipients: 55 }, - { month: '2022-02', recipients: 69 }, - { month: '2022-03', recipients: 69 }, - { month: '2022-04', recipients: 69 }, - { month: '2022-05', recipients: 69 }, - { month: '2022-06', recipients: 69 }, - { month: '2022-07', recipients: 69 }, - { month: '2022-08', recipients: 90 }, - { month: '2022-09', recipients: 100 }, - { month: '2022-10', recipients: 101 }, - { month: '2022-11', recipients: 112 }, - { month: '2022-12', recipients: 121 }, - { month: '2023-01', recipients: 121 }, - { month: '2023-02', recipients: 129 }, - { month: '2023-03', recipients: 129 }, - { month: '2023-04', recipients: 146 }, - { month: '2023-05', recipients: 146 }, - { month: '2023-06', recipients: 146 }, - { month: '2023-07', recipients: 146 }, - { month: '2023-08', recipients: 146 }, - ], - meanPaymentsByMonth: [ - { month: '2020-03', payment: 29.34, paymentSle: 300 }, - { month: '2020-04', payment: 29.66, paymentSle: 300 }, - { month: '2020-05', payment: 29.63, paymentSle: 300 }, - { month: '2020-06', payment: 28.897499999999997, paymentSle: 300 }, - { month: '2020-07', payment: 28.564999999999998, paymentSle: 300 }, - { month: '2020-08', payment: 27.728888888888893, paymentSle: 300 }, - { month: '2020-09', payment: 27.773333333333326, paymentSle: 300 }, - { month: '2020-10', payment: 27.560000000000002, paymentSle: 300 }, - { month: '2020-11', payment: 27.349333333333345, paymentSle: 300 }, - { month: '2020-12', payment: 26.312631578947368, paymentSle: 300 }, - { month: '2021-01', payment: 26.198947368421052, paymentSle: 300 }, - { month: '2021-02', payment: 26.215769230769236, paymentSle: 300 }, - { month: '2021-03', payment: 27.30733333333334, paymentSle: 300 }, - { month: '2021-04', payment: 27.049117647058846, paymentSle: 300 }, - { month: '2021-05', payment: 26.389117647058814, paymentSle: 300 }, - { month: '2021-06', payment: 26.360000000000007, paymentSle: 300 }, - { month: '2021-07', payment: 26.76999999999999, paymentSle: 300 }, - { month: '2021-08', payment: 26.799999999999983, paymentSle: 300 }, - { month: '2021-09', payment: 26.429999999999996, paymentSle: 300 }, - { month: '2021-10', payment: 26.03999999999998, paymentSle: 300 }, - { month: '2021-11', payment: 25.119999999999973, paymentSle: 300 }, - { month: '2021-12', payment: 24.690000000000033, paymentSle: 300 }, - { month: '2022-01', payment: 24.119999999999976, paymentSle: 300 }, - { month: '2022-02', payment: 23.910000000000025, paymentSle: 300 }, - { month: '2022-03', payment: 24.019999999999985, paymentSle: 300 }, - { month: '2022-04', payment: 22.91000000000002, paymentSle: 300 }, - { month: '2022-05', payment: 23.66000000000002, paymentSle: 300 }, - { month: '2022-06', payment: 22.759999999999994, paymentSle: 300 }, - { month: '2022-07', payment: 29.859999999999957, paymentSle: 400 }, - { month: '2022-08', payment: 27.039999999999974, paymentSle: 400 }, - { month: '2022-09', payment: 26.590000000000003, paymentSle: 400 }, - { month: '2022-10', payment: 24.11999999999994, paymentSle: 400 }, - { month: '2022-11', payment: 21.030089285714293, paymentSle: 400 }, - { - month: '2022-12', - payment: 19.82040650406505, - paymentSle: 400.0081300813008, - }, - { month: '2023-01', payment: 19.410000000000014, paymentSle: 400 }, - { month: '2023-02', payment: 23.199999999999964, paymentSle: 500 }, - { month: '2023-03', payment: 22.38737704918033, paymentSle: 500 }, - { month: '2023-04', payment: 20.219999999999963, paymentSle: 500 }, - { month: '2023-05', payment: 19.67021582733817, paymentSle: 500 }, - { month: '2023-06', payment: 27.71065693430659, paymentSle: 700 }, - { month: '2023-07', payment: 30.239999999999895, paymentSle: 700 }, - { month: '2023-08', payment: 28.13999999999996, paymentSle: 700 }, - ], - socialIncomesByMonth: [ - { month: '2020-03', payment: 6 }, - { month: '2020-04', payment: 6 }, - { month: '2020-05', payment: 6 }, - { month: '2020-06', payment: 8 }, - { month: '2020-07', payment: 8 }, - { month: '2020-08', payment: 9 }, - { month: '2020-09', payment: 9 }, - { month: '2020-10', payment: 11 }, - { month: '2020-11', payment: 15 }, - { month: '2020-12', payment: 19 }, - { month: '2021-01', payment: 19 }, - { month: '2021-02', payment: 26 }, - { month: '2021-03', payment: 30 }, - { month: '2021-04', payment: 34 }, - { month: '2021-05', payment: 34 }, - { month: '2021-06', payment: 40 }, - { month: '2021-07', payment: 40 }, - { month: '2021-08', payment: 40 }, - { month: '2021-09', payment: 50 }, - { month: '2021-10', payment: 50 }, - { month: '2021-11', payment: 55 }, - { month: '2021-12', payment: 55 }, - { month: '2022-01', payment: 55 }, - { month: '2022-02', payment: 69 }, - { month: '2022-03', payment: 69 }, - { month: '2022-04', payment: 69 }, - { month: '2022-05', payment: 69 }, - { month: '2022-06', payment: 69 }, - { month: '2022-07', payment: 69 }, - { month: '2022-08', payment: 90 }, - { month: '2022-09', payment: 100 }, - { month: '2022-10', payment: 101 }, - { month: '2022-11', payment: 112 }, - { month: '2022-12', payment: 123 }, - { month: '2023-01', payment: 120 }, - { month: '2023-02', payment: 128 }, - { month: '2023-03', payment: 122 }, - { month: '2023-04', payment: 139 }, - { month: '2023-05', payment: 139 }, - { month: '2023-06', payment: 137 }, - { month: '2023-07', payment: 137 }, - { month: '2023-08', payment: 136 }, - ], -}; diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-1.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-1.tsx new file mode 100644 index 000000000..e80ff81da --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-1.tsx @@ -0,0 +1,47 @@ +import { SectionProps } from '@/app/[lang]/[country]/(website)/transparency/[currency]/page'; +import { Translator } from '@socialincome/shared/src/utils/i18n'; +import { Typography } from '@socialincome/ui'; +import _ from 'lodash'; + +export async function Section1({ params, paymentStats, contributionStats }: SectionProps) { + const translator = await Translator.getInstance({ language: params.lang, namespaces: ['website-transparency'] }); + + const cards = [ + translator.t('section-1.totalPayments', { + context: { value: paymentStats.totalPaymentsCount }, + }), + translator.t('section-1.totalRecipients', { + context: { + value: _.last(paymentStats.cumulativeRecipientsByMonth)?.recipients, + }, + }), + translator.t('section-1.totalContributions', { + context: { + contributorCount: contributionStats.totalContributorsCount, + value: contributionStats.totalContributionsAmount, + currency: params.currency, + }, + }), + ]; + + return ( +
+
+ + {translator.t('section-1.title-1')} + + + {translator.t('section-1.title-2')} + +
+ {translator.t('section-1.since-march-2020')} + {cards.map((card, index) => ( +
+ + {card} + +
+ ))} +
+ ); +} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-2.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-2.tsx new file mode 100644 index 000000000..a1eeabf3a --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-2.tsx @@ -0,0 +1,95 @@ +import { SectionProps } from '@/app/[lang]/[country]/(website)/transparency/[currency]/page'; +import { HeartIcon } from '@heroicons/react/24/outline'; +import { Translator } from '@socialincome/shared/src/utils/i18n'; +import { Badge, Typography } from '@socialincome/ui'; +import _ from 'lodash'; +import { InfoCard } from './info-card'; + +export async function Section2({ params, contributionStats, paymentStats }: SectionProps) { + const translator = await Translator.getInstance({ language: params.lang, namespaces: ['website-transparency'] }); + const paymentFees = _.sumBy(contributionStats.totalPaymentFeesByIsInstitution, 'amount'); + const transactionFees = 8600; + const operatingCosts = 9300; + const otherCosts = 9600; + + return ( +
+ + {translator.t('section-2.title')} + + } + firstContent={ +
+
+ + {translator.t('section-2.contributions-from', { + context: { value: contributionStats.totalIndividualContributionsAmount, currency: params.currency }, + })} + + {translator.t('section-2.individuals', { + context: { count: contributionStats.totalIndividualContributorsCount }, + })} + + +
+ + {translator.t('past-payouts', { + context: { + value: paymentStats.totalPaymentsAmount, + currency: params.currency, + }, + })} + + + {translator.t('future-payouts', { + context: { + value: contributionStats.totalIndividualContributionsAmount - paymentStats.totalPaymentsAmount, + currency: params.currency, + }, + })} + +
+ } + secondIcon={} + secondContent={ +
+
+ + {translator.t('section-2.contributions-from', { + context: { + value: contributionStats.totalInstitutionalContributionsAmount, + currency: params.currency, + }, + })} + + {translator.t('section-2.institutions', { + context: { count: contributionStats.totalInstitutionalContributorsCount }, + })} + + +
+ + {translator.t('section-2.used-for-fees', { + context: { value: paymentFees, currency: params.currency }, + })} + + + {translator.t('section-2.used-for-operating-costs', { + context: { + value: paymentFees + transactionFees + operatingCosts + otherCosts, + currency: params.currency, + }, + })} + +
+ } + /> +
+ ); +} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3-cards.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3-cards.tsx new file mode 100644 index 000000000..605b35575 --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3-cards.tsx @@ -0,0 +1,53 @@ +'use client'; + +import { Button, Typography } from '@socialincome/ui'; +import { Children, PropsWithChildren, useState } from 'react'; + +/** + * We use the files from GitHub instead of the package so that donations from new countries are automatically supported. + */ +const getFlagImageURL = (country: string) => { + return `https://raw.githubusercontent.com/lipis/flag-icons/a87d8b256743c9b0df05f20de2c76a7975119045/flags/4x3/${country.toLowerCase()}.svg`; +}; + +type CountryCardProps = { + country: string; + translations: { + country: string; + total: string; + }; +}; + +/* eslint-disable @next/next/no-img-element */ +export function CountryCard({ country, translations }: CountryCardProps) { + return ( +
  • +
    + +
    + + {translations.country} + + {translations.total} +
    +
    +
  • + ); +} + +export function CountryCardList({ children, buttonText }: PropsWithChildren<{ buttonText: string }>) { + const [expanded, setExpanded] = useState(false); + + return ( +
    +
      + {!expanded ? Children.toArray(children).slice(0, 6) : children} +
    + {!expanded && ( + + )} +
    + ); +} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3.tsx new file mode 100644 index 000000000..1f5ae09c9 --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-3.tsx @@ -0,0 +1,43 @@ +import { SectionProps } from '@/app/[lang]/[country]/(website)/transparency/[currency]/page'; +import { Translator } from '@socialincome/shared/src/utils/i18n'; +import { Typography } from '@socialincome/ui'; +import { CountryCard, CountryCardList } from './section-3-cards'; + +export async function Section3({ params, contributionStats }: SectionProps) { + const translator = await Translator.getInstance({ + language: params.lang, + namespaces: ['countries', 'website-transparency'], + }); + const totalContributionsByCountry = contributionStats.totalContributionsByCountry as { + country: string; + amount: number; + usersCount: number; + }[]; + + return ( +
    + + {translator.t('section-3.title')} + + + {translator.t('section-3.subtitle', { context: { value: totalContributionsByCountry.length } })} + + + {totalContributionsByCountry + .sort((a, b) => b.amount - a.amount) + .map((entry, index) => ( + + ))} + +
    + ); +} diff --git a/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-4.tsx b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-4.tsx new file mode 100644 index 000000000..05befd173 --- /dev/null +++ b/website/src/app/[lang]/[country]/(website)/transparency/[currency]/section-4.tsx @@ -0,0 +1,174 @@ +import { InfoCard } from '@/app/[lang]/[country]/(website)/transparency/[currency]/info-card'; +import { SectionProps } from '@/app/[lang]/[country]/(website)/transparency/[currency]/page'; +import { firestoreAdmin } from '@/firebase-admin'; +import { InformationCircleIcon } from '@heroicons/react/24/outline'; +import { BanknotesIcon, BuildingLibraryIcon, DevicePhoneMobileIcon } from '@heroicons/react/24/solid'; +import { PAYMENT_AMOUNT } from '@socialincome/shared/src/types'; +import { getLatestExchangeRate } from '@socialincome/shared/src/utils/exchangeRates'; +import { Translator } from '@socialincome/shared/src/utils/i18n'; +import { Tooltip, Typography } from '@socialincome/ui'; +import _ from 'lodash'; + +// TODO: fix tooltips on mobile +export async function Section4({ params, paymentStats, contributionStats }: SectionProps) { + const translator = await Translator.getInstance({ language: params.lang, namespaces: ['website-transparency'] }); + const paymentFees = _.sumBy(contributionStats.totalPaymentFeesByIsInstitution, 'amount'); + + // TODO: make these dynamic + const transactionFees = 8600; + const operatingCosts = 9300; + const otherCosts = 9600; + const totalExpenses = paymentFees + transactionFees + operatingCosts + otherCosts + paymentStats.totalPaymentsAmount; + const totalReserves = contributionStats.totalContributionsAmount - totalExpenses; + const exchangeRateSLE = await getLatestExchangeRate(firestoreAdmin, 'SLE'); + + return ( +
    +
    + + {translator.t('section-4.title')} + + + {translator.t('section-4.subtitle')} + +
    + } + firstContent={ +
    +
    + + {translator.t('section-4.payments-total', { + context: { + value: paymentStats.totalPaymentsAmount, + currency: params.currency, + recipientsCount: paymentStats.totalRecipientsCount, + }, + })} + +
    + + {translator.t('section-4.payments-last-month', { + context: { + value: _.last(paymentStats.totalPaymentsByMonth)?.amount, + currency: params.currency, + recipientsCount: _.last(paymentStats.totalPaymentsByMonth)?.recipientsCount, + }, + })} + + + {translator.t('future-payouts', { + context: { + value: contributionStats.totalIndividualContributionsAmount - paymentStats.totalPaymentsAmount, + currency: params.currency, + }, + })} + +
    + } + secondIcon={} + secondContent={ +
    +
    + + {translator.t('section-4.total-costs', { + context: { + value: paymentFees + transactionFees + operatingCosts + otherCosts, + currency: params.currency, + }, + })} + +
    + + {translator.t('section-4.payment-fees', { + context: { + value: paymentFees, + currency: params.currency, + }, + })} + + + + + + {translator.t('section-4.transaction-fees', { + context: { + value: transactionFees, + currency: params.currency, + }, + })} + + + + + + {translator.t('section-4.operating-costs', { + context: { + value: operatingCosts, + currency: params.currency, + }, + })} + + + + + + {translator.t('section-4.other-costs', { + context: { + value: otherCosts, + currency: params.currency, + }, + })} + + + + +
    + } + /> + + } + firstContent={ +
    + + {translator.t('section-4.covers-payments')} + + + {translator.t('section-4.covers-payments-1', { + context: { + recipientsCount: (totalReserves / (PAYMENT_AMOUNT / exchangeRateSLE) / 36).toFixed(0), + monthsCount: 36, + }, + })} + + + {translator.t('section-4.covers-payments-2', { + context: { + recipientsCount: (totalReserves / (PAYMENT_AMOUNT / exchangeRateSLE)).toFixed(0), + }, + })} + +
    + } + secondIcon={} + secondContent={ +
    + + {translator.t('section-4.reserves')} + + {translator.t('section-4.reserves-text')} +
    + } + /> +
    + ); +} diff --git a/website/src/i18n.ts b/website/src/i18n.ts index 4ee0f8838..f07f06888 100644 --- a/website/src/i18n.ts +++ b/website/src/i18n.ts @@ -3,7 +3,7 @@ import langParser from 'accept-language-parser'; import { NextRequest, NextResponse } from 'next/server'; export const defaultCountry = 'us'; -export const countries = ['us', 'ca', 'ch', 'sl']; +export const countries = ['us', 'ch', 'sl']; export type ValidCountry = (typeof countries)[number]; export const defaultLanguage = 'en'; @@ -12,6 +12,8 @@ export const websiteLanguages: WebsiteLanguage[] = ['en', 'de', 'kri']; const findBestLocale = (request: NextRequest) => { const options = langParser.parse(request.headers.get('Accept-Language') || 'en'); + // TODO: make sure country is supported + // TODO: save country/language/currency in cookie if manually updated const requestCountry = request.geo?.country?.toLowerCase(); console.log('requestCountry', requestCountry); @@ -26,8 +28,8 @@ const findBestLocale = (request: NextRequest) => { return { language: bestOption?.code || defaultLanguage, country: - bestOption?.region || (websiteLanguages.includes(requestCountry as WebsiteLanguage) && requestCountry) || + bestOption?.region || defaultCountry, }; };